baycomepp-0.10.orig/0042755000175100017510000000000007511777225012425 5ustar abaababaycomepp-0.10.orig/Makefile.in0100644000175100017510000002754507511777220014475 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ SUBDIRS = intl po directx main udriver eppdiag eppfm eppfm2 flexdrv ntdrv w9xdrv INCLUDES = -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" EXTRA_DIST = ABOUT-NLS baycomepp.spec cfgwindows cfgwindowsnodebug cfgdos ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = DIST_COMMON = README ./stamp-h.in ABOUT-NLS AUTHORS COPYING ChangeLog \ INSTALL Makefile.am Makefile.in NEWS acconfig.h aclocal.m4 config.guess \ config.h.in config.sub configure configure.in install-sh missing \ mkinstalldirs 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 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: # 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 config.h all-redirect: all-recursive-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-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 # 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: baycomepp-0.10.orig/README0100644000175100017510000000014406761313770013274 0ustar abaabaCompiling sources with RPM: rpm --rebuild baycomepp-0.7.src.rpm or rpm -ta baycomepp-0.7.tar.gz baycomepp-0.10.orig/stamp-h.in0100644000175100017510000000001207511775545014315 0ustar abaabatimestamp baycomepp-0.10.orig/ABOUT-NLS0100644000175100017510000002660306733244662013655 0ustar abaabaNotes 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 December 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 December 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 ru sl sv .----------------------------------------------------. bash | [] [] [] | 3 bison | [] [] [] | 3 clisp | [] [] [] [] | 4 cpio | [] [] [] [] [] [] | 6 diffutils | [] [] [] [] [] | 5 enscript | [] [] [] [] [] [] | 6 fileutils | [] [] [] [] [] [] [] [] [] [] | 10 findutils | [] [] [] [] [] [] [] [] [] | 9 flex | [] [] [] [] | 4 gcal | [] [] [] [] [] | 5 gettext | [] [] [] [] [] [] [] [] [] [] [] | 12 grep | [] [] [] [] [] [] [] [] [] [] | 10 hello | [] [] [] [] [] [] [] [] [] [] [] | 11 id-utils | [] [] [] | 3 indent | [] [] [] [] [] | 5 libc | [] [] [] [] [] [] [] | 7 m4 | [] [] [] [] [] [] | 6 make | [] [] [] [] [] [] | 6 music | [] [] | 2 ptx | [] [] [] [] [] [] [] [] | 8 recode | [] [] [] [] [] [] [] [] [] | 9 sh-utils | [] [] [] [] [] [] [] [] | 8 sharutils | [] [] [] [] [] [] | 6 tar | [] [] [] [] [] [] [] [] [] [] [] | 11 texinfo | [] [] [] | 3 textutils | [] [] [] [] [] [] [] [] [] | 9 wdiff | [] [] [] [] [] [] [] [] | 8 `----------------------------------------------------' 17 languages cs da de en es fi fr it ja ko nl no pl pt ru sl sv 27 packages 6 4 25 1 18 1 26 2 1 12 20 9 19 7 4 7 17 179 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 December 1997 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. baycomepp-0.10.orig/AUTHORS0100644000175100017510000000004706706650714013467 0ustar abaabaThomas Sailer, baycomepp-0.10.orig/COPYING0100644000175100017510000004307606706650621013460 0ustar abaaba GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, 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 Appendix: 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., 675 Mass Ave, Cambridge, MA 02139, 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. baycomepp-0.10.orig/ChangeLog0100644000175100017510000000000006706650715014157 0ustar abaababaycomepp-0.10.orig/INSTALL0100644000175100017510000001722706761311567013461 0ustar abaabaBasic 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. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--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. baycomepp-0.10.orig/Makefile.am0100644000175100017510000000044707143571122014446 0ustar abaaba## Process this file with automake to produce Makefile.in SUBDIRS = intl po directx main udriver eppdiag eppfm eppfm2 flexdrv ntdrv w9xdrv INCLUDES = -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" EXTRA_DIST = ABOUT-NLS baycomepp.spec cfgwindows cfgwindowsnodebug cfgdos baycomepp-0.10.orig/NEWS0100644000175100017510000000024406706650714013115 0ustar abaabaVersion 0.4 eppfpga: - new test "ppsig": checks for errors in the parport related wiring baycomepp: - can now configure the interface (i.e. callsign, ip addrs) baycomepp-0.10.orig/acconfig.h0100644000175100017510000000173106743660132014336 0ustar abaaba/* define if we want ppuser support */ #undef HAVE_PPUSER /* define if we want kernel driver parport access support */ #undef HAVE_PPKDRV /* define if int8_t and friends are available */ #undef HAVE_BITTYPES /* define if struct ifreq has the ifr_newname symbol */ #undef HAVE_GETSYSTEMTIME /* define if inb and friends are available */ #undef HAVE_IOFUNCS /* define if we have found the MKISS driver (line discipline) */ #undef HAVE_MKISS /* define if M_PI is not defined by math.h */ #undef M_PI /* define if M_LN10 is not defined by math.h */ #undef M_LN10 /* define if struct ifreq has the ifr_newname symbol */ #undef HAVE_IFRNEWNAME /* define if we have DirectX includes */ #undef HAVE_DIRECTX /* define if National Language Support is requested */ #undef ENABLE_NLS /* NLS stuff */ #undef HAVE_CATGETS #undef HAVE_GETTEXT #undef HAVE_LC_MESSAGES #undef HAVE_STPCPY /* various directories */ #undef PACKAGE_LOCALE_DIR #undef PACKAGE_DATA_DIR #undef PACKAGE_SOURCE_DIR baycomepp-0.10.orig/aclocal.m40100644000175100017510000023006507511775525014267 0ustar abaabadnl aclocal.m4 generated automatically by aclocal 1.4-p5 dnl Copyright (C) 1994, 1995-8, 1999, 2001 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. # 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]) 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([,]))]) # isc-posix.m4 serial 1 (gettext-0.10.40) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # This test replaces the one in autoconf. # Currently this macro should have the same name as the autoconf macro # because gettext's gettext.m4 (distributed in the automake package) # still uses it. Otherwise, the use in gettext.m4 makes autoheader # give these diagnostics: # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX undefine([AC_ISC_POSIX]) AC_DEFUN([AC_ISC_POSIX], [ dnl This test replaces the obsolescent AC_ISC_POSIX kludge. AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) ] ) # 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 ]) # gettext.m4 serial 13 (gettext-0.11.1) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2002. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])]) define(gt_included_intl, ifelse([$1], [external], [no], [yes])) define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], [])) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) 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) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ 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 GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. dnl Add a version number to the cache macros. define([gt_api_version], ifelse([$2], [need-ngettext], 2, 1)) define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, [AC_TRY_LINK([#include extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no)]) if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], gt_cv_func_gnugettext_libintl, [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings + *_nl_expand_alias (0)], gt_cv_func_gnugettext_libintl=yes, gt_cv_func_gnugettext_libintl=no) dnl Now see whether libintl exists and depends on libiconv. if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings + *_nl_expand_alias (0)], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext_libintl=yes ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if test "$gt_cv_func_gnugettext_libc" = "yes" \ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ && test "$PACKAGE" != gettext; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included 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)" BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) AC_SUBST(INTLOBJS) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl Checks for all prerequisites of the po subdirectory, dnl except for USE_NLS. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Search for GNU xgettext 0.11 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :) dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then dnl If it is no GNU msgfmt we define it as : so that the dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` AC_MSG_RESULT( [found $GMSGFMT program is not GNU msgfmt; ignore it]) GMSGFMT=":" fi fi dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. 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 --copyright-holder= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po fi AC_OUTPUT_COMMANDS([ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' fi case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= GMOFILES= UPDATEPOFILES= DUMMYPOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done], [# Capture the value of obsolete $ALL_LINGUAS because we need it to compute # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it # from automake. eval 'ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])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_REQUIRE([jm_GLIBC21])dnl AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) AM_ICONV AM_LANGINFO_CODESET AM_LC_MESSAGES dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) AC_DEFUN([AM_MKINSTALLDIRS], [ 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) ]) # lib-link.m4 serial 1 (gettext-0.11) dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L, dnl sys_lib_search_path_spec, sys_lib_dlsearch_path_spec. AC_DEFUN([AC_LIB_RPATH], [ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec" sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec" ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "X$found_dir" = "X/usr/lib"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) # lib-prefix.m4 serial 1 (gettext-0.11) dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) # lib-ld.m4 serial 1 (gettext-0.11) dnl Copyright (C) 1996-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) # iconv.m4 serial AM3 (gettext-0.11) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AC_REQUIRE([AM_ICONV_LINK]) if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) # progtest.m4 serial 2 (gettext-0.10.40) dnl Copyright (C) 1996-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. # Search path for a program which passes the given test. 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 ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # Test for the GNU C Library, version 2.1 or newer. # From Bruno Haible. AC_DEFUN([jm_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no) ] ) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ] ) # codeset.m4 serial AM1 (gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) # lcmessage.m4 serial 2 (gettext-0.10.40) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . 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, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # Configure paths for GTK+ # Owen Taylor 97-11-3 dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS dnl AC_DEFUN(AM_PATH_GTK, [dnl dnl Get the cflags and libraries from the gtk-config script dnl AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], gtk_config_prefix="$withval", gtk_config_prefix="") AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="") AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], , enable_gtktest=yes) for module in . $4 do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi AC_PATH_PROG(GTK_CONFIG, gtk-config, no) min_gtk_version=ifelse([$1], ,0.99.7,$1) AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" dnl dnl Now check if the installed GTK is sufficiently new. (Also sanity dnl checks the results of gtk-config to some extent dnl rm -f conf.gtktest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" AC_TRY_LINK([ #include #include ], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) rm -f conf.gtktest ]) # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_SUBST($1_TRUE) AC_SUBST($1_FALSE) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi]) baycomepp-0.10.orig/config.guess0100755000175100017510000007477407141052605014746 0ustar abaaba#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 # 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. # Please send patches to . # # 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). # # Use $HOST_CC if defined. $CC may point to a cross-compiler if test x"$CC_FOR_BUILD" = x; then if test x"$HOST_CC" != x; then CC_FOR_BUILD="$HOST_CC" else if test x"$CC" != x; then CC_FOR_BUILD="$CC" else CC_FOR_BUILD=cc fi fi fi # 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 dummy=dummy-$$ 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:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # 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. cat <$dummy.s .globl main .ent main main: .frame \$30,0,\$26,0 .prologue 0 .long 0x47e03d80 # implver $0 lda \$2,259 .long 0x47e20c21 # amask $2,$1 srl \$1,8,\$2 sll \$2,2,\$2 sll \$0,3,\$0 addl \$1,\$0,\$0 addl \$2,\$0,\$0 ret \$31,(\$26),1 .end main EOF $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then ./$dummy case "$?" in 7) UNAME_MACHINE="alpha" ;; 15) UNAME_MACHINE="alphaev5" ;; 14) UNAME_MACHINE="alphaev56" ;; 10) UNAME_MACHINE="alphapca56" ;; 16) UNAME_MACHINE="alphaev6" ;; esac fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix 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 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; arc64:OpenBSD:*:*) echo mips64el-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hkmips:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; arm32:NetBSD:*:*) echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; SR2?01:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-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 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; atari*:NetBSD:*:*) echo m68k-atari-netbsd${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; sun3*:NetBSD:*:*) echo m68k-sun-netbsd${UNAME_RELEASE} exit 0 ;; sun3*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:NetBSD:*:*) echo m68k-apple-netbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; macppc:NetBSD:*:*) echo powerpc-apple-netbsd${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy 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 ] || [ $UNAME_PROCESSOR = mc88110] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${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?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_FOR_BUILD $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) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | 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/[34678]??:HP-UX:*:*) case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) sed 's/^ //' << EOF >$dummy.c #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` rm -f $dummy.c $dummy 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_FOR_BUILD $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 ;; *9??*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i?86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; hppa*:OpenBSD:*:*) echo hppa-unknown-openbsd 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*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY*T3E:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F300:UNIX_System_V:*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; F301:UNIX_System_V:*:*) echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` exit 0 ;; hp3[0-9][05]:NetBSD:*:*) echo m68k-hp-netbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; i?86:BSD/386:*:* | i?86:BSD/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) if test -x /usr/bin/objformat; then if test "elf" = "`/usr/bin/objformat`"; then echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` exit 0 fi fi 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 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i386-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin 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. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. ld_help_string=`cd /; ld --help 2>&1` ld_supported_emulations=`echo $ld_help_string \ | sed -ne '/supported emulations:/!d s/[ ][ ]*/ /g s/.*supported emulations: *// s/ .*// p'` case "$ld_supported_emulations" in *ia64) echo "${UNAME_MACHINE}-unknown-linux" exit 0 ;; i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; elf32arm*) echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; armelf_linux*) echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; elf32ppc) # Determine Lib Version cat >$dummy.c < #if defined(__GLIBC__) extern char __libc_version[]; extern char __libc_release[]; #endif main(argc, argv) int argc; char *argv[]; { #if defined(__GLIBC__) printf("%s %s\n", __libc_version, __libc_release); #else printf("unkown\n"); #endif return 0; } EOF LIBC="" $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null if test "$?" = 0 ; then ./$dummy | grep 1\.99 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi rm -f $dummy.c $dummy echo powerpc-unknown-linux-gnu${LIBC} exit 0 ;; esac if test "${UNAME_MACHINE}" = "alpha" ; then sed 's/^ //' <$dummy.s .globl main .ent main main: .frame \$30,0,\$26,0 .prologue 0 .long 0x47e03d80 # implver $0 lda \$2,259 .long 0x47e20c21 # amask $2,$1 srl \$1,8,\$2 sll \$2,2,\$2 sll \$0,3,\$0 addl \$1,\$0,\$0 addl \$2,\$0,\$0 ret \$31,(\$26),1 .end main EOF LIBC="" $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then ./$dummy case "$?" in 7) UNAME_MACHINE="alpha" ;; 15) UNAME_MACHINE="alphaev5" ;; 14) UNAME_MACHINE="alphaev56" ;; 10) UNAME_MACHINE="alphapca56" ;; 16) UNAME_MACHINE="alphaev6" ;; esac objdump --private-headers $dummy | \ grep ld.so.1 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 elif test "${UNAME_MACHINE}" = "mips" ; then cat >$dummy.c </dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy else # Either a pre-BFD a.out linker (linux-gnuoldld) # or one that does not give us useful --help. # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. # If ld does not provide *any* "supported emulations:" # that means it is gnuoldld. echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 case "${UNAME_MACHINE}" in i?86) VENDOR=pc; ;; *) VENDOR=unknown; ;; esac # Determine whether the default compiler is a.out or elf cat >$dummy.c < #ifdef __cplusplus int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif #else printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); #endif return 0; } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/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?86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; i?86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i?86:*:5:7*) # Fixed at (any) Pentium or better UNAME_MACHINE=i586 if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} fi exit 0 ;; i?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 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-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 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 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 ;; PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:*:6*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-qnx-qnx${UNAME_VERSION} 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`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); 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-pc-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_FOR_BUILD $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 baycomepp-0.10.orig/config.h.in0100644000175100017510000001646007511775544014454 0ustar abaaba/* config.h.in. Generated automatically from configure.in by autoheader. */ /* 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 as __inline if that's what the C compiler calls it. */ #undef inline /* Define to `long' if doesn't define. */ #undef off_t /* 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 we want ppuser support */ #undef HAVE_PPUSER /* define if we want kernel driver parport access support */ #undef HAVE_PPKDRV /* define if int8_t and friends are available */ #undef HAVE_BITTYPES /* define if struct ifreq has the ifr_newname symbol */ #undef HAVE_GETSYSTEMTIME /* define if inb and friends are available */ #undef HAVE_IOFUNCS /* define if we have found the MKISS driver (line discipline) */ #undef HAVE_MKISS /* define if M_PI is not defined by math.h */ #undef M_PI /* define if M_LN10 is not defined by math.h */ #undef M_LN10 /* define if struct ifreq has the ifr_newname symbol */ #undef HAVE_IFRNEWNAME /* define if we have DirectX includes */ #undef HAVE_DIRECTX /* various directories */ #undef PACKAGE_LOCALE_DIR #undef PACKAGE_DATA_DIR #undef PACKAGE_SOURCE_DIR /* 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 feof_unlocked function. */ #undef HAVE_FEOF_UNLOCKED /* Define if you have the fgets_unlocked function. */ #undef HAVE_FGETS_UNLOCKED /* Define if you have the getc_unlocked function. */ #undef HAVE_GETC_UNLOCKED /* Define if you have the getcwd function. */ #undef HAVE_GETCWD /* Define if you have the getegid function. */ #undef HAVE_GETEGID /* Define if you have the geteuid function. */ #undef HAVE_GETEUID /* Define if you have the getgid function. */ #undef HAVE_GETGID /* Define if you have the getopt_long function. */ #undef HAVE_GETOPT_LONG /* 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 getuid function. */ #undef HAVE_GETUID /* Define if you have the iopl function. */ #undef HAVE_IOPL /* Define if you have the mempcpy function. */ #undef HAVE_MEMPCPY /* Define if you have the munmap function. */ #undef HAVE_MUNMAP /* Define if you have the openpty function. */ #undef HAVE_OPENPTY /* Define if you have the putenv function. */ #undef HAVE_PUTENV /* Define if you have the random function. */ #undef HAVE_RANDOM /* Define if you have the revoke function. */ #undef HAVE_REVOKE /* 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 snprintf function. */ #undef HAVE_SNPRINTF /* 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 strdup function. */ #undef HAVE_STRDUP /* 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 tsearch function. */ #undef HAVE_TSEARCH /* Define if you have the vsnprintf function. */ #undef HAVE_VSNPRINTF /* Define if you have the vsyslog function. */ #undef HAVE_VSYSLOG /* 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_ASM_IO_H /* Define if you have the header file. */ #undef HAVE_GETOPT_H /* Define if you have the header file. */ #undef HAVE_LIMITS_H /* Define if you have the header file. */ #undef HAVE_LINUX_AX25_H /* Define if you have the header file. */ #undef HAVE_LINUX_IF_H /* Define if you have the header file. */ #undef HAVE_LINUX_SOCKIOS_H /* Define if you have the header file. */ #undef HAVE_LINUX_SOUNDCARD_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_NET_IF_H /* Define if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define if you have the header file. */ #undef HAVE_NL_TYPES_H /* Define if you have the header file. */ #undef HAVE_PTY_H /* Define if you have the header file. */ #undef HAVE_SCHED_H /* Define if you have the header file. */ #undef HAVE_STDDEF_H /* Define if you have the header file. */ #undef HAVE_STDLIB_H /* Define if you have the header file. */ #undef HAVE_STRING_H /* Define if you have the header file. */ #undef HAVE_SYS_IO_H /* Define if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define if you have the header file. */ #undef HAVE_SYS_PERM_H /* Define if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define if you have the header file. */ #undef HAVE_SYSLOG_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the header file. */ #undef HAVE_WINDOWS_H /* Define if you have the m library (-lm). */ #undef HAVE_LIBM /* Define if you have the util library (-lutil). */ #undef HAVE_LIBUTIL /* Name of package */ #undef PACKAGE /* Version number of package */ #undef VERSION /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT baycomepp-0.10.orig/config.sub0100755000175100017510000005772707141052605014410 0ustar abaaba#! /bin/sh # Configuration validation subroutine script, version 1.1. # Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc. # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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. # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. if [ x$1 = x ] then echo Configuration name missing. 1>&2 echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 echo "or $0 ALIAS" 1>&2 echo where ALIAS is a recognized configuration type. 1>&2 exit 1 fi # First pass through any local machine types. case $1 in *local*) echo $1 exit 0 ;; *) ;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in linux-gnu*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ | 580 | i960 | h8300 \ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \ | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ | mips64vr5000 | miprs64vr5000el | mcore \ | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ | thumb | d10v | fr30) basic_machine=$basic_machine-unknown ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i[34567]86) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. # FIXME: clean up the formatting here. vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ | xmp-* | ymp-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | clipper-* | orion-* \ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mipstx39-* | mipstx39el-* | mcore-* \ | f301-* | armv*-* | t3e-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* ) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-cbm ;; amigaos | amigados) basic_machine=m68k-cbm os=-amigaos ;; amigaunix | amix) basic_machine=m68k-cbm os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | ymp) basic_machine=ymp-cray os=-unicos ;; cray2) basic_machine=cray2-cray os=-unicos ;; [ctj]90-cray) basic_machine=c90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i[34567]86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i[34567]86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i[34567]86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i[34567]86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; i386-go32 | go32) basic_machine=i386-unknown os=-go32 ;; i386-mingw32 | mingw32) basic_machine=i386-unknown os=-mingw32 ;; i386-qnx | qnx) basic_machine=i386-qnx ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsel*-linux*) basic_machine=mipsel-unknown os=-linux-gnu ;; mips*-linux*) basic_machine=mips-unknown os=-linux-gnu ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; msdos) basic_machine=i386-unknown os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; np1) basic_machine=np1-gould ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexen) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=rs6000-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=t3e-cray os=-unicos ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xmp) basic_machine=xmp-cray os=-unicos ;; xps | xps100) basic_machine=xps100-honeywell ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; mips) if [ x$os = x-linux-gnu ]; then basic_machine=mips-unknown else basic_machine=mips-mips fi ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sparc | sparcv9) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; c4x*) basic_machine=c4x-none os=-coff ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*) # Remember, each alternative MUST END IN *, to match a version number. ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -ns2 ) os=-nextstep2 ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -qnx) os=-qnx4 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -*MiNT) os=-mint ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f301-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -*MiNT) vendor=atari ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os baycomepp-0.10.orig/configure0100755000175100017510000053424507511775526014346 0ustar abaaba#! /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 --with-gnu-ld assume the C compiler uses GNU ld [default=no]" ac_help="$ac_help --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir" 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-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir" ac_help="$ac_help --with-gtk-prefix=PFX Prefix where GTK is installed (optional)" ac_help="$ac_help --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)" ac_help="$ac_help --disable-gtktest Do not try to compile and run a test GTK program" ac_help="$ac_help --enable-driver Build user mode driver" ac_help="$ac_help --disable-mkiss Don not use the MKISS driver even if available" ac_help="$ac_help --enable-ppuser Enable PPUSER parport access method" ac_help="$ac_help --enable-ppkdrv Enable Linux Kernel driver parport access method" # 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=acconfig.h # 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 # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 echo "configure:562: checking for ld used by GCC" >&5 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 echo "configure:592: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 echo "configure:595: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'acl_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then echo "$ac_t""$LD" 1>&6 else echo "$ac_t""no" 1>&6 fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 echo "configure:630: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'acl_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi fi echo "$ac_t""$acl_cv_prog_gnu_ld" 1>&6 with_gnu_ld=$acl_cv_prog_gnu_ld 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. # Do some error checking and defaulting for the host and target type. # The inputs are: # configure --host=HOST --target=TARGET --build=BUILD NONOPT # # The rules are: # 1. You are not allowed to specify --host, --target, and nonopt at the # same time. # 2. Host defaults to nonopt. # 3. If nonopt is not specified, then host defaults to the current host, # as determined by config.guess. # 4. Target and build default to nonopt. # 5. If nonopt is not specified, then target and build default to host. # The aliases save the names the user supplied, while $host etc. # will get canonicalized. case $host---$target---$nonopt in NONE---*---* | *---NONE---* | *---*---NONE) ;; *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; esac # Make sure we can run config.sub. if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 echo "configure:694: checking host system type" >&5 host_alias=$host case "$host_alias" in NONE) case $nonopt in NONE) if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } fi ;; *) host_alias=$nonopt ;; esac ;; esac host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 echo "configure:715: checking target system type" >&5 target_alias=$target case "$target_alias" in NONE) case $nonopt in NONE) target_alias=$host_alias ;; *) target_alias=$nonopt ;; esac ;; esac target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 echo "configure:733: checking build system type" >&5 build_alias=$build case "$build_alias" in NONE) case $nonopt in NONE) build_alias=$host_alias ;; *) build_alias=$nonopt ;; esac ;; esac build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$build" 1>&6 test "$host_alias" != "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- # 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:768: 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:821: 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:878: 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=baycomepp VERSION=0.10 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:924: 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:937: 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:950: 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:963: 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:976: 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 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:995: 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 echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6 echo "configure:1023: checking for strerror in -lcposix" >&5 ac_lib_var=`echo cposix'_'strerror | 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="-lcposix $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 LIBS="$LIBS -lcposix" else echo "$ac_t""no" 1>&6 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:1067: 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:1097: 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:1148: 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:1180: 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 1191 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:1196: \"$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:1222: 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:1227: 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:1255: 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 for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6 echo "configure:1290: 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:1343: \"$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 working const""... $ac_c" 1>&6 echo "configure:1367: 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:1421: \"$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:1442: 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 <&6 echo "configure:1482: 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:1503: \"$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:1520: \"$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:1537: \"$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 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:1562: 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:1575: \"$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:1642: \"$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 # 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:1669: 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 # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1699: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="dlltool" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_DLLTOOL" && ac_cv_prog_DLLTOOL="dlltool" fi fi DLLTOOL="$ac_cv_prog_DLLTOOL" if test -n "$DLLTOOL"; then echo "$ac_t""$DLLTOOL" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1729: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="as" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_AS="as" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_AS" && ac_cv_prog_AS="as" fi fi AS="$ac_cv_prog_AS" if test -n "$AS"; then echo "$ac_t""$AS" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1759: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="ar" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_AR="ar" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar" fi fi AR="$ac_cv_prog_AR" if test -n "$AR"; then echo "$ac_t""$AR" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1789: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # 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_WINDRES="windres" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_WINDRES" && ac_cv_prog_WINDRES="i686-pc-cygwin-windres" fi fi WINDRES="$ac_cv_prog_WINDRES" if test -n "$WINDRES"; then echo "$ac_t""$WINDRES" 1>&6 else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 echo "configure:1818: checking for Cygwin environment" >&5 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_cygwin=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_cygwin=no fi rm -f conftest* rm -f conftest* fi echo "$ac_t""$ac_cv_cygwin" 1>&6 CYGWIN= test "$ac_cv_cygwin" = yes && CYGWIN=yes echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 echo "configure:1851: checking for mingw32 environment" >&5 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mingw32=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_mingw32=no fi rm -f conftest* rm -f conftest* fi echo "$ac_t""$ac_cv_mingw32" 1>&6 MINGW32= test "$ac_cv_mingw32" = yes && MINGW32=yes echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 echo "configure:1882: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$CYGWIN" = yes || test "$MINGW32" = yes; then ac_cv_exeext=.exe else rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= if { (eval echo configure:1892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in *.c | *.o | *.obj) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done else { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } fi rm -f conftest* test x"${ac_cv_exeext}" = x && ac_cv_exeext=no fi fi EXEEXT="" test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} echo "$ac_t""${ac_cv_exeext}" 1>&6 ac_exeext=$EXEEXT echo $ac_n "checking for object suffix""... $ac_c" 1>&6 echo "configure:1913: checking for object suffix" >&5 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftest* echo 'int i = 1;' > conftest.$ac_ext if { (eval echo configure:1919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then for ac_file in conftest.*; do case $ac_file in *.c) ;; *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; esac done else { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; } fi rm -f conftest* fi echo "$ac_t""$ac_cv_objext" 1>&6 OBJEXT=$ac_cv_objext ac_objext=$ac_cv_objext if test x$ac_cv_mingw32 != xyes; then echo $ac_n "checking for cos in -lm""... $ac_c" 1>&6 echo "configure:1939: checking for cos in -lm" >&5 ac_lib_var=`echo m'_'cos | 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="-lm $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 m | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi fi for ac_hdr in pty.h getopt.h sys/io.h asm/io.h windows.h sched.h sys/perm.h syslog.h sys/socket.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:1990: 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:2000: \"$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 net/if.h arpa/inet.h netinet/in.h linux/if.h linux/ax25.h linux/sockios.h linux/soundcard.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:2030: 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:2040: \"$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 snprintf gettimeofday iopl random syslog vsyslog revoke do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2069: 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:2097: \"$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 vsnprintf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2124: 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:2152: \"$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 getopt_long do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2181: 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:2209: \"$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 getopt.o getopt1.o" fi done xlibs=$LIBS LIBS= echo $ac_n "checking for openpty in -lutil""... $ac_c" 1>&6 echo "configure:2237: checking for openpty in -lutil" >&5 ac_lib_var=`echo util'_'openpty | 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="-lutil $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 util | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi for ac_func in openpty do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2286: 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:2314: \"$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 DRVLIBOBJS="$DRVLIBOBJS openpty.o" fi done LIBS=$xlibs ALL_LINGUAS="" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" echo $ac_n "checking for shared library run path origin""... $ac_c" 1>&6 echo "configure:2360: checking for shared library run path origin" >&5 if eval "test \"`echo '$''{'acl_cv_rpath'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi echo "$ac_t""$acl_cv_rpath" 1>&6 wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec" sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec" MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" 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:2397: 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 off_t""... $ac_c" 1>&6 echo "configure:2425: 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 size_t""... $ac_c" 1>&6 echo "configure:2458: 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 # 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:2493: 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:2505: \"$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:2526: 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:2559: \"$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:2591: 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:2621: 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:2649: \"$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:2676: 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:2703: \"$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 <&6 echo "configure:2728: 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:2738: \"$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:2767: 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:2795: \"$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:2820: 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 #if HAVE_SYS_TYPES_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if HAVE_UNISTD_H # include #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE /* 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:2981: \"$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 echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6 echo "configure:3005: checking whether we are using the GNU C Library 2.1 or newer" >&5 if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "Lucky GNU user" >/dev/null 2>&1; then rm -rf conftest* ac_cv_gnu_library_2_1=yes else rm -rf conftest* ac_cv_gnu_library_2_1=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_gnu_library_2_1" 1>&6 GLIBC21="$ac_cv_gnu_library_2_1" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then withval="$with_libiconv_prefix" if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBICONV= LTLIBICONV= INCICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "X$found_dir" = "X/usr/lib"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done echo $ac_n "checking for iconv""... $ac_c" 1>&6 echo "configure:3425: checking for iconv" >&5 if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat > conftest.$ac_ext < #include int main() { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } EOF if { (eval echo configure:3443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_func_iconv=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat > conftest.$ac_ext < #include int main() { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } EOF if { (eval echo configure:3465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_lib_iconv=yes am_cv_func_iconv=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* LIBS="$am_save_LIBS" fi fi echo "$ac_t""$am_cv_func_iconv" 1>&6 if test "$am_cv_func_iconv" = yes; then cat >> confdefs.h <<\EOF #define HAVE_ICONV 1 EOF fi if test "$am_cv_lib_iconv" = yes; then echo $ac_n "checking how to link with libiconv""... $ac_c" 1>&6 echo "configure:3488: checking how to link with libiconv" >&5 echo "$ac_t""$LIBICONV" 1>&6 else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi # 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:3504: 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 $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); 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=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$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:3539: 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:3576: 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 $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); 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 "$XGETTEXT" != ":"; then echo "$ac_t""$XGETTEXT" 1>&6 else echo "$ac_t""no" 1>&6 fi rm -f messages.po # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:3613: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGMERGE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$MSGMERGE" in /*) ac_cv_path_MSGMERGE="$MSGMERGE" # 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 $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then echo "$ac_t""$MSGMERGE" 1>&6 else echo "$ac_t""no" 1>&6 fi if test "$GMSGFMT" != ":"; then if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` echo "$ac_t""found $GMSGFMT program is not GNU msgfmt; ignore it" 1>&6 GMSGFMT=":" fi fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6 XGETTEXT=":" fi rm -f messages.po fi for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.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:3676: 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:3686: \"$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 feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3717: 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:3745: \"$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 "$am_cv_func_iconv" = yes; then echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6 echo "configure:3774: checking for iconv declaration" >&5 if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main() { ; return 0; } EOF if { (eval echo configure:3799: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* am_cv_proto_iconv_arg1="" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* am_cv_proto_iconv_arg1="const" fi rm -f conftest* am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` echo "$ac_t""${ac_t:- }$am_cv_proto_iconv" 1>&6 cat >> confdefs.h <&6 echo "configure:3823: checking for nl_langinfo and CODESET" >&5 if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char* cs = nl_langinfo(CODESET); ; 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* am_cv_langinfo_codeset=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* am_cv_langinfo_codeset=no fi rm -f conftest* fi echo "$ac_t""$am_cv_langinfo_codeset" 1>&6 if test $am_cv_langinfo_codeset = yes; then cat >> confdefs.h <<\EOF #define HAVE_LANGINFO_CODESET 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:3858: 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:3870: \"$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 for ac_prog in bison do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:3896: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$INTLBISON"; then ac_cv_prog_INTLBISON="$INTLBISON" # 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_INTLBISON="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi INTLBISON="$ac_cv_prog_INTLBISON" if test -n "$INTLBISON"; then echo "$ac_t""$INTLBISON" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$INTLBISON" && break done if test -z "$INTLBISON"; then ac_verc_fail=yes else echo $ac_n "checking version of bison""... $ac_c" 1>&6 echo "configure:3929: checking version of bison" >&5 ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac echo "$ac_t""$ac_prog_version" 1>&6 fi if test $ac_verc_fail = yes; then INTLBISON=: fi echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 echo "configure:3956: 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 BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no LIBINTL= LTLIBINTL= POSUB= if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 echo "configure:3980: 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 echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6 echo "configure:4000: checking for GNU gettext in libc" >&5 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main() { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } EOF if { (eval echo configure:4015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gnugettext1_libc=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* gt_cv_func_gnugettext1_libc=no fi rm -f conftest* fi echo "$ac_t""$gt_cv_func_gnugettext1_libc" 1>&6 if test "$gt_cv_func_gnugettext1_libc" != "yes"; then use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix or --without-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then withval="$with_libintl_prefix" if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBINTL= LTLIBINTL= INCINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "X$found_dir" = "X/usr/lib"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6 echo "configure:4385: checking for GNU gettext in libintl" >&5 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat > conftest.$ac_ext < extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (); int main() { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings + *_nl_expand_alias (0) ; return 0; } EOF if { (eval echo configure:4409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gnugettext1_libintl=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* gt_cv_func_gnugettext1_libintl=no fi rm -f conftest* if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat > conftest.$ac_ext < extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (); int main() { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings + *_nl_expand_alias (0) ; return 0; } EOF if { (eval echo configure:4437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext1_libintl=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi echo "$ac_t""$gt_cv_func_gnugettext1_libintl" 1>&6 fi if test "$gt_cv_func_gnugettext1_libc" = "yes" \ || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ && test "$PACKAGE" != gettext; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test "$gt_use_preinstalled_gnugettext" != "yes"; then nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then INTLOBJS="\$(GETTOBJS)" BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV" LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then CATOBJEXT=.gmo fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then cat >> confdefs.h <<\EOF #define ENABLE_NLS 1 EOF else USE_NLS=no fi fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then echo $ac_n "checking how to link with libintl""... $ac_c" 1>&6 echo "configure:4503: checking how to link with libintl" >&5 echo "$ac_t""$LIBINTL" 1>&6 for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi cat >> confdefs.h <<\EOF #define HAVE_GETTEXT 1 EOF cat >> confdefs.h <<\EOF #define HAVE_DCGETTEXT 1 EOF fi POSUB=po fi if test "$PACKAGE" = gettext; then BUILD_INCLUDED_LIBINTL=yes fi nls_cv_header_intl= nls_cv_header_libgt= DATADIRNAME=share INSTOBJEXT=.mo GENCAT=gencat INTL_LIBTOOL_SUFFIX_PREFIX= INTLLIBS="$LIBINTL" echo $ac_n "checking for GetSystemTime""... $ac_c" 1>&6 echo "configure:4578: checking for GetSystemTime" >&5 getsystemtime=no cat > conftest.$ac_ext < int main() { SYSTEMTIME tm; GetSystemTime(&tm); ; return 0; } EOF if { (eval echo configure:4588: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_GETSYSTEMTIME 1 EOF getsystemtime=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* echo "$ac_t""$getsystemtime" 1>&6 echo $ac_n "checking for size_t""... $ac_c" 1>&6 echo "configure:4603: 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 int EOF fi echo $ac_n "checking for bittypes""... $ac_c" 1>&6 echo "configure:4637: checking for bittypes" >&5 bittypes=no cat > conftest.$ac_ext < int main() { int8_t a; u_int8_t b; int16_t c; u_int16_t d; int32_t e; u_int32_t f; ; return 0; } EOF if { (eval echo configure:4647: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_BITTYPES 1 EOF bittypes=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* echo "$ac_t""$bittypes" 1>&6 echo $ac_n "checking for IO functions such as inb""... $ac_c" 1>&6 echo "configure:4661: checking for IO functions such as inb" >&5 iofuncs=no cat > conftest.$ac_ext < int main() { inb(0); inw(0); inl(0); outb(0,0); outw(0,0); outl(0,0); ; return 0; } EOF if { (eval echo configure:4671: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_IOFUNCS 1 EOF iofuncs=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat > conftest.$ac_ext < int main() { inb(0); inw(0); inl(0); outb(0,0); outw(0,0); outl(0,0); ; return 0; } EOF if { (eval echo configure:4689: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_IOFUNCS 1 EOF iofuncs=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi rm -f conftest* echo "$ac_t""$iofuncs" 1>&6 echo $ac_n "checking for M_PI""... $ac_c" 1>&6 echo "configure:4705: checking for M_PI" >&5 mpi=no cat > conftest.$ac_ext < int main() { double f = M_PI; ; return 0; } EOF if { (eval echo configure:4715: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mpi=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat >> confdefs.h <<\EOF #define M_PI 3.14159265358979323846 EOF fi rm -f conftest* echo "$ac_t""$mpi" 1>&6 echo $ac_n "checking for M_LN10""... $ac_c" 1>&6 echo "configure:4731: checking for M_LN10" >&5 mln10=no cat > conftest.$ac_ext < int main() { double f = M_LN10; ; return 0; } EOF if { (eval echo configure:4741: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mln10=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat >> confdefs.h <<\EOF #define M_LN10 2.30258509299404568402 EOF fi rm -f conftest* echo "$ac_t""$mln10" 1>&6 echo $ac_n "checking for MKISS (N_AX25 line discipline)""... $ac_c" 1>&6 echo "configure:4757: checking for MKISS (N_AX25 line discipline)" >&5 mkiss=no cat > conftest.$ac_ext < #ifdef N_AX25 yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* mkiss=yes fi rm -f conftest* echo "$ac_t""$mkiss" 1>&6 echo $ac_n "checking for ifr_newname in struct ifreq""... $ac_c" 1>&6 echo "configure:4778: checking for ifr_newname in struct ifreq" >&5 ifrnewname=no cat > conftest.$ac_ext < int main() { struct ifreq ifr; ifr.ifr_newname[0]=0; ; return 0; } EOF if { (eval echo configure:4788: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_IFRNEWNAME 1 EOF ifrnewname=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* echo "$ac_t""$ifrnewname" 1>&6 if test x$ac_cv_prog_cc_cross = xyes; then gtk=no xlibs="$LIBS" LIBS="$LIBS -L/usr/local/cygwin/i686-pc-cygwin/gtk/lib -L/usr/local/cross/i686-pc-cygwin/gtk/lib" echo $ac_n "checking for gtk_main in -lgtk""... $ac_c" 1>&6 echo "configure:4806: checking for gtk_main in -lgtk" >&5 ac_lib_var=`echo gtk'_'gtk_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="-lgtk $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 gtk=yes else echo "$ac_t""no" 1>&6 fi LIBS="$xlibs" if test x$gtk = xyes; then if test -f /usr/local/cygwin/i686-pc-cygwin/gtk/include/glib.h; then GTK_CFLAGS="-I/usr/local/cygwin/i686-pc-cygwin/gtk/include" GTK_LIBS="-L/usr/local/cygwin/i686-pc-cygwin/gtk/lib -lgtk -lgdk -lglib" PTHREAD_CFLAGS="-L/usr/local/cygwin/i686-pc-cygwin/gtk/include" PTHREAD_LIBS="-L/usr/local/cygwin/i686-pc-cygwin/gtk/lib" fi if test -f /usr/local/cross/i686-pc-cygwin/gtk/include/glib.h; then GTK_CFLAGS="-I/usr/local/cross/i686-pc-cygwin/gtk/include" GTK_LIBS="-L/usr/local/cross/i686-pc-cygwin/gtk/lib -lgtk -lgdk -lglib" PTHREAD_CFLAGS="-L/usr/local/cross/i686-pc-cygwin/gtk/include" PTHREAD_LIBS="-L/usr/local/cross/i686-pc-cygwin/gtk/lib" fi fi else # Check whether --with-gtk-prefix or --without-gtk-prefix was given. if test "${with_gtk_prefix+set}" = set; then withval="$with_gtk_prefix" gtk_config_prefix="$withval" else gtk_config_prefix="" fi # Check whether --with-gtk-exec-prefix or --without-gtk-exec-prefix was given. if test "${with_gtk_exec_prefix+set}" = set; then withval="$with_gtk_exec_prefix" gtk_config_exec_prefix="$withval" else gtk_config_exec_prefix="" fi # Check whether --enable-gtktest or --disable-gtktest was given. if test "${enable_gtktest+set}" = set; then enableval="$enable_gtktest" : else enable_gtktest=yes fi for module in . do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4911: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GTK_CONFIG" in /*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # 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_GTK_CONFIG="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" ;; esac fi GTK_CONFIG="$ac_cv_path_GTK_CONFIG" if test -n "$GTK_CONFIG"; then echo "$ac_t""$GTK_CONFIG" 1>&6 else echo "$ac_t""no" 1>&6 fi min_gtk_version=1.2.0 echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6 echo "configure:4946: checking for GTK - version >= $min_gtk_version" >&5 no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat > conftest.$ac_ext < #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } EOF if { (eval echo configure:5047: \"$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* no_gtk=yes fi rm -fr conftest* fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then echo "$ac_t""yes" 1>&6 gtk=yes else echo "$ac_t""no" 1>&6 if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat > conftest.$ac_ext < #include int main() { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } EOF if { (eval echo configure:5091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" fi rm -f conftest* CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" { echo "configure: error: Cannot find GTK: Is gtk-config in path?" 1>&2; exit 1; } fi rm -f conf.gtktest fi if test "x${prefix}" = "xNONE"; then cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <&6 echo "configure:5179: checking for DirectX includes" >&5 directx=no cat > conftest.$ac_ext < int main() { LPDIRECTSOUND dsplay; LPDIRECTSOUNDCAPTURE dsrec; ; return 0; } EOF if { (eval echo configure:5189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_DIRECTX 1 EOF directx=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* echo "$ac_t""$directx" 1>&6 CFLAGS="$xcflags" fi # Check whether --enable-driver or --disable-driver was given. if test "${enable_driver+set}" = set; then enableval="$enable_driver" case "${enableval}" in yes) baydrv=true ;; no) baydrv=false ;; *) { echo "configure: error: bad value ${enableval} for --enable-driver" 1>&2; exit 1; } ;; esac else baydrv=false fi # Check whether --enable-mkiss or --disable-mkiss was given. if test "${enable_mkiss+set}" = set; then enableval="$enable_mkiss" mkissena=false else mkissena=true fi if test x$mkiss = xyes; then cat >> confdefs.h <<\EOF #define HAVE_MKISS 1 EOF fi # Check whether --enable-ppuser or --disable-ppuser was given. if test "${enable_ppuser+set}" = set; then enableval="$enable_ppuser" ppuser=true else ppuser=false fi if test x$ppuser = xtrue; then cat >> confdefs.h <<\EOF #define HAVE_PPUSER 1 EOF fi # Check whether --enable-ppkdrv or --disable-ppkdrv was given. if test "${enable_ppkdrv+set}" = set; then enableval="$enable_ppkdrv" ppkdrv=true else ppkdrv=false fi if test x$ppkdrv = xtrue; then cat >> confdefs.h <<\EOF #define HAVE_PPKDRV 1 EOF fi if test x$ac_cv_cygwin = xyes -o x$ac_cv_mingw32 = xyes; then WIN32_TRUE= WIN32_FALSE='#' else WIN32_TRUE='#' WIN32_FALSE= fi if test x$cross_compiling = xyes; then CROSSCOMP_TRUE= CROSSCOMP_FALSE='#' else CROSSCOMP_TRUE='#' CROSSCOMP_FALSE= fi if test x$cross_compiling = xno -a x$mkiss = xyes; then BAYCOMDRV_TRUE= BAYCOMDRV_FALSE='#' else BAYCOMDRV_TRUE='#' BAYCOMDRV_FALSE= fi if test x$gtk = xyes; then HAVEGTK_TRUE= HAVEGTK_FALSE='#' else HAVEGTK_TRUE='#' HAVEGTK_FALSE= fi if test x$ppuser = xtrue; then PPUSER_TRUE= PPUSER_FALSE='#' else PPUSER_TRUE='#' PPUSER_FALSE= fi if test x$ppkdrv = xtrue; then PPKDRV_TRUE= PPKDRV_FALSE='#' else PPKDRV_TRUE='#' PPKDRV_FALSE= fi if test x$directx = xyes; then DIRECTX_TRUE= DIRECTX_FALSE='#' else DIRECTX_TRUE='#' DIRECTX_FALSE= fi trap '' 1 2 15 cat > 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 po/Makefile.in directx/Makefile main/Makefile udriver/Makefile eppdiag/Makefile eppfm/Makefile eppfm2/Makefile eppfm2/src/Makefile flexdrv/Makefile ntdrv/Makefile w9xdrv/Makefile 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%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g s%@host_vendor@%$host_vendor%g s%@host_os@%$host_os%g s%@target@%$target%g s%@target_alias@%$target_alias%g s%@target_cpu@%$target_cpu%g s%@target_vendor@%$target_vendor%g s%@target_os@%$target_os%g s%@build@%$build%g s%@build_alias@%$build_alias%g s%@build_cpu@%$build_cpu%g s%@build_vendor@%$build_vendor%g s%@build_os@%$build_os%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%@CC@%$CC%g s%@CPP@%$CPP%g s%@RANLIB@%$RANLIB%g s%@DLLTOOL@%$DLLTOOL%g s%@AS@%$AS%g s%@AR@%$AR%g s%@WINDRES@%$WINDRES%g s%@EXEEXT@%$EXEEXT%g s%@OBJEXT@%$OBJEXT%g s%@LIBOBJS@%$LIBOBJS%g s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g s%@MSGFMT@%$MSGFMT%g s%@GMSGFMT@%$GMSGFMT%g s%@XGETTEXT@%$XGETTEXT%g s%@MSGMERGE@%$MSGMERGE%g s%@ALLOCA@%$ALLOCA%g s%@GLIBC21@%$GLIBC21%g s%@LIBICONV@%$LIBICONV%g s%@LTLIBICONV@%$LTLIBICONV%g s%@INTLBISON@%$INTLBISON%g s%@USE_NLS@%$USE_NLS%g s%@BUILD_INCLUDED_LIBINTL@%$BUILD_INCLUDED_LIBINTL%g s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g s%@CATOBJEXT@%$CATOBJEXT%g s%@INTLOBJS@%$INTLOBJS%g s%@DATADIRNAME@%$DATADIRNAME%g s%@INSTOBJEXT@%$INSTOBJEXT%g s%@GENCAT@%$GENCAT%g s%@INTL_LIBTOOL_SUFFIX_PREFIX@%$INTL_LIBTOOL_SUFFIX_PREFIX%g s%@INTLLIBS@%$INTLLIBS%g s%@LIBINTL@%$LIBINTL%g s%@LTLIBINTL@%$LTLIBINTL%g s%@POSUB@%$POSUB%g s%@GTK_CONFIG@%$GTK_CONFIG%g s%@GTK_CFLAGS@%$GTK_CFLAGS%g s%@GTK_LIBS@%$GTK_LIBS%g s%@WIN32_TRUE@%$WIN32_TRUE%g s%@WIN32_FALSE@%$WIN32_FALSE%g s%@CROSSCOMP_TRUE@%$CROSSCOMP_TRUE%g s%@CROSSCOMP_FALSE@%$CROSSCOMP_FALSE%g s%@BAYCOMDRV_TRUE@%$BAYCOMDRV_TRUE%g s%@BAYCOMDRV_FALSE@%$BAYCOMDRV_FALSE%g s%@HAVEGTK_TRUE@%$HAVEGTK_TRUE%g s%@HAVEGTK_FALSE@%$HAVEGTK_FALSE%g s%@PPUSER_TRUE@%$PPUSER_TRUE%g s%@PPUSER_FALSE@%$PPUSER_FALSE%g s%@PPKDRV_TRUE@%$PPKDRV_TRUE%g s%@PPKDRV_FALSE@%$PPKDRV_FALSE%g s%@DIRECTX_TRUE@%$DIRECTX_TRUE%g s%@DIRECTX_FALSE@%$DIRECTX_FALSE%g s%@HAVE_MKISS@%$HAVE_MKISS%g s%@HAVE_IOFUNCS@%$HAVE_IOFUNCS%g s%@HAVE_BITTYPES@%$HAVE_BITTYPES%g s%@M_PI@%$M_PI%g s%@DRVLIBOBJS@%$DRVLIBOBJS%g s%@HAVE_IFRNEWNAME@%$HAVE_IFRNEWNAME%g s%@HAVE_PPUSER@%$HAVE_PPUSER%g s%@HAVE_PPKDRV@%$HAVE_PPKDRV%g s%@HAVE_DIRECTX@%$HAVE_DIRECTX%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 test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' fi case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= GMOFILES= UPDATEPOFILES= DUMMYPOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done 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 baycomepp-0.10.orig/configure.in0100644000175100017510000001612707511775463014742 0ustar abaabadnl Process this file with autoconf to produce a configure script. AC_INIT(acconfig.h) AC_CANONICAL_SYSTEM AM_INIT_AUTOMAKE(baycomepp, 0.10) AM_CONFIG_HEADER(config.h) dnl AC_CHECK_TOOL() AC_PROG_MAKE_SET AC_ISC_POSIX AC_PROG_CC AM_PROG_CC_STDC dnl AC_PROG_RANLIB AC_C_CONST AC_C_INLINE AC_HEADER_STDC AC_CHECK_PROG(RANLIB, ranlib, ranlib, :) AC_CHECK_PROG(DLLTOOL, dlltool, dlltool, dlltool) AC_CHECK_PROG(AS, as, as, as, as) AC_CHECK_PROG(AR, ar, ar, ar, ar) AC_CHECK_PROG(WINDRES, windres, windres, i686-pc-cygwin-windres) AC_CYGWIN AC_MINGW32 AC_EXEEXT AC_OBJEXT if test x$ac_cv_mingw32 != xyes; then AC_CHECK_LIB(m,cos) fi AC_CHECK_HEADERS(pty.h getopt.h sys/io.h asm/io.h windows.h sched.h sys/perm.h syslog.h sys/socket.h) AC_CHECK_HEADERS(net/if.h arpa/inet.h netinet/in.h linux/if.h linux/ax25.h linux/sockios.h linux/soundcard.h) AC_CHECK_FUNCS(snprintf gettimeofday iopl random syslog vsyslog revoke) AC_REPLACE_FUNCS(vsnprintf) AC_CHECK_FUNCS(getopt_long,,LIBOBJS="$LIBOBJS getopt.o getopt1.o") xlibs=$LIBS LIBS= AC_CHECK_LIB(util,openpty) AC_CHECK_FUNCS(openpty,DRVLIBOBJS="$DRVLIBOBJS $LIBS",DRVLIBOBJS="$DRVLIBOBJS openpty.o") LIBS=$xlibs dnl Add the languages which your application supports here. ALL_LINGUAS="" AM_GNU_GETTEXT AC_MSG_CHECKING(for GetSystemTime) getsystemtime=no AC_TRY_COMPILE([#include ], [ SYSTEMTIME tm; GetSystemTime(&tm); ], AC_DEFINE(HAVE_GETSYSTEMTIME) getsystemtime=yes) AC_MSG_RESULT($getsystemtime) dnl AC_CHECK_TYPE(int8_t,char) dnl AC_CHECK_TYPE(u_int8_t,unsigned char) dnl AC_CHECK_TYPE(int16_t,short) dnl AC_CHECK_TYPE(u_int16_t,unsigned short) dnl AC_CHECK_TYPE(int32_t,long) dnl AC_CHECK_TYPE(u_int32_t,unsigned long) AC_CHECK_TYPE(size_t,unsigned int) AC_MSG_CHECKING(for bittypes) bittypes=no AC_TRY_COMPILE([#include ], [ int8_t a; u_int8_t b; int16_t c; u_int16_t d; int32_t e; u_int32_t f; ], AC_DEFINE(HAVE_BITTYPES) bittypes=yes) AC_MSG_RESULT($bittypes) AC_MSG_CHECKING(for IO functions such as inb, outb) iofuncs=no AC_TRY_COMPILE([#include ], [ inb(0); inw(0); inl(0); outb(0,0); outw(0,0); outl(0,0); ], AC_DEFINE(HAVE_IOFUNCS) iofuncs=yes, AC_TRY_COMPILE([#include ], [ inb(0); inw(0); inl(0); outb(0,0); outw(0,0); outl(0,0); ], AC_DEFINE(HAVE_IOFUNCS) iofuncs=yes)) AC_MSG_RESULT($iofuncs) AC_MSG_CHECKING(for M_PI) mpi=no AC_TRY_COMPILE([#include ], [ double f = M_PI; ], mpi=yes,AC_DEFINE(M_PI,3.14159265358979323846)) AC_MSG_RESULT($mpi) AC_MSG_CHECKING(for M_LN10) mln10=no AC_TRY_COMPILE([#include ], [ double f = M_LN10; ], mln10=yes,AC_DEFINE(M_LN10,2.30258509299404568402)) AC_MSG_RESULT($mln10) AC_MSG_CHECKING(for MKISS (N_AX25 line discipline)) mkiss=no AC_EGREP_CPP(yes, [#include #ifdef N_AX25 yes #endif ], mkiss=yes) AC_MSG_RESULT($mkiss) AC_MSG_CHECKING(for ifr_newname in struct ifreq) ifrnewname=no AC_TRY_COMPILE([#include ], [struct ifreq ifr; ifr.ifr_newname[0]=0; ], AC_DEFINE(HAVE_IFRNEWNAME) ifrnewname=yes) AC_MSG_RESULT($ifrnewname) if test x$ac_cv_prog_cc_cross = xyes; then gtk=no xlibs="$LIBS" LIBS="$LIBS -L/usr/local/cygwin/i686-pc-cygwin/gtk/lib -L/usr/local/cross/i686-pc-cygwin/gtk/lib" AC_CHECK_LIB(gtk,gtk_main,gtk=yes) LIBS="$xlibs" if test x$gtk = xyes; then if test -f /usr/local/cygwin/i686-pc-cygwin/gtk/include/glib.h; then GTK_CFLAGS="-I/usr/local/cygwin/i686-pc-cygwin/gtk/include" GTK_LIBS="-L/usr/local/cygwin/i686-pc-cygwin/gtk/lib -lgtk -lgdk -lglib" PTHREAD_CFLAGS="-L/usr/local/cygwin/i686-pc-cygwin/gtk/include" PTHREAD_LIBS="-L/usr/local/cygwin/i686-pc-cygwin/gtk/lib" fi if test -f /usr/local/cross/i686-pc-cygwin/gtk/include/glib.h; then GTK_CFLAGS="-I/usr/local/cross/i686-pc-cygwin/gtk/include" GTK_LIBS="-L/usr/local/cross/i686-pc-cygwin/gtk/lib -lgtk -lgdk -lglib" PTHREAD_CFLAGS="-L/usr/local/cross/i686-pc-cygwin/gtk/include" PTHREAD_LIBS="-L/usr/local/cross/i686-pc-cygwin/gtk/lib" fi fi else AM_PATH_GTK(1.2.0,gtk=yes,AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?)) fi dnl Set PACKAGE_LOCALE_DIR in config.h. if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${ac_default_prefix}/${DATADIRNAME}/locale") else AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${prefix}/${DATADIRNAME}/locale") fi dnl Set PACKAGE_DATA_DIR in config.h. if test "x${datadir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}") else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}") fi else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${datadir}/${PACKAGE}") fi dnl Set PACKAGE_SOURCE_DIR in config.h. packagesrcdir=`cd $srcdir && pwd` AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}") dnl Use -Wall if we have gcc. changequote(,)dnl if test "x$GCC" = "xyes"; then case " $CFLAGS " in *[\ \ ]-Wall[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac fi changequote([,])dnl if test x$ac_cv_cygwin = xyes -o x$ac_cv_mingw32 = xyes; then xcflags="$CFLAGS" CFLAGS="$CFLAGS -I$srcdir/directx/include -I$srcdir/directx/include/directx6" AC_MSG_CHECKING(for DirectX includes) directx=no AC_TRY_COMPILE([#include ], [ LPDIRECTSOUND dsplay; LPDIRECTSOUNDCAPTURE dsrec; ], AC_DEFINE(HAVE_DIRECTX) directx=yes) AC_MSG_RESULT($directx) CFLAGS="$xcflags" fi AC_ARG_ENABLE(driver, [ --enable-driver Build user mode driver], [case "${enableval}" in yes) baydrv=true ;; no) baydrv=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-driver) ;; esac],[baydrv=false]) AC_ARG_ENABLE(mkiss, [ --disable-mkiss Don not use the MKISS driver even if available], [mkissena=false],[mkissena=true]) if test x$mkiss = xyes; then AC_DEFINE(HAVE_MKISS) fi AC_ARG_ENABLE(ppuser, [ --enable-ppuser Enable PPUSER parport access method], [ppuser=true],[ppuser=false]) if test x$ppuser = xtrue; then AC_DEFINE(HAVE_PPUSER) fi AC_ARG_ENABLE(ppkdrv, [ --enable-ppkdrv Enable Linux Kernel driver parport access method], [ppkdrv=true],[ppkdrv=false]) if test x$ppkdrv = xtrue; then AC_DEFINE(HAVE_PPKDRV) fi dnl AM_CONDITIONAL(BAYCOMDRV, test x$baydrv = xtrue) AM_CONDITIONAL(WIN32, test x$ac_cv_cygwin = xyes -o x$ac_cv_mingw32 = xyes) AM_CONDITIONAL(CROSSCOMP, test x$cross_compiling = xyes) AM_CONDITIONAL(BAYCOMDRV, test x$cross_compiling = xno -a x$mkiss = xyes) AM_CONDITIONAL(HAVEGTK, test x$gtk = xyes) AM_CONDITIONAL(PPUSER, test x$ppuser = xtrue) AM_CONDITIONAL(PPKDRV, test x$ppkdrv = xtrue) AM_CONDITIONAL(DIRECTX, test x$directx = xyes) AC_SUBST(HAVE_MKISS) AC_SUBST(GTK_LIBS) AC_SUBST(GTK_CFLAGS) AC_SUBST(HAVE_IOFUNCS) AC_SUBST(HAVE_BITTYPES) AC_SUBST(M_PI) AC_SUBST(LIBOBJS) AC_SUBST(DRVLIBOBJS) AC_SUBST(HAVE_IFRNEWNAME) AC_SUBST(HAVE_PPUSER) AC_SUBST(HAVE_PPKDRV) AC_SUBST(HAVE_DIRECTX) AC_OUTPUT([Makefile intl/Makefile po/Makefile.in directx/Makefile main/Makefile udriver/Makefile eppdiag/Makefile eppfm/Makefile eppfm2/Makefile eppfm2/src/Makefile flexdrv/Makefile ntdrv/Makefile w9xdrv/Makefile]) baycomepp-0.10.orig/install-sh0100755000175100017510000001272006706650716014426 0ustar abaaba#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # 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}" transformbasename="" 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 baycomepp-0.10.orig/missing0100755000175100017510000001420206706650720014011 0ustar abaaba#! /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 create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -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. You should only need it 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. You should only need it 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. You should only need it 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." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER([^):]*:\([^)]*\)).*/\1/p' configure.in` if test -z "$files"; then files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^):]*\)).*/\1/p' configure.in` test -z "$files" || files="$files.in" else files=`echo "$files" | sed -e 's/:/ /g'` fi test -z "$files" && files="config.h.in" touch $files ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it 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." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it 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 baycomepp-0.10.orig/mkinstalldirs0100755000175100017510000000133606706650717015232 0ustar abaaba#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1.1.1 1998/07/03 21:25:39 martijn Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" 1>&2 mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here baycomepp-0.10.orig/baycomepp.spec0100644000175100017510000000254007511775457015261 0ustar abaaba# Note that this is NOT a relocatable package %define ver 0.10 %define rel 1 %define prefix /usr Summary: Driver and diagnostic utilities for the Baycom EPP modem family Name: baycomepp Version: %ver Release: %rel Copyright: GPL Group: Networking/Hamradio Source: baycomepp-%{ver}.tar.gz BuildRoot: /tmp/baycomepp-root Packager: Thomas Sailer Obsoletes: baycomfpga, eppconv Requires: /sbin/ifconfig /sbin/route /sbin/arp %description This package contains the driver and diagnostic utilities for the Baycom EPP modem family, specifically the conventional EPP modem (using the IDT 7213x FIFO's) and the EPPFLEX FPGA modem (using the Xilinx XCS10). %prep %setup %build mkdir obj cd obj ../configure --prefix=%prefix --localstatedir=/var --enable-driver --enable-ppuser --enable-ppkdrv make %install rm -rf $RPM_BUILD_ROOT cd obj make prefix=$RPM_BUILD_ROOT%{prefix} install install -g root -o root -m 0755 -d $RPM_BUILD_ROOT/var/run install -g root -o root -m 0755 -d $RPM_BUILD_ROOT/etc/rc.d/init.d install -g root -o root -m 0755 ../udriver/baycomepp.initscript $RPM_BUILD_ROOT/etc/rc.d/init.d/baycomepp %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-, root, root) %doc AUTHORS COPYING ChangeLog INSTALL NEWS README %{prefix}/sbin/* %{prefix}/bin/* %{prefix}/man/*/* /var/run %{prefix}/libexec/* %config /etc/rc.d/init.d/baycomepp baycomepp-0.10.orig/cfgwindows0100755000175100017510000000121307140470777014515 0ustar abaaba#!/bin/sh if test -d /usr/local/cross/i686-pc-cygwin; then CROSSPATH=/usr/local/cross/i686-pc-cygwin/ else CROSSPATH=/usr/local/cygwin/i686-pc-cygwin/ fi PATH=${CROSSPATH}/bin:${PATH} CC=i686-pc-cygwin-gcc AR=i686-pc-cygwin-ar AS=i686-pc-cygwin-as LD=i686-pc-cygwin-ld RANLIB=i686-pc-cygwin-ranlib DLLTOOL=i686-pc-cygwin-dlltool WINDRES=i686-pc-cygwin-windres CFLAGS="-O2 -g -I${CROSSPATH}/gtk/include -mno-cygwin -mpentium -fnative-struct" LDFLAGS="-L${CROSSPATH}/gtk/lib -mno-cygwin" export CC AS AR LD RANLIB DLLTOOL PATH CFLAGS LDFLAGS dir=`dirname $0` ${dir}/configure --host=i686-pc-cygwin --disable-nls --enable-driver=no --prefix=/tmp $* baycomepp-0.10.orig/cfgwindowsnodebug0100755000175100017510000000121007141052763016046 0ustar abaaba#!/bin/sh if test -d /usr/local/cross/i686-pc-cygwin; then CROSSPATH=/usr/local/cross/i686-pc-cygwin/ else CROSSPATH=/usr/local/cygwin/i686-pc-cygwin/ fi PATH=${CROSSPATH}/bin:${PATH} CC=i686-pc-cygwin-gcc AR=i686-pc-cygwin-ar AS=i686-pc-cygwin-as LD=i686-pc-cygwin-ld RANLIB=i686-pc-cygwin-ranlib DLLTOOL=i686-pc-cygwin-dlltool WINDRES=i686-pc-cygwin-windres CFLAGS="-O2 -I${CROSSPATH}/gtk/include -mno-cygwin -mpentium -fnative-struct" LDFLAGS="-L${CROSSPATH}/gtk/lib -mno-cygwin" export CC AS AR LD RANLIB DLLTOOL PATH CFLAGS LDFLAGS dir=`dirname $0` ${dir}/configure --host=i686-pc-cygwin --disable-nls --enable-driver=no --prefix=/tmp $* baycomepp-0.10.orig/cfgdos0100755000175100017510000000067307140470777013621 0ustar abaaba#!/bin/sh if test -d /usr/local/cross/i386-go32; then CROSSPATH=/usr/local/cross/i386-go32/ else CROSSPATH=/usr/local/go32/i386-go32/ fi PATH=${CROSSPATH}/bin:${PATH} CC=i386-go32-gcc AR=i386-go32-ar AS=i386-go32-as LD=i386-go32-ld RANLIB=i386-go32-ranlib CFLAGS="-O2 -g" LDFLAGS="" export CC AS AR LD RANLIB DLLTOOL PATH CFLAGS LDFLAGS dir=`dirname $0` ${dir}/configure --host=i386-go32 --disable-nls --enable-driver=no --prefix=/tmp $* baycomepp-0.10.orig/intl/0042755000175100017510000000000007511777221013367 5ustar abaababaycomepp-0.10.orig/intl/ChangeLog0100644000175100017510000010461406733244662015145 0ustar abaaba1998-04-29 Ulrich Drepper * intl/localealias.c (read_alias_file): Use unsigned char for local variables. Remove unused variable tp. * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char * for type of codeset. For loosing Solaris systems. * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset. * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable len if not needed. Patches by Jim Meyering. 1998-04-28 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if mmap is not supported. * hash-string.h: Don't include . 1998-04-27 Ulrich Drepper * textdomain.c: Use strdup is available. * localealias.c: Define HAVE_MEMPCPY so that we can use this function. Define and use semapahores to protect modfication of global objects when compiling for glibc. Add code to allow freeing alias table. * l10nflist.c: Don't assume stpcpy not being a macro. * gettextP.h: Define internal_function macri if not already done. Use glibc byte-swap macros instead of defining SWAP when compiled for glibc. (struct loaded_domain): Add elements to allow unloading. * Makefile.in (distclean): Don't remove libintl.h here. * bindtextdomain.c: Carry over changes from glibc. Use strdup if available. * dcgettext.c: Don't assume stpcpy not being a macro. Mark internal functions. Add memory freeing code for glibc. * dgettext.c: Update copyright. * explodename.c: Include stdlib.h and string.h only if they exist. Use strings.h eventually. * finddomain.c: Mark internal functions. Use strdup if available. Add memory freeing code for glibc. 1997-10-10 20:00 Ulrich Drepper * libgettext.h: Fix dummy textdomain and bindtextdomain macros. They should return reasonable values. Reported by Tom Tromey . 1997-09-16 03:33 Ulrich Drepper * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined. * intlh.inst.in: Likewise. Reported by Jean-Marc Lasgouttes . * libintl.glibc: Update from current glibc version. 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-HvardAksnes . 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. baycomepp-0.10.orig/intl/Makefile.in0100644000175100017510000001446706733244662015446 0ustar abaaba# 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 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: baycomepp-0.10.orig/intl/linux-msg.sed0100644000175100017510000000520506733244663016010 0ustar abaaba# 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 baycomepp-0.10.orig/intl/po2tbl.sed.in0100644000175100017510000000456506733244663015704 0ustar abaaba# 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 baycomepp-0.10.orig/intl/xopen-msg.sed0100644000175100017510000000537606733244663016013 0ustar abaaba# 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 baycomepp-0.10.orig/intl/gettext.h0100644000175100017510000000620506733244662015225 0ustar abaaba/* 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 */ baycomepp-0.10.orig/intl/gettextP.h0100644000175100017510000000420606733244662015344 0ustar abaaba/* Header describing internals of gettext library Copyright (C) 1995, 1996, 1997, 1998 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. */ #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 internal_function # define internal_function #endif #ifndef W # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif #ifdef _LIBC # include # define SWAP(i) bswap_32 (i) #else 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); } #endif struct loaded_domain { const char *data; int use_mmap; size_t mmap_size; 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)) internal_function; void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain)) internal_function; void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) internal_function; /* @@ begin of epilog @@ */ #endif /* gettextP.h */ baycomepp-0.10.orig/intl/hash-string.h0100644000175100017510000000341306733244662015766 0ustar abaaba/* 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. */ /* @@ 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 int hash_string PARAMS ((const char *__str_param)); static inline unsigned long int 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 int) *str++; g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } return hval; } baycomepp-0.10.orig/intl/libgettext.h0100644000175100017510000001314506733244663015716 0ustar abaaba/* Message catalogs for internationalization. Copyright (C) 1995, 1996, 1997, 1998 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 #ifndef _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__ || defined __cplusplus # 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) ((char *) Domainname) # define bindtextdomain(Domainname, Dirname) ((char *) Dirname) #endif /* @@ begin of epilog @@ */ #ifdef __cplusplus } #endif #endif baycomepp-0.10.orig/intl/loadinfo.h0100644000175100017510000000464106733244663015337 0ustar abaaba/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 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. */ #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)); extern char *_nl_find_language PARAMS ((const char *name)); baycomepp-0.10.orig/intl/bindtextdom.c0100644000175100017510000001232306733244662016053 0ustar abaaba/* Implementation of the bindtextdomain(3) function Copyright (C) 1995, 1996, 1997, 1998 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 # ifndef strdup # define strdup(str) __strdup (str) # endif #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. */ #if !defined _LIBC && !defined HAVE_STRDUP size_t len; #endif 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 baycomepp-0.10.orig/intl/dcgettext.c0100644000175100017510000004213506733244662015531 0ustar abaaba/* Implementation of the dcgettext(3) function. Copyright (C) 1995, 1996, 1997, 1998 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 #if defined __GNUC__ && !defined C_ALLOCA # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if (defined HAVE_ALLOCA_H || defined _LIBC) && !defined C_ALLOCA # 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 # ifndef stpcpy # define stpcpy __stpcpy # endif #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)) internal_function; static const char *category_to_name PARAMS ((int category)) internal_function; static const char *guess_category_value PARAMS ((int category, const char *categoryname)) internal_function; /* 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 /* Checking whether the binaries runs SUID must be done and glibc provides easier methods therefore we make a difference here. */ #ifdef _LIBC # define ENABLE_SECURE __libc_enable_secure # define DETERMINE_SECURE #else static int enable_secure; # define ENABLE_SECURE (enable_secure == 1) # define DETERMINE_SECURE \ if (enable_secure == 0) \ { \ if (getuid () != geteuid () || getgid () != getegid ()) \ enable_secure = 1; \ else \ enable_secure = -1; \ } #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; /* See whether this is a SUID binary or not. */ DETERMINE_SECURE; /* 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 definition 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 int) 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 the 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'; /* When this is a SUID binary we must not allow accessing files outside the dedicated directories. */ if (ENABLE_SECURE && (memchr (single_locale, '/', _nl_find_language (single_locale) - single_locale) != NULL)) /* Ingore this entry. */ continue; } /* 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 * internal_function find_msg (domain_file, msgid) struct loaded_l10nfile *domain_file; const char *msgid; { size_t act = 0; size_t top, 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 * internal_function 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 * internal_function 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 #ifdef _LIBC /* If we want to free all resources we have to do some work at program's end. */ static void __attribute__ ((unused)) free_mem (void) { struct binding *runp; for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next) { free (runp->domainname); if (runp->dirname != _nl_default_dirname) /* Yes, this is a pointer comparison. */ free (runp->dirname); } if (_nl_current_default_domain != _nl_default_default_domain) /* Yes, again a pointer comparison. */ free ((char *) _nl_current_default_domain); } text_set_element (__libc_subfreeres, free_mem); #endif baycomepp-0.10.orig/intl/dgettext.c0100644000175100017510000000337206733244662015366 0ustar abaaba/* Implementation of the dgettext(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 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 baycomepp-0.10.orig/intl/gettext.c0100644000175100017510000000362306733244662015221 0ustar abaaba/* 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 baycomepp-0.10.orig/intl/finddomain.c0100644000175100017510000001333406733244662015645 0ustar abaaba/* Handle list of needed message catalogs Copyright (C) 1995, 1996, 1997, 1998 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 * internal_function _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 part 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 parts will be stripped off 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) { #if defined _LIBC || defined HAVE_STRDUP locale = strdup (alias_value); if (locale == NULL) return NULL; #else size_t len = strlen (alias_value) + 1; locale = (char *) malloc (len); if (locale == NULL) return NULL; memcpy (locale, alias_value, len); #endif } /* 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; } #ifdef _LIBC static void __attribute__ ((unused)) free_mem (void) { struct loaded_l10nfile *runp = _nl_loaded_domains; while (runp != NULL) { struct loaded_l10nfile *here = runp; if (runp->data != NULL) _nl_unload_domain ((struct loaded_domain *) runp->data); runp = runp->next; free (here); } } text_set_element (__libc_subfreeres, free_mem); #endif baycomepp-0.10.orig/intl/loadmsgcat.c0100644000175100017510000001334606733244663015657 0ustar abaaba/* Load needed message catalogs. Copyright (C) 1995, 1996, 1997, 1998 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 DISALLOW_MMAP) \ || (defined _LIBC && defined _POSIX_MAPPED_FILES) # include # undef HAVE_MMAP # define HAVE_MMAP 1 #else # undef HAVE_MMAP #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 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 internal_function _nl_load_domain (domain_file) struct loaded_l10nfile *domain_file; { int fd; size_t size; struct stat st; struct mo_file_header *data = (struct mo_file_header *) -1; int use_mmap = 0; 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 || (size = (size_t) st.st_size) != st.st_size || size < sizeof (struct mo_file_header)) { /* Something went wrong. */ close (fd); return; } #ifdef HAVE_MMAP /* 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, 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) { size_t to_read; char *read_ptr; data = (struct mo_file_header *) malloc (size); if (data == NULL) return; to_read = 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. */ #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, 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->use_mmap = use_mmap; domain->mmap_size = size; 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 invalid revision. */ #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, 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; } #ifdef _LIBC void internal_function _nl_unload_domain (domain) struct loaded_domain *domain; { #ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) munmap ((caddr_t) domain->data, domain->mmap_size); else #endif /* _POSIX_MAPPED_FILES */ free ((void *) domain->data); free (domain); } #endif baycomepp-0.10.orig/intl/localealias.c0100644000175100017510000002423106733244663016005 0ustar abaaba/* Handle aliases for locale names. Copyright (C) 1995, 1996, 1997, 1998 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 # ifndef mempcpy # define mempcpy __mempcpy # endif # define HAVE_MEMPCPY 1 /* We need locking here since we can be called from different places. */ # include __libc_lock_define_initialized (static, lock); #endif #ifndef internal_function # define internal_function #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 */ #if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED # undef fgets # define fgets(buf, len, s) fgets_unlocked (buf, len, s) #endif #if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED # undef feof # define feof(s) feof_unlocked (s) #endif struct alias_map { const char *alias; const char *value; }; static char *string_space = NULL; static size_t string_space_act = 0; static size_t string_space_max = 0; 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)) internal_function; 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; const char *result = NULL; size_t added; #ifdef _LIBC __libc_lock_lock (lock); #endif 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) { result = retval->value; break; } /* 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); #ifdef _LIBC __libc_lock_unlock (lock); #endif return result; } static size_t internal_function 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); #ifdef HAVE_MEMPCPY mempcpy (mempcpy (full_fname, fname, fname_len), aliasfile, sizeof aliasfile); #else memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); #endif 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, sizeof buf, fp) == NULL) /* EOF reached. */ break; /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ if (strchr (buf, '\n') == NULL) { char altbuf[BUFSIZ]; do if (fgets (altbuf, sizeof altbuf, fp) == NULL) /* Make sure the inner loop will be left. The outer loop will exit at the `feof' test. */ break; while (strchr (altbuf, '\n') == NULL); } 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') { size_t alias_len; size_t value_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 (); alias_len = strlen (alias) + 1; value_len = strlen (value) + 1; if (string_space_act + alias_len + value_len > string_space_max) { /* Increase size of memory pool. */ size_t new_size = (string_space_max + (alias_len + value_len > 1024 ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) { FREE_BLOCKS (block_list); return added; } string_space = new_pool; string_space_max = new_size; } map[nmap].alias = memcpy (&string_space[string_space_act], alias, alias_len); string_space_act += alias_len; map[nmap].value = memcpy (&string_space[string_space_act], value, value_len); string_space_act += value_len; ++nmap; ++added; } } } /* 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 *) realloc (map, (new_size * sizeof (struct alias_map))); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ return; map = new_map; maxmap = new_size; } #ifdef _LIBC static void __attribute__ ((unused)) free_mem (void) { if (string_space != NULL) free (string_space); if (map != NULL) free (map); } text_set_element (__libc_subfreeres, free_mem); #endif 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 } baycomepp-0.10.orig/intl/textdomain.c0100644000175100017510000000630106733244663015706 0ustar abaaba/* Implementation of the textdomain(3) function. Copyright (C) 1995, 1996, 1997, 1998 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 # ifndef strdup # define strdup(str) __strdup (str) # endif #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 baycomepp-0.10.orig/intl/l10nflist.c0100644000175100017510000002423306733244663015352 0ustar abaaba/* Handle list of needed message catalogs 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 #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. */ # ifndef stpcpy # define stpcpy(dest, src) __stpcpy(dest, src) # endif #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 baycomepp-0.10.orig/intl/explodename.c0100644000175100017510000001120506733244662016031 0ustar abaaba/* Copyright (C) 1995, 1996, 1997, 1998 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 #if defined STDC_HEADERS || defined _LIBC # include #endif #if defined HAVE_STRING_H || defined _LIBC # include #else # include #endif #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 @@ */ char * _nl_find_language (const char *name) { while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '+' && name[0] != ',') ++name; return (char *) name; } 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; cp = _nl_find_language (*language); 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; } baycomepp-0.10.orig/intl/intl-compat.c0100644000175100017510000000315606733244662015765 0ustar abaaba/* 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); } baycomepp-0.10.orig/intl/cat-compat.c0100644000175100017510000001474106733244662015570 0ustar abaaba/* 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 baycomepp-0.10.orig/intl/VERSION0100644000175100017510000000005106733244662014431 0ustar abaabaGNU gettext library from gettext-0.10.35 baycomepp-0.10.orig/po/0042755000175100017510000000000007511777221013037 5ustar abaababaycomepp-0.10.orig/po/ChangeLog0100644000175100017510000000000006743112660014566 0ustar abaababaycomepp-0.10.orig/po/Makefile.in.in0100644000175100017510000001530606733244663015515 0ustar abaaba# 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 \ && test ! -f $(PACKAGE).po \ || ( 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 \ $(SHELL) $(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 \ $(SHELL) $(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 \ $(SHELL) $(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: baycomepp-0.10.orig/po/POTFILES.in0100644000175100017510000000023706761313541014606 0ustar abaaba# List of source files containing translatable strings. eppfm2/src/main.c eppfm2/src/audio.c eppfm2/src/interface.c eppfm2/src/widgets.c eppfm2/src/support.c baycomepp-0.10.orig/po/baycomepp.pot0100644000175100017510000001072407143607374015543 0ustar abaaba# 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: 2000-08-07 21:33+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" #: eppfm2/src/main.c:346 msgid "Squelch on" msgstr "" #: eppfm2/src/interface.c:585 eppfm2/src/main.c:346 msgid "Squelch off" msgstr "" #: eppfm2/src/interface.c:62 msgid "EPPFM Input/Output Configuration" msgstr "" #: eppfm2/src/interface.c:72 msgid "Soundcard Settings" msgstr "" #: eppfm2/src/interface.c:100 eppfm2/src/interface.c:116 msgid "/dev/dsp" msgstr "" #: eppfm2/src/interface.c:101 eppfm2/src/interface.c:117 msgid "/dev/dsp1" msgstr "" #: eppfm2/src/interface.c:121 msgid "Soundcard for Recording" msgstr "" #: eppfm2/src/interface.c:134 msgid "Soundcard for Playback" msgstr "" #: eppfm2/src/interface.c:147 msgid "Parallel Port Driver Settings" msgstr "" #: eppfm2/src/interface.c:176 msgid "0x378" msgstr "" #: eppfm2/src/interface.c:177 msgid "0x278" msgstr "" #: eppfm2/src/interface.c:194 msgid "/dev/ppuser0" msgstr "" #: eppfm2/src/interface.c:195 msgid "/dev/ppuser1" msgstr "" #: eppfm2/src/interface.c:199 msgid "IO Address" msgstr "" #: eppfm2/src/interface.c:211 msgid "File" msgstr "" #: eppfm2/src/interface.c:223 msgid "Driver Selection" msgstr "" #: eppfm2/src/interface.c:235 msgid "Direct Parport Access" msgstr "" #: eppfm2/src/interface.c:246 msgid "ppdev Kernel Driver" msgstr "" #: eppfm2/src/interface.c:257 msgid "Modem Settings" msgstr "" #: eppfm2/src/interface.c:284 msgid "19666600" msgstr "" #: eppfm2/src/interface.c:285 msgid "9830400" msgstr "" #: eppfm2/src/interface.c:289 msgid "FPGA clock frequency" msgstr "" #: eppfm2/src/interface.c:311 eppfm2/src/interface.c:744 msgid "Ok" msgstr "" #: eppfm2/src/interface.c:319 msgid "Continue" msgstr "" #: eppfm2/src/interface.c:321 msgid "Quit" msgstr "" #: eppfm2/src/interface.c:329 msgid "Quit the application" msgstr "" #: eppfm2/src/interface.c:387 msgid "EPPFM" msgstr "" #: eppfm2/src/interface.c:415 msgid "_File" msgstr "" #: eppfm2/src/interface.c:424 msgid "File Menu" msgstr "" #: eppfm2/src/interface.c:436 msgid "_DTMF keypad..." msgstr "" #: eppfm2/src/interface.c:448 msgid "_Oscilloscope display..." msgstr "" #: eppfm2/src/interface.c:460 msgid "_Spectrum Display..." msgstr "" #: eppfm2/src/interface.c:481 msgid "_Quit" msgstr "" #: eppfm2/src/interface.c:493 msgid "_Help" msgstr "" #: eppfm2/src/interface.c:514 msgid "_About" msgstr "" #: eppfm2/src/interface.c:568 msgid "PTT" msgstr "" #: eppfm2/src/interface.c:577 msgid "1750" msgstr "" #: eppfm2/src/interface.c:593 msgid "DTMF" msgstr "" #: eppfm2/src/interface.c:601 eppfm2/src/interface.c:1144 msgid "Scope" msgstr "" #: eppfm2/src/interface.c:609 eppfm2/src/interface.c:1175 msgid "Spectrum" msgstr "" #: eppfm2/src/interface.c:690 msgid "About" msgstr "" #: eppfm2/src/interface.c:708 msgid "written by:" msgstr "" #: eppfm2/src/interface.c:718 msgid "Thomas Sailer" msgstr "" #: eppfm2/src/interface.c:727 msgid "HB9JNX/AE4WA" msgstr "" #: eppfm2/src/interface.c:797 msgid "DTMF Keypad" msgstr "" #: eppfm2/src/interface.c:807 msgid "Keys transmitted" msgstr "" #: eppfm2/src/interface.c:834 msgid "Clear" msgstr "" #: eppfm2/src/interface.c:843 msgid "Keypad" msgstr "" #: eppfm2/src/interface.c:861 msgid "8" msgstr "" #: eppfm2/src/interface.c:871 msgid "9" msgstr "" #: eppfm2/src/interface.c:881 msgid "A" msgstr "" #: eppfm2/src/interface.c:891 msgid "4" msgstr "" #: eppfm2/src/interface.c:901 msgid "5" msgstr "" #: eppfm2/src/interface.c:911 msgid "6" msgstr "" #: eppfm2/src/interface.c:921 msgid "B" msgstr "" #: eppfm2/src/interface.c:931 msgid "1" msgstr "" #: eppfm2/src/interface.c:941 msgid "2" msgstr "" #: eppfm2/src/interface.c:951 msgid "3" msgstr "" #: eppfm2/src/interface.c:961 msgid "C" msgstr "" #: eppfm2/src/interface.c:971 msgid "*" msgstr "" #: eppfm2/src/interface.c:981 msgid "0" msgstr "" #: eppfm2/src/interface.c:991 msgid "#" msgstr "" #: eppfm2/src/interface.c:1001 msgid "D" msgstr "" #: eppfm2/src/interface.c:1011 msgid "7" msgstr "" #: eppfm2/src/support.c:117 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "" #: eppfm2/src/support.c:126 #, c-format msgid "Error loading pixmap file: %s" msgstr "" baycomepp-0.10.orig/po/stamp-cat-id0100644000175100017510000000001207143607374015233 0ustar abaabatimestamp baycomepp-0.10.orig/po/cat-id-tbl.c0100644000175100017510000000312406743566243015124 0ustar abaaba/* Automatically generated by po2tbl.sed from baycomepp.pot. */ #if HAVE_CONFIG_H # include #endif #include "libgettext.h" const struct _msg_ent _msg_tbl[] = { {"", 1}, {"Squelch on", 2}, {"Squelch off", 3}, {"EPPFM Input/Output Configuration", 4}, {"Soundcard Settings", 5}, {"/dev/dsp", 6}, {"/dev/dsp1", 7}, {"Soundcard for Recording", 8}, {"Soundcard for Playback", 9}, {"Parallel Port Driver Settings", 10}, {"0x378", 11}, {"0x278", 12}, {"/dev/ppuser0", 13}, {"/dev/ppuser1", 14}, {"IO Address", 15}, {"File", 16}, {"Driver Selection", 17}, {"Direct Parport Access", 18}, {"ppdev Kernel Driver", 19}, {"Modem Settings", 20}, {"19666600", 21}, {"9830400", 22}, {"FPGA clock frequency", 23}, {"Ok", 24}, {"Continue", 25}, {"Quit", 26}, {"Quit the application", 27}, {"EPPFM", 28}, {"_File", 29}, {"File Menu", 30}, {"_DTMF keypad...", 31}, {"_Oscilloscope display...", 32}, {"_Spectrum Display...", 33}, {"_Quit", 34}, {"_Help", 35}, {"_About", 36}, {"PTT", 37}, {"1750", 38}, {"DTMF", 39}, {"Scope", 40}, {"Spectrum", 41}, {"About", 42}, {"written by:", 43}, {"Thomas Sailer", 44}, {"HB9JNX/AE4WA", 45}, {"DTMF Keypad", 46}, {"Keys transmitted", 47}, {"Clear", 48}, {"Keypad", 49}, {"8", 50}, {"9", 51}, {"A", 52}, {"4", 53}, {"5", 54}, {"6", 55}, {"B", 56}, {"1", 57}, {"2", 58}, {"3", 59}, {"C", 60}, {"*", 61}, {"0", 62}, {"#", 63}, {"D", 64}, {"7", 65}, {"Couldn't find pixmap file: %s", 66}, {"Error loading pixmap file: %s", 67}, }; int _msg_tbl_length = 67; baycomepp-0.10.orig/directx/0042755000175100017510000000000007511777221014063 5ustar abaababaycomepp-0.10.orig/directx/Makefile.in0100644000175100017510000002136207511777221016127 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ INCLUDES = -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" \ -I$(top_srcdir)/directx/include -I$(top_srcdir)/directx/include/directx6 @DIRECTX_TRUE@BUILT_SOURCES = @DIRECTX_TRUE@libddraw.a libdsound.a libdinput.a libdplayx.a @DIRECTX_TRUE@noinst_LIBRARIES = @DIRECTX_TRUE@libdinput1.a @DIRECTX_TRUE@libdinput1_a_SOURCES = @DIRECTX_TRUE@dinput.c EXTRA_DIST = libddraw.def libdinput.def libdplayx.def libdsound.def dinput.c \ fixdirectx.sh deunion.pl include/directx.h include/mmsystem.h CLEANFILES = libddraw.a libdinput.a libdplayx.a libdsound.a mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libdinput1_a_LIBADD = @DIRECTX_TRUE@libdinput1_a_OBJECTS = dinput.$(OBJEXT) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(libdinput1_a_SOURCES) OBJECTS = $(libdinput1_a_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps directx/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 $< # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: libdinput1.a: $(libdinput1_a_OBJECTS) $(libdinput1_a_DEPENDENCIES) -rm -f libdinput1.a $(AR) cru libdinput1.a $(libdinput1_a_OBJECTS) $(libdinput1_a_LIBADD) $(RANLIB) libdinput1.a 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 = directx distdir: $(DISTFILES) $(mkinstalldirs) $(distdir)/include @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-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 $(LIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-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]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \ mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-tags distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile 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 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 libddraw.a libdsound.a libdplayx.a: libddraw.def libdsound.def libdplayx.def for i in ddraw dsound dplayx; do \ $(DLLTOOL) --as $(AS) -k --dllname $$i.dll --output-lib lib$$i.a --def $(srcdir)/lib$$i.def; \ done libdinput.a: libdinput1.a libdinput.def $(DLLTOOL) --as $(AS) -k --dllname dinput.dll --output-lib $@ --def $(srcdir)/libdinput.def $(AR) xv libdinput1.a dinput.$(OBJEXT) $(AR) rv $@ dinput.$(OBJEXT) $(RM) -f $< # 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: baycomepp-0.10.orig/directx/include/0042755000175100017510000000000007511777221015506 5ustar abaababaycomepp-0.10.orig/directx/include/directx.h0100644000175100017510000000306206737067632017324 0ustar abaaba #ifndef _directx_h_ #define _directx_h /* Include all of the DirectX 5.0 headers and adds any necessary tweaks */ #include #include #ifndef WIN32 #define WIN32 #endif #undef WINNT /* Far pointers don't exist in 32-bit code */ #ifndef FAR #define FAR #endif /* Error codes not yet included in Win32 API header files */ #ifndef MAKE_HRESULT #define MAKE_HRESULT(sev,fac,code) \ ((HRESULT)(((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code)))) #endif #ifndef S_OK #define S_OK (HRESULT)0x00000000L #endif #ifndef SUCCEEDED #define SUCCEEDED(x) ((HRESULT)(x) >= 0) #endif #ifndef FAILED #define FAILED(x) ((HRESULT)(x)<0) #endif #ifndef E_FAIL #define E_FAIL (HRESULT)0x80000008L #endif #ifndef E_NOINTERFACE #define E_NOINTERFACE (HRESULT)0x80004002L #endif #ifndef E_OUTOFMEMORY #define E_OUTOFMEMORY (HRESULT)0x8007000EL #endif #ifndef E_INVALIDARG #define E_INVALIDARG (HRESULT)0x80070057L #endif #ifndef E_NOTIMPL #define E_NOTIMPL (HRESULT)0x80004001L #endif #ifndef REGDB_E_CLASSNOTREG #define REGDB_E_CLASSNOTREG (HRESULT)0x80040154L #endif /* Severity codes */ #ifndef SEVERITY_ERROR #define SEVERITY_ERROR 1 #endif /* Error facility codes */ #ifndef FACILITY_WIN32 #define FACILITY_WIN32 7 #endif #ifndef FIELD_OFFSET #define FIELD_OFFSET(type, field) ((LONG)&(((type *)0)->field)) #endif /* DirectX 6.0 header includes (if it isn't included, I haven't tested it yet) */ #ifdef __GNUC__ #define NONAMELESSUNION #endif #include #include #include #endif /* _directx_h */ baycomepp-0.10.orig/directx/include/mmsystem.h0100644000175100017510000001522606737067642017546 0ustar abaaba #ifndef _mmsystem_h #define _mmsystem_h /* Multimedia header file -- not really part of DirectX, but not included in the Win32 API headers. */ /* Result code definition */ typedef UINT MMRESULT; typedef DWORD MCIERROR; /* Various error values */ #define MAXERRORLENGTH 256 /* Maximum length of error message */ #define MMSYSERR_NOERROR 0 #define TIMERR_NOERROR MMSYSERR_NOERROR #define TIMERR_NOCANDO 97 /* Wave out device handle */ typedef HANDLE HWAVEOUT; /* MCI device handle */ typedef UINT MCIDEVICEID; /* Have the system choose a wave device */ #define WAVE_MAPPER ((UINT)-1) /* Specify the type of wave event callback */ #define CALLBACK_FUNCTION 0x00030000 #define CALLBACK_EVENT 0x00050000 /* Messages sent to the waveOut callback function */ #define WOM_DONE 0x3BD /* The wave buffer header used by waveOut functions */ typedef struct WAVEHDR { LPSTR lpData; DWORD dwBufferLength; DWORD dwBytesRecorded; DWORD dwUser; DWORD dwFlags; DWORD dwLoops; struct WAVEHDR *lpNext; DWORD reserved; } WAVEHDR; /* WAVEHDR.dwFlags */ #define WHDR_DONE 0x00000001 #define WHDR_BEGINLOOP 0x00000004 #define WHDR_ENDLOOP 0x00000008 #define WHDR_INQUEUE 0x00000010 /* Structure used in querying the capabilities of a wave device */ typedef struct { WORD wMid; WORD wPid; UINT vDriverVersion; CHAR szPname[32]; DWORD dwFormats; WORD wReserved1; DWORD dwSupport; } WAVEOUTCAPS; /* The only kind of sound data we handle here */ #define WAVE_FORMAT_PCM 1 /* Old wave format structure */ typedef struct { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; } WAVEFORMAT, *LPWAVEFORMAT; /* PCM wave format structure */ typedef struct { WAVEFORMAT wf; WORD wBitsPerSample; } PCMWAVEFORMAT; /* Wave format structure (used by dsound.h) */ typedef struct { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX, *LPWAVEFORMATEX; /* Constants used as arguments and flags to mciSendCommand() */ /* CD device type */ #define MCI_STRING_OFFSET 512 #define MCI_DEVTYPE_CD_AUDIO (MCI_STRING_OFFSET + 4) /* MCI commands */ #define MCI_OPEN 0x0803 #define MCI_CLOSE 0x0804 #define MCI_PLAY 0x0806 #define MCI_STOP 0x0808 #define MCI_PAUSE 0x0809 #define MCI_SET 0x080D #define MCI_STATUS 0x0814 #define MCI_RESUME 0x0855 /* Flags for MCI commands */ #define MCI_NOTIFY 0x00000001 #define MCI_WAIT 0x00000002 #define MCI_FROM 0x00000004 #define MCI_TO 0x00000008 #define MCI_TRACK 0x00000010 /* Flags for MCI Play command */ #define MCI_OPEN_SHAREABLE 0x00000100 #define MCI_OPEN_ELEMENT 0x00000200 #define MCI_OPEN_TYPE_ID 0x00001000 #define MCI_OPEN_TYPE 0x00002000 /* Flags for MCI Status command */ #define MCI_STATUS_ITEM 0x00000100 #define MCI_STATUS_LENGTH 0x00000001 #define MCI_STATUS_POSITION 0x00000002 #define MCI_STATUS_NUMBER_OF_TRACKS 0x00000003 #define MCI_STATUS_MODE 0x00000004 #define MCI_STATUS_MEDIA_PRESENT 0x00000005 #define MCI_STATUS_TIME_FORMAT 0x00000006 #define MCI_STATUS_READY 0x00000007 #define MCI_STATUS_CURRENT_TRACK 0x00000008 /* Flags for MCI Set command */ #define MCI_SET_DOOR_OPEN 0x00000100 #define MCI_SET_DOOR_CLOSED 0x00000200 #define MCI_SET_TIME_FORMAT 0x00000400 /* MCI device status flags */ #define MCI_MODE_NOT_READY (MCI_STRING_OFFSET + 12) #define MCI_MODE_STOP (MCI_STRING_OFFSET + 13) #define MCI_MODE_PLAY (MCI_STRING_OFFSET + 14) #define MCI_MODE_RECORD (MCI_STRING_OFFSET + 15) #define MCI_MODE_SEEK (MCI_STRING_OFFSET + 16) #define MCI_MODE_PAUSE (MCI_STRING_OFFSET + 17) #define MCI_MODE_OPEN (MCI_STRING_OFFSET + 18) /* Constants used to specify MCI time formats */ #define MCI_FORMAT_MILLISECONDS 0 #define MCI_FORMAT_HMS 1 #define MCI_FORMAT_MSF 2 #define MCI_FORMAT_FRAMES 3 #define MCI_FORMAT_BYTES 8 #define MCI_FORMAT_SAMPLES 9 #define MCI_FORMAT_TMSF 10 #define MCI_MSF_MINUTE(msf) ((BYTE)(msf)) #define MCI_MSF_SECOND(msf) ((BYTE)(((WORD)(msf)) >> 8)) #define MCI_MSF_FRAME(msf) ((BYTE)((msf)>>16)) #define MCI_MAKE_MSF(m, s, f) \ ((DWORD)(((BYTE)(m)|((WORD)(s)<<8))|(((DWORD)(BYTE)(f))<<16))) /* Structures passed as arguments to mciSendCommand() */ typedef struct { DWORD dwCallback; MCIDEVICEID wDeviceID; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; } MCI_OPEN_PARMS; typedef struct { DWORD dwCallback; DWORD dwTimeFormat; DWORD dwAudio; } MCI_SET_PARMS; typedef struct { DWORD dwCallback; DWORD dwFrom; DWORD dwTo; } MCI_PLAY_PARMS; typedef struct { DWORD dwCallback; DWORD dwReturn; DWORD dwItem; DWORD dwTrack; } MCI_STATUS_PARMS; /* Convert a string to a 4 byte multimedia code */ #ifndef mmioFOURCC #define mmioFOURCC(c0, c1, c2, c3) \ ((DWORD)(c0)|((DWORD)(c1)<<8)|((DWORD)(c2)<<16)|((DWORD)(c3)<<24)) #endif /* timer callback function prototype */ typedef void (CALLBACK TIMECALLBACK)(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2); /* What type of timer to set */ #define TIME_ONESHOT 0x0000 /* program timer for single event */ #define TIME_PERIODIC 0x0001 /* program for continuous periodic event */ /* Multimedia timer function declarations */ extern MMRESULT WINAPI timeSetEvent(UINT uDelay, UINT uResolution, TIMECALLBACK *fptc, DWORD dwUser, UINT fuEvent); extern MMRESULT WINAPI timeKillEvent(UINT uTimerID); extern MMRESULT WINAPI timeBeginPeriod(UINT uPeriod); extern MMRESULT WINAPI timeEndPeriod(UINT uPeriod); /* The waveOut* function declarations */ extern MMRESULT WINAPI waveOutOpen(HWAVEOUT *phwo, UINT uDeviceID, WAVEFORMATEX *pwfx, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen); extern MMRESULT WINAPI waveOutClose(HWAVEOUT hwo); extern MMRESULT WINAPI waveOutPrepareHeader(HWAVEOUT hwo, WAVEHDR *pwh, UINT cbwh); extern MMRESULT WINAPI waveOutUnprepareHeader(HWAVEOUT hwo, WAVEHDR *pwh, UINT cbwh); extern MMRESULT WINAPI waveOutWrite(HWAVEOUT hwo, WAVEHDR *pwh, UINT cbwh); extern MMRESULT WINAPI waveOutPause(HWAVEOUT hwo); extern MMRESULT WINAPI waveOutRestart(HWAVEOUT hwo); extern MMRESULT WINAPI waveOutReset(HWAVEOUT hwo); extern MMRESULT WINAPI waveOutBreakLoop(HWAVEOUT hwo); #define waveOutGetDevCaps waveOutGetDevCapsA extern MMRESULT WINAPI waveOutGetDevCapsA(UINT uDeviceID, WAVEOUTCAPS *pwoc, UINT cbwoc); #define waveOutGetErrorText waveOutGetErrorTextA extern MMRESULT WINAPI waveOutGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText); /* The MCI command interface */ #define mciSendCommand mciSendCommandA extern MCIERROR WINAPI mciSendCommandA(MCIDEVICEID mciId, UINT uMsg, DWORD dwParam1, DWORD dwParam2); #define mciGetErrorString mciGetErrorStringA extern int WINAPI mciGetErrorStringA(DWORD hErr, LPCSTR lpBuf, DWORD dwLen); #endif /* _mmsystem_h */ baycomepp-0.10.orig/directx/Makefile.am0100644000175100017510000000165507141053727016116 0ustar abaaba INCLUDES = -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" \ -I$(top_srcdir)/directx/include -I$(top_srcdir)/directx/include/directx6 if DIRECTX BUILT_SOURCES = libddraw.a libdsound.a libdinput.a libdplayx.a noinst_LIBRARIES = libdinput1.a libdinput1_a_SOURCES = dinput.c endif libddraw.a libdsound.a libdplayx.a: libddraw.def libdsound.def libdplayx.def for i in ddraw dsound dplayx; do \ $(DLLTOOL) --as $(AS) -k --dllname $$i.dll --output-lib lib$$i.a --def $(srcdir)/lib$$i.def; \ done libdinput.a: libdinput1.a libdinput.def $(DLLTOOL) --as $(AS) -k --dllname dinput.dll --output-lib $@ --def $(srcdir)/libdinput.def $(AR) xv libdinput1.a dinput.$(OBJEXT) $(AR) rv $@ dinput.$(OBJEXT) $(RM) -f $< EXTRA_DIST = libddraw.def libdinput.def libdplayx.def libdsound.def dinput.c \ fixdirectx.sh deunion.pl include/directx.h include/mmsystem.h CLEANFILES = libddraw.a libdinput.a libdplayx.a libdsound.a baycomepp-0.10.orig/directx/libddraw.def0100644000175100017510000000006506552534624016331 0ustar abaabaEXPORTS DirectDrawCreate@12 DirectDrawEnumerateA@8 baycomepp-0.10.orig/directx/libdinput.def0100644000175100017510000000003706552534624016532 0ustar abaabaEXPORTS DirectInputCreateA@16 baycomepp-0.10.orig/directx/libdplayx.def0100644000175100017510000000004306552534624016525 0ustar abaabaEXPORTS DirectPlayLobbyCreateA@20 baycomepp-0.10.orig/directx/libdsound.def0100644000175100017510000000032106737072263016520 0ustar abaabaEXPORTS DirectSoundCaptureEnumerateW@8 DirectSoundCaptureEnumerateA@8 DirectSoundCaptureCreate@12 DllGetClassObject DllCanUnloadNow DirectSoundEnumerateW@8 DirectSoundEnumerateA@8 DirectSoundCreate@12 baycomepp-0.10.orig/directx/dinput.c0100644000175100017510000003333106552534624015532 0ustar abaaba #include /* * This file contains experimentally determined values for the c_cfDI* * constants used in DirectX 5.0 */ /* Keyboard */ static DIOBJECTDATAFORMAT KBD_fmt[] = { { &GUID_Key, 0, 0x8000000C, 0x00000000 }, { &GUID_Key, 1, 0x8000010C, 0x00000000 }, { &GUID_Key, 2, 0x8000020C, 0x00000000 }, { &GUID_Key, 3, 0x8000030C, 0x00000000 }, { &GUID_Key, 4, 0x8000040C, 0x00000000 }, { &GUID_Key, 5, 0x8000050C, 0x00000000 }, { &GUID_Key, 6, 0x8000060C, 0x00000000 }, { &GUID_Key, 7, 0x8000070C, 0x00000000 }, { &GUID_Key, 8, 0x8000080C, 0x00000000 }, { &GUID_Key, 9, 0x8000090C, 0x00000000 }, { &GUID_Key, 10, 0x80000A0C, 0x00000000 }, { &GUID_Key, 11, 0x80000B0C, 0x00000000 }, { &GUID_Key, 12, 0x80000C0C, 0x00000000 }, { &GUID_Key, 13, 0x80000D0C, 0x00000000 }, { &GUID_Key, 14, 0x80000E0C, 0x00000000 }, { &GUID_Key, 15, 0x80000F0C, 0x00000000 }, { &GUID_Key, 16, 0x8000100C, 0x00000000 }, { &GUID_Key, 17, 0x8000110C, 0x00000000 }, { &GUID_Key, 18, 0x8000120C, 0x00000000 }, { &GUID_Key, 19, 0x8000130C, 0x00000000 }, { &GUID_Key, 20, 0x8000140C, 0x00000000 }, { &GUID_Key, 21, 0x8000150C, 0x00000000 }, { &GUID_Key, 22, 0x8000160C, 0x00000000 }, { &GUID_Key, 23, 0x8000170C, 0x00000000 }, { &GUID_Key, 24, 0x8000180C, 0x00000000 }, { &GUID_Key, 25, 0x8000190C, 0x00000000 }, { &GUID_Key, 26, 0x80001A0C, 0x00000000 }, { &GUID_Key, 27, 0x80001B0C, 0x00000000 }, { &GUID_Key, 28, 0x80001C0C, 0x00000000 }, { &GUID_Key, 29, 0x80001D0C, 0x00000000 }, { &GUID_Key, 30, 0x80001E0C, 0x00000000 }, { &GUID_Key, 31, 0x80001F0C, 0x00000000 }, { &GUID_Key, 32, 0x8000200C, 0x00000000 }, { &GUID_Key, 33, 0x8000210C, 0x00000000 }, { &GUID_Key, 34, 0x8000220C, 0x00000000 }, { &GUID_Key, 35, 0x8000230C, 0x00000000 }, { &GUID_Key, 36, 0x8000240C, 0x00000000 }, { &GUID_Key, 37, 0x8000250C, 0x00000000 }, { &GUID_Key, 38, 0x8000260C, 0x00000000 }, { &GUID_Key, 39, 0x8000270C, 0x00000000 }, { &GUID_Key, 40, 0x8000280C, 0x00000000 }, { &GUID_Key, 41, 0x8000290C, 0x00000000 }, { &GUID_Key, 42, 0x80002A0C, 0x00000000 }, { &GUID_Key, 43, 0x80002B0C, 0x00000000 }, { &GUID_Key, 44, 0x80002C0C, 0x00000000 }, { &GUID_Key, 45, 0x80002D0C, 0x00000000 }, { &GUID_Key, 46, 0x80002E0C, 0x00000000 }, { &GUID_Key, 47, 0x80002F0C, 0x00000000 }, { &GUID_Key, 48, 0x8000300C, 0x00000000 }, { &GUID_Key, 49, 0x8000310C, 0x00000000 }, { &GUID_Key, 50, 0x8000320C, 0x00000000 }, { &GUID_Key, 51, 0x8000330C, 0x00000000 }, { &GUID_Key, 52, 0x8000340C, 0x00000000 }, { &GUID_Key, 53, 0x8000350C, 0x00000000 }, { &GUID_Key, 54, 0x8000360C, 0x00000000 }, { &GUID_Key, 55, 0x8000370C, 0x00000000 }, { &GUID_Key, 56, 0x8000380C, 0x00000000 }, { &GUID_Key, 57, 0x8000390C, 0x00000000 }, { &GUID_Key, 58, 0x80003A0C, 0x00000000 }, { &GUID_Key, 59, 0x80003B0C, 0x00000000 }, { &GUID_Key, 60, 0x80003C0C, 0x00000000 }, { &GUID_Key, 61, 0x80003D0C, 0x00000000 }, { &GUID_Key, 62, 0x80003E0C, 0x00000000 }, { &GUID_Key, 63, 0x80003F0C, 0x00000000 }, { &GUID_Key, 64, 0x8000400C, 0x00000000 }, { &GUID_Key, 65, 0x8000410C, 0x00000000 }, { &GUID_Key, 66, 0x8000420C, 0x00000000 }, { &GUID_Key, 67, 0x8000430C, 0x00000000 }, { &GUID_Key, 68, 0x8000440C, 0x00000000 }, { &GUID_Key, 69, 0x8000450C, 0x00000000 }, { &GUID_Key, 70, 0x8000460C, 0x00000000 }, { &GUID_Key, 71, 0x8000470C, 0x00000000 }, { &GUID_Key, 72, 0x8000480C, 0x00000000 }, { &GUID_Key, 73, 0x8000490C, 0x00000000 }, { &GUID_Key, 74, 0x80004A0C, 0x00000000 }, { &GUID_Key, 75, 0x80004B0C, 0x00000000 }, { &GUID_Key, 76, 0x80004C0C, 0x00000000 }, { &GUID_Key, 77, 0x80004D0C, 0x00000000 }, { &GUID_Key, 78, 0x80004E0C, 0x00000000 }, { &GUID_Key, 79, 0x80004F0C, 0x00000000 }, { &GUID_Key, 80, 0x8000500C, 0x00000000 }, { &GUID_Key, 81, 0x8000510C, 0x00000000 }, { &GUID_Key, 82, 0x8000520C, 0x00000000 }, { &GUID_Key, 83, 0x8000530C, 0x00000000 }, { &GUID_Key, 84, 0x8000540C, 0x00000000 }, { &GUID_Key, 85, 0x8000550C, 0x00000000 }, { &GUID_Key, 86, 0x8000560C, 0x00000000 }, { &GUID_Key, 87, 0x8000570C, 0x00000000 }, { &GUID_Key, 88, 0x8000580C, 0x00000000 }, { &GUID_Key, 89, 0x8000590C, 0x00000000 }, { &GUID_Key, 90, 0x80005A0C, 0x00000000 }, { &GUID_Key, 91, 0x80005B0C, 0x00000000 }, { &GUID_Key, 92, 0x80005C0C, 0x00000000 }, { &GUID_Key, 93, 0x80005D0C, 0x00000000 }, { &GUID_Key, 94, 0x80005E0C, 0x00000000 }, { &GUID_Key, 95, 0x80005F0C, 0x00000000 }, { &GUID_Key, 96, 0x8000600C, 0x00000000 }, { &GUID_Key, 97, 0x8000610C, 0x00000000 }, { &GUID_Key, 98, 0x8000620C, 0x00000000 }, { &GUID_Key, 99, 0x8000630C, 0x00000000 }, { &GUID_Key, 100, 0x8000640C, 0x00000000 }, { &GUID_Key, 101, 0x8000650C, 0x00000000 }, { &GUID_Key, 102, 0x8000660C, 0x00000000 }, { &GUID_Key, 103, 0x8000670C, 0x00000000 }, { &GUID_Key, 104, 0x8000680C, 0x00000000 }, { &GUID_Key, 105, 0x8000690C, 0x00000000 }, { &GUID_Key, 106, 0x80006A0C, 0x00000000 }, { &GUID_Key, 107, 0x80006B0C, 0x00000000 }, { &GUID_Key, 108, 0x80006C0C, 0x00000000 }, { &GUID_Key, 109, 0x80006D0C, 0x00000000 }, { &GUID_Key, 110, 0x80006E0C, 0x00000000 }, { &GUID_Key, 111, 0x80006F0C, 0x00000000 }, { &GUID_Key, 112, 0x8000700C, 0x00000000 }, { &GUID_Key, 113, 0x8000710C, 0x00000000 }, { &GUID_Key, 114, 0x8000720C, 0x00000000 }, { &GUID_Key, 115, 0x8000730C, 0x00000000 }, { &GUID_Key, 116, 0x8000740C, 0x00000000 }, { &GUID_Key, 117, 0x8000750C, 0x00000000 }, { &GUID_Key, 118, 0x8000760C, 0x00000000 }, { &GUID_Key, 119, 0x8000770C, 0x00000000 }, { &GUID_Key, 120, 0x8000780C, 0x00000000 }, { &GUID_Key, 121, 0x8000790C, 0x00000000 }, { &GUID_Key, 122, 0x80007A0C, 0x00000000 }, { &GUID_Key, 123, 0x80007B0C, 0x00000000 }, { &GUID_Key, 124, 0x80007C0C, 0x00000000 }, { &GUID_Key, 125, 0x80007D0C, 0x00000000 }, { &GUID_Key, 126, 0x80007E0C, 0x00000000 }, { &GUID_Key, 127, 0x80007F0C, 0x00000000 }, { &GUID_Key, 128, 0x8000800C, 0x00000000 }, { &GUID_Key, 129, 0x8000810C, 0x00000000 }, { &GUID_Key, 130, 0x8000820C, 0x00000000 }, { &GUID_Key, 131, 0x8000830C, 0x00000000 }, { &GUID_Key, 132, 0x8000840C, 0x00000000 }, { &GUID_Key, 133, 0x8000850C, 0x00000000 }, { &GUID_Key, 134, 0x8000860C, 0x00000000 }, { &GUID_Key, 135, 0x8000870C, 0x00000000 }, { &GUID_Key, 136, 0x8000880C, 0x00000000 }, { &GUID_Key, 137, 0x8000890C, 0x00000000 }, { &GUID_Key, 138, 0x80008A0C, 0x00000000 }, { &GUID_Key, 139, 0x80008B0C, 0x00000000 }, { &GUID_Key, 140, 0x80008C0C, 0x00000000 }, { &GUID_Key, 141, 0x80008D0C, 0x00000000 }, { &GUID_Key, 142, 0x80008E0C, 0x00000000 }, { &GUID_Key, 143, 0x80008F0C, 0x00000000 }, { &GUID_Key, 144, 0x8000900C, 0x00000000 }, { &GUID_Key, 145, 0x8000910C, 0x00000000 }, { &GUID_Key, 146, 0x8000920C, 0x00000000 }, { &GUID_Key, 147, 0x8000930C, 0x00000000 }, { &GUID_Key, 148, 0x8000940C, 0x00000000 }, { &GUID_Key, 149, 0x8000950C, 0x00000000 }, { &GUID_Key, 150, 0x8000960C, 0x00000000 }, { &GUID_Key, 151, 0x8000970C, 0x00000000 }, { &GUID_Key, 152, 0x8000980C, 0x00000000 }, { &GUID_Key, 153, 0x8000990C, 0x00000000 }, { &GUID_Key, 154, 0x80009A0C, 0x00000000 }, { &GUID_Key, 155, 0x80009B0C, 0x00000000 }, { &GUID_Key, 156, 0x80009C0C, 0x00000000 }, { &GUID_Key, 157, 0x80009D0C, 0x00000000 }, { &GUID_Key, 158, 0x80009E0C, 0x00000000 }, { &GUID_Key, 159, 0x80009F0C, 0x00000000 }, { &GUID_Key, 160, 0x8000A00C, 0x00000000 }, { &GUID_Key, 161, 0x8000A10C, 0x00000000 }, { &GUID_Key, 162, 0x8000A20C, 0x00000000 }, { &GUID_Key, 163, 0x8000A30C, 0x00000000 }, { &GUID_Key, 164, 0x8000A40C, 0x00000000 }, { &GUID_Key, 165, 0x8000A50C, 0x00000000 }, { &GUID_Key, 166, 0x8000A60C, 0x00000000 }, { &GUID_Key, 167, 0x8000A70C, 0x00000000 }, { &GUID_Key, 168, 0x8000A80C, 0x00000000 }, { &GUID_Key, 169, 0x8000A90C, 0x00000000 }, { &GUID_Key, 170, 0x8000AA0C, 0x00000000 }, { &GUID_Key, 171, 0x8000AB0C, 0x00000000 }, { &GUID_Key, 172, 0x8000AC0C, 0x00000000 }, { &GUID_Key, 173, 0x8000AD0C, 0x00000000 }, { &GUID_Key, 174, 0x8000AE0C, 0x00000000 }, { &GUID_Key, 175, 0x8000AF0C, 0x00000000 }, { &GUID_Key, 176, 0x8000B00C, 0x00000000 }, { &GUID_Key, 177, 0x8000B10C, 0x00000000 }, { &GUID_Key, 178, 0x8000B20C, 0x00000000 }, { &GUID_Key, 179, 0x8000B30C, 0x00000000 }, { &GUID_Key, 180, 0x8000B40C, 0x00000000 }, { &GUID_Key, 181, 0x8000B50C, 0x00000000 }, { &GUID_Key, 182, 0x8000B60C, 0x00000000 }, { &GUID_Key, 183, 0x8000B70C, 0x00000000 }, { &GUID_Key, 184, 0x8000B80C, 0x00000000 }, { &GUID_Key, 185, 0x8000B90C, 0x00000000 }, { &GUID_Key, 186, 0x8000BA0C, 0x00000000 }, { &GUID_Key, 187, 0x8000BB0C, 0x00000000 }, { &GUID_Key, 188, 0x8000BC0C, 0x00000000 }, { &GUID_Key, 189, 0x8000BD0C, 0x00000000 }, { &GUID_Key, 190, 0x8000BE0C, 0x00000000 }, { &GUID_Key, 191, 0x8000BF0C, 0x00000000 }, { &GUID_Key, 192, 0x8000C00C, 0x00000000 }, { &GUID_Key, 193, 0x8000C10C, 0x00000000 }, { &GUID_Key, 194, 0x8000C20C, 0x00000000 }, { &GUID_Key, 195, 0x8000C30C, 0x00000000 }, { &GUID_Key, 196, 0x8000C40C, 0x00000000 }, { &GUID_Key, 197, 0x8000C50C, 0x00000000 }, { &GUID_Key, 198, 0x8000C60C, 0x00000000 }, { &GUID_Key, 199, 0x8000C70C, 0x00000000 }, { &GUID_Key, 200, 0x8000C80C, 0x00000000 }, { &GUID_Key, 201, 0x8000C90C, 0x00000000 }, { &GUID_Key, 202, 0x8000CA0C, 0x00000000 }, { &GUID_Key, 203, 0x8000CB0C, 0x00000000 }, { &GUID_Key, 204, 0x8000CC0C, 0x00000000 }, { &GUID_Key, 205, 0x8000CD0C, 0x00000000 }, { &GUID_Key, 206, 0x8000CE0C, 0x00000000 }, { &GUID_Key, 207, 0x8000CF0C, 0x00000000 }, { &GUID_Key, 208, 0x8000D00C, 0x00000000 }, { &GUID_Key, 209, 0x8000D10C, 0x00000000 }, { &GUID_Key, 210, 0x8000D20C, 0x00000000 }, { &GUID_Key, 211, 0x8000D30C, 0x00000000 }, { &GUID_Key, 212, 0x8000D40C, 0x00000000 }, { &GUID_Key, 213, 0x8000D50C, 0x00000000 }, { &GUID_Key, 214, 0x8000D60C, 0x00000000 }, { &GUID_Key, 215, 0x8000D70C, 0x00000000 }, { &GUID_Key, 216, 0x8000D80C, 0x00000000 }, { &GUID_Key, 217, 0x8000D90C, 0x00000000 }, { &GUID_Key, 218, 0x8000DA0C, 0x00000000 }, { &GUID_Key, 219, 0x8000DB0C, 0x00000000 }, { &GUID_Key, 220, 0x8000DC0C, 0x00000000 }, { &GUID_Key, 221, 0x8000DD0C, 0x00000000 }, { &GUID_Key, 222, 0x8000DE0C, 0x00000000 }, { &GUID_Key, 223, 0x8000DF0C, 0x00000000 }, { &GUID_Key, 224, 0x8000E00C, 0x00000000 }, { &GUID_Key, 225, 0x8000E10C, 0x00000000 }, { &GUID_Key, 226, 0x8000E20C, 0x00000000 }, { &GUID_Key, 227, 0x8000E30C, 0x00000000 }, { &GUID_Key, 228, 0x8000E40C, 0x00000000 }, { &GUID_Key, 229, 0x8000E50C, 0x00000000 }, { &GUID_Key, 230, 0x8000E60C, 0x00000000 }, { &GUID_Key, 231, 0x8000E70C, 0x00000000 }, { &GUID_Key, 232, 0x8000E80C, 0x00000000 }, { &GUID_Key, 233, 0x8000E90C, 0x00000000 }, { &GUID_Key, 234, 0x8000EA0C, 0x00000000 }, { &GUID_Key, 235, 0x8000EB0C, 0x00000000 }, { &GUID_Key, 236, 0x8000EC0C, 0x00000000 }, { &GUID_Key, 237, 0x8000ED0C, 0x00000000 }, { &GUID_Key, 238, 0x8000EE0C, 0x00000000 }, { &GUID_Key, 239, 0x8000EF0C, 0x00000000 }, { &GUID_Key, 240, 0x8000F00C, 0x00000000 }, { &GUID_Key, 241, 0x8000F10C, 0x00000000 }, { &GUID_Key, 242, 0x8000F20C, 0x00000000 }, { &GUID_Key, 243, 0x8000F30C, 0x00000000 }, { &GUID_Key, 244, 0x8000F40C, 0x00000000 }, { &GUID_Key, 245, 0x8000F50C, 0x00000000 }, { &GUID_Key, 246, 0x8000F60C, 0x00000000 }, { &GUID_Key, 247, 0x8000F70C, 0x00000000 }, { &GUID_Key, 248, 0x8000F80C, 0x00000000 }, { &GUID_Key, 249, 0x8000F90C, 0x00000000 }, { &GUID_Key, 250, 0x8000FA0C, 0x00000000 }, { &GUID_Key, 251, 0x8000FB0C, 0x00000000 }, { &GUID_Key, 252, 0x8000FC0C, 0x00000000 }, { &GUID_Key, 253, 0x8000FD0C, 0x00000000 }, { &GUID_Key, 254, 0x8000FE0C, 0x00000000 }, { &GUID_Key, 255, 0x8000FF0C, 0x00000000 }, }; const DIDATAFORMAT c_dfDIKeyboard = { 24, 16, 0x00000002, 256, 256, KBD_fmt }; /* Mouse */ static DIOBJECTDATAFORMAT PTR_fmt[] = { { &GUID_XAxis, 0, 0x00FFFF03, 0x00000000 }, { &GUID_YAxis, 4, 0x00FFFF03, 0x00000000 }, { &GUID_ZAxis, 8, 0x80FFFF03, 0x00000000 }, { NULL, 12, 0x00FFFF0C, 0x00000000 }, { NULL, 13, 0x00FFFF0C, 0x00000000 }, { NULL, 14, 0x80FFFF0C, 0x00000000 }, { NULL, 15, 0x80FFFF0C, 0x00000000 }, }; const DIDATAFORMAT c_dfDIMouse = { 24, 16, 0x00000002, 16, 7, PTR_fmt }; /* Joystick */ static DIOBJECTDATAFORMAT JOY_fmt[] = { { &GUID_XAxis, 0, 0x80FFFF03, 0x00000100 }, { &GUID_YAxis, 4, 0x80FFFF03, 0x00000100 }, { &GUID_ZAxis, 8, 0x80FFFF03, 0x00000100 }, { &GUID_RxAxis, 12, 0x80FFFF03, 0x00000100 }, { &GUID_RyAxis, 16, 0x80FFFF03, 0x00000100 }, { &GUID_RzAxis, 20, 0x80FFFF03, 0x00000100 }, { &GUID_Slider, 24, 0x80FFFF03, 0x00000100 }, { &GUID_Slider, 28, 0x80FFFF03, 0x00000100 }, { &GUID_POV, 32, 0x80FFFF10, 0x00000000 }, { &GUID_POV, 36, 0x80FFFF10, 0x00000000 }, { &GUID_POV, 40, 0x80FFFF10, 0x00000000 }, { &GUID_POV, 44, 0x80FFFF10, 0x00000000 }, { NULL, 48, 0x80FFFF0C, 0x00000000 }, { NULL, 49, 0x80FFFF0C, 0x00000000 }, { NULL, 50, 0x80FFFF0C, 0x00000000 }, { NULL, 51, 0x80FFFF0C, 0x00000000 }, { NULL, 52, 0x80FFFF0C, 0x00000000 }, { NULL, 53, 0x80FFFF0C, 0x00000000 }, { NULL, 54, 0x80FFFF0C, 0x00000000 }, { NULL, 55, 0x80FFFF0C, 0x00000000 }, { NULL, 56, 0x80FFFF0C, 0x00000000 }, { NULL, 57, 0x80FFFF0C, 0x00000000 }, { NULL, 58, 0x80FFFF0C, 0x00000000 }, { NULL, 59, 0x80FFFF0C, 0x00000000 }, { NULL, 60, 0x80FFFF0C, 0x00000000 }, { NULL, 61, 0x80FFFF0C, 0x00000000 }, { NULL, 62, 0x80FFFF0C, 0x00000000 }, { NULL, 63, 0x80FFFF0C, 0x00000000 }, { NULL, 64, 0x80FFFF0C, 0x00000000 }, { NULL, 65, 0x80FFFF0C, 0x00000000 }, { NULL, 66, 0x80FFFF0C, 0x00000000 }, { NULL, 67, 0x80FFFF0C, 0x00000000 }, { NULL, 68, 0x80FFFF0C, 0x00000000 }, { NULL, 69, 0x80FFFF0C, 0x00000000 }, { NULL, 70, 0x80FFFF0C, 0x00000000 }, { NULL, 71, 0x80FFFF0C, 0x00000000 }, { NULL, 72, 0x80FFFF0C, 0x00000000 }, { NULL, 73, 0x80FFFF0C, 0x00000000 }, { NULL, 74, 0x80FFFF0C, 0x00000000 }, { NULL, 75, 0x80FFFF0C, 0x00000000 }, { NULL, 76, 0x80FFFF0C, 0x00000000 }, { NULL, 77, 0x80FFFF0C, 0x00000000 }, { NULL, 78, 0x80FFFF0C, 0x00000000 }, { NULL, 79, 0x80FFFF0C, 0x00000000 }, }; const DIDATAFORMAT c_dfDIJoystick = { 24, 16, 0x00000001, 80, 44, JOY_fmt }; baycomepp-0.10.orig/directx/fixdirectx.sh0100755000175100017510000000070106737067476016601 0ustar abaaba#!/bin/sh # # A script to fix the DirectX includes so that gcc can compile them... #cd `dirname $0` for file in include/directx6/*.h do echo "Stripping $file..." tr -d '\r' <$file >$file.new && mv $file.new $file done # Fix the few remaining headers that have anonymous unions for file in include/directx6/d3dtypes.h do if [ -f $file ]; then echo "Fixing $file..." perl ./deunion.pl <$file >$file.new && mv $file.new $file fi done baycomepp-0.10.orig/directx/deunion.pl0100755000175100017510000000133706737067374016075 0ustar abaaba#!/usr/bin/perl # # Ack! gcc doesn't support unnamed unions -- we have to fake them. # # Expected format: # #struct blah #{ # union # { # type1 blah1; # type2 blah2; # }; #} $lineno = 0; $union = 0; $ucount = 1; while ( ($line = ) ) { ++$lineno; $line =~ s/\r//; if ( $line =~ /\sunion\s/ ) { if ( $union ) { die("Nested union at line $lineno -- Exiting.\n"); } $union = 1; } if ( $union ) { if ( $line =~ /}/ ) { if ( $line =~ /};/ ) { chomp($line); $gnuline = $line; $gnuline =~ s/};/} u$ucount;/; $line = "#if defined(NONAMELESSUNION)\n$gnuline\n#else\n$line\n#endif\n"; $ucount++; } $union = 0; } } else { if ( $line =~ /^}/ ) { $ucount = 1; } } print $line; } baycomepp-0.10.orig/main/0042755000175100017510000000000007511777222013346 5ustar abaababaycomepp-0.10.orig/main/Makefile.in0100644000175100017510000004204007511777222015406 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ INCLUDES = -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" \ -I$(top_srcdir)/directx/include -I$(top_srcdir)/directx/include/directx6 \ -I$(top_srcdir)/ @PPUSER_TRUE@PPSRC1 = @PPUSER_TRUE@ppuser.c ppuserinit.c ppdev.c ppdevinit.c @PPUSER_FALSE@PPSRC1 = @PPKDRV_TRUE@PPSRC2 = @PPKDRV_TRUE@ppkdrv.c ppkdrvinit.c @PPKDRV_FALSE@PPSRC2 = @WIN32_TRUE@PPSRC3 = @WIN32_TRUE@ppwin.c ppwininit.c ppntddkgenport.c ppntddkgenportinit.c ppw9xring0.c ppw9xring0init.c @WIN32_FALSE@PPSRC3 = @DIRECTX_TRUE@DIRECTXLIBS = @DIRECTX_TRUE@-L$(top_builddir)/directx -ldsound -luser32 -lgdi32 @DIRECTX_FALSE@DIRECTXLIBS = noinst_LIBRARIES = libinit.a libresident.a libresident2.a libmisc.a man_MANS = eppfpga.8 libresident_a_SOURCES = \ ppdirect.c \ snprintpkt.c libresident2_a_SOURCES = \ $(PPSRC1) $(PPSRC2) $(PPSRC3) libinit_a_SOURCES = \ fpgatests.c \ configfpga.c \ ppdirectinit.c \ ecp_firmware.h \ epp_firmware.h \ eppafsk_firmware.h \ eppchk_firmware.h \ eppsamp_firmware.h \ sppafsk_firmware.h \ epp_fpga.h libmisc_a_SOURCES = libmisc_a_LIBADD = $(LIBOBJS) sbin_PROGRAMS = eppfpga eppfpga_SOURCES = \ eppfpga.c eppfpga_LDADD = \ libinit.a libresident.a libresident2.a libmisc.a $(DIRECTXLIBS) noinst_HEADERS = \ fpga.h \ sysdeps.h \ util.h \ parport.h \ getopt.h \ ppdev.h \ ppuser.h EXTRA_DIST = getopt.c getopt1.c syslog.c vsnprintf.c \ eppfpga.8 openpty.c \ ppuser.c ppuserinit.c ppdev.c ppdevinit.c ppkdrv.c ppkdrvinit.c \ ppntddkgenport.c ppntddkgenportinit.c ppnt.c ppntinit.c \ ppw9xring0.c ppw9xring0init.c ppwin.c ppwininit.c mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libinit_a_LIBADD = libinit_a_OBJECTS = fpgatests.$(OBJEXT) configfpga.$(OBJEXT) \ ppdirectinit.$(OBJEXT) libresident_a_LIBADD = libresident_a_OBJECTS = ppdirect.$(OBJEXT) snprintpkt.$(OBJEXT) libresident2_a_LIBADD = @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_FALSE@libresident2_a_OBJECTS = \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_FALSE@ppkdrv.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_FALSE@ppkdrvinit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_FALSE@ppwin.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_FALSE@ppwininit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_FALSE@ppntddkgenport.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_FALSE@ppntddkgenportinit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_FALSE@ppw9xring0.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_FALSE@ppw9xring0init.$(OBJEXT) @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_TRUE@libresident2_a_OBJECTS = \ @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_TRUE@ppuser.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_TRUE@ppuserinit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_TRUE@ppdev.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_TRUE@ppdevinit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_TRUE@ppkdrv.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_TRUE@ppkdrvinit.$(OBJEXT) @PPKDRV_FALSE@@WIN32_FALSE@@PPUSER_FALSE@libresident2_a_OBJECTS = @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_FALSE@libresident2_a_OBJECTS = \ @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_FALSE@ppkdrv.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_FALSE@@PPUSER_FALSE@ppkdrvinit.$(OBJEXT) @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@libresident2_a_OBJECTS = \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppuser.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppuserinit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppdev.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppdevinit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppkdrv.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppkdrvinit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppwin.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppwininit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppntddkgenport.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppntddkgenportinit.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppw9xring0.$(OBJEXT) \ @PPKDRV_TRUE@@WIN32_TRUE@@PPUSER_TRUE@ppw9xring0init.$(OBJEXT) @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@libresident2_a_OBJECTS = \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppuser.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppuserinit.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppdev.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppdevinit.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppwin.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppwininit.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppntddkgenport.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppntddkgenportinit.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppw9xring0.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_TRUE@ppw9xring0init.$(OBJEXT) @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_FALSE@libresident2_a_OBJECTS = \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_FALSE@ppwin.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_FALSE@ppwininit.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_FALSE@ppntddkgenport.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_FALSE@ppntddkgenportinit.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_FALSE@ppw9xring0.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_TRUE@@PPUSER_FALSE@ppw9xring0init.$(OBJEXT) @PPKDRV_FALSE@@WIN32_FALSE@@PPUSER_TRUE@libresident2_a_OBJECTS = \ @PPKDRV_FALSE@@WIN32_FALSE@@PPUSER_TRUE@ppuser.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_FALSE@@PPUSER_TRUE@ppuserinit.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_FALSE@@PPUSER_TRUE@ppdev.$(OBJEXT) \ @PPKDRV_FALSE@@WIN32_FALSE@@PPUSER_TRUE@ppdevinit.$(OBJEXT) libmisc_a_DEPENDENCIES = @LIBOBJS@ libmisc_a_OBJECTS = sbin_PROGRAMS = eppfpga$(EXEEXT) PROGRAMS = $(sbin_PROGRAMS) eppfpga_OBJECTS = eppfpga.$(OBJEXT) @DIRECTX_TRUE@eppfpga_DEPENDENCIES = libinit.a libresident.a \ @DIRECTX_TRUE@libresident2.a libmisc.a @DIRECTX_FALSE@eppfpga_DEPENDENCIES = libinit.a libresident.a \ @DIRECTX_FALSE@libresident2.a libmisc.a eppfpga_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ man8dir = $(mandir)/man8 MANS = $(man_MANS) NROFF = nroff HEADERS = $(noinst_HEADERS) DIST_COMMON = Makefile.am Makefile.in getopt.c getopt1.c vsnprintf.c DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(libinit_a_SOURCES) $(libresident_a_SOURCES) $(libresident2_a_SOURCES) $(libmisc_a_SOURCES) $(eppfpga_SOURCES) OBJECTS = $(libinit_a_OBJECTS) $(libresident_a_OBJECTS) $(libresident2_a_OBJECTS) $(libmisc_a_OBJECTS) $(eppfpga_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps main/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 $< # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: libinit.a: $(libinit_a_OBJECTS) $(libinit_a_DEPENDENCIES) -rm -f libinit.a $(AR) cru libinit.a $(libinit_a_OBJECTS) $(libinit_a_LIBADD) $(RANLIB) libinit.a libresident.a: $(libresident_a_OBJECTS) $(libresident_a_DEPENDENCIES) -rm -f libresident.a $(AR) cru libresident.a $(libresident_a_OBJECTS) $(libresident_a_LIBADD) $(RANLIB) libresident.a libresident2.a: $(libresident2_a_OBJECTS) $(libresident2_a_DEPENDENCIES) -rm -f libresident2.a $(AR) cru libresident2.a $(libresident2_a_OBJECTS) $(libresident2_a_LIBADD) $(RANLIB) libresident2.a libmisc.a: $(libmisc_a_OBJECTS) $(libmisc_a_DEPENDENCIES) -rm -f libmisc.a $(AR) cru libmisc.a $(libmisc_a_OBJECTS) $(libmisc_a_LIBADD) $(RANLIB) libmisc.a mostlyclean-sbinPROGRAMS: clean-sbinPROGRAMS: -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) distclean-sbinPROGRAMS: maintainer-clean-sbinPROGRAMS: install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(sbindir) @list='$(sbin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) list='$(sbin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done eppfpga$(EXEEXT): $(eppfpga_OBJECTS) $(eppfpga_DEPENDENCIES) @rm -f eppfpga$(EXEEXT) $(LINK) $(eppfpga_LDFLAGS) $(eppfpga_OBJECTS) $(eppfpga_LDADD) $(LIBS) install-man8: $(mkinstalldirs) $(DESTDIR)$(man8dir) @list='$(man8_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.8*) 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)$(man8dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ done uninstall-man8: @list='$(man8_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.8*) 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)$(man8dir)/$$inst"; \ rm -f $(DESTDIR)$(man8dir)/$$inst; \ done install-man: $(MANS) @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-man8 uninstall-man: @$(NORMAL_UNINSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-man8 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 = main 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 configfpga.o: configfpga.c ../config.h getopt.h parport.h sysdeps.h \ fpga.h util.h epp_fpga.h epp_firmware.h eppchk_firmware.h \ ecp_firmware.h eppafsk_firmware.h eppsamp_firmware.h \ sppafsk_firmware.h eppfpga.o: eppfpga.c ../config.h getopt.h parport.h sysdeps.h fpga.h fpgatests.o: fpgatests.c ../config.h getopt.h parport.h sysdeps.h fpga.h \ util.h epp_fpga.h ppdirect.o: ppdirect.c parport.h ../config.h sysdeps.h getopt.h fpga.h ppdirectinit.o: ppdirectinit.c parport.h ../config.h sysdeps.h getopt.h \ fpga.h snprintpkt.o: snprintpkt.c ../config.h fpga.h sysdeps.h getopt.h \ parport.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-sbinPROGRAMS 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-sbinPROGRAMS uninstall-man uninstall: uninstall-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(mandir)/man8 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-sbinPROGRAMS mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-sbinPROGRAMS \ clean-tags clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-sbinPROGRAMS distclean-tags distclean-generic \ clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile maintainer-clean-sbinPROGRAMS \ 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-sbinPROGRAMS \ distclean-sbinPROGRAMS clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS \ uninstall-sbinPROGRAMS install-sbinPROGRAMS install-man8 uninstall-man8 \ install-man uninstall-man 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: baycomepp-0.10.orig/main/Makefile.am0100644000175100017510000000306207320157572015374 0ustar abaaba## Process this file with automake to produce Makefile.in INCLUDES = -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" \ -I$(top_srcdir)/directx/include -I$(top_srcdir)/directx/include/directx6 \ -I$(top_srcdir)/ if PPUSER PPSRC1 = ppuser.c ppuserinit.c ppdev.c ppdevinit.c else PPSRC1 = endif if PPKDRV PPSRC2 = ppkdrv.c ppkdrvinit.c else PPSRC2 = endif if WIN32 PPSRC3 = ppwin.c ppwininit.c ppntddkgenport.c ppntddkgenportinit.c ppw9xring0.c ppw9xring0init.c else PPSRC3 = endif if DIRECTX DIRECTXLIBS = -L$(top_builddir)/directx -ldsound -luser32 -lgdi32 else DIRECTXLIBS = endif noinst_LIBRARIES = libinit.a libresident.a libresident2.a libmisc.a man_MANS = eppfpga.8 libresident_a_SOURCES = \ ppdirect.c \ snprintpkt.c libresident2_a_SOURCES = \ $(PPSRC1) $(PPSRC2) $(PPSRC3) libinit_a_SOURCES = \ fpgatests.c \ configfpga.c \ ppdirectinit.c \ ecp_firmware.h \ epp_firmware.h \ eppafsk_firmware.h \ eppchk_firmware.h \ eppsamp_firmware.h \ sppafsk_firmware.h \ epp_fpga.h libmisc_a_SOURCES = libmisc_a_LIBADD = $(LIBOBJS) sbin_PROGRAMS = eppfpga eppfpga_SOURCES = \ eppfpga.c eppfpga_LDADD = \ libinit.a libresident.a libresident2.a libmisc.a $(DIRECTXLIBS) noinst_HEADERS = \ fpga.h \ sysdeps.h \ util.h \ parport.h \ getopt.h \ ppdev.h \ ppuser.h EXTRA_DIST = getopt.c getopt1.c syslog.c vsnprintf.c \ eppfpga.8 openpty.c \ ppuser.c ppuserinit.c ppdev.c ppdevinit.c ppkdrv.c ppkdrvinit.c \ ppntddkgenport.c ppntddkgenportinit.c ppnt.c ppntinit.c \ ppw9xring0.c ppw9xring0init.c ppwin.c ppwininit.c baycomepp-0.10.orig/main/getopt.c0100644000175100017510000005061406706651413015013 0ustar abaaba/* 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, 1993 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. */ /* NOTE!!! AIX requires this to be the first thing in the file. Do not put ANYTHING before it! */ #if !defined (__GNUC__) && defined (_AIX) #pragma alloca #endif #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef __GNUC__ #define alloca __builtin_alloca #else /* not __GNUC__ */ #if defined (HAVE_ALLOCA_H) || (defined(sparc) && (defined(sun) || (!defined(USG) && !defined(SVR4) && !defined(__svr4__)))) #include #else #ifndef _AIX char *alloca (); #endif #endif /* alloca.h */ #endif /* not __GNUC__ */ #if !__STDC__ && !defined(const) && IN_GCC #define const #endif /* This tells Alpha OSF/1 not to define a getopt prototype in . */ #ifndef _NO_PROTO #define _NO_PROTO #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__ #undef alloca /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ #include #else /* Not GNU C library. */ #define __alloca alloca #endif /* GNU C library. */ /* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a long-named option. Because this is not POSIX.2 compliant, it is being phased out. */ /* #define GETOPT_COMPAT */ /* 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 = 0; /* 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; #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 #define my_bcopy(src, dst, n) memcpy ((dst), (src), (n)) #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; } static void my_bcopy (from, to, size) const char *from; char *to; int size; { int i; for (i = 0; i < size; i++) to[i] = from[i]; } #endif /* GNU C 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 nonopts_size = (last_nonopt - first_nonopt) * sizeof (char *); char **temp = (char **) __alloca (nonopts_size); /* Interchange the two blocks of data in ARGV. */ my_bcopy ((char *) &argv[first_nonopt], (char *) temp, nonopts_size); my_bcopy ((char *) &argv[last_nonopt], (char *) &argv[first_nonopt], (optind - last_nonopt) * sizeof (char *)); my_bcopy ((char *) temp, (char *) &argv[first_nonopt + optind - last_nonopt], nonopts_size); /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* 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; { int option_index; optarg = 0; /* Initialize the internal data when the first call is made. 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. */ if (optind == 0) { first_nonopt = last_nonopt = optind = 1; nextchar = NULL; /* 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 (getenv ("POSIXLY_CORRECT") != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; } if (nextchar == NULL || *nextchar == '\0') { 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; /* Now skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && (argv[optind][0] != '-' || argv[optind][1] == '\0') #ifdef GETOPT_COMPAT && (longopts == NULL || argv[optind][0] != '+' || argv[optind][1] == '\0') #endif /* GETOPT_COMPAT */ ) optind++; last_nonopt = optind; } /* 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') #ifdef GETOPT_COMPAT && (longopts == NULL || argv[optind][0] != '+' || argv[optind][1] == '\0') #endif /* GETOPT_COMPAT */ ) { if (ordering == REQUIRE_ORDER) return EOF; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Start decoding its characters. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } if (longopts != NULL && ((argv[optind][0] == '-' && (argv[optind][1] == '-' || long_only)) #ifdef GETOPT_COMPAT || argv[optind][0] == '+' #endif /* GETOPT_COMPAT */ )) { const struct option *p; char *s = nextchar; int exact = 0; int ambig = 0; const struct option *pfound = NULL; int indfound; while (*s && *s != '=') s++; /* Test all options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, s - nextchar)) { if (s - 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 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 (*s) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = s + 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] == '-' #ifdef GETOPT_COMPAT || argv[optind][0] == '+' #endif /* GETOPT_COMPAT */ || 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 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 0 if (c < 040 || c >= 0177) fprintf (stderr, "%s: unrecognized option, character code 0%o\n", argv[0], c); else fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c); #else /* 1003.2 specifies the format of this message. */ fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); #endif } 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 = 0; 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) { #if 0 fprintf (stderr, "%s: option `-%c' requires an argument\n", argv[0], c); #else /* 1003.2 specifies the format of this message. */ fprintf (stderr, "%s: option requires an argument -- %c\n", argv[0], c); #endif } 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 */ baycomepp-0.10.orig/main/getopt1.c0100644000175100017510000001005606706651461015073 0ustar abaaba/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 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 "config.h" #endif #include "getopt.h" #if !__STDC__ && !defined(const) && IN_GCC #define const #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 */ baycomepp-0.10.orig/main/vsnprintf.c0100644000175100017510000001015206706651424015535 0ustar abaaba/* * This file is derived from GLIB by Thomas Sailer, * * * GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include #include #include static unsigned int printf_string_upper_bound (const char *format, va_list args) { unsigned int len = 1; while (*format) { int long_int = 0; int extra_long = 0; char c; c = *format++; if (c == '%') { int done = 0; while (*format && !done) { switch (*format++) { char *string_arg; case '*': len += va_arg (args, int); break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': /* add specified format length, since it might exceed the * size we assume it to have. */ format -= 1; len += strtol (format, (char**) &format, 10); break; case 'h': /* ignore short int flag, since all args have at least the * same size as an int */ break; case 'l': if (long_int) extra_long = 1; /* linux specific */ else long_int = 1; break; case 'q': case 'L': long_int = 1; extra_long = 1; break; case 's': string_arg = va_arg (args, char *); if (string_arg) len += strlen (string_arg); else { /* add enough padding to hold "(null)" identifier */ len += 16; } done = 1; break; case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': if (long_int) (void) va_arg (args, long); else (void) va_arg (args, int); len += extra_long ? 64 : 32; done = 1; break; case 'D': case 'O': case 'U': (void) va_arg (args, long); len += 32; done = 1; break; case 'e': case 'E': case 'f': case 'g': (void) va_arg (args, double); len += extra_long ? 64 : 32; done = 1; break; case 'c': (void) va_arg (args, int); len += 1; done = 1; break; case 'p': case 'n': (void) va_arg (args, void*); len += 32; done = 1; break; case '%': len += 1; done = 1; break; default: /* ignore unknow/invalid flags */ break; } } } else len += 1; } return len; } /* WARNING: This does only work for i386 (plus a few others, but not eg. alpha) !!!! */ #define VA_COPY(x,y) (x) = (y) static char *strdup_vprintf (const char *format, va_list args1) { char *buffer; va_list args2; VA_COPY (args2, args1); buffer = malloc(printf_string_upper_bound (format, args1)); if (buffer) vsprintf (buffer, format, args2); va_end (args2); return buffer; } int snprintf (char *str, size_t n, char const *fmt, ...) { char *printed; va_list args; int len; va_start(args, fmt); printed = strdup_vprintf (fmt, args); va_end (args); if (!printed) return -1; len = strlen(printed); strncpy(str, printed, n); str[n-1] = '\0'; free(printed); return len >= n ? -1 : len; } int vsnprintf (char *str, size_t n, char const *fmt, va_list args) { char *printed; int len; printed = strdup_vprintf (fmt, args); if (!printed) return -1; len = strlen(printed); strncpy(str, printed, n); str[n-1] = '\0'; free(printed); return len >= n ? -1 : len; } baycomepp-0.10.orig/main/fpgatests.c0100644000175100017510000024733707142057363015522 0ustar abaaba/*****************************************************************************/ /* * fpgatests.c -- HDLC packet radio modem for EPP using FPGA utility library. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include #include #include "parport.h" #include "fpga.h" #include "util.h" /* ---------------------------------------------------------------------- */ /* *The doubly scrambled BERR tests * (once in software, once in the modem) * exercise the data exchange between modem and PC */ /* note: this is the reverse direction */ #if 0 #define SCRAM_TAP1 0x00001 /* X^17 */ #define SCRAM_TAPN 0x21000 /* X^0+X^5 */ #define DESCRAM_TAPSH1 0 #define DESCRAM_TAPSH2 5 #define DESCRAM_TAPSH3 17 #endif #define DESCRAM_TAPSH1 0 #define DESCRAM_TAPSH2 7 #define DESCRAM_TAPSH3 10 #define SCRAM_TAP1 1 #define SCRAM_TAPN ((1< 0; num--, x++, mask <<= 1) if (readboundary(b, *x)) ret |= mask; return ret; } static void writeboundaryword(unsigned char *b, const unsigned *x, unsigned num, unsigned v) { unsigned sh = 0; for (; num > 0; num--, x++, sh++) writeboundary(b, *x, (v >> sh) & 1); } /* ========= BOUNDARY SCAN ONLY TESTS =================================== */ /* * RAM-Test */ static const unsigned int ram_addr_o[15] = { FPGA_PIN_RAMA0_O, FPGA_PIN_RAMA1_O, FPGA_PIN_RAMA2_O, FPGA_PIN_RAMA3_O, FPGA_PIN_RAMA4_O, FPGA_PIN_RAMA5_O, FPGA_PIN_RAMA6_O, FPGA_PIN_RAMA7_O, FPGA_PIN_RAMA8_O, FPGA_PIN_RAMA9_O, FPGA_PIN_RAMA10_O, FPGA_PIN_RAMA11_O, FPGA_PIN_RAMA12_O, FPGA_PIN_RAMA13_O, FPGA_PIN_RAMA14_O }; static const unsigned int ram_addr_t[15] = { FPGA_PIN_RAMA0_T, FPGA_PIN_RAMA1_T, FPGA_PIN_RAMA2_T, FPGA_PIN_RAMA3_T, FPGA_PIN_RAMA4_T, FPGA_PIN_RAMA5_T, FPGA_PIN_RAMA6_T, FPGA_PIN_RAMA7_T, FPGA_PIN_RAMA8_T, FPGA_PIN_RAMA9_T, FPGA_PIN_RAMA10_T, FPGA_PIN_RAMA11_T, FPGA_PIN_RAMA12_T, FPGA_PIN_RAMA13_T, FPGA_PIN_RAMA14_T }; static const unsigned int ram_data_t[8] = { FPGA_PIN_RAMD0_T, FPGA_PIN_RAMD1_T, FPGA_PIN_RAMD2_T, FPGA_PIN_RAMD3_T, FPGA_PIN_RAMD4_T, FPGA_PIN_RAMD5_T, FPGA_PIN_RAMD6_T, FPGA_PIN_RAMD7_T }; static const unsigned int ram_data_o[8] = { FPGA_PIN_RAMD0_O, FPGA_PIN_RAMD1_O, FPGA_PIN_RAMD2_O, FPGA_PIN_RAMD3_O, FPGA_PIN_RAMD4_O, FPGA_PIN_RAMD5_O, FPGA_PIN_RAMD6_O, FPGA_PIN_RAMD7_O }; static const unsigned int ram_data_i[8] = { FPGA_PIN_RAMD0_I, FPGA_PIN_RAMD1_I, FPGA_PIN_RAMD2_I, FPGA_PIN_RAMD3_I, FPGA_PIN_RAMD4_I, FPGA_PIN_RAMD5_I, FPGA_PIN_RAMD6_I, FPGA_PIN_RAMD7_I }; /* ---------------------------------------------------------------------- */ static unsigned int ramaccess(unsigned addr, unsigned data, unsigned write) { unsigned char bd1[FPGA_BOUNDSIZE], bd2[FPGA_BOUNDSIZE]; memcpy(bd1, fpga_safebound, FPGA_BOUNDSIZE); writeboundaryword(bd1, ram_addr_t, 15, 0); writeboundaryword(bd1, ram_addr_o, 15, addr); writeboundary(bd1, FPGA_PIN_RAMCE_T, 0); writeboundary(bd1, FPGA_PIN_RAMOE_T, 0); writeboundary(bd1, FPGA_PIN_RAMWR_T, 0); writeboundary(bd1, FPGA_PIN_RAMCE_O, 0); writeboundary(bd1, FPGA_PIN_RAMOE_O, (write) & 1); writeboundary(bd1, FPGA_PIN_RAMWR_O, (!write) & 1); if (write) { writeboundaryword(bd1, ram_data_t, 8, 0); writeboundaryword(bd1, ram_data_o, 8, data); } boundary(FPGA_BOUND, bd1, bd2, 0); writeboundary(bd1, FPGA_PIN_RAMCE_O, 1); writeboundary(bd1, FPGA_PIN_RAMOE_O, 1); writeboundary(bd1, FPGA_PIN_RAMWR_O, 1); boundary(FPGA_BOUND, bd1, bd2, 0); if (write) return 0; return readboundaryword(bd2, ram_data_i, 8); } static unsigned char *to_bin(unsigned char *buf, unsigned val, unsigned num) { unsigned int i; for (i = 0; i < num; i++, val <<= 1) buf[i] = ((val >> (num-1)) & 1) + '0'; buf[num] = 0; return buf; } static unsigned ramtestdata(unsigned data) { unsigned val; unsigned char s[10]; ramaccess(0, data, 1); val = ramaccess(0, 0, 0); tprintf("Testing data pattern 0x%02x read 0x%02x failure mask %8s\n", data, val, to_bin(s, val ^ data, 8)); idle_callback(0); return val ^ data; } static unsigned ramtestaddr(void) { unsigned char ramd[32768]; unsigned int i, j, k, l, mask = 0; unsigned char s[16]; for (i = 0; i < 32768; i++) { if (!(i & 0xff)) { tprintf("Writing RAM address 0x%04x...\r", i); if (idle_callback(0)) return mask; } ramd[i] = random(); ramaccess(i, ramd[i], 1); } for (i = 0; i < 32768; i++) { if (!(i & 0xff)) { tprintf("Reading RAM address 0x%04x...\r", i); if (idle_callback(0)) return mask; } j = ramaccess(i, 0, 0); if (j == ramd[i]) continue; l = 0xffff; for (k = 0; k < 32768; k++) { if (ramd[k] != j) continue; if (hweight32(l) > hweight32(k ^ i)) l = k ^ i; } mask |= k; tprintf("RAM address error at 0x%04x minimum error mask %15s\n", i, to_bin(s, k, 15)); if (idle_callback(0)) return mask; } return mask; } static int ramtest(struct adapter_config *cfg) { unsigned mask; unsigned char s[16]; int i; if ((i = adapter_start_no_firmware())) return i; tprintf("Performing RAM test...\n"); mask = ramtestdata(0xff); mask |= ramtestdata(0x00); mask |= ramtestdata(0x55); mask |= ramtestdata(0xaa); mask |= ramtestdata(0xcc); mask |= ramtestdata(0x33); if (mask) { tprintf("RAM data error mask %s\nRAM data test failed, exiting\n", to_bin(s, mask, 8)); reset_modem(); return -4; } if ((mask = ramtestaddr())) { tprintf("RAM address error mask %s\nRAM address test failed, exiting\n", to_bin(s, mask, 15)); reset_modem(); return -5; } if (!idle_callback(0)) tprintf("\nRAM test passed\n"); reset_modem(); return 0; } /* ---------------------------------------------------------------------- */ /* * LED test */ static int ledtest(struct adapter_config *cfg) { unsigned led = 0; unsigned char bd1[FPGA_BOUNDSIZE], bd2[FPGA_BOUNDSIZE]; int i; if ((i = adapter_start_no_firmware())) return i; memcpy(bd1, fpga_safebound, FPGA_BOUNDSIZE); tprintf("LED test, DISCONNECT PTT!!\n"); for (;;) { led = (++led) & 3; writeboundary(bd1, FPGA_PIN_LEDSTA_O, led != 0); writeboundary(bd1, FPGA_PIN_LEDCON_O, led != 1); writeboundary(bd1, FPGA_PIN_LEDDCD_O, led != 2); writeboundary(bd1, FPGA_PIN_LEDPTT_O, led == 3); writeboundary(bd1, FPGA_PIN_LEDCON_T, 0); writeboundary(bd1, FPGA_PIN_LEDSTA_T, 0); writeboundary(bd1, FPGA_PIN_LEDDCD_T, 0); writeboundary(bd1, FPGA_PIN_LEDPTT_T, 0); boundary(FPGA_BOUND, bd1, bd2, 0); tprintf("Lighting LED %s\r", ((const char *[4]){ "STA", "CON", "DCD", "PTT"})[led]); if (idle_callback(500000)) { reset_modem(); return 0; } } } /* ---------------------------------------------------------------------- */ /* * DAC test */ static const unsigned int dac_t[7] = { FPGA_PIN_DAC0_T, FPGA_PIN_DAC1_T, FPGA_PIN_DAC2_T, FPGA_PIN_DAC3_T, FPGA_PIN_DAC4_T, FPGA_PIN_DAC5_T, FPGA_PIN_DAC6_T }; static const unsigned int dac_o[7] = { FPGA_PIN_DAC0_O, FPGA_PIN_DAC1_O, FPGA_PIN_DAC2_O, FPGA_PIN_DAC3_O, FPGA_PIN_DAC4_O, FPGA_PIN_DAC5_O, FPGA_PIN_DAC6_O }; static int dactest(struct adapter_config *cfg) { unsigned phase = 0, data, rot = 0; unsigned char bd1[FPGA_BOUNDSIZE], bd2[FPGA_BOUNDSIZE]; int i; if ((i = adapter_start_no_firmware())) return i; memcpy(bd1, fpga_safebound, FPGA_BOUNDSIZE); tprintf("DAC test\n"); for (;;) { data = 64 + 63 * sin(M_PI / 128 * phase); writeboundaryword(bd1, dac_t, 7, 0); writeboundaryword(bd1, dac_o, 7, data); boundary(FPGA_BOUND, bd1, bd2, 0); phase = (phase + 1) & 0xff; if (phase) continue; rot = (rot + 1) & 3; tprintf("%c\r", "|\\-/"[rot]); if (idle_callback(0)) { reset_modem(); return 0; } } } /* ---------------------------------------------------------------------- */ /* * Parport Signal Tests */ static const unsigned int ppinsig[] = { FPGA_PIN_EPPNWRITE_I, /* strobe */ FPGA_PIN_EPPNDATASTB_I, /* nAutoFD */ FPGA_PIN_EPPNRESET_I, /* nInit */ FPGA_PIN_EPPNADDRSTB_I, /* SlctIn */ FPGA_PIN_EPPDATA3_I, FPGA_PIN_EPPDATA4_I, FPGA_PIN_EPPDATA5_I, FPGA_PIN_EPPDATA6_I, FPGA_PIN_EPPDATA7_I }; static const unsigned int ppoutsig[] = { FPGA_PIN_EPPNERR_O, FPGA_PIN_SPPPE_O }; static const unsigned int ppoutsigt[] = { FPGA_PIN_EPPNERR_T, FPGA_PIN_SPPPE_T }; static const char *ppsigstr[] = { "nError (15)", "PE (12)", "nWrite/Strobe (1)", "nDataStb/nAutoFD (14)", "nReset/nInit (16)", "nAddrStb/nSlctIn (17)", "D3 (5)", "D4 (6)", "D5 (7)", "D6 (8)", "D7 (9)" }; static unsigned ppsigcheckone(unsigned val) { unsigned char bd1[FPGA_BOUNDSIZE], bd2[FPGA_BOUNDSIZE]; unsigned v; memcpy(bd1, fpga_safebound, FPGA_BOUNDSIZE); writeboundaryword(bd1, ppoutsigt, 2, 0); writeboundaryword(bd1, ppoutsig, 2, val); parport_write_control(((val >> 2) & 0xf) ^ (LPTCTRL_WRITE|LPTCTRL_ADDRSTB|LPTCTRL_DATASTB)); boundary(FPGA_BOUND, bd1, bd2, val >> 3); v = parport_read_status(); v = ((v >> 3) & 1) | ((v >> 4) & 2); boundary(FPGA_BOUND, bd1, bd2, val >> 3); parport_write_control(LPTCTRL_PROGRAM); return v | ((readboundaryword(bd2, ppinsig, 9) << 2) & 0x7fc); } static int ppsigtest(struct adapter_config *cfg) { unsigned val, v2, err[11]; int i, ret = 0; if ((i = adapter_start_no_firmware())) return i; for (i = 0; i < 11; i++) err[i] = 0; tprintf("Checking parallel port signals...\n"); for (val = 0; val < 0x800; val++) { /* make sure the FPGA is not reset */ if (!(val & ((LPTCTRL_ADDRSTB|LPTCTRL_PROGRAM)<<2))) continue; if (idle_callback(0)) { reset_modem(); return 0; } v2 = ppsigcheckone(val); #if 0 tprintf("check: 0x%03x ret: 0x%03x diff: 0x%03x\n", val, v2, v2 ^ val); #endif v2 ^= val; if (val & 0x400) v2 &= 0x7fc; if (!v2) continue; ret = -1; for (i = 0; i < 11; i++) err[i] += ((v2 >> i) & 1); } tprintf("Parport Signal Errors:\n"); for (i = 0; i < 11; i++) tprintf("%-22s %5d\n", ppsigstr[i], err[i]); reset_modem(); return ret; } /* ========= EPP CHECK FIRMWARE TESTS =================================== */ static int chkcountertest(struct adapter_config *cfg) { struct timeval time1, time2; unsigned int cnt0 = 0, cnt1 = 0, cnt2 = 0, cnt3 = 0, prevcnt0 = 0, prevcnt1 = 0, prevcnt2 = 0, prevcnt3 = 0, freq0 = 0, freq1 = 0, freq2 = 0, freq3 = 0, usec; int i; unsigned char eio[3]; if ((i = adapter_start_eppchk())) return i; /* reset counters */ eio[0] = 0; if (parport_epp_write_addr(eio, 1) != 1) goto errret; tprintf("Frequency counter\n" "Counter value Frequency (Hz)\n" "fclk__ clk___ RxC___ TxC___ fclk____ clk_____ RxC_____ TxC_____\n"); if (gettime(&time1)) { reset_modem(); return -6; } for (;;) { /* read counters */ eio[0] = 4; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_data(eio, 3) != 3) goto errret; cnt0 = eio[0] | (((unsigned int)eio[1]) << 8) | (((unsigned int)eio[2]) << 16); eio[0] = 5; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_data(eio, 3) != 3) goto errret; cnt1 = eio[0] | (((unsigned int)eio[1]) << 8) | (((unsigned int)eio[2]) << 16); eio[0] = 6; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_data(eio, 3) != 3) goto errret; cnt2 = eio[0] | (((unsigned int)eio[1]) << 8) | (((unsigned int)eio[2]) << 16); eio[0] = 7; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_data(eio, 3) != 3) goto errret; cnt3 = eio[0] | (((unsigned int)eio[1]) << 8) | (((unsigned int)eio[2]) << 16); if (gettime(&time2)) { reset_modem(); return -6; } usec = ((time2.tv_sec - time1.tv_sec) % 60 * 1000000) + time2.tv_usec - time1.tv_usec; if (usec >= 1000000) { time1 = time2; freq0 = ((cnt0 - prevcnt0) & 0xffffff) * 1000000.0 / usec; prevcnt0 = cnt0; freq1 = ((cnt1 - prevcnt1) & 0xffffff) * 8000000.0 / usec; prevcnt1 = cnt1; freq2 = ((cnt2 - prevcnt2) & 0xffffff) * 1000000.0 / usec; prevcnt2 = cnt2; freq3 = ((cnt3 - prevcnt3) & 0xffffff) * 1000000.0 / usec; prevcnt3 = cnt3; } tprintf("%06x %06x %06x %06x %8d %8d %8d %8d\r", cnt0, cnt1, cnt2, cnt3, freq0, freq1, freq2, freq3); if (idle_callback(200000)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * LED test */ static int chkledtest(struct adapter_config *cfg) { unsigned led = 0; int i; unsigned char eio; if ((i = adapter_start_eppchk())) return i; tprintf("LED test, DISCONNECT PTT!!\n"); eio = 1; if (parport_epp_write_addr(&eio, 1) != 1) goto errret; for (;;) { led = (++led) & 3; eio = 1 << led; if (parport_epp_write_data(&eio, 1) != 1) goto errret; tprintf("Lighting LED %s\r", ((const char *[4]){ "DCD", "CON", "STA", "PTT"})[led]); if (idle_callback(500000)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * DAC test */ static int chkdactest(struct adapter_config *cfg) { unsigned phase = 0, rot = 0; unsigned char eio; int i; if ((i = adapter_start_eppchk())) return i; tprintf("DAC test\n"); eio = 2; if (parport_epp_write_addr(&eio, 1) != 1) goto errret; for (;;) { eio = 128 + 127 * sin(M_PI / 128 * phase); if (parport_epp_write_data(&eio, 1) != 1) goto errret; phase = (phase + 1) & 0xff; if (phase) continue; rot = (rot + 1) & 3; tprintf("%c\r", "|\\-/"[rot]); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * Register test */ static int chkregtest(struct adapter_config *cfg) { unsigned data, read, cnt = 0, err = 0; unsigned char eio[5]; int i; if ((i = adapter_start_eppchk())) return i; tprintf("Checking LED register\n"); eio[0] = 1; if (parport_epp_write_addr(eio, 1) != 1) goto errret; for (data = 0; data < 0x100; data += 0x40) { eio[0] = data; if (parport_epp_write_data(eio, 1) != 1) goto errret; read = parport_read_status(); tprintf("LED register: 0x%02x LPT port status: 0x%02x %sOK\n", data, read, (((data ^ (read << 4)) & 0x80) | ((data ^ (read << 1)) & 0x40)) ? "NOT " : ""); } tprintf("EPP register read/write test\n"); for (;;) { eio[0] = data; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 5) != 5) goto errret; if ((data ^ eio[0]) & 0xff) err++; cnt++; data++; tprintf("Count: %6d Errors: %6d\r", cnt, err); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * RAM-Test */ static int chkramaccess(unsigned addr, unsigned data, unsigned write) { unsigned char rd; unsigned char eio[3]; eio[0] = 8; if (parport_epp_write_addr(eio, 1) != 1) return -1; eio[0] = addr & 0xff; if (parport_epp_write_data(eio, 1) != 1) return -1; eio[0] = 9; if (parport_epp_write_addr(eio, 1) != 1) return -1; eio[0] = addr >> 8; if (parport_epp_write_data(eio, 1) != 1) return -1; if (write) { eio[0] = 11; if (parport_epp_write_addr(eio, 1) != 1) return -1; eio[0] = data; if (parport_epp_write_data(eio, 1) != 1) return -1; eio[0] = 8; eio[1] = 10; eio[2] = 8; if (parport_epp_write_addr(eio, 3) != 3) return -1; return 0; } eio[0] = 11; if (parport_epp_write_addr(eio, 1) != 1) return -1; if (parport_epp_read_data(eio, 1) != 1) return -1; rd = eio[0]; eio[0] = 8; if (parport_epp_write_addr(eio, 1) != 1) return -1; return rd; } static int chkramtestdata(unsigned data) { int val; unsigned char s[10]; if (chkramaccess(0, data, 1)) return -1; val = chkramaccess(0, 0, 0); if (val == -1) return -1; tprintf("Testing data pattern 0x%02x read 0x%02x failure mask %8s\n", data, val, to_bin(s, val ^ data, 8)); idle_callback(0); return val ^ data; } static int chkramtestaddr(void) { unsigned char ramd[32768]; unsigned int i, j, k, l, mask = 0; unsigned char s[16]; for (i = 0; i < 32768; i++) { if (!(i & 0xff)) { tprintf("Writing RAM address 0x%04x...\r", i); if (idle_callback(0)) return mask; } ramd[i] = random(); if (chkramaccess(i, ramd[i], 1)) return -1; } for (i = 0; i < 32768; i++) { if (!(i & 0xff)) { tprintf("Reading RAM address 0x%04x...\r", i); if (idle_callback(0)) return mask; } j = chkramaccess(i, 0, 0); if (j == -1) return -1; if (j == ramd[i]) continue; l = 0xffff; for (k = 0; k < 32768; k++) { if (ramd[k] != j) continue; if (hweight32(l) > hweight32(k ^ i)) l = k ^ i; } mask |= k; tprintf("RAM address error at 0x%04x minimum error mask %15s\n", i, to_bin(s, k, 15)); if (idle_callback(0)) return mask; } return mask; } static int chkramtest(struct adapter_config *cfg) { int mask, val; unsigned char s[16]; int i; if ((i = adapter_start_eppchk())) return i; tprintf("Performing RAM test...\n"); if ((mask = chkramtestdata(0xff)) == -1) goto errret; if ((val = chkramtestdata(0x00)) == -1) goto errret; mask |= val; if ((val = chkramtestdata(0x55)) == -1) goto errret; mask |= val; if ((val = chkramtestdata(0xaa)) == -1) goto errret; mask |= val; if ((val = chkramtestdata(0xcc)) == -1) goto errret; mask |= val; if ((val = chkramtestdata(0x33)) == -1) goto errret; mask |= val; if (mask) { tprintf("RAM data error mask %s\nRAM data test failed, exiting\n", to_bin(s, mask, 8)); reset_modem(); return -4; } if ((mask = chkramtestaddr()) == -1) goto errret; if (mask) { tprintf("RAM address error mask %s\nRAM address test failed, exiting\n", to_bin(s, mask, 15)); reset_modem(); return -5; } if (!idle_callback(0)) tprintf("\nRAM test passed\n"); reset_modem(); return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * Sigma Delta A/D converter */ static int chkadctest(struct adapter_config *cfg) { unsigned char eio; int i; if ((i = adapter_start_eppchk())) return i; tprintf("Performing SigmaDelta A/D converter test...\n"); tprintf("ADC signal is now routed to DAC...\n"); i = 19666660 / 9600; eio = 0x1e; if (parport_epp_write_addr(&eio, 1) != 1) goto errret; eio = i; if (parport_epp_write_data(&eio, 1) != 1) goto errret; eio = 0x1f; if (parport_epp_write_addr(&eio, 1) != 1) goto errret; eio = i >> 8; if (parport_epp_write_data(&eio, 1) != 1) goto errret; eio = 0x10; if (parport_epp_write_addr(&eio, 1) != 1) goto errret; for (;;) { if (idle_callback(100000)) break; } reset_modem(); return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ========= EPP FIRMWARE TESTS ========================================= */ /* * EPP LED test */ static int eppledtest(struct adapter_config *cfg) { unsigned led = 0; unsigned char eio; int i; if ((i = adapter_start_epp(cfg))) return i; tprintf("EPP port LED test\n"); for (;;) { led = !led; eio = led ? EPP_LED_STA : EPP_LED_CON; if (parport_epp_write_addr(&eio, 1) != 1) goto errret; tprintf("Lighting LED %s\r", ((const char *[2]){ "CON", "STA" })[led]); if (idle_callback(500000)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } static int eppledtest2(struct adapter_config *cfg) { unsigned led = 0; unsigned char eio; int i; if ((i = adapter_start_epp(cfg))) return i; tprintf("EPP port LED test (fast)\n"); for (;;) { led = !led; eio = led ? EPP_LED_STA : EPP_LED_CON; if (parport_epp_write_addr(&eio, 1) != 1) goto errret; if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * EPP modem test */ static int eppmodemtest(struct adapter_config *cfg, unsigned int flags) { unsigned int enc_state = 0x100; unsigned int dec_state = 0; unsigned int mask1, mask2; unsigned char stat; int cnt, cntx, i, j, icnt, ocnt, icntx, ocntx; unsigned int berr = 0; #if 0 unsigned int pcnt = 0; #endif unsigned char eio[2048]; if ((i = adapter_start_epp(cfg))) return i; /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errret; for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* determine TX fifo size from status bits */ switch (stat & (EPP_NTAEF|EPP_NTHF)) { case EPP_NTHF: ocntx = 2048 - 256; break; case EPP_NTAEF: ocntx = 2048 - 1793; break; case 0: ocntx = 0; break; default: ocntx = 2048 - 1025; break; } /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icntx = 0; break; case EPP_NRAEF: icntx = 1025; break; case 0: icntx = 1793; break; default: icntx = 256; break; } ocnt = ocntx; icnt = icntx; /* try to determine the FIFO count if in extended mode */ if (cfg->extstat) { eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|1; if (parport_epp_write_addr(eio, 1) != 1) goto errret; getpid(); if (parport_epp_read_addr(eio, 2) != 2) goto errret; getpid(); icnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|2; if (parport_epp_write_addr(eio, 1) != 1) goto errret; getpid(); if (parport_epp_read_addr(eio, 2) != 2) goto errret; getpid(); ocnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 1) != 1) goto errret; ocnt = 16384 - (ocnt & 0x7fff); icnt &= 0x7fff; #if 0 { unsigned ocnt2, icnt2; eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|1; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 2) != 2) goto errret; icnt2 = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|2; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 2) != 2) goto errret; ocnt2 = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 1) != 1) goto errret; ocnt2 = 16384 - (ocnt2 & 0x7fff); icnt2 &= 0x7fff; if (icnt != icnt2 || ocnt != ocnt2) { printf("\nCOUNT ERROR!! icnt 0x%x icnt2 0x%x ocnt 0x%x ocnt2 0x%x\n", icnt, icnt2, ocnt, ocnt2); } } #endif } /* try to tx */ for (cntx = ocnt; cntx > 0; cntx -= cnt) { cnt = cntx; if (cnt > sizeof(eio)) cnt = sizeof(eio); if (flags & 2) { for (j = 0; j < cnt; j++) { enc_state >>= 8; for (i = 0, mask1 = SCRAM_TAP1, mask2 = SCRAM_TAPN; i < 8; i++, mask1 <<= 1, mask2 <<= 1) if (enc_state & mask1) enc_state ^= mask2; eio[j] = enc_state; } } else memset(eio, 0, cnt); if (parport_epp_write_data(eio, cnt) != cnt) goto errret; } if (icnt <= 0) { if (idle_callback(10000)) { reset_modem(); return 0; } } else { for (cntx = icnt; cntx > 0; cntx -= cnt) { cnt = cntx; if (cnt > sizeof(eio)) cnt = sizeof(eio); if (parport_epp_read_data(eio, cnt) != cnt) goto errret; if (flags & 2) { for (j = 0; j < cnt; j++) { dec_state = (dec_state >> 8) | (((unsigned int)eio[j]) << DESCRAM_TAPSH3); eio[j] = ((dec_state >> DESCRAM_TAPSH1) ^ (dec_state >> DESCRAM_TAPSH2) ^ (dec_state >> DESCRAM_TAPSH3)) & 0xff; } } for (j = 0; j < cnt; j++) { if (eio[j]) berr += hweight8(eio[j]); if (flags & 1) for (i = 0; i < 8; i++) fputc('0' + ((eio[j] >> i) & 1), stdout); } } if (flags & 1) fputc('\n', stdout); } #if 0 pcnt = (++pcnt) & 0x3f; if (pcnt) continue; #endif /* DCD has inverse logic */ tprintf("BERR: %8d DCD:%c stat: %02x icnt %5d icntx %5d ocnt %5d ocntx %5d\r", berr, (stat & EPP_DCDBIT) ? '-' : 'D', stat, icnt, icntx, ocnt, ocntx); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } static int eppmodemtest1(struct adapter_config *cfg) { return eppmodemtest(cfg, 0); } static int eppmodemtest2(struct adapter_config *cfg) { return eppmodemtest(cfg, 1); } static int eppmodemtest3(struct adapter_config *cfg) { return eppmodemtest(cfg, 2); } static int eppmodemtest4(struct adapter_config *cfg) { return eppmodemtest(cfg, 3); } /* ========= ECP FIRMWARE TESTS ========================================= */ /* * ECP LED test */ static int ecpledtest(struct adapter_config *cfg) { unsigned led = 0; unsigned char eio; int i; if ((i = adapter_start_ecp(cfg))) return i; tprintf("ECP port LED test\n"); for (;;) { led = !led; eio = 0xb0 | (led + 1); if (parport_ecp_write_addr(&eio, 1) != 1) goto errret; tprintf("Lighting LED %s\r", ((const char *[2]){ "CON", "STA" })[led]); if (idle_callback(500000)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "ECP timeout\n"); return -1; } static int ecpledtest2(struct adapter_config *cfg) { unsigned led = 0; unsigned char eio; int i; if ((i = adapter_start_ecp(cfg))) return i; tprintf("ECP port LED test (fast)\n"); for (;;) { led = !led; eio = 0xb0 | (led + 1); if (parport_ecp_write_addr(&eio, 1) != 1) goto errret; if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "ECP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * ECP modem test */ static int ecpmodemtest(struct adapter_config *cfg, unsigned int flags) { unsigned int enc_state = 0x100; unsigned int dec_state = 0; unsigned int mask1, mask2; unsigned char stat[6]; unsigned char data[4096]; int cnt, cntx, i, j, icnt, ocnt; unsigned int berr = 0; #if 0 unsigned int pcnt = 0; #endif if ((i = adapter_start_ecp(cfg))) return i; data[0] = 0xaf; /* reset register: all reset */ data[1] = 0xa0; /* reset register: terminate reset */ data[2] = 0xb0; if (parport_ecp_write_addr(data, 3) != 3) goto errret; for (;;) { data[0] = 0x81; if (parport_ecp_write_addr(data, 1) != 1) goto errret; if (parport_ecp_read_data(stat, 6) != 6) goto errret; data[0] = 0x80; if (parport_ecp_write_addr(data, 1) != 1) goto errret; icnt = ((unsigned int)stat[2] << 8) | stat[1]; ocnt = ((unsigned int)stat[4] << 8) | stat[3]; /* read */ if (icnt > 0) { for (cntx = icnt; cntx > 0; cntx -= cnt) { cnt = cntx; if (cnt > sizeof(data)) cnt = sizeof(data); if (cnt > 0xfff) cnt = 0xfff; data[0] = 0xc0 | (cnt & 0xf); data[1] = 0xd0 | ((cnt >> 4) & 0xf); data[2] = 0xe0 | ((cnt >> 8) & 0xf); if (parport_ecp_write_addr(data, 3) != 3) goto errret; if (parport_ecp_read_data(data, cnt) != cnt) goto errret; /* if doubly scrambled do it in place */ if (flags & 2) { for (i = 0; i < cnt; i++) { dec_state = (dec_state >> 8) | (((unsigned)data[i]) << DESCRAM_TAPSH3); data[i] = (dec_state >> DESCRAM_TAPSH1) ^ (dec_state >> DESCRAM_TAPSH2) ^ (dec_state >> DESCRAM_TAPSH3); } } for (i = 0; i < cnt; i++) { if (data[i]) berr += hweight8(data[i]); if (flags & 1) for (i = 0; i < 8; i++) fputc('0' + ((data[i] >> i) & 1), stdout); } } if (flags & 1) fputc('\n', stdout); } else { if (idle_callback(10000)) { reset_modem(); return 0; } } /* write */ for (cntx = 16384 - ocnt; cntx > 0; cntx -= cnt) { cnt = cntx; if (cnt > sizeof(data)) cnt = sizeof(data); if (flags & 2) { for (i = 0; i < cnt; i++) { enc_state >>= 8; for (j = 0, mask1 = SCRAM_TAP1, mask2 = SCRAM_TAPN; j < 8; j++, mask1 <<= 1, mask2 <<= 1) if (enc_state & mask1) enc_state ^= mask2; data[i] = enc_state; } } else memset(data, 0, cnt); if (parport_ecp_write_data(data, cnt) != cnt) goto errret; } #if 0 pcnt = (++pcnt) & 0x3f; if (pcnt) continue; #endif /* DCD has inverse logic */ tprintf("BERR: %8d DCD:%c stat: %02x icnt %5d ocnt %5d\r", berr, (stat[0] & EPP_DCDBIT) ? '-' : 'D', stat[0], icnt, ocnt); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "ECP timeout\n"); return -1; } static int ecpmodemtest1(struct adapter_config *cfg) { return ecpmodemtest(cfg, 0); } static int ecpmodemtest2(struct adapter_config *cfg) { return ecpmodemtest(cfg, 1); } static int ecpmodemtest3(struct adapter_config *cfg) { return ecpmodemtest(cfg, 2); } static int ecpmodemtest4(struct adapter_config *cfg) { return ecpmodemtest(cfg, 3); } /* ========= EPPAFSK FIRMWARE TESTS ===================================== */ /* * EPP AFSK LED test */ static int eppafskledtest(struct adapter_config *cfg) { unsigned led = 0; unsigned char eio; int i; cfg->bitrate = 1200; if ((i = adapter_start_eppafsk(cfg))) return i; tprintf("EPPAFSK port LED test\n"); for (;;) { led = !led; eio = led ? EPP_LED_STA : EPP_LED_CON; if (parport_epp_write_addr(&eio, 1) != 1) goto errret; tprintf("Lighting LED %s\r", ((const char *[2]){ "CON", "STA" })[led]); if (idle_callback(500000)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } static int eppafskledtest2(struct adapter_config *cfg) { unsigned led = 0; unsigned char eio; int i; cfg->bitrate = 1200; if ((i = adapter_start_eppafsk(cfg))) return i; tprintf("EPPAFSK port LED test (fast)\n"); for (;;) { led = !led; eio = led ? EPP_LED_STA : EPP_LED_CON; if (parport_epp_write_addr(&eio, 1) != 1) goto errret; if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * EPP AFSK modem test */ static int eppafskmodemtest(struct adapter_config *cfg, unsigned int flags) { unsigned int enc_state = 0x100; unsigned int dec_state = 0; unsigned int mask1, mask2; unsigned char stat, txbyte; int i, j, icnt, ocnt; unsigned int berr = 0; #if 0 unsigned int pcnt = 0; #endif unsigned char eio[32]; cfg->bitrate = 1200; if ((i = adapter_start_eppafsk(cfg))) return i; txbyte = -((flags >> 1) & 1); /* reset modem */ eio[0] = 0x00; eio[1] = 0x18; if (parport_epp_write_addr(eio, 2) != 2) goto errret; for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* determine the FIFO count */ eio[0] = 0x19; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 1) != 1) goto errret; ocnt = 0x10 - (eio[0] & 0x1f); eio[0] = 0x1a; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 1) != 1) goto errret; icnt = eio[0] & 0x1f; eio[0] = 0x18; if (parport_epp_write_addr(eio, 1) != 1) goto errret; /* try to tx */ if (ocnt > 0) { if (flags & 2) { for (j = 0; j < ocnt; j++) { enc_state >>= 8; for (i = 0, mask1 = SCRAM_TAP1, mask2 = SCRAM_TAPN; i < 8; i++, mask1 <<= 1, mask2 <<= 1) if (enc_state & mask1) enc_state ^= mask2; eio[j] = enc_state; } } else memset(eio, 0, ocnt); if (parport_epp_write_data(eio, ocnt) != ocnt) goto errret; } if (icnt <= 0) { if (idle_callback(1000)) { reset_modem(); return 0; } } else { if (parport_epp_read_data(eio, icnt) != icnt) goto errret; if (flags & 2) { for (j = 0; j < icnt; j++) { dec_state = (dec_state >> 8) | (((unsigned int)eio[j]) << DESCRAM_TAPSH3); eio[j] = ((dec_state >> DESCRAM_TAPSH1) ^ (dec_state >> DESCRAM_TAPSH2) ^ (dec_state >> DESCRAM_TAPSH3)) & 0xff; } } for (j = 0; j < icnt; j++) { if (eio[j]) berr += hweight8(eio[j]); if (flags & 1) for (i = 0; i < 8; i++) fputc('0' + ((eio[j] >> i) & 1), stdout); } if (flags & 1) fputc('\n', stdout); } #if 0 pcnt = (++pcnt) & 0x3f; if (pcnt) continue; #endif /* DCD has inverse logic */ tprintf("BERR: %8d DCD:%c PTT:%c stat: %02x icnt %5d ocnt %5d\r", berr, (stat & 0x80) ? '-' : 'D', (stat & 0x40) ? '-' : 'P', stat, icnt, ocnt); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } static int eppafskmodemtest1(struct adapter_config *cfg) { return eppafskmodemtest(cfg, 0); } static int eppafskmodemtest2(struct adapter_config *cfg) { return eppafskmodemtest(cfg, 1); } static int eppafskmodemtest3(struct adapter_config *cfg) { return eppafskmodemtest(cfg, 2); } static int eppafskmodemtest4(struct adapter_config *cfg) { return eppafskmodemtest(cfg, 3); } static int eppafskmodemtest5(struct adapter_config *cfg) { return eppafskmodemtest(cfg, 4); } static int eppafskmodemtest6(struct adapter_config *cfg) { return eppafskmodemtest(cfg, 6); } /* ========= SPPAFSK FIRMWARE TESTS ===================================== */ /* * SPP AFSK LED test */ static int sppafskledtest(struct adapter_config *cfg) { unsigned led = 0; int i; cfg->bitrate = 1200; if ((i = adapter_start_sppafsk(cfg))) return i; tprintf("SPPAFSK port LED test\n"); for (;;) { led = !led; sppafsk_wrcmd(led ? EPP_LED_STA : EPP_LED_CON); tprintf("Lighting LED %s\r", ((const char *[2]){ "CON", "STA" })[led]); if (idle_callback(500000)) { reset_modem(); return 0; } } return 0; } static int sppafskledtest2(struct adapter_config *cfg) { unsigned led = 0; int i; cfg->bitrate = 1200; if ((i = adapter_start_eppafsk(cfg))) return i; tprintf("SPPAFSK port LED test (fast)\n"); for (;;) { led = !led; sppafsk_wrcmd(led ? EPP_LED_STA : EPP_LED_CON); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; } /* ---------------------------------------------------------------------- */ /* * SPP AFSK modem test */ static int sppafskmodemtest(struct adapter_config *cfg, unsigned int flags) { unsigned int enc_state = 0x100; unsigned int dec_state = 0; unsigned int mask1, mask2; unsigned char stat, txbyte; int i, j, icnt, ocnt; unsigned int berr = 0; #if 0 unsigned int pcnt = 0; #endif unsigned char currx; cfg->bitrate = 1200; if ((i = adapter_start_sppafsk(cfg))) return i; txbyte = -((flags >> 1) & 1); /* reset modem */ sppafsk_wrcmd(0x00); sppafsk_wrcmd(0x18); for (;;) { stat = sppafsk_rdcmd(); /* determine the FIFO count */ sppafsk_wrcmd(0x19); ocnt = sppafsk_rdcmd(); sppafsk_wrcmd(0x1a); icnt = sppafsk_rdcmd(); sppafsk_wrcmd(0x18); if (icnt > 0x10 || ocnt > 0x10) goto errret; ocnt = 0x10 - ocnt; /* try to tx */ if (ocnt > 0) { if (flags & 2) { for (j = 0; j < ocnt; j++) { enc_state >>= 8; for (i = 0, mask1 = SCRAM_TAP1, mask2 = SCRAM_TAPN; i < 8; i++, mask1 <<= 1, mask2 <<= 1) if (enc_state & mask1) enc_state ^= mask2; sppafsk_wrdata(enc_state); } } else { for (j = 0; j < ocnt; j++) sppafsk_wrdata(0); } } if (icnt <= 0) { if (idle_callback(1000)) { reset_modem(); return 0; } } else { for (j = 0; j < icnt; j++) { currx = sppafsk_rddata(); if (flags & 2) { dec_state = (dec_state >> 8) | (((unsigned int)currx) << DESCRAM_TAPSH3); currx = ((dec_state >> DESCRAM_TAPSH1) ^ (dec_state >> DESCRAM_TAPSH2) ^ (dec_state >> DESCRAM_TAPSH3)) & 0xff; } if (currx) berr += hweight8(currx); if (flags & 1) for (i = 0; i < 8; i++) fputc('0' + ((currx >> i) & 1), stdout); } if (flags & 1) fputc('\n', stdout); } #if 0 pcnt = (++pcnt) & 0x3f; if (pcnt) continue; #endif /* DCD has inverse logic */ tprintf("BERR: %8d DCD:%c PTT:%c stat: %02x icnt %5d ocnt %5d\r", berr, (stat & 0x80) ? '-' : 'D', (stat & 0x40) ? '-' : 'P', stat, icnt, ocnt); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "SPP bogus values read\n"); return -1; } static int sppafskmodemtest1(struct adapter_config *cfg) { return sppafskmodemtest(cfg, 0); } static int sppafskmodemtest2(struct adapter_config *cfg) { return sppafskmodemtest(cfg, 1); } static int sppafskmodemtest3(struct adapter_config *cfg) { return sppafskmodemtest(cfg, 2); } static int sppafskmodemtest4(struct adapter_config *cfg) { return sppafskmodemtest(cfg, 3); } static int sppafskmodemtest5(struct adapter_config *cfg) { return sppafskmodemtest(cfg, 4); } static int sppafskmodemtest6(struct adapter_config *cfg) { return sppafskmodemtest(cfg, 6); } /* ---------------------------------------------------------------------- */ /* * HDLC receive tests */ static void tprintpkt(const unsigned char *pkt, unsigned len) { unsigned char v1=1,cmd=0; unsigned char i,j; if (!pkt || len < 8) return; if (pkt[1] & 1) { /* * FlexNet Header Compression */ v1 = 0; cmd = (pkt[1] & 2) != 0; tprintf("fm ? to "); i = (pkt[2] >> 2) & 0x3f; if (i) tprintf("%c",i+0x20); i = ((pkt[2] << 4) | ((pkt[3] >> 4) & 0xf)) & 0x3f; if (i) tprintf("%c", i+0x20); i = ((pkt[3] << 2) | ((pkt[4] >> 6) & 3)) & 0x3f; if (i) tprintf("%c", i+0x20); i = pkt[4] & 0x3f; if (i) tprintf("%c", i+0x20); i = (pkt[5] >> 2) & 0x3f; if (i) tprintf("%c", i+0x20); i = ((pkt[5] << 4) | ((pkt[6] >> 4) & 0xf)) & 0x3f; if (i) tprintf("%c", i+0x20); tprintf("-%u QSO Nr %u", pkt[6] & 0xf, (pkt[0] << 6) | (pkt[1] >> 2)); pkt += 7; len -= 7; } else { /* * normal header */ if (len < 15) return; if ((pkt[6] & 0x80) != (pkt[13] & 0x80)) { v1 = 0; cmd = (pkt[6] & 0x80); } tprintf("fm "); for(i = 7; i < 13; i++) if ((pkt[i] &0xfe) != 0x40) tprintf("%c", pkt[i] >> 1); tprintf("-%u to ", (pkt[13] >> 1) & 0xf); for(i = 0; i < 6; i++) if ((pkt[i] &0xfe) != 0x40) tprintf("%c", pkt[i] >> 1); tprintf("-%u", (pkt[6] >> 1) & 0xf); pkt += 14; len -= 14; if ((!(pkt[-1] & 1)) && (len >= 7)) tprintf(" via "); while ((!(pkt[-1] & 1)) && (len >= 7)) { for(i = 0; i < 6; i++) if ((pkt[i] &0xfe) != 0x40) tprintf("%c", pkt[i] >> 1); tprintf("-%u", (pkt[6] >> 1) & 0xf); pkt += 7; len -= 7; if ((!(pkt[-1] & 1)) && (len >= 7)) tprintf(","); } } if(!len) return; i = *pkt++; len--; j = v1 ? ((i & 0x10) ? '!' : ' ') : ((i & 0x10) ? (cmd ? '+' : '-') : (cmd ? '^' : 'v')); if (!(i & 1)) { /* * Info frame */ tprintf(" I%u%u%c", (i >> 5) & 7, (i >> 1) & 7, j); } else if (i & 2) { /* * U frame */ switch (i & (~0x10)) { case 0x03: tprintf(" UI%c", j); break; case 0x2f: tprintf(" SABM%c", j); break; case 0x43: tprintf(" DISC%c", j); break; case 0x0f: tprintf(" DM%c", j); break; case 0x63: tprintf(" UA%c", j); break; case 0x87: tprintf(" FRMR%c", j); break; default: tprintf(" unknown U (0x%x)%c", i & (~0x10), j); break; } } else { /* * supervisory */ switch (i & 0xf) { case 0x1: tprintf(" RR%u%c", (i >> 5) & 7, j); break; case 0x5: tprintf(" RNR%u%c", (i >> 5) & 7, j); break; case 0x9: tprintf(" REJ%u%c", (i >> 5) & 7, j); break; default: tprintf(" unknown S (0x%x)%u%c", i & 0xf, (i >> 5) & 7, j); break; } } if (!len) { tprintf("\n"); return; } tprintf(" pid=%02X\n", *pkt++); len--; j = 0; while (len) { i = *pkt++; if ((i >= 32) && (i < 128)) tprintf("%c", i); else if (i == 13) { if (j) tprintf("\n"); j = 0; } else tprintf("."); if (i >= 32) j = 1; len--; } if (j) tprintf("\n"); } /* ---------------------------------------------------------------------- */ /* * the CRC routines are stolen from WAMPES * by Dieter Deyke */ static const u_int16_t crc_ccitt_table[0x100] = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; /* --------------------------------------------------------------------- */ extern inline u_int16_t calc_crc_ccitt(const u_int8_t *buffer, int len) { u_int16_t crc = 0xffff; for (;len>0;len--) crc = (crc >> 8) ^ crc_ccitt_table[(crc ^ *buffer++) & 0xff]; crc ^= 0xffff; return crc; } extern inline void append_crc_ccitt(u_int8_t *buffer, int len) { u_int16_t crc = calc_crc_ccitt(buffer, len); *buffer++ = crc; *buffer++ = crc >> 8; } extern inline int check_crc_ccitt(const u_int8_t *buffer, int len) { u_int16_t crc = calc_crc_ccitt(buffer, len); return (crc & 0xffff) == 0x0f47; } /* ---------------------------------------------------------------------- */ #define MAXFLEN 512 #define RXBUFFER_SIZE ((MAXFLEN*6/5)+8) struct hdlc_receiver { unsigned int bitbuf, bitstream, numbits, state; unsigned char *bufptr; int bufcnt; unsigned char buf[RXBUFFER_SIZE]; }; extern inline void hdlc_initrx(struct hdlc_receiver *h) { memset(h, 0, sizeof(struct hdlc_receiver)); h->bufptr = h->buf; } static void do_rxpacket(struct hdlc_receiver *h) { if (h->bufcnt < 4) return; if (!check_crc_ccitt(h->buf, h->bufcnt)) return; tprintf(" \r"); tprintpkt(h->buf, h->bufcnt-2); } #define DECODEITERA(j) \ ({ \ if (!(notbitstream & (0x0fc << j))) /* flag or abort */ \ goto flgabrt##j; \ if ((bitstream & (0x1f8 << j)) == (0xf8 << j)) /* stuffed bit */ \ goto stuff##j; \ enditer##j: \ }) #define DECODEITERB(j) \ ({ \ flgabrt##j: \ if (!(notbitstream & (0x1fc << j))) { /* abort received */ \ state = 0; \ goto enditer##j; \ } \ if ((bitstream & (0x1fe << j)) != (0x0fc << j)) /* flag received */ \ goto enditer##j; \ if (state) \ do_rxpacket(h); \ h->bufcnt = 0; \ h->bufptr = h->buf; \ state = 1; \ numbits = 7-j; \ goto enditer##j; \ stuff##j: \ numbits--; \ bitbuf = (bitbuf & ((~0xff) << j)) | ((bitbuf & ~((~0xff) << j)) << 1); \ goto enditer##j; \ }) /* ---------------------------------------------------------------------- */ static void hdlc_receive(struct hdlc_receiver *h, u_int8_t *bits, int cnt) { unsigned int bitbuf, notbitstream, bitstream, numbits, state; u_int8_t ch; numbits = h->numbits; state = h->state; bitstream = h->bitstream; bitbuf = h->bitbuf; for (; cnt > 0; cnt--) { ch = *bits++; bitstream >>= 8; bitstream |= ch << 8; bitbuf >>= 8; bitbuf |= ch << 8; numbits += 8; notbitstream = ~bitstream; DECODEITERA(0); DECODEITERA(1); DECODEITERA(2); DECODEITERA(3); DECODEITERA(4); DECODEITERA(5); DECODEITERA(6); DECODEITERA(7); goto enddec; DECODEITERB(0); DECODEITERB(1); DECODEITERB(2); DECODEITERB(3); DECODEITERB(4); DECODEITERB(5); DECODEITERB(6); DECODEITERB(7); enddec: while (state && numbits >= 8) { if (h->bufcnt >= RXBUFFER_SIZE) { state = 0; } else { *(h->bufptr)++ = bitbuf >> (16-numbits); h->bufcnt++; numbits -= 8; } } } h->numbits = numbits; h->state = state; h->bitstream = bitstream; h->bitbuf = bitbuf; } /* ---------------------------------------------------------------------- */ static int epprx(struct adapter_config *cfg) { u_int8_t stat; int cnt, cntx, i, icnt, ocnt, icntx, ocntx; #if 0 unsigned int pcnt = 0; #endif struct hdlc_receiver hdlcrx; unsigned char eio[1024]; hdlc_initrx(&hdlcrx); if ((i = adapter_start_epp(cfg))) return i; /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errret; for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* determine TX fifo size from status bits */ switch (stat & (EPP_NTAEF|EPP_NTHF)) { case EPP_NTHF: ocntx = 2048 - 256; break; case EPP_NTAEF: ocntx = 2048 - 1793; break; case 0: ocntx = 0; break; default: ocntx = 2048 - 1025; break; } /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icntx = 0; break; case EPP_NRAEF: icntx = 1025; break; case 0: icntx = 1793; break; default: icntx = 256; break; } ocnt = ocntx; icnt = icntx; /* try to determine the FIFO count if in extended mode */ if (cfg->extstat) { eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|1; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 2) != 2) goto errret; icnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|2; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 2) != 2) goto errret; ocnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 1) != 1) goto errret; ocnt = 16384 - (ocnt & 0x7fff); icnt &= 0x7fff; } /* try to tx */ #if 0 if (ocnt > 0) { } #endif if (icnt > 0) { for (cntx = icnt; cntx > 0; cntx -= cnt) { cnt = cntx; if (cnt > sizeof(eio)) cnt = sizeof(eio); if (parport_epp_read_data(eio, cnt) != cnt) goto errret; hdlc_receive(&hdlcrx, eio, cnt); } } else { if (idle_callback(10000)) { reset_modem(); return 0; } } #if 0 pcnt = (++pcnt) & 0x3f; if (pcnt) continue; #endif /* DCD has inverse logic */ tprintf("DCD:%c stat: %02x icnt %5d icntx %5d ocnt %5d ocntx %5d\r", (stat & EPP_DCDBIT) ? '-' : 'D', stat, icnt, icntx, ocnt, ocntx); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ static int ecprx(struct adapter_config *cfg) { u_int8_t stat[6]; int cnt, cntx, i, icnt, ocnt; #if 0 unsigned int pcnt = 0; #endif unsigned char data[4096]; struct hdlc_receiver hdlcrx; hdlc_initrx(&hdlcrx); if ((i = adapter_start_ecp(cfg))) return i; data[0] = 0xaf; /* reset register: all reset */ data[1] = 0xa0; /* reset register: terminate reset */ data[2] = 0xb0; if (parport_ecp_write_addr(data, 3) != 3) goto errret; for (;;) { data[0] = 0x81; if (parport_ecp_write_addr(data, 1) != 1) goto errret; if (parport_ecp_read_data(stat, 6) != 6) goto errret; data[0] = 0x80; if (parport_ecp_write_addr(data, 1) != 1) goto errret; icnt = ((unsigned)stat[2] << 8) | stat[1]; ocnt = ((unsigned)stat[4] << 8) | stat[3]; /* read */ if (icnt > 0) { for (cntx = icnt; cntx > 0; cntx -= cnt) { cnt = cntx; if (cnt > sizeof(data)) cnt = sizeof(data); if (cnt > 0xfff) cnt = 0xfff; data[0] = 0xc0 | (cnt & 0xf); data[1] = 0xd0 | ((cnt >> 4) & 0xf); data[2] = 0xe0 | ((cnt >> 8) & 0xf); if (parport_ecp_write_addr(data, 3) != 3) goto errret; if (parport_ecp_read_data(data, cnt) != cnt) goto errret; hdlc_receive(&hdlcrx, data, cnt); } } else { if (idle_callback(10000)) { reset_modem(); return 0; } } /* write */ #if 0 if (ocnt < 8192) { /* fixme */ cnt = 8192 - ocnt; if (cnt > sizeof(data)) cnt = sizeof(data); } #endif #if 0 pcnt = (++pcnt) & 0x3f; if (pcnt) continue; #endif /* DCD has inverse logic */ tprintf("DCD:%c stat: %02x icnt %5d ocnt %5d\r", (stat[0] & EPP_DCDBIT) ? '-' : 'D', stat[0], icnt, ocnt); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "ECP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ static int eppafskrx(struct adapter_config *cfg) { u_int8_t stat; int i, icnt, ocnt; #if 0 int j; unsigned int pcnt = 0; #endif unsigned char eio[32]; struct hdlc_receiver hdlcrx; hdlc_initrx(&hdlcrx); cfg->bitrate = 1200; if ((i = adapter_start_eppafsk(cfg))) return i; /* reset modem */ eio[0] = 0x00; eio[1] = 0x18; if (parport_epp_write_addr(eio, 2) != 2) goto errret; for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* determine the FIFO count */ eio[0] = 0x19; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 1) != 1) goto errret; ocnt = 0x10 - (eio[0] & 0x1f); eio[0] = 0x1a; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 1) != 1) goto errret; icnt = eio[0] & 0x1f; eio[0] = 0x18; if (parport_epp_write_addr(eio, 1) != 1) goto errret; /* try to tx */ #if 0 if (ocnt > 0) { } #endif if (icnt > 0) { if (parport_epp_read_data(eio, icnt) != icnt) goto errret; #if 0 for (i = 0; i < icnt; i++) for (j = 0; j < 8; j++) putc('0' + ((eio[i] >> j) & 1), stdout); fflush(stdout); #endif hdlc_receive(&hdlcrx, eio, icnt); } else { if (idle_callback(10000)) { reset_modem(); return 0; } } #if 0 pcnt = (++pcnt) & 0x3f; if (pcnt) continue; #endif /* DCD has inverse logic */ #if 1 tprintf("DCD:%c stat: %02x icnt %5d ocnt %5d\r", (stat & EPP_DCDBIT) ? '-' : 'D', stat, icnt, ocnt); #endif if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ static int sppafskrx(struct adapter_config *cfg) { u_int8_t stat; int i, icnt, ocnt; #if 0 unsigned int pcnt = 0; #endif unsigned char eio[32]; struct hdlc_receiver hdlcrx; hdlc_initrx(&hdlcrx); cfg->bitrate = 1200; if ((i = adapter_start_sppafsk(cfg))) return i; /* reset modem */ sppafsk_wrcmd(0x00); sppafsk_wrcmd(0x18); for (;;) { stat = sppafsk_rdcmd(); /* determine the FIFO count */ sppafsk_wrcmd(0x19); ocnt = sppafsk_rdcmd(); sppafsk_wrcmd(0x1a); icnt = sppafsk_rdcmd(); sppafsk_wrcmd(0x18); if (icnt > 0x10 || ocnt > 0x10) goto errret; ocnt = 0x10 - ocnt; /* try to tx */ #if 0 if (ocnt > 0) { } #endif if (icnt > 0) { for (i = 0; i < icnt; i++) eio[i] = sppafsk_rddata(); hdlc_receive(&hdlcrx, eio, icnt); } else { if (idle_callback(10000)) { reset_modem(); return 0; } } #if 0 pcnt = (++pcnt) & 0x3f; if (pcnt) continue; #endif /* DCD has inverse logic */ tprintf("DCD:%c stat: %02x icnt %5d ocnt %5d\r", (stat & EPP_DCDBIT) ? '-' : 'D', stat, icnt, ocnt); if (idle_callback(0)) { reset_modem(); return 0; } } return 0; errret: lprintf(0, "SPP bogus values read\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * Sample IO Firmware Tests */ static int sine1k(struct adapter_config *cfg) { #if 0 static const char scdisp[] = " *\n"; #endif signed char sine[128]; unsigned char eio[1024]; unsigned char ctrl = 0; unsigned phase = 0, ledcnt = 0; int i, icnt, ocnt, cnt, cntx; cfg->bitrate = 8000; if ((i = adapter_start_eppsamp(cfg))) return i; for (i = 0; i < sizeof(sine); i++) sine[i] = 127 * sin((2.0 * M_PI / sizeof(sine)) * i); tprintf("Sine 1k Test\n"); eio[0] = 7; eio[1] = 0; if (parport_epp_write_addr(eio, 2) != 2) goto errret; for (;;) { /* determine the FIFO count */ eio[0] = ctrl | 1; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 2) != 2) goto errret; icnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = ctrl | 2; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 2) != 2) goto errret; ocnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = ctrl; if (parport_epp_write_addr(eio, 1) != 1) goto errret; ocnt = 16384 - (ocnt & 0x7fff); icnt &= 0x7fff; /* try to tx */ if (ocnt > 0) { for (cntx = ocnt; cntx > 0; cntx -= cnt) { cnt = cntx; if (cnt > sizeof(eio)) cnt = sizeof(eio); for (i = 0; i < cnt; i++) { eio[i] = sine[(phase >> 9) & 0x7f]; phase += 0x1789; /* pretty arbitrary */ } if (parport_epp_write_data(eio, cnt) != cnt) goto errret; } } if (icnt > 0) { for (cntx = icnt; cntx > 0; cntx -= cnt) { cnt = cntx; if (cnt > sizeof(eio)) cnt = sizeof(eio); if (parport_epp_read_data(eio, cnt) != cnt) goto errret; for (i = 0; i < cnt; i++) { #if 0 tprintf(scdisp + (((eio[i] + 128) & 0xff) / 4)); #elif 1 if (i < 64) tprintf("%4d\n", ((signed char)eio[i])); else if (i == 64) tprintf("--\n"); #endif if ((++ledcnt) >= 4000) { ledcnt = 0; ctrl += 0x40; } } } } else { if (idle_callback(10000)) { reset_modem(); return 0; } } } errret: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ #ifdef HAVE_LINUX_SOUNDCARD_H #include #include #include #include #include #include #include #include #include #define SNDLATENCY 4000 /* approx 1/2 seconds */ #define PHASEFRAC 12 #define PHASEMASK ((1<bitrate = 8000; if ((i = adapter_start_eppsamp(cfg))) return i; if ((fddsp = open("/dev/dsp", O_RDWR | O_NONBLOCK)) == -1) { lprintf(0, "cannot open /dev/dsp (%s)\n", strerror(errno)); return -1; } fcntl(fddsp, F_SETFL, fcntl(fddsp, F_GETFL, 0) | O_NONBLOCK); if (ioctl(fddsp, SNDCTL_DSP_NONBLOCK, 0) == -1) { lprintf(0, "ioctl SNDCTL_DSP_NONBLOCK failed (%s)\n", strerror(errno)); goto errsnd; } if (ioctl(fddsp, SNDCTL_DSP_GETCAPS, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETCAPS failed (%s)\n", strerror(errno)); goto errsnd; } if (!(apar & DSP_CAP_DUPLEX)) { lprintf(0, "full duplex soundcard required\n"); goto errsnd; } if (!(apar & DSP_CAP_TRIGGER)) { lprintf(0, "soundcard does not support trigger\n"); goto errsnd; } if (ioctl(fddsp, SNDCTL_DSP_SETDUPLEX, 0) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETDUPLEX failed (%s)\n", strerror(errno)); goto errsnd; } apar = AFMT_U8; if (ioctl(fddsp, SNDCTL_DSP_SETFMT, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETFMT failed (%s), U8 not supported??\n", strerror(errno)); goto errsnd; } apar = 0; if (ioctl(fddsp, SNDCTL_DSP_STEREO, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_STEREO failed (%s), mono not supported??\n", strerror(errno)); goto errsnd; } srate = cfg->bitrate; if (ioctl(fddsp, SNDCTL_DSP_SPEED, &srate) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SPEED failed (%s), samplingrate %u not supported??\n", strerror(errno), cfg->bitrate); goto errsnd; } lprintf(1, "epp adapter sampling rate %u, soundcard sampling rate %u\n", cfg->bitrate, srate); if (abs(cfg->bitrate - srate) > cfg->bitrate / 2) { lprintf(0, "sampling rates (%u,%u) too different\n", cfg->bitrate, srate); goto errsnd; } phinceppdsp = ((1 << PHASEFRAC) * cfg->bitrate + srate / 2) / srate; phincdspepp = ((1 << PHASEFRAC) * srate + cfg->bitrate / 2) / cfg->bitrate; lprintf(1, "epp->dsp phase inc: 0x%05x dsp->epp phase inc: 0x%05x\n", phinceppdsp, phincdspepp); if (ioctl(fddsp, SNDCTL_DSP_GETOSPACE, &aboinfo) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETOSPACE failed (%s)\n", strerror(errno)); goto errsnd; } if (ioctl(fddsp, SNDCTL_DSP_GETISPACE, &abiinfo) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETISPACE failed (%s)\n", strerror(errno)); goto errsnd; } if (aboinfo.fragstotal * aboinfo.fragsize < 2*SNDLATENCY || abiinfo.fragstotal * abiinfo.fragsize < 2*SNDLATENCY) { lprintf(0, "soundcard buffers too small (%u,%u)\n", aboinfo.fragstotal * aboinfo.fragsize, abiinfo.fragstotal * abiinfo.fragsize); goto errsnd; } tprintf("Audio IO to Linux Soundcard\n"); /* reset the EPP adapter */ bufu[0] = 7; bufu[1] = 0; if (parport_epp_write_addr(bufu, 2) != 2) goto errret; /* prefill EPP adapter to nominal queue size */ memset(bufs, 0, SNDLATENCY); if (parport_epp_write_data(bufs, SNDLATENCY) != SNDLATENCY) goto errret; /* prefill to nominal queue size and stard soundcard */ memset(bufu, 0x80, SNDLATENCY); if ((i = write(fddsp, bufu, SNDLATENCY)) != SNDLATENCY) { lprintf(0, "write(%d) failed %i (%s)\n", SNDLATENCY, i, strerror(errno)); goto errsnd; } apar = PCM_ENABLE_INPUT | PCM_ENABLE_OUTPUT; if (ioctl(fddsp, SNDCTL_DSP_SETTRIGGER, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETTRIGGER failed (%s)\n", strerror(errno)); goto errsnd; } /* start the whole thing */ for (;;) { /* first do the epp->dsp direction */ /* get FIFO count */ bufu[0] = ctrl | 1; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; if (parport_epp_read_addr(bufu, 2) != 2) goto errret; icnt = bufu[0] | (((unsigned int)bufu[1]) << 8); bufu[0] = ctrl; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; icnt &= 0x7fff; if (icnt > 0) { if (icnt > sizeof(bufs)/2) icnt = sizeof(bufs)/2; if (parport_epp_read_data(bufs, icnt) != icnt) goto errret; pheppdsp &= PHASEMASK; cnt = 0; while (pheppdsp < (icnt << PHASEFRAC)) { bufu[cnt] = bufs[pheppdsp >> PHASEFRAC] + 128; pheppdsp += phinceppdsp; cnt++; } if ((i = write(fddsp, bufu, cnt)) != cnt) { lprintf(0, "write(%d) failed %i (%s)\n", cnt, i, strerror(errno)); goto errsnd; } if (ioctl(fddsp, SNDCTL_DSP_GETODELAY, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETODELAY failed (%s)\n", strerror(errno)); goto errsnd; } /* adjust speed */ lprintf(4, "icnt %d cnt %d odel %d\n", icnt, cnt, apar); if (apar > SNDLATENCY) phinceppdsp++; else if (apar < SNDLATENCY) phinceppdsp--; if (phinceppdsp < (0x9 << (PHASEFRAC-4)) || phinceppdsp > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phinceppdsp (0x%05x) out of range\n", phinceppdsp); goto errsnd; } /* play games with the LEDS */ ledcnt += icnt; if (ledcnt >= 4000) { ledcnt %= 4000; ctrl += 0x40; } } /* next do the dsp->epp direction */ /* get FIFO count */ bufu[0] = ctrl | 2; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; if (parport_epp_read_addr(bufu, 2) != 2) goto errret; ocnt = bufu[0] | (((unsigned int)bufu[1]) << 8); bufu[0] = ctrl; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; ocnt &= 0x7fff; omax = 16384 - ocnt; /* read sound */ ocnts = read(fddsp, bufu, sizeof(bufu)/2); if (ocnts == -1 && errno == EAGAIN) ocnts = 0; if (ocnts < 0) { lprintf(0, "read(%d) failed %i (%s)\n", sizeof(bufu)/2, ocnts, strerror(errno)); goto errsnd; } if (ocnts > 0) { phdspepp &= PHASEMASK; cnt = 0; while (phdspepp < (ocnts << PHASEFRAC)) { bufs[cnt] = bufu[phdspepp >> PHASEFRAC] - 128; phdspepp += phincdspepp; cnt++; } if (cnt > omax) { lprintf(0, "epp adapter output overrun (%d, %d)\n", cnt, omax); goto errsnd; } #ifdef SINEOVERLAY for (i = 0; i < cnt; i++) { bufs[i] += sine[(phase >> 9) & 0x7f]; phase += 0x1789; /* pretty arbitrary */ } #endif if (parport_epp_write_data(bufs, cnt) != cnt) goto errret; /* reget the FIFO count */ bufu[0] = ctrl | 2; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; if (parport_epp_read_addr(bufu, 2) != 2) goto errret; ocnt = bufu[0] | (((unsigned int)bufu[1]) << 8); bufu[0] = ctrl; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; ocnt &= 0x7fff; /* adjust speed */ lprintf(4, "ocnts %d cnt %d ocnt %d\n", ocnts, cnt, ocnt); if (ocnt > SNDLATENCY) phincdspepp++; else if (ocnt < SNDLATENCY) phincdspepp--; if (phincdspepp < (0x9 << (PHASEFRAC-4)) || phincdspepp > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phincdspepp (0x%05x) out of range\n", phincdspepp); goto errsnd; } } /* wait a bit */ if (idle_callback(50000)) { reset_modem(); return 0; } lprintf(1, "phase increments: 0x%05x 0x%05x\n", phinceppdsp, phincdspepp); } errret: lprintf(0, "EPP timeout\n"); errsnd: close(fddsp); return -1; } #endif /* HAVE_LINUX_SOUNDCARD_H */ /* ---------------------------------------------------------------------- */ #ifdef HAVE_DIRECTX #include #define SNDLATENCY 4000 /* approx 1/2 seconds */ #define PHASEFRAC 12 #define PHASEMASK ((1<bitrate = 8000; if ((i = adapter_start_eppsamp(cfg))) { retval = i; goto errdscreate4; } phinceppdsp = ((1 << PHASEFRAC) * cfg->bitrate + 8000 / 2) / 8000; phincdspepp = ((1 << PHASEFRAC) * 8000 + cfg->bitrate / 2) / cfg->bitrate; lprintf(1, "epp->dsp phase inc: 0x%05x dsp->epp phase inc: 0x%05x\n", phinceppdsp, phincdspepp); tprintf("Audio IO to DirectX\n"); /* reset the EPP adapter */ bufu[0] = 7; bufu[1] = 0; if (parport_epp_write_addr(bufu, 2) != 2) goto errret; /* prefill EPP adapter to nominal queue size */ memset(bufs, 0, SNDLATENCY); if (parport_epp_write_data(bufs, SNDLATENCY) != SNDLATENCY) goto errret; /* prefill to nominal queue size and stard soundcard */ if (FAILED(res = IDirectSoundBuffer_Lock(playbuf, 0, SNDLATENCY, (LPVOID)&uptr, &lockbytes, NULL, NULL, 0))) { lprintf(0, "IDirectSoundBuffer_Lock error %lu\n", res); goto errresmodem; } memset(uptr, 0x80, SNDLATENCY); if (FAILED(res = IDirectSoundBuffer_Unlock(playbuf, uptr, lockbytes, NULL, 0))) { lprintf(0, "IDirectSoundBuffer_Unlock error %lu\n", res); goto errresmodem; } playptr = SNDLATENCY; if (FAILED(res = IDirectSoundBuffer_Play(playbuf, 0, 0, DSBPLAY_LOOPING))) { lprintf(0, "IDirectSoundBuffer_Play error %lu\n", res); goto errresmodem; } if (FAILED(res = IDirectSoundCaptureBuffer_Start(recbuf, DSCBSTART_LOOPING))) { lprintf(0, "IDirectSoundCaptureBuffer_Start error %lu\n", res); goto errresmodem; } /* start the whole thing */ for (;;) { /* first do the epp->dsp direction */ /* get FIFO count */ bufu[0] = ctrl | 1; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; if (parport_epp_read_addr(bufu, 2) != 2) goto errret; icnt = bufu[0] | (((unsigned int)bufu[1]) << 8); bufu[0] = ctrl; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; icnt &= 0x7fff; if (icnt > 0) { if (icnt > sizeof(bufs)/2) icnt = sizeof(bufs)/2; if (parport_epp_read_data(bufs, icnt) != icnt) goto errret; pheppdsp &= PHASEMASK; /* write to direct sound and convert */ if (FAILED(res = IDirectSoundBuffer_Lock(playbuf, playptr, SNDLATENCY, (LPVOID)&uptr, &lockbytes, (LPVOID)&uptr2, &lockbytes2, 0))) { lprintf(0, "IDirectSoundBuffer_Lock error %lu\n", res); goto errresmodem; } uptr3 = uptr; while (pheppdsp < (icnt << PHASEFRAC)) { *uptr3++ = bufs[pheppdsp >> PHASEFRAC] + 128; pheppdsp += phinceppdsp; playptr++; if (playptr >= playbufsz) { playptr = 0; uptr3 = uptr2; } } if (FAILED(res = IDirectSoundBuffer_Unlock(playbuf, uptr, lockbytes, uptr2, lockbytes2))) { lprintf(0, "IDirectSoundBuffer_Unlock error %lu\n", res); goto errresmodem; } /* get output delay */ if (FAILED(res = IDirectSoundBuffer_GetCurrentPosition(playbuf, &delay, NULL))) { lprintf(0, "IDirectSoundBuffer_GetCurrentPosition error %lu\n", res); goto errresmodem; } delay = (playbufsz + playptr - delay) % playbufsz; /* adjust speed */ lprintf(4, "icnt %d cnt %d odel %u\n", icnt, cnt, delay); if (delay > SNDLATENCY) phinceppdsp++; else if (delay < SNDLATENCY) phinceppdsp--; if (phinceppdsp < (0x9 << (PHASEFRAC-4)) || phinceppdsp > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phinceppdsp (0x%05x) out of range\n", phinceppdsp); goto errresmodem; } /* play games with the LEDS */ ledcnt += icnt; if (ledcnt >= 4000) { ledcnt %= 4000; ctrl += 0x40; } } /* next do the dsp->epp direction */ /* get FIFO count */ bufu[0] = ctrl | 2; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; if (parport_epp_read_addr(bufu, 2) != 2) goto errret; ocnt = bufu[0] | (((unsigned int)bufu[1]) << 8); bufu[0] = ctrl; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; ocnt &= 0x7fff; omax = 16384 - ocnt; /* read sound */ if (FAILED(res = IDirectSoundCaptureBuffer_GetCurrentPosition(recbuf, &delay, NULL))) { lprintf(0, "IDirectSoundCaptureBuffer_GetCurrentPosition error %lu\n", res); goto errresmodem; } ocnts = (recbufsz + delay - recptr) % recbufsz; if (ocnts > 0) { if (FAILED(res = IDirectSoundCaptureBuffer_Lock(recbuf, recptr, SNDLATENCY, (LPVOID)&uptr, &lockbytes, (LPVOID)&uptr2, &lockbytes2, 0))) { lprintf(0, "IDirectSoundCaptureBuffer_Lock error %lu\n", res); goto errresmodem; } uptr3 = uptr; phdspepp &= PHASEMASK; cnt = 0; while (phdspepp < (ocnts << PHASEFRAC)) { if (phdspepp >= ((recbufsz - recptr) << PHASEFRAC)) { uptr3 = uptr2; phdspepp -= (recbufsz - recptr) << PHASEFRAC; recptr = 0; } bufs[cnt] = uptr3[phdspepp >> PHASEFRAC] - 128; phdspepp += phincdspepp; cnt++; } recptr = (recptr + (phdspepp >> PHASEFRAC)) % recbufsz; if (FAILED(res = IDirectSoundCaptureBuffer_Unlock(recbuf, uptr, lockbytes, uptr2, lockbytes2))) { lprintf(0, "IDirectSoundCaptureBuffer_Unlock error %lu\n", res); goto errresmodem; } if (cnt > omax) { lprintf(0, "epp adapter output overrun (%d, %d)\n", cnt, omax); goto errresmodem; } #ifdef SINEOVERLAY for (i = 0; i < cnt; i++) { bufs[i] += sine[(phase >> 9) & 0x7f]; phase += 0x1789; /* pretty arbitrary */ } #endif if (parport_epp_write_data(bufs, cnt) != cnt) goto errret; /* reget the FIFO count */ bufu[0] = ctrl | 2; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; if (parport_epp_read_addr(bufu, 2) != 2) goto errret; ocnt = bufu[0] | (((unsigned int)bufu[1]) << 8); bufu[0] = ctrl; if (parport_epp_write_addr(bufu, 1) != 1) goto errret; ocnt &= 0x7fff; /* adjust speed */ lprintf(4, "ocnts %d cnt %d ocnt %d\n", ocnts, cnt, ocnt); if (ocnt > SNDLATENCY) phincdspepp++; else if (ocnt < SNDLATENCY) phincdspepp--; if (phincdspepp < (0x9 << (PHASEFRAC-4)) || phincdspepp > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phincdspepp (0x%05x) out of range\n", phincdspepp); goto errresmodem; } } /* wait a bit */ if (idle_callback(50000)) { reset_modem(); retval = 0; goto errresmodem; } lprintf(1, "phase increments: 0x%05x 0x%05x\n", phinceppdsp, phincdspepp); } errret: lprintf(0, "EPP timeout\n"); errresmodem: IDirectSoundBuffer_Stop(playbuf); IDirectSoundCaptureBuffer_Stop(recbuf); reset_modem(); errdscreate4: IDirectSoundBuffer_Release(playbuf); errdscreate3: IDirectSoundCaptureBuffer_Release(recbuf); errdscreate2: IDirectSoundCapture_Release(dsrec); errdscreate1: IDirectSound_Release(dsplay); errdscreate: DestroyWindow(hwnd); errcreatewin: UnregisterClass("MyClass", hinst); return -1; } #endif /* HAVE_DIRECTX */ /* ---------------------------------------------------------------------- */ const struct eppfpgatests eppfpgatests[] = { { "ram", "tests the on board SRAM", ramtest }, { "bled", "tests the on board LED's using boundary scan", ledtest }, { "dac", "tests the on board DAC", dactest }, { "ppsig", "tests the parallel port signals using boundary scan", ppsigtest }, { "led", "tests the CON and STA leds using EPP address write", eppledtest }, { "ledfast", "tests the CON and STA leds using fast EPP address write", eppledtest2 }, { "berr", "tests the complete adapter", eppmodemtest1 }, { "berrv", "tests the complete adapter (verbose)", eppmodemtest2 }, { "berrd", "tests the complete adapter (exercises data transfer)", eppmodemtest3 }, { "berrdv", "tests the complete adapter (exercises data transfer, verbose)", eppmodemtest4 }, { "ccnt", "frequency counter using the check firmware", chkcountertest }, { "cdac", "fast DAC test using the check firmware", chkdactest }, { "creg", "EPP register read/write test using the check firmware", chkregtest }, { "cram", "fast RAM test using the check firmware", chkramtest }, { "cled", "LED test using the check firmware", chkledtest }, { "cadc", "tests the sigma delta A/D converter", chkadctest }, { "ecpled", "tests the CON and STA leds using ECP write", ecpledtest }, { "ecpledfast", "tests the CON and STA leds using fast ECP write", ecpledtest2 }, { "ecpberr", "tests the complete adapter in ECP mode", ecpmodemtest1 }, { "ecpberrv", "tests the complete adapter in ECP mode (verbose)", ecpmodemtest2 }, { "ecpberrd", "tests the complete adapter in ECP mode (exercises data transfer)", ecpmodemtest3 }, { "ecpberrdv", "tests the complete adapter in ECP mode (exercises data transfer, verbose)", ecpmodemtest4 }, { "eppafskled", "tests the CON and STA leds using EPP address write", eppafskledtest }, { "eppafskledfast", "tests the CON and STA leds using fast EPP address write", eppafskledtest2 }, { "eppafskberr", "tests the complete adapter", eppafskmodemtest1 }, { "eppafskberrv", "tests the complete adapter (verbose)", eppafskmodemtest2 }, { "eppafskberrd", "tests the complete adapter (exercises data transfer)", eppafskmodemtest3 }, { "eppafskberrdv", "tests the complete adapter (exercises data transfer, verbose)", eppafskmodemtest4 }, { "eppafsktx0", "transmit AFSK 0 constantly", eppafskmodemtest5 }, { "eppafsktx1", "transmit AFSK 1 constantly", eppafskmodemtest6 }, { "sppafskled", "tests the CON and STA leds using EPP address write", sppafskledtest }, { "sppafskledfast", "tests the CON and STA leds using fast EPP address write", sppafskledtest2 }, { "sppafskberr", "tests the complete adapter", sppafskmodemtest1 }, { "sppafskberrv", "tests the complete adapter (verbose)", sppafskmodemtest2 }, { "sppafskberrd", "tests the complete adapter (exercises data transfer)", sppafskmodemtest3 }, { "sppafskberrdv", "tests the complete adapter (exercises data transfer, verbose)", sppafskmodemtest4 }, { "sppafsktx0", "transmit AFSK 0 constantly", sppafskmodemtest5 }, { "sppafsktx1", "transmit AFSK 1 constantly", sppafskmodemtest6 }, { "epprx", "decodes received packets using EPP mode", epprx }, { "ecprx", "decodes received packets using ECP mode", ecprx }, { "eppafskrx", "decodes received packets using EPP AFSK mode", eppafskrx }, { "sppafskrx", "decodes received packets using SPP AFSK mode", sppafskrx }, { "sine1k", "generate approx 1k sine using the sample IO firmware", sine1k }, #if defined(HAVE_LINUX_SOUNDCARD_H) || defined(HAVE_DIRECTX) { "saudio", "generate approx 1k sine using the sample IO firmware", saudio }, #endif /* HAVE_LINUX_SOUNDCARD_H */ { NULL, NULL, NULL } }; /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/configfpga.c0100644000175100017510000010353707073022254015610 0ustar abaaba/*****************************************************************************/ /* * configfpga.c -- FPGA configuration routines. * * Copyright (C) 1998-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include #include #ifdef HAVE_SYS_PERM_H #include #endif #include "parport.h" #include "fpga.h" #include "util.h" /* ---------------------------------------------------------------------- */ #include "epp_fpga.h" #include "epp_firmware.h" #include "eppchk_firmware.h" #include "ecp_firmware.h" #include "eppafsk_firmware.h" #include "eppsamp_firmware.h" #include "sppafsk_firmware.h" /* ---------------------------------------------------------------------- */ /* LPT data register */ #define LPTDATA_SHIFT_TDI 0 #define LPTDATA_SHIFT_TMS 2 #define LPTDATA_TDI (1< 0) { parport_write_data(v | LPTDATA_TCK); tdi >>= 1; tms >>= 1; v = eppdata | ((tdi << LPTDATA_SHIFT_TDI) & LPTDATA_TDI) | ((tms << LPTDATA_SHIFT_TMS) & LPTDATA_TMS); parport_write_data(v); num--; } } static unsigned jtag_shift(unsigned num, unsigned tdi, unsigned tms, unsigned char eppdata) { unsigned char v; unsigned in = 0, mask = 2; eppdata &= ~(LPTDATA_TDI | LPTDATA_TMS | LPTDATA_TCK); v = eppdata | ((tdi << LPTDATA_SHIFT_TDI) & LPTDATA_TDI) | ((tms << LPTDATA_SHIFT_TMS) & LPTDATA_TMS); parport_write_data(v); if (parport_read_status() & LPTSTAT_NINTR) in |= 1; while (num > 0) { parport_write_data(v | LPTDATA_TCK); tdi >>= 1; tms >>= 1; v = eppdata | ((tdi << LPTDATA_SHIFT_TDI) & LPTDATA_TDI) | ((tms << LPTDATA_SHIFT_TMS) & LPTDATA_TMS); parport_write_data(v); num--; if (parport_read_status() & LPTSTAT_NINTR) in |= mask; mask <<= 1; } return in; } extern inline void jtag_reset_tap(void) { jtag_shiftout(5, 0, ~0, 0); } /* ---------------------------------------------------------------------- */ /* * this routine expects the target TAP to be in RUNTEST/IDLE * state and leaves it there at exit */ void boundary(unsigned int blen, const unsigned char *in, unsigned char *out, unsigned char eppdata) { jtag_shiftout(3, 0, 1, eppdata); while (blen > 8) { *out++ = jtag_shift(8, *in++, 0, eppdata); blen -= 8; } *out = jtag_shift(blen, *in, 1 << (blen-1), eppdata); jtag_shiftout(2, 0, 1, eppdata); } /* ---------------------------------------------------------------------- */ /* * Modem detection routines (assume the LPT port is there) */ static int detect_modem(void) { unsigned int i; unsigned char val; unsigned char bd[FPGA_BOUNDSIZE]; /* pulse PROGRAM low */ parport_write_control(LPTCTRL_ADDRSTB); parport_write_data(LPTDATA_TMS); usleep(10); parport_write_control(LPTCTRL_PROGRAM); /* check if EPP NINIT is low */ val = parport_read_status(); if (val & LPTSTAT_WAIT) { lprintf(0, "cannot hold down INIT\n"); return -1; } if (val & LPTSTAT_DONE) { lprintf(0, "DONE high\n"); return -1; } /* FPGA held in configuration state due to INITBIAS low */ jtag_reset_tap(); /* force TAP controller into reset state */ /* check instruction register length */ jtag_shiftout(5, 0, 6, 0); /* enter Shift-IR state */ jtag_shiftout(32, 0, 0, 0); /* assume max. 32bit IR */ i = jtag_shift(32, 1, 0, 0); /* shift in a single bit */ if (hweight32(i) != 1) { lprintf(0, "unable to detect JTAG IR (val %#06x)\n", i); return -1; } if (ffs(i) != XC4K_IRLENGTH+1) { lprintf(0, "size of JTAG IR not %d bits (val %#06x)\n", XC4K_IRLENGTH, i); return -1; } /* shift in PRELOAD insn, goto SHIFTDR state */ jtag_shiftout(XC4K_IRLENGTH+4, XC4K_PRELOAD, 7 << (XC4K_IRLENGTH-1), 0); for (i = 0; i < 1000; i++) { parport_write_data(0); parport_write_data(LPTDATA_TCK); } parport_write_data(LPTDATA_TDI); parport_write_data(LPTDATA_TDI | LPTDATA_TCK); i = 1; parport_write_data(0); while (!(parport_read_status() & LPTSTAT_NINTR)) { if (i >= 1000) { lprintf(0, "JTAG DR too long\n"); return -1; } parport_write_data(LPTDATA_TCK); parport_write_data(0); i++; } if (i != FPGA_BOUND) { lprintf(0, "size of JTAG DR not %d bits (val %d)\n", FPGA_BOUND, i); return -1; } for (i = 0; i < FPGA_BOUND-1; i++) { val = ((fpga_safebound[i >> 3] >> (i & 3)) & 1) << LPTDATA_SHIFT_TDI; parport_write_data(val); parport_write_data(val | LPTDATA_TCK); } /* i = data->h.h.boundarylength-1; */ val = (((fpga_safebound[(FPGA_BOUND-1) >> 3] >> ((FPGA_BOUND-1) & 3)) & 1) << LPTDATA_SHIFT_TDI) | LPTDATA_TMS; parport_write_data(val); parport_write_data(val | LPTDATA_TCK); /* shift in EXTEST insn, goto TESTRESET state */ jtag_shiftout(7 + XC4K_IRLENGTH, XC4K_EXTEST << 5, 7 | (0x30 << XC4K_IRLENGTH), 0); boundary(FPGA_BOUND, fpga_safebound, bd, 0); lprintf(1, "Modem jumpers: %c %c%c%c%c %c%c%c%c %c%c%c%c\n", '0' + readboundary(bd, FPGA_PIN_RAMA0_I), '0' + readboundary(bd, FPGA_PIN_RAMA1_I), '0' + readboundary(bd, FPGA_PIN_RAMA2_I), '0' + readboundary(bd, FPGA_PIN_RAMA3_I), '0' + readboundary(bd, FPGA_PIN_RAMA4_I), '0' + readboundary(bd, FPGA_PIN_RAMA5_I), '0' + readboundary(bd, FPGA_PIN_RAMA6_I), '0' + readboundary(bd, FPGA_PIN_RAMA7_I), '0' + readboundary(bd, FPGA_PIN_RAMA8_I), '0' + readboundary(bd, FPGA_PIN_RAMA9_I), '0' + readboundary(bd, FPGA_PIN_RAMA10_I), '0' + readboundary(bd, FPGA_PIN_RAMA11_I), '0' + readboundary(bd, FPGA_PIN_RAMA12_I)); return 0; } /* ---------------------------------------------------------------------- */ void printconfig(const struct adapter_config *cfg) { lprintf(1, "configuration: %sclk,%smodem,fclk=%d,bitrate=%d%s,%sextstat,%spttmute,filter=%d,gain=%d\n", cfg->intclk ? "int" : "ext", cfg->extmodem ? "ext" : "int", cfg->fclk, cfg->bitrate, cfg->loopback ? ",loopback" : "", cfg->extstat ? "" : "no", cfg->pttmute ? "" : "no", cfg->filtmode, cfg->gain); } void parseconfig(struct adapter_config *cfg, const char *modestr) { const char *cp; /* temporary hack to ease the transition to the new format */ unsigned hasbitrate = 0, divider = 0; /* meaningful frequencies/bit rates */ if (!cfg->fclk) cfg->fclk = 19666600; if (!cfg->bitrate) cfg->bitrate = 9600; if (cfg->fclk < 1000000) cfg->fclk = 1000000; if (cfg->fclk > 25000000) cfg->fclk = 25000000; if (cfg->bitrate < 4096) cfg->bitrate = 4096; if (cfg->bitrate > 1500000) cfg->bitrate = 1500000; /* command line parsing */ if (strstr(modestr, "intclk")) cfg->intclk = 1; if (strstr(modestr, "extclk")) cfg->intclk = 0; if (strstr(modestr, "intmodem")) cfg->extmodem = 0; if (strstr(modestr, "extmodem")) cfg->extmodem = 1; if (strstr(modestr, "noloopback")) cfg->loopback = 0; else if (strstr(modestr, "loopback")) cfg->loopback = 1; if (strstr(modestr, "noextstat")) cfg->extstat = 0; else if (strstr(modestr, "extstat")) cfg->extstat = 1; if (strstr(modestr, "nopttmute")) cfg->pttmute = 0; else if (strstr(modestr, "pttmute")) cfg->pttmute = 1; if ((cp = strstr(modestr, "fclk="))) { cfg->fclk = strtoul(cp+5, NULL, 0); if (cfg->fclk < 1000000) cfg->fclk = 1000000; if (cfg->fclk > 25000000) cfg->fclk = 25000000; } if ((cp = strstr(modestr, "bitrate="))) { cfg->bitrate = strtoul(cp+8, NULL, 0); if (cfg->bitrate < 4096) cfg->bitrate = 4096; if (cfg->bitrate > 1500000) cfg->bitrate = 1500000; hasbitrate = 1; } if ((cp = strstr(modestr, "filter="))) { cfg->filtmode = strtoul(cp+7, NULL, 0); if (cfg->filtmode > 2) cfg->filtmode = 2; } if ((cp = strstr(modestr, "gain="))) { cfg->gain = strtoul(cp+5, NULL, 0); if (cfg->gain < 1) cfg->gain = 1; if (cfg->gain > 32) cfg->gain = 32; } if ((cp = strstr(modestr, "divider="))) { divider = strtoul(cp+8, NULL, 0); if (divider < 1) divider = 1; if (divider > 1024) divider = 1024; } /* set bitrate if there was a divider= but no bitrate= */ if (!hasbitrate && divider) { cfg->bitrate = (cfg->fclk + 8 * divider) / (16 * divider); if (cfg->bitrate < 4096) cfg->bitrate = 4096; if (cfg->bitrate > 1500000) cfg->bitrate = 1500000; } } /* ---------------------------------------------------------------------- */ #if 0 static void calc_crc(const unsigned char *data, unsigned int frame) { unsigned int ptr = frame * FPGA_FRAMELEN + 41, i, creg = ~0, creg2 = creg; unsigned char b1[8], b2[8], b3[8], *s1 = b1, *s2 = b2, *s3 = b3; for (i = 0; i < FPGA_FRAMELEN-5; i++, ptr++) { creg <<= 1; creg |= ((data[ptr >> 3] >> ((~ptr) & 7)) ^ (creg >> 16) ^ (creg >> 1) ^ (creg >> 14)) & 1; creg2 <<= 1; if (((data[ptr >> 3] >> ((~ptr) & 7)) ^ (creg2 >> 16)) & 1) creg2 ^= (1 << 0) | (1 << 2) | (1 << 15); } for (i = 0; i < 4; i++, ptr++) { *s1++ = '0' + ((data[ptr >> 3]>> ((~ptr) & 7)) & 1); creg <<= 1; creg |= ((creg >> 16) ^ (creg >> 1) ^ (creg >> 14)) & 1; *s2++ = '0' + ((creg >> 16) & 1); creg2 <<= 1; if (creg2 & (1 << 16)) creg2 ^= (1 << 0) | (1 << 2) | (1 << 15); *s3++ = '0' + ((creg2 >> 16) & 1); } *s1 = *s2 = *s3 = 0; printf("Frame %3d CRC file %s calc %s %s ptr %5d\n", frame, b1, b2, b3, ptr); } #endif /* ---------------------------------------------------------------------- */ static int configure(const unsigned char *data, unsigned cfgsz) { struct timeval time1, time2; unsigned i, j, dt; unsigned char val; unsigned char lpstat; unsigned char cfgbuf[16]; unsigned char *bp; #if 0 for (i = 0; i < EPP_FPGANUMFRAMES; i++) calc_crc(cfgdata, i); #endif parport_write_data(0); /* pulse PROGRAM low */ parport_write_control(LPTCTRL_ADDRSTB); usleep(100); parport_write_control(LPTCTRL_PROGRAM); if (parport_read_status() & LPTSTAT_WAIT) { lprintf(0, "FPGA configuration error (INIT prematurely high)\n"); return -1; } jtag_shiftout(12 + XC4K_IRLENGTH, XC4K_CONFIGURE << 10, 0xdf | (0x600 << XC4K_IRLENGTH), 0); /* we are now in RUNTEST/IDLE state */ /* set initbias high; poll for init going high */ parport_write_data(LPTDATA_INITBIAS); gettime(&time1); while (!(parport_read_status() & LPTSTAT_WAIT)) { gettime(&time2); if (((time2.tv_sec - time1.tv_sec) * 1000000UL + (time2.tv_usec - time1.tv_usec)) >= 500000) { lprintf(0, "during configure: INIT stuck low\n"); return -1; } } gettime(&time2); lprintf(2, "Init was down for %ld us\n", (time2.tv_sec - time1.tv_sec) * 1000000UL + time2.tv_usec - time1.tv_usec); jtag_shiftout(3, ~0, 1, LPTDATA_INITBIAS); /* advance to SHIFT-DR state */ for (i = 0; i < cfgsz; i++) { dt = data[i]; bp = cfgbuf; for (j = 0; j < 8; j++, dt >>= 1) { val = LPTDATA_INITBIAS | ((dt << LPTDATA_SHIFT_TDI) & LPTDATA_TDI); *bp++ = val; *bp++ = val | LPTDATA_TCK; } if (parport_fpgaconfig_write(cfgbuf, 16) != 16) { lprintf(0, "FPGA configuration write error\n"); return -1; } lpstat = parport_read_status(); if (lpstat & LPTSTAT_DONE) { if (i >= cfgsz-1) break; lprintf(0, "FPGA configuration error (DONE prematurely high)\n"); return -1; } if (!(lpstat & LPTSTAT_WAIT)) { lprintf(0, "FPGA configuration error (INIT down)\n"); return -1; } } for (i = 0; ; ) { lpstat = parport_read_status(); if (lpstat & LPTSTAT_DONE) break; if (!(lpstat & LPTSTAT_WAIT)) { lprintf(0, "FPGA configuration error (INIT down) (2)!!\n"); return -1; } parport_write_data(LPTDATA_INITBIAS | LPTDATA_TDI); parport_write_data(LPTDATA_INITBIAS | LPTDATA_TDI | LPTDATA_TCK); if ((++i) > 1000) { lprintf(0, "DONE stuck low\n"); return -1; } } /* generate a few additional clock cycles to ensure proper startup */ for (i = 0; i < 16; i++) { parport_write_data(LPTDATA_INITBIAS | LPTDATA_TDI); parport_write_data(LPTDATA_INITBIAS | LPTDATA_TDI | LPTDATA_TCK); } lprintf(1, "FPGA configuration completed successfully\n"); return 0; } /* ---------------------------------------------------------------------- */ static unsigned int readconfigrom(const unsigned char *firmware, const unsigned long rom[16]) { unsigned ret = 0, mask = 1, i, j; for (i = 0; i < 16; i++, mask <<= 1) { j = rom[i]; if (!(firmware[j >> 3] & (1 << (j & 7)))) ret |= mask; } return ret & 0xffff; } /* warning: if used, don't use CRC bitstream, there's currently no code to recalc the CRC */ static void writeconfigrom(unsigned char *firmware, const unsigned long rom[16], unsigned val) { unsigned mask = 1, i, j; for (i = 0; i < 16; i++, mask <<= 1) { j = rom[i]; if (val & mask) firmware[j >> 3] &= ~(1 << (j & 7)); else firmware[j >> 3] |= 1 << (j & 7); } } /* ---------------------------------------------------------------------- */ /* * Filter calc routines */ static const float filt_comp[32] = { -0.0000, -0.0071, -0.0144, -0.0160, -0.0028, 0.0279, 0.0617, 0.0683, 0.0208, -0.0765, -0.1732, -0.1877, -0.0525, 0.2365, 0.5993, 0.9000, 1.0122, 0.8857, 0.5741, 0.2060, -0.0825, -0.2130, -0.1919, -0.0888, 0.0138, 0.0649, 0.0606, 0.0281, -0.0021, -0.0152, -0.0139, -0.0070 }; /* -------------------------------------------------------------------- */ #define HAMMING(x) (0.54-0.46*cos(2*M_PI*(x))); extern inline float hamming(float x) { return 0.54-0.46*cos(2*M_PI*x); } extern inline float sinc(float x) { if (x == 0) return 1; x *= M_PI; return sin(x)/x; } /* -------------------------------------------------------------------- */ #if 0 static void filt_printfcoeff(const float coeff[32]) { int i; lprintf(3, "filter coefficients:"); for (i = 0; i < 32; i++) { if (!(i & 7)) lprintf(3, "\n "); lprintf(3, "%6.2f", coeff[i]); } lprintf(3, '\n'); } static void filt_printicoeff(const int coeff[32]) { int i; lprintf(3, "filter coefficients:"); for (i = 0; i < 32; i++) { if (!(i & 7)) lprintf(3, "\n "); lprintf(3, "%5i", coeff[i]); } lprintf(3, '\n'); } #endif /* -------------------------------------------------------------------- */ static void filt_genideal(float coeff[32]) { int i; for (i = 0; i < 32; i++) coeff[i] = hamming(i / 31.0) * sinc((i - 15.5) / 4.0); } /* -------------------------------------------------------------------- */ static void filt_rom(const float coeff[32], unsigned rom[16]) { float max = 0.000001, s; int ocoeff[32]; int i, j; /* scale filter values */ for(i = 0; i < 4; i++) { for(s = 0, j = i; j < 32; j += 4) s += fabs(coeff[j]); if (s > max) max = s; } s = 126.0 / max; for(i = 0; i < 32; i++) ocoeff[i] = s * coeff[i]; /* convert to internal ROM representation */ memset(rom, 0, sizeof(rom[0])*16); for (i = 0; i < 8; i++) for (j = 0; j < 16; j++) { if ((1 << i) & ocoeff[j]) rom[i] |= 1 << (((j + 1) & 3) | (j & 12)); if ((1 << i) & ocoeff[j+16]) rom[i+8] |= 1 << j; } } /* ---------------------------------------------------------------------- */ int adapter_start_no_firmware(void) { if (FPGA_CONFIGSIZE != sizeof(epp_firmware) || FPGA_CONFIGSIZE != sizeof(eppchk_firmware) || FPGA_CONFIGSIZE != sizeof(ecp_firmware) || FPGA_CONFIGSIZE != sizeof(eppafsk_firmware) || FPGA_CONFIGSIZE != sizeof(eppsamp_firmware) || FPGA_CONFIGSIZE != sizeof(sppafsk_firmware)) abort(); if (detect_modem()) return -3; return 0; } int adapter_start_eppchk(void) { if (FPGA_CONFIGSIZE != sizeof(epp_firmware) || FPGA_CONFIGSIZE != sizeof(eppchk_firmware) || FPGA_CONFIGSIZE != sizeof(ecp_firmware) || FPGA_CONFIGSIZE != sizeof(eppafsk_firmware) || FPGA_CONFIGSIZE != sizeof(eppsamp_firmware) || FPGA_CONFIGSIZE != sizeof(sppafsk_firmware)) abort(); if (detect_modem()) return -3; if (configure(eppchk_firmware, FPGA_CONFIGSIZE)) { reset_modem(); return -4; } parport_write_control(LPTCTRL_PROGRAM); return 0; } int adapter_start_epp(struct adapter_config *cfg) { unsigned char cfgdata[FPGA_CONFIGSIZE]; float fcoeff[32]; unsigned filtrom[16]; int i; unsigned char null = 0; unsigned divider; if (FPGA_CONFIGSIZE != sizeof(epp_firmware) || FPGA_CONFIGSIZE != sizeof(eppchk_firmware) || FPGA_CONFIGSIZE != sizeof(ecp_firmware) || FPGA_CONFIGSIZE != sizeof(eppafsk_firmware) || FPGA_CONFIGSIZE != sizeof(eppsamp_firmware) || FPGA_CONFIGSIZE != sizeof(sppafsk_firmware)) abort(); if (detect_modem()) return -3; /* calculate the divider */ divider = (cfg->fclk + 8 * cfg->bitrate) / (16 * cfg->bitrate); if (divider < 1) divider = 1; if (divider > 1024) divider = 1024; cfg->bitrate = (cfg->fclk + 8 * divider) / (16 * divider); /* print configuration */ printconfig(cfg); memcpy(cfgdata, epp_firmware, FPGA_CONFIGSIZE); /* patch configuration ROM's */ if (cfg->intclk) writeconfigrom(cfgdata, epp_roms+EPP_ROM_CLKSELROM, 0); writeconfigrom(cfgdata, epp_roms+EPP_ROM_DIVROM0, 1 << ((divider-1) & 0xf)); writeconfigrom(cfgdata, epp_roms+EPP_ROM_DIVROM1, 1 << (((divider-1) >> 4) & 0xf)); writeconfigrom(cfgdata, epp_roms+EPP_ROM_DIVROM2, 0x1000 << (((divider-1) >> 8) & 0x3)); if (!cfg->extstat) { writeconfigrom(cfgdata, epp_roms+EPP_ROM_STIROM, 0); writeconfigrom(cfgdata, epp_roms+EPP_ROM_STOROM, 0); } if (cfg->loopback) { writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMID, 0xf0f0); writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMIC, 0xff00); /* modem output clock */ } else if (cfg->extmodem) { writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMID, 0xcccc); writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMIC, 0x0c0c); /* RxC: rising edge */ writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMOC, 0x3030); /* TxC: falling edge */ writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMDCD, 0x3333); /* DCD: inverted */ /* switch off scrambler and differential */ writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMOE, 0xaaaa); writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMOS, 0xaaaa); writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMIE, 0xaaaa); writeconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMIS, 0xaaaa); } if (!cfg->pttmute) writeconfigrom(cfgdata, epp_roms+EPP_ROM_PTTMUTEROM, 0xffff); if (cfg->filtmode == 1) { filt_rom(filt_comp, filtrom); for (i = 0; i < 16; i++) writeconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_0+16*i, filtrom[i]); } else if (cfg->filtmode == 2) { filt_genideal(fcoeff); filt_rom(fcoeff, filtrom); for (i = 0; i < 16; i++) writeconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_0+16*i, filtrom[i]); } /* print configuration ROM's (mainly a debugging action) */ lprintf(2, "config: coeff: %04x %04x %04x %04x %04x %04x %04x %04x\n" "config: coeff: %04x %04x %04x %04x %04x %04x %04x %04x\n", readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_0), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_1), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_2), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_3), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_4), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_5), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_6), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM0_R_7), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM1_R_0), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM1_R_1), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM1_R_2), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM1_R_3), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM1_R_4), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM1_R_5), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM1_R_6), readconfigrom(cfgdata, epp_roms+EPP_ROM_CROM1_R_7)); lprintf(2, "config: ClkSel: %04x PTT mute: %04x\n", readconfigrom(cfgdata, epp_roms+EPP_ROM_CLKSELROM), readconfigrom(cfgdata, epp_roms+EPP_ROM_PTTMUTEROM)); lprintf(2, "config: Div: %04x %04x %04x\n", readconfigrom(cfgdata, epp_roms+EPP_ROM_DIVROM0), readconfigrom(cfgdata, epp_roms+EPP_ROM_DIVROM1), readconfigrom(cfgdata, epp_roms+EPP_ROM_DIVROM2)); lprintf(2, "config: DCD: %04x\n", readconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMDCD)); lprintf(2, "config: IClk: %04x ID: %04x IE: %04x IS: %04x\n", readconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMIC), readconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMID), readconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMIE), readconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMIS)); lprintf(2, "config: OClk: %04x OE: %04x OS: %04x\n", readconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMOC), readconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMOE), readconfigrom(cfgdata, epp_roms+EPP_ROM_SWROMOS)); lprintf(2, "config: StI: %04x StO: %04x\n", readconfigrom(cfgdata, epp_roms+EPP_ROM_STIROM), readconfigrom(cfgdata, epp_roms+EPP_ROM_STOROM)); /* finally download code to FPGA */ if (configure(cfgdata, FPGA_CONFIGSIZE)) { reset_modem(); return -4; } parport_write_control(LPTCTRL_PROGRAM); if (parport_epp_write_addr(&null, 1) != 1) { /* reset modem */ lprintf(0, "EPP timeout\n"); return -1; } return 0; } int adapter_start_ecp(struct adapter_config *cfg) { unsigned char cfgdata[FPGA_CONFIGSIZE]; float fcoeff[32]; unsigned filtrom[16]; int i; unsigned divider; if (FPGA_CONFIGSIZE != sizeof(epp_firmware) || FPGA_CONFIGSIZE != sizeof(eppchk_firmware) || FPGA_CONFIGSIZE != sizeof(ecp_firmware) || FPGA_CONFIGSIZE != sizeof(eppafsk_firmware) || FPGA_CONFIGSIZE != sizeof(eppsamp_firmware) || FPGA_CONFIGSIZE != sizeof(sppafsk_firmware)) abort(); if (detect_modem()) return -3; /* calculate the divider */ divider = (cfg->fclk + 8 * cfg->bitrate) / (16 * cfg->bitrate); if (divider < 1) divider = 1; if (divider > 1024) divider = 1024; cfg->bitrate = (cfg->fclk + 8 * divider) / (16 * divider); /* print configuration */ printconfig(cfg); memcpy(cfgdata, ecp_firmware, FPGA_CONFIGSIZE); /* patch configuration ROM's */ if (cfg->intclk) writeconfigrom(cfgdata, ecp_roms+ECP_ROM_CLKSELROM, 0); writeconfigrom(cfgdata, ecp_roms+ECP_ROM_DIVROM0, 1 << ((divider-1) & 0xf)); writeconfigrom(cfgdata, ecp_roms+ECP_ROM_DIVROM1, 1 << (((divider-1) >> 4) & 0xf)); writeconfigrom(cfgdata, ecp_roms+ECP_ROM_DIVROM2, 0x1000 << (((divider-1) >> 8) & 0x3)); if (cfg->loopback) { writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMID, 0xf0f0); writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMIC, 0xff00); /* modem output clock */ } else if (cfg->extmodem) { writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMID, 0xcccc); writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMIC, 0x0c0c); /* RxC: rising edge */ writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMOC, 0x3030); /* TxC: falling edge */ writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMDCD, 0x3333); /* DCD: inverted */ /* switch off scrambler and differential */ writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMOE, 0xaaaa); writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMOS, 0xaaaa); writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMIE, 0xaaaa); writeconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMIS, 0xaaaa); } if (!cfg->pttmute) writeconfigrom(cfgdata, ecp_roms+ECP_ROM_PTTMUTEROM, 0xffff); if (cfg->filtmode == 1) { filt_rom(filt_comp, filtrom); for (i = 0; i < 16; i++) writeconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_0+16*i, filtrom[i]); } else if (cfg->filtmode == 2) { filt_genideal(fcoeff); filt_rom(fcoeff, filtrom); for (i = 0; i < 16; i++) writeconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_0+16*i, filtrom[i]); } /* print configuration ROM's (mainly a debugging action) */ lprintf(2, "config: coeff: %04x %04x %04x %04x %04x %04x %04x %04x\n" "config: coeff: %04x %04x %04x %04x %04x %04x %04x %04x\n", readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_0), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_1), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_2), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_3), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_4), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_5), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_6), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM0_R_7), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM1_R_0), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM1_R_1), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM1_R_2), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM1_R_3), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM1_R_4), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM1_R_5), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM1_R_6), readconfigrom(cfgdata, ecp_roms+ECP_ROM_CROM1_R_7)); lprintf(2, "config: ClkSel: %04x PTT mute: %04x\n", readconfigrom(cfgdata, ecp_roms+ECP_ROM_CLKSELROM), readconfigrom(cfgdata, ecp_roms+ECP_ROM_PTTMUTEROM)); lprintf(2, "config: Div: %04x %04x %04x\n", readconfigrom(cfgdata, ecp_roms+ECP_ROM_DIVROM0), readconfigrom(cfgdata, ecp_roms+ECP_ROM_DIVROM1), readconfigrom(cfgdata, ecp_roms+ECP_ROM_DIVROM2)); lprintf(2, "config: DCD: %04x\n", readconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMDCD)); lprintf(2, "config: IClk: %04x ID: %04x IE: %04x IS: %04x\n", readconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMIC), readconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMID), readconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMIE), readconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMIS)); lprintf(2, "config: OClk: %04x OE: %04x OS: %04x\n", readconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMOC), readconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMOE), readconfigrom(cfgdata, ecp_roms+ECP_ROM_SWROMOS)); /* finally download code to FPGA */ if (configure(cfgdata, FPGA_CONFIGSIZE)) { reset_modem(); return -4; } return 0; } int adapter_start_eppafsk(struct adapter_config *cfg) { unsigned char cfgdata[FPGA_CONFIGSIZE]; unsigned char null = 0; unsigned divider; if (FPGA_CONFIGSIZE != sizeof(epp_firmware) || FPGA_CONFIGSIZE != sizeof(eppchk_firmware) || FPGA_CONFIGSIZE != sizeof(ecp_firmware) || FPGA_CONFIGSIZE != sizeof(eppafsk_firmware) || FPGA_CONFIGSIZE != sizeof(eppsamp_firmware) || FPGA_CONFIGSIZE != sizeof(sppafsk_firmware)) abort(); if (detect_modem()) return -3; /* calculate the divider */ divider = (cfg->fclk + 32 * cfg->bitrate) / (64 * cfg->bitrate); if (divider < 1) divider = 1; if (divider > 1024) divider = 1024; cfg->bitrate = (cfg->fclk + 32 * divider) / (64 * divider); /* print configuration */ printconfig(cfg); memcpy(cfgdata, eppafsk_firmware, FPGA_CONFIGSIZE); /* patch configuration ROM's */ if (cfg->intclk) writeconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_CLKSELROM, 0); if (!cfg->pttmute) writeconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_PTTMUTEROM, 0xffff); writeconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_DIVROM0, 1 << ((divider-1) & 0xf)); writeconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_DIVROM1, 1 << (((divider-1) >> 4) & 0xf)); writeconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_DIVROM2, 0x1000 << (((divider-1) >> 8) & 0x3)); /* print configuration ROM's (mainly a debugging action) */ lprintf(2, "config: ClkSel: %04x PTT mute: %04x\n", readconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_CLKSELROM), readconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_PTTMUTEROM)); lprintf(2, "config: Div: %04x %04x %04x\n", readconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_DIVROM0), readconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_DIVROM1), readconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_DIVROM2)); lprintf(2, "config: IE: %04x OE: %04x\n", readconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_SWROMIE), readconfigrom(cfgdata, eppafsk_roms+EPPAFSK_ROM_SWROMOE)); /* finally download code to FPGA */ if (configure(cfgdata, FPGA_CONFIGSIZE)) { reset_modem(); return -4; } parport_write_control(LPTCTRL_PROGRAM); if (parport_epp_write_addr(&null, 1) != 1) { /* reset modem */ lprintf(0, "EPP timeout\n"); return -1; } return 0; } int adapter_start_sppafsk(struct adapter_config *cfg) { unsigned char cfgdata[FPGA_CONFIGSIZE]; unsigned divider; if (FPGA_CONFIGSIZE != sizeof(epp_firmware) || FPGA_CONFIGSIZE != sizeof(eppchk_firmware) || FPGA_CONFIGSIZE != sizeof(ecp_firmware) || FPGA_CONFIGSIZE != sizeof(eppafsk_firmware) || FPGA_CONFIGSIZE != sizeof(eppsamp_firmware) || FPGA_CONFIGSIZE != sizeof(sppafsk_firmware)) abort(); if (detect_modem()) return -3; /* calculate the divider */ divider = (cfg->fclk + 32 * cfg->bitrate) / (64 * cfg->bitrate); if (divider < 1) divider = 1; if (divider > 1024) divider = 1024; cfg->bitrate = (cfg->fclk + 32 * divider) / (64 * divider); /* print configuration */ printconfig(cfg); memcpy(cfgdata, sppafsk_firmware, FPGA_CONFIGSIZE); /* patch configuration ROM's */ if (cfg->intclk) writeconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_CLKSELROM, 0); if (!cfg->pttmute) writeconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_PTTMUTEROM, 0xffff); writeconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_DIVROM0, 1 << ((divider-1) & 0xf)); writeconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_DIVROM1, 1 << (((divider-1) >> 4) & 0xf)); writeconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_DIVROM2, 0x1000 << (((divider-1) >> 8) & 0x3)); /* print configuration ROM's (mainly a debugging action) */ lprintf(2, "config: ClkSel: %04x PTT mute: %04x\n", readconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_CLKSELROM), readconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_PTTMUTEROM)); lprintf(2, "config: Div: %04x %04x %04x\n", readconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_DIVROM0), readconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_DIVROM1), readconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_DIVROM2)); lprintf(2, "config: IE: %04x OE: %04x\n", readconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_SWROMIE), readconfigrom(cfgdata, sppafsk_roms+SPPAFSK_ROM_SWROMOE)); /* finally download code to FPGA */ if (configure(cfgdata, FPGA_CONFIGSIZE)) { reset_modem(); return -4; } parport_write_control(LPTCTRL_PROGRAM); sppafsk_wrcmd(0x00); return 0; } int adapter_start_eppsamp(struct adapter_config *cfg) { unsigned char cfgdata[FPGA_CONFIGSIZE]; int i; unsigned char buf; unsigned divider; if (FPGA_CONFIGSIZE != sizeof(epp_firmware) || FPGA_CONFIGSIZE != sizeof(eppchk_firmware) || FPGA_CONFIGSIZE != sizeof(ecp_firmware) || FPGA_CONFIGSIZE != sizeof(eppafsk_firmware) || FPGA_CONFIGSIZE != sizeof(eppsamp_firmware) || FPGA_CONFIGSIZE != sizeof(sppafsk_firmware)) abort(); if (detect_modem()) return -3; /* calculate the divider */ divider = (cfg->fclk + cfg->bitrate / 2) / cfg->bitrate; if (divider < 1) divider = 1; if (divider > 4096) divider = 4096; cfg->bitrate = (cfg->fclk + divider / 2) / divider; /* print configuration */ printconfig(cfg); memcpy(cfgdata, eppsamp_firmware, FPGA_CONFIGSIZE); /* patch configuration ROM's */ if (cfg->intclk) writeconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_CLKSELROM, 0); writeconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_DIVROM0, 1 << ((divider-1) & 0xf)); writeconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_DIVROM1, 1 << (((divider-1) >> 4) & 0xf)); writeconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_DIVROM2, 1 << (((divider-1) >> 8) & 0xf)); /* calculate the gain */ i = (cfg->gain << 24) / divider; if (i > 65535) i = 65535; if (i < 1) i = 1; writeconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_MULROM, i); /* print configuration ROM's (mainly a debugging action) */ lprintf(2, "config: ClkSel: %04x InputGain: %04x\n", readconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_CLKSELROM), readconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_MULROM)); lprintf(2, "config: Div: %04x %04x %04x\n", readconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_DIVROM0), readconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_DIVROM1), readconfigrom(cfgdata, eppsamp_roms+EPPSAMP_ROM_DIVROM2)); /* finally download code to FPGA */ if (configure(cfgdata, FPGA_CONFIGSIZE)) { reset_modem(); return -4; } parport_write_control(LPTCTRL_PROGRAM); /* set Modem Disconnect Data Output register to 0x1f */ buf = 6; if (parport_epp_write_addr(&buf, 1) != 1) goto epperr; buf = 0x1f; if (parport_epp_write_data(&buf, 1) != 1) goto epperr; /* set Modem Disconnect Tristate register to 0x17 */ buf = 6; if (parport_epp_write_addr(&buf, 1) != 1) goto epperr; buf = 0x17; if (parport_epp_write_data(&buf, 1) != 1) goto epperr; /* reset modem */ buf = 0x1f; if (parport_epp_write_addr(&buf, 1) != 1) goto epperr; return 0; epperr: lprintf(0, "EPP timeout\n"); return -1; } /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/ppdirectinit.c0100644000175100017510000005336407142111470016201 0ustar abaaba/*****************************************************************************/ /* * ppdirectinit.c -- Parport direct access (init routines). * * Copyright (C) 1998-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #if defined(HAVE_SYS_IO_H) #include #elif defined(HAVE_ASM_IO_H) #include #endif #include #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ #ifndef HAVE_IOPL #ifdef HAVE_WINDOWS_H #include extern inline int iopl(unsigned int level) { OSVERSIONINFO info; info.dwOSVersionInfoSize = sizeof(info); if (GetVersionEx(&info) && (info.dwPlatformId == VER_PLATFORM_WIN32s || info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)) return 0; return 1; } #else extern inline int iopl(unsigned int level) { return 0; } #endif #endif /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ extern unsigned int pp_direct_iobase; extern unsigned int pp_direct_flags; extern const struct parport_ops parport_direct_ops, parport_direct_emul_ops; extern int pp_direct_epp_clear_timeout(void); #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ #if 0 #ifndef EPPEMUL static int detect_epp(void) { /* pulse PROGRAM low, reset FPGA just to be safe */ outb(LPTCTRL_ADDRSTB, iobase+LPTREG_CONTROL); usleep(10); outb(LPTCTRL_PROGRAM, iobase+LPTREG_CONTROL); /* start of ordinary test */ if (!epp_clear_timeout()) return -1; outb(inb(iobase + LPTREG_CONTROL) | 0x20, iobase + LPTREG_CONTROL); outb(inb(iobase + LPTREG_CONTROL) | 0x10, iobase + LPTREG_CONTROL); epp_clear_timeout(); inb(iobase + LPTREG_EPPDATA); /* udelay(30); */ if (inb(iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { epp_clear_timeout(); return 0; } /*return -1;*/ lprintf(3, "warning: no EPP timeout\n"); return 0; } #endif /* !EPPEMUL */ static int detect_ecr(void) { unsigned char r, oc, oec; oec = inb(iobase + LPTREG_ECONTROL); oc = inb(iobase + LPTREG_CONTROL); if ((oc & 3) == (oec & 3)) { outb(oc ^ 2, iobase + LPTREG_CONTROL); r = inb(iobase + LPTREG_CONTROL); if ((inb(iobase + LPTREG_ECONTROL) & 2) == (r & 2)) { outb(oc, iobase + LPTREG_CONTROL); return -1; } } if ((oec & 3) != 1) return -1; outb(0x34, iobase + LPTREG_ECONTROL); r = inb(iobase + LPTREG_ECONTROL); outb(oc, iobase + LPTREG_CONTROL); outb(oec, iobase + LPTREG_ECONTROL); return -(r != 0x35); } int detect_port(void) { outb(LPTCTRL_ADDRSTB, iobase+LPTREG_CONTROL); pp_direct_epp_clear_timeout(); /* prevent lockup of some SMSC IC's */ /* this routine is mostly copied from Linux Kernel parport */ outb(0xc, iobase+LPTREG_ECONTROL); outb(0xc, iobase+LPTREG_CONTROL); outb(0xaa, iobase+LPTREG_DATA); if (inb(iobase+LPTREG_DATA) != 0xaa) goto fail_spp; outb(0x55, iobase+LPTREG_DATA); if (inb(iobase+LPTREG_DATA) != 0x55) goto fail_spp; #ifdef EPPEMUL /* tentatively enable PS/2 mode if ECP port */ outb(0x20, iobase + LPTREG_ECONTROL); outb(LPTCTRL_PROGRAM, iobase+LPTREG_CONTROL); if ((inb(iobase+LPTREG_CONTROL) & 0x3f) != LPTCTRL_PROGRAM) goto fail_ps2; outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, iobase+LPTREG_CONTROL); if ((inb(iobase+LPTREG_CONTROL) & 0x3f) != (LPTCTRL_PROGRAM | LPTCTRL_DIRECTION)) goto fail_ps2; return 0; fail_ps2: lprintf(3, "parport (PS/2 bidir) test failed\n"); return -1; #else /* !EPPEMUL */ if (!detect_ecr()) { outb(0x80, iobase + LPTREG_ECONTROL); lprintf(3, "parport SMSC style ECP+EPP detected\n"); return 0; } if (!detect_epp()) return 0; /* goto fail_epp; */ fail_epp: lprintf(3, "parport (EPP) test failed\n"); return -1; #endif /* !EPPEMUL */ fail_spp: lprintf(3, "parport (SPP) test failed\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * ECP routines */ static void ecp_port_cap(void) { static const char *pwordstr[8] = { "2 bytes", "1 byte", "4 bytes", "3?", "4?", "5?", "6?", "7?" }; static const char *irqstr[8] = { "jumpered", "7", "9", "10", "11", "14", "15", "5" }; static const char *dmastr[8] = { "jumpered 8bit", "1", "2", "3", "jumpered 16bit", "5", "6", "7" }; unsigned char cnfga, cnfgb; unsigned int cnt, fwcnt, wthr = ~0, frcnt, rthr = ~0; outb(0x30, iobase + LPTREG_ECONTROL); /* PS/2 mode */ outb(0xf0, iobase + LPTREG_ECONTROL); /* config mode */ cnfga = inb(iobase + LPTREG_CONFIGA); cnfgb = inb(iobase + LPTREG_CONFIGB); outb(cnfgb & 0x7f, iobase + LPTREG_CONFIGB); /* disable compression */ outb(0x30, iobase + LPTREG_ECONTROL); /* PS/2 mode */ outb(0x04, iobase + LPTREG_DCR); /* direction=output */ outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode */ for (cnt = 0; cnt < 1024 && !(inb(iobase + LPTREG_ECONTROL) & 0x02); cnt++) outb(0, iobase + LPTREG_TFIFO); outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode, clear serviceintr */ for (fwcnt = 0; fwcnt < 1024 && !(inb(iobase + LPTREG_ECONTROL) & 0x01); fwcnt++) { inb(iobase + LPTREG_TFIFO); if (inb(iobase + LPTREG_ECONTROL) & 0x04) { wthr = fwcnt; outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode, clear serviceintr */ } } outb(0x24, iobase + LPTREG_DCR); /* direction=input */ outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode */ for (cnt = 0; cnt < 1024 && !(inb(iobase + LPTREG_ECONTROL) & 0x02); cnt++) outb(0, iobase + LPTREG_TFIFO); outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode, clear serviceintr */ for (frcnt = 0; frcnt < 1024 && !(inb(iobase + LPTREG_ECONTROL) & 0x01); frcnt++) { inb(iobase + LPTREG_TFIFO); if (inb(iobase + LPTREG_ECONTROL) & 0x04) { rthr = frcnt; outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode, clear serviceintr */ } } outb(0x30, iobase + LPTREG_ECONTROL); /* PS/2 mode */ outb(0x04, iobase + LPTREG_DCR); /* direction=output */ lprintf(3, "ECP capabilities: %s int, PWord %s, %sextra tx pipe, IRQ %s, DMA %s\n" "Tx: FIFO size %d threshold %d Rx: FIFO size %d threshold %d\n", (cnfga & 0x80) ? "level" : "edge", pwordstr[(cnfga >> 4) & 7], (cnfga & 0x04) ? "no" : "", irqstr[(cnfgb >> 3) & 7], dmastr[cnfgb & 7], fwcnt, wthr, frcnt, rthr); } int detect_port_ecp(void) { epp_clear_timeout(); /* prevent lockup of some SMSC IC's */ /* this routine is mostly copied from Linux Kernel parport */ outb(0xc, iobase+LPTREG_ECONTROL); outb(0xc, iobase+LPTREG_CONTROL); outb(0xaa, iobase+LPTREG_DATA); if (inb(iobase+LPTREG_DATA) != 0xaa) goto fail_spp; outb(0x55, iobase+LPTREG_DATA); if (inb(iobase+LPTREG_DATA) != 0x55) goto fail_spp; /* check for ECP ECR mode */ if (detect_ecr()) goto fail_ecp; ecp_port_cap(); return 0; fail_ecp: lprintf(0, "parport (ECP) test failed\n"); return -1; fail_spp: lprintf(0, "parport (SPP) test failed\n"); return -1; } #endif /* ---------------------------------------------------------------------- */ static int parport_spp(void) { pp_direct_epp_clear_timeout(); /* prevent lockup of some SMSC IC's */ /* this routine is mostly copied from Linux Kernel parport */ outb(0xc, pp_direct_iobase+LPTREG_ECONTROL); outb(0xc, pp_direct_iobase+LPTREG_CONTROL); outb(0xaa, pp_direct_iobase+LPTREG_DATA); if (inb(pp_direct_iobase+LPTREG_DATA) != 0xaa) return 0; outb(0x55, pp_direct_iobase+LPTREG_DATA); if (inb(pp_direct_iobase+LPTREG_DATA) != 0x55) return 0; return PARPORT_MODE_PCSPP; } /* Check for ECP * * Old style XT ports alias io ports every 0x400, hence accessing ECR * on these cards actually accesses the CTR. * * Modern cards don't do this but reading from ECR will return 0xff * regardless of what is written here if the card does NOT support * ECP. * * We will write 0x2c to ECR and 0xcc to CTR since both of these * values are "safe" on the CTR since bits 6-7 of CTR are unused. */ static int parport_ecr(void) { unsigned char r = 0xc; outb(r, pp_direct_iobase + LPTREG_CONTROL); if ((inb(pp_direct_iobase + LPTREG_ECONTROL) & 0x3) == (r & 0x3)) { outb(r ^ 0x2, pp_direct_iobase + LPTREG_CONTROL); /* Toggle bit 1 */ r = inb(pp_direct_iobase + LPTREG_CONTROL); if ((inb(pp_direct_iobase + LPTREG_ECONTROL) & 0x2) == (r & 0x2)) goto no_reg; /* Sure that no ECR register exists */ } if ((inb(pp_direct_iobase + LPTREG_ECONTROL) & 0x3 ) != 0x1) goto no_reg; outb(0x34, pp_direct_iobase + LPTREG_ECONTROL); if (inb(pp_direct_iobase + LPTREG_ECONTROL) != 0x35) goto no_reg; outb(0xc, pp_direct_iobase + LPTREG_CONTROL); /* Go to mode 000 */ outb(inb(pp_direct_iobase + LPTREG_ECONTROL) & ~0xe0, pp_direct_iobase + LPTREG_ECONTROL); return PARPORT_MODE_PCECR; no_reg: outb(0xc, pp_direct_iobase + LPTREG_CONTROL); return 0; } static int parport_ecp(void) { int i; int config; int pword; int fifo_depth, writeIntrThreshold, readIntrThreshold; /* Find out FIFO depth */ outb(0x00, pp_direct_iobase + LPTREG_ECONTROL); /* Reset FIFO */ outb(0xc0, pp_direct_iobase + LPTREG_ECONTROL); /* TEST FIFO */ for (i=0; i < 1024 && !(inb(pp_direct_iobase + LPTREG_ECONTROL) & 0x02); i++) outb(0xaa, pp_direct_iobase + LPTREG_TFIFO); /* * Using LGS chipset it uses ECR register, but * it doesn't support ECP or FIFO MODE */ if (i == 1024) { outb(0x00, pp_direct_iobase + LPTREG_ECONTROL); return 0; } fifo_depth = i; lprintf(3, "ECP: FIFO depth is %d bytes\n", fifo_depth); /* Find out writeIntrThreshold */ outb(inb(pp_direct_iobase + LPTREG_ECONTROL) | (1<<2), pp_direct_iobase + LPTREG_ECONTROL); outb(inb(pp_direct_iobase + LPTREG_ECONTROL) & ~(1<<2) , pp_direct_iobase + LPTREG_ECONTROL); for (i = 1; i <= fifo_depth; i++) { inb(pp_direct_iobase + LPTREG_TFIFO); usleep(50); if (inb(pp_direct_iobase + LPTREG_ECONTROL) & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: writeIntrThreshold is %d\n", i); else /* Number of bytes we know we can write if we get an interrupt. */ i = 0; writeIntrThreshold = i; /* Find out readIntrThreshold */ outb((inb(pp_direct_iobase + LPTREG_ECONTROL) & ~0xe0) | 0x20, pp_direct_iobase + LPTREG_ECONTROL); /* Reset FIFO, PS2 */ outb(inb(pp_direct_iobase + LPTREG_CONTROL) | PARPORT_CONTROL_DIRECTION, pp_direct_iobase + LPTREG_CONTROL); outb((inb(pp_direct_iobase + LPTREG_ECONTROL) & ~0xe0) | 0xc0, pp_direct_iobase + LPTREG_ECONTROL); /* Test FIFO */ outb(inb(pp_direct_iobase + LPTREG_ECONTROL) | (1<<2), pp_direct_iobase + LPTREG_ECONTROL); outb(inb(pp_direct_iobase + LPTREG_ECONTROL) & ~(1<<2) , pp_direct_iobase + LPTREG_ECONTROL); for (i = 1; i <= fifo_depth; i++) { outb(0xaa, pp_direct_iobase + LPTREG_TFIFO); if (inb(pp_direct_iobase + LPTREG_ECONTROL) & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: readIntrThreshold is %d\n", i); else /* Number of bytes we can read if we get an interrupt. */ i = 0; readIntrThreshold = i; outb(0x00, pp_direct_iobase + LPTREG_ECONTROL); /* Reset FIFO */ outb(0xf4, pp_direct_iobase + LPTREG_ECONTROL); /* Configuration mode */ config = inb(pp_direct_iobase + LPTREG_CONFIGA); pword = (config >> 4) & 0x7; switch (pword) { case 0: pword = 2; lprintf(0, "ECP: Unsupported pword size! (2)\n"); break; case 2: pword = 4; lprintf(0, "ECP: Unsupported pword size! (4)\n"); break; default: lprintf(0, "ECP: Unknown implementation ID (%d)\n", pword); /* Assume 1 */ case 1: pword = 1; } lprintf(3, "ECP: PWord is %d bits\n", 8 * pword); config = inb(pp_direct_iobase + LPTREG_CONFIGB); lprintf(3, "ECP: Interrupts are ISA-%s\n", config & 0x80 ? "Level" : "Pulses"); if (!(config & 0x40)) lprintf(3, "ECP: IRQ conflict!\n"); /* Go back to mode 000 */ outb(inb(pp_direct_iobase + LPTREG_ECONTROL) & ~0xe0, pp_direct_iobase + LPTREG_ECONTROL); return PARPORT_MODE_PCECP; } /* EPP mode detection */ static int parport_epp(void) { /* If EPP timeout bit clear then EPP available */ if (!pp_direct_epp_clear_timeout()) return 0; /* No way to clear timeout */ /* * Theory: * Write two values to the EPP address register and * read them back. When the transfer times out, the state of * the EPP register is undefined in some cases (EPP 1.9?) but * in others (EPP 1.7, ECPEPP?) it is possible to read back * its value. */ pp_direct_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ outb(0x55, pp_direct_iobase + LPTREG_EPPADDR); pp_direct_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (inb(pp_direct_iobase + LPTREG_EPPADDR) == 0x55) { outb(0xaa, pp_direct_iobase + LPTREG_EPPADDR); pp_direct_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (inb(pp_direct_iobase + LPTREG_EPPADDR) == 0xaa) { pp_direct_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } } /* * Theory: * Bit 0 of STR is the EPP timeout bit, this bit is 0 * when EPP is possible and is set high when an EPP timeout * occurs (EPP uses the HALT line to stop the CPU while it does * the byte transfer, an EPP timeout occurs if the attached * device fails to respond after 10 micro seconds). * * This bit is cleared by either reading it (National Semi) * or writing a 1 to the bit (SMC, UMC, WinBond), others ??? * This bit is always high in non EPP modes. */ outb(inb(pp_direct_iobase + LPTREG_CONTROL) | 0x20, pp_direct_iobase + LPTREG_CONTROL); outb(inb(pp_direct_iobase + LPTREG_CONTROL) | 0x10, pp_direct_iobase + LPTREG_CONTROL); pp_direct_epp_clear_timeout(); inb(pp_direct_iobase + LPTREG_EPPDATA); usleep(30); /* Wait for possible EPP timeout */ if (inb(pp_direct_iobase + LPTREG_STATUS) & 0x01) { pp_direct_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } return 0; } static int parport_ecpepp(void) { int mode; unsigned char oecr; oecr = inb(pp_direct_iobase + LPTREG_ECONTROL); /* Search for SMC style EPP+ECP mode */ outb(0x80, pp_direct_iobase + LPTREG_ECONTROL); mode = parport_epp(); outb(oecr, pp_direct_iobase + LPTREG_ECONTROL); return mode ? PARPORT_MODE_PCECPEPP : 0; } /* Detect PS/2 support. * * Bit 5 (0x20) sets the PS/2 data direction; setting this high * allows us to read data from the data lines. In theory we would get back * 0xff but any peripheral attached to the port may drag some or all of the * lines down to zero. So if we get back anything that isn't the contents * of the data register we deem PS/2 support to be present. * * Some SPP ports have "half PS/2" ability - you can't turn off the line * drivers, but an external peripheral with sufficiently beefy drivers of * its own can overpower them and assert its own levels onto the bus, from * where they can then be read back as normal. Ports with this property * and the right type of device attached are likely to fail the SPP test, * (as they will appear to have stuck bits) and so the fact that they might * be misdetected here is rather academic. */ static int parport_ps2(void) { int ok = 0; unsigned char octr = inb(pp_direct_iobase + LPTREG_CONTROL); pp_direct_epp_clear_timeout(); outb(octr | 0x20, pp_direct_iobase + LPTREG_CONTROL); /* try to tri-state the buffer */ outb(0x55, pp_direct_iobase + LPTREG_DATA); if (inb(pp_direct_iobase + LPTREG_DATA) != 0x55) ok++; outb(0xaa, pp_direct_iobase + LPTREG_DATA); if (inb(pp_direct_iobase + LPTREG_DATA) != 0xaa) ok++; outb(octr, pp_direct_iobase); /* cancel input mode */ return ok ? PARPORT_MODE_PCPS2 : 0; } static int parport_ecpps2(void) { int mode; unsigned char oecr; oecr = inb(pp_direct_iobase + LPTREG_ECONTROL); outb(0x20, pp_direct_iobase + LPTREG_ECONTROL); mode = parport_ps2(); outb(oecr, pp_direct_iobase + LPTREG_ECONTROL); return mode ? PARPORT_MODE_PCECPPS2 : 0; } /* ---------------------------------------------------------------------- */ int parport_init_direct_flags(unsigned io, unsigned int flags) { pp_direct_flags = FLAGS_PCSPP; pp_direct_iobase = io; if (iopl(3)) { lprintf(0, "Cannot get direct IO port access (iopl: %s)\n", strerror(errno)); return -1; } if (!parport_spp()) { lprintf(0, "No parport present at 0x%x\n", pp_direct_iobase); return -1; } if (parport_ecr()) { pp_direct_flags |= FLAGS_PCECR; pp_direct_flags |= parport_ecp(); pp_direct_flags |= parport_ecpps2(); pp_direct_flags |= parport_ecpepp(); if ((flags & PPFLAG_FORCEHWEPP) && (pp_direct_flags & (FLAGS_PCPS2|FLAGS_PCECPPS2)) && !(pp_direct_flags & (FLAGS_PCEPP|FLAGS_PCECPEPP))) pp_direct_flags |= FLAGS_PCECPEPP; else flags &= ~PPFLAG_FORCEHWEPP; } else { pp_direct_flags |= parport_ps2(); pp_direct_flags |= parport_epp(); if ((flags & PPFLAG_FORCEHWEPP) && (pp_direct_flags & (FLAGS_PCPS2|FLAGS_PCECPPS2)) && !(pp_direct_flags & (FLAGS_PCEPP|FLAGS_PCECPEPP))) pp_direct_flags |= FLAGS_PCEPP; else flags &= ~PPFLAG_FORCEHWEPP; } lprintf(0, "Parport 0x%x capabilities: SPP%s%s%s%s%s%s\n", pp_direct_iobase, (pp_direct_flags & FLAGS_PCPS2) ? ", PS2" : "", (pp_direct_flags & FLAGS_PCEPP) ? ((flags & PPFLAG_FORCEHWEPP) ? ", EPP (forced)" : ", EPP") : "", (pp_direct_flags & FLAGS_PCECR) ? ", ECR" : "", (pp_direct_flags & FLAGS_PCECP) ? ", ECP" : "", (pp_direct_flags & FLAGS_PCECPEPP) ? ((flags & PPFLAG_FORCEHWEPP) ? ", ECPEPP (forced)" : ", ECPEPP") : "", (pp_direct_flags & FLAGS_PCECPPS2) ? ", ECPPS2" : ""); if (!(pp_direct_flags & (FLAGS_PCPS2 | FLAGS_PCECPPS2))) { lprintf(0, "Parport 0x%x does not even support PS/2 mode, cannot use it\n", pp_direct_iobase); return -1; } lprintf(0, "Parport 0x%x using direct hardware access\n", pp_direct_iobase); if (pp_direct_flags & FLAGS_PCECR) outb(0x30, pp_direct_iobase + LPTREG_ECONTROL); /* PS/2 mode */ parport_ops = parport_direct_ops; if ((flags & PPFLAG_SWEMULECP) || !(pp_direct_flags & FLAGS_PCECP)) { parport_ops.parport_ecp_write_data = parport_direct_emul_ops.parport_ecp_write_data; parport_ops.parport_ecp_read_data = parport_direct_emul_ops.parport_ecp_read_data; parport_ops.parport_ecp_write_addr = parport_direct_emul_ops.parport_ecp_write_addr; lprintf(0, "Parport 0x%x emulating ECP\n", pp_direct_iobase); } if ((flags & PPFLAG_SWEMULEPP) || !(pp_direct_flags & (FLAGS_PCEPP | FLAGS_PCECPEPP))) { parport_ops.parport_epp_write_data = parport_direct_emul_ops.parport_epp_write_data; parport_ops.parport_epp_read_data = parport_direct_emul_ops.parport_epp_read_data; parport_ops.parport_epp_write_addr = parport_direct_emul_ops.parport_epp_write_addr; parport_ops.parport_epp_read_addr = parport_direct_emul_ops.parport_epp_read_addr; lprintf(0, "Parport 0x%x emulating EPP\n", pp_direct_iobase); } return 0; } int parport_init_direct(unsigned io) { return parport_init_direct_flags(io, 0); } baycomepp-0.10.orig/main/ecp_firmware.h0100644000175100017510000023543207072045775016171 0ustar abaaba/*****************************************************************************/ /* * ecp_firmware.h -- HDLC packet radio modem for EPP using FPGA utility. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ /* automatically generated, do not edit */ #define ECP_FIRMWAREDATE "20000402" /* firmware */ static const unsigned char ecp_firmware[] = { 0xff, 0x04, 0xe8, 0x8c, 0xf9, 0xde, 0xff, 0xde, 0xfd, 0xed, 0x57, 0xdf, 0xde, 0xbd, 0xed, 0x7d, 0xef, 0xfe, 0xfe, 0xee, 0xef, 0xef, 0xfe, 0xfe, 0xfe, 0x9b, 0xff, 0xff, 0xaf, 0xff, 0xfd, 0xdb, 0xff, 0xaf, 0xef, 0x7f, 0xfe, 0xd7, 0xff, 0x7f, 0xfd, 0xff, 0xd7, 0xff, 0x7f, 0xff, 0xe6, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xb9, 0xff, 0xfc, 0xed, 0xcf, 0xff, 0xfe, 0xfc, 0xed, 0xcf, 0x5f, 0xfe, 0xf6, 0xe7, 0x6f, 0x7f, 0xfe, 0xf6, 0xe7, 0xef, 0x6f, 0xde, 0xbf, 0x77, 0x5f, 0x7b, 0xfd, 0xb5, 0x77, 0x5f, 0x7b, 0xd7, 0xbb, 0xaf, 0xbd, 0xfb, 0xda, 0xbb, 0xaf, 0xbd, 0xfb, 0x9b, 0xff, 0x3f, 0xfd, 0xf5, 0xd3, 0x5f, 0x3f, 0xfd, 0xf5, 0xd3, 0x9f, 0xfe, 0x7a, 0xe9, 0xaf, 0x9f, 0xfe, 0xfa, 0xe9, 0xff, 0xc6, 0xff, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0x9e, 0x7f, 0xfe, 0xf9, 0xe7, 0x9d, 0x7f, 0xde, 0xf9, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xff, 0xfe, 0xfb, 0xaf, 0xbf, 0xff, 0xfa, 0xd7, 0xdf, 0x7f, 0xfd, 0xfd, 0xd7, 0xdf, 0x7f, 0xfd, 0x6f, 0xfe, 0xff, 0xba, 0xaf, 0xae, 0xfa, 0xfa, 0xfa, 0xaf, 0xad, 0x7b, 0xdd, 0x57, 0xd7, 0x7f, 0x7d, 0xfd, 0xd7, 0xd7, 0x7f, 0x9b, 0xff, 0xff, 0xee, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7e, 0xff, 0xfd, 0xf7, 0xdf, 0x6f, 0xff, 0xfd, 0xf6, 0xff, 0xc6, 0xff, 0xdd, 0x7f, 0xff, 0x3d, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbd, 0xff, 0xbe, 0xfb, 0xef, 0xbb, 0xff, 0xfe, 0xbd, 0xf9, 0xff, 0x9f, 0x7f, 0xfb, 0xfd, 0xf7, 0x9f, 0x7f, 0xff, 0x99, 0xcf, 0xbf, 0xfd, 0xfc, 0xfb, 0xcf, 0xbe, 0xff, 0xfc, 0x6f, 0xf4, 0xff, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xde, 0xfe, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xff, 0x9b, 0xfb, 0x7f, 0xff, 0xfd, 0xc7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xbf, 0xef, 0xfe, 0xf3, 0xef, 0xbf, 0xff, 0xfe, 0xbb, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xdf, 0xfd, 0xc7, 0xdd, 0x7f, 0xcf, 0xfd, 0xef, 0xbf, 0xfe, 0xfc, 0xf3, 0xcf, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xfc, 0x73, 0xcf, 0x1f, 0xff, 0xbc, 0xf3, 0xcf, 0x7d, 0x96, 0xb8, 0xe7, 0x9f, 0x3f, 0xfe, 0xf9, 0x67, 0xff, 0x6e, 0xde, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xdd, 0xf7, 0xdf, 0xff, 0xfe, 0xbb, 0xef, 0xbf, 0xff, 0xfc, 0xeb, 0xef, 0xbf, 0x9b, 0xdd, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcd, 0x3f, 0xdb, 0xec, 0xe7, 0x9f, 0x7f, 0xde, 0x79, 0xe7, 0x9e, 0x7d, 0xfe, 0xcd, 0x66, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xb7, 0xf9, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xe7, 0x5e, 0xaf, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0x7d, 0xf7, 0xff, 0x6f, 0xfe, 0x9f, 0xfd, 0xd6, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0xdf, 0x7e, 0x7b, 0xad, 0xb7, 0xdf, 0x3e, 0xeb, 0xed, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xfd, 0xfe, 0xfb, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xee, 0xe6, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xe5, 0xff, 0xdb, 0xff, 0xeb, 0xaf, 0xb9, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x6f, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0x9a, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0x5f, 0x7f, 0xff, 0xfd, 0xf7, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x7b, 0xbd, 0xe6, 0xff, 0xd3, 0xfd, 0xff, 0xff, 0xff, 0xcb, 0xff, 0xaf, 0xfc, 0xab, 0xff, 0x5f, 0xfe, 0x7f, 0xe5, 0xfd, 0xdf, 0xdd, 0xbf, 0xf9, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xd7, 0xff, 0xfe, 0xdb, 0xbf, 0xfb, 0xff, 0xf5, 0xff, 0xff, 0xfe, 0xff, 0xf7, 0x7f, 0x6f, 0xf6, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x9b, 0xfd, 0xfd, 0xff, 0xef, 0xbf, 0xfd, 0xfd, 0xff, 0xfd, 0xbf, 0xfd, 0xef, 0xbf, 0xff, 0xef, 0xfb, 0xef, 0xfb, 0x7f, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x7b, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbd, 0xf9, 0xff, 0xfa, 0xff, 0xef, 0xfb, 0xff, 0xe8, 0xbf, 0xaf, 0x7d, 0xfb, 0xef, 0x7f, 0xff, 0xff, 0xf7, 0x7f, 0xff, 0xf7, 0x6f, 0xfe, 0xbf, 0xfe, 0xff, 0xef, 0xff, 0xbe, 0xff, 0xff, 0xdb, 0xf5, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xfd, 0xdd, 0xfe, 0xff, 0xff, 0xf6, 0xff, 0xd6, 0xff, 0xdf, 0x7f, 0xf7, 0x7d, 0xb7, 0xdf, 0x7f, 0xff, 0xff, 0xb7, 0xe6, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x3a, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xbf, 0xef, 0xfb, 0xff, 0xff, 0x7f, 0x5f, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xef, 0xfb, 0xef, 0xbf, 0xff, 0xf6, 0xfb, 0xef, 0xff, 0xff, 0x6e, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0x6f, 0xff, 0xff, 0x7d, 0x73, 0xfd, 0xfe, 0x7b, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x9b, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xbb, 0xff, 0x7b, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xe6, 0xf7, 0xff, 0xff, 0xbf, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0x3f, 0x8f, 0xbf, 0x5f, 0xfe, 0xb9, 0xe7, 0x3c, 0xfb, 0xeb, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xfd, 0xfe, 0xff, 0xf7, 0xff, 0xff, 0x3f, 0xe7, 0xfc, 0xff, 0xfb, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xaf, 0xf5, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xbf, 0xdf, 0x7d, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xf2, 0xff, 0xbf, 0xff, 0xfb, 0xff, 0x6f, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xbf, 0xe6, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xfb, 0xeb, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xb7, 0x69, 0xff, 0x7f, 0xf9, 0xed, 0xfd, 0x5f, 0xfa, 0xfb, 0xff, 0xd7, 0xbd, 0xf6, 0xdf, 0x6b, 0xaf, 0xbd, 0xf6, 0xdf, 0xfe, 0x6f, 0xdc, 0xff, 0xdf, 0x7e, 0xed, 0xbf, 0xbf, 0xff, 0xfe, 0xff, 0x7c, 0xe7, 0xfd, 0x7f, 0xde, 0x79, 0xe7, 0xfd, 0xff, 0x5f, 0x99, 0xfb, 0xf5, 0xaf, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff, 0xf7, 0xde, 0x7b, 0xcd, 0xbc, 0xf7, 0xde, 0x7b, 0xcd, 0xee, 0xc6, 0xfe, 0xff, 0xef, 0x9f, 0xfb, 0xef, 0xab, 0xf7, 0xfe, 0xff, 0x9d, 0x77, 0xde, 0x31, 0xe7, 0x9d, 0x77, 0xde, 0xb1, 0x93, 0xb9, 0xff, 0x3f, 0xfb, 0xeb, 0xff, 0xf7, 0x7a, 0xea, 0xff, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xff, 0x66, 0xec, 0xff, 0x5f, 0x7f, 0xed, 0xff, 0xbf, 0x8f, 0xfa, 0xff, 0x5f, 0x7f, 0xfd, 0xfd, 0xd7, 0x5f, 0x7f, 0xfd, 0xfd, 0xbf, 0x19, 0xf7, 0xfe, 0xff, 0xef, 0xfe, 0xff, 0xf6, 0xdb, 0xff, 0xff, 0xfb, 0xf9, 0xe7, 0xff, 0x7f, 0xfe, 0xf9, 0xe7, 0xdf, 0x76, 0xa6, 0x7d, 0xfd, 0xbf, 0xf2, 0xff, 0x5f, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xad, 0xb9, 0xee, 0xfb, 0xef, 0xaf, 0xff, 0xb6, 0x7b, 0xed, 0xbf, 0xd7, 0x7d, 0xf7, 0xd9, 0x7f, 0xdb, 0x7d, 0xf6, 0xd9, 0xab, 0x6e, 0xee, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0x7f, 0xfe, 0xff, 0xff, 0x9f, 0x7f, 0xfe, 0x3b, 0x9b, 0xf9, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xdf, 0xef, 0xe6, 0xf6, 0xff, 0xff, 0xfd, 0xff, 0x7b, 0xfd, 0xaf, 0xdf, 0xff, 0xf5, 0xd7, 0x7f, 0x7f, 0xfd, 0xf5, 0xdf, 0x5f, 0x7f, 0xbb, 0x61, 0xff, 0xff, 0x9f, 0x7e, 0xff, 0xfa, 0xf7, 0xcb, 0x7d, 0x5f, 0xf1, 0xc5, 0x17, 0x5f, 0x7c, 0xf1, 0xcd, 0x13, 0x7f, 0x6f, 0xfa, 0xff, 0xdf, 0xfa, 0xff, 0xaf, 0xbb, 0xef, 0xfa, 0xff, 0x7f, 0xff, 0xfd, 0xf6, 0xdf, 0x7f, 0xaf, 0xfd, 0xf7, 0xff, 0x9b, 0xfe, 0xff, 0x8f, 0x3e, 0xff, 0xe8, 0xb3, 0x8f, 0x3e, 0xff, 0xf4, 0xc7, 0x1f, 0x7d, 0xf6, 0xd9, 0xc7, 0x1f, 0x7f, 0xfe, 0xe6, 0xff, 0x9f, 0xaf, 0xbf, 0xfe, 0xf7, 0xdf, 0x2f, 0xbf, 0xfc, 0xfd, 0xf7, 0xff, 0x7f, 0xff, 0xfd, 0xd7, 0xff, 0xff, 0xbf, 0xe1, 0xff, 0xff, 0xeb, 0xaf, 0xff, 0xfd, 0xff, 0xcf, 0x2f, 0xff, 0xfd, 0xf7, 0xf7, 0xdf, 0x7f, 0xff, 0xf5, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xef, 0xeb, 0xaf, 0xfe, 0xfd, 0xfa, 0xeb, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xd7, 0xff, 0x1b, 0xf6, 0x7f, 0xff, 0xff, 0xfa, 0xcb, 0x7f, 0xff, 0xfc, 0xf2, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xe6, 0xff, 0xff, 0x3f, 0xfd, 0xff, 0xfe, 0xfb, 0xef, 0xfe, 0xf7, 0xfc, 0x97, 0xde, 0x7f, 0xf9, 0xfd, 0x97, 0xdf, 0xff, 0xbf, 0x39, 0xff, 0x8f, 0xbf, 0xfe, 0x78, 0xab, 0x2e, 0xbe, 0xfe, 0xba, 0x56, 0x5a, 0x6f, 0xb5, 0xd5, 0x56, 0x5b, 0x6d, 0xed, 0x6d, 0x3e, 0xff, 0xfb, 0xef, 0x7f, 0xff, 0xfe, 0xee, 0xe1, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xbf, 0xe7, 0x9b, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xae, 0x6f, 0xbf, 0xff, 0xdf, 0xff, 0xfe, 0x7f, 0xee, 0xbf, 0xff, 0xbf, 0xe6, 0xfd, 0xfd, 0xf7, 0xcf, 0xff, 0xff, 0xfe, 0xe7, 0xff, 0xd7, 0xef, 0xfb, 0xef, 0xfd, 0xff, 0xff, 0x7f, 0xef, 0xbf, 0xbf, 0xf1, 0xff, 0xff, 0xaf, 0xaf, 0xbf, 0xfb, 0xfa, 0xeb, 0x29, 0xff, 0xfd, 0xf9, 0xe7, 0x7f, 0xef, 0xfd, 0xfd, 0xe7, 0xfd, 0x67, 0xfc, 0xff, 0xff, 0xff, 0xeb, 0xbf, 0xff, 0xfa, 0xf7, 0xe7, 0xf7, 0xe7, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xdb, 0xff, 0x7f, 0x98, 0xf7, 0xfc, 0xbf, 0xff, 0xf9, 0xff, 0xac, 0xbf, 0xee, 0xff, 0xd3, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xef, 0xdf, 0x7f, 0xbf, 0xf4, 0xff, 0x7f, 0x4f, 0xf3, 0x7f, 0xf9, 0xff, 0xff, 0xef, 0xfb, 0xdf, 0xff, 0xff, 0xbb, 0x9f, 0xb1, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0xbf, 0xf7, 0xad, 0xff, 0xf7, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x6f, 0xfc, 0xff, 0xff, 0xef, 0xbf, 0xdf, 0xff, 0xef, 0xcf, 0xff, 0x5f, 0x1f, 0xf5, 0xb8, 0xe7, 0x9f, 0x77, 0xfe, 0x79, 0xff, 0x98, 0xff, 0xfe, 0xff, 0x9f, 0xff, 0xf7, 0xfb, 0xfe, 0xf3, 0xdf, 0xff, 0xff, 0xef, 0xfb, 0xce, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0x26, 0xfe, 0xff, 0xbe, 0xff, 0xfd, 0xff, 0xdf, 0xf9, 0xbf, 0xda, 0xff, 0xff, 0xbf, 0xff, 0xbc, 0xfb, 0xef, 0xbf, 0xff, 0xab, 0xf9, 0xff, 0xff, 0xe7, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xde, 0xef, 0xef, 0xbf, 0xbf, 0xfd, 0xff, 0xff, 0xbf, 0xff, 0x6f, 0xf6, 0xff, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0x1b, 0xfe, 0x6c, 0xfe, 0xfe, 0x5f, 0x3a, 0xaf, 0xbd, 0x5e, 0x27, 0x7f, 0xf3, 0xcd, 0x35, 0xd7, 0x7a, 0x6b, 0xe5, 0xf7, 0x3f, 0x66, 0x7f, 0xfa, 0xef, 0xff, 0xff, 0xee, 0xeb, 0xaf, 0xe7, 0xcb, 0xef, 0x7c, 0xd8, 0x4e, 0x9b, 0x6f, 0xb6, 0xff, 0xfa, 0xb7, 0xf9, 0x9f, 0x6e, 0xfb, 0xff, 0xbf, 0x5f, 0xfb, 0xeb, 0x7f, 0xff, 0xbb, 0xf4, 0x9f, 0x7f, 0xfe, 0xfb, 0xe7, 0x94, 0xff, 0x6f, 0xd6, 0xa7, 0x5f, 0xfb, 0xff, 0xef, 0xf7, 0xfe, 0xfa, 0xd7, 0xff, 0x7d, 0xfd, 0xfd, 0x77, 0xff, 0x7d, 0xf7, 0xd5, 0x5f, 0x9b, 0xfb, 0xef, 0xdb, 0x6e, 0x9a, 0x79, 0xab, 0xfd, 0x55, 0xf7, 0xd7, 0xfe, 0xfb, 0xe5, 0xb6, 0xfb, 0x7e, 0xb3, 0xef, 0xed, 0x66, 0xfe, 0xfb, 0xe7, 0xbe, 0xf6, 0xee, 0x6b, 0x36, 0xd7, 0xff, 0xd5, 0x7f, 0xdf, 0x1d, 0x37, 0xfe, 0x77, 0xff, 0xfd, 0xb3, 0xb1, 0xfe, 0xfe, 0xfa, 0xaf, 0xb5, 0xff, 0xfb, 0x5f, 0xfc, 0x73, 0x9d, 0xf5, 0xdf, 0x71, 0xef, 0xf7, 0xd7, 0x56, 0xff, 0x66, 0xee, 0xff, 0xff, 0xfb, 0x6f, 0xeb, 0xbc, 0xfe, 0x6f, 0xff, 0x5c, 0x79, 0xa5, 0x9d, 0x72, 0xf6, 0x7b, 0x6f, 0xb5, 0x3a, 0x9b, 0xf7, 0xff, 0xbb, 0xff, 0x3f, 0xdf, 0xff, 0xdb, 0xbf, 0xff, 0xbb, 0xfe, 0xd2, 0x8b, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xb7, 0xe6, 0xfd, 0xaf, 0xfc, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xfe, 0xf9, 0xcf, 0x3f, 0xeb, 0xcc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xbd, 0x91, 0xff, 0xfb, 0xeb, 0xb5, 0xff, 0xfc, 0x7b, 0x8d, 0x37, 0xfe, 0xe9, 0xe7, 0x9d, 0x7f, 0xfe, 0xf1, 0xc7, 0x1f, 0xef, 0x66, 0xe6, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdf, 0x7f, 0xbf, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x3f, 0x3f, 0x9b, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xfb, 0xef, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xa6, 0xfe, 0x7f, 0xff, 0xf7, 0xf7, 0x47, 0xeb, 0x2d, 0xbe, 0xf8, 0x85, 0x17, 0x5e, 0xfa, 0xe1, 0x8f, 0x3f, 0xfe, 0xf8, 0xab, 0x79, 0xdf, 0xa7, 0xdf, 0xbd, 0xf6, 0xfb, 0x6b, 0x8b, 0x2f, 0x7e, 0xf1, 0xc5, 0x13, 0x6f, 0xfc, 0xf7, 0xdf, 0x7f, 0x7f, 0x6f, 0xfe, 0xb7, 0xce, 0x7f, 0xef, 0xff, 0xff, 0xef, 0x6a, 0xa9, 0x5f, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x9b, 0xff, 0xaf, 0xcf, 0x3f, 0xfb, 0xdc, 0xe3, 0x87, 0x3e, 0x7a, 0x94, 0xe1, 0x86, 0x1f, 0x76, 0xf8, 0xe1, 0x87, 0x1f, 0xfe, 0xe6, 0xff, 0xeb, 0x2f, 0xff, 0xfe, 0xf7, 0xeb, 0xe7, 0xbf, 0xfe, 0xcf, 0x17, 0x5f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xef, 0xfa, 0xeb, 0xbf, 0xff, 0xfd, 0x7b, 0xef, 0xff, 0xdf, 0xbf, 0xf4, 0xd2, 0x6d, 0xaf, 0xdf, 0x7e, 0xfb, 0xeb, 0x6f, 0xfe, 0xff, 0xfb, 0xf2, 0xaf, 0xff, 0xfe, 0xfb, 0xee, 0xab, 0xfd, 0xd5, 0x57, 0xdf, 0x5c, 0xf5, 0xcd, 0x37, 0x5f, 0x7d, 0x1b, 0xfe, 0xff, 0xbf, 0xfc, 0xfb, 0xff, 0xef, 0xf7, 0xfe, 0xff, 0xfd, 0xe3, 0x8f, 0x5f, 0xf6, 0xf8, 0xe5, 0x97, 0x3f, 0x3e, 0xe6, 0xfe, 0xd3, 0xff, 0xbf, 0xfd, 0x5f, 0xdf, 0x6f, 0xfc, 0xff, 0x9e, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xe9, 0xff, 0xae, 0xbf, 0xee, 0xe2, 0x8b, 0x0f, 0xbb, 0xfc, 0xf2, 0xd7, 0x5f, 0x7d, 0xfd, 0xd5, 0xd7, 0x5f, 0x7e, 0xed, 0x6f, 0xfe, 0xff, 0xef, 0xf3, 0xfb, 0x3e, 0xbf, 0xfb, 0xfe, 0xcf, 0x77, 0xfe, 0xd9, 0x77, 0xdf, 0x7f, 0xfa, 0xd9, 0x67, 0xff, 0x1b, 0xff, 0xf7, 0xaf, 0xbe, 0xb7, 0xf9, 0xfb, 0xf3, 0xaf, 0xcb, 0x6d, 0xaf, 0xff, 0x6f, 0xfe, 0xeb, 0xb7, 0xe7, 0x4e, 0x7f, 0xe6, 0x7f, 0xff, 0x7f, 0xff, 0xbf, 0xfb, 0x7d, 0xfb, 0xbd, 0x7d, 0xf7, 0xde, 0x7f, 0xff, 0xfd, 0xd7, 0xdf, 0x7f, 0xff, 0xbf, 0xd9, 0xff, 0xfc, 0xe3, 0xcf, 0xef, 0xdd, 0xff, 0xed, 0xb7, 0x7d, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x7f, 0xfc, 0x67, 0xfe, 0xff, 0xbf, 0xfe, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xda, 0xfe, 0xff, 0xff, 0xfc, 0xef, 0xef, 0xff, 0x7f, 0xff, 0x9a, 0xff, 0x1f, 0xff, 0xcf, 0xf9, 0xff, 0xbf, 0x3b, 0xee, 0xf8, 0xdf, 0xfd, 0xfe, 0xdf, 0x7f, 0xff, 0x7b, 0xff, 0xff, 0xff, 0x66, 0xff, 0xfb, 0xff, 0xbf, 0xee, 0xff, 0xf3, 0x67, 0xaf, 0xf7, 0xed, 0xff, 0xff, 0xf6, 0xfb, 0xef, 0xaf, 0xff, 0xff, 0xb7, 0xf9, 0xdf, 0xeb, 0xff, 0xff, 0xfd, 0xd7, 0x7e, 0x6f, 0xef, 0x95, 0xc9, 0x7f, 0x7f, 0xff, 0xff, 0x2f, 0xbf, 0xff, 0xfb, 0x6e, 0xfe, 0xdf, 0xdf, 0xf6, 0xe3, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfa, 0xc2, 0x8f, 0x37, 0xfe, 0xf8, 0xff, 0x9b, 0xf7, 0xff, 0x9e, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xeb, 0xef, 0xff, 0xff, 0xed, 0xed, 0xee, 0xb7, 0xdf, 0x7e, 0xed, 0xfc, 0xa6, 0xfe, 0x6a, 0xff, 0xff, 0x7e, 0x77, 0xff, 0xbe, 0xff, 0xcf, 0xf7, 0xfc, 0xee, 0xf7, 0xff, 0xfe, 0xff, 0xef, 0xff, 0x9f, 0xf1, 0xff, 0xf3, 0xff, 0x3f, 0xef, 0xb7, 0x5f, 0x47, 0xb7, 0x7d, 0x7c, 0xfe, 0x7d, 0xff, 0xdd, 0xff, 0xd7, 0xfe, 0xff, 0x6b, 0xf6, 0x7f, 0xff, 0xbf, 0xf3, 0xff, 0xfd, 0xdf, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x9b, 0xfe, 0xbc, 0xe4, 0xf7, 0x6f, 0xae, 0xff, 0xfe, 0xff, 0x6f, 0x76, 0x7f, 0x66, 0x27, 0xdf, 0x7a, 0x4b, 0xe5, 0xf7, 0xbf, 0x66, 0x7f, 0xfa, 0xfc, 0xff, 0xcb, 0x7f, 0xfd, 0xef, 0xbf, 0xcb, 0xff, 0xf7, 0xcb, 0xe7, 0x9f, 0x6f, 0xb6, 0xff, 0xfd, 0xb7, 0x49, 0x9f, 0xeb, 0xff, 0x79, 0x97, 0xfa, 0xef, 0xff, 0xf5, 0x7f, 0xf7, 0xf7, 0x37, 0x5f, 0x4c, 0x99, 0xe5, 0xff, 0xeb, 0x6f, 0xd4, 0xa7, 0xff, 0x7f, 0xf6, 0xed, 0x7f, 0xdf, 0x7f, 0xfb, 0xff, 0x7f, 0xff, 0x5d, 0xd6, 0x59, 0x7d, 0xf5, 0xff, 0x5e, 0x99, 0xfb, 0xb7, 0xfd, 0xf7, 0x8f, 0x6c, 0x7f, 0xcd, 0x27, 0xf7, 0xd5, 0x6b, 0x37, 0xef, 0x9f, 0xff, 0x5e, 0xbb, 0x6f, 0xef, 0x06, 0x7e, 0x78, 0xf6, 0xff, 0xf5, 0xdf, 0xdf, 0xf1, 0x9d, 0x3d, 0xfd, 0x77, 0xcb, 0xfd, 0xf7, 0xdf, 0x57, 0xe3, 0xfd, 0x93, 0x99, 0xff, 0xfb, 0xff, 0xfd, 0xb7, 0xfe, 0xd7, 0xff, 0xab, 0x6f, 0xfd, 0xb7, 0x72, 0x5f, 0x7d, 0xf5, 0xd5, 0xfe, 0xfe, 0x66, 0xe4, 0xff, 0xf7, 0x0f, 0x7a, 0xe1, 0xbd, 0xf9, 0xff, 0xcb, 0xdf, 0x7b, 0x9f, 0xbd, 0xd6, 0x5e, 0x7b, 0x6d, 0x1f, 0x3e, 0x18, 0xf6, 0xff, 0xf3, 0xfd, 0x37, 0xff, 0xfc, 0xdb, 0xcf, 0xb7, 0xf9, 0xff, 0xff, 0x6b, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0x77, 0xe6, 0xfd, 0xff, 0x7f, 0xfe, 0xfb, 0xff, 0x1f, 0xfd, 0xe7, 0xfb, 0xdf, 0xfe, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xfb, 0xfc, 0xbd, 0xb9, 0x7e, 0xfb, 0xcf, 0x3f, 0xfe, 0xfe, 0xbb, 0xed, 0x37, 0xfe, 0x7d, 0xf7, 0x1f, 0x7f, 0xbc, 0xf1, 0x46, 0x9f, 0xbf, 0x6e, 0xee, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xec, 0x9b, 0xef, 0xbf, 0x3b, 0x9b, 0xf9, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xf7, 0xff, 0x77, 0xef, 0xe6, 0xf6, 0x7f, 0x2f, 0xf4, 0xf0, 0xda, 0x7f, 0xfd, 0xff, 0xf4, 0xb7, 0xff, 0x4f, 0xf8, 0xeb, 0x87, 0x17, 0xfa, 0x78, 0xbb, 0x79, 0xdf, 0xeb, 0x8b, 0x7f, 0xb6, 0xda, 0xa7, 0xbf, 0xbd, 0xfe, 0xd5, 0xee, 0x17, 0xfb, 0x7d, 0xf3, 0xc4, 0x7f, 0x7f, 0x6f, 0xfa, 0xff, 0xfe, 0xf2, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0xe5, 0xff, 0x79, 0x75, 0xd5, 0xdf, 0xff, 0x9b, 0xfe, 0xbf, 0x8f, 0x3e, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xdc, 0xe5, 0x0f, 0x1d, 0x7e, 0xf0, 0x41, 0x87, 0x5f, 0xfe, 0xe6, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xef, 0xff, 0xfe, 0xf5, 0x97, 0xfb, 0xfc, 0xfb, 0xf7, 0xd7, 0xff, 0xff, 0xbf, 0xe1, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xef, 0x5f, 0xfd, 0xf4, 0xfb, 0xeb, 0x36, 0xdf, 0x74, 0xfb, 0xef, 0x6f, 0xfe, 0xdf, 0xfa, 0xef, 0xbf, 0xbf, 0xfe, 0xfa, 0xef, 0xbf, 0xff, 0x55, 0x79, 0x5f, 0x7d, 0x73, 0xcd, 0x35, 0x5f, 0xfd, 0x1b, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xef, 0xff, 0xff, 0x7f, 0xf9, 0x41, 0x96, 0x3f, 0x7e, 0xf1, 0x45, 0x97, 0x1f, 0xfe, 0xe6, 0xff, 0xcf, 0xfb, 0xf5, 0xbc, 0xf4, 0xdb, 0xef, 0xbf, 0xfd, 0xc4, 0xff, 0xdf, 0xfe, 0xef, 0xdf, 0xb7, 0xff, 0xfb, 0xbf, 0xf9, 0xff, 0x8f, 0xbe, 0xfa, 0x5a, 0xeb, 0xae, 0xb6, 0xfe, 0xf2, 0xd6, 0x5e, 0x6d, 0xfd, 0xd5, 0xc7, 0x5e, 0x7f, 0xe9, 0x6f, 0x36, 0xff, 0xfb, 0xef, 0xcf, 0xfe, 0x9f, 0xfd, 0xbf, 0xc3, 0xff, 0xfd, 0xd9, 0x75, 0x3d, 0x7f, 0x7a, 0xf0, 0xef, 0xff, 0x9b, 0xff, 0xfb, 0xff, 0x7b, 0xe9, 0xfe, 0xdd, 0xde, 0xf7, 0xbe, 0xfe, 0x57, 0xbf, 0xff, 0xfa, 0x2f, 0xb7, 0x6e, 0xff, 0x5f, 0xe6, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xd7, 0x36, 0xef, 0xfb, 0x7a, 0xff, 0xff, 0xf7, 0x9f, 0xff, 0xd6, 0x9f, 0xf1, 0xff, 0xfb, 0xe2, 0x7d, 0xf7, 0xd6, 0xfa, 0x7b, 0xaf, 0x7f, 0xfa, 0xe5, 0x83, 0xef, 0xdb, 0xbf, 0xe1, 0xff, 0xfd, 0x67, 0xfc, 0xef, 0xff, 0xff, 0xff, 0xde, 0xff, 0xee, 0xfb, 0xd7, 0xfb, 0xe5, 0xfc, 0xfb, 0xfe, 0xff, 0xef, 0xfe, 0xff, 0x7f, 0x99, 0xf7, 0xe6, 0xbb, 0xfe, 0xfb, 0xcf, 0x8f, 0xef, 0xf0, 0xfb, 0xdf, 0x3f, 0xff, 0xed, 0xf3, 0xcf, 0x3a, 0xef, 0xdf, 0x7f, 0xc6, 0xef, 0xdb, 0xcd, 0x3f, 0xff, 0xec, 0x7b, 0xcf, 0xbf, 0xf7, 0xfa, 0x97, 0xdf, 0x7f, 0xfb, 0xf5, 0x7f, 0xf8, 0xfe, 0xbd, 0xf1, 0xcd, 0xfe, 0xef, 0xef, 0xb3, 0x7f, 0xfe, 0x7a, 0x3d, 0xdd, 0xcf, 0x9f, 0x9e, 0x7f, 0xd7, 0xef, 0xbe, 0xfb, 0xfe, 0x6f, 0xfc, 0x3f, 0x7c, 0xff, 0xff, 0xff, 0x37, 0xeb, 0xff, 0xe3, 0xf5, 0x6f, 0xd6, 0xf9, 0xbb, 0xe7, 0x67, 0xde, 0xfb, 0xff, 0x9a, 0xff, 0xdf, 0xff, 0xf7, 0xff, 0xfd, 0x7f, 0xff, 0xff, 0xfb, 0xff, 0x6f, 0x7f, 0xbb, 0xff, 0xff, 0xdf, 0xee, 0xfd, 0xef, 0xe6, 0xff, 0xcf, 0xfe, 0xbf, 0x7e, 0xb2, 0xa3, 0xbd, 0xdf, 0xfc, 0xf7, 0x47, 0x69, 0x77, 0xfd, 0xfe, 0xdf, 0xf7, 0xbf, 0xbf, 0xe9, 0xff, 0xf9, 0xff, 0xff, 0xff, 0x7f, 0x7b, 0xab, 0x9f, 0xef, 0xdc, 0xf7, 0xd7, 0x7e, 0xdf, 0xef, 0xb6, 0xff, 0xff, 0x6d, 0xfe, 0x7f, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xee, 0xed, 0x7f, 0xff, 0xfe, 0x1d, 0xef, 0xff, 0x7b, 0xfd, 0xff, 0xff, 0x1b, 0xfe, 0xf9, 0xe7, 0xf1, 0x5b, 0xbe, 0x2f, 0xfe, 0xfc, 0x67, 0x3d, 0x5f, 0x4c, 0x31, 0x9f, 0x7f, 0x59, 0xa9, 0xf7, 0xbf, 0x66, 0xff, 0xff, 0xf9, 0xbd, 0xcf, 0xff, 0xab, 0xaf, 0xff, 0x9d, 0xff, 0xf2, 0xd3, 0xe7, 0xff, 0xef, 0xf2, 0xf8, 0xfe, 0x97, 0xf9, 0x9f, 0xdf, 0xbf, 0xbf, 0xbf, 0x5a, 0x7a, 0xed, 0xb9, 0xf3, 0xb5, 0xc4, 0x17, 0x5f, 0x65, 0x3f, 0xc5, 0x92, 0xff, 0x6f, 0xd6, 0x67, 0xff, 0xff, 0xfb, 0xac, 0x27, 0x9e, 0x7e, 0xfb, 0xd9, 0x4f, 0xb5, 0x75, 0xd6, 0xd9, 0x4f, 0xfd, 0xe5, 0x5e, 0x9b, 0xfb, 0xff, 0x99, 0xfe, 0x7f, 0xed, 0xe6, 0x9f, 0x2e, 0xf6, 0xb5, 0x4f, 0x5f, 0xf5, 0xbc, 0xd7, 0x5e, 0xf9, 0x7f, 0xef, 0x66, 0xfe, 0xbf, 0xa5, 0xfe, 0x6f, 0x7e, 0xe9, 0xa3, 0x9e, 0x3d, 0xed, 0xd1, 0x4d, 0x1f, 0xef, 0xb5, 0x57, 0xeb, 0xfd, 0xb3, 0xb1, 0xff, 0x57, 0xe9, 0xaf, 0xf7, 0xfe, 0xd7, 0x6a, 0xa1, 0x6f, 0x7d, 0xe5, 0x97, 0xd0, 0x7f, 0xff, 0xd5, 0xd2, 0xff, 0x66, 0xee, 0xbf, 0x5b, 0xfa, 0x6b, 0xeb, 0xfd, 0xcf, 0x3a, 0xdb, 0xdf, 0x7e, 0xfd, 0xf5, 0xf2, 0xde, 0x7b, 0x8d, 0xf5, 0xbf, 0x9b, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xf7, 0xbb, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xf9, 0xb2, 0xdf, 0x77, 0xe6, 0xfd, 0x1f, 0xff, 0xff, 0xfb, 0xef, 0x9f, 0xfd, 0xf7, 0xdb, 0xdf, 0x7e, 0xeb, 0xed, 0xff, 0xff, 0x3c, 0x7f, 0xe7, 0xbd, 0xb1, 0x5f, 0x53, 0xed, 0xb7, 0xff, 0x7e, 0xf3, 0xee, 0x36, 0xda, 0xd1, 0xd7, 0x58, 0x67, 0xbf, 0xbd, 0xc6, 0xdb, 0xff, 0x60, 0xe6, 0xdf, 0xff, 0xff, 0xfc, 0xff, 0xef, 0xfb, 0xef, 0xfe, 0xf6, 0xbf, 0xe7, 0x9e, 0xf9, 0xed, 0xbf, 0xcf, 0xbe, 0x3f, 0x9b, 0xfb, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xf7, 0x7f, 0xff, 0xfd, 0xfd, 0xf7, 0xff, 0xef, 0xa6, 0xfe, 0x19, 0xa7, 0xff, 0xf6, 0xdb, 0xbb, 0xaf, 0xff, 0xf4, 0xa7, 0x57, 0x5f, 0xfd, 0xed, 0xb5, 0x17, 0xde, 0xfb, 0xbb, 0x79, 0xff, 0xa7, 0xdb, 0xaf, 0xb2, 0xea, 0xa2, 0xab, 0xbf, 0x7e, 0xb7, 0xd5, 0x56, 0xdf, 0x7d, 0xb5, 0xc5, 0x1e, 0x7f, 0x6f, 0xfe, 0xbf, 0xff, 0x7a, 0xef, 0xbf, 0xd7, 0xda, 0xfa, 0xff, 0xff, 0x7f, 0xd9, 0xe5, 0xdf, 0xdf, 0x7f, 0xf9, 0xf7, 0xff, 0x9a, 0xff, 0x7f, 0x8f, 0x3f, 0xfa, 0xe8, 0xa3, 0x8f, 0x3e, 0xfb, 0xf4, 0x47, 0x17, 0x7d, 0xf6, 0xd9, 0x47, 0x07, 0x5f, 0xbe, 0xe6, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xfb, 0xaf, 0xff, 0xfe, 0xf7, 0xd7, 0x5f, 0xff, 0xfd, 0xf7, 0x97, 0x7f, 0xf7, 0xbf, 0xf9, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfa, 0xef, 0xff, 0xdf, 0xff, 0xf4, 0xd3, 0xcf, 0x3f, 0xff, 0x74, 0xf3, 0xef, 0x6f, 0xfe, 0xff, 0xfb, 0xfa, 0xbf, 0xff, 0xfe, 0xfa, 0xef, 0xbf, 0xff, 0xdd, 0x55, 0xd7, 0x5d, 0xf7, 0xdd, 0x31, 0xdd, 0xfd, 0x9b, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xaf, 0xff, 0xff, 0x7f, 0xf9, 0x41, 0x07, 0x1d, 0x76, 0xf8, 0x41, 0x97, 0x3d, 0xfe, 0x66, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xd3, 0x5f, 0xff, 0xd7, 0xfe, 0xb7, 0xff, 0xfe, 0xfb, 0xef, 0xa7, 0xff, 0xff, 0xbf, 0xe9, 0xbf, 0xaf, 0xbe, 0xfc, 0xe0, 0x6b, 0x2d, 0xbf, 0xfe, 0xe2, 0xd7, 0x5b, 0x7e, 0xfd, 0xf1, 0xd7, 0x5b, 0x7f, 0xf9, 0x69, 0xfe, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0x75, 0x7f, 0xff, 0xff, 0x7b, 0xd9, 0x7d, 0xf3, 0xdf, 0xff, 0xf1, 0x7f, 0xff, 0x1b, 0xff, 0xf7, 0xff, 0xcf, 0xff, 0xdd, 0x57, 0xf7, 0xcf, 0xf7, 0xfd, 0xcf, 0xbe, 0xdb, 0xef, 0xfb, 0x4d, 0xdd, 0xff, 0x7a, 0xe6, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xeb, 0xed, 0xef, 0x7f, 0xdf, 0x7d, 0xff, 0xfb, 0xbf, 0xf9, 0xff, 0xfb, 0xff, 0xad, 0xb7, 0xfe, 0xff, 0xcb, 0x8a, 0xef, 0xb7, 0xf5, 0xdf, 0xf7, 0xfd, 0xbd, 0xd5, 0x97, 0xff, 0x6d, 0xf6, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xbf, 0xf6, 0xf7, 0xf6, 0x5f, 0xfb, 0xff, 0xff, 0xfd, 0x75, 0xdb, 0x6a, 0xff, 0x9b, 0xff, 0xef, 0xfa, 0xef, 0xfe, 0xf9, 0xba, 0xfd, 0x6f, 0xfb, 0x9b, 0x3a, 0x77, 0xdd, 0xf7, 0x96, 0x7f, 0xef, 0xfd, 0xff, 0x66, 0xfd, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xbf, 0xff, 0xbf, 0x47, 0xd1, 0xff, 0x9f, 0x7f, 0xfc, 0xf1, 0xc3, 0x16, 0xff, 0xbf, 0xe9, 0xff, 0xff, 0xfe, 0xff, 0xf7, 0xdf, 0x67, 0xff, 0x6f, 0xfd, 0x2f, 0xbf, 0xdf, 0xef, 0xbb, 0xef, 0xff, 0xfe, 0xff, 0x6b, 0xfe, 0xf7, 0xef, 0xbc, 0xe3, 0x8f, 0x3f, 0xfa, 0x7f, 0xff, 0xfe, 0x7f, 0x7e, 0xfe, 0xff, 0xff, 0xef, 0xfb, 0xc9, 0xff, 0x9b, 0xfb, 0xfe, 0x3e, 0xf7, 0xf7, 0xef, 0x7f, 0xff, 0xf7, 0x7f, 0xff, 0xe5, 0xf6, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xe6, 0xff, 0xff, 0xbe, 0xfb, 0x79, 0xf7, 0xcd, 0xba, 0xdf, 0xee, 0xff, 0xc7, 0x4f, 0xf7, 0xbd, 0xf7, 0xdb, 0x37, 0xbf, 0xbb, 0xf1, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xd9, 0xd7, 0xdf, 0x5d, 0xdd, 0x37, 0xdf, 0x0e, 0x7e, 0x98, 0xf1, 0xc7, 0xff, 0x66, 0xf6, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xfd, 0xfe, 0xf7, 0xfb, 0xfe, 0xef, 0xdf, 0xff, 0xff, 0x9b, 0xfe, 0xff, 0xff, 0x9d, 0xef, 0xbf, 0x7c, 0xbc, 0xfa, 0x6f, 0x75, 0xdf, 0x7d, 0x97, 0xdd, 0x77, 0xdf, 0x7d, 0xff, 0xbf, 0x66, 0xff, 0xff, 0xff, 0xff, 0x9d, 0x77, 0xfe, 0xaf, 0xfe, 0x5b, 0x97, 0x5f, 0x7f, 0xad, 0xf5, 0xd7, 0x5f, 0x7f, 0xfb, 0xb7, 0x49, 0xff, 0xff, 0xff, 0xff, 0xa7, 0xfe, 0x0f, 0x6b, 0xbf, 0xf7, 0xb9, 0xb7, 0x9e, 0x7a, 0xee, 0xb9, 0xa7, 0xde, 0xf2, 0x6f, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xa9, 0xff, 0xdf, 0x3a, 0xfb, 0xd5, 0x2e, 0xbf, 0xfc, 0xb2, 0xcb, 0x2f, 0xbf, 0xfc, 0x5c, 0x99, 0xfb, 0xf5, 0xff, 0xff, 0xdf, 0x7f, 0xaf, 0xaf, 0xfe, 0xf6, 0xdd, 0x6d, 0xb7, 0xf5, 0x76, 0x5b, 0x6d, 0xb1, 0xfd, 0x6e, 0x06, 0xbe, 0xfd, 0xff, 0xff, 0xff, 0xef, 0xab, 0xaf, 0xbe, 0x3d, 0x5d, 0x73, 0xcd, 0x0d, 0xd7, 0x5c, 0x73, 0xcc, 0x8d, 0xb3, 0x99, 0xff, 0xff, 0xff, 0xfc, 0xbf, 0xde, 0xda, 0xfb, 0xaf, 0x6f, 0xff, 0xfd, 0xf7, 0xd9, 0x7f, 0xbf, 0xbd, 0xf2, 0xfa, 0x66, 0xe4, 0xff, 0xff, 0x7f, 0x3d, 0xaf, 0x84, 0xfe, 0xfb, 0xdb, 0x7f, 0xfb, 0xed, 0xb7, 0xda, 0x7e, 0x8b, 0x8d, 0xb7, 0x3d, 0x1b, 0xf5, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xef, 0xb7, 0xf1, 0xde, 0x73, 0xcf, 0x3d, 0xf7, 0xdc, 0x73, 0xcf, 0x57, 0xe6, 0xfd, 0xff, 0xff, 0xff, 0xd9, 0xe7, 0xff, 0xff, 0xd7, 0x9b, 0xdd, 0x77, 0xd9, 0x65, 0x97, 0x5d, 0xf6, 0xd9, 0xe5, 0x9d, 0xa9, 0xfe, 0xfb, 0xef, 0x3f, 0xd3, 0xfc, 0x7b, 0xed, 0x33, 0x7e, 0xfd, 0xf5, 0xd7, 0x5f, 0x7b, 0xfd, 0xf5, 0xd7, 0xff, 0x66, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xff, 0xdf, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0x3b, 0x9b, 0xf9, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xef, 0xff, 0xff, 0xf7, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xdf, 0x7e, 0x7b, 0xef, 0xe6, 0xf6, 0xff, 0xbf, 0xbf, 0xf0, 0xc3, 0xfb, 0xbf, 0xbd, 0xf4, 0xbf, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xce, 0xfb, 0xbb, 0x79, 0xff, 0x7f, 0xcf, 0x2f, 0xbe, 0xf9, 0xf6, 0xab, 0xbf, 0xde, 0xd3, 0x4d, 0x37, 0xcd, 0x74, 0xd3, 0xcc, 0x33, 0x7d, 0x6f, 0xfa, 0xff, 0xff, 0xfb, 0xff, 0xbd, 0xbf, 0xff, 0x7f, 0xef, 0xff, 0xbf, 0xfd, 0xf7, 0xdb, 0x6f, 0xe7, 0xbd, 0xf7, 0xdf, 0x9b, 0xfe, 0xff, 0xcb, 0x0e, 0x77, 0xd8, 0xe2, 0xcf, 0x3e, 0xff, 0xfc, 0x61, 0x87, 0x1d, 0x76, 0xd8, 0x65, 0x87, 0x5d, 0xfe, 0xe6, 0xff, 0xff, 0x37, 0x9f, 0x5c, 0xa3, 0xdb, 0xbf, 0xff, 0x7f, 0xf5, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xbd, 0xe1, 0xff, 0xff, 0xcc, 0xa3, 0x9f, 0xbf, 0xf6, 0xea, 0xff, 0x5f, 0x3d, 0xf6, 0xd8, 0x65, 0x8f, 0x7d, 0xf6, 0xd9, 0xe7, 0x6f, 0xfe, 0xff, 0xaf, 0x3b, 0x9e, 0xbf, 0xae, 0xbf, 0xef, 0xbf, 0x5f, 0x55, 0x57, 0xdd, 0x74, 0xd5, 0x55, 0x17, 0x5d, 0xfd, 0x9b, 0xff, 0xff, 0xf3, 0xdc, 0x7f, 0xfb, 0x6f, 0xfb, 0xfe, 0x7f, 0xd3, 0xdb, 0x6f, 0xdf, 0xfd, 0xf6, 0xd9, 0x67, 0x9f, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xef, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xfe, 0xda, 0xeb, 0x2f, 0x9d, 0xde, 0xda, 0xd7, 0x5e, 0x7b, 0xfd, 0xd5, 0xd7, 0x5f, 0x7d, 0xfd, 0x6f, 0x3e, 0xef, 0xef, 0xff, 0xcf, 0xfe, 0xff, 0xff, 0xeb, 0xee, 0xfc, 0xf6, 0xdd, 0xef, 0xda, 0x7e, 0xde, 0xd9, 0xff, 0xfe, 0x9b, 0xf9, 0xfe, 0xeb, 0x6f, 0xbd, 0xfe, 0x7c, 0xef, 0xb7, 0xff, 0xf7, 0xff, 0x5b, 0xff, 0xff, 0xcf, 0x2d, 0xf7, 0xff, 0x7e, 0xe6, 0xfd, 0x7f, 0xff, 0x5f, 0xff, 0xbf, 0xff, 0x3e, 0xde, 0x7e, 0xbf, 0xe9, 0xff, 0xfd, 0xd6, 0xbe, 0xff, 0xfe, 0xfd, 0x9f, 0x31, 0x7f, 0xff, 0x7f, 0x7f, 0xe6, 0xff, 0xff, 0xff, 0xcf, 0x7d, 0xb1, 0xf5, 0xe7, 0x5e, 0x67, 0xb9, 0xf4, 0xa5, 0xff, 0x65, 0xfc, 0xff, 0xbf, 0xff, 0xbf, 0xfe, 0xeb, 0xbf, 0xff, 0x7f, 0xfb, 0xde, 0xeb, 0xfe, 0xbd, 0xff, 0xfe, 0xdb, 0x5e, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xdb, 0xdf, 0xf9, 0xd5, 0x4d, 0xbf, 0xcd, 0x74, 0xf3, 0xc5, 0xbf, 0x7d, 0x5f, 0x86, 0xdf, 0xdf, 0xfb, 0xf6, 0xff, 0xdf, 0xd3, 0x7e, 0xbf, 0xfc, 0xe5, 0x96, 0x5f, 0x7f, 0xf9, 0xff, 0xff, 0x5d, 0xef, 0xaf, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xfe, 0xfd, 0xb7, 0xeb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xff, 0xbf, 0xfd, 0x6f, 0xf4, 0x3f, 0xef, 0xf8, 0xf3, 0xff, 0xfe, 0xff, 0xfc, 0xf7, 0x9f, 0x25, 0xde, 0x98, 0x61, 0xce, 0xbc, 0xf6, 0x79, 0xff, 0x9b, 0xff, 0x6f, 0xff, 0xfa, 0x76, 0xff, 0xfa, 0xde, 0xee, 0xdb, 0xb5, 0xdf, 0x6a, 0xbb, 0xed, 0xf6, 0xbf, 0x1f, 0xf6, 0xee, 0xe6, 0xbe, 0xde, 0xfc, 0xbf, 0x7c, 0x77, 0xeb, 0xdf, 0xff, 0xd7, 0xf7, 0xdb, 0x6f, 0xbf, 0xfd, 0xbf, 0xff, 0x7f, 0xff, 0xbf, 0xb9, 0xff, 0x7f, 0xff, 0xaf, 0xff, 0xf7, 0xc7, 0x7f, 0xff, 0x7b, 0xfd, 0xd5, 0xd7, 0x5b, 0xff, 0x7b, 0x9f, 0xd5, 0xfe, 0x6d, 0xfa, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xdd, 0x7f, 0xff, 0xfd, 0xf7, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0x1b, 0xfe, 0xfc, 0xfe, 0xfb, 0x7b, 0xfe, 0xef, 0xbd, 0xf3, 0x2a, 0x7f, 0xf3, 0xcd, 0x37, 0xdd, 0x5c, 0x6b, 0xc9, 0xf7, 0x3f, 0x66, 0x7f, 0xfe, 0xff, 0xb2, 0x5f, 0xff, 0xfb, 0xe5, 0xbf, 0xcc, 0xe7, 0xbc, 0xf9, 0xce, 0x39, 0xed, 0xb2, 0xd9, 0xff, 0xb7, 0xf9, 0xff, 0xef, 0xff, 0xbf, 0xff, 0xfd, 0x3e, 0xaf, 0xaf, 0x57, 0x9b, 0xef, 0xba, 0xf9, 0xfe, 0xf9, 0xe7, 0x57, 0xff, 0x6f, 0xd6, 0xff, 0xff, 0xff, 0xfb, 0xdf, 0xbe, 0xff, 0xfe, 0xeb, 0x7f, 0xef, 0xb7, 0xf7, 0x7f, 0xdf, 0x7f, 0x3b, 0xff, 0x5f, 0x9b, 0xfb, 0xff, 0xfd, 0xf7, 0xdb, 0x5f, 0xbf, 0x9d, 0x77, 0xfe, 0x7d, 0x42, 0x1b, 0xe7, 0xbc, 0x5a, 0x6a, 0xb3, 0xcf, 0xee, 0x66, 0xfa, 0xff, 0xff, 0xbf, 0x6b, 0xff, 0xbb, 0xeb, 0x8a, 0x3f, 0xd5, 0x52, 0x45, 0x15, 0xf5, 0x5d, 0x73, 0xff, 0xfd, 0xb3, 0xb1, 0xff, 0xef, 0xff, 0xbd, 0xf3, 0xdb, 0xeb, 0xaf, 0xaf, 0x6f, 0xf5, 0xd5, 0x57, 0x5f, 0xfd, 0xb5, 0xf6, 0xd7, 0xf9, 0x66, 0xe2, 0xff, 0x57, 0x4f, 0x38, 0xff, 0xa7, 0x57, 0xde, 0x7b, 0xff, 0xeb, 0xaf, 0xb7, 0xde, 0xca, 0x2b, 0x87, 0x9f, 0xbf, 0x9b, 0xf7, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x78, 0xf3, 0xcd, 0xbf, 0xbb, 0xf0, 0xd2, 0x4b, 0x2f, 0xbb, 0xfe, 0xfa, 0x8b, 0xf7, 0xe6, 0xfd, 0x9f, 0x7f, 0xfe, 0xf9, 0xf7, 0x9f, 0x7f, 0xfe, 0x1b, 0xcf, 0x3e, 0xef, 0xbc, 0xb3, 0xcf, 0x3e, 0xff, 0xfc, 0xbd, 0xb1, 0xff, 0xe3, 0xcf, 0x3f, 0xff, 0xf4, 0xe3, 0x8d, 0xb5, 0xff, 0x91, 0xc6, 0x1b, 0x6f, 0xf4, 0xd1, 0xe7, 0x9a, 0xeb, 0x66, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xfd, 0xf7, 0xbb, 0x6f, 0x3e, 0xff, 0xfe, 0xfb, 0xef, 0xbe, 0x3f, 0x9b, 0xfb, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf7, 0xef, 0xa6, 0xfe, 0x1f, 0x7f, 0xfc, 0x70, 0xe2, 0x4b, 0x27, 0xbc, 0xf6, 0x87, 0x37, 0x7e, 0xfa, 0xe3, 0x84, 0x17, 0x5e, 0xfa, 0xab, 0x79, 0xff, 0xef, 0xbf, 0x35, 0x9e, 0xf8, 0xe2, 0x8b, 0xaf, 0xfa, 0xf1, 0xcd, 0x17, 0x5f, 0x7c, 0xf1, 0xc4, 0x17, 0x7f, 0x6f, 0xfe, 0xff, 0xfd, 0xaf, 0xef, 0xae, 0xfe, 0xfe, 0xf3, 0xeb, 0xfe, 0xff, 0xfd, 0xff, 0xf7, 0xfb, 0x7f, 0xf5, 0xf6, 0xff, 0x9b, 0xff, 0xff, 0xcf, 0x3f, 0xb3, 0xe9, 0xb3, 0x8f, 0x3f, 0xfb, 0xb4, 0xe1, 0x06, 0x1f, 0x64, 0xb8, 0x41, 0x97, 0x1f, 0xfe, 0xe6, 0xff, 0x9f, 0x7f, 0xff, 0xfc, 0xff, 0xfb, 0x6f, 0xbf, 0x7e, 0xef, 0x1b, 0xcf, 0xbf, 0xf3, 0x64, 0xbb, 0xef, 0xbc, 0xbf, 0xf9, 0xff, 0xff, 0xdf, 0x3f, 0xff, 0xff, 0xfe, 0xef, 0xbf, 0x5f, 0x5f, 0x7c, 0xf1, 0xc3, 0x17, 0x7d, 0xfe, 0xf9, 0xe5, 0x6f, 0xfe, 0xff, 0xfb, 0xef, 0xaf, 0xfa, 0xfe, 0xfb, 0xe7, 0xab, 0xdf, 0x4c, 0x37, 0x5d, 0x75, 0xf3, 0xcc, 0x53, 0xdd, 0xfc, 0x1b, 0xfe, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdd, 0xf7, 0xbf, 0x7f, 0xff, 0xfb, 0xe7, 0xdd, 0x3f, 0x66, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xda, 0x6f, 0xbf, 0xfd, 0xaa, 0x2f, 0xbf, 0xfa, 0xfa, 0xff, 0xff, 0xbf, 0xfe, 0xbf, 0xf9, 0xff, 0xaf, 0xbe, 0xfa, 0xea, 0xe9, 0xaf, 0xbf, 0xd8, 0xe2, 0x97, 0x5f, 0x7f, 0xfd, 0xd1, 0x57, 0x1f, 0x7e, 0xcd, 0x6f, 0xfa, 0xdf, 0xfb, 0xff, 0xbf, 0x3a, 0x3f, 0xe8, 0xe4, 0xfb, 0x7e, 0xfe, 0xdb, 0x37, 0x9f, 0xf7, 0xfe, 0xf9, 0x66, 0xff, 0x1b, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xf7, 0xed, 0x5f, 0x7f, 0xff, 0xdf, 0xbb, 0xb7, 0x77, 0xcd, 0xef, 0xcf, 0xeb, 0xf8, 0x7f, 0xa6, 0xff, 0x5f, 0xff, 0xff, 0x77, 0xfd, 0x6d, 0xf7, 0xff, 0xe9, 0xad, 0xff, 0x6e, 0xe7, 0xd6, 0xbf, 0xef, 0xff, 0xff, 0xbb, 0xf9, 0xf7, 0x77, 0xff, 0xff, 0xbf, 0xfe, 0xf3, 0xdb, 0xad, 0x7f, 0x3c, 0xf1, 0xc7, 0x91, 0xff, 0xf7, 0xf1, 0xc6, 0xff, 0x67, 0xfe, 0xff, 0xaf, 0xff, 0xff, 0x7b, 0xb7, 0xbf, 0xe7, 0xd6, 0xdb, 0x77, 0x3f, 0x7d, 0xfb, 0xf7, 0xdf, 0x7f, 0xbd, 0x7b, 0x9b, 0xfe, 0xff, 0xff, 0xfd, 0xbf, 0x7b, 0x7f, 0xf7, 0xef, 0xbb, 0xcb, 0x3f, 0xf7, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xaf, 0xff, 0xa6, 0xff, 0x3f, 0xff, 0xe9, 0xff, 0x7f, 0xfb, 0x7f, 0x3f, 0xfe, 0xdd, 0xfe, 0xff, 0xfb, 0x7f, 0xef, 0xee, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xb7, 0xfb, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfe, 0x7f, 0xef, 0x6f, 0xfe, 0x7f, 0xff, 0xbc, 0xb7, 0xcf, 0xfa, 0xfb, 0xbe, 0xf7, 0x15, 0xe9, 0xf7, 0xe0, 0xe7, 0xfd, 0x6b, 0xee, 0xf1, 0xfd, 0x9b, 0xfb, 0xdf, 0x3f, 0xbf, 0xfd, 0xb3, 0xff, 0xbf, 0xff, 0xf7, 0xef, 0xf6, 0xff, 0x7b, 0xec, 0xff, 0x5e, 0xff, 0xeb, 0xff, 0xe6, 0x9d, 0xaf, 0xfe, 0xf9, 0xf7, 0xff, 0xef, 0xf6, 0xfa, 0x5f, 0xe7, 0xfb, 0xef, 0xef, 0x35, 0xf5, 0xdf, 0x4f, 0xff, 0x9d, 0xd1, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xfb, 0xd9, 0xbf, 0x77, 0xff, 0x74, 0x77, 0x7f, 0xff, 0x1b, 0xdd, 0x63, 0x57, 0xfb, 0x6f, 0xfe, 0x3f, 0xff, 0xef, 0xff, 0xfd, 0xff, 0xfe, 0xbf, 0xff, 0x7f, 0xbf, 0xfe, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x9b, 0xfe, 0xff, 0xe6, 0xfb, 0xef, 0xaf, 0xb9, 0xd4, 0x9e, 0xee, 0x37, 0xf9, 0xcf, 0x97, 0xff, 0xdf, 0x79, 0xad, 0xf1, 0xbf, 0x66, 0xff, 0xdf, 0x7f, 0xe7, 0x93, 0xee, 0xbf, 0xe5, 0xe7, 0xfa, 0xe7, 0xfa, 0xd9, 0xfe, 0xff, 0xb7, 0xff, 0xd9, 0xff, 0xb7, 0x49, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xfe, 0xdb, 0xcf, 0xef, 0xf3, 0x9f, 0x77, 0xb6, 0xdf, 0xfe, 0xad, 0x96, 0x5f, 0xf9, 0x6f, 0xd4, 0xff, 0xff, 0x3f, 0xeb, 0xef, 0xff, 0xff, 0x2c, 0xe7, 0xfd, 0xe7, 0x9f, 0x7d, 0xb6, 0x7f, 0x4f, 0xff, 0xfd, 0x5e, 0x9b, 0xeb, 0xf5, 0xff, 0xf7, 0xdf, 0x6f, 0xa5, 0xd9, 0x56, 0xde, 0xfc, 0xed, 0xba, 0xe7, 0xbe, 0xdf, 0x7f, 0xbb, 0x7d, 0xeb, 0x06, 0xbe, 0xfd, 0xff, 0xff, 0xfb, 0xee, 0xb9, 0xef, 0xdf, 0xb4, 0xcf, 0xbb, 0xc5, 0x8d, 0xf7, 0xd7, 0x77, 0xc3, 0xad, 0xb3, 0x99, 0xff, 0xff, 0xbf, 0xaf, 0xfe, 0xb2, 0x7a, 0x0f, 0x6b, 0xd5, 0x3b, 0xf5, 0xf6, 0x5f, 0xff, 0xed, 0xd7, 0xdf, 0xff, 0x66, 0xe4, 0xff, 0xf7, 0xdf, 0x6b, 0xef, 0xbd, 0x83, 0x5e, 0x6f, 0xfc, 0x0f, 0x27, 0x9d, 0x56, 0x7a, 0xff, 0xef, 0xfd, 0x3f, 0x1a, 0xf5, 0xfe, 0xf3, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0x2d, 0x3f, 0xfb, 0xff, 0xde, 0x4b, 0xaf, 0xfd, 0xff, 0xf2, 0xff, 0x77, 0xa6, 0x7d, 0xbd, 0x79, 0xfe, 0xf9, 0xe7, 0x9f, 0x79, 0xf4, 0x9d, 0xef, 0xfe, 0xff, 0xac, 0xf3, 0xbf, 0x3f, 0xeb, 0xff, 0xbd, 0xb9, 0xee, 0xfb, 0x8f, 0x3f, 0xfe, 0xf8, 0xf3, 0xcd, 0x33, 0xd7, 0xd9, 0xe6, 0x9b, 0x69, 0xfe, 0xfd, 0x46, 0xdf, 0xff, 0x62, 0xee, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xbf, 0xfd, 0xff, 0xb7, 0xdf, 0xbf, 0xfb, 0xfe, 0xdd, 0xef, 0xff, 0x3b, 0x9b, 0xf9, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xee, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xd7, 0xdf, 0xff, 0xff, 0xff, 0xbf, 0xef, 0xe6, 0xf6, 0x6b, 0x7f, 0xfc, 0xf1, 0xc7, 0x0f, 0x7f, 0xbe, 0xf8, 0xc5, 0x37, 0x7f, 0xfa, 0xa1, 0xf7, 0x3f, 0xde, 0xff, 0xbb, 0x61, 0xff, 0xe7, 0xbf, 0xff, 0xfe, 0xfb, 0xe3, 0x9f, 0xae, 0x5e, 0xff, 0xcf, 0x37, 0xdf, 0xfc, 0xf5, 0xc7, 0xb3, 0x7f, 0x6f, 0xfe, 0xfb, 0xff, 0xff, 0xdf, 0x7f, 0xbf, 0xde, 0xf6, 0xbb, 0x5f, 0x7e, 0xfb, 0xf7, 0x9f, 0x7f, 0x7f, 0xb5, 0xfd, 0xff, 0x9b, 0xff, 0xaf, 0xc3, 0x0d, 0x3f, 0xfc, 0x22, 0xcb, 0x1e, 0xbb, 0xd4, 0xe1, 0x0f, 0x1f, 0x7c, 0xd8, 0xc1, 0x07, 0x3f, 0xfe, 0xe6, 0xff, 0xcb, 0x7f, 0xff, 0xff, 0xff, 0x8f, 0xff, 0x9f, 0xfe, 0xc5, 0xff, 0x7f, 0xff, 0xf9, 0xff, 0xbf, 0xdf, 0xfe, 0xbf, 0xe1, 0x6f, 0xbf, 0xfd, 0xf6, 0xd7, 0xef, 0xfb, 0xff, 0xad, 0x4b, 0xff, 0xf6, 0xf2, 0xed, 0xaf, 0xff, 0x7e, 0xb3, 0xef, 0x6f, 0xfe, 0xdf, 0x99, 0x67, 0xbe, 0xfa, 0xee, 0xab, 0xef, 0xab, 0x5f, 0xc7, 0x77, 0xdf, 0x1c, 0xf5, 0x45, 0x31, 0xfd, 0x7c, 0x1b, 0xfe, 0xaf, 0xcb, 0x2f, 0x7f, 0xfc, 0xfa, 0xeb, 0xdf, 0xb2, 0x95, 0x61, 0x86, 0x5f, 0xfe, 0xf8, 0xe1, 0x17, 0x1b, 0xfe, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, 0xfb, 0x3f, 0xbd, 0xbe, 0xb5, 0x9f, 0x7e, 0xfb, 0xe5, 0x97, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0x2f, 0xbf, 0xf8, 0xfa, 0xeb, 0xad, 0x9e, 0xfa, 0xfa, 0xd7, 0x5f, 0x7c, 0xd1, 0x55, 0xc7, 0x5e, 0x7f, 0xfd, 0x6f, 0x1e, 0xff, 0xec, 0xf3, 0xcf, 0x36, 0xdf, 0xf0, 0x2b, 0xc7, 0xf7, 0x7f, 0x7e, 0x63, 0xd7, 0xfe, 0xff, 0xda, 0x7e, 0xff, 0x9b, 0xeb, 0xaf, 0x5f, 0x7e, 0xbe, 0xfb, 0xef, 0xdf, 0x7b, 0xbe, 0xff, 0xfb, 0xbd, 0xdc, 0xdf, 0xfb, 0xbf, 0xff, 0xfb, 0x6e, 0xe6, 0x7d, 0x7e, 0x77, 0x5f, 0x77, 0xfd, 0x6f, 0xbe, 0x7e, 0xff, 0x8f, 0xbf, 0xe7, 0xfb, 0xea, 0xfe, 0xff, 0xfd, 0xff, 0xbf, 0x31, 0xf7, 0x7b, 0xff, 0xfd, 0xfe, 0xcf, 0xfb, 0xeb, 0xbf, 0xff, 0xbb, 0x97, 0xe6, 0x9f, 0x7e, 0xb1, 0xf5, 0xfe, 0xfd, 0x67, 0xf4, 0x7f, 0xbb, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfa, 0xfa, 0xfa, 0xbf, 0x7f, 0xff, 0xfd, 0x35, 0xdf, 0x7a, 0xff, 0xfe, 0x9b, 0xff, 0xff, 0xfb, 0x7f, 0x7f, 0x5f, 0xef, 0xeb, 0xef, 0x6b, 0xff, 0x5d, 0xfb, 0xdd, 0xd7, 0xff, 0x7d, 0xfe, 0xed, 0xdf, 0x46, 0xef, 0xfd, 0x7f, 0xff, 0xb7, 0x6f, 0xff, 0x7f, 0x37, 0xdf, 0xff, 0x76, 0x5f, 0x5e, 0xed, 0xef, 0xf5, 0xd9, 0xff, 0xbf, 0xf1, 0xe7, 0xff, 0xff, 0xfc, 0xf1, 0xff, 0xff, 0xbe, 0xbf, 0xfb, 0xef, 0xe6, 0xbb, 0xfe, 0xb8, 0xaf, 0xed, 0xb5, 0xef, 0x6b, 0xfc, 0xef, 0xf3, 0xdc, 0xf3, 0xff, 0x15, 0xff, 0xbc, 0xe3, 0x17, 0xe7, 0x9e, 0xfd, 0xe3, 0x1f, 0xf7, 0xff, 0xff, 0xff, 0x9b, 0xfb, 0xff, 0xb7, 0xfd, 0xf6, 0xff, 0x6f, 0xae, 0xfd, 0xfb, 0xef, 0xff, 0x7e, 0xd7, 0x79, 0xee, 0xef, 0xe5, 0xaf, 0xff, 0xe6, 0xfe, 0xdf, 0x7b, 0xfe, 0xfd, 0xab, 0xdf, 0x2e, 0xf9, 0xff, 0xf7, 0xdf, 0x7f, 0x9d, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xa9, 0x3f, 0xff, 0xfe, 0xff, 0xcf, 0xfb, 0xdf, 0xff, 0xf7, 0xe4, 0xef, 0xb6, 0xd3, 0x56, 0x3b, 0xfd, 0xf7, 0xdb, 0xff, 0x6d, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xff, 0x77, 0xff, 0xff, 0xdf, 0x7d, 0xfe, 0xfd, 0xf6, 0xff, 0xff, 0xfe, 0xfb, 0xfb, 0x9a, 0xfb, 0x72, 0xe7, 0xff, 0xd7, 0x9f, 0x79, 0xf9, 0xd7, 0xff, 0xff, 0xfb, 0xfa, 0x7f, 0xff, 0xfe, 0xfe, 0xce, 0x0b, 0x3f, 0xa6, 0xff, 0xbf, 0xff, 0xff, 0xcb, 0xee, 0xbf, 0xe5, 0xe4, 0xf2, 0xdf, 0xdf, 0xd9, 0xe5, 0x3f, 0x8f, 0x7a, 0xff, 0xf9, 0x8f, 0xd9, 0xcf, 0x7f, 0xfe, 0xf9, 0xf1, 0x9f, 0x3f, 0xfb, 0x65, 0xf3, 0xfb, 0x7d, 0x5e, 0xff, 0xcf, 0x9f, 0xf5, 0x57, 0xff, 0x6f, 0xfe, 0xff, 0xfb, 0x7f, 0xa9, 0xe9, 0xfe, 0xfb, 0x66, 0xfe, 0xdc, 0xaf, 0xfd, 0x67, 0xb6, 0x4b, 0x6d, 0xb5, 0xf5, 0xff, 0x1a, 0xf5, 0xff, 0xff, 0xcf, 0x3a, 0xff, 0xff, 0x3f, 0xff, 0x3f, 0xf7, 0xd9, 0xcf, 0x9f, 0x6d, 0xd6, 0xeb, 0xaf, 0xff, 0x57, 0xe6, 0xb6, 0x7d, 0xff, 0xfd, 0xf7, 0xf3, 0x7f, 0xef, 0xfc, 0x66, 0xaf, 0x9f, 0xef, 0x39, 0xef, 0xff, 0xd7, 0x5e, 0xfb, 0xbb, 0x91, 0x6f, 0xff, 0xff, 0xff, 0xfe, 0x5c, 0xff, 0x7b, 0xef, 0xfe, 0xeb, 0xdd, 0x75, 0xc3, 0xfd, 0xf7, 0xbf, 0xfb, 0xea, 0x6c, 0xec, 0xff, 0xdf, 0x3f, 0xab, 0xff, 0xf7, 0xfb, 0x76, 0xe9, 0xdf, 0xfa, 0xbd, 0xfd, 0xf7, 0x5f, 0xff, 0x7f, 0xff, 0xbf, 0x19, 0xfb, 0xff, 0xec, 0xc3, 0xda, 0xdf, 0xf1, 0xbd, 0xcf, 0xca, 0xb7, 0xdf, 0xc6, 0xa5, 0x9d, 0xd6, 0x5f, 0x7b, 0xed, 0x6f, 0xc6, 0xfd, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0xfd, 0x6e, 0xbf, 0xed, 0xd2, 0x4b, 0xfe, 0xff, 0xdd, 0xf7, 0xbd, 0x79, 0xdf, 0xe7, 0x9f, 0x7f, 0xfe, 0xfb, 0xe7, 0xbf, 0x7f, 0xf6, 0x27, 0xce, 0x3f, 0xeb, 0xec, 0xff, 0x7f, 0xfe, 0x79, 0x6f, 0xaa, 0xef, 0xfc, 0xf3, 0x8f, 0x3f, 0xff, 0x78, 0xfb, 0xcd, 0x73, 0xbf, 0xb5, 0x66, 0x9b, 0x76, 0x7f, 0xbd, 0xf4, 0xbf, 0x99, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdb, 0x3b, 0xbf, 0xfd, 0xed, 0xbf, 0xcf, 0xbe, 0xff, 0xdf, 0x3e, 0xfb, 0xee, 0xe6, 0xfe, 0xbf, 0xff, 0xfe, 0xef, 0xef, 0xff, 0xfe, 0xfa, 0xeb, 0xdf, 0xfd, 0xfd, 0xdd, 0xf7, 0xff, 0xb7, 0xdb, 0xde, 0xbb, 0xb9, 0xfd, 0x57, 0x1f, 0x27, 0xfc, 0xf5, 0xc2, 0x2f, 0x2f, 0xfd, 0xa3, 0x87, 0x36, 0x7a, 0xba, 0xfd, 0xb5, 0xd7, 0xfe, 0x6e, 0xde, 0xff, 0xfb, 0xef, 0x8b, 0xff, 0xb6, 0xf8, 0xea, 0x8b, 0xf7, 0x7c, 0xf7, 0xc7, 0x17, 0x7f, 0xfe, 0xf7, 0xdf, 0xdf, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xfb, 0x2f, 0xff, 0xfc, 0xfe, 0xff, 0x7f, 0xfe, 0xdd, 0xff, 0xdf, 0xff, 0xf7, 0xff, 0xff, 0xe6, 0xfd, 0xff, 0x73, 0x8f, 0x3e, 0xff, 0xe8, 0xa3, 0xcf, 0x3e, 0xef, 0xf9, 0x47, 0x96, 0x7f, 0xf6, 0xd1, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xe7, 0xdf, 0x7f, 0xff, 0xf8, 0xf7, 0xcb, 0xbf, 0xff, 0xfd, 0xff, 0xbf, 0x7d, 0xfe, 0xf9, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xfa, 0xfb, 0xff, 0x7f, 0xff, 0xed, 0x95, 0x77, 0x7e, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xf7, 0xfe, 0xfb, 0xe7, 0xbb, 0x7f, 0xbe, 0xf8, 0xef, 0x7f, 0xff, 0x7d, 0xf7, 0xdf, 0xdf, 0x5f, 0x7d, 0xf5, 0xff, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xdf, 0xe7, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xfd, 0xbf, 0xfd, 0xff, 0xdb, 0xfd, 0x7f, 0xfa, 0xa5, 0x37, 0xff, 0xee, 0x7f, 0xed, 0xaf, 0xfb, 0x6f, 0xfe, 0xff, 0xa3, 0xaf, 0xbf, 0xea, 0xea, 0xab, 0x2f, 0xbf, 0xba, 0x55, 0xd3, 0x5d, 0x7f, 0xf5, 0xd5, 0xc7, 0x5f, 0xfb, 0x9b, 0x8f, 0x3d, 0xf6, 0xff, 0xb3, 0x3b, 0x3f, 0x3b, 0x28, 0xe3, 0xff, 0xff, 0x7f, 0xd9, 0xe5, 0x7e, 0x9b, 0xef, 0x9b, 0xff, 0xa6, 0xff, 0xf9, 0xff, 0x6f, 0xec, 0xff, 0x9b, 0xdf, 0xf7, 0xfe, 0xff, 0xff, 0x36, 0x5d, 0xd3, 0xfe, 0xfb, 0xaf, 0xff, 0x9f, 0xf9, 0xf7, 0xfd, 0xbf, 0xf3, 0xff, 0xdb, 0xfd, 0xef, 0xe7, 0xdf, 0xbb, 0xfe, 0xff, 0xae, 0xb7, 0xff, 0xbf, 0xff, 0xff, 0x6b, 0xf8, 0xff, 0xff, 0xff, 0xe3, 0x3d, 0xff, 0xee, 0xf3, 0xef, 0x7f, 0xfe, 0xaf, 0xf9, 0xfe, 0xfd, 0x3e, 0xfc, 0xf5, 0xeb, 0x19, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xef, 0xbf, 0xff, 0x6f, 0xf6, 0xf7, 0xdf, 0xff, 0xff, 0xfd, 0xbf, 0x5f, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xfe, 0xfd, 0x7b, 0xbf, 0xff, 0x3f, 0xff, 0x3d, 0xf7, 0xeb, 0xfe, 0xdb, 0x6f, 0xf7, 0xaf, 0xf1, 0xff, 0xcf, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0x7f, 0xf7, 0xff, 0xff, 0xfe, 0xfb, 0x7f, 0xb3, 0x3d, 0xf3, 0xff, 0x6f, 0xfa, 0xfb, 0x57, 0xdf, 0x7f, 0xff, 0xec, 0xff, 0x7f, 0xff, 0xef, 0xfb, 0xf7, 0xbf, 0xff, 0x7f, 0xff, 0xd9, 0xa7, 0xfe, 0x1b, 0xff, 0xff, 0x3f, 0xbf, 0xf4, 0xf2, 0xf7, 0x3f, 0x77, 0x6c, 0xe5, 0x8b, 0x37, 0xfe, 0xf9, 0xfd, 0xfb, 0xfb, 0xff, 0xff, 0xe6, 0xff, 0xff, 0x6f, 0x37, 0xc7, 0xfa, 0x7f, 0x6f, 0xbf, 0xfd, 0xed, 0xb7, 0x7d, 0x1f, 0xdb, 0x7f, 0xfd, 0xff, 0xff, 0xbf, 0xf9, 0x7f, 0xb3, 0x9f, 0x3f, 0xff, 0xdb, 0x73, 0xef, 0xb6, 0xdb, 0xff, 0xf6, 0x49, 0xff, 0x7b, 0xfd, 0xe5, 0xd2, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xdf, 0xe7, 0xf7, 0xbb, 0xfe, 0xaa, 0x6b, 0x7f, 0xf3, 0xad, 0x5b, 0xff, 0x5d, 0x7a, 0xf9, 0xf5, 0xff, 0x9b, 0xef, 0xef, 0xff, 0xdf, 0xed, 0xfd, 0xef, 0xbf, 0xff, 0xbe, 0x5f, 0x5d, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfd, 0xf7, 0xff, 0x86, 0xff, 0xbf, 0xbf, 0xff, 0xce, 0xef, 0xef, 0xbc, 0xe4, 0x92, 0xd7, 0x74, 0xf9, 0x7d, 0xfb, 0xfd, 0x7f, 0xfe, 0xff, 0x8f, 0xd9, 0xff, 0xf7, 0xfb, 0xef, 0xf3, 0xff, 0xde, 0xdb, 0x6c, 0x65, 0x8b, 0x6d, 0xb6, 0xdf, 0x7f, 0xff, 0xd5, 0xd7, 0xff, 0x6d, 0xfe, 0xff, 0xff, 0xfb, 0x6f, 0xa5, 0xb6, 0xdf, 0x76, 0xdb, 0xdd, 0xee, 0x99, 0xe7, 0xf7, 0xd2, 0x6b, 0xbd, 0xf5, 0xff, 0x9b, 0xf5, 0xff, 0xbf, 0xff, 0x3e, 0xeb, 0xb5, 0xd7, 0x5c, 0x6b, 0x9d, 0x6b, 0x65, 0xf7, 0xfd, 0xf7, 0xeb, 0xaf, 0xff, 0xd7, 0xe6, 0xfe, 0x7f, 0xbf, 0xdd, 0x76, 0xdf, 0x6f, 0xbf, 0xd5, 0x66, 0x37, 0xf3, 0x7e, 0x2b, 0xff, 0x7d, 0xd3, 0x4d, 0xaf, 0xbb, 0x99, 0xff, 0xff, 0xbb, 0xe2, 0xce, 0xfb, 0xee, 0xb9, 0xef, 0x5e, 0xf7, 0xdc, 0x57, 0xdf, 0x7d, 0xf5, 0xff, 0xfb, 0xed, 0x6c, 0xec, 0xff, 0xdf, 0x2b, 0xaf, 0xab, 0xbc, 0x8b, 0x7e, 0xb9, 0xd1, 0xcd, 0xb5, 0xd7, 0xf6, 0xdf, 0xff, 0x7f, 0xff, 0xbe, 0x99, 0xfb, 0xff, 0x84, 0xc7, 0xde, 0x6b, 0xbf, 0xf5, 0xf2, 0x5b, 0xdf, 0x72, 0x5b, 0x2f, 0xfc, 0xf7, 0x5b, 0x7b, 0x2d, 0xee, 0xe6, 0xfd, 0xdf, 0x7f, 0xff, 0x6f, 0xf7, 0xdb, 0x6b, 0xb9, 0xa5, 0x2c, 0xbd, 0xfc, 0xfa, 0xdf, 0xfe, 0xf5, 0xdd, 0xf7, 0xbd, 0x79, 0xff, 0xe7, 0x9f, 0xff, 0xf7, 0xf9, 0xe6, 0x9b, 0x6c, 0x72, 0x93, 0x4d, 0x3e, 0xff, 0x7f, 0xff, 0x5d, 0x76, 0x79, 0x6f, 0xec, 0xff, 0xfc, 0xe3, 0xef, 0x3e, 0xbe, 0xf8, 0xf2, 0x8b, 0x5f, 0x7c, 0xf1, 0xc6, 0xdf, 0x5f, 0x3f, 0xfd, 0xf5, 0xbf, 0x99, 0xf9, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xbf, 0xf7, 0xde, 0xf7, 0xde, 0xb3, 0xef, 0xff, 0x7f, 0xd7, 0x7e, 0xfb, 0xcf, 0xa6, 0xfe, 0xbf, 0xff, 0xef, 0xff, 0xff, 0xfb, 0x6f, 0xbe, 0xfd, 0xed, 0xb7, 0xf7, 0xff, 0xff, 0xff, 0xb7, 0xdf, 0xfe, 0xab, 0xb9, 0xff, 0xd3, 0x1f, 0xbf, 0xf5, 0xf1, 0x47, 0x5f, 0x7d, 0xfc, 0xe3, 0x8f, 0x1f, 0xfa, 0xff, 0xef, 0xb5, 0xd7, 0xfe, 0x6e, 0xd8, 0xff, 0xd8, 0xef, 0xbb, 0xff, 0xf6, 0xf9, 0xe7, 0x9f, 0xfd, 0xec, 0xf3, 0xc7, 0xba, 0xff, 0xed, 0xd7, 0x5f, 0xdf, 0x98, 0xff, 0xbe, 0xff, 0xfd, 0xfb, 0xdf, 0xff, 0xbf, 0x7e, 0xfa, 0x57, 0x4d, 0xed, 0xf5, 0x75, 0xfe, 0xfb, 0xff, 0xdf, 0xff, 0xe6, 0xff, 0xef, 0xf3, 0x8f, 0x3f, 0xff, 0xdc, 0xa2, 0x8f, 0x3c, 0xf5, 0xd1, 0x63, 0x1f, 0x7d, 0xfe, 0xd1, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xe3, 0xdf, 0x6f, 0xff, 0xfd, 0xf2, 0x8b, 0x2f, 0x7e, 0xf9, 0xf5, 0xda, 0xff, 0x7e, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xf8, 0xdf, 0xfe, 0xff, 0xcf, 0xff, 0xbf, 0xbe, 0xfa, 0xeb, 0x5f, 0x7f, 0xfd, 0xff, 0xbf, 0x5f, 0x7f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xbf, 0xfe, 0xf9, 0xee, 0x9f, 0x2f, 0xfa, 0xfb, 0xef, 0x3f, 0xff, 0xfd, 0xf5, 0xf5, 0x57, 0x5f, 0x7d, 0xf5, 0xff, 0xe6, 0xfe, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xeb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf9, 0xf5, 0xff, 0xff, 0xff, 0xb7, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0x97, 0x9f, 0xfa, 0xfb, 0xfd, 0xb7, 0xff, 0x6f, 0xfa, 0xff, 0xeb, 0xaf, 0xbe, 0x7e, 0xf8, 0xcb, 0x2f, 0xbe, 0xfc, 0x55, 0x97, 0x0b, 0x6d, 0xf9, 0xd5, 0xc6, 0x1b, 0xff, 0x9a, 0xff, 0xff, 0xff, 0xf4, 0xef, 0x0f, 0xbf, 0xff, 0xee, 0xb3, 0xbf, 0x7d, 0xf6, 0xb9, 0xff, 0xf7, 0xfb, 0x3e, 0xf7, 0xde, 0xc6, 0xff, 0xfe, 0x97, 0xff, 0xff, 0x7d, 0xff, 0xfb, 0xbb, 0x6f, 0x7b, 0xf7, 0xd5, 0xb5, 0xbb, 0x7f, 0xaf, 0xff, 0xef, 0x9f, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xd3, 0xf5, 0xd7, 0xdd, 0xff, 0xbb, 0xef, 0xfe, 0xfe, 0x7f, 0xff, 0xff, 0xef, 0x6b, 0xfe, 0xd7, 0xff, 0xff, 0xf3, 0xfd, 0xaf, 0xfb, 0xfa, 0xeb, 0x5c, 0xfb, 0xfd, 0xed, 0xff, 0x7f, 0xfc, 0xbd, 0x57, 0xff, 0x9b, 0xfd, 0xff, 0xff, 0xff, 0xaf, 0xfd, 0xbd, 0xff, 0xfe, 0xf9, 0xdf, 0xbf, 0xff, 0xfb, 0xdf, 0xf1, 0xaf, 0xff, 0x7e, 0xff, 0xe6, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf3, 0xcf, 0xef, 0x7a, 0xfe, 0xec, 0xff, 0xff, 0xeb, 0xdf, 0x73, 0x9f, 0x3f, 0xff, 0xbf, 0xf9, 0xff, 0xf7, 0xbf, 0xff, 0xbf, 0xbe, 0xfa, 0xfb, 0x7f, 0x9f, 0xff, 0xef, 0xfe, 0x5f, 0x7c, 0xdf, 0xf1, 0xff, 0xf7, 0x6f, 0xee, 0xff, 0xb7, 0xdf, 0xff, 0x7f, 0xff, 0xed, 0x7e, 0xff, 0xff, 0xf9, 0xf7, 0x7f, 0xfe, 0xdb, 0xf7, 0xff, 0xfe, 0x7e, 0x9b, 0xff, 0xff, 0xfe, 0xef, 0xbf, 0xfe, 0xdf, 0xdf, 0xfb, 0xff, 0xfd, 0xff, 0x76, 0xfe, 0xd1, 0xef, 0x1f, 0x7f, 0xec, 0xff, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xb7, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xfb, 0xb7, 0xbf, 0x7d, 0xf7, 0xbb, 0xd9, 0x7f, 0xef, 0xdf, 0xff, 0xdf, 0xb6, 0x7b, 0x4f, 0x3d, 0xd7, 0xbd, 0xf7, 0xef, 0x7b, 0xff, 0xf5, 0xe7, 0xd7, 0xff, 0x6f, 0xfc, 0xff, 0xfd, 0xff, 0xcf, 0xad, 0xdf, 0xff, 0xf9, 0x67, 0x3e, 0xb3, 0xf4, 0xff, 0x57, 0xb6, 0xff, 0xec, 0xe7, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xef, 0xff, 0xfe, 0xfb, 0xdf, 0xbf, 0xff, 0xdf, 0xfc, 0xff, 0x6f, 0xff, 0xfe, 0xfe, 0xa6, 0x7f, 0xee, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x77, 0xbe, 0xf9, 0xe5, 0x95, 0xd7, 0x7c, 0xd9, 0xfd, 0xad, 0xd9, 0xcf, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xfa, 0xf3, 0xfe, 0xf9, 0x6d, 0x9e, 0xff, 0x6c, 0xfe, 0xff, 0xfe, 0x7f, 0xfa, 0xf9, 0xe7, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xeb, 0x4f, 0x96, 0x6b, 0x2e, 0x8b, 0xef, 0xff, 0x9b, 0xf5, 0xef, 0xff, 0xdf, 0x3b, 0xff, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0x9f, 0x5d, 0x96, 0xd3, 0xfd, 0xf7, 0x57, 0xe6, 0xfe, 0x6d, 0xf6, 0xed, 0x57, 0xf7, 0x7f, 0xbf, 0xfd, 0xf6, 0xb7, 0xff, 0xff, 0xf9, 0xef, 0xbf, 0xf3, 0x5e, 0xaf, 0xbb, 0x99, 0x2f, 0xae, 0xfd, 0xff, 0xd9, 0x6c, 0xef, 0x6f, 0xbf, 0xfd, 0xcf, 0xfe, 0xff, 0xff, 0x7d, 0x35, 0xd4, 0x52, 0xff, 0x6c, 0xec, 0xff, 0x5e, 0x3f, 0x7b, 0xff, 0xff, 0xff, 0xfb, 0xef, 0x7f, 0xfb, 0xff, 0xff, 0xd2, 0x5e, 0x6f, 0xbf, 0xf5, 0xbf, 0x99, 0xfb, 0xef, 0xfc, 0xc3, 0xfb, 0xcf, 0xfc, 0xfe, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xe7, 0x95, 0x5f, 0xd2, 0x59, 0xfd, 0x6f, 0xc6, 0xbd, 0xdd, 0x7f, 0xdb, 0xff, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xed, 0xf2, 0x8b, 0x2f, 0xbd, 0xec, 0xff, 0xbd, 0x59, 0x9f, 0xe7, 0x9f, 0xfd, 0xf7, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x3c, 0xeb, 0xfc, 0xb3, 0xce, 0x7e, 0x7f, 0x6f, 0xec, 0xff, 0xf4, 0xf3, 0xee, 0x3b, 0xd7, 0xfc, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xe6, 0x99, 0x6f, 0xb6, 0x99, 0xf6, 0xbf, 0x99, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xcf, 0xbe, 0xf9, 0xe6, 0xbb, 0xe7, 0xce, 0xe6, 0xfe, 0xbf, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xed, 0xb7, 0xdf, 0x7e, 0xf7, 0xed, 0xbb, 0xb9, 0xff, 0xd7, 0x4b, 0xff, 0xff, 0xfd, 0x6a, 0xff, 0xff, 0xf7, 0xff, 0xc7, 0x3b, 0x5a, 0x28, 0xe3, 0x85, 0xdf, 0xfe, 0x6e, 0xde, 0xff, 0xfb, 0xe2, 0xbf, 0xbf, 0xb7, 0xd8, 0xef, 0xbf, 0xff, 0xfd, 0xf9, 0xcf, 0x13, 0xff, 0x7c, 0xf1, 0xcd, 0xdf, 0x9b, 0xff, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x2f, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xfd, 0xd9, 0xdf, 0x77, 0x7d, 0xaf, 0xfd, 0xf7, 0xe6, 0xff, 0xff, 0xf3, 0xcf, 0x3e, 0xfb, 0xe8, 0xf3, 0xcf, 0x3f, 0xff, 0xf9, 0xc7, 0x9f, 0x7f, 0xfc, 0x91, 0xc7, 0x9f, 0xbf, 0xf9, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xf9, 0xfa, 0xef, 0xbf, 0xff, 0xfd, 0xef, 0x97, 0x7f, 0xff, 0xfb, 0xcf, 0xdf, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xbf, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xff, 0xf5, 0xd7, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0x9b, 0xff, 0xff, 0xfe, 0xfb, 0xeb, 0xfb, 0xaf, 0xfe, 0xfa, 0xeb, 0x5f, 0xff, 0xfe, 0xf1, 0xdf, 0x17, 0xff, 0xfd, 0xf5, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf6, 0xeb, 0xbf, 0xff, 0xfe, 0xf7, 0xbf, 0xdf, 0x7f, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xbd, 0xd9, 0xff, 0xff, 0xbf, 0xff, 0xbf, 0xfc, 0xf2, 0xd3, 0x4f, 0x3f, 0xfa, 0xff, 0xff, 0xbb, 0xfe, 0xba, 0xfd, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xab, 0xaf, 0xbf, 0xfe, 0xea, 0xab, 0xad, 0x17, 0xa4, 0xf1, 0xd3, 0x5e, 0x7f, 0xfd, 0x75, 0x47, 0x5f, 0x1f, 0x9b, 0xcf, 0xff, 0xff, 0xef, 0xef, 0xf7, 0xde, 0xff, 0xef, 0xef, 0x7f, 0xff, 0xfa, 0xb9, 0x67, 0xbf, 0x7e, 0xfe, 0xf9, 0xff, 0xa6, 0xfe, 0xfd, 0xff, 0xef, 0xcf, 0xbf, 0xbd, 0xff, 0xeb, 0xbf, 0xff, 0x76, 0xdb, 0x6e, 0x7d, 0xfb, 0x54, 0xcf, 0xff, 0x9f, 0xb9, 0x7f, 0xdf, 0xfd, 0xf7, 0xdf, 0xff, 0xd7, 0xff, 0xf7, 0xdd, 0xff, 0xbf, 0xef, 0xff, 0xf7, 0xff, 0xbf, 0xdf, 0xff, 0x6f, 0xcc, 0xf7, 0xef, 0xff, 0xff, 0xaf, 0xb7, 0xfc, 0xf3, 0xcf, 0x7d, 0x7b, 0xbc, 0xff, 0xc7, 0x1b, 0x63, 0xad, 0xd7, 0xff, 0x19, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x57, 0xaf, 0x6d, 0xff, 0xfd, 0x6f, 0xdf, 0xbf, 0x7f, 0xfd, 0xf5, 0x5f, 0xdf, 0xfe, 0xdf, 0xe6, 0xff, 0xff, 0xff, 0xfb, 0xf1, 0xbf, 0xe7, 0x9e, 0xf7, 0x7f, 0xf7, 0x3f, 0x6f, 0xff, 0xfc, 0xf7, 0xdd, 0x7d, 0xe9, 0xbf, 0xf1, 0x7f, 0xff, 0xff, 0xff, 0xaf, 0xfd, 0xba, 0xdf, 0x7f, 0x67, 0xba, 0xed, 0xa7, 0xff, 0x5f, 0xf6, 0xfd, 0xe7, 0xfd, 0x6b, 0xec, 0xff, 0xff, 0x9f, 0xff, 0xbf, 0xfd, 0xdf, 0x7f, 0xff, 0xd3, 0x9b, 0xbd, 0xf7, 0xfe, 0x7a, 0xfb, 0xe9, 0xfc, 0xfa, 0x1b, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x67, 0xfc, 0xff, 0xe6, 0xff, 0xdf, 0xff, 0xef, 0x7f, 0xef, 0xbf, 0xde, 0xff, 0xf5, 0xff, 0xfb, 0xff, 0xf7, 0xdf, 0xff, 0xee, 0x7f, 0xfb, 0xbf, 0xa9, 0xff, 0xff, 0xff, 0xaf, 0xff, 0x6d, 0xf7, 0xcf, 0xda, 0xfb, 0xd3, 0xf5, 0xd7, 0x4f, 0x3f, 0x79, 0xf5, 0x97, 0xff, 0x6f, 0xfe, 0xff, 0xf9, 0xf7, 0x4f, 0x7f, 0xfd, 0x73, 0xfb, 0xed, 0xfd, 0xff, 0x7d, 0x77, 0xde, 0x7d, 0x7f, 0xfd, 0xff, 0xff, 0x9b, 0xff, 0xf7, 0xfb, 0xff, 0xdb, 0xff, 0xff, 0xbf, 0xfe, 0xfd, 0xff, 0xbf, 0xff, 0xf5, 0xfb, 0xdf, 0xff, 0xfd, 0xdf, 0xff, 0x86, 0xff, 0xef, 0xfc, 0xff, 0xcb, 0x6a, 0xaa, 0xaf, 0xe7, 0xf2, 0xfd, 0xd2, 0xfe, 0xcf, 0xe7, 0xff, 0x7f, 0xf8, 0xff, 0x8f, 0xd9, 0xff, 0x3e, 0xff, 0xff, 0xbe, 0x9e, 0xea, 0xeb, 0xac, 0x7f, 0x3f, 0xb7, 0xd7, 0x4b, 0x7f, 0xfd, 0xe5, 0xf7, 0xff, 0x6d, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xaf, 0xa6, 0x9e, 0xfa, 0xab, 0xdf, 0x7a, 0xbd, 0xf5, 0x56, 0x5b, 0x6f, 0x9d, 0xf7, 0xff, 0x9b, 0xf5, 0xef, 0xff, 0xff, 0x7f, 0xeb, 0xac, 0xbf, 0x9e, 0xfa, 0x67, 0x53, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0x67, 0xfd, 0xd7, 0xe6, 0xfe, 0x6f, 0xf6, 0xfd, 0xbf, 0x9a, 0x69, 0xa5, 0x99, 0x76, 0xbf, 0xf7, 0x4a, 0x2b, 0xfd, 0x35, 0xd3, 0x7e, 0xab, 0xbb, 0x99, 0xff, 0x6e, 0xfd, 0xff, 0xbf, 0x7a, 0xaa, 0xa9, 0xa6, 0xca, 0xef, 0x57, 0xfb, 0xea, 0xbf, 0xef, 0x3e, 0x73, 0xed, 0x6c, 0xec, 0xff, 0x56, 0x3f, 0xff, 0xaf, 0xa7, 0xfa, 0x2e, 0xeb, 0xf5, 0x2e, 0xf5, 0xff, 0xfe, 0xf7, 0x8f, 0xff, 0xd7, 0xbe, 0x99, 0xf9, 0xef, 0xfc, 0xc3, 0xff, 0x2b, 0xa9, 0xfd, 0xf6, 0x0a, 0xff, 0x4b, 0x7f, 0x2d, 0xb4, 0xd7, 0x58, 0x7b, 0x2f, 0xef, 0xa6, 0xfd, 0xdf, 0x7f, 0xff, 0xcf, 0xf7, 0xde, 0x76, 0xf3, 0xed, 0x7e, 0xff, 0xdf, 0x77, 0xdf, 0x7d, 0xff, 0xfd, 0xc2, 0xbd, 0x79, 0xff, 0xe7, 0x9f, 0xff, 0xf7, 0xf9, 0x67, 0x9e, 0x7d, 0xc6, 0xbb, 0xfc, 0xf7, 0xd9, 0x65, 0x9f, 0x7d, 0x3e, 0x73, 0x6b, 0xec, 0xff, 0xfc, 0x73, 0xed, 0x33, 0xdd, 0xf8, 0xc3, 0x4c, 0x77, 0x76, 0xfd, 0xf4, 0xd3, 0x4f, 0x3f, 0xbd, 0xc6, 0xbf, 0x99, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf3, 0xdf, 0xbf, 0xff, 0xfc, 0xff, 0x77, 0x7b, 0x6d, 0xb3, 0xc7, 0xbe, 0xef, 0xcf, 0xe6, 0xfe, 0xbf, 0xff, 0xfe, 0xff, 0xef, 0xfe, 0xfd, 0xff, 0xdb, 0xff, 0xff, 0xdf, 0x7e, 0xdb, 0x6d, 0xb7, 0xfd, 0xff, 0xbb, 0xa9, 0x7f, 0xd2, 0x5f, 0xbf, 0xbd, 0xf1, 0xc6, 0x5f, 0x2f, 0xfc, 0xf7, 0xff, 0xd7, 0x5e, 0x7b, 0xad, 0xb5, 0x17, 0xfe, 0x6a, 0xd8, 0xbf, 0xf8, 0xef, 0xbb, 0x2f, 0xbe, 0xf8, 0x62, 0x8b, 0xf7, 0xfc, 0xf7, 0xdf, 0x7f, 0xfd, 0xfd, 0xf7, 0xc4, 0xdf, 0x9b, 0xff, 0xaf, 0xff, 0xff, 0xfe, 0xab, 0xad, 0xbf, 0xfe, 0x6a, 0x7d, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xef, 0xe6, 0xbf, 0xeb, 0xf3, 0xcf, 0x3e, 0xfe, 0xcc, 0xa3, 0x8f, 0x3e, 0xff, 0xf9, 0x47, 0x0f, 0x7d, 0xf4, 0xd1, 0xe7, 0x9e, 0xbf, 0xf9, 0xff, 0xf2, 0xff, 0xef, 0xbf, 0xfc, 0xf2, 0xcb, 0x3f, 0x7f, 0xf3, 0xb5, 0xff, 0xef, 0xff, 0xff, 0xff, 0x9f, 0xff, 0x6f, 0xfe, 0xbf, 0xfc, 0xff, 0xef, 0xbf, 0xbf, 0xfd, 0xf2, 0xcf, 0x7f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xdf, 0x9b, 0xff, 0xaf, 0xfe, 0xfb, 0xeb, 0x8f, 0xbf, 0xfe, 0xfb, 0xeb, 0x7f, 0x5f, 0x7f, 0xb5, 0xd5, 0x57, 0x5f, 0xfd, 0xf3, 0xff, 0xe6, 0xff, 0xeb, 0xff, 0xbf, 0xff, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xef, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xf6, 0xff, 0xef, 0x7d, 0xf3, 0xe9, 0xf6, 0x97, 0x7e, 0xfa, 0xc9, 0xfe, 0xff, 0x6d, 0xfa, 0xff, 0xeb, 0xa7, 0xbe, 0xde, 0x7a, 0x6b, 0xaf, 0xbe, 0xd4, 0xe1, 0xd6, 0x5f, 0x7a, 0xbd, 0x55, 0xc7, 0x1f, 0xfc, 0x9a, 0xff, 0xff, 0xff, 0xff, 0x3b, 0x6f, 0xed, 0xff, 0xfc, 0xfd, 0x97, 0xff, 0xf7, 0xfe, 0x7b, 0x7a, 0xff, 0xff, 0xfd, 0xef, 0xc6, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xeb, 0xfd, 0xda, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xbb, 0x6f, 0xff, 0xfd, 0xff, 0x9f, 0xf9, 0xff, 0xff, 0xff, 0xbf, 0xef, 0xf7, 0x3f, 0xce, 0xf7, 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xef, 0xff, 0x6f, 0xfe, 0xff, 0x7f, 0xff, 0xeb, 0x6f, 0x9f, 0xbe, 0xfe, 0xcb, 0x5e, 0x66, 0xbd, 0xb5, 0x53, 0x5f, 0xff, 0xbd, 0xf5, 0x7f, 0x9b, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xef, 0x9f, 0xdf, 0xde, 0xf7, 0xbf, 0xdf, 0x76, 0xfd, 0xf7, 0xdd, 0xb7, 0x5f, 0xdd, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xef, 0xbf, 0x3f, 0xfc, 0xb1, 0xff, 0xf7, 0x7f, 0xbb, 0xfd, 0xff, 0xff, 0xbf, 0xbf, 0xf9, 0xf7, 0xff, 0x9f, 0xfd, 0xff, 0xf7, 0xdc, 0xfb, 0xf5, 0x3b, 0xbd, 0xff, 0xf7, 0xff, 0xfd, 0xdb, 0xff, 0xfe, 0xff, 0x6f, 0xee, 0xff, 0xf7, 0xbf, 0xff, 0xff, 0xfc, 0xfe, 0xf3, 0xff, 0xe7, 0xff, 0xb7, 0xfd, 0xff, 0xf7, 0xf9, 0xf7, 0xfe, 0x7f, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf7, 0xcf, 0x53, 0x6f, 0xff, 0xe7, 0x9e, 0x7e, 0x7c, 0xbf, 0xff, 0xed, 0x7f, 0x7c, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xbf, 0xbd, 0xfd, 0xad, 0xbf, 0xfe, 0xff, 0xef, 0xdf, 0x7f, 0xdf, 0xff, 0xff, 0xfe, 0xfd, 0xfe, 0xbb, 0xf9, 0xff, 0xfb, 0xeb, 0x7f, 0xff, 0xff, 0xbd, 0xef, 0xb3, 0xf6, 0xdc, 0xf2, 0xff, 0xff, 0xbf, 0xdd, 0xf7, 0xfe, 0xfd, 0x6e, 0xf4, 0x7f, 0xfd, 0xe3, 0x5f, 0x7f, 0xfa, 0xff, 0xdb, 0x6a, 0xfb, 0xff, 0xff, 0x27, 0xff, 0x3f, 0xff, 0xbc, 0xff, 0xbf, 0x99, 0xff, 0xff, 0xff, 0xfe, 0xef, 0x7f, 0xff, 0x3f, 0xfb, 0x7e, 0xf7, 0xdf, 0xef, 0xfd, 0xdf, 0xdf, 0x7f, 0xff, 0xf7, 0xff, 0xa6, 0x7f, 0x7e, 0x7f, 0xff, 0xff, 0xde, 0xab, 0x7c, 0xfc, 0xfb, 0x75, 0x5e, 0xf8, 0x7d, 0xe3, 0xbd, 0x5a, 0xf3, 0xfd, 0xaf, 0xd9, 0x9f, 0xff, 0xff, 0xf9, 0xbf, 0xff, 0xfe, 0xff, 0x7f, 0x7f, 0xbf, 0xee, 0xfa, 0xcb, 0x7d, 0x9f, 0xfd, 0xfc, 0xfe, 0x6d, 0xfe, 0xff, 0x9f, 0xfa, 0xff, 0xef, 0xbf, 0x92, 0x6f, 0x79, 0x5f, 0xe7, 0x9f, 0xc5, 0xf7, 0x7b, 0x6f, 0xf7, 0xcf, 0xdf, 0x1b, 0xf5, 0xff, 0xbf, 0xfe, 0xff, 0xfb, 0xa9, 0xbf, 0xff, 0x7f, 0xd7, 0xff, 0x67, 0xfd, 0xfd, 0xda, 0x6b, 0xff, 0xf7, 0x57, 0xc6, 0xfe, 0x7d, 0xff, 0xff, 0xf7, 0xde, 0x6b, 0xb7, 0xdb, 0x37, 0xbd, 0xb7, 0xde, 0x79, 0xff, 0xbd, 0xdf, 0x4f, 0xfb, 0xbb, 0x99, 0xbf, 0xff, 0xbf, 0xff, 0xbe, 0xfb, 0x6a, 0xec, 0xf7, 0x46, 0xf7, 0xe6, 0x5f, 0xcb, 0x7d, 0xef, 0x7d, 0xd1, 0xfe, 0x6c, 0xec, 0xff, 0x5b, 0x3a, 0xbf, 0xef, 0xb3, 0xfa, 0x73, 0x3e, 0xd5, 0xdd, 0xff, 0x9d, 0xf2, 0x7e, 0x2f, 0xef, 0xf5, 0xbe, 0x99, 0xf9, 0xff, 0xbd, 0xce, 0xdf, 0x3b, 0xa5, 0xbd, 0x9e, 0x1f, 0xd7, 0x7a, 0xfc, 0xed, 0xfd, 0xdf, 0x78, 0x7b, 0x0d, 0x6f, 0x46, 0xfd, 0xff, 0xf6, 0xff, 0xfd, 0xb7, 0xdf, 0xfe, 0xe3, 0x6d, 0x6e, 0xfd, 0xed, 0xb2, 0xdf, 0x7f, 0xf7, 0xff, 0xf3, 0xbd, 0x71, 0xff, 0x7f, 0xff, 0x7d, 0xfe, 0x59, 0x67, 0xfd, 0x7f, 0xf6, 0xb3, 0xde, 0x3e, 0xfb, 0xaf, 0x9f, 0xdf, 0x3f, 0x6b, 0x6b, 0xec, 0xd7, 0x3e, 0xbb, 0x0f, 0x3f, 0xcd, 0x68, 0xdb, 0x8d, 0x7b, 0xb0, 0x7d, 0x07, 0xdf, 0x57, 0x7f, 0xfd, 0x67, 0xbb, 0x99, 0xf9, 0xff, 0xef, 0xff, 0xff, 0xff, 0xf6, 0xfb, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xf7, 0xdf, 0xff, 0xcf, 0xce, 0xe6, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xed, 0xf7, 0xff, 0xed, 0xbb, 0xb9, 0xdf, 0xdb, 0x6b, 0x7f, 0x9c, 0xd4, 0xd3, 0xbf, 0x2f, 0xfd, 0xa9, 0xb7, 0x3f, 0x5a, 0xff, 0xef, 0xbf, 0x7f, 0xfe, 0x6e, 0xde, 0xff, 0x5a, 0xe2, 0xbf, 0x2f, 0x9e, 0xf9, 0x7f, 0x8b, 0xdf, 0x7c, 0xf1, 0xcf, 0x97, 0xfb, 0xed, 0xd7, 0xcf, 0xdf, 0x9b, 0xff, 0xef, 0xbf, 0xfe, 0xf7, 0xff, 0xbf, 0xf7, 0xfd, 0x7a, 0xd7, 0xdf, 0x77, 0xf9, 0xfe, 0xd7, 0xfb, 0x7f, 0xf5, 0xff, 0xe6, 0xff, 0xfb, 0xa3, 0xcb, 0x3f, 0xff, 0xf8, 0xf1, 0x8f, 0x3e, 0xfd, 0xf8, 0x47, 0x9f, 0x7f, 0x74, 0xf9, 0x45, 0x87, 0xbf, 0xf9, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0xfc, 0xf3, 0x9d, 0x2f, 0xfe, 0xf9, 0xf6, 0x9f, 0x5f, 0x7f, 0xfd, 0xf5, 0x97, 0xef, 0x6f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0x2f, 0xbf, 0xfc, 0xff, 0xeb, 0xdf, 0x7e, 0xfd, 0xf7, 0xd7, 0x5f, 0x5f, 0x7d, 0x65, 0xfd, 0x9b, 0xff, 0xee, 0xfe, 0xeb, 0xef, 0xbf, 0xbf, 0xb6, 0xff, 0xeb, 0x5f, 0xdb, 0xfd, 0xf1, 0xff, 0x7f, 0x5d, 0xf5, 0xb7, 0xff, 0x86, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0xbf, 0xfe, 0xfc, 0xfe, 0x7f, 0xff, 0xfb, 0xff, 0xd7, 0xff, 0xf7, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xfe, 0xfb, 0x6f, 0x7f, 0xf9, 0xe9, 0xff, 0x9e, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xf6, 0xff, 0xcb, 0xaf, 0xbf, 0xda, 0xba, 0x6b, 0x8f, 0xbe, 0xae, 0xd0, 0x07, 0x5f, 0x75, 0xfc, 0xb5, 0xd7, 0x5e, 0xff, 0x9b, 0xfe, 0xff, 0xff, 0xdf, 0xaf, 0x8f, 0x3e, 0x7d, 0xf7, 0xd0, 0x9e, 0xbe, 0xfa, 0xfd, 0xef, 0x6f, 0xff, 0xff, 0xbb, 0xff, 0xc6, 0xfb, 0xff, 0xfb, 0xdb, 0x7f, 0x3e, 0xbb, 0xfb, 0xff, 0xdf, 0xff, 0xef, 0x6f, 0xff, 0x6e, 0xff, 0xfd, 0xb7, 0xfd, 0x9f, 0xf9, 0xef, 0xff, 0x7f, 0xff, 0x77, 0xff, 0x7d, 0xff, 0xab, 0x7f, 0xad, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0x3f, 0xde, 0xf8, 0xff, 0x7f, 0x3f, 0xba, 0x72, 0xd3, 0x55, 0xbb, 0xbf, 0xc6, 0xff, 0x6f, 0x6e, 0x71, 0x59, 0xff, 0x99, 0x7f, 0xdf, 0xbf, 0xff, 0xff, 0xfd, 0xfd, 0xbf, 0xf9, 0xff, 0xbf, 0xef, 0xfd, 0x7e, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xff, 0xe6, 0xef, 0xdf, 0xff, 0xff, 0xff, 0xb9, 0xfa, 0xbe, 0xff, 0xbc, 0xb0, 0xfe, 0x7f, 0xfa, 0xff, 0xb5, 0xc1, 0xff, 0xfb, 0xb7, 0xf9, 0xff, 0xff, 0x7f, 0x7f, 0xbf, 0x7d, 0xff, 0x73, 0xff, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0x77, 0xfe, 0xdf, 0xfd, 0xff, 0x6d, 0xf6, 0xff, 0xfb, 0x7f, 0xff, 0xef, 0xf7, 0xdb, 0xee, 0xdd, 0xfb, 0xfd, 0x6f, 0xcf, 0xff, 0xdf, 0xf7, 0xff, 0x1f, 0xff, 0x9a, 0x5f, 0xff, 0x3f, 0xff, 0xff, 0xf3, 0xfe, 0x3f, 0xcf, 0xaf, 0x55, 0x9b, 0xf7, 0xff, 0xf9, 0xef, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xfe, 0xff, 0xcf, 0xff, 0xf7, 0xfb, 0xbf, 0xbe, 0xfe, 0xff, 0xff, 0x51, 0xe7, 0x6d, 0x5e, 0xef, 0xfe, 0xff, 0xfd, 0xbf, 0xf9, 0xef, 0xba, 0xeb, 0xfe, 0x79, 0xed, 0xdb, 0xe3, 0xfe, 0xd5, 0xfd, 0xf5, 0x9e, 0xff, 0x7f, 0xf9, 0xf5, 0xd7, 0xf7, 0x6a, 0xf4, 0xff, 0xfe, 0xfb, 0xff, 0xfd, 0xdf, 0x6f, 0x7f, 0xeb, 0xff, 0xdf, 0xff, 0xeb, 0xfd, 0x5f, 0xfe, 0xf1, 0xf7, 0xfd, 0x9b, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7, 0x7f, 0xff, 0xbb, 0xff, 0xfd, 0xff, 0x86, 0xff, 0xbb, 0xff, 0xb1, 0x5f, 0x6a, 0xea, 0xaf, 0xe7, 0x5b, 0xd5, 0xff, 0xf3, 0x4f, 0xfd, 0xcf, 0x3a, 0xdf, 0xfd, 0x8f, 0xd9, 0xff, 0xee, 0xff, 0xec, 0xd7, 0xfb, 0xfa, 0xeb, 0xff, 0x64, 0xf5, 0x7f, 0xfe, 0xd3, 0xff, 0x9b, 0xff, 0xf7, 0xff, 0x6d, 0xfe, 0xf7, 0xfc, 0xff, 0x7b, 0xa9, 0xe5, 0xff, 0xfb, 0xff, 0xfc, 0xe6, 0x2b, 0xff, 0xf2, 0x53, 0x4b, 0xf5, 0xdf, 0xff, 0x9b, 0xf5, 0xb5, 0xff, 0xff, 0x7e, 0xeb, 0xff, 0xa7, 0xce, 0xff, 0xff, 0x9f, 0xcf, 0xff, 0x7f, 0xd6, 0x59, 0x7f, 0xff, 0xd7, 0xe6, 0xfe, 0xbb, 0xff, 0xbd, 0xb7, 0xda, 0x69, 0xff, 0xd5, 0x77, 0x85, 0x3f, 0x6a, 0x2f, 0xed, 0xf5, 0xff, 0x7f, 0xfb, 0xbb, 0x99, 0xff, 0xfe, 0xbf, 0xef, 0xbe, 0x2a, 0xea, 0xbf, 0xf7, 0x46, 0xd9, 0x5e, 0x5b, 0xcd, 0xad, 0xb7, 0xd4, 0x1f, 0xff, 0x6c, 0xec, 0xff, 0xd6, 0x3f, 0xfb, 0xaf, 0xfe, 0xdf, 0x4f, 0xfa, 0xfd, 0xeb, 0xeb, 0xfd, 0x77, 0x5b, 0xff, 0xef, 0xd7, 0xbf, 0x99, 0xf8, 0xbf, 0xed, 0x53, 0xce, 0x7f, 0xff, 0xc4, 0xb7, 0x4f, 0x36, 0xf1, 0xe4, 0xfd, 0x3f, 0xfc, 0x5f, 0xff, 0xeb, 0xef, 0xe6, 0xfd, 0x7f, 0x7e, 0xff, 0xfd, 0xb7, 0xdd, 0xff, 0xff, 0x2d, 0x7e, 0xbf, 0xff, 0xe7, 0xcb, 0x7e, 0xfb, 0xed, 0xe7, 0xbd, 0x79, 0xff, 0x2e, 0x9f, 0x7f, 0xfe, 0xd9, 0x67, 0xff, 0x7d, 0xfe, 0xb7, 0x8e, 0xfe, 0xf3, 0xec, 0xb7, 0xff, 0x3e, 0x73, 0x6f, 0xec, 0xbf, 0xfe, 0xd3, 0xcf, 0x3f, 0xda, 0xbc, 0x1b, 0xcd, 0x7f, 0xf6, 0xd9, 0xf7, 0x1f, 0x6c, 0xdf, 0x2d, 0xd6, 0xbf, 0x99, 0xf9, 0xef, 0xfd, 0xff, 0xff, 0xfd, 0xfe, 0xdf, 0x7f, 0xff, 0xff, 0xee, 0xbf, 0xff, 0xbe, 0xf9, 0xef, 0xff, 0xff, 0xcf, 0xa6, 0xfe, 0xdb, 0xff, 0xfe, 0xeb, 0xff, 0xbf, 0xfe, 0xef, 0xfb, 0xdf, 0x7d, 0xfd, 0xf7, 0x7f, 0xdf, 0xfd, 0xff, 0xff, 0xbb, 0xb9, 0xdf, 0xdf, 0x4f, 0x2f, 0xbd, 0xf1, 0xd7, 0xff, 0x7f, 0xfc, 0xa3, 0xc5, 0xf7, 0xdf, 0x7a, 0xfd, 0xb5, 0x97, 0xfe, 0x6a, 0xd8, 0xfd, 0xeb, 0xe3, 0x8b, 0x2d, 0x96, 0xf8, 0xe7, 0x9d, 0xfd, 0x6c, 0xf5, 0xdd, 0x1b, 0x5f, 0xec, 0xf5, 0xcd, 0xdf, 0x9b, 0xff, 0xaf, 0xff, 0xfe, 0xfa, 0xeb, 0xaf, 0xff, 0xdf, 0xff, 0xbd, 0x5f, 0xee, 0xbf, 0xf5, 0xfe, 0x5f, 0xef, 0xff, 0xff, 0xe6, 0xff, 0xeb, 0xb3, 0x87, 0x0e, 0xf6, 0xe8, 0xf3, 0xcf, 0x1d, 0x7f, 0xd1, 0xc7, 0x1f, 0x3d, 0xfe, 0xd0, 0xe7, 0x9f, 0xbf, 0xf9, 0xff, 0xfa, 0xcf, 0xa7, 0x9f, 0xfc, 0xfa, 0xcf, 0x7f, 0xde, 0xff, 0xe7, 0xf7, 0xdf, 0x3f, 0xb9, 0xf6, 0xb7, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xf3, 0xeb, 0x3b, 0xbf, 0xfe, 0xf7, 0xfe, 0xff, 0x5f, 0xff, 0xfd, 0xdf, 0x5f, 0x7f, 0xff, 0xe5, 0xff, 0x98, 0xff, 0xff, 0xfe, 0xda, 0x2a, 0xaf, 0xff, 0xfe, 0xfb, 0x6f, 0x5f, 0x5d, 0xfc, 0xf7, 0xdf, 0x3e, 0xff, 0xfd, 0xf7, 0xff, 0xe6, 0xff, 0xff, 0xbf, 0xb7, 0xee, 0xfa, 0xeb, 0xff, 0xbb, 0xff, 0xf7, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x8f, 0xf9, 0xff, 0xe6, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xca, 0xeb, 0x3f, 0xfa, 0xe5, 0x97, 0xdf, 0x7d, 0xf7, 0xad, 0xb5, 0xff, 0x6f, 0xfa, 0xff, 0xab, 0xaf, 0xbf, 0xe6, 0xfa, 0x63, 0x2e, 0xb6, 0xce, 0x75, 0xc7, 0x5d, 0x75, 0xfd, 0xe1, 0x87, 0x5f, 0xef, 0x9a, 0xbf, 0x0f, 0xfe, 0xf8, 0xe1, 0x4f, 0x37, 0xfd, 0xef, 0xbb, 0xdd, 0x7d, 0xfa, 0xff, 0xef, 0x8f, 0x8f, 0x7d, 0xde, 0xff, 0xc6, 0xff, 0x6b, 0xef, 0xb7, 0xbb, 0xff, 0xeb, 0x7f, 0xdb, 0xcc, 0x7f, 0x7e, 0xfb, 0x77, 0xdf, 0xf6, 0xff, 0xff, 0xb3, 0x9f, 0xe9, 0xff, 0xff, 0x77, 0xdf, 0xbf, 0xf6, 0xff, 0xff, 0xf7, 0xfe, 0xfd, 0xf5, 0xfd, 0xef, 0x3f, 0xf7, 0xff, 0xfb, 0xbf, 0x6b, 0xfe, 0xff, 0xde, 0xff, 0xdf, 0x0f, 0x37, 0xf6, 0xfa, 0xeb, 0x1c, 0x7e, 0x9d, 0xf5, 0xf7, 0x5b, 0xef, 0xf5, 0xf5, 0xff, 0x9b, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xdf, 0x7f, 0xfe, 0xfb, 0xff, 0x3f, 0xff, 0x5c, 0xf7, 0xad, 0xff, 0xff, 0x73, 0xff, 0x66, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x3b, 0xbd, 0xff, 0x71, 0xff, 0xff, 0xff, 0xdf, 0xbf, 0xc7, 0xdd, 0xff, 0xbf, 0xd9, 0xfb, 0xf7, 0xff, 0xff, 0xfc, 0xff, 0xdf, 0xf3, 0xee, 0xdd, 0xfb, 0xfe, 0xfe, 0xff, 0xfe, 0x7f, 0xef, 0xff, 0xfd, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xbb, 0xbb, 0xff, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xef, 0xbf, 0x1f, 0xf3, 0x9b, 0xff, 0x8f, 0xff, 0xff, 0xbf, 0xbf, 0x77, 0xeb, 0xb9, 0xff, 0xef, 0x0f, 0x77, 0xdc, 0xf0, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xe6, 0xff, 0xdf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xfd, 0xf6, 0xff, 0xef, 0xbf, 0x6f, 0xff, 0x3b, 0xff, 0xfb, 0xb7, 0xed, 0xbb, 0xf9, 0xb7, 0xfa, 0xe9, 0xaf, 0xb3, 0xce, 0xb2, 0xed, 0xff, 0xd3, 0xff, 0x7e, 0x97, 0x4d, 0xff, 0x7f, 0xf6, 0x9f, 0xff, 0x6f, 0xfc, 0xff, 0xfe, 0x7b, 0xee, 0xff, 0xfd, 0xff, 0xd3, 0xe9, 0xff, 0xdb, 0xfd, 0xf7, 0xdf, 0xfd, 0xfd, 0xfd, 0xee, 0xff, 0x99, 0xfd, 0xbf, 0x7d, 0xff, 0xfb, 0xff, 0xff, 0x3f, 0xfb, 0xff, 0xff, 0xbf, 0xfb, 0xfe, 0xf7, 0xff, 0x9f, 0x7f, 0xff, 0xfd, 0xa6, 0xff, 0xaf, 0xb9, 0xe6, 0xfa, 0xfb, 0x6f, 0x79, 0xf0, 0x9b, 0xdf, 0x57, 0x5f, 0x7d, 0xf5, 0xed, 0xba, 0xdf, 0xfd, 0x8d, 0xd9, 0xff, 0xf6, 0xfb, 0xef, 0xbf, 0xff, 0x3e, 0xff, 0xfc, 0xd7, 0xeb, 0xef, 0xbf, 0xff, 0x7e, 0x9f, 0xbd, 0xb7, 0xff, 0x6d, 0xfe, 0xb7, 0xdd, 0x66, 0xbb, 0xed, 0xb7, 0xff, 0x4f, 0x3e, 0xf5, 0xef, 0xbf, 0xff, 0xfe, 0x79, 0xff, 0xfb, 0xfd, 0xbf, 0x9b, 0xf7, 0xb5, 0xd7, 0x5e, 0x7b, 0xed, 0xb5, 0xff, 0xcf, 0xff, 0xff, 0x4b, 0x2f, 0xbd, 0x74, 0xde, 0x9f, 0x7d, 0xff, 0xd7, 0xe6, 0xbe, 0x2d, 0xb6, 0xd4, 0x66, 0x5b, 0x6d, 0xa6, 0xbf, 0xf7, 0xbf, 0xd7, 0x4e, 0x2f, 0xfd, 0xfc, 0xd7, 0x6f, 0x2b, 0xbb, 0xb9, 0x5f, 0x5e, 0x79, 0xe7, 0x95, 0x77, 0xde, 0xab, 0xff, 0x5e, 0xb7, 0xbe, 0xf8, 0xed, 0x17, 0xf7, 0x5d, 0xd9, 0xec, 0x6c, 0xee, 0xbf, 0xdf, 0x5e, 0xfa, 0xef, 0xa5, 0xf7, 0xfa, 0xbf, 0xf9, 0xf9, 0xef, 0xff, 0xff, 0x7f, 0x2f, 0xad, 0xff, 0xbf, 0x99, 0xfb, 0xbf, 0xed, 0xb6, 0xdb, 0x6f, 0xb8, 0xb5, 0xfe, 0x1f, 0xfe, 0x58, 0x7b, 0xed, 0xb5, 0xdf, 0xd9, 0x47, 0xed, 0xcf, 0xc6, 0x3d, 0x7b, 0xee, 0xb9, 0xe7, 0x9e, 0x7b, 0xfb, 0xff, 0x6d, 0x6e, 0xf7, 0xdd, 0x77, 0xdf, 0x7f, 0xff, 0xed, 0xff, 0xb5, 0x79, 0xdf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0xff, 0xff, 0x7f, 0x66, 0xf3, 0x7c, 0x76, 0xd9, 0x65, 0x9d, 0xff, 0xfe, 0x7b, 0x6f, 0xe4, 0xbb, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfb, 0x8f, 0x57, 0x2c, 0xbd, 0xf4, 0xd3, 0x7f, 0xff, 0x3d, 0xf6, 0xbd, 0x99, 0xf9, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xfd, 0x7f, 0xbf, 0xf5, 0xcf, 0x7e, 0x7b, 0xec, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xe6, 0xde, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xfb, 0xff, 0xf7, 0xbf, 0xff, 0xb5, 0xdf, 0x5e, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xb9, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xf7, 0xdf, 0xef, 0x77, 0x7d, 0xe1, 0xb7, 0xdf, 0x7a, 0xfb, 0xef, 0xc7, 0xff, 0xee, 0x68, 0xde, 0xf7, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0x73, 0x8f, 0x5f, 0x7c, 0xf7, 0x5d, 0x76, 0xf9, 0xbd, 0xfd, 0xd5, 0xce, 0x9b, 0xff, 0xaf, 0xbb, 0xfe, 0xba, 0xeb, 0xfd, 0xdf, 0xfe, 0x7f, 0xd7, 0xdf, 0x7f, 0xff, 0xfd, 0xd7, 0xef, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xeb, 0xa3, 0x8f, 0x3e, 0xfa, 0xfc, 0xb3, 0xc7, 0x3f, 0xe5, 0xd9, 0x67, 0x9f, 0x7d, 0xf4, 0xb9, 0xe7, 0x9f, 0xbd, 0xf9, 0xff, 0xfa, 0xeb, 0xaf, 0xbf, 0x7e, 0xfa, 0xcf, 0x77, 0x7e, 0xf1, 0xfd, 0xf7, 0xdf, 0x7f, 0xfd, 0xff, 0xd7, 0xdf, 0x6f, 0xfe, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xaf, 0xfe, 0xfb, 0xff, 0x5f, 0xff, 0x7d, 0xf7, 0xdf, 0x5f, 0xff, 0xff, 0xff, 0xff, 0x98, 0xff, 0xf7, 0xfe, 0xfb, 0xef, 0xbf, 0xaf, 0xfe, 0xdc, 0xef, 0x57, 0x7f, 0xfd, 0xf5, 0xd7, 0x7f, 0xff, 0x7f, 0xf5, 0xff, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xeb, 0x3f, 0xf7, 0xff, 0xf4, 0xf7, 0xdd, 0x7f, 0xff, 0xff, 0xff, 0x5f, 0xff, 0x8b, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x3f, 0x7f, 0xad, 0x3d, 0x5e, 0x5c, 0xbb, 0xfd, 0xb7, 0xff, 0x6f, 0xfe, 0xef, 0xab, 0xaf, 0xbf, 0xf8, 0xf8, 0x8b, 0xaf, 0xbe, 0xce, 0xc1, 0xd7, 0x5f, 0x6f, 0xfd, 0xb5, 0xd6, 0x1c, 0x7f, 0x9a, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0x78, 0x71, 0xff, 0x9f, 0x7f, 0xf7, 0xff, 0x67, 0x7b, 0x7f, 0x77, 0xff, 0xc6, 0xfe, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xd7, 0x7b, 0xee, 0xbf, 0xbb, 0xf7, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x9f, 0xe9, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0x5f, 0xff, 0xed, 0xf7, 0xdf, 0xff, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0xbb, 0xff, 0xfc, 0x6d, 0xbc, 0x3f, 0xff, 0xfb, 0xed, 0x4f, 0x3f, 0xff, 0xdf, 0x6b, 0x9f, 0xff, 0xfd, 0xf4, 0xd7, 0xd3, 0x7e, 0xf9, 0xf7, 0xfe, 0x9b, 0xef, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xfe, 0xd7, 0xf7, 0xfd, 0xf7, 0xdf, 0x5d, 0x7f, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xbf, 0xff, 0xbf, 0xbb, 0xde, 0xbf, 0xff, 0xdf, 0x3f, 0xef, 0xf7, 0xfd, 0xff, 0xff, 0xbf, 0xf9, 0xfe, 0xff, 0xfd, 0xfb, 0xfd, 0xdf, 0xf7, 0xff, 0x4f, 0x7f, 0x7f, 0xff, 0xbb, 0xff, 0x7f, 0x74, 0xef, 0xff, 0xfc, 0x6f, 0xfe, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xdf, 0x77, 0xbb, 0xda, 0xab, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xdf, 0xbf, 0xbd, 0x9b, 0xfb, 0xff, 0xf7, 0x7f, 0xbf, 0xff, 0xfd, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xdf, 0xe6, 0xfe, 0xff, 0xfb, 0xe7, 0x7f, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xbb, 0xdf, 0xb9, 0xff, 0xfc, 0xff, 0xed, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xde, 0xff, 0xfd, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xdf, 0x6f, 0xbd, 0x9f, 0x9b, 0xf6, 0xbf, 0x3c, 0xf3, 0xef, 0xff, 0xff, 0x99, 0xfb, 0xff, 0xff, 0x6b, 0xaf, 0xff, 0xfe, 0xfb, 0xf7, 0xfa, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xe7, 0xbf, 0x66, 0xff, 0xc3, 0x3f, 0xff, 0x7c, 0xe3, 0xcd, 0x3f, 0xff, 0xbc, 0xc9, 0x9d, 0xef, 0xfa, 0xf9, 0xef, 0x9f, 0x7f, 0xfe, 0x9f, 0xf9, 0xff, 0xf5, 0xdf, 0x3f, 0xff, 0xfd, 0xf3, 0xcf, 0x7b, 0xff, 0xfe, 0xef, 0xff, 0xff, 0xfe, 0xfd, 0xef, 0xbd, 0xff, 0x6f, 0xfe, 0xff, 0x76, 0xfb, 0xef, 0xbf, 0xfd, 0xfe, 0xcb, 0xc7, 0x7d, 0xb7, 0xbd, 0xff, 0xdb, 0xff, 0xfb, 0xbd, 0xf6, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xf7, 0x9b, 0xff, 0xff, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xbf, 0xbf, 0xef, 0xbb, 0xff, 0xff, 0xa6, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xcf, 0xbf, 0xff, 0xd7, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xde, 0x7e, 0xfd, 0xbf, 0xf9, 0xff, 0xfc, 0x73, 0xcf, 0x3d, 0xff, 0xdc, 0xf1, 0xdf, 0x45, 0xee, 0xf9, 0xe7, 0x9f, 0x3b, 0xfe, 0xf9, 0x65, 0xff, 0x6f, 0xfe, 0xbb, 0xfb, 0xfe, 0xfb, 0xef, 0xbf, 0xaf, 0xde, 0xfb, 0xdf, 0x7c, 0xef, 0xf5, 0xf7, 0x5f, 0x7f, 0x7f, 0xfd, 0xff, 0x9b, 0xff, 0x9f, 0x7e, 0xfa, 0xe9, 0xa7, 0x9f, 0x7e, 0xfa, 0xfd, 0xef, 0x3f, 0xfd, 0xfe, 0xd3, 0xef, 0x3f, 0xfd, 0xf4, 0xff, 0xe6, 0xff, 0xf7, 0xdf, 0x6f, 0xef, 0xfd, 0x77, 0xdf, 0x77, 0xfb, 0xfb, 0xed, 0xbe, 0xff, 0xfe, 0x7b, 0x6f, 0xbf, 0xfb, 0xbf, 0xf9, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x6f, 0xfe, 0xcf, 0xff, 0xf5, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xbf, 0xbe, 0xfe, 0xbb, 0xaf, 0xb7, 0xff, 0xff, 0x7b, 0xff, 0x9b, 0xdf, 0xdf, 0xff, 0x7f, 0xcf, 0xff, 0xf7, 0xfe, 0xff, 0xf7, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbf, 0xff, 0xef, 0xff, 0xe6, 0xff, 0x59, 0x7f, 0xdf, 0xfd, 0xd7, 0xdf, 0x7f, 0xff, 0x79, 0xcf, 0xbf, 0xef, 0xfa, 0xfb, 0xcf, 0xaf, 0xef, 0xee, 0xbf, 0xf9, 0xff, 0x36, 0xdf, 0x7e, 0xf3, 0xed, 0xb7, 0xdf, 0x7e, 0xeb, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0x5b, 0x6f, 0xbf, 0xf9, 0x6f, 0xfe, 0xff, 0xf7, 0xdf, 0x7f, 0xfb, 0xfd, 0x75, 0xdf, 0x7f, 0xbb, 0xfb, 0x6f, 0xbf, 0xfd, 0xfe, 0x9b, 0xef, 0xae, 0xfd, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xa6, 0xef, 0xbe, 0xfb, 0xef, 0xbf, 0xf7, 0xfe, 0x7b, 0xef, 0xe6, 0xff, 0xbf, 0xff, 0xfe, 0xbb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xdf, 0x7f, 0xf7, 0xdd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xbf, 0xf9, 0xff, 0x2f, 0xbf, 0xfe, 0xf2, 0xeb, 0xaf, 0xbf, 0xff, 0xda, 0xd7, 0x5f, 0x7f, 0xfd, 0xfd, 0xd7, 0xdf, 0x7f, 0xf9, 0x6f, 0xfe, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf9, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7d, 0xff, 0xfd, 0xf7, 0xcf, 0xff, 0x9b, 0xff, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x7b, 0xfe, 0xf9, 0xe7, 0x9e, 0x7f, 0xfe, 0xf9, 0xe7, 0xf7, 0xe6, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xbf, 0xf9, 0xff, 0x1f, 0x7f, 0xfd, 0xf1, 0xd7, 0x5b, 0x7f, 0xfd, 0xf5, 0xaf, 0xbf, 0xfe, 0xf2, 0xeb, 0xaf, 0xbf, 0xde, 0xf8, 0x6f, 0xee, 0xff, 0xfa, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xdb, 0x6f, 0x7f, 0xfd, 0xf5, 0xd7, 0xdb, 0x7f, 0xf9, 0xed, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xbf, 0xfd, 0xf7, 0xff, 0x7b, 0xff, 0xef, 0xff, 0xff, 0xe6, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xfd, 0xe5, 0x7f, 0xb7, 0xff, 0x77, 0xdf, 0x3f, 0xb7, 0xde, 0xff, 0xbf, 0xf9, 0xbf, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0x1d, 0xf3, 0x9c, 0xef, 0xcb, 0xbd, 0xe7, 0x9c, 0xeb, 0xeb, 0xef, 0x6f, 0xfe, 0xff }; /* rom names */ #define ECP_ROM_CROM0_R_0 0 #define ECP_ROM_CROM0_R_1 16 #define ECP_ROM_CROM0_R_2 32 #define ECP_ROM_CROM0_R_3 48 #define ECP_ROM_CROM0_R_4 64 #define ECP_ROM_CROM0_R_5 80 #define ECP_ROM_CROM0_R_6 96 #define ECP_ROM_CROM0_R_7 112 #define ECP_ROM_CROM1_R_0 128 #define ECP_ROM_CROM1_R_1 144 #define ECP_ROM_CROM1_R_2 160 #define ECP_ROM_CROM1_R_3 176 #define ECP_ROM_CROM1_R_4 192 #define ECP_ROM_CROM1_R_5 208 #define ECP_ROM_CROM1_R_6 224 #define ECP_ROM_CROM1_R_7 240 #define ECP_ROM_DIVROM0 256 #define ECP_ROM_DIVROM1 272 #define ECP_ROM_DIVROM2 288 #define ECP_ROM_SWROMID 304 #define ECP_ROM_SWROMIE 320 #define ECP_ROM_SWROMIS 336 #define ECP_ROM_SWROMOE 352 #define ECP_ROM_SWROMOS 368 #define ECP_ROM_SWROMIC 384 #define ECP_ROM_SWROMOC 400 #define ECP_ROM_SWROMDCD 416 #define ECP_ROM_CLKSELROM 432 #define ECP_ROM_PTTMUTEROM 448 /* rom locations */ static const unsigned long ecp_roms[464] = { 52103, 52269, 51771, 51937, 52271, 52105, 51939, 51773, 51439, 51605, 51107, 51273, 51607, 51441, 51275, 51109, 64075, 64243, 64241, 64077, 63743, 63911, 63909, 63745, 63411, 63579, 63577, 63413, 63079, 63247, 63245, 63081, 40025, 39361, 39693, 39029, 40193, 39529, 39861, 39197, 40191, 39527, 39859, 39195, 40027, 39363, 39695, 39031, 39965, 39301, 40131, 39467, 40133, 39469, 39967, 39303, 39633, 38969, 39799, 39135, 39801, 39137, 39635, 38971, 39975, 39311, 39643, 38979, 40143, 39479, 39811, 39147, 40141, 39477, 39809, 39145, 39977, 39313, 39645, 38981, 39985, 39321, 40151, 39487, 40153, 39489, 39987, 39323, 39653, 38989, 39819, 39155, 39821, 39157, 39655, 38991, 39995, 39663, 40161, 39829, 40163, 39831, 39997, 39665, 39331, 38999, 39497, 39165, 39499, 39167, 39333, 39001, 45991, 46159, 46157, 45993, 45659, 45827, 45825, 45661, 45327, 45495, 45493, 45329, 44995, 45163, 45161, 44997, 49117, 49449, 48951, 49283, 49781, 50113, 49615, 49947, 48949, 49281, 49115, 49447, 49613, 49945, 49779, 50111, 61089, 61753, 61421, 62085, 60923, 61587, 61255, 61919, 60921, 61585, 61253, 61917, 61087, 61751, 61419, 62083, 37039, 36871, 36873, 37037, 37703, 37535, 37537, 37701, 37371, 37203, 37205, 37369, 38035, 37867, 37869, 38033, 36979, 36811, 37311, 37143, 37643, 37475, 37975, 37807, 36813, 36977, 37145, 37309, 37477, 37641, 37809, 37973, 36989, 36821, 36823, 36987, 37653, 37485, 37487, 37651, 37321, 37153, 37155, 37319, 37985, 37817, 37819, 37983, 36999, 36831, 37331, 37163, 37663, 37495, 37995, 37827, 36833, 36997, 37165, 37329, 37497, 37661, 37829, 37993, 37009, 36841, 37341, 37173, 37673, 37505, 38005, 37837, 36843, 37007, 37175, 37339, 37507, 37671, 37839, 38003, 43005, 43669, 43337, 44001, 42839, 43503, 43171, 43835, 42837, 43501, 43169, 43833, 43003, 43667, 43335, 43999, 66994, 66828, 66826, 66992, 67326, 67160, 67158, 67324, 67658, 67492, 67490, 67656, 67990, 67824, 67822, 67988, 66984, 67316, 66818, 67150, 66816, 67148, 66982, 67314, 67648, 67980, 67482, 67814, 67480, 67812, 67646, 67978, 64004, 64172, 63672, 63840, 63340, 63508, 63008, 63176, 64170, 64006, 63838, 63674, 63506, 63342, 63174, 63010, 75926, 75262, 76092, 75428, 76094, 75430, 75928, 75264, 75594, 74930, 75760, 75096, 75762, 75098, 75596, 74932, 75916, 76084, 75584, 75752, 75252, 75420, 74920, 75088, 76082, 75918, 75750, 75586, 75418, 75254, 75086, 74922, 45870, 46036, 45538, 45704, 46038, 45872, 45706, 45540, 45206, 45372, 44874, 45040, 45374, 45208, 45042, 44876, 58008, 58174, 57344, 57510, 58176, 58010, 57512, 57346, 57676, 57842, 57012, 57178, 57844, 57678, 57180, 57014, 69960, 70126, 69296, 69462, 69628, 69794, 68964, 69130, 70128, 69962, 69464, 69298, 69796, 69630, 69132, 68966, 82003, 81671, 81339, 81007, 82169, 81837, 81505, 81173, 82171, 81839, 81507, 81175, 82005, 81673, 81341, 81009, 39924, 39260, 40090, 39426, 40092, 39428, 39926, 39262, 39592, 38928, 39758, 39094, 39760, 39096, 39594, 38930, 49107, 48941, 49439, 49273, 48939, 49105, 49271, 49437, 49771, 49605, 50103, 49937, 49603, 49769, 49935, 50101, 87939, 87275, 88105, 87441, 88107, 87443, 87941, 87277, 87607, 86943, 87773, 87109, 87775, 87111, 87609, 86945, 42944, 42778, 42776, 42942, 43276, 43110, 43108, 43274, 43608, 43442, 43440, 43606, 43940, 43774, 43772, 43938 }; baycomepp-0.10.orig/main/epp_firmware.h0100644000175100017510000023616006735660167016210 0ustar abaaba/*****************************************************************************/ /* * epp_firmware.h -- HDLC packet radio modem for EPP using FPGA utility. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ /* automatically generated, do not edit */ #define EPP_FIRMWAREDATE "19990628" /* firmware */ static const unsigned char epp_firmware[] = { 0xff, 0x04, 0xe8, 0x8c, 0xf9, 0xde, 0xff, 0xde, 0xfd, 0xfd, 0xd7, 0xdb, 0xdf, 0xfd, 0xed, 0x7d, 0xef, 0xfe, 0xfe, 0xae, 0x6f, 0xef, 0xfe, 0xfe, 0xfe, 0x9b, 0xff, 0xff, 0xaf, 0xff, 0xfd, 0xfb, 0xfe, 0xaf, 0xff, 0x7f, 0xfe, 0xd7, 0xff, 0x7f, 0xed, 0xff, 0xd7, 0xff, 0x7f, 0xff, 0xe6, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xb9, 0xff, 0xfc, 0xed, 0xcf, 0xff, 0xfe, 0xfc, 0xed, 0xcf, 0x5f, 0xfe, 0xf6, 0xe7, 0x6f, 0x7f, 0xfe, 0xf6, 0xe7, 0xef, 0x6f, 0xfe, 0xbf, 0x77, 0x5f, 0x7b, 0xfd, 0xb5, 0x77, 0x5f, 0x7b, 0xd7, 0xbb, 0xaf, 0xbd, 0xfb, 0xda, 0xbb, 0xaf, 0xbd, 0xfb, 0x9b, 0xff, 0x3f, 0xfd, 0xf5, 0xd2, 0x5f, 0x2f, 0xfd, 0xf5, 0xd3, 0x9f, 0xfe, 0x7a, 0xe9, 0xaf, 0x9f, 0xfe, 0x7a, 0xe9, 0xff, 0xc6, 0xff, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0x9e, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xff, 0xfe, 0xfb, 0xaf, 0xbf, 0xff, 0xfa, 0xd7, 0xdf, 0x7f, 0xfd, 0xfd, 0xd7, 0xdf, 0x7f, 0xfd, 0x6f, 0xfe, 0xff, 0xba, 0xaf, 0xae, 0xfa, 0xfe, 0xfa, 0xaf, 0xae, 0x7f, 0xfd, 0xd7, 0xd7, 0x7d, 0x7d, 0xfd, 0xd7, 0xd7, 0x7f, 0x9b, 0xff, 0xff, 0xfe, 0xbb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xc6, 0xff, 0xdf, 0x7b, 0xff, 0xbd, 0xf7, 0xdd, 0x7f, 0xef, 0xfd, 0xef, 0xbf, 0xff, 0xde, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0x9f, 0x7f, 0xff, 0xfd, 0xf7, 0x9f, 0x7f, 0xff, 0xf9, 0xcf, 0xbf, 0xfb, 0xfc, 0xfb, 0xcf, 0xbf, 0xfb, 0xfc, 0x6f, 0xf4, 0xff, 0xed, 0xb7, 0xdd, 0x7e, 0xfb, 0xed, 0xb7, 0xdf, 0xfe, 0xb6, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xff, 0x9b, 0xff, 0x7f, 0xfe, 0xfd, 0xf7, 0xdf, 0x7f, 0xfd, 0x7d, 0xf7, 0xbf, 0xff, 0xfe, 0xf3, 0xef, 0xbf, 0xfe, 0xfe, 0xfb, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbb, 0xff, 0xbe, 0xfb, 0xee, 0xbb, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xfc, 0xf3, 0xce, 0x3b, 0x7f, 0xfc, 0xf3, 0xce, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7e, 0xfe, 0xf9, 0xe7, 0xf7, 0x6f, 0xfe, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0x77, 0xdf, 0xff, 0xfc, 0xfb, 0xee, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0x9b, 0xdd, 0xcf, 0x3d, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xbf, 0x7c, 0xe7, 0x9f, 0x7f, 0xee, 0xf9, 0xe7, 0x9f, 0x7f, 0xbe, 0xdd, 0x66, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xb7, 0xf9, 0xf7, 0xfe, 0xfa, 0xef, 0xbc, 0xef, 0xbe, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x6f, 0xfe, 0xbf, 0x7d, 0xf6, 0x5b, 0x67, 0xbf, 0x7d, 0xf6, 0xdb, 0xdf, 0x3e, 0xfb, 0xec, 0xb7, 0xdf, 0x3e, 0xfb, 0xed, 0xfd, 0x9b, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xfd, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xfe, 0xbf, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xdf, 0xbf, 0xf9, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x9b, 0xfe, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xfd, 0xf5, 0xf7, 0xbf, 0xef, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xe6, 0xff, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xde, 0xfb, 0xbf, 0xfc, 0xe5, 0xff, 0xdf, 0xff, 0xf7, 0xed, 0xff, 0xdb, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x7f, 0xef, 0x6f, 0xff, 0xff, 0xed, 0xf7, 0xff, 0xfe, 0xff, 0xf7, 0xff, 0x6f, 0xfc, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x1b, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x7f, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xe6, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xcf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x7b, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xff, 0xef, 0xbd, 0xf9, 0xff, 0xfa, 0xff, 0xf5, 0xff, 0xff, 0xef, 0xff, 0xaf, 0xfb, 0xbf, 0xff, 0xfe, 0xff, 0x7f, 0xdd, 0xff, 0xff, 0x7f, 0x6f, 0xfe, 0x7f, 0x7d, 0xff, 0xff, 0xff, 0xef, 0xfb, 0xff, 0xdf, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x9f, 0xff, 0xff, 0xfe, 0xfb, 0x7f, 0xff, 0xfd, 0x77, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xa6, 0x7f, 0x7d, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x6f, 0xff, 0xfb, 0xfe, 0xff, 0xff, 0xf5, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf1, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xdf, 0xef, 0xff, 0xbd, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xcb, 0xef, 0x7f, 0xff, 0x6e, 0xea, 0xf7, 0xff, 0xfc, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xfe, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0x7f, 0xff, 0xfe, 0xfb, 0xef, 0x7b, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xff, 0xef, 0xbf, 0x7f, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0x7b, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xfb, 0x6f, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xcf, 0x3f, 0xff, 0xfb, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x9b, 0xfe, 0xf9, 0xf3, 0xfb, 0xfa, 0xff, 0xff, 0xbf, 0xf6, 0xff, 0xdf, 0xff, 0xff, 0x3f, 0xf5, 0xff, 0xff, 0xff, 0xfd, 0xbf, 0x66, 0xff, 0xff, 0xf5, 0xbf, 0xfe, 0xff, 0xeb, 0xaf, 0xbf, 0xf7, 0xfd, 0xff, 0xff, 0x4b, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x49, 0xff, 0xff, 0xbf, 0xa5, 0xff, 0xfc, 0x7f, 0xed, 0xb5, 0x67, 0xbf, 0xfc, 0xf2, 0xf9, 0xaf, 0xbd, 0xf6, 0xdf, 0xfe, 0x6f, 0xd4, 0xff, 0xff, 0xff, 0xeb, 0xdc, 0xbe, 0x9e, 0x3b, 0xeb, 0xdc, 0xe7, 0x9d, 0xf7, 0xdf, 0x79, 0xe7, 0xfd, 0xff, 0x5f, 0x99, 0xdb, 0xf7, 0xfd, 0xf7, 0xf6, 0xff, 0xef, 0xbf, 0x56, 0x5f, 0xdd, 0x6d, 0xfb, 0xed, 0xa5, 0xf7, 0xde, 0x7b, 0xcd, 0xee, 0x06, 0x7e, 0xfc, 0xff, 0xff, 0x6e, 0xe6, 0xb9, 0xaf, 0x9d, 0x73, 0x5d, 0x73, 0xde, 0x79, 0xb9, 0x9c, 0x77, 0xde, 0xb1, 0x93, 0x99, 0xff, 0x0f, 0xff, 0x7f, 0xff, 0x9e, 0xfe, 0x6f, 0xbb, 0x6d, 0xff, 0xf5, 0xd7, 0xff, 0x7e, 0xfd, 0xf5, 0xd7, 0xff, 0x66, 0xec, 0xff, 0x57, 0xcf, 0xcf, 0xef, 0xaf, 0xff, 0xfa, 0xeb, 0xdf, 0x7f, 0xfd, 0xf5, 0x7f, 0x5f, 0x7f, 0xfd, 0xfd, 0xbf, 0x19, 0xf7, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xf6, 0xdb, 0xcf, 0x3f, 0xfb, 0xed, 0xe7, 0x9f, 0xff, 0xff, 0xf9, 0xe7, 0xff, 0x77, 0xe6, 0xfd, 0x9f, 0x7f, 0xfe, 0xdd, 0xf7, 0xff, 0xfd, 0xff, 0xdf, 0xdf, 0xfe, 0xfb, 0xef, 0xf7, 0xff, 0xfe, 0xfb, 0xff, 0xbd, 0xb9, 0xfe, 0xe3, 0xcf, 0xb5, 0xd1, 0xfc, 0xfb, 0xee, 0xb7, 0xcf, 0x6d, 0xf7, 0xd9, 0x63, 0xbc, 0x2d, 0xf6, 0xd9, 0xaf, 0x6e, 0xee, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xfe, 0xf3, 0xbf, 0x7f, 0xfe, 0xfb, 0xed, 0xbf, 0x7f, 0xfe, 0x3d, 0x9b, 0xf9, 0xff, 0xff, 0xeb, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfb, 0xdf, 0xdf, 0x7f, 0xff, 0xf7, 0xef, 0xff, 0xef, 0xe6, 0xf6, 0x1f, 0x7d, 0xfd, 0xfc, 0xeb, 0xeb, 0xbf, 0xbf, 0x7e, 0xf7, 0xd3, 0x6f, 0x2f, 0xf1, 0xf5, 0xd7, 0x7f, 0x7f, 0xbb, 0x79, 0xff, 0xef, 0xbf, 0xef, 0xff, 0xfe, 0x72, 0xaf, 0x2f, 0xfe, 0xd1, 0xc5, 0x37, 0x5f, 0x7c, 0xf1, 0xc5, 0x13, 0x7f, 0x6f, 0xea, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xfe, 0xfe, 0xbe, 0xef, 0x7f, 0xff, 0xbd, 0xf7, 0xd7, 0x7f, 0xbf, 0xfd, 0xf7, 0xff, 0x9b, 0xf6, 0x7f, 0xcf, 0x3f, 0xfe, 0xfc, 0xb3, 0x8f, 0x3f, 0xfe, 0xf4, 0xc7, 0x1f, 0x7f, 0xe4, 0xf1, 0xc7, 0x1f, 0x7d, 0xfe, 0xe6, 0xff, 0xdf, 0x7f, 0xbf, 0xfe, 0xfb, 0xeb, 0xbf, 0xbf, 0xff, 0xf7, 0xf7, 0x5f, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xbf, 0x61, 0xff, 0xff, 0xdf, 0xaf, 0xbf, 0xfe, 0xfa, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xd7, 0x7f, 0xff, 0xfd, 0xf7, 0xf7, 0xff, 0x6f, 0xfe, 0xdf, 0xf9, 0xef, 0xef, 0xbf, 0xbf, 0xfe, 0xeb, 0xbf, 0x7f, 0xfd, 0xf7, 0xdf, 0x77, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xeb, 0xaf, 0xff, 0xfe, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xdf, 0xe6, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xf2, 0xd3, 0x2d, 0xbf, 0xff, 0xec, 0xff, 0xff, 0x7f, 0xbb, 0xe7, 0xf7, 0xd7, 0xff, 0xbf, 0xf9, 0xff, 0x2f, 0xbf, 0xdc, 0x7a, 0xeb, 0xae, 0xb7, 0xfe, 0xf2, 0x97, 0x5f, 0x7e, 0xfd, 0xf5, 0x97, 0x4d, 0x77, 0xf5, 0x6f, 0x2e, 0xff, 0xff, 0xf3, 0xfb, 0x3f, 0xff, 0xf7, 0xef, 0xb7, 0x9f, 0xfd, 0xff, 0xff, 0x67, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x9b, 0xff, 0x7f, 0x7f, 0xff, 0x7f, 0xe8, 0xfb, 0xf6, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0x6f, 0xff, 0x7f, 0xf6, 0xdf, 0xff, 0xbf, 0xa6, 0x7d, 0xfd, 0xd3, 0xff, 0x9f, 0xdf, 0x7d, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xf1, 0xff, 0xff, 0xff, 0xad, 0xdf, 0xef, 0xe0, 0x91, 0x3f, 0xff, 0xf3, 0xc9, 0xd7, 0x1f, 0x5d, 0xfe, 0xb8, 0x67, 0xff, 0x67, 0xfc, 0xff, 0xbf, 0xff, 0xeb, 0xf7, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x6e, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x99, 0xf7, 0x7e, 0xff, 0x2e, 0xdf, 0xef, 0xfe, 0x7b, 0xfe, 0xfa, 0xdb, 0x7f, 0x7f, 0xfd, 0xb7, 0xde, 0x6f, 0xaf, 0xff, 0xff, 0x46, 0xef, 0xff, 0x7f, 0xff, 0xdf, 0xf7, 0x8b, 0xef, 0x3f, 0xfd, 0xd9, 0xa7, 0x9f, 0x5b, 0xfc, 0xe1, 0xc7, 0xdf, 0xfe, 0x9f, 0xb1, 0xdb, 0xff, 0xdf, 0xff, 0xff, 0xf9, 0xdf, 0xef, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xbf, 0xbf, 0xf7, 0xff, 0x6f, 0xfc, 0x7f, 0xff, 0xff, 0xf5, 0xff, 0xbf, 0xfb, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0xff, 0xe7, 0x9f, 0x3e, 0xfe, 0xfe, 0xff, 0x98, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0x7d, 0xef, 0xff, 0xcf, 0xff, 0xfe, 0xf7, 0x9f, 0xff, 0xee, 0xbf, 0x7f, 0xff, 0xff, 0xef, 0x66, 0x7d, 0xff, 0xff, 0xef, 0xfa, 0xf7, 0xed, 0xaf, 0xbf, 0xe6, 0xf5, 0xd7, 0x7f, 0xbf, 0xac, 0xf3, 0xce, 0xfb, 0xff, 0xbf, 0xf9, 0xf7, 0xd7, 0x6f, 0xbf, 0xff, 0xff, 0xbd, 0xcf, 0xfd, 0xfe, 0xdf, 0xef, 0xc7, 0x1f, 0x1f, 0xf8, 0xa1, 0x3f, 0xfb, 0x6f, 0xfe, 0xf7, 0xff, 0xfb, 0xeb, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xef, 0xff, 0xff, 0x1b, 0xfe, 0xaf, 0xfe, 0xc1, 0x0e, 0xeb, 0xb5, 0xfe, 0xff, 0xee, 0x77, 0xdf, 0x7d, 0x37, 0xdd, 0x74, 0xdf, 0xfd, 0xff, 0x3f, 0x66, 0xff, 0x2b, 0xbf, 0xb2, 0xf7, 0x3a, 0xcb, 0xbf, 0xff, 0x52, 0xd7, 0x5f, 0x6b, 0xa9, 0xb9, 0xe6, 0x9f, 0x7f, 0xff, 0xb7, 0xf9, 0x9f, 0x7f, 0xee, 0x6f, 0xa6, 0x9f, 0x7a, 0xea, 0x3d, 0xf5, 0xa9, 0xa7, 0x9e, 0x7b, 0xee, 0xa9, 0xa7, 0xba, 0xff, 0x6f, 0xd6, 0xff, 0xcf, 0xfa, 0xb3, 0xef, 0xb7, 0xde, 0x7a, 0xf9, 0xd5, 0x2e, 0xbf, 0xec, 0xb2, 0xcb, 0x2e, 0xbf, 0xdf, 0x5f, 0x9b, 0xfb, 0xaf, 0xfd, 0xff, 0xde, 0x4b, 0xa3, 0xad, 0x7e, 0xab, 0xdd, 0x6f, 0xb5, 0xdd, 0xf6, 0xda, 0x6c, 0x9d, 0xff, 0xef, 0x66, 0xfe, 0xab, 0x3f, 0x9a, 0xfd, 0x72, 0xa8, 0xa5, 0xae, 0x6b, 0xdd, 0x70, 0xcd, 0x35, 0xd7, 0x1c, 0x73, 0xe3, 0xbd, 0xb3, 0xb1, 0xff, 0xef, 0xdf, 0x6f, 0xb6, 0x58, 0x6a, 0xe9, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xef, 0xbd, 0xff, 0xf7, 0x66, 0xee, 0xff, 0xf7, 0xfb, 0x5b, 0xeb, 0xb5, 0xd6, 0xfa, 0x6f, 0x75, 0xfb, 0xad, 0xb6, 0xdf, 0x7e, 0xfb, 0xad, 0xfe, 0x3a, 0x9b, 0xf7, 0x7f, 0xff, 0x6d, 0xb7, 0xdd, 0x72, 0xef, 0xff, 0xde, 0xf3, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xdc, 0xf3, 0xdf, 0xb7, 0xe6, 0xdd, 0x9f, 0x79, 0xff, 0xd9, 0x67, 0x9f, 0xff, 0xb7, 0xfb, 0x5d, 0x76, 0xd9, 0x65, 0x97, 0x7d, 0x76, 0x59, 0xe7, 0xbd, 0xa1, 0xff, 0xe3, 0x4f, 0x3f, 0xfb, 0xb8, 0xe3, 0xef, 0xab, 0x7f, 0xed, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xda, 0xff, 0x66, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0x7b, 0xdf, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xbe, 0x3f, 0x9b, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0xef, 0xff, 0xfe, 0xb7, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xdf, 0xde, 0xff, 0xef, 0xa6, 0xfe, 0x1d, 0x2f, 0xff, 0x71, 0xe2, 0x1f, 0xaf, 0xff, 0x77, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0xfb, 0xab, 0x79, 0xff, 0xe7, 0xeb, 0x7d, 0xb2, 0xf8, 0xe6, 0xcb, 0x77, 0x5a, 0xd3, 0x4c, 0x37, 0xdd, 0x74, 0xb3, 0x4c, 0x1e, 0x7f, 0x6f, 0xfe, 0xbf, 0xfc, 0xfa, 0xbb, 0xef, 0xfb, 0xfb, 0xfa, 0xfd, 0x7f, 0xff, 0xfd, 0xf6, 0xdf, 0x6b, 0xef, 0xbd, 0xf7, 0xff, 0x9b, 0xff, 0xaf, 0x83, 0x1e, 0x7e, 0xcc, 0xe3, 0xc3, 0x3f, 0x3f, 0xdc, 0x61, 0x87, 0x1d, 0x76, 0xd9, 0x61, 0x17, 0x7f, 0xfe, 0xe6, 0xff, 0x9f, 0xaf, 0xff, 0xfd, 0xf2, 0xff, 0x2f, 0xbf, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xbf, 0xf9, 0xff, 0x7f, 0xe9, 0x77, 0x9f, 0xfe, 0xba, 0xe9, 0xaf, 0xd7, 0xdd, 0xf6, 0xda, 0x6b, 0x9f, 0xfd, 0xf6, 0xf3, 0xef, 0x6f, 0xf6, 0xbf, 0xaa, 0x7a, 0xbe, 0x29, 0xfe, 0x9b, 0xf2, 0xab, 0xda, 0x4d, 0x57, 0x5d, 0x75, 0xdd, 0x45, 0x57, 0xdd, 0xfd, 0x9b, 0xff, 0xaf, 0x87, 0x0f, 0x3f, 0xe8, 0xaf, 0xcb, 0xfd, 0x7a, 0xf4, 0xc5, 0x0f, 0x3f, 0xfc, 0xf2, 0xc1, 0x87, 0x1d, 0xfe, 0xe6, 0xff, 0xff, 0x2f, 0xbf, 0xfc, 0x76, 0xbb, 0x3f, 0xfe, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xef, 0xbf, 0xe9, 0xff, 0xa7, 0xb7, 0xfa, 0xda, 0xeb, 0xae, 0xbf, 0xf6, 0xd8, 0x47, 0x1f, 0x7f, 0xf5, 0xf5, 0x57, 0x5f, 0x76, 0xfd, 0x69, 0xfe, 0xff, 0xfc, 0xfb, 0xc5, 0x0e, 0xff, 0xef, 0xcb, 0x4f, 0x7f, 0xea, 0xf9, 0xe7, 0xfd, 0xf3, 0xf7, 0xdf, 0xef, 0xff, 0x1b, 0xff, 0x96, 0xdb, 0xef, 0xb9, 0xea, 0x75, 0xdb, 0xbb, 0xea, 0xf7, 0x5f, 0x7d, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0x66, 0xff, 0x7e, 0xd7, 0xf7, 0x7b, 0xdf, 0xff, 0xbf, 0xfd, 0xef, 0xf7, 0xff, 0x7d, 0xbf, 0xef, 0xbf, 0xff, 0xef, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0x6b, 0x67, 0xf7, 0x9c, 0xfb, 0xfe, 0xad, 0x73, 0xfe, 0xf5, 0xd7, 0x53, 0x5f, 0xf9, 0xf9, 0x97, 0xfb, 0x6f, 0xfe, 0xff, 0xaf, 0x7b, 0xdf, 0xef, 0x7f, 0xdb, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0x6f, 0xbf, 0xff, 0xfe, 0xff, 0xeb, 0xff, 0x9b, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0xef, 0x97, 0xff, 0x75, 0xfe, 0xfd, 0xcd, 0x3b, 0xff, 0xb1, 0xf3, 0xff, 0xfb, 0xff, 0xff, 0xe6, 0xbf, 0xfb, 0x2f, 0x7f, 0xff, 0xf7, 0xeb, 0xfe, 0xff, 0xf7, 0xef, 0xff, 0xf7, 0xfe, 0xf3, 0xbf, 0xfc, 0xfb, 0xf7, 0xbf, 0xb9, 0xdf, 0xfb, 0xff, 0xff, 0xf7, 0xfd, 0x5f, 0xbf, 0xfd, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xab, 0xff, 0xdf, 0xff, 0xf7, 0x6b, 0xfe, 0x3f, 0xee, 0xef, 0xf3, 0xfe, 0x37, 0xfe, 0xbf, 0xff, 0x9e, 0x7f, 0xfe, 0x59, 0xff, 0x1f, 0x7d, 0xe4, 0xf1, 0xfe, 0x9b, 0xff, 0x7f, 0xe7, 0x5f, 0xcb, 0xfe, 0xbf, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xdc, 0xfb, 0xde, 0xdf, 0xff, 0xfe, 0xf6, 0xfe, 0x66, 0xfe, 0x7f, 0xaf, 0x7f, 0xce, 0xf2, 0xad, 0xfb, 0xdf, 0x7f, 0xfb, 0xeb, 0xbf, 0x3d, 0xfd, 0xdf, 0xfb, 0xfd, 0xff, 0xbf, 0xb1, 0x6f, 0xff, 0xaf, 0x93, 0x9f, 0x72, 0xed, 0x6f, 0xff, 0xf9, 0xef, 0xff, 0xff, 0x6f, 0xde, 0x7f, 0xff, 0xff, 0x7f, 0x65, 0x7e, 0xff, 0xff, 0xfd, 0xf7, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xef, 0xff, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x9b, 0xf2, 0x7f, 0xfe, 0xf1, 0x6f, 0xf9, 0xa9, 0xbf, 0x5e, 0x6f, 0x7e, 0xf3, 0xad, 0xf7, 0xf5, 0x5c, 0xf2, 0xe5, 0xff, 0xbf, 0x66, 0xff, 0xcf, 0xff, 0xbe, 0x5b, 0xff, 0xfb, 0xaf, 0xd7, 0x9f, 0xef, 0xbc, 0xf9, 0x7e, 0x3d, 0x2d, 0xbe, 0xff, 0xff, 0xb7, 0xc9, 0x9f, 0x5b, 0x7e, 0xa5, 0xb3, 0x9e, 0xfa, 0xeb, 0x7f, 0xfe, 0xfb, 0xef, 0xbf, 0x5f, 0xfa, 0xf9, 0xef, 0xff, 0xff, 0x6f, 0xd4, 0x37, 0x9f, 0x7f, 0xeb, 0xef, 0xa7, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xef, 0x46, 0xdf, 0xfd, 0xf7, 0xff, 0x5f, 0x99, 0xfb, 0xf1, 0xd7, 0xbd, 0xdf, 0x5f, 0x65, 0xfd, 0xff, 0xcf, 0x7f, 0xfe, 0xf9, 0x6f, 0xaf, 0xda, 0xec, 0xfb, 0xef, 0xef, 0x06, 0xfe, 0xbf, 0x76, 0xfe, 0xfb, 0xa7, 0x59, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0xff, 0x93, 0x99, 0xff, 0x7a, 0xdf, 0xac, 0xff, 0xc8, 0xd2, 0xff, 0xff, 0xd7, 0xbf, 0xfe, 0xfa, 0x79, 0xe3, 0xfd, 0xff, 0x7f, 0xeb, 0x66, 0xec, 0xbf, 0x1f, 0x7b, 0x29, 0x6c, 0x97, 0xfd, 0xff, 0x3f, 0xfc, 0xe1, 0x87, 0x9f, 0xf7, 0xd9, 0xe9, 0xa7, 0xbf, 0xba, 0x19, 0xf7, 0xfe, 0xff, 0x6f, 0xb7, 0xdd, 0x7e, 0xdb, 0xff, 0xd7, 0xbb, 0xfe, 0xf2, 0xeb, 0xff, 0xbf, 0xf6, 0xda, 0xeb, 0x77, 0xe6, 0x7d, 0xfd, 0x7d, 0xf7, 0xd9, 0xef, 0x7d, 0xff, 0xe6, 0xf9, 0xcf, 0x3f, 0xe3, 0xfc, 0xa3, 0xcf, 0x3f, 0xff, 0xfc, 0xbd, 0xb9, 0xee, 0xfb, 0xce, 0x31, 0xcf, 0xf8, 0x7b, 0xed, 0x3f, 0xff, 0xf9, 0xe7, 0x9f, 0x6f, 0xdc, 0xf9, 0xe7, 0x1f, 0xab, 0x6e, 0xee, 0xdf, 0xff, 0xff, 0xfd, 0xf6, 0xdf, 0xff, 0xef, 0x7f, 0xff, 0xfb, 0xef, 0x3f, 0xfb, 0xff, 0xfb, 0xef, 0xbf, 0x3b, 0x9b, 0xf9, 0xfb, 0xff, 0xbf, 0xef, 0xfe, 0xfd, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xfd, 0xb7, 0xff, 0x7f, 0xff, 0xfd, 0xbf, 0xef, 0xe6, 0xf6, 0x9f, 0xef, 0xfe, 0xd0, 0xe2, 0x9d, 0xff, 0xfd, 0xf1, 0x8f, 0x17, 0xfe, 0x38, 0xf1, 0x8f, 0x3e, 0xfe, 0x78, 0xbb, 0x61, 0x7f, 0xff, 0xfb, 0x7d, 0xfe, 0xfa, 0x63, 0xbf, 0xfe, 0xfe, 0xf7, 0xc5, 0x7f, 0x4f, 0xfc, 0xf7, 0xdf, 0x7f, 0x7f, 0x6f, 0xfe, 0xff, 0xeb, 0xea, 0xcd, 0xee, 0xfb, 0xfd, 0xbf, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0x57, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0x9b, 0xff, 0xff, 0x8f, 0x3e, 0xfe, 0xcc, 0xf3, 0xcf, 0x3f, 0x3f, 0xbc, 0xe1, 0x86, 0x1f, 0xfe, 0xf9, 0xe5, 0x8f, 0x1b, 0xfe, 0xe6, 0xff, 0xfb, 0xef, 0xff, 0xf8, 0xe2, 0xff, 0xff, 0xff, 0xfd, 0xef, 0x97, 0xff, 0x7e, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xdb, 0xbf, 0x74, 0xfb, 0x4d, 0xbf, 0xff, 0xfe, 0xfb, 0xed, 0x6f, 0xfe, 0xff, 0xff, 0xfe, 0xbf, 0xef, 0xfe, 0xfb, 0xef, 0x9f, 0xf9, 0xd4, 0x33, 0xcf, 0x54, 0xff, 0xd5, 0x37, 0xcf, 0xfc, 0x1b, 0xfe, 0xfe, 0xbf, 0xff, 0xff, 0xef, 0x7f, 0xbf, 0xff, 0xbf, 0xfc, 0xe3, 0x97, 0x5f, 0xfe, 0xfb, 0xe1, 0x87, 0x5f, 0xfe, 0x66, 0xff, 0xdb, 0x7b, 0xbf, 0xfd, 0xc2, 0xcf, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xbf, 0xad, 0xbe, 0xfa, 0x72, 0xcb, 0xaf, 0x9f, 0xfe, 0xfa, 0xd7, 0x5f, 0x7f, 0xfd, 0xe5, 0x97, 0x5f, 0x7f, 0xfc, 0x6f, 0x3e, 0x9f, 0xef, 0xb2, 0xe3, 0xff, 0xff, 0xef, 0xbf, 0xcd, 0x7f, 0xb6, 0xf9, 0xe6, 0xbb, 0x7f, 0xf6, 0xd9, 0xf7, 0xfb, 0x9b, 0xff, 0xff, 0xbf, 0xab, 0xb3, 0xfd, 0xf7, 0xfe, 0x77, 0xfa, 0xcd, 0x2f, 0x3f, 0xbd, 0xfd, 0xdf, 0x78, 0xb7, 0xff, 0x7f, 0xe6, 0xff, 0x7f, 0xdf, 0xf5, 0xfd, 0xdf, 0xfd, 0xf7, 0xff, 0xf5, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xfd, 0xf7, 0x7f, 0xff, 0x97, 0xf1, 0xff, 0xbb, 0x2a, 0xb7, 0xff, 0xf9, 0xfc, 0x63, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0xf8, 0xbf, 0x77, 0xf7, 0xfb, 0xfb, 0xeb, 0xff, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x99, 0x75, 0x7f, 0xbd, 0xef, 0xfb, 0xef, 0xff, 0xfb, 0xfa, 0xbf, 0xfb, 0xff, 0xf7, 0xff, 0xfe, 0xff, 0x7f, 0xf7, 0xdf, 0x7f, 0xc6, 0xff, 0xbf, 0x6f, 0x2f, 0xfd, 0xbf, 0xfd, 0x49, 0xfd, 0xfd, 0xce, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xe7, 0xef, 0xdf, 0xbf, 0xb1, 0xcd, 0xff, 0xba, 0xee, 0xf7, 0x7d, 0xcf, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf7, 0xff, 0xf7, 0xff, 0xff, 0x6f, 0xfc, 0x3f, 0xeb, 0xff, 0xff, 0x8f, 0xff, 0xdf, 0xff, 0xf3, 0x9e, 0x77, 0xfe, 0x79, 0x07, 0x9b, 0x6f, 0xfe, 0xb9, 0xff, 0x9b, 0xfb, 0x6f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xef, 0x3f, 0xf7, 0xe4, 0xe7, 0xfc, 0xfb, 0xef, 0xbf, 0xff, 0xfa, 0xfb, 0xef, 0xe6, 0xdf, 0xdf, 0xbe, 0xd7, 0xce, 0x77, 0xff, 0xaf, 0x73, 0xcf, 0x7f, 0xef, 0xbf, 0xff, 0xf7, 0x7b, 0xeb, 0xbf, 0x9f, 0xbf, 0xf9, 0xf7, 0xff, 0x7f, 0xdb, 0x9d, 0xbe, 0xd7, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x6f, 0xf6, 0xff, 0xff, 0x9e, 0xff, 0xff, 0xfe, 0x7f, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x1b, 0xfe, 0xff, 0xb1, 0x9b, 0xea, 0xbf, 0xbc, 0xfe, 0xcf, 0x2f, 0x7f, 0xf3, 0xad, 0x37, 0xdf, 0x7c, 0xf3, 0xe5, 0xf7, 0x3f, 0x66, 0xff, 0xff, 0xe5, 0x97, 0xf7, 0x2f, 0x6f, 0xef, 0xff, 0xcd, 0xff, 0xbf, 0xf9, 0xce, 0xbf, 0xee, 0xbf, 0xff, 0xfe, 0xb7, 0xf9, 0xff, 0xff, 0xab, 0xac, 0xd6, 0xf7, 0x6b, 0xfe, 0x7f, 0xff, 0xf3, 0xef, 0xbf, 0xff, 0xfc, 0xfb, 0xef, 0xbf, 0xff, 0x6f, 0xd6, 0xff, 0xff, 0x7e, 0xfa, 0xff, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xfe, 0xf7, 0xdf, 0x5f, 0x9b, 0xfb, 0xff, 0xfd, 0x57, 0x92, 0xf9, 0xbf, 0xed, 0x6f, 0xcf, 0x7f, 0xfe, 0xf9, 0xef, 0xbf, 0xff, 0x5e, 0xfb, 0xef, 0xef, 0x66, 0xfe, 0xff, 0xff, 0x9e, 0x7b, 0xaf, 0xad, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xb3, 0xb1, 0xff, 0x3f, 0x7f, 0xe1, 0xef, 0xff, 0x6b, 0x7d, 0xff, 0xd6, 0xb7, 0xde, 0x7a, 0xf9, 0xfb, 0xff, 0xf5, 0xff, 0xff, 0x66, 0xee, 0xff, 0x53, 0x6f, 0x19, 0xff, 0xff, 0xc6, 0xff, 0x7f, 0xfc, 0xe3, 0x8f, 0xbf, 0x7f, 0xf8, 0x69, 0x85, 0x9f, 0xbf, 0x9b, 0xf7, 0x7f, 0xff, 0x6d, 0xf7, 0xff, 0x76, 0xff, 0x6f, 0xd7, 0xbb, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xf6, 0xfa, 0xeb, 0xf7, 0xe6, 0xfd, 0x9f, 0x7f, 0xe6, 0x9b, 0x6f, 0x9e, 0xff, 0xf4, 0xf9, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xbd, 0xa1, 0xff, 0xf3, 0xcd, 0xb5, 0xdf, 0xfe, 0xe3, 0xef, 0x3e, 0xfe, 0xf1, 0xc7, 0x1f, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0xff, 0x66, 0xe6, 0xff, 0x6f, 0xff, 0xfd, 0xf6, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0x3f, 0x9b, 0x7b, 0xff, 0xf6, 0xbb, 0xef, 0xbe, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xef, 0xa6, 0x7e, 0x5f, 0x2f, 0x9d, 0xf4, 0xda, 0x1d, 0xff, 0xff, 0xf1, 0x85, 0x3f, 0xfe, 0xf8, 0xe3, 0x8f, 0x3f, 0xfe, 0xf8, 0xab, 0x79, 0xff, 0xef, 0x8b, 0x7f, 0xbe, 0xfa, 0xe7, 0xaf, 0xfe, 0x7e, 0xf1, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0x7f, 0x6f, 0xfe, 0xff, 0xdf, 0xba, 0xeb, 0xaf, 0xff, 0xdb, 0xfa, 0xff, 0x5f, 0xfe, 0xff, 0xdf, 0xbe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0x8b, 0x1e, 0x3f, 0xe8, 0xf3, 0x8b, 0x1e, 0x37, 0xd4, 0xe1, 0x86, 0x1f, 0xfe, 0xf9, 0xe1, 0x86, 0x1b, 0xfe, 0xe6, 0xff, 0xdf, 0x2f, 0xfe, 0xfd, 0xf3, 0xcb, 0xef, 0xdf, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xf3, 0xef, 0x3f, 0xff, 0xfc, 0xbf, 0xf9, 0xff, 0xf7, 0xe9, 0xa7, 0x97, 0xfd, 0xfa, 0xed, 0xfd, 0xd7, 0xdf, 0xfe, 0xfa, 0xeb, 0xbf, 0xdf, 0x7e, 0xfb, 0xeb, 0x6f, 0xfe, 0xff, 0xab, 0x6e, 0x9e, 0xaa, 0xbe, 0xa8, 0xea, 0x9f, 0xfa, 0xcc, 0x53, 0x4f, 0x7d, 0xff, 0xcc, 0x37, 0x5f, 0xfd, 0x9b, 0xfd, 0xff, 0x83, 0x0e, 0x7a, 0xf8, 0xaf, 0x83, 0xde, 0x7f, 0xfc, 0xe5, 0x8f, 0x3f, 0xfe, 0xfb, 0xe5, 0x97, 0x3f, 0xfe, 0xe6, 0xff, 0xff, 0x6f, 0xbe, 0xdc, 0xd6, 0xfb, 0x6f, 0xfd, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0xbf, 0xe9, 0xbf, 0xaf, 0x3f, 0xde, 0x72, 0xc9, 0x2e, 0xbf, 0xf6, 0xba, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7d, 0xfd, 0x6b, 0xf6, 0xff, 0x6c, 0xd0, 0xed, 0xa6, 0xef, 0xfd, 0xfc, 0xcf, 0x7f, 0xf6, 0xfd, 0xb7, 0x9f, 0x7f, 0xf7, 0xdb, 0xef, 0xff, 0x1b, 0xef, 0x9f, 0xf7, 0xfb, 0xb7, 0x6f, 0xe7, 0xdf, 0xff, 0xdd, 0x6f, 0xff, 0xff, 0xff, 0xed, 0xfd, 0xbf, 0xff, 0xfe, 0x7f, 0xe6, 0xff, 0xff, 0xae, 0x5f, 0x6f, 0xff, 0xdf, 0xff, 0x7f, 0xdb, 0xd7, 0xef, 0x7e, 0xff, 0xfe, 0xf7, 0xbb, 0xef, 0xff, 0xbf, 0xc9, 0xff, 0xff, 0xde, 0xef, 0x3f, 0xfe, 0xea, 0xef, 0xff, 0x77, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0xfe, 0xdf, 0xff, 0x7f, 0xef, 0xfb, 0x6b, 0xbe, 0xfe, 0xff, 0xf7, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xeb, 0xff, 0xfd, 0xbf, 0xd7, 0xf7, 0xfd, 0xfe, 0xff, 0xff, 0xfd, 0xfd, 0xf7, 0xef, 0xff, 0x66, 0xfd, 0xff, 0xff, 0xf5, 0xbf, 0xfe, 0xab, 0x7e, 0xff, 0xff, 0xee, 0xfb, 0xfb, 0xfe, 0xfb, 0xef, 0xbd, 0xff, 0xff, 0xb7, 0xf9, 0xbf, 0x7f, 0xff, 0x7e, 0xde, 0xec, 0xdf, 0xff, 0xfd, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x6e, 0xfe, 0xff, 0xef, 0xf7, 0xff, 0x5b, 0xff, 0x7b, 0xff, 0xd3, 0x9e, 0x77, 0xde, 0x79, 0xff, 0x9f, 0x5f, 0xfe, 0xf9, 0xff, 0x9b, 0xff, 0xff, 0xfd, 0xbf, 0xff, 0xef, 0xfd, 0xfb, 0xff, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0xdf, 0x77, 0xbf, 0xfd, 0xff, 0xe6, 0xfe, 0xdf, 0xfd, 0xef, 0xff, 0xff, 0xef, 0x7f, 0x5f, 0x7f, 0xfb, 0xeb, 0xbf, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0xbf, 0xbf, 0xf1, 0xff, 0xff, 0xff, 0xfb, 0xfe, 0x7f, 0xd3, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x6e, 0xff, 0xff, 0xef, 0xff, 0xff, 0xb6, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xbf, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xfb, 0x9b, 0xfe, 0xf5, 0xff, 0xf6, 0x2e, 0xab, 0xaf, 0xa6, 0x5e, 0x6f, 0x7e, 0xf3, 0xcd, 0xf7, 0xc5, 0x5f, 0xf3, 0xcd, 0xf7, 0xbf, 0x66, 0x7f, 0xfe, 0xef, 0xff, 0x5a, 0xf2, 0xab, 0xaf, 0xe7, 0x9d, 0xef, 0xbc, 0xf3, 0x7e, 0x35, 0xad, 0xbc, 0xf9, 0xfe, 0xb7, 0x49, 0xff, 0x7f, 0xfd, 0xef, 0x97, 0xfe, 0xfa, 0xcb, 0x25, 0x67, 0xf9, 0xef, 0xbf, 0x5f, 0xff, 0xf9, 0xef, 0xbf, 0xeb, 0x6f, 0xd4, 0xff, 0x9f, 0x7f, 0xff, 0xaf, 0xbf, 0xfe, 0xf0, 0xab, 0x5c, 0xfd, 0xf7, 0xdf, 0xd7, 0xdf, 0xfe, 0xf7, 0xdf, 0x5e, 0x99, 0xfb, 0xf5, 0xfd, 0xbe, 0xde, 0x69, 0xf5, 0xff, 0xf5, 0xdf, 0xff, 0xfe, 0xfb, 0xef, 0xf5, 0xdf, 0xec, 0xfb, 0x6f, 0x6f, 0x06, 0xfe, 0xff, 0xef, 0xff, 0xba, 0xea, 0xbd, 0x7f, 0xff, 0xfb, 0xdf, 0xff, 0xff, 0x7f, 0xf5, 0xdd, 0xfb, 0xff, 0xff, 0xb3, 0x99, 0xff, 0x2f, 0xff, 0xef, 0xbf, 0xba, 0x5f, 0x5f, 0xad, 0x76, 0xb5, 0x5f, 0x7e, 0x59, 0xff, 0x7d, 0xff, 0xff, 0xff, 0x66, 0xec, 0xff, 0x57, 0xff, 0x2f, 0xaf, 0xfd, 0x1f, 0x27, 0x6a, 0x5b, 0xdb, 0xaf, 0xbf, 0xd7, 0xdf, 0xe9, 0xa7, 0x9e, 0x3e, 0x1a, 0xf7, 0x7e, 0xff, 0xcf, 0xb7, 0xdf, 0xff, 0xff, 0xef, 0xd7, 0xbb, 0xfe, 0xda, 0xeb, 0xff, 0xbf, 0xf6, 0xfa, 0x6b, 0x77, 0xe6, 0x7d, 0x9d, 0xff, 0xe6, 0x59, 0xe7, 0x3f, 0x7f, 0xc4, 0xf9, 0xcf, 0x3f, 0xff, 0xfc, 0xff, 0xcf, 0x3f, 0xff, 0xfc, 0x9d, 0xa9, 0xee, 0xe3, 0xed, 0x35, 0xef, 0xf8, 0xfb, 0xef, 0x3f, 0xfe, 0xf1, 0xc7, 0x1f, 0x7f, 0xff, 0xf9, 0xe7, 0x9f, 0xff, 0x64, 0xee, 0xff, 0xbf, 0xff, 0xfd, 0xff, 0xdf, 0x7f, 0xff, 0x7d, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0x3f, 0x9b, 0xf9, 0xff, 0xff, 0xef, 0xef, 0xff, 0xfd, 0xf6, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xef, 0xe6, 0xf6, 0x5f, 0xef, 0xff, 0xf0, 0xc7, 0x6f, 0xff, 0xde, 0xf0, 0x8f, 0x3f, 0xfe, 0xf8, 0xff, 0x8f, 0x3f, 0xfe, 0xf8, 0xbb, 0x61, 0xff, 0xef, 0xaf, 0x3c, 0xfe, 0xf9, 0xef, 0x9f, 0x6e, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xff, 0xf7, 0xdf, 0x7f, 0x7f, 0x6f, 0xfa, 0xf7, 0xff, 0xff, 0xab, 0xff, 0xff, 0xfe, 0xef, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfd, 0xfd, 0xff, 0xdf, 0xff, 0x9b, 0xfe, 0xff, 0xcf, 0x3f, 0xfa, 0xdc, 0xf0, 0xcf, 0x2f, 0x36, 0xbc, 0xe1, 0x86, 0x1f, 0xfe, 0xf8, 0xe1, 0x86, 0x1f, 0xfe, 0xe6, 0xff, 0xff, 0xef, 0xff, 0xff, 0xb2, 0x8d, 0xff, 0xff, 0xf8, 0xcf, 0x3f, 0xff, 0xff, 0xbf, 0xef, 0x3f, 0xff, 0xff, 0xbf, 0xe1, 0xff, 0xff, 0xef, 0xbf, 0xbf, 0xbe, 0xff, 0xff, 0xea, 0xd7, 0xdf, 0xfe, 0xfa, 0xeb, 0xbf, 0xdf, 0x7e, 0xfb, 0xeb, 0x6f, 0xfe, 0xff, 0xfb, 0xef, 0xab, 0x2f, 0xf6, 0xfa, 0xeb, 0xaf, 0xfa, 0xcd, 0x57, 0x5f, 0xfd, 0xff, 0xcc, 0x37, 0x5f, 0xfd, 0x9b, 0xfb, 0xff, 0xff, 0xff, 0xfa, 0xeb, 0xff, 0xbf, 0xef, 0x7e, 0xfc, 0xe5, 0x8f, 0x3f, 0xfe, 0xfb, 0xe5, 0x97, 0x3f, 0xfe, 0xe6, 0xff, 0xff, 0xfd, 0xbc, 0xbf, 0xf6, 0xff, 0xff, 0xfe, 0xf7, 0xfe, 0xff, 0xf6, 0xfd, 0xff, 0x9f, 0x7d, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0x2f, 0xbf, 0xde, 0x90, 0xa9, 0xaf, 0xbe, 0xfe, 0xba, 0x17, 0x5f, 0x7f, 0xfc, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0x6f, 0x3e, 0xff, 0xfc, 0xff, 0x6f, 0xaf, 0xfb, 0xfa, 0xaf, 0xef, 0xf7, 0xf6, 0xfd, 0xef, 0xdf, 0x7f, 0xbf, 0xdd, 0xef, 0xff, 0x9b, 0xff, 0x1f, 0xf7, 0xcf, 0xf3, 0xfd, 0xbe, 0xff, 0xab, 0x3f, 0xf7, 0xfd, 0x67, 0xdf, 0x7e, 0xfd, 0xfb, 0x3f, 0xff, 0x7f, 0x66, 0x7f, 0xdf, 0xf7, 0xf4, 0xef, 0xdb, 0x7f, 0xf7, 0x4d, 0x7f, 0xff, 0x6f, 0xee, 0x9b, 0xfe, 0xf7, 0xef, 0xff, 0xff, 0x9f, 0xe1, 0xbf, 0x7f, 0xdf, 0xfe, 0xaf, 0xff, 0x7f, 0xd3, 0x7d, 0xf7, 0xfb, 0xee, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x67, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xef, 0xff, 0xfa, 0xff, 0x9f, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0x7f, 0xff, 0x99, 0xb5, 0xbf, 0xd9, 0xef, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xdf, 0xfe, 0xff, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xc6, 0xff, 0xab, 0xff, 0xff, 0xef, 0xf7, 0xff, 0x77, 0xff, 0xfd, 0xe5, 0xbf, 0xef, 0x76, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xbf, 0xb1, 0xef, 0xf7, 0xfe, 0xfd, 0xfd, 0xd3, 0x5f, 0xff, 0xff, 0xff, 0xf3, 0xbf, 0xff, 0x7f, 0xff, 0x37, 0xff, 0xff, 0xfb, 0x6f, 0xfc, 0xff, 0xff, 0xbd, 0xa3, 0xf7, 0xff, 0xef, 0xfc, 0xf3, 0x9e, 0x7f, 0xdd, 0x79, 0xe7, 0x9f, 0x77, 0xfe, 0xf1, 0xff, 0x9b, 0xff, 0xff, 0x7f, 0xbf, 0xf7, 0xbf, 0xf7, 0xbf, 0xfd, 0xfb, 0xdf, 0xff, 0xbf, 0xbd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xe6, 0xfe, 0xef, 0xbf, 0xfb, 0xce, 0xfb, 0xef, 0x77, 0x53, 0xe5, 0x6b, 0xff, 0xbd, 0xf7, 0xfe, 0xfb, 0xef, 0xef, 0xbf, 0xbb, 0xf9, 0x77, 0xdd, 0x47, 0x9f, 0x7f, 0xb6, 0xd9, 0x4f, 0xff, 0xde, 0xdf, 0xff, 0xff, 0x7f, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x6d, 0xaa, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0x76, 0xdf, 0xed, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0x1b, 0xfe, 0xbf, 0xd5, 0xfa, 0xfb, 0xef, 0xb9, 0x94, 0x5f, 0x2a, 0x7f, 0xff, 0xe4, 0xf7, 0xc5, 0x7f, 0xf9, 0xf9, 0xff, 0x3f, 0x66, 0xff, 0xfb, 0xec, 0xbe, 0x57, 0xfe, 0xbb, 0xe9, 0x97, 0xfc, 0xaf, 0x7f, 0xff, 0x7e, 0x9b, 0xef, 0xbf, 0xff, 0xff, 0xb7, 0xf9, 0xff, 0x7b, 0xfb, 0xed, 0xb7, 0xd7, 0x5e, 0xef, 0x2f, 0xff, 0xfb, 0xff, 0xbf, 0x4b, 0xfe, 0xfb, 0x6f, 0xd6, 0xff, 0x6f, 0xd6, 0xbf, 0x5f, 0x7b, 0xed, 0xb5, 0xd7, 0x5e, 0xfb, 0xeb, 0xff, 0xfe, 0xfe, 0xef, 0xd4, 0xff, 0xfe, 0xbb, 0xf5, 0x5f, 0x9b, 0xfb, 0xff, 0xd7, 0x66, 0xdb, 0x6d, 0xb6, 0xbd, 0xf7, 0xca, 0xd7, 0xfe, 0xff, 0xef, 0xd5, 0xfa, 0xfe, 0xdb, 0xff, 0xef, 0x66, 0xfe, 0xff, 0xe6, 0xbe, 0x2b, 0xee, 0xbb, 0xe7, 0xbe, 0xfa, 0xd5, 0xff, 0xff, 0x7f, 0xf5, 0xfe, 0xff, 0xff, 0xfd, 0xb3, 0xb1, 0xff, 0xff, 0xbb, 0xef, 0xb5, 0xdb, 0x6e, 0xae, 0xaf, 0x7d, 0xfd, 0xef, 0xff, 0x59, 0xc7, 0x97, 0xdf, 0xd2, 0xff, 0x66, 0xee, 0xff, 0xff, 0xdb, 0x2f, 0xb1, 0xc5, 0x16, 0xdb, 0x2b, 0x5d, 0xe1, 0xff, 0x9f, 0xd7, 0xff, 0xfb, 0xaf, 0xf5, 0xbf, 0x9b, 0xf7, 0xff, 0xbb, 0xfd, 0xb6, 0xdb, 0x6e, 0xfb, 0xed, 0x97, 0xb8, 0xfe, 0xfe, 0xeb, 0x7f, 0xbb, 0xfe, 0xda, 0xff, 0xf7, 0xe6, 0xfd, 0xbf, 0x65, 0xbe, 0xc9, 0x26, 0x9b, 0x6c, 0xf2, 0xd9, 0xcf, 0xbc, 0xff, 0xfc, 0x37, 0xcf, 0x3f, 0xff, 0xff, 0xbd, 0xb1, 0xff, 0xbb, 0x8b, 0x2f, 0xbf, 0xf8, 0xe2, 0x0b, 0x3f, 0xef, 0xf9, 0xe7, 0x9f, 0x6b, 0xff, 0xf1, 0xc7, 0xdf, 0xff, 0x66, 0xe6, 0xff, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x7d, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0x3f, 0x9b, 0xfb, 0xff, 0xbf, 0xff, 0xe6, 0xdb, 0x6f, 0xbf, 0xed, 0xef, 0x7f, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xa6, 0xfe, 0xff, 0x7f, 0xfc, 0xf1, 0xc7, 0x1f, 0x7f, 0xbc, 0xf4, 0x85, 0xbf, 0xff, 0x78, 0xed, 0x8f, 0x3e, 0xfe, 0xff, 0xab, 0x61, 0xff, 0x2f, 0x9f, 0x7f, 0xde, 0x79, 0xe7, 0x9f, 0x2f, 0x7e, 0xb1, 0xee, 0x7f, 0x4f, 0xec, 0xf7, 0xdf, 0xff, 0x7f, 0x6f, 0xfe, 0xff, 0xfe, 0x7f, 0xcb, 0xaf, 0xb7, 0xfe, 0x72, 0xeb, 0xf7, 0xfd, 0xdf, 0xdf, 0xd7, 0xfd, 0xfd, 0xb7, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0xcf, 0x3d, 0xfa, 0xc8, 0x23, 0x8f, 0x3e, 0x3a, 0xfc, 0xe1, 0x87, 0x1f, 0xf4, 0xf8, 0xe1, 0x87, 0x5f, 0xfe, 0xe6, 0xff, 0xff, 0x2f, 0xbf, 0xfc, 0xf2, 0x8b, 0xaf, 0xbf, 0xfe, 0xe5, 0xb7, 0xff, 0xfe, 0xf9, 0xef, 0xbf, 0xff, 0xf6, 0xbf, 0xf9, 0xff, 0xff, 0xcb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0x5b, 0xbd, 0xfc, 0xfb, 0xed, 0xaf, 0xbf, 0xfe, 0xba, 0xef, 0x6f, 0xfe, 0xff, 0xfa, 0xea, 0x9f, 0x7f, 0xfe, 0xfb, 0xef, 0xaf, 0xf9, 0xd4, 0x1b, 0xcf, 0x3c, 0xff, 0xd4, 0x53, 0xff, 0xfd, 0x9b, 0xff, 0xbf, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xba, 0xfc, 0xe3, 0x86, 0x5f, 0xfe, 0xfa, 0xe3, 0x8f, 0x3b, 0xfe, 0x66, 0xff, 0x7f, 0xff, 0xf7, 0xff, 0xdf, 0xbf, 0xef, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0x7f, 0xfb, 0xdf, 0x7f, 0xff, 0xff, 0xbf, 0xe9, 0xff, 0xaf, 0xbf, 0x7c, 0xfa, 0xab, 0xaf, 0xbb, 0xfe, 0xfa, 0xd3, 0x5f, 0x7f, 0xdd, 0xe5, 0x57, 0x5f, 0x7e, 0xfd, 0x6b, 0xfe, 0xff, 0x7b, 0xbb, 0xce, 0x36, 0xff, 0xee, 0xbf, 0xff, 0x7f, 0xfe, 0xf9, 0x77, 0xb7, 0x7e, 0xff, 0x75, 0xff, 0xff, 0x1b, 0xff, 0xfd, 0xf3, 0xcc, 0x7b, 0x7b, 0xf7, 0xdf, 0x7f, 0x6f, 0xef, 0xdb, 0xef, 0x7f, 0xed, 0xfb, 0xed, 0xff, 0xff, 0x7f, 0xe6, 0xff, 0xff, 0xfd, 0x9f, 0xff, 0xfd, 0x75, 0xf7, 0xff, 0x17, 0xa7, 0xdf, 0x7a, 0xfb, 0xff, 0xb7, 0xab, 0xef, 0xff, 0xbf, 0xd9, 0xff, 0xff, 0xff, 0xbf, 0xd5, 0xfe, 0x7c, 0xe3, 0x27, 0xf2, 0xfb, 0xe0, 0xbf, 0x9b, 0xcf, 0xfb, 0x6f, 0xff, 0xff, 0x6f, 0xfe, 0xfd, 0xbf, 0xff, 0xff, 0xdd, 0xff, 0xbb, 0xfe, 0xdb, 0xfb, 0x7f, 0xbf, 0xff, 0xfb, 0xef, 0xe7, 0xdf, 0xfe, 0xfe, 0x9b, 0xff, 0x75, 0xfe, 0xff, 0xba, 0xfe, 0x1b, 0xfd, 0xef, 0xd7, 0xff, 0xff, 0xff, 0xef, 0x73, 0xff, 0xff, 0xf7, 0xdc, 0xbf, 0x66, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xef, 0xff, 0xff, 0x7d, 0xff, 0xfd, 0xff, 0xf7, 0xff, 0xbf, 0xf9, 0xff, 0x7f, 0xff, 0x7e, 0xdf, 0xeb, 0xff, 0x6d, 0xfd, 0xbf, 0xdf, 0xdf, 0xff, 0xdb, 0xcd, 0xfd, 0xdf, 0xff, 0xeb, 0x6f, 0x3e, 0x3f, 0xee, 0xf7, 0xff, 0xda, 0xff, 0xef, 0xff, 0xe3, 0x1f, 0x7e, 0xfa, 0xf9, 0xd7, 0xff, 0xef, 0xff, 0xf9, 0xff, 0x9b, 0xff, 0x7a, 0xfd, 0xdb, 0xef, 0xf7, 0xff, 0xff, 0xeb, 0xfd, 0xef, 0x9b, 0xf5, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0x66, 0xff, 0xdf, 0xfe, 0xff, 0xee, 0xdb, 0xfe, 0x7f, 0xdf, 0xff, 0xbf, 0xfb, 0x26, 0x2f, 0xad, 0xff, 0xbf, 0x6d, 0xfe, 0xbf, 0xf1, 0xff, 0xff, 0xeb, 0xff, 0xff, 0x5c, 0xdf, 0x8b, 0xfe, 0xf9, 0x7b, 0xff, 0xbf, 0x7f, 0xde, 0xd7, 0xdf, 0x9f, 0xff, 0x67, 0xfe, 0xff, 0xff, 0x7f, 0xfb, 0xaf, 0xff, 0xff, 0xbf, 0xbf, 0xff, 0xbf, 0xff, 0x1d, 0xdf, 0xff, 0xfb, 0xff, 0xf5, 0xfb, 0x9b, 0xfe, 0xe5, 0xd7, 0xf1, 0xff, 0xff, 0xff, 0xb1, 0xff, 0x4f, 0xfd, 0xff, 0xe5, 0x2f, 0x45, 0x7e, 0x4a, 0x4d, 0xe5, 0xbf, 0x66, 0x7f, 0xfa, 0xf9, 0xfd, 0xff, 0xff, 0xff, 0xec, 0xe7, 0x5f, 0xff, 0xfc, 0xf9, 0x4f, 0x9f, 0x5f, 0x56, 0xd9, 0xf9, 0xb7, 0x49, 0xff, 0xfe, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xaf, 0xfe, 0xff, 0xcf, 0xbf, 0x4b, 0x65, 0x39, 0xef, 0x92, 0xf3, 0x6f, 0xd4, 0xbf, 0xff, 0xff, 0xff, 0xfc, 0xf3, 0x9f, 0x3f, 0xeb, 0xff, 0xff, 0xff, 0xdf, 0xd6, 0x7b, 0xe7, 0x3b, 0xf5, 0x5e, 0x9b, 0xfb, 0xe7, 0xfd, 0xff, 0xde, 0xed, 0xaf, 0xbf, 0xff, 0xdf, 0xff, 0xfe, 0xf9, 0x6f, 0xf5, 0x79, 0x4e, 0x7b, 0x45, 0xee, 0x06, 0x7e, 0xb8, 0xff, 0xfe, 0x16, 0xeb, 0xeb, 0xef, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0x7d, 0x5f, 0x51, 0x5f, 0xfd, 0xb3, 0x99, 0xff, 0xee, 0xff, 0xef, 0xfd, 0xff, 0xff, 0xeb, 0xaf, 0xf7, 0xff, 0xff, 0xfe, 0x5f, 0xee, 0xbd, 0xde, 0x57, 0xfb, 0x66, 0xec, 0xbf, 0xf7, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfa, 0x2b, 0xf1, 0xe1, 0x27, 0x1e, 0xd6, 0x63, 0xe1, 0xaf, 0xb4, 0xb8, 0x1b, 0xf7, 0x7f, 0xff, 0x6f, 0xff, 0xff, 0xf6, 0xf3, 0xff, 0xd7, 0xbb, 0xfe, 0xfa, 0xeb, 0x7f, 0xbe, 0xfe, 0xb2, 0xcb, 0x77, 0x66, 0xfd, 0x9f, 0xff, 0xf7, 0xff, 0x67, 0xbf, 0xf9, 0xf7, 0xf9, 0xcf, 0x3f, 0xff, 0xfc, 0x3f, 0xcf, 0x3f, 0xff, 0xac, 0xbd, 0xb9, 0xfe, 0x43, 0xed, 0xbe, 0xdf, 0x40, 0xfb, 0xef, 0x3e, 0xff, 0xf9, 0xe7, 0x9f, 0x6b, 0xff, 0xf9, 0xc6, 0x1b, 0xfd, 0x66, 0xee, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xdf, 0xff, 0xff, 0x7f, 0xff, 0xfb, 0xef, 0xbf, 0xfb, 0xef, 0x9b, 0x6f, 0xbe, 0x3b, 0x9b, 0xf9, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xfd, 0xd7, 0xff, 0x7e, 0xf7, 0xdf, 0xbf, 0xef, 0xe6, 0xf6, 0x0b, 0xaf, 0xbf, 0x7f, 0xea, 0xfb, 0xed, 0xff, 0xf5, 0xa5, 0x12, 0x7e, 0x78, 0xf5, 0x8d, 0x17, 0x4e, 0xf8, 0xbb, 0x61, 0xff, 0xe2, 0xcb, 0xef, 0xb6, 0xd8, 0xab, 0xbb, 0xff, 0x5e, 0xf1, 0xc5, 0x1f, 0x5f, 0xff, 0xb1, 0xc5, 0x17, 0x7f, 0x6f, 0xfe, 0xb7, 0xfc, 0x7a, 0xff, 0x2f, 0xfb, 0xff, 0xff, 0xff, 0x5d, 0x77, 0x99, 0xe7, 0x97, 0xdf, 0xee, 0xbb, 0xe5, 0xff, 0x9b, 0xff, 0xaf, 0x8f, 0x3e, 0xff, 0xe8, 0xf3, 0xcf, 0x3f, 0x3f, 0xd5, 0x41, 0x87, 0x1d, 0xf4, 0xd8, 0xe1, 0x07, 0x1d, 0xfe, 0xe6, 0xff, 0xeb, 0x2f, 0xbf, 0xff, 0xfa, 0xfb, 0xef, 0xff, 0xf9, 0xff, 0xbf, 0x7f, 0x7f, 0xf1, 0xfd, 0x1f, 0x5f, 0xff, 0xbf, 0xe1, 0xff, 0xfa, 0xeb, 0xef, 0xbf, 0xfe, 0xfb, 0xfb, 0xff, 0xdb, 0xbf, 0x7e, 0xdb, 0x4d, 0xaf, 0xdd, 0xf4, 0xd2, 0xed, 0x6f, 0xfe, 0xbf, 0xfa, 0xf2, 0xbf, 0xaf, 0xfe, 0xfb, 0xef, 0xbf, 0xf1, 0xd5, 0x33, 0xd7, 0xdc, 0xdf, 0xcd, 0x57, 0xd7, 0xfc, 0x9b, 0xfb, 0xaf, 0xbf, 0xfc, 0xff, 0xeb, 0xff, 0xff, 0xfd, 0xbf, 0xfb, 0xe3, 0x97, 0x5d, 0xe4, 0xda, 0xe5, 0x0f, 0x5d, 0xfe, 0xe6, 0xff, 0xca, 0xff, 0xff, 0xff, 0xd4, 0x7f, 0x3f, 0xf7, 0xfb, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xed, 0xff, 0xdf, 0xfe, 0xbf, 0xf9, 0xff, 0xaf, 0xbe, 0xfe, 0x7a, 0xeb, 0xaf, 0xbf, 0xfa, 0xfa, 0xd7, 0x5f, 0x7b, 0xfd, 0x31, 0x57, 0x5f, 0x77, 0xfd, 0x6f, 0x36, 0x7f, 0xbf, 0xfb, 0xfd, 0xf6, 0xdf, 0xbf, 0xbf, 0xff, 0x7f, 0xbc, 0xf9, 0xef, 0xff, 0x5e, 0xfd, 0xfb, 0xf5, 0xff, 0x9b, 0xbf, 0xff, 0xdf, 0xff, 0x3f, 0xff, 0xfd, 0xef, 0x7f, 0xff, 0xd7, 0xbd, 0xd3, 0xb6, 0xff, 0x7f, 0xcf, 0xfd, 0xff, 0x7e, 0xe6, 0xff, 0xbf, 0x3f, 0xff, 0xff, 0xb7, 0xfd, 0xff, 0xdb, 0xf7, 0x3f, 0xed, 0xf7, 0xea, 0xf7, 0xbb, 0xfd, 0xaf, 0xf7, 0xaf, 0x71, 0xff, 0xdf, 0xeb, 0xff, 0x2f, 0xdf, 0x7f, 0xdd, 0xff, 0xdb, 0xbd, 0xb7, 0xfe, 0x5f, 0xa9, 0xbf, 0xe9, 0xc7, 0xf3, 0x67, 0xec, 0xdf, 0xbb, 0xfa, 0xff, 0xf6, 0xff, 0xf7, 0xff, 0xfe, 0xbf, 0x7d, 0x5f, 0xfe, 0xad, 0xfd, 0xdf, 0x3f, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xbc, 0xff, 0xff, 0x9e, 0xef, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xbf, 0xc6, 0x5f, 0x7f, 0xcf, 0xff, 0xff, 0xf6, 0xff, 0xfd, 0x3f, 0xe3, 0xcf, 0xf7, 0xdf, 0xef, 0xef, 0x6f, 0xbf, 0xff, 0xbf, 0xbf, 0xd1, 0xff, 0xcf, 0xef, 0xff, 0xfe, 0x1e, 0xff, 0x7f, 0xec, 0x97, 0xff, 0xfd, 0xf6, 0xfe, 0xed, 0xbf, 0xde, 0xff, 0xfe, 0x6f, 0xfc, 0x3d, 0xe7, 0xac, 0xd0, 0x57, 0x3e, 0xef, 0xfc, 0xff, 0x9e, 0xee, 0xdf, 0x6f, 0x6b, 0xec, 0xff, 0xff, 0x7f, 0xff, 0x9b, 0xfa, 0xaf, 0xfe, 0xd6, 0xfa, 0xdf, 0x7e, 0x9f, 0xfd, 0xdf, 0xb7, 0xfd, 0x9f, 0xbf, 0xfb, 0xff, 0xfe, 0xff, 0xbf, 0xbf, 0xe6, 0xfe, 0xab, 0x5f, 0xfb, 0xef, 0x7f, 0x67, 0x7e, 0x9f, 0xfe, 0xa7, 0xbb, 0x59, 0xbe, 0x7f, 0x76, 0x7f, 0xfd, 0xbf, 0xbf, 0xf9, 0xbf, 0xfb, 0xdf, 0xff, 0xfe, 0x7a, 0xfb, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x9f, 0xfb, 0xff, 0xf9, 0xf7, 0xff, 0xff, 0x6f, 0xee, 0xfd, 0xfe, 0xff, 0xff, 0xbf, 0xbb, 0xee, 0xff, 0xbf, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0x5f, 0xff, 0xfd, 0xdf, 0xff, 0x1b, 0x7e, 0x75, 0xf7, 0x95, 0x7f, 0x7f, 0xfd, 0xf1, 0xb5, 0xd7, 0xbe, 0xf6, 0xda, 0xfb, 0xff, 0xbe, 0xf7, 0xdf, 0x0b, 0xef, 0xa6, 0xff, 0xaf, 0xff, 0xb3, 0x5b, 0xcf, 0x6b, 0xff, 0xd7, 0xc3, 0xf7, 0xf7, 0x53, 0x2f, 0xf5, 0xb7, 0x72, 0xff, 0xff, 0xbf, 0xd9, 0xff, 0xee, 0xff, 0xec, 0xff, 0xfd, 0xfe, 0x7f, 0xf5, 0x7c, 0xff, 0xfd, 0xf2, 0x4b, 0x7e, 0x9f, 0xfd, 0xff, 0xff, 0x6d, 0xfe, 0xb7, 0x5f, 0xff, 0xbb, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xdd, 0x4f, 0xff, 0xe5, 0x97, 0xdb, 0xef, 0xf5, 0xff, 0x7f, 0x1b, 0xf5, 0xb5, 0xe7, 0xff, 0x7e, 0xfe, 0x8f, 0xff, 0xff, 0x7f, 0xdd, 0xd3, 0x6f, 0xf9, 0xf5, 0xda, 0x6b, 0xff, 0xff, 0x57, 0xe6, 0xbe, 0x6d, 0xff, 0x95, 0xf7, 0xdb, 0x0b, 0xf5, 0xfd, 0xf6, 0x37, 0xf3, 0x44, 0x33, 0xe5, 0x37, 0xf3, 0xfe, 0xff, 0xbb, 0x91, 0xff, 0xee, 0x7f, 0xe7, 0xfe, 0x5b, 0xfe, 0xbd, 0xbf, 0x7e, 0xf7, 0xbd, 0xd3, 0x4f, 0x7d, 0xef, 0xbd, 0xff, 0xff, 0x6c, 0xec, 0xbf, 0xcb, 0xff, 0xfa, 0xfd, 0x97, 0xbe, 0x3f, 0xff, 0xdf, 0x6d, 0x7f, 0x65, 0xd4, 0xdf, 0xab, 0xed, 0xff, 0xbf, 0x19, 0xf9, 0xbf, 0xbd, 0x57, 0x4e, 0x3c, 0xec, 0xfe, 0xc3, 0xcf, 0xdf, 0xf2, 0x7b, 0xf5, 0x15, 0xde, 0x78, 0xfb, 0xff, 0x6f, 0x86, 0xbd, 0xd9, 0xff, 0xfb, 0xfd, 0xb7, 0xfd, 0x7e, 0xdb, 0xfd, 0xec, 0xfd, 0xfd, 0xb3, 0xeb, 0xfd, 0xff, 0xfd, 0xff, 0xbd, 0x79, 0x9f, 0xe6, 0x6b, 0x7c, 0xfe, 0xd9, 0x67, 0x9c, 0x79, 0x7e, 0xf3, 0x55, 0xfe, 0xf2, 0x7c, 0xff, 0x7d, 0xfe, 0x7f, 0x6d, 0xa6, 0xbf, 0xf8, 0xfb, 0xcf, 0x35, 0xd3, 0xfc, 0x73, 0xcd, 0x5f, 0xfc, 0xfd, 0xf6, 0x9f, 0x5f, 0x7f, 0xfd, 0xf7, 0xbf, 0x99, 0xf8, 0xef, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x9f, 0xff, 0xbf, 0xf7, 0xdf, 0xff, 0xff, 0xee, 0xe6, 0xfe, 0xfb, 0xff, 0xff, 0xeb, 0x6f, 0xff, 0xff, 0xfe, 0xfb, 0xfd, 0xff, 0xf7, 0xff, 0xf7, 0xfd, 0xb7, 0xff, 0xdf, 0xbb, 0xb9, 0xfd, 0x47, 0xff, 0x2d, 0xdc, 0xd1, 0xe7, 0x4b, 0x7f, 0xfc, 0xe3, 0xbf, 0xd7, 0xff, 0xf8, 0xef, 0xbf, 0xff, 0xff, 0x6e, 0xde, 0xff, 0xf9, 0xe7, 0x8b, 0x7f, 0xd6, 0xc9, 0xe2, 0x9d, 0xfd, 0xec, 0xd3, 0xd5, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xdf, 0x9b, 0xff, 0x7f, 0xbb, 0xfe, 0xea, 0xfb, 0x6f, 0xff, 0xff, 0xff, 0xbf, 0x5f, 0x7f, 0xbd, 0xff, 0xfe, 0x5d, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xa3, 0x8f, 0x2e, 0xf7, 0xfc, 0xfb, 0xcf, 0x3d, 0x7f, 0xd4, 0x55, 0xd7, 0x1b, 0x7f, 0xd1, 0xe1, 0x9f, 0xbf, 0xf9, 0xff, 0xe2, 0xcb, 0x7f, 0xfb, 0xf9, 0xfe, 0xcb, 0x6f, 0x7e, 0xdd, 0xf5, 0x15, 0xf7, 0x5e, 0xfd, 0xf5, 0xfb, 0xef, 0x6f, 0xfe, 0xbf, 0xfe, 0xf2, 0xdf, 0xfb, 0xff, 0x7f, 0xf2, 0xff, 0x5f, 0x1f, 0xfd, 0x74, 0xfb, 0x4b, 0x57, 0x3d, 0xff, 0xff, 0x9b, 0xff, 0xaf, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xee, 0x57, 0xfb, 0xd5, 0x75, 0x4f, 0x55, 0xff, 0xf5, 0xff, 0xff, 0xe6, 0xff, 0xeb, 0x7f, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xf4, 0xfe, 0x59, 0xe6, 0xbf, 0x75, 0xff, 0xfb, 0xef, 0xbf, 0xf9, 0xbf, 0xff, 0xdb, 0x4f, 0xbf, 0xfd, 0xfe, 0xff, 0xef, 0xbf, 0xff, 0xe7, 0x27, 0xf7, 0xff, 0xe7, 0xe9, 0xff, 0xff, 0x6f, 0xf6, 0xff, 0xeb, 0xa6, 0xba, 0xde, 0x7a, 0xe3, 0xa7, 0x37, 0xfe, 0xe5, 0xd3, 0x5d, 0x7f, 0xec, 0xd5, 0xd6, 0x5f, 0xfb, 0x9b, 0xff, 0xb7, 0xbe, 0xff, 0xbf, 0xf9, 0xff, 0xd7, 0x6c, 0xdb, 0xff, 0xff, 0xf7, 0xe9, 0xbf, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xff, 0xff, 0xfe, 0xf9, 0xef, 0x3f, 0xff, 0x1e, 0xf2, 0x7d, 0xff, 0xbd, 0x6f, 0xbf, 0x6f, 0x7f, 0xfb, 0xfe, 0xfb, 0x9f, 0xf9, 0xff, 0x7b, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfd, 0xb5, 0xd3, 0xef, 0xfe, 0xf3, 0xee, 0xff, 0xe7, 0xff, 0xff, 0xff, 0x6f, 0xf8, 0x3e, 0xe7, 0xfa, 0x63, 0xfd, 0x37, 0xf9, 0xff, 0xbb, 0x7f, 0x6e, 0xbd, 0xf5, 0xff, 0x7f, 0xff, 0xbd, 0xff, 0xfe, 0x99, 0xff, 0xf9, 0xef, 0xfd, 0xfd, 0x7f, 0xf6, 0xff, 0xbf, 0x7b, 0xff, 0x77, 0x5b, 0x7d, 0xff, 0x7b, 0xd7, 0xdf, 0xff, 0xff, 0xe6, 0xff, 0xef, 0xad, 0xff, 0xef, 0xb3, 0xdd, 0xff, 0x7f, 0xf4, 0xe5, 0xd3, 0x3f, 0xff, 0xbf, 0xf5, 0xcf, 0xff, 0xf7, 0xbf, 0xf9, 0xeb, 0xff, 0xdf, 0x7f, 0x0f, 0xff, 0xff, 0x7f, 0xef, 0xfa, 0xff, 0xeb, 0xbf, 0xf9, 0x7e, 0xfd, 0xe5, 0x7f, 0xff, 0x6f, 0xfa, 0xee, 0x75, 0xe7, 0xff, 0xef, 0xf5, 0xdf, 0xbf, 0xaf, 0xfd, 0xfa, 0xff, 0xfe, 0xff, 0xfb, 0xee, 0xff, 0xbf, 0xf9, 0x9a, 0xff, 0xff, 0x7f, 0xc3, 0x7f, 0xdf, 0xfe, 0xfb, 0xdf, 0xf8, 0x7f, 0xfd, 0x7d, 0xf8, 0x6d, 0xe7, 0xef, 0xfb, 0xff, 0xff, 0xe6, 0xff, 0xbf, 0x7e, 0xdf, 0xef, 0xff, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x56, 0x7f, 0xb5, 0xff, 0xff, 0xff, 0xbf, 0xb9, 0xf7, 0xe2, 0xcf, 0xff, 0xfe, 0x7d, 0xf7, 0x48, 0xbf, 0xf7, 0x9b, 0xf4, 0x5f, 0xff, 0xfd, 0xff, 0xc7, 0xfd, 0xff, 0x6e, 0xee, 0xff, 0xbe, 0xf9, 0x7f, 0x7f, 0xff, 0xfd, 0xfb, 0xef, 0x57, 0x7f, 0xdd, 0xf3, 0x7f, 0x7f, 0xff, 0x71, 0xfe, 0xff, 0x9b, 0xfd, 0xbf, 0x7f, 0xdf, 0xbf, 0xff, 0xfe, 0xff, 0xfe, 0xea, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xdf, 0x9f, 0xf5, 0xff, 0xef, 0x86, 0xff, 0xff, 0xb9, 0xf2, 0xf2, 0xef, 0x6f, 0xff, 0xb2, 0xca, 0x9f, 0xf7, 0x5f, 0xcf, 0x93, 0x5d, 0x36, 0xeb, 0xfc, 0x8f, 0xd9, 0xff, 0x3f, 0xfb, 0xf9, 0xff, 0xfb, 0xfe, 0xff, 0xfc, 0xf3, 0x3f, 0xff, 0xd4, 0xf3, 0xe7, 0xb7, 0x76, 0xfe, 0xff, 0x6d, 0xfe, 0xa7, 0xce, 0x23, 0xab, 0xbf, 0x97, 0xff, 0x6f, 0x9e, 0x55, 0x7d, 0xfb, 0xf5, 0x7c, 0xeb, 0xae, 0xf7, 0xdf, 0xff, 0x9b, 0xf5, 0xa9, 0x3f, 0xff, 0x3e, 0xef, 0xec, 0xff, 0xcf, 0x38, 0xd7, 0xbf, 0x7d, 0x3c, 0xff, 0xfe, 0xf9, 0xff, 0xff, 0xd7, 0xe6, 0xfe, 0x7f, 0x37, 0xd8, 0xfe, 0xde, 0xef, 0xf6, 0xbd, 0x52, 0xbf, 0xd7, 0xeb, 0xfb, 0x7f, 0x94, 0xf2, 0xed, 0xff, 0xbb, 0x99, 0xff, 0x5f, 0x78, 0xff, 0xbf, 0xf7, 0xee, 0xff, 0xff, 0xfd, 0xaf, 0xfc, 0xff, 0xff, 0x5f, 0xd7, 0xd4, 0xff, 0xff, 0x6c, 0xec, 0xbf, 0xd6, 0x7b, 0xe9, 0xaf, 0xbf, 0x5f, 0xef, 0xdf, 0x5f, 0x7f, 0xf9, 0xaf, 0xbf, 0x59, 0x6f, 0xfd, 0xff, 0xbf, 0x99, 0xfb, 0xbf, 0xed, 0x57, 0xde, 0x6b, 0xef, 0xf7, 0xc7, 0x1a, 0xdf, 0xde, 0xaf, 0xf7, 0xed, 0x57, 0x76, 0xff, 0xff, 0xef, 0xe6, 0xfd, 0xff, 0x7f, 0xff, 0x6f, 0xbf, 0xfd, 0x78, 0xff, 0xff, 0x7e, 0xfb, 0xfd, 0xfe, 0xdf, 0xaf, 0xff, 0xff, 0xff, 0xbd, 0x79, 0xff, 0x7f, 0x9f, 0xff, 0xe6, 0xff, 0x6f, 0x9f, 0x7f, 0xe7, 0xbf, 0xdf, 0x38, 0xfa, 0xaf, 0xb3, 0xff, 0xff, 0x7f, 0x6f, 0xec, 0xd7, 0x6e, 0xd3, 0xed, 0xbf, 0xff, 0xbe, 0x63, 0xcd, 0x7f, 0xf7, 0xfd, 0x66, 0xdf, 0x63, 0x9e, 0xfd, 0xf7, 0xbf, 0x99, 0xf9, 0xf7, 0xcf, 0x3f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfd, 0xef, 0x9f, 0xff, 0xff, 0xff, 0xec, 0xff, 0xff, 0xcf, 0xe6, 0xbe, 0xff, 0xfb, 0xee, 0xff, 0x7f, 0xbf, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xbb, 0xa9, 0xff, 0xdf, 0x8f, 0xaf, 0xbd, 0xf6, 0xda, 0x0f, 0xef, 0xfe, 0xef, 0x95, 0x37, 0xff, 0x7d, 0xe1, 0xfd, 0xff, 0xff, 0x6a, 0xde, 0xff, 0x7a, 0xe3, 0xab, 0xac, 0xfe, 0xfa, 0x63, 0x8b, 0x7f, 0x7d, 0x95, 0x4f, 0xb7, 0x4f, 0x7c, 0xfb, 0xff, 0xdf, 0x9b, 0xff, 0xbf, 0xd3, 0xcc, 0xff, 0xff, 0xbd, 0xdf, 0xfa, 0xf3, 0xdf, 0x5f, 0xaf, 0xff, 0xdf, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xe6, 0xff, 0xef, 0xb3, 0xc7, 0x3f, 0xff, 0xfc, 0xb3, 0x8f, 0x2e, 0xf7, 0xb0, 0xef, 0xa6, 0xbf, 0xe4, 0xf1, 0xe7, 0x9f, 0xbf, 0xf9, 0xff, 0xfb, 0xcf, 0xb5, 0xff, 0xfe, 0xf2, 0xcf, 0x67, 0xff, 0xfd, 0xf5, 0xf7, 0xff, 0xfe, 0xfb, 0xf6, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xfb, 0xfb, 0xbf, 0xff, 0x7e, 0xfb, 0xeb, 0x7b, 0x3f, 0xfd, 0xfe, 0xbb, 0xef, 0xfe, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0xfe, 0xf8, 0xeb, 0xaf, 0x3f, 0xde, 0xf8, 0xa3, 0x5f, 0x4b, 0x9d, 0x17, 0xfe, 0x78, 0x5f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xef, 0xbf, 0xb7, 0xff, 0xfb, 0xff, 0xbd, 0xb7, 0xfc, 0xf7, 0xf6, 0xf9, 0xe7, 0xdb, 0xf7, 0xf6, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf6, 0x5b, 0xef, 0xa7, 0xff, 0xf3, 0xff, 0xef, 0x7e, 0xfb, 0xe5, 0xff, 0x5f, 0x7e, 0xf9, 0xed, 0x7f, 0xff, 0x6f, 0xfa, 0xff, 0xe9, 0xaf, 0xbe, 0xf8, 0xea, 0xeb, 0xaf, 0xbe, 0xfe, 0xf5, 0xc7, 0x5f, 0x74, 0xbd, 0x35, 0xd7, 0x5f, 0xfb, 0x9a, 0xbd, 0xc7, 0x1e, 0xff, 0xbd, 0xe7, 0x7b, 0xff, 0xff, 0xd9, 0x67, 0x37, 0xfe, 0xdf, 0x7f, 0xdf, 0xdf, 0xef, 0xff, 0xff, 0xc6, 0xff, 0xdf, 0xfe, 0xff, 0x7f, 0xdf, 0xd7, 0xf7, 0xff, 0xbe, 0x7f, 0xde, 0xef, 0xff, 0x77, 0xff, 0x7f, 0xf7, 0xff, 0x9f, 0xf9, 0xff, 0xff, 0x7f, 0x7f, 0x7d, 0xdb, 0xff, 0xff, 0x7e, 0xdf, 0xaf, 0xbd, 0xfe, 0xf7, 0xff, 0xf2, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0x3f, 0xdf, 0x74, 0xe9, 0xa9, 0xef, 0x7f, 0xff, 0xfd, 0x7e, 0xdd, 0xff, 0xff, 0x94, 0x53, 0x7b, 0xfd, 0x5f, 0xfe, 0x9b, 0xff, 0xff, 0xff, 0xf7, 0xb7, 0xdf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xef, 0x73, 0xb3, 0xf7, 0xfe, 0xf7, 0xff, 0xe6, 0xef, 0xff, 0xbb, 0x37, 0xfe, 0xf6, 0xff, 0xfb, 0x73, 0xfe, 0x7d, 0xdf, 0xff, 0xff, 0xfd, 0x7f, 0xc7, 0x7f, 0xfb, 0xbf, 0xf9, 0x7f, 0xf7, 0xd3, 0xef, 0xbf, 0xff, 0xff, 0x9f, 0x6f, 0xfb, 0xfb, 0xf4, 0x97, 0x1f, 0x7d, 0xfb, 0xe5, 0xf7, 0xfd, 0x6f, 0xf6, 0xfe, 0xff, 0xfe, 0xfb, 0xb7, 0xfd, 0xbf, 0x8f, 0x7b, 0xff, 0xef, 0xfb, 0xff, 0xff, 0x73, 0xff, 0xff, 0xe6, 0xff, 0x9b, 0xfd, 0xfb, 0xff, 0x73, 0xbf, 0xff, 0xc7, 0x0b, 0x7f, 0x2f, 0xfd, 0xef, 0xb5, 0x9f, 0xee, 0xff, 0xd7, 0xf7, 0xee, 0xff, 0x66, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x7f, 0xeb, 0xaf, 0xff, 0xfb, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xcf, 0xa6, 0xff, 0xbe, 0xff, 0xbd, 0xb7, 0xdf, 0xbf, 0xd7, 0xde, 0x5c, 0xab, 0x7f, 0xa6, 0xff, 0xff, 0x6f, 0xfc, 0xfb, 0xed, 0xf9, 0xff, 0xb7, 0xfb, 0xff, 0xd7, 0x8f, 0xff, 0xf7, 0xf8, 0xfb, 0x9f, 0xff, 0xff, 0xdd, 0xff, 0xff, 0x98, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf3, 0xff, 0xfd, 0xff, 0xfa, 0xff, 0xbf, 0xff, 0xff, 0xf7, 0x7f, 0x9f, 0xff, 0xff, 0xff, 0xa6, 0xfc, 0xfb, 0xf9, 0xf2, 0x93, 0x6f, 0xfa, 0xfc, 0xfe, 0xff, 0xdd, 0x5f, 0xff, 0xfd, 0xf7, 0xff, 0x5c, 0xd9, 0xfd, 0xaf, 0xd9, 0xff, 0x7f, 0xfe, 0xf9, 0xff, 0x9d, 0x3f, 0xff, 0xff, 0xff, 0xf5, 0xdf, 0x77, 0xff, 0xfd, 0xff, 0x6d, 0xb6, 0xff, 0x6d, 0xde, 0xa7, 0x56, 0x6f, 0x9a, 0xff, 0xbf, 0xff, 0x2f, 0xff, 0x5f, 0xff, 0xfd, 0x7f, 0xde, 0xeb, 0x7f, 0x8b, 0xe7, 0xdf, 0x1b, 0xf5, 0xbd, 0xe7, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xd7, 0xff, 0x7f, 0xff, 0xf7, 0xfe, 0xd3, 0x4f, 0xf7, 0x57, 0xe6, 0xfe, 0xfa, 0xff, 0xdb, 0xf0, 0xd2, 0x7b, 0xff, 0xfd, 0xb7, 0xfd, 0x97, 0x7e, 0x32, 0x6b, 0x77, 0x73, 0x6a, 0xb3, 0xbb, 0x99, 0xff, 0xef, 0xfd, 0xb7, 0xbf, 0xf4, 0xef, 0xff, 0xff, 0xfe, 0xd5, 0xbc, 0xd3, 0xce, 0x7b, 0xb7, 0xdc, 0x73, 0xff, 0x6c, 0xec, 0xbf, 0xbe, 0xff, 0xea, 0x2f, 0xbd, 0xc7, 0xff, 0xbf, 0x5d, 0x7b, 0x7d, 0xf7, 0xd5, 0x5f, 0x7f, 0x37, 0xd7, 0xbf, 0x19, 0xf8, 0xbf, 0xbf, 0xf7, 0x0a, 0x4b, 0xff, 0xfc, 0xf3, 0x3e, 0xd6, 0xdb, 0x7a, 0xe9, 0xa5, 0xd7, 0xcb, 0x5b, 0xef, 0x6f, 0xe6, 0x3d, 0xff, 0xf6, 0xfb, 0xff, 0x3f, 0xdf, 0x7f, 0xff, 0xff, 0x7e, 0xb9, 0xff, 0xb6, 0xdb, 0xff, 0xbf, 0xfc, 0xfb, 0xbd, 0x79, 0xdf, 0x7f, 0xbe, 0x75, 0xfe, 0xf9, 0x67, 0x9f, 0xff, 0xe6, 0xe7, 0xdf, 0x7f, 0xff, 0xad, 0xbf, 0xcf, 0xfa, 0x7e, 0x6f, 0xec, 0xfb, 0xfe, 0x3b, 0xcd, 0x37, 0xd7, 0xe4, 0xf3, 0x6f, 0x77, 0xff, 0xf5, 0xd7, 0x5f, 0x63, 0xa7, 0xd1, 0xf7, 0xbf, 0x99, 0xf9, 0xf7, 0xff, 0xff, 0xbf, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfb, 0xff, 0xce, 0xe6, 0x7e, 0xff, 0xff, 0xff, 0xbf, 0xaf, 0xbf, 0xff, 0xfe, 0xef, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xbb, 0xb9, 0xff, 0xff, 0x6f, 0x37, 0xf5, 0xf7, 0xc2, 0x5f, 0xaf, 0xfd, 0xed, 0xa7, 0x97, 0x7e, 0x7a, 0xfd, 0xa4, 0xff, 0xff, 0x6e, 0xde, 0xff, 0xfd, 0xab, 0x9f, 0x7e, 0x96, 0xf8, 0xe7, 0x8b, 0xde, 0xfd, 0xf5, 0xd5, 0x5f, 0x5f, 0x7e, 0xf1, 0xce, 0xdf, 0x9b, 0xff, 0xaf, 0xbf, 0xde, 0xfb, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xeb, 0xa3, 0xcf, 0x3f, 0xff, 0xf8, 0xf3, 0xcf, 0x3f, 0xff, 0xd0, 0xe1, 0x87, 0x1d, 0xfc, 0xd1, 0xe7, 0x9f, 0xbf, 0xf9, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xfa, 0xdf, 0x2f, 0xff, 0xf1, 0xf7, 0xdf, 0x5f, 0xff, 0xf3, 0xfd, 0xd7, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0xfe, 0xf7, 0xeb, 0xdf, 0xbf, 0xbd, 0xf6, 0xd2, 0xed, 0xff, 0xff, 0xf5, 0xff, 0x9b, 0xff, 0xbf, 0xff, 0xfb, 0xef, 0xbf, 0xaf, 0xfe, 0xfb, 0xe7, 0x7f, 0xfb, 0xd5, 0x55, 0xdf, 0xfc, 0xff, 0x7d, 0xf5, 0xff, 0xe6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x63, 0x8f, 0x5f, 0xee, 0xff, 0x5f, 0xff, 0xbf, 0xf9, 0xff, 0xf5, 0x9b, 0x3f, 0xff, 0xff, 0xfe, 0xff, 0x6f, 0xbe, 0xff, 0xe5, 0x97, 0x5f, 0xde, 0xff, 0xe7, 0x97, 0xff, 0x6f, 0xfe, 0xff, 0xeb, 0xad, 0xbf, 0xfe, 0xf2, 0xeb, 0xaf, 0x3f, 0xee, 0xe5, 0xd7, 0x5f, 0x7d, 0xfd, 0xb5, 0xc7, 0x5b, 0xff, 0x9b, 0xcd, 0xf7, 0xbb, 0xff, 0xbb, 0xcf, 0xdf, 0xfd, 0xf8, 0xd8, 0x5f, 0x3d, 0xfb, 0xba, 0xf3, 0x7e, 0x7e, 0xdf, 0xfd, 0xff, 0xe6, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xdd, 0xff, 0x27, 0xde, 0x7a, 0xff, 0xff, 0xdf, 0xf7, 0x5f, 0xde, 0xff, 0xf7, 0xfb, 0x9f, 0xf9, 0xff, 0xbf, 0xfd, 0xdf, 0xff, 0xfe, 0xff, 0xbd, 0xfa, 0xf4, 0xdd, 0xba, 0xfb, 0xaf, 0xff, 0xef, 0xb7, 0xdf, 0xff, 0x6f, 0xfc, 0x3f, 0xfe, 0xf8, 0xeb, 0xbc, 0xbf, 0xf6, 0x7f, 0x6b, 0xff, 0x77, 0xff, 0xf5, 0xd7, 0xdf, 0xef, 0xbf, 0xf1, 0xff, 0x19, 0xff, 0xef, 0xff, 0xef, 0xfb, 0xbb, 0x76, 0xef, 0xbf, 0x7a, 0xff, 0xff, 0xf6, 0xda, 0xeb, 0xbd, 0xef, 0xff, 0xff, 0xff, 0xe6, 0xed, 0xff, 0xef, 0xbf, 0xff, 0xb9, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0x7f, 0x3f, 0xff, 0xfc, 0xf3, 0xdf, 0x5f, 0xfb, 0xbf, 0xf1, 0xbf, 0xff, 0x7f, 0xff, 0xb9, 0xfb, 0xff, 0xff, 0x7f, 0xef, 0xfb, 0xef, 0xf3, 0xdf, 0xfb, 0xff, 0xf9, 0xf7, 0xff, 0x6f, 0xfc, 0xff, 0xff, 0xdf, 0xfe, 0xbe, 0xf6, 0xf7, 0xef, 0xfd, 0xff, 0xfb, 0xb7, 0x9d, 0x77, 0xf2, 0xff, 0xed, 0xe6, 0xfb, 0x1b, 0xfe, 0xff, 0xff, 0xff, 0xee, 0x33, 0xce, 0x1f, 0xfd, 0xa7, 0xff, 0xf7, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0xf7, 0xf6, 0xff, 0xe6, 0xff, 0xfe, 0xff, 0xa7, 0xff, 0xf7, 0xdb, 0xaf, 0xff, 0x5f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x7f, 0xff, 0xb7, 0xf9, 0xf7, 0xf7, 0xff, 0xfb, 0x5d, 0x7f, 0x57, 0xfd, 0xad, 0xff, 0xfd, 0xe7, 0xdf, 0x7f, 0x3f, 0xed, 0xf5, 0x97, 0xff, 0x6f, 0xf6, 0xbf, 0xf6, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x3f, 0xb3, 0xfc, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf5, 0xfb, 0x9b, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xef, 0xef, 0x6f, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xfd, 0xff, 0xfb, 0x86, 0xff, 0xab, 0xaf, 0xbf, 0xc9, 0x2f, 0xbf, 0xfc, 0xe4, 0x9b, 0xbf, 0xf7, 0xff, 0xcb, 0xe7, 0x9f, 0x7f, 0x7e, 0xff, 0x8f, 0xd9, 0x5f, 0xff, 0xff, 0x6f, 0xf1, 0x95, 0x3f, 0xff, 0xf9, 0xf2, 0xff, 0xfd, 0xd7, 0x4b, 0x7f, 0xf5, 0xd5, 0xf4, 0xff, 0x6d, 0xfe, 0xf7, 0xdb, 0x3f, 0xef, 0x7f, 0xbf, 0xfa, 0xef, 0xff, 0x5f, 0xe3, 0xbd, 0xf5, 0x56, 0x5b, 0x6f, 0x9d, 0xbd, 0xff, 0x9b, 0xf5, 0xa5, 0x97, 0xce, 0xfb, 0xff, 0xac, 0xff, 0xff, 0x3b, 0xd7, 0x7f, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0x4f, 0xff, 0xd7, 0xe6, 0xfe, 0x6b, 0xa5, 0x9f, 0xff, 0xc7, 0x7f, 0xff, 0xfd, 0x77, 0xff, 0xf7, 0x5f, 0x3b, 0xdd, 0x34, 0xd3, 0xde, 0xab, 0xbb, 0x99, 0xff, 0xdf, 0xfd, 0xe2, 0xfe, 0x58, 0xef, 0xbf, 0xef, 0xca, 0xf7, 0xfd, 0xff, 0xf6, 0xbf, 0xef, 0x3e, 0x73, 0xef, 0x6c, 0xec, 0xff, 0xbf, 0xff, 0x6f, 0xff, 0x95, 0xfe, 0xff, 0x9f, 0x5f, 0xef, 0xfd, 0xff, 0xfe, 0xf7, 0xdf, 0xff, 0xfd, 0xbd, 0x99, 0xf9, 0xaf, 0xbd, 0x56, 0xfb, 0x17, 0xad, 0xf4, 0x53, 0x52, 0xd7, 0x70, 0x7f, 0x2d, 0xb4, 0xd7, 0x5e, 0x7b, 0x87, 0xef, 0x66, 0xfd, 0xfb, 0xee, 0xfb, 0xef, 0xdf, 0xde, 0x7b, 0xff, 0xbf, 0x7e, 0xfb, 0xdf, 0x77, 0xdf, 0x7d, 0xff, 0xfd, 0xb2, 0xbd, 0x79, 0xff, 0x3e, 0xbb, 0xac, 0xf3, 0xd1, 0xe7, 0x9f, 0xff, 0xf7, 0xbf, 0xdd, 0xf7, 0xd9, 0x65, 0x9f, 0x7d, 0x3e, 0x7b, 0x6f, 0xec, 0x9f, 0x7e, 0xfa, 0xef, 0xbf, 0xec, 0xf4, 0xf3, 0xed, 0x73, 0x77, 0xfd, 0xf5, 0xd7, 0x4f, 0x3f, 0xfd, 0xe6, 0xbd, 0x99, 0xf9, 0x66, 0x8f, 0xfd, 0xff, 0x3f, 0xff, 0xff, 0xef, 0xbf, 0xfd, 0xcf, 0x3f, 0xfb, 0x6c, 0xb3, 0xdd, 0xb6, 0xef, 0xcf, 0xe6, 0xfe, 0xda, 0x6e, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xdf, 0xff, 0xfe, 0xdd, 0x76, 0xbb, 0xed, 0xb7, 0xfd, 0xfd, 0xab, 0xa9, 0xdf, 0x5b, 0x6f, 0xfd, 0xfd, 0xd7, 0xc2, 0x1f, 0xbf, 0xfc, 0xbf, 0xff, 0xd7, 0x5e, 0x7b, 0xad, 0xb5, 0x97, 0xfe, 0x6e, 0xd8, 0xbf, 0xfb, 0x2e, 0xbf, 0x77, 0xbe, 0xf8, 0xef, 0xad, 0xfd, 0x7d, 0x95, 0xdf, 0x7f, 0xfd, 0xed, 0xf7, 0xc5, 0xdf, 0x98, 0xff, 0xef, 0xbf, 0xff, 0xfa, 0xeb, 0xaf, 0xfe, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xe6, 0xff, 0xef, 0xb3, 0x8f, 0x3e, 0xfa, 0xe8, 0xf3, 0xcf, 0x3c, 0xff, 0xd1, 0x47, 0x1f, 0x7d, 0xf4, 0xd1, 0x47, 0x9f, 0xbf, 0xf9, 0xef, 0xfe, 0xfb, 0xaf, 0xbf, 0xfe, 0xf2, 0xdf, 0x6f, 0x7e, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x6f, 0xf8, 0xff, 0xfe, 0xfb, 0xeb, 0xaf, 0xbf, 0xfc, 0xf7, 0xfb, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0xfe, 0xfa, 0xef, 0xab, 0xaf, 0xfe, 0xfb, 0xee, 0x57, 0xff, 0x7d, 0xf5, 0xd5, 0x57, 0x5f, 0xfd, 0xf7, 0xff, 0xe6, 0xfe, 0xfb, 0xef, 0xff, 0xff, 0xfa, 0xeb, 0xff, 0xbf, 0xff, 0xe4, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xde, 0xfb, 0x6f, 0xff, 0xfc, 0xff, 0xff, 0xeb, 0xbf, 0xff, 0xef, 0xf6, 0x9f, 0x7c, 0xff, 0xfd, 0xa7, 0xf7, 0x6f, 0xfa, 0xff, 0xab, 0xae, 0xbb, 0xfe, 0xfa, 0xe9, 0x8f, 0xb7, 0xfa, 0xe5, 0x93, 0x5d, 0x6f, 0xad, 0x75, 0xd7, 0x1d, 0xff, 0x9a, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0x8f, 0xff, 0xff, 0xd3, 0xbb, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0x9f, 0x7f, 0xfe, 0xfd, 0xff, 0xc6, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xfe, 0x7d, 0xf7, 0xdf, 0xef, 0x7f, 0xff, 0xfa, 0xff, 0x7f, 0x75, 0xf6, 0xfd, 0xfb, 0x9f, 0xf9, 0xff, 0xf7, 0xff, 0xff, 0x7d, 0xff, 0xff, 0xbf, 0xbf, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xf6, 0xbf, 0xb7, 0xee, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xbb, 0xeb, 0xbf, 0xff, 0xf7, 0xf7, 0xd3, 0x7d, 0xbb, 0x75, 0xfd, 0xd7, 0x5f, 0x7b, 0xf9, 0xb7, 0xff, 0x9b, 0xff, 0xff, 0xf7, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xef, 0xff, 0xff, 0x7d, 0xf7, 0xb5, 0xfb, 0x76, 0xef, 0xff, 0xe6, 0xff, 0xfb, 0xef, 0xbf, 0xf7, 0xfe, 0xef, 0xfb, 0xff, 0xae, 0x7f, 0xc7, 0xff, 0x7d, 0xdd, 0xf6, 0xd7, 0x7f, 0xff, 0xbf, 0xf9, 0xe7, 0xdf, 0x7f, 0xff, 0xff, 0xed, 0xec, 0xff, 0xcf, 0xff, 0xff, 0xed, 0xff, 0x9f, 0xff, 0xda, 0xeb, 0x6b, 0xff, 0x6f, 0xfe, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xbf, 0xbf, 0xcf, 0x2f, 0xed, 0x7f, 0xbf, 0xdf, 0xdf, 0xeb, 0xff, 0xff, 0x5f, 0x7f, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x6b, 0x7f, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xe7, 0xf7, 0xff, 0xe6, 0xdf, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0x3f, 0xbb, 0xff, 0x6e, 0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xea, 0xbf, 0xbf, 0x7e, 0xff, 0xff, 0xbf, 0xff, 0x7b, 0x77, 0xdf, 0x5f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x6f, 0xfc, 0x9f, 0xfe, 0xb3, 0x4d, 0xbf, 0xff, 0xfb, 0xdf, 0xdf, 0xfe, 0x77, 0xfd, 0xf3, 0xdf, 0x2f, 0xfb, 0xec, 0xe3, 0xfd, 0x99, 0xfe, 0xff, 0xff, 0xfe, 0xda, 0xf7, 0xff, 0xff, 0xfb, 0xfe, 0x7d, 0xdb, 0xfd, 0xfd, 0xd7, 0x6f, 0xbf, 0xff, 0xde, 0xff, 0xa6, 0xff, 0xab, 0xbf, 0xbd, 0xfb, 0xda, 0x7b, 0xff, 0xd6, 0x93, 0xdf, 0xf7, 0xff, 0xff, 0x3f, 0xdf, 0x7f, 0xf3, 0xfd, 0xaf, 0xd9, 0xff, 0xef, 0xef, 0xe9, 0xff, 0xff, 0x7e, 0xdd, 0x7c, 0x57, 0xfb, 0xff, 0xff, 0x5f, 0x7f, 0xfd, 0xe5, 0xd7, 0xff, 0x6d, 0xfe, 0xf7, 0xff, 0x7b, 0xaf, 0xfd, 0xa7, 0xfd, 0xfa, 0xff, 0xff, 0xe7, 0xbf, 0xf6, 0xd6, 0x5b, 0x6d, 0xbd, 0x55, 0xfe, 0x1b, 0xf5, 0xa5, 0xff, 0x5e, 0x7b, 0xe9, 0xed, 0xbf, 0xfe, 0xff, 0xf7, 0xff, 0xe7, 0xbd, 0xfe, 0xfa, 0xeb, 0xaf, 0x9f, 0xd7, 0xc6, 0xbe, 0xe9, 0xb6, 0xfd, 0xf6, 0x9a, 0x38, 0xff, 0xbd, 0xf4, 0x37, 0xd3, 0xcf, 0x7b, 0xed, 0xb5, 0xd7, 0x5e, 0xff, 0xbb, 0x99, 0xff, 0xff, 0x6f, 0xbf, 0xfd, 0xf7, 0xee, 0xbf, 0xaf, 0x7f, 0xf5, 0x5d, 0xf1, 0xfe, 0xab, 0xaf, 0xbe, 0xfa, 0xff, 0x6c, 0xec, 0xff, 0xf7, 0xdb, 0xfb, 0xff, 0xbf, 0x51, 0xea, 0xab, 0x7f, 0x7d, 0xfd, 0xf5, 0xff, 0xfb, 0xfb, 0xef, 0xff, 0xbf, 0x99, 0xf9, 0xaf, 0xfd, 0xfe, 0xde, 0x6b, 0x6c, 0xbf, 0xf6, 0xd2, 0xd7, 0x5e, 0x7f, 0xfd, 0x35, 0xd4, 0x5e, 0x7b, 0xed, 0xef, 0x46, 0xfd, 0xfb, 0xfe, 0xdb, 0xef, 0xbe, 0x5f, 0x7f, 0xff, 0xed, 0xee, 0xff, 0xff, 0x7f, 0xdf, 0x7d, 0xf7, 0xfd, 0xf7, 0x9d, 0x71, 0xff, 0x2f, 0xbf, 0xff, 0xf3, 0xcf, 0xc7, 0x9f, 0x7f, 0xde, 0xf3, 0xff, 0xf4, 0xdf, 0x67, 0x9f, 0x7d, 0x76, 0x79, 0x6f, 0xec, 0x9f, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xe3, 0x4d, 0x7f, 0xf8, 0xfd, 0xf5, 0xd2, 0x4b, 0x7f, 0xbd, 0xf4, 0xbb, 0x99, 0xf9, 0x6b, 0x9f, 0xff, 0xf6, 0xd9, 0xef, 0xfc, 0xef, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xec, 0xb7, 0xcf, 0x3e, 0xdb, 0xce, 0xe6, 0xfe, 0xdb, 0xfd, 0xbe, 0xbd, 0xf6, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x77, 0xfb, 0xed, 0xb5, 0xdb, 0xee, 0xbb, 0xb9, 0xff, 0xdb, 0xeb, 0xbf, 0xfd, 0xf6, 0xff, 0x1f, 0x6f, 0xf4, 0xe1, 0xf5, 0xdf, 0x5f, 0x6b, 0xed, 0xb5, 0xd6, 0xfe, 0x6e, 0xde, 0xbf, 0xeb, 0xe2, 0xbb, 0xef, 0xfe, 0xfb, 0xef, 0x8f, 0x7e, 0x7c, 0xf9, 0xd5, 0x7f, 0xff, 0xfd, 0xf7, 0x5f, 0xdf, 0x9b, 0xff, 0xef, 0xbf, 0xfe, 0xbe, 0xfb, 0xfe, 0xff, 0x7f, 0xfb, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xe6, 0xff, 0xef, 0xa3, 0xcf, 0x3e, 0xfb, 0xfc, 0x71, 0xcf, 0x3d, 0xe7, 0xd8, 0x6d, 0x37, 0x9d, 0xf4, 0xd1, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xfe, 0x0b, 0xef, 0xbf, 0xff, 0x77, 0xdf, 0x7f, 0x7f, 0xf9, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xfa, 0xef, 0xbf, 0xff, 0x7f, 0xff, 0xff, 0x5f, 0xbf, 0xff, 0xf4, 0xd3, 0x4f, 0x7f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xbf, 0xbe, 0xfe, 0xeb, 0xaf, 0x7f, 0xde, 0xf9, 0xe3, 0x3f, 0xeb, 0x97, 0x57, 0x54, 0x50, 0x5f, 0x7d, 0xf5, 0xff, 0xe6, 0xff, 0xfb, 0xaf, 0xbf, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xfe, 0xfe, 0x79, 0xe7, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xb9, 0xff, 0xfe, 0xdb, 0x6f, 0xbf, 0xff, 0xf2, 0xff, 0xff, 0x7f, 0xe9, 0xed, 0x9f, 0xdf, 0x7e, 0xba, 0xe9, 0x97, 0xfe, 0x6f, 0xfa, 0xef, 0xcb, 0xaf, 0xb5, 0xd2, 0xfa, 0xeb, 0xaf, 0xbf, 0xbe, 0xa5, 0xd7, 0x5f, 0x2d, 0xd9, 0x35, 0x57, 0x5b, 0xff, 0x9b, 0x3f, 0x5f, 0x3a, 0xf3, 0xee, 0xfe, 0x9f, 0xdb, 0xe8, 0xe3, 0xdf, 0x9f, 0xf7, 0x7f, 0x5d, 0xfd, 0xff, 0xff, 0xf7, 0xff, 0x46, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xe7, 0x9d, 0xbf, 0xf7, 0xff, 0xed, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xe9, 0xff, 0x5f, 0xff, 0xff, 0xdd, 0xfb, 0xfb, 0xb7, 0x5f, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdf, 0x7f, 0xff, 0x6f, 0xfe, 0xbe, 0xfc, 0xee, 0xaf, 0x4f, 0x37, 0xec, 0xff, 0xaf, 0xdf, 0xfb, 0xf5, 0xe5, 0xc7, 0x6f, 0x7d, 0xfd, 0xf5, 0xff, 0x99, 0xff, 0xbf, 0xff, 0xce, 0xfe, 0xbf, 0xdf, 0xdf, 0xef, 0x5f, 0xbf, 0xfe, 0xff, 0x7b, 0xfb, 0xef, 0x7b, 0xef, 0xf5, 0xff, 0xe6, 0xef, 0xfb, 0xbb, 0x6f, 0xee, 0xdb, 0xff, 0xbd, 0xaf, 0xef, 0xaf, 0xd7, 0x5f, 0xfb, 0xdf, 0xbe, 0xd1, 0x56, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xf6, 0xff, 0x7c, 0xff, 0xff, 0xf3, 0xfc, 0xff, 0xff, 0xed, 0xf7, 0xff, 0xff, 0xff, 0x5d, 0xb7, 0xff, 0x6f, 0xfe, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xef, 0xf3, 0xf1, 0xc7, 0xff, 0xf3, 0xff, 0xf9, 0xe7, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x5b, 0x7d, 0xbc, 0xfd, 0x8f, 0xbf, 0xff, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xe6, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xbf, 0xbf, 0xfe, 0xdf, 0x5f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0x7f, 0xef, 0xa7, 0xbf, 0xf6, 0x3f, 0xeb, 0xba, 0xd3, 0xff, 0x31, 0xd3, 0x6f, 0xb7, 0xf5, 0xf7, 0xd7, 0xef, 0x6f, 0xf8, 0xdf, 0xff, 0xfa, 0xef, 0x3f, 0xff, 0xfc, 0xfa, 0xef, 0xff, 0x6f, 0xbd, 0x65, 0xff, 0xff, 0xbf, 0xf8, 0xf4, 0xff, 0x9b, 0xff, 0xff, 0xb7, 0x7f, 0xed, 0xef, 0xdf, 0xff, 0xff, 0x7a, 0xff, 0xff, 0xef, 0xbf, 0xbd, 0xf6, 0x7f, 0xfd, 0xff, 0xff, 0x86, 0xff, 0xfb, 0xac, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x37, 0x3e, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x8f, 0xd9, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x65, 0xef, 0xff, 0xda, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0xfe, 0xa7, 0xf6, 0x6b, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xd5, 0xcf, 0xb7, 0xdc, 0xd4, 0xf8, 0x4f, 0x9f, 0xfd, 0xff, 0x9b, 0xf5, 0xbd, 0xb7, 0x9e, 0x7b, 0xf3, 0xff, 0xff, 0xff, 0xed, 0xf7, 0xfb, 0xcf, 0xbf, 0x7f, 0xfe, 0xdf, 0x4f, 0xff, 0xd7, 0xe6, 0xfe, 0xfa, 0xeb, 0x9b, 0x1f, 0xbf, 0xdd, 0xaf, 0xfd, 0xff, 0xb7, 0xdd, 0xcf, 0x97, 0xbf, 0xfc, 0xf3, 0xdf, 0xff, 0xbb, 0x99, 0xff, 0xaf, 0xa9, 0xe7, 0xda, 0x5b, 0xf7, 0xcb, 0xff, 0x7f, 0xf7, 0xd5, 0x70, 0xdf, 0x7d, 0x75, 0xdc, 0x77, 0xff, 0x6c, 0xec, 0xbf, 0xfe, 0xfa, 0xee, 0xbf, 0xff, 0x5d, 0x62, 0xff, 0xdc, 0x2f, 0xfd, 0xf7, 0xf7, 0x5f, 0x5f, 0xff, 0x3d, 0xbe, 0x99, 0xfb, 0xbf, 0xbf, 0xf7, 0xfb, 0xff, 0x7f, 0xbf, 0xb6, 0x3f, 0x77, 0x7a, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0x7f, 0x9f, 0xef, 0xe6, 0xfd, 0xff, 0xf6, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0xef, 0x6e, 0xf9, 0xfd, 0xe7, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbd, 0x79, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xdf, 0xff, 0xbf, 0xff, 0xde, 0xb3, 0xff, 0xfa, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0x7b, 0x6f, 0xec, 0xd7, 0xfe, 0xfb, 0xef, 0xb3, 0xcf, 0x7e, 0xdb, 0xef, 0x7f, 0xf6, 0xdd, 0xb6, 0xdf, 0x6f, 0xbf, 0xfd, 0xf6, 0xbd, 0x99, 0xf9, 0xff, 0xdf, 0xff, 0xbf, 0xfd, 0xfe, 0xef, 0xff, 0xff, 0xfd, 0xef, 0xdf, 0xff, 0x7e, 0xfb, 0xf7, 0xb7, 0xff, 0xcf, 0xa6, 0xfe, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xdf, 0xfd, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xbb, 0xb9, 0xff, 0xff, 0xeb, 0xbf, 0xff, 0x78, 0xe3, 0x6f, 0x3f, 0x7c, 0xa9, 0xfd, 0xf7, 0x7f, 0x7f, 0xff, 0xf7, 0xdf, 0xff, 0x6a, 0xde, 0xff, 0xfd, 0xe2, 0xcf, 0xff, 0xff, 0xfd, 0x27, 0x8d, 0x5f, 0x7c, 0xf9, 0xe7, 0x97, 0xcf, 0xbe, 0xf9, 0xe4, 0xdf, 0x9b, 0xfe, 0xaf, 0xbf, 0x6e, 0xfe, 0xff, 0x3f, 0xff, 0xde, 0xf7, 0xdf, 0x5f, 0xbf, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xa6, 0xff, 0xeb, 0xa3, 0x8f, 0x3f, 0xf7, 0xfc, 0xf3, 0xcf, 0x3f, 0xfd, 0xf9, 0xc7, 0x9f, 0x7f, 0xfc, 0xd9, 0xe7, 0x9f, 0xbf, 0xf9, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xfe, 0xe7, 0xdb, 0xff, 0x7f, 0xff, 0xef, 0xdf, 0x7f, 0x7f, 0xfd, 0xf7, 0xdf, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xff, 0xf6, 0xff, 0x7f, 0x7f, 0xfb, 0xf5, 0xf7, 0xff, 0xff, 0xff, 0xf5, 0xff, 0x9b, 0xff, 0xbf, 0xff, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xef, 0x7f, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0x86, 0xbf, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf2, 0xcb, 0x2b, 0xbf, 0xfc, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xfd, 0x97, 0x7f, 0x7e, 0xf7, 0xcf, 0xbe, 0xff, 0x6f, 0xfe, 0x7f, 0x6b, 0xae, 0xb9, 0x6c, 0xf2, 0x8b, 0x2f, 0xbf, 0xe6, 0xf5, 0x46, 0x5f, 0x7e, 0xb5, 0xe5, 0xd7, 0x5f, 0xff, 0x9a, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xfb, 0xec, 0xf3, 0x9f, 0xfb, 0xbf, 0xfe, 0xfe, 0xff, 0xdf, 0x7f, 0xdf, 0xff, 0xc6, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xcf, 0xff, 0x97, 0xeb, 0xee, 0x5d, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0x9f, 0xf9, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe7, 0xc7, 0xfd, 0x7f, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0x5a, 0xff, 0xff, 0xbf, 0xfe, 0x7b, 0xef, 0x9f, 0x7e, 0xff, 0xf4, 0xd7, 0x55, 0x7f, 0xfd, 0xff, 0xef, 0x9b, 0xff, 0x7f, 0x7f, 0xfe, 0xdf, 0xff, 0x9f, 0xff, 0xbf, 0x3f, 0xff, 0x7d, 0xff, 0x7a, 0x6d, 0xdf, 0xdf, 0xfe, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xea, 0xbb, 0xfe, 0xfe, 0xfd, 0x7b, 0xbf, 0xfd, 0xe0, 0xbf, 0xff, 0xff, 0xbf, 0xf9, 0xef, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xdf, 0xdf, 0xdf, 0xff, 0xef, 0xff, 0xdf, 0x7f, 0xff, 0xdf, 0xff, 0xfd, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xef, 0xff, 0xff, 0xef, 0x9f, 0x75, 0xff, 0xff, 0xff, 0xfb, 0x9b, 0xff, 0x7f, 0xfe, 0xdf, 0xff, 0xff, 0x8f, 0x7f, 0xfb, 0xfd, 0xff, 0xf5, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xef, 0xdf, 0xbd, 0xff, 0xbd, 0xff, 0x79, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0x7e, 0xfb, 0xeb, 0xa7, 0xff, 0xff, 0xff, 0xeb, 0xf7, 0xf5, 0x6f, 0xff, 0x9b, 0x4f, 0xff, 0xc9, 0xf7, 0xd7, 0xff, 0x6f, 0x7c, 0xff, 0xfe, 0xfb, 0xaf, 0xff, 0xff, 0x7f, 0xf2, 0xfe, 0xff, 0xfe, 0xff, 0xf7, 0xd7, 0x3e, 0xfb, 0xdf, 0xf4, 0xff, 0x99, 0xef, 0xaf, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xff, 0xfb, 0x7f, 0xfd, 0xfe, 0xdf, 0xdf, 0xfb, 0xff, 0xff, 0xa6, 0xff, 0xff, 0xfc, 0xfe, 0x5f, 0x27, 0xbf, 0xe9, 0xfd, 0x52, 0x8f, 0xf7, 0xdf, 0x7f, 0xfd, 0xed, 0xbf, 0xff, 0xff, 0x8d, 0xd9, 0xff, 0x7f, 0xfd, 0xff, 0xf3, 0x9f, 0xff, 0xfb, 0x79, 0xd5, 0xff, 0xfd, 0xf7, 0x5f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x6d, 0xfe, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xfb, 0xde, 0xef, 0xff, 0xcd, 0x3d, 0xff, 0xff, 0xeb, 0xaf, 0xff, 0xff, 0xbf, 0x9b, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xd9, 0xe7, 0x9f, 0x7d, 0xd6, 0x79, 0xff, 0xff, 0xd7, 0xe6, 0xfe, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0x7f, 0x6f, 0xbd, 0x66, 0xff, 0xf7, 0xcc, 0xfb, 0xfd, 0x7c, 0xf3, 0xed, 0xff, 0xba, 0xb9, 0x3f, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7b, 0xef, 0xd6, 0xff, 0xbd, 0xf2, 0x5e, 0x8d, 0xf7, 0xd5, 0xff, 0xff, 0x6c, 0xee, 0xef, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xfb, 0x7e, 0xeb, 0xff, 0xff, 0xfd, 0xf5, 0xd7, 0x5f, 0x2f, 0x9d, 0xff, 0xbf, 0x99, 0xf9, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xbd, 0xb5, 0xce, 0xff, 0xdf, 0x7f, 0xfd, 0xff, 0xff, 0x7f, 0xaf, 0xff, 0xef, 0x86, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xcd, 0xfe, 0xff, 0xfd, 0xe7, 0xdf, 0x7f, 0xfe, 0xf9, 0xe7, 0xbd, 0x79, 0x57, 0x7f, 0xfe, 0xfd, 0xe7, 0xff, 0xe7, 0x9f, 0x7f, 0xe6, 0xff, 0xff, 0xfa, 0xfb, 0xaf, 0xff, 0xff, 0xfe, 0x73, 0x6f, 0xec, 0xfb, 0x76, 0xfb, 0x6e, 0xbf, 0xff, 0x58, 0xf3, 0xcd, 0x7f, 0xff, 0xdd, 0xf7, 0xd8, 0x6d, 0xab, 0x6d, 0xf6, 0xbf, 0x99, 0xf9, 0xf7, 0xdb, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0x3f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xf9, 0xef, 0xb7, 0xff, 0x4f, 0xe6, 0xbe, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xfb, 0xee, 0xfb, 0xff, 0xfe, 0xff, 0xdf, 0xbf, 0xff, 0xfd, 0xfd, 0xff, 0xbb, 0xb9, 0xff, 0xfe, 0x6f, 0xb7, 0xff, 0xff, 0xc7, 0x1f, 0x3f, 0xfc, 0xff, 0xf5, 0xd7, 0xdf, 0x7f, 0xfd, 0xf5, 0xd7, 0xfb, 0x68, 0xde, 0x9f, 0xdc, 0xeb, 0xcd, 0xff, 0xff, 0x7b, 0xe2, 0x9b, 0xff, 0x7f, 0xb5, 0xdd, 0xbb, 0xff, 0x7e, 0xfb, 0xe4, 0xcf, 0x9b, 0xff, 0xff, 0xbf, 0xef, 0xfb, 0xff, 0x7f, 0xfb, 0xdd, 0xfb, 0xff, 0x7f, 0xf7, 0xfd, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xe6, 0xff, 0xfb, 0xe3, 0x8f, 0x3f, 0x7f, 0xfc, 0xb3, 0x8f, 0x3d, 0xff, 0xf1, 0xe7, 0x9f, 0x7f, 0xf6, 0xf1, 0xe7, 0x9f, 0xbf, 0xf9, 0xff, 0xfe, 0xcf, 0xbf, 0xff, 0x7f, 0xf7, 0xff, 0x2f, 0xff, 0xff, 0xfd, 0xd7, 0xff, 0xff, 0xfd, 0xf7, 0xd7, 0xdf, 0x6f, 0xfe, 0x9f, 0xfe, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xeb, 0xff, 0xff, 0xfd, 0xfd, 0xd7, 0xff, 0xff, 0xff, 0xf5, 0xff, 0x9b, 0xff, 0xff, 0xbf, 0xf9, 0xfb, 0xff, 0x7d, 0xfe, 0xfb, 0xe7, 0xff, 0xff, 0xfd, 0xf5, 0xf5, 0xf7, 0xdf, 0x7f, 0xff, 0xff, 0xe6, 0xfd, 0xfb, 0xef, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0x79, 0xdf, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0xef, 0x7a, 0xef, 0xff, 0xbf, 0xed, 0xb7, 0x5f, 0x6e, 0xff, 0xed, 0xfe, 0xff, 0x6f, 0xee, 0xff, 0xeb, 0xaf, 0xbe, 0xfe, 0xda, 0xa9, 0x2f, 0xb7, 0xf6, 0x75, 0xd7, 0x5d, 0x7f, 0xfd, 0x65, 0x57, 0x5f, 0xff, 0x9a, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xf3, 0xff, 0xdf, 0x7d, 0xff, 0xfb, 0xef, 0xdf, 0xff, 0xff, 0xfe, 0xc6, 0xff, 0xff, 0xe7, 0xff, 0xfb, 0xf7, 0xff, 0x77, 0xff, 0xfe, 0x7f, 0xbf, 0xff, 0xff, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0x9b, 0xe9, 0xff, 0xff, 0x7f, 0xf3, 0xff, 0xbf, 0xf7, 0xfe, 0x65, 0xdf, 0xdf, 0xfe, 0x7b, 0xff, 0xef, 0x7f, 0xff, 0xfd, 0xf3, 0x6c, 0xfc, 0xff, 0xfb, 0xf2, 0xe3, 0xff, 0xff, 0x7d, 0xfc, 0xdb, 0xff, 0xff, 0xfd, 0xff, 0xd7, 0x5f, 0x7d, 0xdd, 0xfe, 0xfb, 0x9b, 0xff, 0xff, 0xff, 0xf6, 0xfe, 0xff, 0xff, 0xff, 0xaf, 0xeb, 0xff, 0xf6, 0xf7, 0xff, 0x6b, 0xbf, 0xff, 0xfe, 0xf7, 0xff, 0xa6, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfc, 0xef, 0xf7, 0xff, 0xf7, 0xff, 0xf5, 0xf3, 0xff, 0xbf, 0xbf, 0xf9, 0xdb, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xee, 0xff, 0xff, 0xbf, 0xbf, 0xff, 0x7f, 0xff, 0xdf, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xef, 0xef, 0xff, 0xff, 0xfe, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xf9, 0xff, 0xdf, 0x9f, 0xfe, 0xf9, 0xfb, 0xff, 0xff, 0xfb, 0xff, 0x5f, 0xff, 0xd7, 0xfd, 0x7f, 0xfd, 0xff, 0x7f, 0xff, 0x6f, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf7, 0x6f, 0x5e, 0xfd, 0xff, 0xff, 0xff, 0x7e, 0xf9, 0xdf, 0xff, 0xff, 0x99, 0xfd, 0xff, 0xff, 0xfb, 0x7f, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdf, 0xfd, 0xbb, 0xff, 0xff, 0x66, 0xff, 0xcf, 0x3f, 0xdf, 0xfc, 0xf3, 0xc3, 0x3f, 0xff, 0xfc, 0xef, 0x9e, 0xfb, 0xee, 0xf9, 0xef, 0x9f, 0x7f, 0xfe, 0x9f, 0xf9, 0xff, 0xf7, 0xcf, 0x7f, 0xdf, 0xfd, 0xf1, 0x8f, 0x3f, 0xdb, 0xdd, 0xef, 0xff, 0x7f, 0xfe, 0xff, 0xef, 0xbf, 0xf7, 0x6f, 0xfe, 0xdf, 0xfe, 0xfb, 0xef, 0x9f, 0x1b, 0xfe, 0xfb, 0xcf, 0x6f, 0xbf, 0xfd, 0x77, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0xfd, 0xfd, 0xdf, 0x7f, 0xb7, 0xfd, 0x7d, 0xd7, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xa6, 0xff, 0xee, 0xbf, 0xff, 0xfe, 0xfb, 0xe7, 0xbf, 0xff, 0xfb, 0xe6, 0xdf, 0x7f, 0xef, 0xf9, 0xb7, 0xde, 0x7f, 0xff, 0xbf, 0xf9, 0xff, 0x7c, 0xf3, 0xcf, 0x7f, 0xff, 0xfd, 0xf3, 0xcf, 0x7f, 0xfe, 0xf9, 0xe3, 0x8f, 0x7f, 0xfe, 0xb9, 0x67, 0xf7, 0x6f, 0xfe, 0xbf, 0xfb, 0xbe, 0xfb, 0xef, 0xbf, 0xff, 0xbe, 0xfb, 0xdb, 0x76, 0xff, 0xed, 0xf7, 0xdd, 0x7a, 0xff, 0xbd, 0xff, 0x9b, 0xff, 0x9f, 0x7e, 0xfa, 0xe9, 0xa7, 0x9f, 0x7e, 0xfa, 0xfd, 0xef, 0x3f, 0xfd, 0xfe, 0xd3, 0xef, 0x3f, 0xfd, 0xf4, 0xff, 0xe6, 0xff, 0xf7, 0xdf, 0x7f, 0xfb, 0xfd, 0xf7, 0xde, 0x7d, 0xef, 0x9b, 0xef, 0xbf, 0xff, 0xee, 0xfb, 0xef, 0xbf, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x7f, 0xff, 0xf3, 0xff, 0xbf, 0xef, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0x7f, 0xff, 0xfd, 0xff, 0xdf, 0x7e, 0xff, 0xf5, 0xfe, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0x7e, 0xfb, 0xff, 0x9b, 0xff, 0xff, 0xdf, 0xff, 0xfc, 0xfd, 0xff, 0xf7, 0x7f, 0xf5, 0xfd, 0xfb, 0xab, 0xb7, 0xff, 0xfa, 0xef, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0x9f, 0x75, 0xfe, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xb9, 0xff, 0x37, 0xdf, 0x6e, 0xf3, 0xed, 0xb7, 0xdf, 0x4e, 0xfb, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0x5b, 0x6f, 0xbf, 0xf9, 0x6f, 0xfe, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xb5, 0xdf, 0x7e, 0xef, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xbd, 0xf7, 0xbf, 0xef, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xbe, 0xfb, 0xee, 0xe6, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xfb, 0xfe, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xbf, 0xf9, 0xff, 0x2f, 0xbf, 0xff, 0xf2, 0xfb, 0xaf, 0xbf, 0xfe, 0xfa, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xf9, 0x6f, 0xfe, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf9, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x7b, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0xf7, 0xe6, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xaf, 0xbb, 0xfe, 0xba, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xbf, 0xf9, 0xff, 0x1f, 0x7f, 0xfd, 0xf1, 0xd7, 0x5b, 0x7f, 0xfd, 0xf5, 0x2f, 0xbf, 0xfe, 0xf2, 0xeb, 0xaf, 0xbf, 0xfe, 0xf8, 0x6f, 0xee, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xaf, 0x7f, 0xbf, 0xfd, 0xb7, 0xdb, 0x7f, 0xfb, 0xfd, 0xd7, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xe6, 0xfe, 0xdb, 0xef, 0xbb, 0xff, 0xbe, 0xfb, 0xee, 0xbf, 0xed, 0x6d, 0xf7, 0xdf, 0x72, 0xff, 0xad, 0xf7, 0xdf, 0xff, 0xbf, 0xf9, 0xbf, 0xf5, 0xf5, 0xd6, 0x5f, 0x6f, 0xbd, 0xf5, 0x17, 0xd3, 0xd8, 0xfa, 0x8b, 0xad, 0xbf, 0xb8, 0xfa, 0xeb, 0xef, 0x6f, 0xfe, 0xff }; /* rom names */ #define EPP_ROM_CROM0_R_0 0 #define EPP_ROM_CROM0_R_1 16 #define EPP_ROM_CROM0_R_2 32 #define EPP_ROM_CROM0_R_3 48 #define EPP_ROM_CROM0_R_4 64 #define EPP_ROM_CROM0_R_5 80 #define EPP_ROM_CROM0_R_6 96 #define EPP_ROM_CROM0_R_7 112 #define EPP_ROM_CROM1_R_0 128 #define EPP_ROM_CROM1_R_1 144 #define EPP_ROM_CROM1_R_2 160 #define EPP_ROM_CROM1_R_3 176 #define EPP_ROM_CROM1_R_4 192 #define EPP_ROM_CROM1_R_5 208 #define EPP_ROM_CROM1_R_6 224 #define EPP_ROM_CROM1_R_7 240 #define EPP_ROM_DIVROM0 256 #define EPP_ROM_DIVROM1 272 #define EPP_ROM_DIVROM2 288 #define EPP_ROM_SWROMID 304 #define EPP_ROM_SWROMIE 320 #define EPP_ROM_SWROMIS 336 #define EPP_ROM_SWROMOE 352 #define EPP_ROM_SWROMOS 368 #define EPP_ROM_SWROMIC 384 #define EPP_ROM_SWROMOC 400 #define EPP_ROM_SWROMDCD 416 #define EPP_ROM_CLKSELROM 432 #define EPP_ROM_PTTMUTEROM 448 #define EPP_ROM_STIROM 464 #define EPP_ROM_STOROM 480 /* rom locations */ static const unsigned long epp_roms[496] = { 81983, 81319, 82149, 81485, 82151, 81487, 81985, 81321, 81651, 80987, 81817, 81153, 81819, 81155, 81653, 80989, 87969, 87305, 87637, 86973, 88137, 87473, 87805, 87141, 88135, 87471, 87803, 87139, 87971, 87307, 87639, 86975, 81993, 81661, 82159, 81827, 82161, 81829, 81995, 81663, 81329, 80997, 81495, 81163, 81497, 81165, 81331, 80999, 87979, 88147, 87315, 87483, 88145, 87981, 87481, 87317, 87647, 87815, 86983, 87151, 87813, 87649, 87149, 86985, 81973, 82139, 81641, 81807, 82141, 81975, 81809, 81643, 81309, 81475, 80977, 81143, 81477, 81311, 81145, 80979, 87989, 87657, 87325, 86993, 88157, 87825, 87493, 87161, 88155, 87823, 87491, 87159, 87991, 87659, 87327, 86995, 58109, 57777, 57445, 57113, 58277, 57945, 57613, 57281, 58275, 57943, 57611, 57279, 58111, 57779, 57447, 57115, 82003, 82169, 81339, 81505, 82171, 82005, 81507, 81341, 81671, 81837, 81007, 81173, 81839, 81673, 81175, 81009, 78997, 78829, 79329, 79161, 79661, 79493, 79993, 79825, 78831, 78995, 79163, 79327, 79495, 79659, 79827, 79991, 84983, 84815, 84817, 84981, 85647, 85479, 85481, 85645, 85315, 85147, 85149, 85313, 85979, 85811, 85813, 85977, 79007, 78841, 79339, 79173, 79671, 79505, 80003, 79837, 78839, 79005, 79171, 79337, 79503, 79669, 79835, 80001, 84993, 85657, 84825, 85489, 85325, 85989, 85157, 85821, 84827, 85491, 84991, 85655, 85159, 85823, 85323, 85987, 78987, 79319, 78821, 79153, 79651, 79983, 79485, 79817, 78819, 79151, 78985, 79317, 79483, 79815, 79649, 79981, 85003, 84835, 85335, 85167, 85667, 85499, 85999, 85831, 84837, 85001, 85169, 85333, 85501, 85665, 85833, 85997, 55123, 54955, 55455, 55287, 55787, 55619, 56119, 55951, 54957, 55121, 55289, 55453, 55621, 55785, 55953, 56117, 79017, 79349, 78849, 79181, 79681, 80013, 79513, 79845, 78851, 79183, 79015, 79347, 79515, 79847, 79679, 80011, 45880, 45548, 46048, 45716, 46046, 45714, 45882, 45550, 45216, 44884, 45384, 45052, 45382, 45050, 45218, 44886, 30962, 30796, 31626, 31460, 30794, 30960, 31458, 31624, 31294, 31128, 31958, 31792, 31126, 31292, 31790, 31956, 45900, 45568, 46068, 45736, 45236, 44904, 45404, 45072, 46066, 45734, 45902, 45570, 45402, 45070, 45238, 44906, 81902, 81238, 82068, 81404, 82070, 81406, 81904, 81240, 81570, 80906, 81736, 81072, 81738, 81074, 81572, 80908, 87878, 87546, 88046, 87714, 87214, 86882, 87382, 87050, 88044, 87712, 87880, 87548, 87380, 87048, 87216, 86884, 27962, 28130, 28128, 27964, 27298, 27466, 27464, 27300, 27630, 27798, 27796, 27632, 26966, 27134, 27132, 26968, 70000, 70168, 69336, 69504, 70166, 70002, 69502, 69338, 69668, 69836, 69004, 69172, 69834, 69670, 69170, 69006, 55062, 54896, 55394, 55228, 54894, 55060, 55226, 55392, 55726, 55560, 56058, 55892, 55558, 55724, 55890, 56056, 64024, 63692, 63360, 63028, 64192, 63860, 63528, 63196, 64190, 63858, 63526, 63194, 64026, 63694, 63362, 63030, 57998, 58166, 57334, 57502, 58164, 58000, 57500, 57336, 57666, 57834, 57002, 57170, 57832, 57668, 57168, 57004, 72970, 72802, 73302, 73134, 73634, 73466, 73966, 73798, 72804, 72968, 73136, 73300, 73468, 73632, 73800, 73964, 75926, 75262, 76092, 75428, 76094, 75430, 75928, 75264, 75594, 74930, 75760, 75096, 75762, 75098, 75596, 74932, 70011, 69347, 70177, 69513, 70179, 69515, 70013, 69349, 69679, 69015, 69845, 69181, 69847, 69183, 69681, 69017, 66984, 67648, 67316, 67980, 66816, 67480, 67148, 67812, 66818, 67482, 67150, 67814, 66982, 67646, 67314, 67978, 63994, 64160, 64162, 63996, 63662, 63828, 63830, 63664, 63330, 63496, 63498, 63332, 62998, 63164, 63166, 63000 }; baycomepp-0.10.orig/main/eppafsk_firmware.h0100644000175100017510000022622406735660225017050 0ustar abaaba/*****************************************************************************/ /* * eppafsk_firmware.h -- HDLC packet radio modem for EPP using FPGA utility. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ /* automatically generated, do not edit */ #define EPPAFSK_FIRMWAREDATE "19990628" /* firmware */ static const unsigned char eppafsk_firmware[] = { 0xff, 0x04, 0xe8, 0x8c, 0xf9, 0xde, 0xff, 0xff, 0xfd, 0xfd, 0xd7, 0xdf, 0xff, 0xb5, 0xfd, 0xff, 0xff, 0xda, 0xfe, 0xaf, 0xed, 0xff, 0xde, 0xfe, 0xff, 0x9b, 0xff, 0xff, 0xaf, 0xff, 0xfb, 0xfb, 0xff, 0xaf, 0xed, 0xff, 0xfe, 0xd7, 0xf6, 0x7f, 0x6d, 0xff, 0xd7, 0xf7, 0x7f, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xb9, 0xff, 0xf8, 0xed, 0x9f, 0xff, 0xfe, 0xf8, 0xed, 0x8f, 0x77, 0xfc, 0xf6, 0xc7, 0x6f, 0x7f, 0xfc, 0xf6, 0xc7, 0xef, 0x6f, 0xfe, 0xff, 0xd7, 0x5f, 0x7b, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xf5, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0x9b, 0xff, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xff, 0xc6, 0xff, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xbf, 0xf9, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0x6f, 0xfe, 0xff, 0xfb, 0xaf, 0xbf, 0xfe, 0xfa, 0xfb, 0xef, 0xbf, 0xfb, 0xdd, 0xf7, 0xdf, 0x7d, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0x9b, 0xff, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xc6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xbd, 0xef, 0xbd, 0xef, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xdf, 0x7f, 0xff, 0xdd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xf6, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x6f, 0xf4, 0xfb, 0xed, 0xb7, 0xdf, 0x5e, 0x3b, 0xed, 0xb7, 0xdf, 0xfe, 0xf6, 0xdb, 0x6e, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xe7, 0x3f, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf5, 0xd7, 0x77, 0xff, 0x7d, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xfc, 0xf3, 0xcf, 0xbe, 0xff, 0xee, 0xb3, 0xcf, 0x7f, 0xfe, 0xf9, 0xe6, 0x9d, 0x7f, 0xfe, 0xf9, 0xe6, 0xff, 0x6f, 0xfe, 0xff, 0x7d, 0xf7, 0xdf, 0x77, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xfe, 0xfe, 0xfb, 0xef, 0xff, 0x9b, 0xdd, 0xcf, 0x3e, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xf7, 0xfc, 0xe7, 0x9f, 0x7f, 0xf6, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xdd, 0x66, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xb7, 0xf9, 0xf7, 0xfe, 0xfb, 0xe7, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x6f, 0xfe, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xf7, 0xdb, 0xd7, 0x3e, 0xfb, 0xec, 0xb7, 0xdf, 0x7a, 0xfb, 0xad, 0xfb, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xef, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0x6f, 0x7e, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x77, 0xff, 0xfd, 0xf7, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xef, 0xfe, 0xfb, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xf7, 0xcd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0x9f, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xaf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6e, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xe6, 0xff, 0xff, 0xf9, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xdd, 0x6f, 0xff, 0xfd, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x6f, 0xfe, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0xff, 0xff, 0xf9, 0xef, 0x9f, 0xff, 0xde, 0x5f, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0x6b, 0xff, 0xff, 0xf5, 0xf4, 0xdf, 0x4f, 0xbf, 0xef, 0xfe, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0xf9, 0xfb, 0xf7, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xef, 0xbf, 0xbe, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xfd, 0xfd, 0xf7, 0xff, 0x8f, 0xef, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xd7, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xef, 0xff, 0xe6, 0xff, 0x2f, 0xff, 0xff, 0xfe, 0xfa, 0xeb, 0xaf, 0xfb, 0xcd, 0x6f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xef, 0xfa, 0xff, 0xaf, 0xf7, 0xfe, 0xfb, 0xef, 0xf7, 0x5f, 0xed, 0xb5, 0xd5, 0x5d, 0x7b, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0x6f, 0xff, 0xfb, 0xbf, 0x7b, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xfe, 0xef, 0xff, 0xff, 0xfb, 0xfb, 0xbf, 0xbf, 0xff, 0xee, 0x5f, 0x7e, 0xf9, 0xa5, 0xdc, 0xdf, 0xfe, 0xff, 0xff, 0xbf, 0x66, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xfe, 0x7b, 0xef, 0xbd, 0xfb, 0xdd, 0x77, 0xdf, 0x65, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xb7, 0xf9, 0xff, 0xde, 0xff, 0xbf, 0xbd, 0xf7, 0xfb, 0xfb, 0xf9, 0x77, 0xbf, 0xfd, 0xf6, 0x7b, 0x6d, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xd4, 0xbf, 0xff, 0xff, 0xfb, 0xe9, 0xbf, 0xff, 0x3e, 0xfb, 0x75, 0xaf, 0xbd, 0xf6, 0xda, 0x6b, 0xff, 0xff, 0xff, 0x5f, 0x99, 0xfb, 0xbf, 0xdb, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xfe, 0xf2, 0xdf, 0x6c, 0xb3, 0xcd, 0xbc, 0xdf, 0xec, 0xff, 0xff, 0xef, 0x66, 0xfe, 0xbf, 0xf5, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0x96, 0x6c, 0xbd, 0xf7, 0xde, 0x2b, 0xef, 0xbd, 0xff, 0xff, 0xff, 0xb3, 0xb1, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xfe, 0xfe, 0xef, 0xbf, 0x7d, 0xef, 0xfd, 0xf7, 0x7e, 0x7b, 0xbf, 0xfe, 0xff, 0xff, 0x66, 0xec, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x7b, 0x7f, 0xfb, 0xed, 0xb7, 0xdf, 0x7e, 0xe3, 0xff, 0xff, 0xbf, 0x99, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xb7, 0xf3, 0xdd, 0x77, 0xff, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xf7, 0xe6, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xcc, 0x7f, 0xfe, 0xf9, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xb1, 0xff, 0xbb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x3e, 0x7d, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf7, 0xdf, 0xff, 0x66, 0xe6, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0x3f, 0x9b, 0xfb, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xb7, 0xdf, 0x7e, 0xff, 0xed, 0xf7, 0xff, 0xff, 0xff, 0xef, 0xe6, 0xfe, 0xfb, 0xaf, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xf7, 0xd1, 0xbf, 0xfe, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xbb, 0x79, 0xff, 0xf6, 0xcb, 0x27, 0xbf, 0xfc, 0xf2, 0xcb, 0xfd, 0xf6, 0xb7, 0xdf, 0x7e, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0x7f, 0x6f, 0xfe, 0xbf, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcb, 0x5c, 0x67, 0x9d, 0x7f, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xef, 0x8f, 0x3e, 0xfa, 0xe8, 0xa3, 0x8b, 0x3f, 0xfa, 0xd4, 0x47, 0x9f, 0x5f, 0x74, 0xfc, 0xf1, 0x9f, 0x7f, 0xfe, 0xe6, 0xff, 0xef, 0xaf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0xfe, 0xf5, 0xd7, 0x5f, 0x7f, 0x7d, 0xf5, 0xfd, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfb, 0xeb, 0xef, 0xbf, 0xfd, 0xfe, 0xea, 0xaf, 0x7f, 0xfd, 0xf5, 0xd7, 0x57, 0x37, 0xdd, 0xfe, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xff, 0xfd, 0xf7, 0x55, 0x7f, 0x53, 0xcd, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xbf, 0xfe, 0xfe, 0xdb, 0xef, 0xbb, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0xfd, 0x7f, 0xd7, 0xfd, 0xff, 0xff, 0xff, 0x66, 0xff, 0x9b, 0xff, 0xbe, 0xfc, 0xfe, 0xcb, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfa, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xad, 0xbf, 0xde, 0xba, 0xab, 0xad, 0xbb, 0xe6, 0xda, 0xd7, 0x5e, 0x7d, 0xbd, 0xe5, 0xd7, 0x5f, 0x7f, 0xfd, 0x6f, 0xfe, 0xbe, 0xef, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xdf, 0x1f, 0xff, 0xf8, 0xf1, 0xe7, 0x7f, 0xfd, 0xbd, 0xff, 0xff, 0xff, 0x1b, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xff, 0xef, 0xbf, 0xfd, 0xef, 0xde, 0x3f, 0xfd, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0xe6, 0xff, 0xff, 0xff, 0xef, 0x3f, 0xff, 0xfd, 0xf7, 0xfd, 0x7f, 0xdf, 0xdf, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x9f, 0xf9, 0xff, 0xfe, 0xfd, 0xef, 0xb5, 0xdf, 0x7e, 0xff, 0xb9, 0xfd, 0xf5, 0xf7, 0xdd, 0x7d, 0xff, 0xfd, 0xdf, 0xff, 0xff, 0x6f, 0xfc, 0xff, 0xf5, 0xff, 0xdf, 0xbf, 0xfd, 0xbd, 0xff, 0xbf, 0xdb, 0x3f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x9f, 0xff, 0xfe, 0xff, 0x70, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xc6, 0xff, 0xfd, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xfb, 0xf9, 0xff, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xbf, 0x1b, 0x7f, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xbe, 0x3f, 0xfb, 0x98, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x99, 0xff, 0x6e, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xcf, 0xaf, 0x9f, 0xdc, 0x72, 0xcf, 0x3d, 0xd7, 0x7f, 0xf7, 0xdf, 0x7f, 0xff, 0xdd, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xd9, 0xef, 0xbf, 0xff, 0xfe, 0xfa, 0xeb, 0x7f, 0x77, 0xf8, 0xe3, 0x8f, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xfb, 0xf7, 0xbe, 0xbe, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xf6, 0xdb, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xef, 0x1b, 0xfe, 0xbf, 0xbf, 0xfa, 0xfa, 0xeb, 0xa5, 0xf2, 0x9a, 0xef, 0xd7, 0xdf, 0xf9, 0xa5, 0xde, 0x7a, 0x7e, 0xff, 0xff, 0x3f, 0x66, 0xff, 0xef, 0x7f, 0xff, 0xff, 0x3f, 0xff, 0xef, 0xd7, 0xf7, 0xfd, 0x77, 0xdf, 0xe5, 0x3b, 0xef, 0xff, 0xff, 0xff, 0xb7, 0xf9, 0xff, 0x7b, 0xff, 0xfd, 0xf7, 0xdf, 0x6f, 0xbb, 0xb5, 0x7e, 0xbd, 0xf7, 0xf6, 0xeb, 0xae, 0x3b, 0xf5, 0xff, 0xff, 0x6f, 0xd6, 0xff, 0x5e, 0x7a, 0xe9, 0xa5, 0x97, 0x5e, 0x3b, 0xef, 0x5d, 0xaf, 0xbd, 0x76, 0xbe, 0xf9, 0xef, 0xfd, 0xff, 0x5f, 0x9b, 0xfb, 0xbf, 0xbd, 0x66, 0x9a, 0x69, 0xa6, 0xd5, 0x56, 0xfe, 0x96, 0xdf, 0xfb, 0xcd, 0x3e, 0x7b, 0x64, 0xaf, 0xff, 0xef, 0x66, 0xfe, 0x6f, 0xff, 0xfd, 0x77, 0xdf, 0x7d, 0xef, 0xbd, 0xfb, 0xe5, 0xf2, 0xde, 0xfb, 0xcf, 0x3e, 0x7b, 0xef, 0xff, 0xb3, 0xb1, 0xff, 0xfb, 0xff, 0xff, 0xe7, 0x1f, 0xff, 0xfb, 0xbf, 0x7f, 0xf9, 0xb7, 0xf7, 0xbe, 0xe7, 0xbe, 0xf4, 0xfd, 0xff, 0x66, 0xee, 0xff, 0xfe, 0xda, 0x6b, 0xa8, 0xb1, 0xf6, 0xdb, 0x6f, 0x5f, 0xe7, 0xed, 0xb7, 0xff, 0xfa, 0xe3, 0xfd, 0xff, 0xbf, 0x9b, 0xf7, 0xff, 0x9b, 0xef, 0xbe, 0xfb, 0xee, 0xbb, 0xef, 0xbf, 0xfb, 0xff, 0x77, 0xff, 0x77, 0xdc, 0xf9, 0xff, 0xff, 0xf7, 0xe6, 0xfd, 0xbb, 0xef, 0xb3, 0xcf, 0x3e, 0xfb, 0xec, 0xb3, 0xce, 0xef, 0xff, 0xf9, 0xff, 0xbf, 0xff, 0xfe, 0xf3, 0xff, 0xbd, 0xb1, 0x7f, 0x7a, 0xe9, 0xaf, 0xbf, 0x5e, 0xfa, 0xeb, 0xbf, 0xd7, 0xf9, 0xf5, 0xd7, 0x6f, 0x9f, 0x7d, 0xf7, 0xdf, 0xff, 0x66, 0xe6, 0x9b, 0x7f, 0xf6, 0xd9, 0x6f, 0x9f, 0x7d, 0xf6, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xf9, 0xe7, 0xbf, 0xff, 0xff, 0x3f, 0x9b, 0x7b, 0xfb, 0xba, 0xed, 0xf6, 0xdb, 0x6e, 0xb7, 0xfd, 0xff, 0xff, 0xdf, 0x7e, 0xbf, 0xf7, 0xde, 0xfb, 0xff, 0xff, 0xef, 0xa6, 0xde, 0xeb, 0xbf, 0xf5, 0xd6, 0x5b, 0x6f, 0xbd, 0xfd, 0xf7, 0xef, 0xff, 0xfe, 0xfb, 0xe7, 0xbf, 0xff, 0x5f, 0xff, 0xab, 0x61, 0xff, 0x72, 0xbb, 0xef, 0xbe, 0xfb, 0xee, 0xbb, 0xff, 0xfe, 0xfb, 0xdf, 0x7f, 0xfb, 0xfd, 0xf7, 0xef, 0x97, 0x7f, 0x63, 0xfe, 0xbf, 0xfe, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xeb, 0xf6, 0x6f, 0xbd, 0xff, 0x7f, 0xfd, 0xff, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xaf, 0xcf, 0x3e, 0xfb, 0xec, 0xb3, 0xcf, 0x3e, 0xba, 0xfc, 0x47, 0x9f, 0x7f, 0xfe, 0xf9, 0xd7, 0x1f, 0x7d, 0xfe, 0xe6, 0xff, 0xcb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xfe, 0xcf, 0xd7, 0x5f, 0xff, 0xfb, 0xff, 0xd7, 0x5f, 0xff, 0xbf, 0xe1, 0xef, 0xf2, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xaf, 0xeb, 0xff, 0xf5, 0xd7, 0xff, 0xff, 0xff, 0xf4, 0xd7, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xbf, 0xdf, 0xff, 0xf7, 0xd5, 0x3f, 0xff, 0xfd, 0xfd, 0xf5, 0xff, 0x1b, 0xfa, 0xaf, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xbf, 0xbb, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xdb, 0x7f, 0xfd, 0xff, 0xe6, 0xff, 0xdb, 0xef, 0xbf, 0xfc, 0xe7, 0xfb, 0x4f, 0xbf, 0xff, 0xe7, 0x9f, 0xfb, 0x7d, 0xbf, 0xad, 0xa7, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xae, 0xb5, 0xee, 0xea, 0xeb, 0xad, 0xb7, 0xe6, 0xba, 0xd7, 0x5f, 0x7d, 0xf5, 0x64, 0xd7, 0x5a, 0x7f, 0xfd, 0x6b, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xff, 0xef, 0xbf, 0xff, 0xf9, 0xf7, 0xf1, 0xe7, 0x8f, 0x5d, 0xfc, 0xff, 0xff, 0x7f, 0x1b, 0xff, 0xfb, 0xef, 0xbf, 0xf7, 0xff, 0xfb, 0xff, 0x77, 0xff, 0xfe, 0xbf, 0xff, 0xfa, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xe6, 0xff, 0x5f, 0xff, 0xde, 0xff, 0x5f, 0xff, 0xf5, 0xff, 0x9f, 0xff, 0xeb, 0xae, 0xff, 0xed, 0xf4, 0xff, 0xfe, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xef, 0xaf, 0xe7, 0xfe, 0xfa, 0xeb, 0xc9, 0xef, 0xf9, 0xe7, 0xe7, 0x57, 0x7e, 0xee, 0xe7, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xff, 0xef, 0xdf, 0xff, 0xbd, 0xf7, 0xfd, 0xdf, 0xff, 0xdf, 0x7f, 0xbf, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xbb, 0xfe, 0xfa, 0xff, 0x8f, 0xbf, 0xfe, 0xff, 0xff, 0x1f, 0xff, 0xdf, 0xfd, 0xfb, 0x3f, 0xff, 0xfd, 0xff, 0xa6, 0xff, 0xff, 0xaf, 0x7d, 0xf7, 0xb7, 0x7e, 0x4f, 0xff, 0xfd, 0x6f, 0xf7, 0xff, 0xdd, 0xaf, 0xee, 0xf7, 0x9f, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xed, 0xf1, 0x9f, 0xbf, 0xf7, 0xff, 0xff, 0xfb, 0xef, 0xf6, 0xf7, 0xff, 0x6f, 0xfe, 0xfe, 0xfd, 0xbf, 0xfb, 0xcf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xef, 0x7f, 0xfc, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xfe, 0xbf, 0xfe, 0xef, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xbd, 0xf7, 0xff, 0x66, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfd, 0xeb, 0xab, 0xff, 0xfe, 0xe7, 0xdc, 0x5f, 0x6f, 0xd9, 0xf5, 0xff, 0x5f, 0xff, 0xbf, 0xf1, 0xff, 0xf2, 0xff, 0xff, 0x9f, 0xf6, 0xfb, 0x2d, 0xf7, 0xf9, 0xfb, 0xf3, 0x9f, 0x7f, 0xff, 0xfd, 0xfe, 0xff, 0xff, 0x67, 0xfe, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xdd, 0xfb, 0xdf, 0xf7, 0xbe, 0xfb, 0xef, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0x9b, 0xfe, 0xaf, 0xff, 0xfe, 0xfa, 0x9b, 0xbf, 0xbf, 0xcf, 0xce, 0x5f, 0xff, 0x7b, 0xf5, 0xd5, 0x57, 0xdf, 0x79, 0xff, 0xbf, 0x66, 0xff, 0xff, 0xef, 0xff, 0xfe, 0xf6, 0x6f, 0xbf, 0x97, 0xff, 0xdd, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0x77, 0xdf, 0xfb, 0xb7, 0xf9, 0xff, 0xfa, 0xef, 0xaf, 0xd7, 0xce, 0xf7, 0xff, 0xbd, 0x76, 0xbf, 0xf6, 0xfe, 0xfb, 0xef, 0x9f, 0x7f, 0xd6, 0xff, 0x6f, 0xd4, 0xff, 0xff, 0x7e, 0xeb, 0xbc, 0x7f, 0x9b, 0x7f, 0xed, 0x75, 0xe7, 0xbd, 0xf4, 0xd2, 0x4b, 0xff, 0xff, 0xf5, 0x5f, 0x99, 0xfb, 0xaf, 0x9f, 0x2f, 0xfb, 0xf9, 0x3f, 0xff, 0xfe, 0xfe, 0xdf, 0xca, 0x7b, 0xfd, 0x34, 0xd3, 0x5e, 0x7f, 0xff, 0xef, 0x66, 0xfe, 0xbf, 0xb2, 0x9a, 0x1c, 0xee, 0xaf, 0xef, 0x96, 0xff, 0xbd, 0xf3, 0xfe, 0x8f, 0xaf, 0xbe, 0x57, 0xdf, 0xfd, 0xb3, 0xb1, 0xff, 0xfa, 0xfb, 0x2f, 0xff, 0x5e, 0xfb, 0xef, 0xbf, 0x7f, 0x6f, 0xf5, 0xff, 0xff, 0xff, 0xef, 0xb7, 0xff, 0xff, 0x66, 0xec, 0xff, 0xff, 0xfb, 0xeb, 0xbf, 0xf3, 0x5f, 0xfe, 0x6f, 0x7f, 0x7b, 0xfd, 0xb5, 0xd7, 0x5e, 0xfb, 0xed, 0xff, 0xbf, 0x99, 0xf7, 0xff, 0xf3, 0xcf, 0xff, 0xff, 0x7f, 0xdb, 0xff, 0xbf, 0xf3, 0xff, 0x7f, 0xdf, 0x7d, 0xf7, 0xfd, 0xf7, 0xff, 0xf7, 0xe6, 0xfd, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xdf, 0xfd, 0xff, 0xcb, 0xff, 0xf7, 0xdf, 0x65, 0x9f, 0x7d, 0xd6, 0xf9, 0xff, 0xbd, 0xb1, 0xff, 0xdb, 0xee, 0x3e, 0xcf, 0x76, 0xf3, 0xee, 0xaf, 0x7f, 0xbd, 0xf4, 0xd7, 0x4f, 0x7f, 0xfd, 0xb7, 0xdb, 0xeb, 0x66, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xfb, 0x7f, 0xff, 0xfb, 0xdf, 0x3f, 0xff, 0x6d, 0xb3, 0xcf, 0xfe, 0xdf, 0xff, 0x3b, 0x9b, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xf6, 0xf7, 0xf7, 0x7f, 0xbb, 0x6d, 0xb7, 0xff, 0xff, 0x7f, 0xef, 0xe6, 0xfe, 0xfb, 0xff, 0xff, 0xda, 0xff, 0x8f, 0xef, 0xff, 0xf7, 0xbf, 0xdf, 0x7f, 0xfb, 0xed, 0xb7, 0xfe, 0xff, 0xff, 0xbb, 0x79, 0xff, 0xf6, 0xdf, 0xef, 0x9f, 0xfc, 0xfb, 0xdf, 0xff, 0xfa, 0xb7, 0xd5, 0x77, 0xdd, 0x7d, 0xf7, 0xdf, 0x93, 0x7f, 0x6f, 0xfe, 0xff, 0x7e, 0xfa, 0xdf, 0xff, 0xff, 0x7b, 0xfe, 0xeb, 0xfd, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0x77, 0xfd, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0x8f, 0x3e, 0xff, 0xe8, 0xb3, 0xcf, 0x3f, 0xfa, 0xfc, 0x67, 0x97, 0x7d, 0x76, 0xdd, 0x45, 0x1f, 0x7d, 0xfe, 0xe6, 0xff, 0xfb, 0xaf, 0xff, 0xff, 0xe7, 0xef, 0xef, 0xbf, 0xfe, 0xf5, 0xdf, 0xdf, 0x7f, 0x7f, 0xfd, 0x95, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xeb, 0xff, 0xbf, 0xfe, 0xfb, 0xff, 0xaf, 0x7f, 0xfd, 0xf5, 0xdd, 0x7f, 0xbf, 0xfd, 0xe5, 0xd7, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xbf, 0x5f, 0xfd, 0xd7, 0xd7, 0x5f, 0x75, 0xd5, 0xf7, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xd7, 0x7f, 0x7f, 0xff, 0x7d, 0xf6, 0xfd, 0x7e, 0xfd, 0xff, 0xe6, 0xff, 0xfb, 0xfb, 0xff, 0xfd, 0xfe, 0xcb, 0xff, 0xff, 0xfd, 0xff, 0x9c, 0xdf, 0x7e, 0x79, 0xfd, 0xa7, 0x9f, 0xfe, 0xbf, 0xf9, 0xff, 0xad, 0xbf, 0xf6, 0xaa, 0xab, 0xad, 0xbd, 0xf6, 0xda, 0x17, 0x5f, 0x6a, 0xbd, 0xa5, 0xd6, 0x5a, 0x77, 0xfd, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xec, 0xbf, 0xbb, 0x7f, 0xf5, 0xff, 0xa5, 0x9f, 0x7d, 0xfe, 0xf9, 0xff, 0xff, 0x1b, 0xbf, 0xff, 0xfe, 0xbf, 0xff, 0x7f, 0xef, 0xef, 0xaf, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0x7f, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0x66, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xef, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x5f, 0x7f, 0xed, 0x64, 0x57, 0xff, 0xff, 0x9f, 0xf9, 0xff, 0xef, 0xcb, 0xef, 0xf7, 0xff, 0xfe, 0xff, 0x8d, 0xf9, 0xb9, 0x7d, 0xb7, 0x4b, 0xff, 0xfd, 0xf9, 0xff, 0xff, 0x67, 0xfc, 0xff, 0xff, 0xfa, 0xee, 0xfe, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfd, 0x7d, 0xef, 0xaf, 0xde, 0xbf, 0x5f, 0xff, 0xff, 0x99, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xed, 0xbf, 0xff, 0xfe, 0x3e, 0xd7, 0xff, 0xbb, 0xdf, 0xf6, 0xff, 0x7d, 0xff, 0xff, 0x7f, 0xc6, 0xff, 0xff, 0xaf, 0xb5, 0xf6, 0xf4, 0x7f, 0xff, 0xfb, 0xfd, 0xf9, 0xfe, 0xfd, 0xdf, 0xff, 0xef, 0xc7, 0xff, 0xed, 0xbf, 0xf9, 0xff, 0x7f, 0xdf, 0x7f, 0xbf, 0xff, 0x77, 0xdf, 0xf5, 0x75, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xbf, 0xff, 0xf3, 0x6f, 0xfe, 0xff, 0xff, 0xbf, 0xa3, 0x8f, 0x3f, 0x7e, 0xfc, 0xff, 0x1e, 0xeb, 0xff, 0xff, 0xaf, 0x9b, 0xbf, 0xff, 0xcf, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0x7e, 0x3e, 0xfb, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xf6, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xaf, 0xfd, 0xfa, 0xfb, 0xff, 0xf7, 0xf7, 0xdf, 0x7f, 0xd1, 0x5b, 0x6f, 0xf9, 0xf7, 0x9f, 0xff, 0xfc, 0xbf, 0xf9, 0xff, 0xff, 0xef, 0xbf, 0x9f, 0xfe, 0xbf, 0x7f, 0xff, 0xfd, 0xff, 0x75, 0xd3, 0x7f, 0xbf, 0xdb, 0xe7, 0xdb, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfd, 0xeb, 0xef, 0xff, 0xff, 0x9f, 0xbf, 0xff, 0xff, 0xef, 0xdf, 0x5f, 0xcf, 0x7f, 0xfe, 0xfb, 0xff, 0x1b, 0xfe, 0xbf, 0xff, 0xff, 0xe6, 0xeb, 0x3f, 0xbc, 0xf8, 0x7e, 0xfe, 0x79, 0x65, 0xf5, 0x97, 0xfc, 0xff, 0x7c, 0xf7, 0x3f, 0x66, 0xff, 0xfb, 0xff, 0xbf, 0xf3, 0xfa, 0xcf, 0xa9, 0xbf, 0xcf, 0x7f, 0xf6, 0xf9, 0xcf, 0xb9, 0xfe, 0xfc, 0xdf, 0xfd, 0xb7, 0xf9, 0x5f, 0x7e, 0x6d, 0xec, 0xe7, 0x9e, 0x7f, 0xa9, 0xff, 0xd7, 0xbf, 0xdd, 0x7e, 0x73, 0xaf, 0xff, 0xd7, 0x9e, 0xff, 0x6f, 0xd6, 0xf3, 0xce, 0x3a, 0xff, 0x8f, 0xf7, 0xdf, 0x3a, 0xff, 0xfc, 0xaf, 0xbd, 0xf4, 0xdf, 0xf9, 0x67, 0xbf, 0xf6, 0x5f, 0x9b, 0xfb, 0xbf, 0xdf, 0x5f, 0xff, 0xe9, 0xbb, 0xaf, 0x6e, 0xde, 0xff, 0x7e, 0x2b, 0xad, 0x3c, 0xfb, 0xcc, 0x37, 0xf7, 0xef, 0x66, 0xfe, 0xbb, 0xf2, 0xda, 0x2b, 0xaa, 0xf9, 0xa7, 0x9e, 0xf7, 0x5f, 0xf3, 0xee, 0x3b, 0xef, 0x3e, 0x5b, 0xcd, 0xff, 0xb3, 0xb1, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xfe, 0xfb, 0xee, 0xfb, 0xfd, 0x87, 0xbd, 0xfd, 0xd6, 0xdf, 0xee, 0xf5, 0xdf, 0xfa, 0x66, 0xee, 0xff, 0xfe, 0xfa, 0xff, 0xbf, 0xbf, 0xcd, 0xfa, 0xff, 0xdf, 0xfb, 0xed, 0xb5, 0xf7, 0xfe, 0x2b, 0xfd, 0xb7, 0xb8, 0x9b, 0xf7, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x76, 0xdb, 0x6f, 0xbf, 0xb9, 0xdd, 0x77, 0xdf, 0x7f, 0xdb, 0xf9, 0xb7, 0xcf, 0xf7, 0xa6, 0xfd, 0xff, 0xf7, 0xf7, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0x9f, 0x47, 0xfe, 0xf9, 0xe7, 0xbf, 0xff, 0xfe, 0xfb, 0xe5, 0xbd, 0xb1, 0xff, 0xfb, 0xed, 0xb1, 0xdb, 0x56, 0xfb, 0x6e, 0xbf, 0xff, 0xa1, 0xf4, 0xd7, 0x4b, 0x9f, 0x7d, 0x76, 0xd2, 0xff, 0x66, 0xe6, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0x3f, 0xfb, 0xec, 0xf3, 0xe7, 0x9f, 0xff, 0xac, 0x3f, 0x9b, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xdb, 0x6e, 0x7b, 0xff, 0xde, 0xfb, 0x6f, 0xfb, 0xef, 0xa6, 0xfe, 0xff, 0xbf, 0xbf, 0xff, 0xf7, 0xeb, 0xbf, 0xff, 0xdf, 0x85, 0xff, 0x7e, 0xbb, 0xff, 0x9f, 0xd7, 0xff, 0xfb, 0xab, 0x79, 0xff, 0xf7, 0xdb, 0x3f, 0xbf, 0xff, 0xfa, 0xcb, 0xff, 0x7e, 0xf1, 0xdf, 0x77, 0x7f, 0xfc, 0xf7, 0xe7, 0x7f, 0x7d, 0x63, 0xfe, 0xbf, 0x7e, 0xfb, 0xff, 0xed, 0x9f, 0xfe, 0xba, 0xff, 0xff, 0x6f, 0xdd, 0xfd, 0xde, 0xf9, 0xff, 0xfd, 0xf5, 0xfe, 0x9b, 0xff, 0xaf, 0xcf, 0x3e, 0xff, 0xfc, 0xa3, 0x8f, 0x3e, 0xff, 0xbc, 0x47, 0x9f, 0x7d, 0xf4, 0xb9, 0xe7, 0x1f, 0x7d, 0xfe, 0xe6, 0xff, 0xeb, 0xbf, 0xbf, 0xfd, 0xf7, 0x8b, 0x3f, 0xbf, 0xfe, 0xe5, 0xd7, 0xdf, 0xff, 0xff, 0xef, 0xd7, 0x5f, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xfb, 0x2f, 0xbf, 0xff, 0xfe, 0xdb, 0xaf, 0x7f, 0xf9, 0xf5, 0xdf, 0x7f, 0xff, 0xff, 0xf7, 0xd7, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfb, 0xfb, 0x6f, 0xbf, 0xfe, 0xfb, 0xbf, 0xff, 0xfd, 0xf7, 0xd7, 0x5f, 0xff, 0xfc, 0xfd, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xfe, 0xf6, 0xdf, 0x2f, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xe5, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe6, 0xff, 0xfe, 0x5f, 0xff, 0xfd, 0xf7, 0xfe, 0xef, 0xef, 0xfd, 0xcc, 0xff, 0xdf, 0x6f, 0xbf, 0xed, 0xfd, 0xdf, 0xfe, 0xbf, 0xe9, 0xdf, 0x2f, 0xbf, 0xfc, 0xe2, 0xeb, 0xaf, 0xbd, 0xf6, 0x72, 0x57, 0x5f, 0x37, 0xb5, 0x75, 0xd7, 0x5f, 0x7f, 0xfd, 0x69, 0xfe, 0xff, 0xff, 0xff, 0xcb, 0x6f, 0xff, 0xab, 0xdd, 0xbb, 0xdf, 0xe7, 0xb7, 0x5f, 0xfd, 0x5f, 0xfa, 0xff, 0xc1, 0xff, 0x1b, 0xff, 0xf7, 0xef, 0x7f, 0xbd, 0xfa, 0xfe, 0xde, 0x7f, 0xff, 0x7f, 0xef, 0xde, 0xff, 0xff, 0xf3, 0xff, 0xf5, 0xef, 0x7f, 0xe6, 0xff, 0x7f, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0x57, 0xf7, 0xff, 0x5f, 0xff, 0xbf, 0xe9, 0xf7, 0xfb, 0xff, 0xab, 0xf6, 0xff, 0xbe, 0xdf, 0xab, 0xf5, 0x7f, 0xf7, 0xdf, 0x7e, 0x7f, 0x7e, 0x7f, 0xdf, 0xfe, 0x6f, 0xfe, 0xbd, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xed, 0xff, 0xda, 0xf7, 0xbf, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xdb, 0xfd, 0x9b, 0xff, 0xbf, 0xfb, 0xf6, 0xf8, 0xff, 0xbe, 0xdb, 0xef, 0xfb, 0xbf, 0xda, 0x5f, 0x6f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xdb, 0xef, 0xbf, 0xfe, 0xbe, 0xff, 0xef, 0x3f, 0xfb, 0xff, 0xbf, 0xff, 0x6f, 0xda, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0x73, 0x4f, 0xfd, 0xbf, 0xfb, 0xf7, 0xf9, 0xbd, 0x94, 0xdf, 0xff, 0xff, 0xd7, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0x31, 0xfe, 0x7a, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xf9, 0xfd, 0x9b, 0xfb, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xd7, 0xff, 0xf3, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xfb, 0xff, 0xe6, 0xff, 0xff, 0xbf, 0x7f, 0x7e, 0xe3, 0xeb, 0xff, 0x2f, 0xee, 0xf5, 0xf9, 0x59, 0xbf, 0xdf, 0xb5, 0x7f, 0xab, 0xff, 0xbf, 0xf1, 0xff, 0xff, 0xe1, 0xbf, 0xff, 0xfe, 0xeb, 0x69, 0x7f, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x67, 0xfe, 0xff, 0xff, 0xff, 0xb3, 0xaf, 0x7f, 0xff, 0xef, 0x7f, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xbd, 0xff, 0xfe, 0xfb, 0xfb, 0x9b, 0xfe, 0xff, 0xff, 0x9f, 0x33, 0x6b, 0xaf, 0xbf, 0xf7, 0x2e, 0xd7, 0x7f, 0xe5, 0xe9, 0x57, 0x56, 0x78, 0xf9, 0xf5, 0xbf, 0x66, 0xff, 0x7f, 0xef, 0xa7, 0x5e, 0xfb, 0xeb, 0xef, 0xbf, 0x95, 0xff, 0x9f, 0xfe, 0xcf, 0xb5, 0xfe, 0xf2, 0xdf, 0xfe, 0xb7, 0xf9, 0xff, 0xfb, 0xff, 0xb5, 0xbf, 0x5c, 0xfb, 0xfb, 0xbd, 0xf7, 0x9f, 0xf7, 0xfc, 0xd3, 0xef, 0xb3, 0xcd, 0xb6, 0xeb, 0x6f, 0xd4, 0xbf, 0x9e, 0x3e, 0xf7, 0x0c, 0xb3, 0xfe, 0x7e, 0xed, 0x55, 0xef, 0xbd, 0xfd, 0xf4, 0x4b, 0xad, 0xb5, 0xd6, 0x5e, 0x99, 0xfb, 0xff, 0xd7, 0xff, 0x7b, 0x49, 0xef, 0xdf, 0xf7, 0xdb, 0xd7, 0x76, 0xdb, 0xfd, 0xe6, 0xd2, 0x6c, 0xb3, 0x4d, 0x6e, 0x66, 0xfe, 0xbf, 0xf5, 0x9a, 0x5a, 0xb2, 0xad, 0xfb, 0xfd, 0xfa, 0xdf, 0xdf, 0xff, 0x8d, 0xfd, 0xbe, 0xf7, 0xde, 0xab, 0xb3, 0xb1, 0xff, 0xfa, 0xfb, 0xef, 0xbf, 0xdc, 0xfe, 0xff, 0xef, 0xf6, 0xbf, 0x86, 0xff, 0xd9, 0xdf, 0xff, 0xbd, 0xf7, 0xff, 0x66, 0xec, 0xbf, 0xfe, 0xfb, 0xeb, 0x2c, 0xe6, 0xfe, 0xff, 0x7b, 0x58, 0xe1, 0xe9, 0xfd, 0xb6, 0x5f, 0xfb, 0xed, 0xb7, 0x3f, 0x9b, 0xf7, 0xff, 0xfb, 0xef, 0xb7, 0xdf, 0xf8, 0xff, 0xff, 0xb7, 0xb3, 0xfd, 0xfe, 0x7f, 0xef, 0xf7, 0xdc, 0x73, 0xcf, 0x57, 0xe6, 0xfd, 0xff, 0xf7, 0xd7, 0x5f, 0x67, 0xff, 0xfd, 0xff, 0xc9, 0x4f, 0xbe, 0xff, 0x7f, 0xf3, 0x7d, 0xf6, 0xd9, 0xe7, 0x9d, 0xb1, 0x5f, 0xfb, 0xef, 0x33, 0xcf, 0x6e, 0x3b, 0xed, 0x27, 0x5e, 0xe9, 0xf4, 0xdf, 0x5e, 0x3e, 0xfd, 0xf4, 0xd2, 0xff, 0x66, 0xe6, 0xdf, 0x7f, 0xff, 0xfc, 0xf3, 0xfb, 0x7f, 0xbf, 0xd9, 0xdb, 0x36, 0xff, 0xfe, 0xf7, 0xcd, 0x1a, 0xeb, 0xac, 0x3b, 0x9b, 0xfb, 0xfe, 0xef, 0xef, 0xbf, 0xff, 0xff, 0xef, 0xdf, 0xf6, 0x37, 0xf7, 0xdf, 0xff, 0xff, 0xb6, 0xd7, 0x6e, 0x7b, 0xef, 0xe6, 0xfe, 0xfb, 0xaf, 0xff, 0xd8, 0xe7, 0xfb, 0xff, 0xdf, 0xf0, 0x87, 0xdf, 0x5e, 0xef, 0xa3, 0xb7, 0xd7, 0xfe, 0xfb, 0xbb, 0x79, 0xff, 0xf3, 0xc9, 0xbf, 0xff, 0xeb, 0x73, 0xbb, 0x67, 0x76, 0xf3, 0xdd, 0xb3, 0x4f, 0x74, 0xf7, 0xd5, 0x7f, 0x7f, 0x6f, 0xfe, 0xdf, 0xfe, 0xfe, 0xff, 0xee, 0xb6, 0xdf, 0x7f, 0xbb, 0xdf, 0xff, 0xfd, 0xf5, 0xff, 0xdf, 0xff, 0xff, 0x75, 0xff, 0x9b, 0xff, 0xef, 0x8f, 0x3e, 0xf3, 0xfc, 0xb3, 0x8f, 0x3f, 0xfb, 0x9c, 0xc7, 0x1f, 0x7f, 0xe4, 0xd9, 0xe7, 0x1f, 0x7d, 0xfe, 0xe6, 0xff, 0xfb, 0xff, 0xff, 0xfe, 0xfa, 0xdf, 0xff, 0xbf, 0xfd, 0xed, 0x9f, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0x5f, 0xff, 0xbf, 0xf9, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0xfe, 0xf3, 0xfb, 0xbf, 0xff, 0xfd, 0xfd, 0xd7, 0x5f, 0xff, 0xfd, 0xff, 0xd7, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xef, 0x8f, 0x7f, 0xfc, 0xf1, 0xfd, 0x7f, 0x7f, 0x7d, 0xf5, 0xdf, 0xff, 0x9b, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xff, 0xfe, 0xf3, 0xdf, 0x7f, 0xf9, 0xf5, 0xf7, 0x5f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xdf, 0x4f, 0xbf, 0xf7, 0x73, 0xff, 0x2f, 0x7f, 0xfd, 0xcc, 0xb7, 0xbf, 0x7e, 0xe9, 0xc7, 0x1e, 0xd7, 0xff, 0xbb, 0xf9, 0xff, 0xaf, 0xb7, 0xf6, 0xea, 0xeb, 0xaf, 0xb7, 0xf6, 0xf2, 0xc7, 0x5b, 0x7f, 0xd9, 0xc5, 0x17, 0x5f, 0x76, 0xe9, 0x6d, 0xf6, 0xbf, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xef, 0xbf, 0xcf, 0x1f, 0x7e, 0xd3, 0x7e, 0x9f, 0x7f, 0xf4, 0xf9, 0xa7, 0xff, 0x1b, 0xff, 0x7f, 0xfb, 0xef, 0xef, 0x7d, 0xfb, 0xff, 0xff, 0xda, 0xed, 0xdf, 0xf6, 0xdf, 0xff, 0xdb, 0x7f, 0xff, 0xfd, 0x7f, 0xe6, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xf7, 0xfb, 0xff, 0x7d, 0xfd, 0xfc, 0x77, 0xce, 0x97, 0x9f, 0xf9, 0xff, 0xff, 0xab, 0x0f, 0x3f, 0xdf, 0xfe, 0x3f, 0xac, 0x7d, 0xb9, 0xf5, 0x87, 0x5b, 0xef, 0xfd, 0xf6, 0xe7, 0xff, 0x67, 0xfc, 0xff, 0xff, 0xbb, 0xfb, 0xff, 0xff, 0xba, 0xff, 0xda, 0x5f, 0x7f, 0xfb, 0xfc, 0xd7, 0xff, 0x77, 0xff, 0xff, 0xff, 0x99, 0xff, 0xff, 0xbf, 0xfe, 0xf9, 0xff, 0x9f, 0xfb, 0xff, 0xd7, 0xfb, 0xfd, 0xff, 0x7f, 0xf3, 0xd7, 0xff, 0xff, 0xff, 0x7f, 0xc6, 0xdf, 0xfb, 0xcf, 0xfd, 0xff, 0xdf, 0xfb, 0xfa, 0xed, 0xfb, 0xef, 0x3f, 0xff, 0x7b, 0xfb, 0xf1, 0xff, 0xee, 0xff, 0xbd, 0xf9, 0xff, 0x7b, 0xfb, 0xfd, 0xff, 0xe7, 0xde, 0x7c, 0xf7, 0xbe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0x6b, 0xfe, 0xff, 0xef, 0xff, 0xf3, 0xce, 0xd7, 0xff, 0xfd, 0xd3, 0x1d, 0xbd, 0xfe, 0xea, 0x52, 0xbe, 0xff, 0xfe, 0xbb, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xf7, 0x7b, 0xdd, 0xff, 0x76, 0xef, 0xea, 0xdf, 0xff, 0xfe, 0xfb, 0xbf, 0xbb, 0xb3, 0xff, 0xfe, 0xde, 0xe6, 0xff, 0xff, 0xaf, 0x7f, 0x7f, 0xf0, 0xed, 0xff, 0xe7, 0xe7, 0xf5, 0xd7, 0x7b, 0xff, 0xdd, 0xff, 0x9d, 0xef, 0xef, 0xbf, 0xf9, 0xff, 0xfb, 0xfd, 0xff, 0xfd, 0xfa, 0xf9, 0xed, 0xbf, 0xdf, 0xdf, 0xbf, 0xbf, 0x33, 0xff, 0xff, 0x9f, 0x1f, 0xf7, 0x6b, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xfd, 0xde, 0xff, 0x6f, 0xf7, 0xf7, 0xff, 0x1b, 0xfe, 0xff, 0xff, 0xff, 0xe7, 0xaf, 0xac, 0xff, 0xfa, 0x2b, 0x5f, 0x7f, 0x7d, 0xe7, 0xdf, 0x7f, 0x73, 0xff, 0xfd, 0x3f, 0x66, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x73, 0xe9, 0xef, 0xb2, 0x93, 0xdd, 0xb7, 0xdf, 0xae, 0xff, 0x9f, 0xf2, 0xdf, 0xff, 0xb7, 0xf9, 0x9f, 0x1e, 0xeb, 0xf5, 0xff, 0x56, 0x7a, 0xfb, 0xed, 0x77, 0xbf, 0xfd, 0xde, 0xeb, 0xcc, 0xbf, 0xbd, 0xf6, 0xfe, 0x6f, 0xd6, 0xb3, 0xde, 0x3a, 0xff, 0xbf, 0xb3, 0x5e, 0x7b, 0xed, 0x75, 0xaf, 0xbd, 0x76, 0x7e, 0xf9, 0xaf, 0xbd, 0xf6, 0x5f, 0x9b, 0xfb, 0xff, 0xaf, 0x7f, 0xfe, 0x6f, 0x2f, 0xd5, 0x66, 0x9b, 0xdd, 0x6e, 0x33, 0xef, 0x7f, 0xfb, 0x6c, 0xfb, 0xad, 0xee, 0x66, 0xfe, 0xbf, 0xb6, 0x8e, 0x6a, 0xeb, 0xeb, 0xe6, 0xbe, 0x7b, 0xdd, 0x71, 0xdf, 0xfd, 0xdf, 0xde, 0x72, 0xdf, 0xfd, 0xb3, 0xb1, 0xff, 0xfa, 0xeb, 0xab, 0xff, 0xda, 0x42, 0xb9, 0xef, 0x6e, 0x77, 0xfd, 0xde, 0xbb, 0xff, 0xbf, 0xdc, 0xf7, 0xfe, 0x66, 0xee, 0xbf, 0xfe, 0xfa, 0xeb, 0xbf, 0xe1, 0x54, 0x5b, 0x6d, 0x7f, 0xfb, 0x05, 0x97, 0xfd, 0xda, 0xa9, 0xed, 0xd7, 0xbf, 0x9b, 0xf7, 0xff, 0xdb, 0xef, 0xbf, 0xfd, 0x7f, 0x9b, 0xfd, 0xb6, 0xb3, 0xdd, 0xf6, 0xdb, 0x77, 0xbc, 0xdd, 0x76, 0xfb, 0xf7, 0xe6, 0xfd, 0xff, 0xff, 0xc7, 0xff, 0x7f, 0x9f, 0x6f, 0xbe, 0xc9, 0x4d, 0x36, 0xd9, 0xe4, 0xb7, 0x47, 0x3e, 0xf9, 0xfc, 0xbd, 0xb1, 0xff, 0x7b, 0xed, 0xb7, 0xdf, 0x3e, 0xe3, 0x8b, 0x2f, 0x7e, 0xe1, 0xa5, 0x97, 0x6f, 0xdf, 0xf9, 0x85, 0x97, 0xff, 0x66, 0xe6, 0xff, 0x7f, 0xff, 0xfc, 0xf6, 0xcf, 0xff, 0xfe, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0xf9, 0xff, 0x7f, 0xff, 0xfd, 0x3f, 0x9b, 0xfb, 0xff, 0xf7, 0xdf, 0xff, 0xfe, 0xfe, 0xbf, 0xff, 0xf6, 0xb7, 0xdf, 0x7c, 0xb3, 0xf7, 0x7f, 0xdf, 0x7e, 0xf7, 0xef, 0xa6, 0xfe, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0x8b, 0x7f, 0xfc, 0xd1, 0x8f, 0x3f, 0xee, 0xe8, 0xe7, 0x8f, 0x3f, 0xfa, 0xfc, 0xab, 0x79, 0xff, 0xf6, 0xd9, 0x3f, 0xbf, 0xfa, 0xeb, 0x9f, 0x7f, 0xfe, 0xf3, 0xce, 0x3f, 0xff, 0xf5, 0xb3, 0xce, 0x7f, 0x6f, 0x6f, 0xfe, 0xdf, 0xfe, 0xfb, 0xed, 0xae, 0xb3, 0xff, 0xaf, 0xc9, 0x57, 0x7e, 0xd5, 0xd5, 0xbf, 0x59, 0x3e, 0xf9, 0x6f, 0xff, 0x9a, 0xff, 0xef, 0x8f, 0x3e, 0x7b, 0xe8, 0x33, 0xcf, 0x3f, 0x7a, 0xd4, 0x47, 0x1f, 0x7d, 0xfe, 0xd1, 0x47, 0x9f, 0x5f, 0xbe, 0xe6, 0xff, 0xef, 0xaf, 0xff, 0x5e, 0xe3, 0xcb, 0x2f, 0xbf, 0x7e, 0xf5, 0x97, 0x5f, 0xfe, 0xf3, 0xc5, 0xd7, 0xff, 0xf7, 0xbf, 0xf9, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xfe, 0xfa, 0xcb, 0xaf, 0x77, 0xfd, 0xf5, 0xd7, 0xff, 0x7f, 0xfd, 0xf5, 0xff, 0xf7, 0x6f, 0xfe, 0xff, 0xfe, 0xfa, 0xef, 0xaf, 0xbe, 0xf8, 0xea, 0xbf, 0xff, 0xfd, 0xf3, 0xcf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x9b, 0xff, 0xef, 0xbf, 0xfe, 0xfb, 0xeb, 0xaf, 0xbf, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x66, 0xff, 0xcb, 0xff, 0x7f, 0xfd, 0xf7, 0xcb, 0xff, 0xff, 0xff, 0xde, 0xff, 0x7f, 0x7a, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xbf, 0xe9, 0xff, 0xae, 0x9e, 0xfe, 0xfa, 0xa3, 0xad, 0xbf, 0xf4, 0xa2, 0xd7, 0x5e, 0x7d, 0xf5, 0xa5, 0x47, 0x4f, 0x7e, 0xf9, 0x6f, 0xfe, 0xfd, 0xef, 0xff, 0xff, 0xee, 0xfd, 0xe8, 0xf3, 0xcf, 0x7e, 0xfa, 0x1d, 0xe7, 0xae, 0xff, 0xfe, 0xdf, 0x7f, 0xff, 0x1a, 0xff, 0xff, 0xdb, 0x6f, 0x3f, 0xff, 0xbf, 0x5f, 0xff, 0xbd, 0xef, 0x77, 0x3f, 0xff, 0xfa, 0x75, 0xff, 0xbe, 0xff, 0x7f, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xba, 0x3d, 0xfd, 0xf6, 0xf7, 0xff, 0xb7, 0xdc, 0xf7, 0xfe, 0xf8, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xef, 0x8f, 0xbf, 0xff, 0xfb, 0xbf, 0xad, 0xfb, 0x9d, 0xb7, 0xc5, 0x5f, 0xe9, 0xfd, 0xf7, 0xdf, 0xff, 0x6b, 0xfe, 0x6f, 0xfe, 0xfe, 0xfb, 0xbe, 0xbf, 0xff, 0xbf, 0xef, 0xfd, 0xff, 0xd7, 0xfd, 0xbf, 0xff, 0x7f, 0xff, 0x7b, 0xff, 0x9b, 0xff, 0xbe, 0x7f, 0xee, 0xf9, 0xe7, 0xff, 0xef, 0xff, 0xf8, 0xc3, 0x1f, 0xff, 0xdf, 0xfd, 0xf3, 0xff, 0xf7, 0xff, 0xff, 0xe6, 0xff, 0xfb, 0xaf, 0xbf, 0xd6, 0xfa, 0xfb, 0xff, 0xbf, 0xff, 0xbf, 0xf7, 0xf8, 0xff, 0xff, 0xf5, 0x37, 0xdf, 0xbf, 0xbf, 0xf9, 0xff, 0xf3, 0x7f, 0xfd, 0xcf, 0xdf, 0x6b, 0xbf, 0xbf, 0xdf, 0xff, 0xfd, 0xff, 0xfe, 0xdb, 0xbf, 0xf7, 0xf7, 0xff, 0x6b, 0xfe, 0xff, 0xcf, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xbe, 0xfb, 0x7f, 0xff, 0xff, 0xf1, 0x67, 0xff, 0xff, 0x9b, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xe6, 0xff, 0xcb, 0xbf, 0xf7, 0xf4, 0x7b, 0xfd, 0xb5, 0xe7, 0xf5, 0xbf, 0xd9, 0x7e, 0xbf, 0xff, 0xf7, 0xfa, 0xff, 0xff, 0xbf, 0xe1, 0xff, 0xfa, 0xef, 0xbf, 0xf7, 0xfe, 0xf3, 0xca, 0xfe, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0x27, 0xd7, 0xff, 0x67, 0xf6, 0xff, 0xff, 0xbc, 0xf3, 0xcf, 0xfe, 0xfe, 0xfe, 0xff, 0xfd, 0x7f, 0xf7, 0xdd, 0xff, 0x5f, 0xff, 0xfd, 0xff, 0xff, 0x9b, 0xfe, 0xfc, 0xf2, 0x9b, 0xef, 0x3f, 0x7f, 0xbe, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0x9d, 0xdf, 0x77, 0xdf, 0xfd, 0xff, 0xbf, 0x66, 0x7f, 0xea, 0xa5, 0xbf, 0xfe, 0xf2, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xcf, 0xf7, 0xd7, 0x5f, 0xff, 0xfb, 0xb7, 0xf9, 0xdf, 0x6a, 0xab, 0xad, 0xb6, 0xce, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x79, 0xeb, 0xbd, 0xf7, 0xf7, 0xeb, 0x6f, 0xd4, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xf7, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x75, 0xde, 0xcb, 0x2f, 0xff, 0xf7, 0x5c, 0x99, 0xfb, 0xaf, 0x99, 0xf6, 0xba, 0xe9, 0xf1, 0xaf, 0x56, 0xfb, 0xdf, 0x7e, 0xfb, 0xfd, 0xef, 0xdf, 0x6c, 0xab, 0xcf, 0xee, 0x66, 0xfe, 0x7f, 0xf7, 0xd5, 0x6f, 0xff, 0xbf, 0xb7, 0xd6, 0xfe, 0xb7, 0xdf, 0x5e, 0xb5, 0xf3, 0xbd, 0xf2, 0xee, 0xb9, 0x93, 0xb1, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xee, 0xbc, 0xff, 0xfd, 0xf7, 0xdf, 0x6b, 0x7f, 0xff, 0xbd, 0xfd, 0xf7, 0x66, 0xec, 0xbf, 0xf6, 0xda, 0x6b, 0xaf, 0xfd, 0xff, 0x6a, 0xef, 0x7f, 0xff, 0xfd, 0xf5, 0xda, 0x7e, 0xfb, 0xed, 0xff, 0xbf, 0x99, 0xf7, 0xef, 0xbb, 0xef, 0xbe, 0xff, 0xfe, 0xdb, 0xbd, 0xff, 0xfb, 0xed, 0xff, 0xff, 0x6f, 0xf7, 0xdd, 0xff, 0x9f, 0x77, 0xe6, 0xfd, 0xfb, 0xec, 0xb3, 0xcb, 0x2e, 0xff, 0xf9, 0xf7, 0xfb, 0xff, 0xfe, 0xff, 0xcf, 0x99, 0x7f, 0xfe, 0xff, 0xcf, 0xbd, 0xb1, 0xff, 0xfa, 0xeb, 0xa5, 0xbf, 0x5e, 0x7b, 0xed, 0xbe, 0xff, 0x7d, 0xf7, 0xdf, 0x6e, 0x7e, 0xfd, 0xf5, 0xda, 0xbf, 0x6e, 0xe6, 0x9f, 0xfd, 0xf6, 0xdb, 0x6f, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xdf, 0x7f, 0xff, 0xff, 0x3b, 0x9b, 0xfb, 0x6d, 0xbf, 0xfd, 0xf6, 0xdb, 0xfd, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xb7, 0xdf, 0xff, 0xbf, 0xef, 0xe6, 0xfe, 0x6b, 0xaf, 0xbd, 0xf6, 0xda, 0xef, 0x37, 0xfe, 0xff, 0xff, 0xfe, 0x7f, 0x2b, 0xe3, 0xbd, 0xff, 0xfe, 0x7f, 0xbb, 0x79, 0xdf, 0xef, 0xbf, 0xff, 0xfa, 0xeb, 0xf2, 0x9f, 0xff, 0xfa, 0xb7, 0xdf, 0x3b, 0x7f, 0x7d, 0xf7, 0xdf, 0x17, 0x7f, 0x6f, 0xfe, 0xff, 0xff, 0x3f, 0xff, 0xfd, 0xbf, 0xfe, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x79, 0xf7, 0xff, 0x7f, 0xff, 0x9b, 0xff, 0xaf, 0x83, 0x1e, 0xfa, 0xe8, 0xa2, 0xcf, 0x3f, 0xff, 0xfc, 0xe5, 0x9f, 0x3f, 0xec, 0xd9, 0xe7, 0x1f, 0x7f, 0xfe, 0xe6, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf5, 0xdf, 0xff, 0xaf, 0xfd, 0xf7, 0xd7, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xba, 0xea, 0xad, 0xbf, 0xae, 0xff, 0xff, 0xef, 0x7f, 0x5d, 0xf7, 0xff, 0xdf, 0xff, 0xfd, 0xf5, 0xd7, 0xff, 0x6f, 0xfe, 0xbf, 0xda, 0xea, 0xab, 0xaf, 0xfe, 0xff, 0xef, 0xaf, 0xff, 0xfd, 0xf5, 0xdf, 0x77, 0xdf, 0x7d, 0xf5, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xfb, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xfb, 0x7d, 0xff, 0xbf, 0xf7, 0xf7, 0x5f, 0x7f, 0xff, 0xff, 0x66, 0xff, 0x93, 0x6f, 0x7d, 0xf5, 0xf5, 0xdb, 0x4f, 0xf5, 0xbc, 0xe7, 0x1f, 0xdf, 0x7e, 0xf3, 0xff, 0xff, 0xff, 0xfb, 0xbf, 0xf9, 0xff, 0x2e, 0xbb, 0xfe, 0xfa, 0xeb, 0xae, 0xbf, 0xfc, 0xf0, 0xc7, 0x5f, 0x7f, 0xf9, 0xf5, 0x97, 0x5f, 0x7e, 0xf5, 0x6f, 0xfe, 0xdf, 0xff, 0xee, 0xfd, 0xff, 0xba, 0xfc, 0xed, 0xbe, 0xff, 0xed, 0xff, 0x58, 0x07, 0x6a, 0xb8, 0xf1, 0xff, 0xe7, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9f, 0xff, 0xff, 0x5f, 0xff, 0xef, 0xef, 0xaf, 0xf7, 0xdf, 0x6f, 0xef, 0xff, 0xff, 0x66, 0xef, 0xff, 0x7f, 0xfb, 0xfd, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x3b, 0xff, 0x7f, 0xef, 0xfd, 0xb7, 0xfe, 0xff, 0xb7, 0xf9, 0xff, 0xde, 0xeb, 0xef, 0xf7, 0xfe, 0xda, 0xed, 0xa9, 0x75, 0xed, 0xe5, 0xe6, 0x7f, 0xf7, 0xfd, 0xf9, 0xff, 0xfb, 0x67, 0xfc, 0xff, 0xbd, 0xfb, 0xde, 0xeb, 0x9f, 0xfd, 0xfd, 0xdb, 0xde, 0x7e, 0x6b, 0xff, 0xfb, 0xfd, 0xf7, 0xd7, 0xff, 0xff, 0x99, 0xff, 0x9c, 0xbf, 0x55, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xcb, 0xfd, 0xe7, 0xfd, 0xf1, 0xc6, 0x3f, 0xbf, 0xfb, 0xff, 0xc6, 0xff, 0xab, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0xe7, 0xcd, 0xbf, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf9, 0xff, 0xff, 0x3f, 0xff, 0xfd, 0xdf, 0xff, 0xfe, 0xff, 0x1d, 0xff, 0xbf, 0xbf, 0x7e, 0xef, 0xaf, 0xbf, 0xff, 0xff, 0x6b, 0xfe, 0x7d, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xce, 0xfd, 0xff, 0x3b, 0xbc, 0xf8, 0xc7, 0xfe, 0xf7, 0xff, 0xff, 0xff, 0x99, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xbe, 0xfb, 0xbf, 0xff, 0xff, 0xb6, 0xfb, 0xfb, 0xff, 0xff, 0xbf, 0xb7, 0xbf, 0x66, 0xff, 0xed, 0xaf, 0xbf, 0xbe, 0xfa, 0xbd, 0xf4, 0xfe, 0xfa, 0xa7, 0xd7, 0xb7, 0xbf, 0xe5, 0xd5, 0x9b, 0x7f, 0xbf, 0xb7, 0xf9, 0xff, 0x7b, 0xed, 0xab, 0xbf, 0xfe, 0xfb, 0xbf, 0xbf, 0xdd, 0xdc, 0xf5, 0xff, 0x37, 0xdf, 0xfd, 0xef, 0xcd, 0xfd, 0x6f, 0xfe, 0x3d, 0xf7, 0xfb, 0xbf, 0xff, 0x7f, 0xff, 0xff, 0xab, 0xbf, 0xff, 0xff, 0xff, 0xdf, 0xbf, 0x7f, 0xff, 0xd7, 0xff, 0x9b, 0xff, 0x7b, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdf, 0x7f, 0x7f, 0xff, 0xf9, 0xfb, 0xef, 0xbc, 0xf5, 0xd1, 0xaf, 0xff, 0xa6, 0xff, 0xbf, 0xef, 0xbf, 0x5f, 0xeb, 0xef, 0xaf, 0xff, 0x5f, 0xdf, 0x5c, 0xdf, 0xad, 0xf7, 0xf5, 0xff, 0x7f, 0xff, 0xaf, 0xd9, 0xff, 0xf2, 0xfb, 0xef, 0x97, 0xff, 0xfe, 0xeb, 0xff, 0xd5, 0x9f, 0xfd, 0xb7, 0xf9, 0x7e, 0xfd, 0xff, 0xff, 0xff, 0x65, 0xfe, 0xb7, 0x5e, 0x7b, 0xef, 0xed, 0xb6, 0xff, 0xfa, 0xff, 0xf9, 0x6d, 0xb7, 0xfc, 0xba, 0xf9, 0x7f, 0xff, 0xf7, 0xfa, 0x1b, 0xf5, 0xf5, 0xe7, 0x5e, 0x7b, 0xed, 0xb5, 0xbf, 0xfe, 0x3f, 0xff, 0x6b, 0x6f, 0x9f, 0xff, 0xdf, 0x79, 0xe7, 0x9d, 0x57, 0xe6, 0xbe, 0xe9, 0x66, 0xbd, 0xf7, 0x5b, 0x6d, 0xa5, 0xff, 0xfd, 0x35, 0xdb, 0xd6, 0xaf, 0xd7, 0xb4, 0xd3, 0xef, 0xb7, 0x9b, 0x91, 0x6f, 0x7f, 0xf9, 0xef, 0xbd, 0x77, 0xde, 0xa9, 0xff, 0x7f, 0xed, 0xdc, 0xf7, 0xff, 0x37, 0x4d, 0xf4, 0xf5, 0xef, 0x6c, 0xec, 0xff, 0xff, 0xdb, 0x6f, 0xe5, 0xad, 0xb7, 0xfa, 0xff, 0x5f, 0x5b, 0xf7, 0xfd, 0xef, 0xff, 0x7b, 0xff, 0xfd, 0xbd, 0x19, 0xf9, 0xaf, 0xfd, 0xf8, 0x5b, 0x6d, 0xbf, 0x95, 0xfe, 0xf7, 0xdf, 0x7e, 0xfb, 0xff, 0xbf, 0xfa, 0x7f, 0xff, 0xff, 0xef, 0x86, 0x3d, 0xfb, 0x7e, 0xff, 0xef, 0xbe, 0xfb, 0xff, 0xff, 0x6f, 0x7e, 0xb7, 0xff, 0xf7, 0x9d, 0x7f, 0xff, 0xf9, 0xf7, 0x9d, 0x79, 0x9f, 0x2f, 0xbf, 0xff, 0xf3, 0xcf, 0xff, 0xff, 0x7f, 0xf7, 0xbf, 0xcc, 0x57, 0xf9, 0xed, 0xff, 0xde, 0x7f, 0x63, 0x65, 0xae, 0x9f, 0x7e, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfb, 0xcf, 0x7e, 0x77, 0xf1, 0xf7, 0xdb, 0x67, 0xaf, 0xfd, 0xf7, 0xba, 0x99, 0xf8, 0x66, 0xbb, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0x7f, 0xff, 0xfd, 0xdf, 0xff, 0x7f, 0x7e, 0xff, 0xef, 0xff, 0xff, 0xce, 0xe6, 0xbe, 0xdb, 0xff, 0xbf, 0xfd, 0xf6, 0xfb, 0xff, 0xfb, 0xdf, 0xff, 0xf7, 0xff, 0xef, 0xfd, 0xff, 0xfd, 0xff, 0xef, 0xbb, 0xb9, 0xfd, 0xda, 0xdf, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0x8e, 0xff, 0xfe, 0x7b, 0xff, 0xf5, 0xdf, 0xff, 0x6e, 0xde, 0xff, 0xeb, 0xaa, 0xbf, 0xff, 0xfe, 0xdb, 0xff, 0xdf, 0x5f, 0xfd, 0xb3, 0x4f, 0x7f, 0x7d, 0xfd, 0xd5, 0x57, 0xdf, 0x9b, 0xff, 0xfd, 0xf7, 0xff, 0xfa, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x6e, 0xbd, 0xff, 0xdf, 0x7f, 0xff, 0xdd, 0xff, 0xe6, 0xff, 0xeb, 0xa3, 0x8b, 0x3e, 0xfa, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xf9, 0x47, 0x9f, 0x7f, 0xfc, 0xf0, 0x67, 0x9f, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xaf, 0xbf, 0xfe, 0xfa, 0xdf, 0xff, 0x7f, 0xfd, 0xe5, 0xd7, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xfa, 0xea, 0xaf, 0xbf, 0xfe, 0xf7, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xaf, 0xfe, 0xeb, 0xef, 0xbf, 0xaf, 0xfe, 0xff, 0xff, 0x7f, 0x5f, 0xfc, 0xf7, 0xdf, 0x5f, 0x7f, 0x7d, 0xf5, 0xff, 0xe6, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xeb, 0x7f, 0xff, 0xfe, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xfd, 0xde, 0x5f, 0xff, 0xbf, 0xf9, 0xff, 0xf6, 0xdb, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb, 0xff, 0xa7, 0xdb, 0x7d, 0xff, 0xbf, 0xa7, 0xfe, 0x6f, 0xfe, 0xbf, 0x69, 0xaf, 0xb7, 0xfa, 0xfa, 0xeb, 0xaf, 0xbf, 0xdc, 0xa5, 0x57, 0x5d, 0x7b, 0xd9, 0xf5, 0xd7, 0x5f, 0xff, 0x9b, 0xfd, 0xef, 0x3f, 0xcb, 0xbf, 0xff, 0xfe, 0xff, 0xcf, 0xf3, 0xf7, 0x7f, 0xee, 0xd7, 0x63, 0xff, 0xfd, 0xfd, 0xf6, 0xf9, 0xc6, 0xff, 0xff, 0xfa, 0xff, 0x77, 0xff, 0xff, 0xff, 0xbf, 0xf2, 0xff, 0xf5, 0xed, 0xff, 0xff, 0xee, 0xff, 0xef, 0xff, 0xbb, 0xf9, 0xfb, 0xff, 0xbf, 0xff, 0xec, 0xb7, 0xef, 0xfe, 0xff, 0xff, 0x73, 0x97, 0xff, 0x5f, 0xff, 0x7f, 0x7f, 0xff, 0xfb, 0x6f, 0xfc, 0xb7, 0xfe, 0xfb, 0xee, 0xbf, 0xee, 0xfe, 0xbf, 0xe9, 0x9f, 0x3b, 0xfa, 0xe7, 0xd7, 0x5b, 0x77, 0xfc, 0xf0, 0xff, 0x98, 0xff, 0xbf, 0xaf, 0x7f, 0xbe, 0xfa, 0xef, 0xfb, 0xeb, 0xf9, 0xfe, 0xff, 0x7f, 0x7f, 0xef, 0xdf, 0xbf, 0xf7, 0xff, 0x7f, 0xe6, 0xef, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xef, 0xbd, 0xf7, 0xfe, 0x56, 0xfe, 0xfd, 0x77, 0xdc, 0x74, 0x9f, 0xdf, 0xf7, 0xbf, 0xf9, 0xff, 0xfa, 0xff, 0xfe, 0xff, 0xff, 0xed, 0xf7, 0xef, 0xd7, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x67, 0xee, 0xd5, 0xbf, 0xff, 0x7f, 0x7f, 0xd7, 0xff, 0xff, 0x5b, 0xff, 0xfa, 0xf7, 0xbf, 0xdf, 0xfa, 0xba, 0xfb, 0xf7, 0x7d, 0x9a, 0xff, 0x4f, 0xff, 0xed, 0xf8, 0xfd, 0xfb, 0xdf, 0xff, 0x7f, 0xc5, 0xf9, 0xfe, 0xff, 0xf5, 0xbf, 0xfd, 0xff, 0xff, 0x7f, 0x66, 0xff, 0xef, 0xff, 0xfd, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xf7, 0x9f, 0xb7, 0xf9, 0xff, 0xe9, 0xad, 0xff, 0xbe, 0xfe, 0x7b, 0xcc, 0xff, 0xff, 0x5f, 0xfe, 0xbf, 0x6d, 0x7f, 0xf5, 0xff, 0xff, 0xfe, 0x6f, 0xf6, 0xdf, 0xbe, 0xff, 0xfd, 0xbf, 0x5f, 0xf2, 0xdd, 0xe9, 0xff, 0x7e, 0xdd, 0xff, 0xcf, 0x5d, 0xbf, 0xff, 0xf7, 0xff, 0x9b, 0xff, 0xaf, 0xbe, 0xff, 0xef, 0xaf, 0xdf, 0xfc, 0xef, 0xff, 0xff, 0xfd, 0xf7, 0xf7, 0xf6, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0x86, 0xff, 0x9b, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0x6f, 0xf3, 0xf7, 0xc5, 0xf2, 0xfe, 0xe5, 0xf7, 0xfd, 0xff, 0xfe, 0xff, 0x8f, 0xd9, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xfe, 0xdf, 0xeb, 0xff, 0x7d, 0xf9, 0xb5, 0x77, 0xeb, 0x7e, 0xff, 0xf5, 0xd7, 0xff, 0x6d, 0xfe, 0xbf, 0xcf, 0xfb, 0xff, 0xb9, 0xd7, 0x5f, 0x3a, 0xfb, 0x5f, 0x7b, 0x3f, 0xf7, 0xba, 0xcb, 0x6f, 0xbd, 0xf5, 0xff, 0x9b, 0xf5, 0xec, 0xb7, 0xff, 0xfd, 0xef, 0xfc, 0xb3, 0xfe, 0xff, 0xdf, 0x5f, 0x67, 0x9d, 0xdf, 0xfc, 0xeb, 0xaf, 0xff, 0xd7, 0xe6, 0xfe, 0xff, 0xb3, 0xdb, 0xfd, 0xbb, 0xf9, 0x6f, 0xff, 0xf5, 0xf5, 0xf3, 0xed, 0xb3, 0xcf, 0x74, 0xd3, 0x4a, 0xfb, 0xbb, 0x99, 0xff, 0xee, 0xba, 0x75, 0xff, 0x7b, 0xaf, 0xf9, 0x75, 0x56, 0x55, 0xd4, 0xf3, 0xfe, 0x33, 0xfd, 0xbf, 0xfb, 0xfe, 0x6c, 0xec, 0xbf, 0xf7, 0xfb, 0xff, 0xbd, 0xef, 0xff, 0x7e, 0xbd, 0x5f, 0x2b, 0x1f, 0xf7, 0xef, 0xf9, 0xfb, 0x7f, 0xbf, 0xbf, 0x99, 0xfb, 0xef, 0xbf, 0xff, 0x7f, 0xee, 0xff, 0xbf, 0x5d, 0xf7, 0xd7, 0x4b, 0x2f, 0xed, 0xbf, 0xda, 0x5f, 0x7f, 0xfd, 0xcf, 0xe6, 0xfd, 0xff, 0xfe, 0xf3, 0xaf, 0xff, 0xff, 0x76, 0xfb, 0xed, 0x7e, 0xff, 0xfd, 0xff, 0x9d, 0x7f, 0xfb, 0xdd, 0xf7, 0xb5, 0x79, 0xff, 0x7f, 0xfd, 0x79, 0xdf, 0xdf, 0xff, 0xff, 0xf1, 0xc6, 0xff, 0xde, 0xfa, 0xff, 0xef, 0xf7, 0x7f, 0xfe, 0x79, 0x6f, 0xec, 0xd7, 0x16, 0xfb, 0xcd, 0xb7, 0xef, 0xfe, 0xf3, 0x8d, 0x75, 0xff, 0x7d, 0xf7, 0xdb, 0x77, 0x3f, 0xbd, 0xf4, 0xbf, 0x99, 0xf9, 0xf7, 0xdf, 0x3f, 0xbf, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xef, 0xbf, 0x7f, 0xfe, 0xff, 0xc7, 0x3e, 0xfb, 0xcf, 0xe6, 0xfe, 0xfe, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x7d, 0xf7, 0xef, 0xfd, 0xff, 0xb5, 0xdb, 0xfe, 0xbb, 0xa9, 0xff, 0xfa, 0xef, 0xef, 0xde, 0xfe, 0xff, 0xdb, 0x6d, 0xdf, 0xff, 0xb5, 0xdf, 0xfa, 0xf9, 0xff, 0xf5, 0xd7, 0xff, 0x6a, 0xde, 0x9f, 0x7c, 0xf2, 0xcf, 0x7f, 0xff, 0xfd, 0x7f, 0xab, 0xff, 0x7e, 0xf1, 0xdd, 0x7f, 0xfb, 0xf5, 0xf7, 0xdf, 0xdf, 0x9b, 0xff, 0xaf, 0xff, 0x7f, 0xef, 0xfd, 0xe7, 0xdf, 0xff, 0xfa, 0xff, 0xff, 0xef, 0xfd, 0xdf, 0xdf, 0xff, 0xef, 0xff, 0xff, 0xe6, 0xff, 0xfb, 0xf2, 0xcf, 0x3e, 0xbf, 0xf8, 0xf3, 0x8f, 0x3e, 0xf7, 0xf9, 0xc7, 0x9f, 0x7f, 0xf6, 0xd1, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xff, 0xeb, 0xef, 0xff, 0xef, 0xff, 0xeb, 0xef, 0xff, 0xf3, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xbf, 0xfa, 0xef, 0xff, 0xef, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0x7f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xee, 0xff, 0xff, 0xfd, 0xf5, 0xdf, 0x7f, 0x5f, 0x7d, 0xf5, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xbf, 0xff, 0xff, 0xbf, 0xfe, 0xee, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xd3, 0xff, 0xbf, 0xfb, 0xf2, 0xfb, 0x6f, 0x7d, 0xff, 0xe5, 0x77, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x6f, 0xf2, 0xff, 0xab, 0xae, 0xbf, 0xe6, 0x70, 0xcb, 0x2e, 0x3d, 0xbc, 0x75, 0xd7, 0x5f, 0x7f, 0xf9, 0xf1, 0x47, 0x0f, 0xff, 0x9a, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xdd, 0xfc, 0xec, 0xff, 0xf7, 0xf7, 0xd8, 0x73, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xc6, 0xbf, 0xff, 0xfb, 0xeb, 0xef, 0xdf, 0xbf, 0xab, 0xeb, 0x5f, 0xff, 0xff, 0xfd, 0xf7, 0x7f, 0xef, 0xff, 0xef, 0xef, 0x9f, 0xf9, 0xbf, 0xdf, 0xff, 0xfd, 0xf3, 0xff, 0xbf, 0x7f, 0xff, 0xff, 0xfb, 0xbf, 0xd3, 0xaf, 0xbf, 0xf7, 0x7f, 0xff, 0xfe, 0x6f, 0xfe, 0xf7, 0x7e, 0xf8, 0xee, 0xbf, 0xbf, 0xde, 0x3e, 0xe9, 0xd9, 0x7f, 0xfd, 0xf5, 0xd7, 0x7f, 0xff, 0xfd, 0xf7, 0x7f, 0x9b, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xf6, 0x9f, 0xff, 0x79, 0xf5, 0xdf, 0xa9, 0xfe, 0xfb, 0xcf, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xcf, 0x7b, 0x7b, 0xff, 0xef, 0xb9, 0xdf, 0x9b, 0x7f, 0xee, 0xf3, 0xdf, 0xd9, 0x7f, 0xcc, 0xf2, 0xf7, 0xdf, 0xf7, 0xbf, 0xd9, 0xff, 0xfa, 0xfb, 0xff, 0xbf, 0xfe, 0x2e, 0xcb, 0x6f, 0x3f, 0xcf, 0xf9, 0xff, 0xdf, 0x7f, 0xe5, 0xe5, 0xf7, 0xff, 0x6d, 0xfe, 0xff, 0xff, 0xfb, 0x3f, 0xff, 0xef, 0xfe, 0xdf, 0xef, 0x7c, 0x7f, 0xbf, 0xfe, 0xdf, 0xff, 0xbf, 0xaf, 0xf7, 0xbf, 0x9b, 0xfd, 0xfd, 0x3b, 0xef, 0xf8, 0x33, 0xed, 0xff, 0xdf, 0xff, 0xff, 0xf4, 0x75, 0xfe, 0xe9, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xcf, 0xff, 0xfe, 0xec, 0xfb, 0xff, 0xdb, 0xdf, 0xbf, 0xff, 0xfe, 0x4e, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xf9, 0xff, 0xfb, 0xff, 0xa7, 0xff, 0x7e, 0xff, 0xed, 0xb7, 0xff, 0xfd, 0xee, 0xed, 0x7d, 0xfe, 0xff, 0xe7, 0xbe, 0xff, 0x6f, 0xfc, 0xff, 0xfe, 0xfb, 0xeb, 0xb5, 0xfd, 0xf6, 0xdb, 0x27, 0x3f, 0xff, 0xfd, 0xbf, 0xcf, 0xef, 0xbf, 0xfd, 0xf6, 0x7f, 0x99, 0xff, 0xaf, 0xdf, 0xfe, 0xff, 0xf3, 0xbf, 0x3f, 0xff, 0xfb, 0x5f, 0x7f, 0xfd, 0xff, 0xf7, 0xff, 0x5f, 0xed, 0xfd, 0xff, 0xa6, 0xff, 0xeb, 0x3f, 0xd6, 0xf9, 0xe7, 0xfb, 0xef, 0xff, 0xfe, 0x7f, 0x7e, 0xff, 0xfd, 0xf7, 0xf5, 0xff, 0xff, 0xff, 0xaf, 0xd9, 0xff, 0xda, 0x4f, 0xfc, 0xff, 0xfd, 0xff, 0xeb, 0xbf, 0xff, 0x9f, 0xff, 0xb2, 0xeb, 0x4e, 0xef, 0xf5, 0xd7, 0xff, 0x6d, 0xfe, 0xe7, 0xff, 0xfb, 0x1f, 0xff, 0xbf, 0xff, 0xde, 0xeb, 0xf9, 0xfb, 0xf7, 0xe7, 0xba, 0x53, 0x6f, 0xbd, 0xf5, 0xff, 0x9b, 0xf5, 0xf9, 0xff, 0xfe, 0x7d, 0xff, 0xff, 0xbf, 0xfe, 0x7a, 0xff, 0xfb, 0x67, 0x98, 0xff, 0xd6, 0xeb, 0xaf, 0x9f, 0x57, 0xe6, 0xfe, 0xe9, 0xe5, 0xdf, 0xbb, 0xfb, 0xfd, 0xaf, 0xff, 0x3e, 0xf5, 0xfd, 0xff, 0xfa, 0x57, 0xf4, 0xd2, 0x4a, 0xb3, 0xbb, 0x99, 0x1f, 0xae, 0xad, 0x71, 0xff, 0x3b, 0xef, 0xa9, 0xb7, 0xce, 0xb5, 0xfe, 0xf3, 0xef, 0x37, 0xdd, 0xbe, 0xfb, 0xea, 0x64, 0xec, 0xbf, 0xfe, 0xfe, 0xdf, 0xaf, 0xef, 0xbf, 0xfa, 0xee, 0xdb, 0xff, 0x7f, 0xf7, 0xed, 0x5f, 0xfe, 0x7f, 0xff, 0xbf, 0x99, 0xfb, 0xef, 0xff, 0xfe, 0x3f, 0xfb, 0xff, 0xbf, 0xfe, 0xfa, 0xff, 0xdf, 0x7b, 0xe5, 0xbf, 0x92, 0x5f, 0x7f, 0xfd, 0x0f, 0xc6, 0x3d, 0xff, 0xff, 0xf3, 0xff, 0x3f, 0xff, 0xf6, 0xdb, 0x6f, 0x7e, 0xfb, 0xfd, 0xf7, 0x9d, 0xff, 0xf7, 0xdd, 0xf7, 0x9d, 0x79, 0xdf, 0x7f, 0xff, 0xf9, 0xf7, 0x9f, 0x7f, 0xfe, 0xf9, 0xf7, 0xbf, 0xdf, 0x3a, 0xe3, 0x6d, 0xff, 0x7d, 0xf6, 0x79, 0x6f, 0xec, 0xdb, 0x3e, 0xfb, 0xcf, 0xb3, 0xfd, 0x76, 0xfb, 0xed, 0x7e, 0xf7, 0xdd, 0xe7, 0xdb, 0x57, 0x2f, 0xfd, 0xf4, 0xaa, 0x9b, 0xf9, 0xf6, 0xef, 0x7f, 0xbf, 0xfd, 0xff, 0xdb, 0xef, 0xff, 0xfd, 0xff, 0xbf, 0x7f, 0xfe, 0xf7, 0xcf, 0x36, 0xfb, 0xcf, 0xe6, 0x7e, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xef, 0xfd, 0xff, 0xb5, 0xdb, 0xfe, 0xbb, 0xb9, 0xff, 0xfe, 0xfb, 0x77, 0xfe, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xfd, 0xb5, 0x9a, 0xfe, 0xfb, 0xf7, 0xff, 0xd7, 0xdf, 0x6e, 0xde, 0xbd, 0xfd, 0xf6, 0xdf, 0x37, 0xff, 0xfd, 0xf3, 0xdb, 0x77, 0x7e, 0x95, 0x4d, 0x7f, 0xed, 0x6e, 0xb5, 0xdf, 0xdf, 0x9b, 0xff, 0xff, 0xbf, 0xee, 0xf3, 0xff, 0xf5, 0xff, 0xfe, 0xfa, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfa, 0x5f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xfb, 0xa3, 0x8f, 0x3e, 0xfb, 0xf8, 0xf3, 0x8f, 0x1e, 0x7f, 0xda, 0xe7, 0xb7, 0x7f, 0xee, 0xf9, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xfa, 0xff, 0xef, 0xff, 0xff, 0xf7, 0xeb, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xfe, 0xff, 0xbf, 0xff, 0xfd, 0xfa, 0xff, 0xf5, 0xbf, 0xff, 0xfe, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xbf, 0xff, 0xfe, 0xfa, 0xfb, 0xaf, 0xff, 0xfe, 0xf3, 0xdd, 0x61, 0xbd, 0x57, 0xdf, 0xd7, 0x5f, 0x7d, 0xf5, 0xff, 0xe6, 0xff, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xcb, 0xbf, 0xff, 0xdc, 0x7f, 0xde, 0xfb, 0xf7, 0xff, 0xe5, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf7, 0xfb, 0xff, 0xff, 0xfc, 0xff, 0xfb, 0xef, 0x7f, 0xf7, 0xe7, 0x27, 0xdf, 0x7f, 0xfb, 0xc9, 0xb7, 0xfb, 0x6f, 0xfe, 0xff, 0x6b, 0xad, 0xbd, 0xfe, 0xfa, 0x6b, 0xae, 0x36, 0xee, 0xf5, 0xd7, 0x5b, 0x7d, 0xf9, 0x75, 0xd7, 0x0b, 0xff, 0x9b, 0xcd, 0xef, 0xff, 0xef, 0xdf, 0xff, 0xfe, 0xfa, 0xff, 0xb7, 0xef, 0xfd, 0xe5, 0xf9, 0xd3, 0xe7, 0xfe, 0x7f, 0xff, 0xd9, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xdd, 0xfb, 0xbb, 0x7f, 0xff, 0xfb, 0xdc, 0xfd, 0xff, 0xff, 0xfe, 0xed, 0xeb, 0xbf, 0xe9, 0xff, 0xdf, 0xff, 0xf7, 0xdd, 0xfb, 0xff, 0x7f, 0xf7, 0xff, 0xdf, 0xff, 0xaf, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xdc, 0xbf, 0xde, 0xee, 0xeb, 0xad, 0x3f, 0x6e, 0x76, 0xc3, 0x59, 0x7f, 0xfc, 0xf5, 0xd7, 0xdd, 0x7f, 0xe5, 0xd1, 0x7b, 0x19, 0xff, 0xbb, 0xdf, 0xfd, 0xf6, 0xda, 0xee, 0xdf, 0xbe, 0xfd, 0xbf, 0xbf, 0x37, 0xfb, 0xef, 0xbd, 0x35, 0x5f, 0xf7, 0x7f, 0xe6, 0xee, 0xfb, 0xbe, 0x7f, 0xee, 0xf9, 0x9e, 0x9f, 0xff, 0xff, 0xfc, 0xfe, 0xff, 0x77, 0xfc, 0xf2, 0x8f, 0x3e, 0xf7, 0xbf, 0xf1, 0xff, 0xff, 0xdf, 0xaf, 0xbf, 0xe6, 0xfa, 0xeb, 0xed, 0xff, 0xfb, 0xbe, 0x97, 0xdf, 0x7f, 0xf7, 0xfd, 0xf7, 0xff, 0x67, 0xfc, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xd5, 0x37, 0xdf, 0xbb, 0xfd, 0xfd, 0xcf, 0xff, 0xdf, 0x76, 0xbb, 0xbd, 0xf6, 0xff, 0x1a, 0xfd, 0x8f, 0xff, 0xfb, 0xdc, 0xf1, 0xff, 0xff, 0xef, 0xec, 0xe5, 0xe7, 0x9f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7e, 0xe6, 0xff, 0xaf, 0xff, 0xbf, 0xf5, 0xf6, 0xff, 0xff, 0xbe, 0xfe, 0xef, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xaf, 0xf9, 0xff, 0xfa, 0xff, 0xbf, 0xfb, 0xee, 0x7f, 0xef, 0xb3, 0xdf, 0xec, 0xf6, 0xdf, 0x7f, 0xc7, 0x9d, 0x77, 0xde, 0xff, 0x6f, 0xfe, 0x9d, 0x76, 0xff, 0xe7, 0x9f, 0xdf, 0x7c, 0xfb, 0xef, 0xff, 0xf7, 0xef, 0xfb, 0x4d, 0x2f, 0xbf, 0xfc, 0xf2, 0x7f, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xdf, 0x3f, 0xff, 0xfc, 0xf7, 0xdf, 0xff, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xdd, 0xbf, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x7c, 0xbe, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x7f, 0x3e, 0xff, 0xff, 0x8f, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x5f, 0x6e, 0xef, 0x7f, 0xff, 0xdf, 0xff, 0x4b, 0x7f, 0x3d, 0xf5, 0xd7, 0xff, 0x6d, 0xfe, 0xff, 0x9f, 0x3b, 0xff, 0xff, 0xbd, 0x9c, 0x2e, 0xdb, 0x55, 0x2f, 0x9d, 0xfd, 0xd6, 0x5b, 0x6b, 0xb5, 0xf5, 0xff, 0x9b, 0xf5, 0xdf, 0xa7, 0x9f, 0x7f, 0xff, 0xc9, 0xb7, 0xdf, 0x78, 0xd6, 0x5b, 0x67, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xff, 0xd7, 0xe6, 0xfe, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xab, 0xfb, 0xaf, 0x60, 0xaf, 0xdd, 0x6b, 0x7b, 0xfd, 0xf5, 0xd7, 0x4b, 0xb7, 0xbb, 0x99, 0xff, 0xf7, 0xbb, 0xf6, 0xda, 0xfb, 0xe2, 0xbb, 0xa5, 0x7f, 0xbb, 0xfc, 0xda, 0xfe, 0xfd, 0xf7, 0xdf, 0x7b, 0xff, 0x6c, 0xec, 0xff, 0xdd, 0xff, 0xf7, 0xdd, 0xb3, 0xdc, 0x7e, 0xe9, 0xf5, 0xfc, 0xfd, 0xf5, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xbf, 0x99, 0xfb, 0xff, 0xa7, 0xff, 0x7f, 0xfe, 0x2c, 0xa7, 0x5f, 0xea, 0xb7, 0xdf, 0x7b, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0x8f, 0xe6, 0xfd, 0xff, 0xf2, 0xdb, 0xbe, 0xbb, 0xdd, 0xf2, 0xfb, 0xef, 0xee, 0xff, 0xed, 0x77, 0xff, 0x7d, 0xf7, 0xfd, 0xf7, 0xbd, 0x79, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x77, 0xfe, 0x77, 0xde, 0x37, 0xdf, 0xf4, 0xcb, 0x7f, 0x9f, 0x7d, 0xf6, 0x79, 0x6f, 0xec, 0xff, 0x34, 0xfb, 0xec, 0xb3, 0xef, 0xfc, 0xfb, 0xcd, 0x75, 0xfc, 0xfd, 0x74, 0xd3, 0x4f, 0x3f, 0xbd, 0xf4, 0xbf, 0x99, 0xf9, 0xf7, 0xfb, 0x6f, 0xbf, 0xfd, 0xff, 0xdf, 0x3f, 0xff, 0xff, 0xff, 0x77, 0x7f, 0xec, 0xb5, 0xd7, 0x3e, 0xfb, 0xcf, 0xe6, 0xbe, 0xff, 0xff, 0xfb, 0xde, 0xfb, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfb, 0xed, 0xb7, 0xd7, 0xfe, 0xbb, 0xa9, 0xff, 0xe7, 0xf9, 0xff, 0xfe, 0x7f, 0xf7, 0xff, 0x2d, 0xf6, 0xf3, 0xb5, 0xdf, 0xff, 0x7f, 0xfd, 0xf5, 0xd7, 0xff, 0x6a, 0xde, 0xdf, 0xfd, 0xf3, 0x9f, 0x7f, 0xfe, 0xff, 0x77, 0x8b, 0xfc, 0x7d, 0x95, 0xd5, 0xfe, 0xff, 0xfe, 0xfb, 0xee, 0xdf, 0x98, 0xff, 0xff, 0xfe, 0x7f, 0xef, 0xfd, 0xef, 0xff, 0xcf, 0x32, 0xbf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xe6, 0xff, 0xff, 0xb3, 0xcf, 0x3f, 0xff, 0xf8, 0xf3, 0x8f, 0x3e, 0xff, 0xf1, 0x67, 0x9f, 0x7f, 0xf4, 0xd1, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xfa, 0xfb, 0x7f, 0xff, 0xf9, 0xfb, 0x9f, 0xaf, 0xff, 0xfb, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xfe, 0xeb, 0xdf, 0xff, 0xfd, 0xf5, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xaf, 0xff, 0xff, 0xe7, 0xbf, 0xbf, 0xff, 0xff, 0xea, 0x3f, 0xff, 0xfd, 0xf7, 0xff, 0xd7, 0x5f, 0x7f, 0xfd, 0xff, 0x66, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7e, 0xff, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xf9, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xfc, 0xf2, 0xfb, 0x6f, 0x77, 0xfb, 0xff, 0x1f, 0x5f, 0x7e, 0xff, 0xfd, 0xf7, 0xff, 0x6f, 0xfa, 0xff, 0xeb, 0xae, 0xbd, 0xfa, 0x78, 0xc3, 0x2e, 0xbf, 0xbe, 0xf1, 0xd7, 0x4f, 0x6b, 0xdd, 0x75, 0xd7, 0x5c, 0xf7, 0x9b, 0x7f, 0xff, 0xff, 0xef, 0x31, 0xcf, 0x37, 0xfb, 0xff, 0xfc, 0x97, 0x7f, 0xf4, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xc6, 0xfb, 0xff, 0xfc, 0xfb, 0x63, 0x7e, 0xf7, 0xfd, 0xef, 0xab, 0xff, 0xf7, 0xee, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xbe, 0x9f, 0xf9, 0xff, 0xff, 0xbd, 0xaf, 0xfe, 0xfe, 0xfb, 0x7d, 0xf7, 0x5f, 0xfd, 0xf7, 0xfd, 0xff, 0xe9, 0xff, 0xfe, 0x7f, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xfc, 0xeb, 0xab, 0xff, 0xee, 0x7a, 0xcb, 0xdf, 0xee, 0xfd, 0xf5, 0xc5, 0xff, 0x6f, 0x7d, 0xf1, 0x7d, 0x9b, 0xff, 0xbf, 0xff, 0xff, 0xb7, 0xdb, 0xff, 0xef, 0xfe, 0xf7, 0xde, 0xf5, 0xff, 0xda, 0xfc, 0xff, 0x53, 0xff, 0xfe, 0xff, 0xe6, 0xef, 0xfa, 0xbf, 0xbb, 0xec, 0xb7, 0xe3, 0xaf, 0xbf, 0xee, 0xf3, 0xf7, 0xef, 0xff, 0xdf, 0xaf, 0xff, 0x7f, 0xff, 0xaf, 0xf9, 0xff, 0xfe, 0xf3, 0xcf, 0xbf, 0xaf, 0xcf, 0x7b, 0x4f, 0xff, 0xef, 0xf5, 0xff, 0xfe, 0xee, 0xff, 0x3f, 0x77, 0xff, 0x6b, 0xfe, 0xfe, 0xfe, 0xfb, 0x6f, 0xef, 0xf5, 0xff, 0x66, 0x6d, 0xf7, 0xfb, 0xff, 0x3f, 0xff, 0xff, 0xfb, 0xe7, 0x6d, 0xfd, 0x9b, 0xff, 0xff, 0xff, 0x7f, 0xf8, 0xff, 0xff, 0xfe, 0xe9, 0xed, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x7f, 0x1f, 0x9d, 0xee, 0xff, 0xe6, 0xff, 0xff, 0xfe, 0xff, 0x7e, 0xff, 0x7f, 0xf9, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdb, 0xff, 0xfe, 0xaf, 0xf9, 0xff, 0x7f, 0xff, 0xa4, 0xbf, 0x6e, 0xaa, 0xdf, 0xab, 0x7b, 0xdd, 0xde, 0xd7, 0xef, 0x7f, 0x7d, 0xff, 0xd7, 0xfb, 0x6f, 0xfc, 0xdb, 0xfe, 0xfb, 0x2f, 0xbe, 0xff, 0xfe, 0xf3, 0x2d, 0x7f, 0xfb, 0xcf, 0xf5, 0xff, 0x7f, 0xbf, 0xef, 0xf7, 0x7f, 0x99, 0xff, 0xdf, 0x7f, 0xff, 0xdb, 0xf7, 0xdf, 0x7f, 0xff, 0xbb, 0xef, 0xff, 0xff, 0xf7, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xa6, 0xfd, 0xfb, 0xef, 0xe7, 0xff, 0xff, 0xfb, 0xaf, 0xd5, 0xfb, 0xff, 0x7f, 0x73, 0xe5, 0xe7, 0xf7, 0xff, 0xff, 0xff, 0xaf, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x5e, 0xf9, 0x7f, 0xff, 0xff, 0x5f, 0xf6, 0xf8, 0xaf, 0xef, 0xff, 0xff, 0xff, 0x6d, 0xee, 0xbf, 0x9e, 0x1e, 0xdf, 0xff, 0xbf, 0xff, 0xfb, 0xeb, 0x5c, 0xff, 0xbf, 0xdd, 0x54, 0x53, 0xaf, 0x3f, 0xfd, 0xff, 0x1b, 0xf5, 0xef, 0xf7, 0x9f, 0x6f, 0xfe, 0xef, 0xbf, 0x9f, 0xfa, 0xd7, 0xf9, 0xaf, 0xbd, 0xf5, 0xf7, 0x7b, 0xef, 0x9f, 0x57, 0xe6, 0xfe, 0xff, 0xf3, 0xdb, 0x7f, 0xff, 0xfd, 0x3f, 0xbd, 0xf7, 0xf7, 0xff, 0x7f, 0x93, 0xeb, 0xf7, 0xdd, 0xe4, 0xab, 0xbb, 0x91, 0xff, 0xef, 0xfc, 0xf5, 0xee, 0x2b, 0xef, 0xdb, 0xef, 0x7e, 0xd7, 0xfe, 0x73, 0xef, 0xfe, 0xd7, 0xde, 0x5a, 0xed, 0x64, 0xec, 0xff, 0xbf, 0xf6, 0xf7, 0xdf, 0xff, 0xff, 0xdb, 0x7b, 0x7f, 0xff, 0x7f, 0xfd, 0x10, 0x5a, 0xff, 0x85, 0xdd, 0xbf, 0x99, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xce, 0xf7, 0xdf, 0xff, 0xa5, 0x25, 0xf4, 0x7f, 0xaf, 0xfd, 0x6f, 0xe6, 0xfd, 0xff, 0xfe, 0xff, 0xee, 0xbb, 0xff, 0x7f, 0xff, 0xed, 0xfe, 0xff, 0xdd, 0xde, 0x9f, 0xff, 0xbf, 0xff, 0xfe, 0x9d, 0x71, 0xff, 0x7f, 0xdc, 0xfd, 0xd7, 0x7f, 0xff, 0xbf, 0x7f, 0xd6, 0xff, 0x57, 0x3e, 0xff, 0xfc, 0xff, 0xcf, 0x3e, 0x7b, 0x6f, 0xec, 0xdf, 0xf6, 0xbb, 0x6d, 0xb3, 0xff, 0xfe, 0xf3, 0xcf, 0x71, 0xfb, 0xfd, 0xe5, 0x9f, 0x6b, 0xbf, 0xc1, 0xc6, 0xad, 0x9b, 0xf9, 0xf3, 0xdf, 0x6f, 0xbf, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x7d, 0xff, 0xff, 0xfb, 0xe7, 0x9f, 0xff, 0xce, 0xe6, 0x7e, 0xff, 0xfe, 0xfb, 0xee, 0xbb, 0xff, 0xff, 0xfe, 0xeb, 0xff, 0xff, 0xdf, 0xfd, 0xbf, 0xff, 0xfd, 0xfd, 0xdf, 0xbb, 0xb9, 0xff, 0xfb, 0xeb, 0xff, 0xfe, 0xfb, 0x7f, 0xcb, 0x2f, 0x7c, 0xfd, 0xbf, 0x3e, 0x5e, 0xf9, 0xfd, 0xcf, 0x3f, 0xdf, 0x6e, 0xde, 0xdf, 0xfd, 0xfb, 0x9d, 0x77, 0xbe, 0xdd, 0xea, 0x8b, 0xdf, 0xfe, 0xd3, 0xcf, 0x13, 0xd9, 0xfe, 0xf3, 0xcf, 0xdf, 0x9b, 0xff, 0xaf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0xfe, 0xfe, 0xd7, 0x4b, 0xff, 0xf7, 0xe5, 0xdf, 0xfb, 0x7e, 0xdd, 0xff, 0xe6, 0xff, 0xef, 0xf3, 0xcf, 0x2f, 0xf7, 0xf8, 0xa3, 0x8b, 0x3d, 0xfd, 0xd1, 0xe7, 0x1f, 0x7d, 0xfc, 0xf9, 0xc7, 0x9e, 0xbf, 0xf9, 0xff, 0xfb, 0xef, 0xff, 0xfb, 0xfd, 0xff, 0xfb, 0x3f, 0xff, 0xfd, 0xf5, 0x97, 0xff, 0xfc, 0xfd, 0xc7, 0xbf, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbf, 0xff, 0xba, 0xee, 0xff, 0x7f, 0xfd, 0xf5, 0xff, 0x7f, 0x7f, 0xff, 0xef, 0xff, 0x9b, 0xff, 0xbf, 0xff, 0xff, 0xef, 0x9f, 0xff, 0xff, 0xfb, 0xe7, 0xdf, 0xff, 0x7d, 0xf1, 0xd5, 0xdf, 0xff, 0xfd, 0xf5, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0x5f, 0x7f, 0xfd, 0xe7, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf6, 0xcb, 0x6f, 0xaf, 0xbf, 0xfe, 0xfb, 0x79, 0xaf, 0x7f, 0xe5, 0xff, 0xf7, 0x7f, 0xfb, 0xef, 0x97, 0xff, 0x6f, 0xfa, 0xbf, 0xab, 0xaf, 0x3d, 0xe6, 0xfa, 0xeb, 0xad, 0xbf, 0xfe, 0x45, 0xd3, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5a, 0xff, 0x9b, 0xff, 0xe7, 0x5f, 0xff, 0xf0, 0xef, 0xd7, 0xff, 0xff, 0xee, 0xff, 0x7f, 0xfe, 0xd9, 0x9f, 0xe7, 0xdf, 0xff, 0xff, 0xd9, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xf7, 0x3f, 0xb7, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xbb, 0xe9, 0xff, 0xff, 0xff, 0xaf, 0x7d, 0xdf, 0xff, 0xff, 0xfb, 0xdf, 0xdf, 0xc6, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0xfe, 0xbf, 0xff, 0xfe, 0xef, 0x2f, 0xfb, 0xff, 0x7a, 0xcd, 0x7f, 0x6d, 0xf1, 0xb5, 0xe7, 0x7f, 0xef, 0xbd, 0xf7, 0xff, 0x99, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xdf, 0xf6, 0xf7, 0xee, 0x73, 0xff, 0xfd, 0xdf, 0xff, 0xde, 0x7f, 0xe6, 0xff, 0xef, 0xbf, 0xbf, 0xfe, 0xfa, 0xe7, 0x2f, 0xad, 0xfd, 0x7f, 0xf7, 0x1d, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xf9, 0xfe, 0xf4, 0xfe, 0xbf, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xef, 0xb5, 0xff, 0xff, 0x67, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfa, 0xdf, 0x7f, 0xef, 0xb9, 0xff, 0xd6, 0xfe, 0xfb, 0xff, 0xef, 0xdf, 0x7c, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfa, 0xdf, 0xe8, 0x7f, 0xe7, 0xff, 0xfe, 0xff, 0xff, 0x1d, 0x7d, 0xf6, 0x7a, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x7e, 0xbd, 0xff, 0x9f, 0xdf, 0x4f, 0xff, 0xaf, 0xf9, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xf6, 0xfb, 0xef, 0xfe, 0xfe, 0xd7, 0xff, 0xd7, 0x7f, 0xff, 0xfd, 0xee, 0xff, 0xf7, 0x6f, 0xfc, 0x7f, 0xee, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xef, 0x77, 0xff, 0x7f, 0x77, 0x97, 0x5f, 0xff, 0xf7, 0xbf, 0xff, 0x9b, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xfd, 0xfd, 0xf7, 0xff, 0xf7, 0xf7, 0xff, 0x86, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xbf, 0xff, 0x9f, 0x97, 0xdf, 0xff, 0xf9, 0xe5, 0x3d, 0x3e, 0x5f, 0xff, 0x8f, 0xd9, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0x67, 0xff, 0xb7, 0xbf, 0xd3, 0x7f, 0xbf, 0xfe, 0xd7, 0xff, 0x6d, 0xfe, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0xfe, 0x7f, 0x7c, 0xfc, 0xbf, 0xfe, 0x76, 0x7b, 0xff, 0xb7, 0xfe, 0xff, 0x9b, 0xf5, 0xe5, 0x97, 0x5f, 0x7e, 0xf9, 0xe5, 0x97, 0xff, 0xfd, 0xe7, 0xff, 0xcf, 0xbf, 0xf6, 0xda, 0xf3, 0xef, 0xff, 0xd7, 0xe6, 0xfe, 0x6f, 0xb6, 0xd9, 0x66, 0x9b, 0x6d, 0xe5, 0xff, 0xfd, 0x87, 0xdf, 0x5f, 0xaf, 0xcd, 0xbc, 0xd7, 0x57, 0xff, 0xbb, 0x99, 0xff, 0x5e, 0x79, 0xe5, 0x9d, 0x77, 0xde, 0xfb, 0xff, 0x7f, 0xcf, 0xd6, 0xd7, 0xcf, 0x7b, 0xef, 0xd5, 0x57, 0xff, 0x6c, 0xec, 0xbf, 0xf7, 0xde, 0x7b, 0xeb, 0xaf, 0xff, 0xfb, 0xff, 0x75, 0xaf, 0xff, 0xb5, 0xf5, 0x7f, 0xfb, 0xff, 0xff, 0xbf, 0x99, 0xfb, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x77, 0xbf, 0xea, 0xff, 0xed, 0xb7, 0xdf, 0xf8, 0xff, 0xff, 0xef, 0xe6, 0xfd, 0xfb, 0xef, 0xbb, 0xef, 0xbe, 0xfb, 0xfe, 0xfb, 0x2f, 0x6e, 0xfe, 0xff, 0x67, 0xff, 0x7f, 0xff, 0xff, 0xb7, 0xbd, 0x79, 0xff, 0xfe, 0xfb, 0xec, 0xb3, 0xcf, 0x3e, 0xbb, 0x7c, 0xf7, 0x3f, 0xff, 0x7f, 0xdf, 0x7f, 0x9f, 0xdf, 0x7c, 0x7f, 0x6f, 0xec, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xef, 0x7e, 0xfe, 0xfd, 0xf6, 0xd7, 0x5f, 0xff, 0xfd, 0xf6, 0xbf, 0x99, 0xf9, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfd, 0xf7, 0xff, 0x9f, 0xff, 0xcf, 0xe6, 0xfe, 0xfb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xed, 0x7f, 0xfb, 0xfd, 0xbb, 0xa9, 0xff, 0xff, 0xfb, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0x7f, 0xfe, 0xf1, 0xff, 0xfe, 0xfe, 0xfb, 0xef, 0xfc, 0xdf, 0xff, 0x6a, 0xde, 0xff, 0xfb, 0xee, 0xbb, 0xef, 0xbe, 0xfb, 0xae, 0xdd, 0x77, 0xfc, 0xfb, 0x57, 0x7f, 0xff, 0xbd, 0xf1, 0xd7, 0xdf, 0x98, 0xff, 0xff, 0xff, 0xfe, 0xbb, 0xef, 0xbe, 0xff, 0x6e, 0xef, 0xdf, 0xfb, 0xff, 0xfd, 0xff, 0xd7, 0x5f, 0xef, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0xb3, 0xcf, 0x3e, 0x7b, 0xec, 0xb3, 0xe7, 0xaf, 0x67, 0xfc, 0x75, 0x9f, 0x1f, 0x74, 0xd3, 0xe7, 0x8f, 0xbf, 0xf9, 0xff, 0xfa, 0xef, 0xbf, 0xff, 0x7e, 0xfb, 0xef, 0xbf, 0xef, 0x7d, 0x65, 0xdd, 0x57, 0x5f, 0xfd, 0xef, 0xb7, 0xeb, 0x6f, 0xfe, 0xbf, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xfd, 0x77, 0x3f, 0xfd, 0xf6, 0xd3, 0x4d, 0xf7, 0xfb, 0xed, 0xff, 0x9b, 0xff, 0xa7, 0xbe, 0xfb, 0xee, 0xbb, 0xed, 0xbe, 0xdb, 0xbf, 0x7e, 0x51, 0xde, 0x75, 0xd4, 0x7c, 0xf7, 0xfd, 0xf7, 0xff, 0xe6, 0xff, 0xeb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xf7, 0xcf, 0x7f, 0x96, 0x79, 0x67, 0xdd, 0x7e, 0xff, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0xf1, 0xfd, 0xb7, 0xfb, 0xff, 0xf9, 0xbf, 0x7f, 0xff, 0x6f, 0xfa, 0xff, 0xeb, 0xaf, 0xbf, 0xfa, 0xfa, 0xab, 0xad, 0x3f, 0xa4, 0x65, 0xd7, 0x1e, 0x7f, 0xfd, 0xd5, 0xd7, 0x5f, 0xff, 0x9a, 0x7f, 0xff, 0xfc, 0xfb, 0xbf, 0xff, 0xfe, 0xfd, 0x73, 0xff, 0xff, 0xfd, 0x7e, 0xf6, 0x5f, 0xff, 0xfe, 0xbd, 0xff, 0xff, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xbe, 0xfb, 0xfe, 0xbf, 0x9e, 0xf9, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xdf, 0xef, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xf2, 0xb2, 0x63, 0x5f, 0x7e, 0xfc, 0xe7, 0x9d, 0x97, 0xdb, 0xbd, 0x75, 0xff, 0x9b, 0xff, 0xbf, 0xff, 0xfe, 0xeb, 0xef, 0x6e, 0xff, 0xfe, 0xdf, 0xdf, 0xf7, 0xef, 0x9f, 0x7f, 0xfb, 0xff, 0xfd, 0x5d, 0xff, 0xe6, 0xff, 0xe3, 0xef, 0x3f, 0xfe, 0xa2, 0xe7, 0x8e, 0xbf, 0xf7, 0x74, 0xf7, 0xdf, 0x7f, 0xfc, 0xff, 0xf7, 0xdf, 0xff, 0xaf, 0xf9, 0xff, 0xff, 0x5f, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x67, 0xbf, 0xfa, 0xef, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0x7f, 0x7f, 0x6f, 0xfe, 0xe7, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xfd, 0xff, 0x7f, 0xfe, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xec, 0xe5, 0xaa, 0xff, 0xff, 0xfb, 0x86, 0xfd, 0xfc, 0xfb, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x3f, 0xe3, 0xd9, 0xef, 0xff, 0xdf, 0xfe, 0xf7, 0xfb, 0xf7, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xff, 0xbf, 0xbf, 0xfe, 0xfa, 0xeb, 0x2a, 0xff, 0xff, 0xff, 0xde, 0x7d, 0x7e, 0xfd, 0xf5, 0xff, 0xff, 0x6f, 0xfc, 0xdf, 0x7e, 0xff, 0xc5, 0xb7, 0xdf, 0xfe, 0xfb, 0xef, 0xf6, 0xff, 0xfd, 0xf6, 0xce, 0x7f, 0xfc, 0xfd, 0xf7, 0xff, 0x99, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xb7, 0xdf, 0x7f, 0xff, 0xfb, 0xff, 0x7b, 0x7f, 0xdd, 0xf7, 0xdf, 0xbf, 0xff, 0xe5, 0xfd, 0xa6, 0xff, 0xef, 0xbf, 0xff, 0xfc, 0xfb, 0xef, 0xef, 0xbf, 0xfb, 0xd5, 0x5f, 0xdf, 0xc9, 0xf7, 0xff, 0xfa, 0xdf, 0xff, 0x8f, 0xd9, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xef, 0x3f, 0x7f, 0xfb, 0xed, 0x77, 0xeb, 0xff, 0x9f, 0xff, 0xdf, 0xff, 0x6d, 0xfe, 0xff, 0xce, 0xff, 0x6f, 0xbf, 0xfd, 0xde, 0x7b, 0xef, 0x5f, 0x6b, 0xbf, 0xf7, 0x7a, 0x53, 0xff, 0xbf, 0xf4, 0xff, 0x9b, 0xf7, 0xef, 0xe7, 0xff, 0xfe, 0xfb, 0xef, 0x97, 0x5f, 0x7e, 0xd7, 0x6b, 0xaf, 0x9d, 0x7f, 0xd6, 0xff, 0xe7, 0xff, 0xd7, 0xe6, 0xfe, 0xfd, 0xb5, 0xd7, 0x5f, 0x7f, 0xfd, 0xb6, 0xd9, 0x2e, 0xf5, 0xdf, 0xcc, 0xff, 0xcf, 0x36, 0xfb, 0xdf, 0xfb, 0xbb, 0x99, 0xbf, 0xef, 0xb9, 0xf7, 0xda, 0x6b, 0xef, 0x79, 0xe5, 0x5f, 0xf5, 0xbd, 0xf2, 0xff, 0xb3, 0xf7, 0xfe, 0x5f, 0xee, 0x6c, 0xea, 0xff, 0x1f, 0xff, 0xfe, 0xf5, 0xff, 0xbf, 0xde, 0xfb, 0x5b, 0x7f, 0xef, 0xf7, 0xef, 0x5b, 0xd9, 0xff, 0xf5, 0xbd, 0x99, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xdb, 0xd7, 0x7e, 0xfb, 0xed, 0x3f, 0xd4, 0xff, 0xff, 0xff, 0xef, 0xc6, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xaf, 0xef, 0x7e, 0xf7, 0xff, 0xf7, 0x9d, 0xef, 0xff, 0xf9, 0xf7, 0xbd, 0x79, 0x17, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xfb, 0xef, 0x72, 0x9d, 0xfd, 0x77, 0xf9, 0xef, 0x33, 0xff, 0xfc, 0x6b, 0x6f, 0xec, 0xd7, 0x56, 0x1b, 0xed, 0xbf, 0xfb, 0xfe, 0xfa, 0xeb, 0x75, 0x7f, 0xfd, 0xf5, 0xdb, 0x77, 0xbc, 0xfd, 0xf6, 0x3d, 0x99, 0xf9, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xfd, 0xdf, 0x7f, 0x7f, 0xfe, 0xff, 0xfd, 0x9f, 0xff, 0xcf, 0xe6, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xed, 0xff, 0xf7, 0xdf, 0xee, 0xfd, 0xff, 0xff, 0xfb, 0xff, 0xbb, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xef, 0x75, 0xef, 0xbf, 0xff, 0xfe, 0xf9, 0xf3, 0xfd, 0xd6, 0xff, 0x6a, 0xde, 0x9f, 0x7d, 0xf7, 0xcd, 0x77, 0x9f, 0xfd, 0x6f, 0xbb, 0x7e, 0xfd, 0xf7, 0x5f, 0x7f, 0xeb, 0xfc, 0xf9, 0xcf, 0xce, 0x9b, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xef, 0xef, 0xff, 0xef, 0xfb, 0xdf, 0xfb, 0x77, 0x9d, 0xdf, 0x97, 0xeb, 0x7f, 0xff, 0xff, 0xe6, 0xff, 0xfb, 0xe3, 0xcf, 0x3e, 0xfb, 0xf8, 0xf3, 0xcf, 0x9e, 0x7d, 0xfc, 0x57, 0x8f, 0x5f, 0x77, 0xf9, 0xc7, 0x9f, 0xbf, 0xf9, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xbf, 0xff, 0x7d, 0xf5, 0xd7, 0xe7, 0xde, 0x7b, 0xf7, 0xd7, 0xdf, 0x6f, 0xfe, 0x9f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfa, 0xef, 0xd5, 0x3f, 0xfd, 0xf4, 0xfa, 0xef, 0x7f, 0xfd, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xbf, 0xfa, 0xee, 0x77, 0x51, 0xfd, 0x77, 0x4f, 0x1d, 0xf5, 0x7f, 0xf7, 0xff, 0xe6, 0xff, 0xdb, 0xef, 0xff, 0xfe, 0xfb, 0xff, 0xaf, 0xbf, 0xdf, 0xf7, 0xd6, 0xfb, 0xe7, 0x9f, 0x7f, 0x9f, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb, 0xff, 0xb7, 0xdf, 0x7f, 0xf3, 0xff, 0x97, 0xf7, 0x6f, 0xfe, 0xff, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0x3f, 0xfe, 0xd4, 0xd7, 0x5f, 0x7f, 0xf9, 0xf5, 0xd7, 0x5a, 0xff, 0x9a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0x67, 0xff, 0x7f, 0xf0, 0x62, 0x07, 0xf7, 0xff, 0xff, 0xff, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0x6f, 0xfd, 0x75, 0xff, 0xff, 0xfd, 0x9f, 0xf9, 0xdf, 0xff, 0xff, 0xfb, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xef, 0xfe, 0xda, 0xff, 0xbf, 0xff, 0xbe, 0xff, 0xff, 0x6f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xcb, 0x7f, 0x7e, 0xfe, 0xe5, 0xd7, 0x7f, 0xfe, 0xbd, 0x6f, 0x7f, 0x9b, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xbf, 0xef, 0xbb, 0xff, 0xf4, 0x77, 0xdb, 0xef, 0xf7, 0xff, 0xf7, 0xf7, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfb, 0xfc, 0xff, 0x7f, 0x5f, 0xff, 0xf6, 0xf7, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0x7f, 0xff, 0xe7, 0xff, 0x7f, 0x7e, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xbf, 0xff, 0xf7, 0xff, 0xdf, 0xdf, 0xff, 0xbf, 0xfe, 0x9b, 0xff, 0xfe, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7b, 0xfd, 0xff, 0xda, 0xf8, 0xf5, 0xff, 0xfe, 0xff, 0xf7, 0x6e, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xef, 0x77, 0xfd, 0xfb, 0xf3, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbe, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x7d, 0xdf, 0xef, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x66, 0xef, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xf7, 0xdd, 0xef, 0x9e, 0xfb, 0xfe, 0xf9, 0xef, 0x9f, 0x7e, 0xfe, 0x9f, 0xf9, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0x9f, 0xff, 0xcf, 0xff, 0xef, 0xdf, 0x6d, 0xfe, 0xfd, 0xe7, 0xbf, 0xf7, 0x6f, 0xfe, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xf7, 0xee, 0xfb, 0xaf, 0xff, 0xe7, 0xf5, 0xff, 0xdf, 0xfb, 0x7f, 0xbd, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xdf, 0xfb, 0xff, 0xfb, 0xfd, 0xb7, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xa6, 0xff, 0xef, 0xbf, 0xff, 0xfa, 0xfb, 0xef, 0xbd, 0xff, 0xdf, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0x76, 0xd3, 0x7f, 0xed, 0xbf, 0xf9, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xf7, 0xfc, 0xf3, 0xcf, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xfb, 0x67, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0x53, 0x7f, 0xff, 0x74, 0xf7, 0x5e, 0x6f, 0xdf, 0xfd, 0xff, 0x9b, 0xff, 0x9f, 0x7e, 0xfa, 0xe9, 0xa7, 0x9f, 0x7e, 0xfa, 0xfd, 0xef, 0x3f, 0xfd, 0xfe, 0xd3, 0xef, 0x3f, 0xfd, 0xf4, 0xff, 0xe6, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xfd, 0xfb, 0xef, 0xbf, 0xff, 0xbe, 0xfb, 0xee, 0xbe, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7b, 0xff, 0xfd, 0xf6, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xef, 0x7f, 0xfb, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x7f, 0xff, 0xeb, 0xef, 0xf7, 0xfe, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xbe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xb9, 0xff, 0x37, 0xdf, 0x7e, 0xf3, 0xed, 0xb7, 0xdd, 0x7e, 0xeb, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6b, 0xbf, 0xe9, 0x6f, 0xfe, 0xff, 0xf5, 0xdf, 0x7f, 0xff, 0xed, 0xf5, 0xdf, 0x7f, 0xef, 0xfb, 0xef, 0xbf, 0xef, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xbf, 0xff, 0xfe, 0xfb, 0xe9, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xe6, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdb, 0x7f, 0xff, 0xfd, 0xbf, 0xf9, 0xff, 0x2f, 0xbf, 0xfe, 0xf2, 0xab, 0xaf, 0xbf, 0xfe, 0xfe, 0xf7, 0x5f, 0x7f, 0xff, 0xf5, 0xf7, 0x5f, 0x7f, 0xf9, 0x6f, 0xfe, 0xff, 0xf9, 0xef, 0xbf, 0xff, 0xfe, 0xf9, 0xef, 0xbf, 0xfb, 0xdd, 0xf7, 0xdf, 0x7f, 0xdf, 0xfd, 0xf7, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x79, 0xee, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0xf7, 0xe6, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xad, 0xbf, 0xfe, 0xfa, 0xbf, 0xf9, 0xff, 0x1b, 0x7f, 0xfd, 0xf1, 0xd7, 0x5b, 0x7f, 0xfd, 0xe5, 0x2f, 0xbf, 0xfe, 0xfa, 0xeb, 0xae, 0xbf, 0xfe, 0xf8, 0x6f, 0xee, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xf6, 0xfb, 0x2f, 0x77, 0xbf, 0xf5, 0xf7, 0xdf, 0x5f, 0xfd, 0xfd, 0xd7, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xe6, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x7b, 0xee, 0xbf, 0xf5, 0x6d, 0xf7, 0xdf, 0x76, 0xff, 0x7d, 0xf7, 0xdf, 0xff, 0xbf, 0xf9, 0xbf, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xbd, 0xf5, 0x37, 0xdf, 0xd9, 0xfa, 0x9b, 0xa9, 0xbf, 0x9f, 0xfa, 0xeb, 0xef, 0x6f, 0xfe, 0xff }; /* rom names */ #define EPPAFSK_ROM_DIVROM0 0 #define EPPAFSK_ROM_DIVROM1 16 #define EPPAFSK_ROM_DIVROM2 32 #define EPPAFSK_ROM_SWROMIE 48 #define EPPAFSK_ROM_SWROMOE 64 #define EPPAFSK_ROM_CLKSELROM 80 #define EPPAFSK_ROM_PTTMUTEROM 96 /* rom locations */ static const unsigned long eppafsk_roms[112] = { 37019, 36851, 37683, 37515, 37351, 37183, 38015, 37847, 36853, 37017, 37517, 37681, 37185, 37349, 37849, 38013, 25027, 24859, 25691, 25523, 25359, 25191, 26023, 25855, 24861, 25025, 25525, 25689, 25193, 25357, 25857, 26021, 58069, 58235, 58237, 58071, 57405, 57571, 57573, 57407, 57737, 57903, 57905, 57739, 57073, 57239, 57241, 57075, 31033, 30865, 31365, 31197, 31697, 31529, 32029, 31861, 30867, 31031, 31199, 31363, 31531, 31695, 31863, 32027, 25057, 24889, 25721, 25553, 25389, 25221, 26053, 25885, 24891, 25055, 25555, 25719, 25223, 25387, 25887, 26051, 15990, 15326, 16156, 15492, 16158, 15494, 15992, 15328, 15658, 14994, 15824, 15160, 15826, 15162, 15660, 14996, 31013, 30845, 31345, 31177, 31677, 31509, 32009, 31841, 30847, 31011, 31179, 31343, 31511, 31675, 31843, 32007 }; baycomepp-0.10.orig/main/eppchk_firmware.h0100644000175100017510000022372006740133454016662 0ustar abaaba/*****************************************************************************/ /* * eppchk_firmware.h -- HDLC packet radio modem for EPP using FPGA utility. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ /* automatically generated, do not edit */ #define EPPCHK_FIRMWAREDATE "19990705" /* firmware */ static const unsigned char eppchk_firmware[] = { 0xff, 0x04, 0xe8, 0x8c, 0xf9, 0xfe, 0xff, 0xff, 0xfd, 0xed, 0xd7, 0xdf, 0xfe, 0xfd, 0xfd, 0x7f, 0xef, 0xfe, 0xf6, 0xee, 0x6f, 0xef, 0xfe, 0xf6, 0xfe, 0x9b, 0xff, 0xff, 0xaf, 0xff, 0xfd, 0xfb, 0xff, 0xaf, 0xff, 0x7f, 0xfe, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf8, 0xed, 0xcf, 0xff, 0xfe, 0xfb, 0xed, 0x8f, 0xdf, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x6f, 0xfe, 0xff, 0xd7, 0x5f, 0x7b, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xf7, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0x1b, 0xff, 0x6f, 0xed, 0xf5, 0xd3, 0x5f, 0x7f, 0xed, 0xf5, 0xd7, 0xbe, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xff, 0xc6, 0xff, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xbc, 0xf3, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xbf, 0xf9, 0xff, 0xef, 0xbe, 0xbf, 0xfe, 0xfb, 0xef, 0xbe, 0xff, 0xda, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0x6f, 0xfc, 0xff, 0xfb, 0xaf, 0xbf, 0xfe, 0xfa, 0xfb, 0xaf, 0xbf, 0xff, 0xfd, 0xd7, 0xdf, 0x7f, 0xfd, 0xfd, 0xd7, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xed, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xed, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7d, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x6f, 0xf4, 0xff, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xd7, 0xfe, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xfb, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xbd, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0x7f, 0xfd, 0xaf, 0xbf, 0xff, 0xfe, 0xfb, 0xcf, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xf7, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xef, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0xf7, 0x6f, 0xf6, 0xff, 0xfd, 0xf7, 0xdf, 0x77, 0xff, 0xfd, 0x77, 0xdf, 0xef, 0xfe, 0xfb, 0xee, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xf7, 0x9b, 0xdd, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xef, 0xfc, 0xe7, 0x9e, 0x7f, 0xfe, 0x79, 0xe7, 0x9f, 0x7b, 0xfe, 0xdd, 0x66, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xb7, 0xf9, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x77, 0xff, 0xfd, 0xf7, 0xff, 0x6f, 0xfe, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xd9, 0xd7, 0x3e, 0xfb, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xed, 0xf7, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xf5, 0xf7, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0x5f, 0xfe, 0xff, 0xe5, 0xff, 0xfb, 0xff, 0xbf, 0xf9, 0xff, 0xbf, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfb, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x7e, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x7f, 0xbf, 0xfe, 0xff, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xfd, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x79, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xf6, 0xdf, 0xff, 0x7f, 0xf4, 0xff, 0xd7, 0xff, 0xf7, 0xfd, 0xff, 0xc7, 0xff, 0x6f, 0xfe, 0xf7, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf5, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0x9b, 0xdf, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x9f, 0x7f, 0x7f, 0xff, 0xfd, 0xfe, 0xb7, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xf9, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xf7, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xfb, 0xdf, 0xfd, 0xf3, 0xdf, 0xbf, 0x7e, 0xf8, 0xfd, 0xf7, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x9b, 0xbf, 0xff, 0xff, 0xfd, 0xfa, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xaf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xdf, 0xfd, 0xf7, 0xdf, 0x5f, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfd, 0xef, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x7e, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xfc, 0xff, 0xfb, 0xef, 0xbf, 0xf5, 0xfe, 0x9b, 0xff, 0x9f, 0xf3, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa7, 0x66, 0x7f, 0xfd, 0xff, 0xfe, 0xfb, 0x2f, 0xbf, 0xff, 0xfe, 0xff, 0x7d, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x99, 0xfb, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xdf, 0xef, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x66, 0xfe, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0x7d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0xa9, 0xbf, 0xcf, 0xbf, 0xfc, 0xd6, 0xdb, 0xef, 0xff, 0xfc, 0xff, 0x9d, 0xf7, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x66, 0xee, 0xff, 0xc7, 0x5f, 0x7d, 0xfc, 0xed, 0xf7, 0x4f, 0xfd, 0xdf, 0xaf, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xbf, 0x19, 0xf7, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xe6, 0xfd, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xb1, 0xff, 0xe3, 0x8f, 0x3f, 0xfe, 0xf8, 0xe3, 0xcf, 0xbf, 0xff, 0xbd, 0xf6, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x66, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3b, 0x9b, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xe6, 0xfe, 0x4d, 0x7d, 0xfc, 0xf1, 0xc7, 0x1f, 0x7d, 0xfc, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0x61, 0xff, 0xe3, 0xbf, 0x7f, 0xfe, 0xdb, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0xfe, 0xff, 0xfe, 0xf7, 0xdf, 0x7d, 0xfb, 0xcd, 0xb7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0xcf, 0x8f, 0x3f, 0xfe, 0xf8, 0xe3, 0x3f, 0xff, 0xfc, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xe6, 0xff, 0xef, 0x7f, 0xee, 0xb9, 0xe7, 0xfe, 0x7b, 0xfe, 0xff, 0xfe, 0xbf, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfb, 0xff, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xfb, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0xfe, 0xbf, 0xfd, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xe7, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfd, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfc, 0xa2, 0xd7, 0x5f, 0x7e, 0xf9, 0xd5, 0xd7, 0x5f, 0x7f, 0xed, 0x6f, 0xfe, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xf7, 0xfc, 0xb3, 0xff, 0xff, 0xb7, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xef, 0x1b, 0xff, 0xef, 0xef, 0xfe, 0xfb, 0xef, 0xb7, 0x6f, 0xbe, 0xff, 0xff, 0xfb, 0xef, 0x7f, 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xbd, 0xa6, 0xff, 0xef, 0xef, 0xbf, 0x7f, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xff, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0x79, 0xff, 0x7f, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0xdf, 0x7f, 0xfb, 0xdb, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0xfc, 0xff, 0x7f, 0xdf, 0xff, 0xff, 0xdb, 0xff, 0xef, 0xff, 0xf7, 0xef, 0xfb, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x99, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xd3, 0xdf, 0xdd, 0xff, 0xfd, 0xfe, 0xff, 0x3f, 0xff, 0xed, 0xff, 0xc6, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xef, 0xf9, 0x7f, 0x0d, 0xfe, 0xff, 0xef, 0xf7, 0xbf, 0xff, 0x9f, 0xf9, 0xef, 0xff, 0xff, 0xff, 0xef, 0xfb, 0xef, 0xff, 0xbf, 0xbd, 0xed, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xfb, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x9f, 0x3f, 0xfc, 0xe1, 0xf7, 0xdf, 0xff, 0xf0, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x99, 0xdf, 0xff, 0xff, 0xff, 0xef, 0xdf, 0xed, 0xf7, 0xed, 0xf7, 0xff, 0xff, 0xf9, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xab, 0xaf, 0xbf, 0xfe, 0xdf, 0xff, 0xdf, 0xb7, 0x8e, 0xf5, 0xdf, 0xff, 0xff, 0x79, 0xef, 0xdf, 0x7f, 0xfe, 0xbf, 0xf9, 0xf7, 0xf3, 0xee, 0xbf, 0xdf, 0xff, 0xdf, 0x7f, 0xbf, 0xfd, 0x7d, 0xfe, 0xdf, 0x1f, 0xbf, 0xff, 0xf6, 0xce, 0xff, 0x6f, 0xfe, 0xff, 0x7e, 0xfd, 0xaf, 0xff, 0xd7, 0xff, 0xff, 0xaf, 0x7f, 0x7b, 0xf7, 0xb7, 0xff, 0xff, 0x7f, 0xfe, 0xfb, 0xff, 0x1b, 0xfe, 0x6c, 0xbe, 0xff, 0x63, 0xbe, 0xff, 0xfe, 0xcf, 0x47, 0xfe, 0x5f, 0x67, 0xf7, 0x6f, 0xfe, 0xdf, 0x4f, 0xef, 0x3f, 0x66, 0x7f, 0xee, 0xbf, 0xff, 0xca, 0xff, 0xbf, 0xff, 0xe7, 0xff, 0xff, 0xd7, 0xcb, 0xfb, 0x3f, 0xbf, 0xdf, 0x7f, 0xff, 0xb7, 0xf9, 0xdf, 0x6b, 0xef, 0xed, 0xfd, 0xfb, 0xff, 0xff, 0xfc, 0xfe, 0x3b, 0xf5, 0x77, 0xff, 0xcf, 0xb9, 0xe7, 0x9e, 0xff, 0x6f, 0xd6, 0x97, 0x5f, 0x7e, 0xf9, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xf9, 0xe7, 0xfd, 0xfd, 0xff, 0x79, 0x2e, 0xbf, 0xec, 0x5f, 0x9b, 0xfb, 0xef, 0x97, 0x5f, 0xfb, 0x7f, 0xff, 0xfd, 0xf7, 0xf7, 0x3f, 0x4b, 0xb7, 0xef, 0xff, 0xff, 0x7f, 0xb9, 0xfd, 0xee, 0x66, 0xfe, 0xaf, 0xb5, 0xda, 0xfa, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0x57, 0xff, 0xfd, 0xff, 0xdf, 0xf7, 0xc2, 0x9f, 0xb3, 0xb1, 0xff, 0xfb, 0xef, 0xef, 0xff, 0xfb, 0x6f, 0x7f, 0xdd, 0xf7, 0xbe, 0xf5, 0xff, 0xfa, 0xaf, 0xbd, 0xfc, 0xf6, 0xf7, 0x66, 0xee, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xfd, 0xb7, 0x4f, 0xdc, 0xf8, 0x46, 0xfd, 0x1f, 0xfc, 0x7f, 0xe7, 0x1d, 0xf7, 0xbf, 0x9b, 0xf7, 0xef, 0xbb, 0xef, 0xbf, 0xdf, 0x7f, 0xff, 0xfd, 0xbb, 0xd9, 0xff, 0xe7, 0xfb, 0xff, 0xff, 0xdc, 0x73, 0xcf, 0xf7, 0xe6, 0xfd, 0xfb, 0xec, 0xb3, 0xcf, 0xe7, 0x9f, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x57, 0xfe, 0xf9, 0xe5, 0xbd, 0xb1, 0xff, 0xfa, 0xeb, 0xaf, 0xff, 0xf8, 0xe3, 0xcf, 0x77, 0xd7, 0xfb, 0xf7, 0x9b, 0x7f, 0xff, 0xfd, 0xf5, 0xd7, 0xff, 0x66, 0xe6, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xf7, 0xbf, 0xdf, 0xfe, 0xff, 0xef, 0x7f, 0xef, 0xbd, 0x3f, 0x9b, 0xfb, 0x6f, 0xbf, 0xfd, 0xf6, 0xff, 0xff, 0xff, 0xbb, 0xbb, 0xdf, 0xf7, 0xf7, 0xf7, 0xff, 0x7d, 0xdf, 0x7e, 0xfb, 0xef, 0xa6, 0xfe, 0xeb, 0xaf, 0xbf, 0xfe, 0xc7, 0x1f, 0x7f, 0xdd, 0x79, 0xcf, 0xfb, 0xeb, 0x78, 0xbf, 0xfd, 0xf7, 0xdf, 0xff, 0xab, 0x79, 0xff, 0xf2, 0xcb, 0x2f, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xef, 0x1f, 0xdf, 0xee, 0xb5, 0xdd, 0x77, 0x7d, 0x6f, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0x7d, 0xff, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xf7, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0xcb, 0x1f, 0x3f, 0xfc, 0xf0, 0xcb, 0x3f, 0xff, 0xbc, 0xe7, 0x9f, 0x7d, 0xfc, 0xf1, 0x67, 0x9f, 0x7d, 0xfe, 0xe6, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xe7, 0x9f, 0x7f, 0xff, 0xfd, 0xee, 0xdf, 0xff, 0xfc, 0xff, 0xc7, 0xdf, 0x7f, 0xff, 0xbf, 0xe1, 0xff, 0xff, 0xfe, 0xf7, 0xdf, 0x5f, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xf7, 0xdf, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0x7a, 0xea, 0xf8, 0xeb, 0xaf, 0xff, 0xdf, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xdf, 0x7d, 0xf7, 0xdd, 0xff, 0x9b, 0xfb, 0xaf, 0xbf, 0x0e, 0xba, 0x7c, 0xf1, 0xe9, 0xf7, 0xdf, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xdf, 0xdf, 0x7f, 0xff, 0xff, 0xe6, 0xfe, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xe9, 0xb7, 0x9f, 0xfe, 0xff, 0xe9, 0xff, 0xff, 0xfd, 0xbf, 0xf9, 0xff, 0xaf, 0xbe, 0xde, 0xfa, 0xeb, 0xaf, 0xbf, 0xde, 0xea, 0x96, 0x5f, 0x7a, 0xfd, 0xb5, 0xc6, 0x5f, 0x7f, 0xfd, 0x6b, 0xfa, 0xff, 0xff, 0xff, 0xdb, 0xfe, 0xef, 0xfc, 0x3b, 0xcf, 0x7f, 0x32, 0xfe, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x1b, 0xff, 0xf7, 0xff, 0xff, 0xee, 0xff, 0xbf, 0xef, 0x3e, 0xfe, 0xef, 0xfb, 0xff, 0xbf, 0xff, 0xfd, 0xf5, 0xf7, 0xff, 0x7f, 0xe6, 0xff, 0xff, 0xfd, 0xfd, 0xef, 0xff, 0xfb, 0xff, 0xff, 0x7e, 0xf7, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xff, 0xaf, 0xdf, 0xdf, 0xf7, 0xdf, 0x67, 0x7f, 0xfc, 0xf7, 0xff, 0x5f, 0x7b, 0xfe, 0xfd, 0xd7, 0xfd, 0x6f, 0xfa, 0xff, 0x7e, 0xff, 0xef, 0xff, 0xff, 0xff, 0xbf, 0x9f, 0xb7, 0xf7, 0xf7, 0xff, 0xbf, 0xff, 0xdf, 0xfd, 0xab, 0xff, 0x9b, 0xff, 0xef, 0xff, 0xef, 0xfe, 0xff, 0xff, 0x77, 0xbe, 0xff, 0xdf, 0xdf, 0xff, 0xef, 0xfd, 0xcf, 0x7f, 0xff, 0xfc, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0xef, 0xbb, 0xfb, 0xf9, 0xff, 0xff, 0x7d, 0xed, 0x35, 0xe7, 0x5e, 0xbf, 0xbf, 0xf9, 0xff, 0xbf, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xbf, 0xbb, 0xfd, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xf6, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xcf, 0xf7, 0xcf, 0x2f, 0xbf, 0xff, 0xf3, 0x97, 0xbe, 0xf7, 0xff, 0x7f, 0xee, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xdd, 0xbe, 0xeb, 0x7f, 0xf6, 0xbf, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xef, 0xff, 0xff, 0xde, 0xfd, 0xf7, 0xbf, 0xff, 0xb7, 0x31, 0x97, 0x7f, 0xff, 0xfd, 0xf7, 0x97, 0x77, 0xff, 0xbf, 0xf1, 0x7f, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xf7, 0xb7, 0xbe, 0xff, 0xfd, 0xf6, 0xcd, 0x6f, 0xff, 0xdd, 0xf6, 0xdf, 0xff, 0x67, 0xfe, 0xbf, 0xfe, 0xfb, 0xeb, 0xff, 0xdf, 0xff, 0xef, 0xef, 0x7f, 0xff, 0xfe, 0xbb, 0xd7, 0x9f, 0xfd, 0xf5, 0xd9, 0xff, 0x9b, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xff, 0xbf, 0xe6, 0xff, 0x7f, 0x3e, 0x5f, 0xfb, 0x85, 0x7d, 0xf6, 0xdf, 0x4b, 0xff, 0xbf, 0x66, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xff, 0x5b, 0xf9, 0xff, 0x9f, 0xef, 0xd7, 0xf2, 0xc9, 0x3d, 0xf7, 0xdf, 0x73, 0xff, 0xb7, 0xd9, 0xdf, 0x5b, 0x6f, 0xbd, 0xff, 0xff, 0xfb, 0xdf, 0xf5, 0xff, 0x3b, 0xff, 0xdf, 0x7b, 0xee, 0xb9, 0xe7, 0x9e, 0xff, 0x6f, 0xde, 0x97, 0x5f, 0x7e, 0xf9, 0xff, 0xbf, 0x9f, 0x7f, 0xff, 0xfd, 0xcf, 0xff, 0xff, 0xb2, 0xcb, 0x2e, 0xbf, 0xec, 0x5e, 0x9b, 0xfb, 0xe7, 0xbf, 0x7f, 0xfe, 0x7d, 0xbf, 0xd9, 0xb9, 0x77, 0x3c, 0x5f, 0xff, 0xad, 0x36, 0xdb, 0x6d, 0xf9, 0x3d, 0xee, 0x66, 0xfe, 0xae, 0xbf, 0xca, 0x1a, 0xff, 0xbb, 0xf5, 0xdf, 0x6f, 0xff, 0x53, 0xff, 0x35, 0xef, 0xfd, 0xf7, 0xde, 0xbf, 0xb3, 0xa9, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xdb, 0x6b, 0xf5, 0xd9, 0xff, 0x3e, 0xff, 0xdf, 0xdb, 0x7f, 0xef, 0xfd, 0xf6, 0xf7, 0x66, 0xee, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0x85, 0x57, 0x77, 0xde, 0xf5, 0xde, 0xff, 0x9f, 0xdd, 0x7f, 0xff, 0x3d, 0xf7, 0xbf, 0x1b, 0xf7, 0xec, 0xbb, 0xef, 0xfe, 0xdf, 0x7f, 0xff, 0x2e, 0xfb, 0xdb, 0xed, 0xff, 0xfb, 0xbd, 0xf7, 0xdc, 0x53, 0xcf, 0x77, 0xe6, 0x7d, 0xff, 0xfc, 0xf3, 0xff, 0xe7, 0x9f, 0xff, 0xe7, 0xdf, 0xff, 0xfc, 0xff, 0x7c, 0xff, 0x5d, 0xf6, 0xd9, 0xe5, 0xbd, 0xb1, 0xef, 0xfa, 0xeb, 0xaf, 0xfd, 0xf8, 0x63, 0xdd, 0x77, 0xcf, 0xfb, 0xf7, 0x9f, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xef, 0x66, 0xee, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0x7f, 0xff, 0xfc, 0xf6, 0xff, 0xff, 0xff, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0x39, 0x9b, 0xfb, 0x6f, 0xbf, 0xfd, 0xfe, 0xff, 0xff, 0xfb, 0xbe, 0x7b, 0xdf, 0xff, 0xff, 0xf7, 0xfd, 0xb7, 0xdf, 0x7e, 0xbb, 0xef, 0xe6, 0xfe, 0xeb, 0xaf, 0xff, 0xff, 0xd7, 0x1f, 0x7f, 0xff, 0xfd, 0xcf, 0xf6, 0xfb, 0xf8, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xbb, 0x79, 0xff, 0xf2, 0xcb, 0x7f, 0xff, 0xfb, 0xef, 0xbf, 0xf7, 0xfe, 0xb7, 0xdd, 0x3e, 0xff, 0x6d, 0xd7, 0xdd, 0x76, 0x7d, 0x6f, 0xfa, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x9b, 0xfe, 0xff, 0xcf, 0x1f, 0xbf, 0xfc, 0xf0, 0xc3, 0x3f, 0xff, 0xbc, 0xc7, 0x8f, 0x7b, 0xfe, 0xd9, 0x67, 0x9f, 0x7d, 0xfe, 0xe6, 0xff, 0xff, 0xff, 0x9f, 0x7c, 0xf7, 0xdd, 0xf7, 0xff, 0xf9, 0xee, 0xdf, 0x6f, 0x7c, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0x23, 0xcb, 0x1d, 0x7f, 0xfc, 0xff, 0xff, 0xfb, 0xf7, 0xdf, 0x5f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0x7a, 0xea, 0xfb, 0xeb, 0xad, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xd7, 0x57, 0xdf, 0x7d, 0xf7, 0xdd, 0xff, 0x1b, 0xfe, 0xaf, 0xbf, 0xce, 0x32, 0x7f, 0xfd, 0xf5, 0xf7, 0xdf, 0xff, 0x7e, 0xfb, 0xfd, 0xf5, 0xf7, 0xdf, 0x7f, 0xff, 0xff, 0xe6, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xff, 0x4f, 0x3f, 0xfd, 0xfc, 0xfe, 0x5f, 0xfc, 0xff, 0xff, 0x7e, 0xff, 0xff, 0xbf, 0xf9, 0xfd, 0x8f, 0x3e, 0xfc, 0xf2, 0xeb, 0xaf, 0x37, 0x56, 0x5a, 0x57, 0x5f, 0x74, 0xf9, 0xd5, 0xd7, 0x5f, 0x7f, 0xfd, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe7, 0xfc, 0xd3, 0xcf, 0xfb, 0xf7, 0xe7, 0xe7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x1b, 0xff, 0xf7, 0xdf, 0xfd, 0x77, 0xf7, 0x97, 0xaf, 0x7e, 0xb6, 0xfe, 0xfd, 0x7e, 0xf7, 0xff, 0xff, 0xef, 0xff, 0xff, 0x7f, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xbd, 0xff, 0xff, 0xbe, 0xff, 0xfb, 0xbf, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xff, 0x9f, 0xf1, 0x7b, 0xfa, 0xeb, 0xaf, 0xf3, 0xff, 0xf7, 0xcf, 0xbd, 0x7f, 0xfd, 0xf5, 0xd5, 0xdf, 0x5d, 0xfd, 0xd5, 0xf7, 0xff, 0x67, 0xf6, 0xbf, 0xbe, 0xfb, 0xa9, 0xfb, 0xff, 0xff, 0xfd, 0xf6, 0x7f, 0xff, 0xfd, 0xf3, 0xbf, 0x5e, 0xdf, 0xfa, 0xf7, 0xff, 0x99, 0xff, 0x9f, 0x3f, 0xfe, 0xbb, 0x67, 0xbf, 0xff, 0xfc, 0x9b, 0xb7, 0xdb, 0xfe, 0xeb, 0xf2, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe6, 0xff, 0xeb, 0xaf, 0xfd, 0xff, 0xfa, 0xd3, 0xcf, 0x3f, 0xef, 0xf5, 0xff, 0xff, 0x7d, 0xfb, 0x6f, 0xbf, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0x7d, 0x7f, 0xfd, 0xff, 0xfb, 0xfb, 0xef, 0xef, 0xff, 0xbf, 0xff, 0x7e, 0xff, 0xe7, 0xff, 0xfb, 0xff, 0x6f, 0xfe, 0x3f, 0xfb, 0xfc, 0xf0, 0xcf, 0x3f, 0xfe, 0xfc, 0xe2, 0xf5, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xfb, 0xff, 0xff, 0x9b, 0xff, 0x7d, 0xf7, 0xdd, 0xf7, 0xde, 0x7f, 0x1f, 0xff, 0xbb, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xdf, 0xc5, 0x5f, 0x7b, 0xef, 0xf0, 0xeb, 0xad, 0xbd, 0xbe, 0xf7, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0x7b, 0xff, 0xbf, 0xff, 0xef, 0xfb, 0xff, 0xf7, 0x7d, 0xf5, 0xff, 0xff, 0xbf, 0xbe, 0xe7, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0x9f, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xde, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0x1b, 0xfe, 0xff, 0xff, 0xff, 0xda, 0xff, 0xf5, 0xe7, 0xcf, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0x5f, 0xff, 0xfd, 0xff, 0x3f, 0x66, 0xff, 0xfb, 0xef, 0xbf, 0xf7, 0x7e, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7c, 0xff, 0xff, 0xb7, 0xf9, 0xff, 0xff, 0xff, 0xaf, 0xff, 0x5f, 0xff, 0xdf, 0x79, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xf7, 0xff, 0xff, 0x6f, 0xd6, 0xbf, 0xff, 0xfe, 0xeb, 0xef, 0xff, 0xdf, 0x7f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xff, 0x5f, 0x9b, 0xfb, 0xbf, 0xbd, 0xff, 0xda, 0xed, 0x77, 0xc7, 0xb9, 0xb7, 0xb5, 0xff, 0xfb, 0xff, 0xfd, 0xda, 0xe2, 0xfb, 0xff, 0xed, 0x66, 0xfe, 0x6b, 0xaf, 0xbf, 0x2e, 0x7a, 0xfc, 0xf6, 0xd7, 0x5f, 0xe7, 0xff, 0xff, 0xff, 0xf5, 0xde, 0x7b, 0xff, 0xff, 0xb3, 0xb1, 0xff, 0xfb, 0xfb, 0x2f, 0xfd, 0xfe, 0x7d, 0xf7, 0xdf, 0x77, 0xbb, 0xde, 0xfe, 0xcb, 0xdf, 0x35, 0xf7, 0xff, 0xff, 0x66, 0xee, 0xbf, 0xfe, 0xfa, 0xab, 0xaf, 0xff, 0x8d, 0x77, 0xdf, 0x78, 0xfe, 0x1f, 0xff, 0xdf, 0xff, 0xcb, 0x85, 0xff, 0xbf, 0x9b, 0xf7, 0xff, 0xfd, 0x67, 0x9f, 0x7d, 0xbf, 0xff, 0x2e, 0xfb, 0xbb, 0xfd, 0xfe, 0xff, 0xff, 0xbf, 0xe5, 0xfe, 0xff, 0xf7, 0xe6, 0xfd, 0xff, 0xff, 0xf6, 0xdb, 0xef, 0xff, 0xfd, 0xf7, 0xdf, 0xdf, 0x3a, 0xff, 0xff, 0x3f, 0xcf, 0x3e, 0xfb, 0xff, 0xbd, 0xb1, 0x5f, 0xfb, 0xef, 0xb6, 0xd0, 0xfe, 0xf7, 0xdc, 0x7e, 0xd3, 0xdd, 0xc7, 0xdf, 0x7f, 0xff, 0x71, 0xe7, 0xdd, 0xff, 0x66, 0xe6, 0xdf, 0x77, 0xdf, 0x7e, 0xff, 0xdd, 0x6f, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x9b, 0xfb, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0xbe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xa6, 0xfe, 0xef, 0xaf, 0xbf, 0xfe, 0xfb, 0x9f, 0x7f, 0xde, 0xf9, 0xe5, 0x3f, 0xff, 0xff, 0xff, 0x8f, 0x3f, 0xfe, 0xff, 0xab, 0x79, 0xff, 0xeb, 0xab, 0xa6, 0xb6, 0xeb, 0xef, 0xbd, 0xff, 0x56, 0xd1, 0xdf, 0xff, 0xff, 0xbe, 0xf3, 0xcf, 0xff, 0x7f, 0x6f, 0xfe, 0xf7, 0xce, 0xfb, 0xe9, 0xbf, 0xff, 0xfb, 0xff, 0xdf, 0x5f, 0xff, 0xf7, 0xff, 0xdf, 0xff, 0xee, 0xf7, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0x8f, 0x3f, 0xfa, 0xf8, 0xf3, 0xcf, 0x3d, 0xff, 0xd4, 0xe3, 0x9f, 0x7f, 0xf6, 0xf9, 0xe7, 0x9f, 0x7f, 0xf6, 0xe6, 0xff, 0xef, 0xff, 0xbf, 0xfe, 0xfb, 0xff, 0x7f, 0xff, 0xf9, 0xf4, 0xbb, 0xff, 0xff, 0xff, 0xc5, 0xd7, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xff, 0xaf, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xf5, 0xff, 0xff, 0x6f, 0xfe, 0xdf, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0xef, 0xfb, 0xff, 0xdf, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0x9b, 0xff, 0xef, 0xbf, 0xff, 0xfa, 0xef, 0xff, 0xfd, 0xf7, 0xdf, 0xd3, 0xfe, 0xfb, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xd3, 0x2f, 0xbf, 0xff, 0xf6, 0x8b, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xf7, 0xff, 0xff, 0xe9, 0xa7, 0xff, 0xdd, 0xbf, 0xe9, 0xff, 0xae, 0x37, 0xfe, 0xaa, 0xeb, 0xad, 0xb7, 0x76, 0xfa, 0x17, 0x1f, 0x7e, 0xf1, 0xf5, 0xd7, 0x4f, 0x7f, 0xfd, 0x6b, 0xfe, 0xff, 0xff, 0x6f, 0x85, 0xec, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xf6, 0xfb, 0xff, 0xfb, 0x2f, 0xfe, 0xfc, 0xff, 0xff, 0x1b, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xfa, 0xdb, 0xef, 0xbf, 0xd6, 0xdd, 0xef, 0xff, 0xef, 0xef, 0xfb, 0xfd, 0xbf, 0x7f, 0x26, 0xfe, 0xff, 0xff, 0x9f, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xdf, 0xff, 0xff, 0xbf, 0xf9, 0xbf, 0x78, 0xff, 0xcf, 0x3b, 0x5f, 0xfe, 0xfb, 0xaf, 0x77, 0xed, 0xef, 0xff, 0xff, 0x7f, 0xb4, 0xe1, 0xbf, 0xff, 0x6f, 0xfe, 0x7f, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xeb, 0xea, 0x7f, 0xf7, 0xff, 0x7f, 0xff, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0x7f, 0xee, 0xbf, 0xff, 0xff, 0x7b, 0xfe, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xd7, 0xcf, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xfb, 0xfd, 0xf9, 0xfe, 0xbf, 0xf9, 0xff, 0xf3, 0xb1, 0xf7, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0x3f, 0xed, 0xfa, 0xdf, 0xff, 0x7f, 0xf7, 0x9f, 0xf7, 0xbf, 0xff, 0xfe, 0xff, 0x7f, 0xf7, 0x7f, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfc, 0xbd, 0xd3, 0xff, 0x7f, 0xff, 0xff, 0x9f, 0x7f, 0xfe, 0xfe, 0x7f, 0xff, 0xbe, 0xfb, 0xfe, 0xff, 0x9b, 0xff, 0xff, 0xef, 0xce, 0xef, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xbf, 0x77, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xe9, 0x8f, 0xff, 0xff, 0xf7, 0xff, 0xb9, 0xf7, 0xff, 0xe3, 0x6f, 0x7f, 0xff, 0xff, 0xf7, 0xdf, 0x5f, 0xfe, 0xbf, 0xf1, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0x7f, 0xef, 0xf7, 0xff, 0xff, 0xed, 0xdf, 0xff, 0xff, 0x3b, 0xfc, 0xff, 0xdb, 0xff, 0x67, 0xfe, 0x7f, 0xfb, 0xfd, 0xef, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0x7d, 0xff, 0xf7, 0xfb, 0x9b, 0xf3, 0xff, 0xff, 0xff, 0xfb, 0xbf, 0xbf, 0xfe, 0xfb, 0xff, 0x5f, 0xfe, 0xff, 0x3d, 0x7f, 0xde, 0xfe, 0xff, 0xff, 0xbf, 0x66, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x6f, 0xfa, 0xef, 0xfe, 0xf7, 0x9d, 0xff, 0x5f, 0xcf, 0x3f, 0xfd, 0xff, 0xdf, 0xfb, 0xb7, 0xd9, 0xff, 0x7f, 0xea, 0x3f, 0xff, 0xff, 0xeb, 0xff, 0xac, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xf9, 0xbf, 0xfa, 0xff, 0x6f, 0xdc, 0xff, 0xdf, 0xfa, 0xbb, 0xff, 0xbf, 0xff, 0x7e, 0xeb, 0xdf, 0xff, 0xfe, 0xf5, 0xff, 0xdf, 0xfe, 0x9f, 0xff, 0x5e, 0x99, 0xfb, 0xff, 0xaf, 0xf7, 0x5e, 0x7d, 0xbf, 0xd9, 0x34, 0xff, 0x9f, 0xee, 0xfe, 0xfd, 0xff, 0xff, 0x5f, 0xbf, 0x7f, 0x6e, 0x66, 0xfe, 0xff, 0xef, 0xbd, 0x67, 0xff, 0xbb, 0xa5, 0xef, 0xfb, 0xbd, 0xb9, 0x5f, 0xfd, 0xff, 0xdf, 0x72, 0xe7, 0x8d, 0xb3, 0xa9, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xcb, 0x2b, 0x6f, 0xaf, 0xff, 0x2d, 0xee, 0xde, 0xff, 0xff, 0xff, 0xf5, 0xfd, 0xf9, 0x66, 0xec, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0x95, 0x57, 0xc2, 0xeb, 0xdf, 0xe2, 0x1b, 0xf5, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xba, 0x9b, 0xf7, 0xff, 0xff, 0xc7, 0xdf, 0xdf, 0x7f, 0xff, 0xfd, 0xbf, 0xf9, 0xff, 0xf6, 0xdf, 0xfe, 0xff, 0xf8, 0xb7, 0xff, 0x77, 0xe6, 0xfd, 0xff, 0xfd, 0xff, 0xdf, 0xe7, 0x9f, 0xfd, 0xf6, 0x9f, 0xdf, 0xbc, 0xeb, 0xcf, 0xff, 0xff, 0xff, 0xfb, 0xed, 0x9d, 0xb1, 0xff, 0xfb, 0xee, 0xbf, 0xfb, 0xf8, 0xa3, 0xef, 0xbe, 0xff, 0xad, 0x66, 0xdb, 0x7e, 0xff, 0xfd, 0x76, 0xda, 0xfd, 0x66, 0xee, 0xff, 0x7f, 0xdf, 0x7d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xdf, 0xfe, 0xff, 0xff, 0x9b, 0xff, 0xfe, 0x3f, 0x9b, 0xfb, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x7f, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xfd, 0xdf, 0xf7, 0xef, 0xe6, 0xfe, 0xe9, 0xaf, 0xff, 0xde, 0xc7, 0x0b, 0x3f, 0xbd, 0xff, 0x97, 0x7f, 0x5f, 0xff, 0xbf, 0xfd, 0xff, 0x7f, 0xff, 0xbb, 0x61, 0xff, 0x72, 0xbb, 0xef, 0xfe, 0x5b, 0xe2, 0xaf, 0x66, 0xdf, 0xf3, 0xef, 0x97, 0xff, 0x7f, 0xf7, 0xef, 0x57, 0x7f, 0x6f, 0xfe, 0xbb, 0xfe, 0x3b, 0xef, 0xff, 0xfe, 0xdb, 0xfb, 0xff, 0xff, 0xf6, 0xf7, 0xfd, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0x9b, 0xff, 0xaf, 0xcf, 0x3f, 0xfb, 0xfc, 0xf3, 0xcf, 0x3e, 0xff, 0xfc, 0xe7, 0x1f, 0x7d, 0xfe, 0xd9, 0xe7, 0x1f, 0x3d, 0xfe, 0xe6, 0xff, 0xeb, 0xaf, 0xff, 0xfe, 0xf7, 0xcb, 0xaf, 0xbf, 0xff, 0xce, 0xff, 0x5f, 0xff, 0xff, 0xfd, 0xff, 0x7f, 0xbc, 0xbf, 0xe1, 0xff, 0xfa, 0xfb, 0xef, 0xff, 0xfd, 0xfa, 0xeb, 0xef, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x7f, 0xff, 0xfd, 0xd7, 0xfb, 0x6f, 0xfe, 0xff, 0xfe, 0xeb, 0xaf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xf5, 0xff, 0x7f, 0x7d, 0xfd, 0xf5, 0xff, 0x9b, 0xfb, 0xaf, 0xff, 0xff, 0xfb, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xfb, 0x7e, 0x7f, 0xfd, 0xef, 0xdf, 0x5f, 0x7f, 0xad, 0xff, 0xe6, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xbe, 0xff, 0xdf, 0xdf, 0xff, 0xff, 0x97, 0xdf, 0xfd, 0xbf, 0xf9, 0xff, 0xaf, 0xbb, 0xe6, 0xf2, 0x8b, 0x2f, 0xba, 0xf8, 0x92, 0x47, 0x5f, 0x7e, 0xed, 0xb5, 0xd7, 0x5a, 0x74, 0xfd, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xcf, 0x3e, 0xff, 0xfd, 0xff, 0x7f, 0x7f, 0xfd, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0x1b, 0xff, 0xf7, 0xf7, 0xbf, 0xfd, 0xee, 0xd7, 0xdf, 0x7f, 0xff, 0xff, 0xfd, 0xed, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xa6, 0xde, 0x7f, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xf7, 0xdf, 0x5d, 0xf7, 0xfb, 0xf1, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfd, 0x9f, 0xf9, 0xff, 0x7a, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xeb, 0xff, 0xff, 0xf5, 0xf7, 0x97, 0xfd, 0xed, 0xbf, 0xfd, 0xdb, 0xff, 0x67, 0xfc, 0xe7, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xbf, 0xfb, 0xbe, 0xfe, 0xf7, 0xff, 0xee, 0xfe, 0xff, 0xff, 0xfd, 0x3d, 0xfe, 0x98, 0xf7, 0xef, 0xff, 0xef, 0xdf, 0xcf, 0xbf, 0xbf, 0xff, 0xfb, 0xd7, 0x5b, 0x77, 0xef, 0xbf, 0xcf, 0x7f, 0xdf, 0xfd, 0x7f, 0x46, 0xef, 0xdb, 0x77, 0xfb, 0xff, 0xfc, 0x77, 0x7f, 0x3f, 0xf6, 0xdd, 0xa5, 0xff, 0xff, 0xff, 0xed, 0xa6, 0xfd, 0xff, 0xbf, 0xf9, 0xff, 0x7b, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0x7f, 0xf3, 0xbd, 0xfe, 0xff, 0x7f, 0xff, 0xd7, 0xbf, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xcf, 0x7f, 0xf5, 0xfd, 0xd6, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xbb, 0x9b, 0xff, 0xf9, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf7, 0xef, 0xff, 0x97, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xe6, 0xff, 0xdf, 0x7b, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xd3, 0x4e, 0x77, 0xd7, 0x7f, 0xbf, 0xbd, 0xf6, 0x9f, 0x67, 0xfe, 0xbf, 0xf9, 0xff, 0xfb, 0xdf, 0xfe, 0xdf, 0x7e, 0xff, 0xff, 0xdf, 0xf7, 0xed, 0xbf, 0xfd, 0x3f, 0xff, 0xfc, 0xf4, 0xcf, 0xfd, 0x6f, 0xfe, 0xff, 0xee, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xff, 0x9f, 0xf7, 0xff, 0xfd, 0x5f, 0xbf, 0x7f, 0xff, 0xd7, 0xff, 0x1b, 0xfe, 0xff, 0xff, 0xcb, 0xef, 0xbf, 0xbf, 0xd4, 0xfb, 0xef, 0xbf, 0xfe, 0xcf, 0xff, 0xfd, 0xff, 0xff, 0x7f, 0xfd, 0x3f, 0x66, 0xff, 0xff, 0xf5, 0xd6, 0xfd, 0xef, 0xbf, 0x7c, 0xff, 0xfb, 0xff, 0xff, 0xde, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xb7, 0xf9, 0x5f, 0xf2, 0xff, 0xff, 0x97, 0xff, 0xfb, 0xff, 0xec, 0x7f, 0xfd, 0xff, 0xf4, 0x4b, 0xcf, 0xff, 0xff, 0xdc, 0xfe, 0x6f, 0xd6, 0xb3, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x7f, 0xfa, 0x5f, 0xcf, 0xff, 0xf5, 0xd4, 0xf9, 0xff, 0x9f, 0xf7, 0x5f, 0x9b, 0xfb, 0xef, 0xfe, 0xf7, 0xdf, 0x4f, 0x2f, 0xdd, 0xf7, 0xd3, 0xf7, 0x7f, 0xb6, 0xbf, 0xfc, 0xff, 0xcf, 0x3a, 0xfd, 0xee, 0x66, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xde, 0x7b, 0xf3, 0xff, 0xfe, 0xdd, 0xbf, 0xcd, 0x2d, 0xf7, 0x5d, 0x91, 0x43, 0x8d, 0xb3, 0xb1, 0xff, 0x7e, 0xbd, 0xfc, 0xbe, 0xf6, 0xfa, 0xfe, 0xa5, 0x7d, 0xbf, 0xff, 0xf7, 0x5f, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x66, 0xee, 0xbf, 0x5f, 0x5f, 0x7d, 0x2f, 0xbd, 0xf5, 0x0f, 0x0b, 0xdf, 0xc7, 0xfb, 0xf5, 0xd7, 0xff, 0x7f, 0xf3, 0xf7, 0x3f, 0x9b, 0xf7, 0xff, 0xfd, 0xfd, 0xf7, 0xdf, 0x7c, 0xdb, 0xfd, 0xb7, 0xfb, 0xfd, 0xf6, 0xdf, 0x7e, 0xff, 0xfd, 0xfe, 0xdf, 0xb7, 0xe6, 0xfd, 0xbf, 0x7f, 0xfe, 0xf9, 0x6f, 0xbf, 0x7f, 0xfe, 0x5b, 0xff, 0xfa, 0xeb, 0xff, 0xbf, 0xfe, 0x7b, 0xff, 0xaf, 0xbd, 0xb1, 0xff, 0xfb, 0x8f, 0x3f, 0xfe, 0xea, 0xeb, 0xcf, 0xbf, 0xc7, 0xdd, 0x27, 0xdb, 0x6e, 0xf7, 0xad, 0xc6, 0xda, 0xf6, 0x66, 0xe6, 0xdf, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0x7f, 0xfe, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0x3f, 0x9b, 0xfb, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfe, 0xf7, 0xf7, 0xff, 0xff, 0xfe, 0xfd, 0xdf, 0xff, 0xef, 0xa6, 0xde, 0xef, 0x7d, 0xf4, 0xf1, 0xd3, 0x4f, 0x7f, 0xfc, 0xf4, 0xfd, 0x9f, 0x7f, 0x7f, 0xfd, 0xff, 0x97, 0x5b, 0xff, 0xab, 0x79, 0xdf, 0xaa, 0xbf, 0xff, 0xb6, 0xfa, 0x6b, 0xbf, 0xbf, 0x7a, 0xf9, 0xee, 0x92, 0x5f, 0xfe, 0xbb, 0xdd, 0x56, 0x7f, 0x6f, 0xfe, 0xf7, 0xfe, 0xef, 0xff, 0xff, 0xbf, 0xfe, 0x7f, 0xef, 0x5f, 0xff, 0xff, 0xf5, 0xf7, 0xef, 0xef, 0xdd, 0x75, 0xff, 0x9b, 0xff, 0xaf, 0xcf, 0x6f, 0xb7, 0xed, 0xa4, 0xd3, 0x3d, 0xfb, 0xd4, 0xe7, 0x1f, 0x7d, 0xf4, 0xd9, 0xc7, 0x1f, 0x7d, 0xfe, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xff, 0x7f, 0xbe, 0xfe, 0xe4, 0xff, 0x5f, 0x7f, 0xfd, 0xff, 0xd7, 0x7f, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xff, 0xf7, 0x9f, 0x5e, 0x7f, 0xfd, 0xaf, 0x7f, 0xf9, 0xff, 0xd7, 0x5f, 0xff, 0xff, 0xf5, 0xf5, 0xff, 0x6f, 0xfe, 0xdf, 0xfb, 0xbf, 0xdc, 0xf2, 0x8b, 0x2f, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xf5, 0xd7, 0xff, 0x7f, 0xfd, 0xf7, 0xff, 0x9b, 0xff, 0xef, 0xff, 0xc7, 0x1f, 0x6f, 0xed, 0xf5, 0xf7, 0xdf, 0x93, 0xff, 0x7f, 0xf9, 0xf5, 0xff, 0x5f, 0x73, 0xed, 0xff, 0x66, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfe, 0xbc, 0xfd, 0x97, 0xbf, 0x7e, 0xef, 0xfd, 0xa7, 0xdf, 0xff, 0xbf, 0xe9, 0xdf, 0x2f, 0xbe, 0xfa, 0xea, 0xab, 0x2f, 0xbe, 0xfc, 0xba, 0xd7, 0x5b, 0x7f, 0xdd, 0x75, 0xd7, 0x5b, 0x34, 0xfc, 0x6b, 0xfe, 0xdf, 0xff, 0xd7, 0xcf, 0x7e, 0xf7, 0xf6, 0xff, 0xee, 0xbf, 0xbf, 0xbf, 0xfe, 0xff, 0xfb, 0xaf, 0xdf, 0xff, 0xff, 0x1b, 0xff, 0x7f, 0xbf, 0xfd, 0xfe, 0x7b, 0xf7, 0xff, 0xef, 0x7f, 0x7f, 0xff, 0xe7, 0x1f, 0xde, 0xff, 0xff, 0xb7, 0xfb, 0x5e, 0xe6, 0xdf, 0xff, 0xff, 0x67, 0x7f, 0xff, 0xf5, 0xff, 0x7f, 0xdf, 0xef, 0xfb, 0xee, 0xff, 0xdf, 0xef, 0xff, 0xfd, 0xff, 0xbf, 0xf9, 0xdf, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xb3, 0xde, 0xaf, 0x7f, 0xf5, 0xf7, 0x67, 0xdb, 0x7f, 0x7d, 0xdd, 0x46, 0xff, 0x6b, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xfb, 0x7d, 0xff, 0xff, 0xda, 0x37, 0x7f, 0xdf, 0xff, 0xbf, 0x6f, 0xd5, 0xfd, 0xfb, 0xff, 0x9b, 0xff, 0xff, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0x39, 0xff, 0xdf, 0xef, 0xf6, 0x7f, 0xff, 0xb7, 0xff, 0xe6, 0xdd, 0xff, 0x7b, 0xdf, 0xff, 0xf7, 0x9f, 0xff, 0xff, 0xfd, 0xfe, 0xd7, 0xfd, 0xfe, 0xff, 0xbf, 0xbe, 0x5f, 0xbf, 0xb7, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0xfb, 0xbd, 0xef, 0xbf, 0xfa, 0xfb, 0xff, 0xff, 0x2f, 0x7f, 0xfa, 0x6f, 0xfe, 0xdf, 0xdf, 0x5f, 0xfd, 0xd7, 0xdd, 0x7f, 0xfa, 0xfd, 0xf6, 0x3f, 0xf4, 0xf1, 0xff, 0xff, 0xbd, 0xff, 0x7e, 0xff, 0x9b, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xf6, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xe6, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x6e, 0xff, 0xdf, 0x7f, 0xbf, 0xdd, 0x7e, 0xfb, 0x6f, 0xfe, 0xbf, 0xf1, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x17, 0x7f, 0xbf, 0xfc, 0xeb, 0xfb, 0xef, 0xed, 0xfb, 0xf7, 0xff, 0xcd, 0xfb, 0x63, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0x97, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xcf, 0x6b, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0xfd, 0xbf, 0x66, 0xff, 0xff, 0xec, 0xbf, 0x5f, 0xff, 0xfb, 0xff, 0xbf, 0x9b, 0xdd, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x58, 0xff, 0xb7, 0xd9, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfc, 0x73, 0x3f, 0xaf, 0xff, 0xff, 0xff, 0x3b, 0xff, 0xdf, 0xf9, 0x6f, 0xde, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xbf, 0xff, 0x7f, 0xff, 0xdc, 0x67, 0xfe, 0xfb, 0xef, 0xbf, 0xed, 0xbf, 0x75, 0x5e, 0x9b, 0xfb, 0xf5, 0xbf, 0xf7, 0x9b, 0x7d, 0xbf, 0xd9, 0xb7, 0x9b, 0xdd, 0xea, 0xf8, 0xff, 0xff, 0xbf, 0xf7, 0xdf, 0xcb, 0xee, 0x66, 0xbe, 0xfd, 0xef, 0xbe, 0x66, 0xff, 0x6b, 0xf6, 0xbf, 0x5b, 0xdd, 0x7b, 0xeb, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xb5, 0xb3, 0xa9, 0xff, 0xff, 0xbb, 0xbf, 0xff, 0xdb, 0xfb, 0x7f, 0xac, 0x72, 0x27, 0x7f, 0xfe, 0xeb, 0xef, 0xbb, 0xfd, 0x9f, 0xfe, 0x66, 0xee, 0xff, 0xff, 0x1e, 0xeb, 0xff, 0x85, 0xfe, 0xcf, 0x6b, 0xd5, 0xc3, 0xb7, 0xff, 0xfe, 0xe3, 0x8e, 0xfd, 0xc5, 0xbf, 0x1b, 0xf7, 0xff, 0xff, 0x6d, 0x3f, 0xdf, 0xff, 0xdb, 0xfd, 0xf7, 0xbf, 0xf9, 0xdf, 0x7f, 0x7f, 0xfe, 0xed, 0xff, 0xdb, 0x77, 0xe6, 0x5d, 0xff, 0x7f, 0xfe, 0xff, 0xe7, 0xff, 0x79, 0xfe, 0xf9, 0xcf, 0x7e, 0xfb, 0xcf, 0x3f, 0xef, 0xff, 0xfb, 0xac, 0xb5, 0xb1, 0xef, 0xfb, 0x8f, 0xb7, 0xff, 0x78, 0xfb, 0xcd, 0x35, 0xd6, 0xd1, 0x16, 0x9a, 0x7f, 0xfa, 0xf9, 0x77, 0xdf, 0xe3, 0x66, 0xee, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xcf, 0x3f, 0xff, 0xfd, 0xff, 0xb7, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x3b, 0x9b, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xf7, 0xdb, 0xff, 0xff, 0xf7, 0xf7, 0xdf, 0xff, 0xfe, 0xf7, 0xdf, 0x77, 0xef, 0xe6, 0xfe, 0xff, 0x2f, 0xfc, 0xfe, 0xc7, 0xef, 0x3f, 0xbc, 0xf0, 0x87, 0x7a, 0x4f, 0x7d, 0xf5, 0xce, 0xf7, 0x7f, 0xfe, 0xbb, 0x79, 0xff, 0x7f, 0x89, 0xed, 0xfe, 0xfb, 0x6e, 0x99, 0x3f, 0x76, 0xb3, 0xce, 0x97, 0x6f, 0xfe, 0xfb, 0xe7, 0x5f, 0x7f, 0x6f, 0xfa, 0xff, 0xff, 0xff, 0xeb, 0x7f, 0xbf, 0xde, 0xf3, 0xa9, 0x5e, 0xed, 0xfb, 0xd5, 0x57, 0xef, 0x3d, 0xff, 0x7f, 0xdf, 0x9b, 0xfe, 0xff, 0xcf, 0x0d, 0xba, 0xfc, 0xa3, 0x8f, 0x3f, 0xfb, 0xd4, 0xe7, 0x17, 0x3d, 0xf4, 0xd8, 0x41, 0x8f, 0x5f, 0xfe, 0xe6, 0xff, 0xff, 0x2f, 0xf7, 0xfe, 0xe7, 0xef, 0x3f, 0xdf, 0xfe, 0xf6, 0xff, 0x5f, 0x3f, 0xfd, 0x7e, 0xfa, 0x6b, 0xff, 0xbf, 0xf9, 0x6f, 0xff, 0xeb, 0xe7, 0xdf, 0xff, 0xfe, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xd5, 0x5f, 0xdf, 0x7f, 0xff, 0xd7, 0xf7, 0x6f, 0xfe, 0xff, 0xff, 0xb7, 0xfe, 0xfa, 0xef, 0xff, 0xf3, 0xef, 0xff, 0x7f, 0xdf, 0xf5, 0xd6, 0xfb, 0x7f, 0xff, 0x77, 0xff, 0x1b, 0xfe, 0xff, 0xff, 0x27, 0x1f, 0x7c, 0xfa, 0xbd, 0xd7, 0xdf, 0xfb, 0xfe, 0x7b, 0xbf, 0x75, 0xde, 0xd9, 0x7f, 0xef, 0xff, 0xe6, 0xff, 0xff, 0xed, 0x3f, 0xfd, 0xef, 0x93, 0xff, 0xff, 0xff, 0xfc, 0xa7, 0xff, 0xff, 0xef, 0xff, 0xff, 0x97, 0xea, 0xbf, 0xf9, 0xff, 0xaf, 0x37, 0x7c, 0xf2, 0xab, 0x0f, 0xbf, 0xfa, 0xe0, 0x96, 0x1f, 0x7d, 0xfd, 0xb5, 0xd7, 0x5f, 0x73, 0xfd, 0x6f, 0xfe, 0xef, 0x7f, 0xf7, 0xf7, 0xff, 0x7e, 0xf3, 0xb7, 0xcf, 0x7f, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xdf, 0xdf, 0xff, 0x1b, 0xfd, 0xfe, 0xbb, 0xdf, 0xff, 0xfe, 0xf7, 0x5f, 0x6d, 0xfe, 0x17, 0xff, 0xff, 0xcf, 0xff, 0x77, 0xfe, 0xff, 0xef, 0x7f, 0xe6, 0xff, 0xfe, 0xf6, 0xdf, 0x75, 0xdf, 0xfd, 0xff, 0xdb, 0xea, 0x7f, 0xbf, 0xff, 0xaf, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0xf1, 0xff, 0xff, 0x7f, 0xcd, 0xff, 0xff, 0x7b, 0xfe, 0xcf, 0xff, 0x7d, 0xe7, 0xd7, 0x5e, 0xd6, 0xe7, 0xe9, 0xde, 0xfe, 0x67, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xfe, 0xf7, 0xdf, 0xfe, 0xeb, 0x5f, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x9b, 0xbf, 0xff, 0xf3, 0xff, 0xf7, 0xef, 0xef, 0xdb, 0xdf, 0xd7, 0xb7, 0xfe, 0xc7, 0x9f, 0xfd, 0xff, 0x35, 0x77, 0xdf, 0xbf, 0xe6, 0xff, 0xdd, 0x7f, 0xbf, 0xfe, 0x77, 0xdf, 0x7d, 0xff, 0xef, 0xde, 0xfe, 0xff, 0xef, 0x9b, 0xef, 0xf7, 0xef, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xb5, 0xff, 0xfd, 0xf7, 0xf7, 0x6f, 0x9f, 0x7e, 0xff, 0xfd, 0xbf, 0xbc, 0xff, 0xfb, 0x6f, 0xfe, 0xef, 0xff, 0xff, 0xf3, 0xff, 0x37, 0xd7, 0xbf, 0xff, 0xdf, 0xef, 0xff, 0xbe, 0x43, 0xff, 0xf9, 0xbf, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xdf, 0xfb, 0xff, 0xaf, 0xff, 0xff, 0xdf, 0xf7, 0xf5, 0xff, 0xf7, 0x97, 0x7b, 0xfd, 0xff, 0xff, 0xdf, 0x66, 0xff, 0xff, 0xfe, 0x7f, 0xbf, 0xe3, 0xff, 0xff, 0xf7, 0x4f, 0xff, 0xdf, 0xf9, 0xf5, 0xf5, 0xff, 0xdf, 0x6d, 0xaf, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0x7b, 0x3f, 0x56, 0xff, 0xfd, 0x7e, 0xff, 0xcf, 0xa1, 0xfd, 0xbf, 0xfd, 0xff, 0xf3, 0xd7, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfb, 0x9b, 0xff, 0xfc, 0xf1, 0xc1, 0x2f, 0xbf, 0x78, 0xf4, 0x95, 0xd7, 0xff, 0xf2, 0xef, 0x7b, 0xff, 0xfe, 0xf2, 0xef, 0x8f, 0xff, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xbf, 0xff, 0xfe, 0xfa, 0xdf, 0xff, 0xff, 0x2f, 0xf5, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xd9, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xdf, 0xec, 0xff, 0xfb, 0xff, 0xff, 0x59, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0x6d, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xaf, 0xff, 0x2f, 0xbf, 0xfc, 0xd4, 0xff, 0xe6, 0xff, 0xff, 0x5f, 0x1b, 0xf5, 0xff, 0xff, 0xff, 0x3f, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xd9, 0x67, 0x9f, 0xf5, 0xef, 0xf9, 0xff, 0xff, 0x57, 0xe6, 0x7e, 0xfd, 0xff, 0xbf, 0xfe, 0x9a, 0x7d, 0xff, 0xfd, 0x76, 0xbf, 0x9f, 0x7e, 0x7a, 0xcf, 0xde, 0xdf, 0xff, 0xff, 0xbb, 0x91, 0x5f, 0xff, 0xff, 0xaf, 0xbe, 0x66, 0xff, 0xff, 0xef, 0xee, 0xff, 0xb7, 0xdf, 0x5e, 0xbd, 0xff, 0x5f, 0xfb, 0xff, 0x64, 0xec, 0xff, 0xff, 0xff, 0xeb, 0xbf, 0xff, 0xf7, 0x4f, 0xad, 0xff, 0x65, 0xfd, 0xf5, 0xd7, 0xe3, 0xef, 0xfd, 0xff, 0xbf, 0x19, 0xf9, 0xff, 0xff, 0xff, 0xfa, 0xfb, 0xff, 0xfc, 0xc7, 0xde, 0xff, 0x4a, 0x7e, 0xf9, 0x15, 0xfe, 0xf7, 0xff, 0xff, 0xef, 0x86, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xf9, 0xe6, 0xdb, 0xee, 0xff, 0xf9, 0xe7, 0xbd, 0x69, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x9f, 0x7f, 0xfe, 0xf3, 0xdf, 0x7e, 0xfb, 0xec, 0x3f, 0xff, 0xfc, 0x73, 0x67, 0xae, 0xef, 0x7e, 0xfb, 0xef, 0xb7, 0xff, 0xfc, 0xe3, 0x8f, 0x7f, 0xfc, 0x75, 0xd7, 0x9d, 0x77, 0xfb, 0xed, 0xf7, 0xbb, 0x99, 0xf8, 0xff, 0xdb, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xdf, 0xef, 0xe6, 0xf6, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xbb, 0xb9, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xfe, 0xd2, 0x5f, 0x7f, 0xf5, 0xeb, 0xe5, 0x97, 0xfb, 0xb8, 0xff, 0xfd, 0xdf, 0xff, 0x6e, 0xde, 0xff, 0xff, 0xf6, 0xff, 0xef, 0xbe, 0xf8, 0xef, 0xbf, 0xff, 0x7d, 0xb5, 0xd5, 0x3e, 0xff, 0x7e, 0xfb, 0xef, 0xdf, 0x9b, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xeb, 0xaf, 0xf7, 0xff, 0xbf, 0xff, 0xdd, 0xff, 0xff, 0x7f, 0xf7, 0xdf, 0xbf, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0xe3, 0xcb, 0x0f, 0xfe, 0xe8, 0xf1, 0xc3, 0x0f, 0x7f, 0xf0, 0xe5, 0x9f, 0x7b, 0xfc, 0xf9, 0xe7, 0x9f, 0xbf, 0xf9, 0xff, 0xff, 0xcf, 0xf6, 0xdb, 0x7e, 0xe7, 0x9d, 0x77, 0x9e, 0xf3, 0xf6, 0xdb, 0xff, 0xfc, 0xff, 0xfd, 0xdf, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfe, 0xfc, 0xf3, 0xcf, 0x3f, 0x7f, 0xfc, 0xf1, 0x8f, 0x7d, 0xfc, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xbc, 0x7f, 0xee, 0xfb, 0xe7, 0xaf, 0xbf, 0xfe, 0xf5, 0xd7, 0xfd, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0x6f, 0xf3, 0xff, 0x1f, 0x7f, 0xfc, 0xf5, 0xd7, 0xbe, 0xfe, 0xd8, 0xfb, 0xef, 0xf5, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfd, 0x97, 0xdf, 0xfe, 0xff, 0xed, 0xff, 0xf3, 0x6d, 0xfe, 0xff, 0xeb, 0xaf, 0xbe, 0xfc, 0xfa, 0xe3, 0xaf, 0xbe, 0xea, 0xd5, 0x16, 0x5b, 0x77, 0xed, 0x55, 0xd7, 0x5f, 0xfb, 0x9b, 0xff, 0xff, 0xf7, 0xbc, 0xff, 0xbf, 0xbf, 0xd7, 0xcd, 0xf3, 0xdf, 0xfd, 0xf9, 0xbf, 0xdd, 0x9f, 0xdf, 0xff, 0xff, 0xff, 0xc6, 0xff, 0xde, 0x6f, 0xfb, 0xff, 0x9f, 0x6d, 0xef, 0x5f, 0xfc, 0xf7, 0xfb, 0xef, 0xb7, 0x7f, 0xfd, 0xfb, 0xff, 0xdf, 0x9f, 0xf9, 0xff, 0xff, 0xf7, 0xfd, 0xfd, 0xff, 0xef, 0xfd, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xbf, 0xfe, 0xff, 0x6f, 0xfc, 0xff, 0xff, 0xbf, 0xff, 0xbf, 0xb5, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xb5, 0xfd, 0xdf, 0x7f, 0x5f, 0xff, 0xb5, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x7b, 0xff, 0xff, 0x7f, 0xfe, 0xf7, 0xf7, 0x7b, 0xfd, 0xf3, 0x7f, 0xff, 0x4d, 0xff, 0xe6, 0xff, 0xfd, 0xbf, 0xff, 0xfc, 0xfe, 0xff, 0x7c, 0xff, 0xf1, 0x6f, 0xf7, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xaf, 0xf9, 0xf3, 0xff, 0xdf, 0xdf, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xc7, 0x5f, 0x7d, 0xed, 0x6d, 0xd7, 0xff, 0x6f, 0xfa, 0xff, 0xff, 0x97, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xbf, 0xef, 0xf9, 0xaf, 0xff, 0xfa, 0xff, 0xdb, 0xfd, 0xff, 0xfe, 0x9b, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xf3, 0xfd, 0xdf, 0xff, 0x1f, 0xff, 0x99, 0xf7, 0xfe, 0x5f, 0xfe, 0xff, 0xbc, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xd6, 0x3f, 0xfe, 0xdf, 0x37, 0xff, 0xbb, 0xbf, 0xfb, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xbf, 0xb9, 0xff, 0x7f, 0xdf, 0x7f, 0xfb, 0xef, 0x7f, 0xfd, 0xb8, 0xf3, 0x5f, 0xf3, 0x9f, 0x7b, 0xff, 0xfd, 0x7e, 0xdf, 0xef, 0x6f, 0xee, 0xff, 0xff, 0xf7, 0xff, 0xf5, 0xff, 0xff, 0xdb, 0xef, 0x7f, 0xfb, 0xeb, 0xcf, 0x9d, 0x7f, 0xbf, 0xf7, 0xd7, 0xff, 0x9b, 0xfd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xfe, 0xea, 0xdf, 0xdb, 0x7f, 0xef, 0x55, 0xd7, 0xed, 0x7f, 0xfd, 0xff, 0x86, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xee, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xed, 0xff, 0xf7, 0x7f, 0xff, 0x8f, 0xd9, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xfd, 0xfe, 0xfb, 0xff, 0xff, 0xbf, 0xee, 0xbf, 0xdf, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x6d, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x5e, 0x7b, 0xf9, 0xd5, 0xcf, 0xff, 0xfd, 0xda, 0xf3, 0x2f, 0xff, 0xf5, 0xff, 0x9b, 0xf5, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xad, 0xb3, 0xcf, 0x3e, 0xf7, 0xf9, 0xff, 0x9d, 0xfd, 0xfc, 0x7f, 0x6f, 0xfd, 0xd7, 0xe6, 0xfe, 0xff, 0xbf, 0x99, 0xf6, 0xde, 0xfe, 0x75, 0xd9, 0xf4, 0xa7, 0xff, 0x7f, 0xaf, 0xcb, 0x7e, 0xb3, 0x57, 0xaf, 0xbb, 0x99, 0xff, 0xff, 0x6b, 0xa6, 0xbe, 0xfb, 0xee, 0x7d, 0xbf, 0xfd, 0xed, 0xdf, 0x77, 0xeb, 0xab, 0xb7, 0x66, 0x53, 0xed, 0x6c, 0xec, 0xff, 0xff, 0xfb, 0xab, 0xec, 0xd7, 0xbe, 0xfa, 0xeb, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xff, 0x7f, 0xbf, 0xf4, 0xbf, 0x99, 0xfb, 0xff, 0xbf, 0xfe, 0x7a, 0x39, 0xac, 0xbf, 0xfc, 0xf2, 0x97, 0x5f, 0x7f, 0xfd, 0xe5, 0xdf, 0x7f, 0x7f, 0xfd, 0xcf, 0xe6, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0x7f, 0xf3, 0xcd, 0x6f, 0xfe, 0xf9, 0xb7, 0x9b, 0xff, 0xbf, 0xff, 0xff, 0xad, 0x79, 0xff, 0xff, 0xff, 0x79, 0xfe, 0xf9, 0xff, 0xbf, 0xfd, 0xf6, 0xb7, 0xff, 0xfc, 0xfb, 0xed, 0xbf, 0xff, 0xfe, 0x7b, 0x6f, 0xe8, 0xff, 0x7e, 0xfb, 0x8f, 0x3f, 0xd7, 0xf6, 0xeb, 0xac, 0x7b, 0x8d, 0xfd, 0x76, 0x5f, 0x77, 0xf3, 0x79, 0xf6, 0xbd, 0x99, 0xf9, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x3f, 0xff, 0xff, 0xef, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xcf, 0xe6, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbb, 0xa9, 0x7f, 0xfa, 0xef, 0x6f, 0xbe, 0xf4, 0xfb, 0xcb, 0x3f, 0x7f, 0xf9, 0xf5, 0xf7, 0x5f, 0xfe, 0xff, 0xcf, 0xf7, 0xff, 0x6a, 0xde, 0xbf, 0xdc, 0xee, 0x9b, 0x2d, 0xfe, 0xfc, 0x6a, 0xab, 0x5f, 0x7d, 0xf9, 0xe5, 0x57, 0xff, 0xbe, 0xfb, 0xef, 0xdf, 0x9b, 0xff, 0xaf, 0xbf, 0x7e, 0x6e, 0xeb, 0xb6, 0xbf, 0xdf, 0xff, 0xf7, 0x5f, 0x7f, 0xfd, 0x7d, 0xf3, 0xff, 0xfd, 0xff, 0xff, 0xe6, 0xff, 0xeb, 0xa3, 0x87, 0x1f, 0x7a, 0xec, 0xe1, 0x87, 0x0f, 0xfd, 0xd8, 0x41, 0x1f, 0x7f, 0xfc, 0xf9, 0xe7, 0x9f, 0xbf, 0xf9, 0xff, 0xff, 0xef, 0x77, 0x97, 0x58, 0xfb, 0xed, 0xb7, 0x9f, 0xfd, 0xf4, 0xd3, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfe, 0xfc, 0xa3, 0x8f, 0x3f, 0xfb, 0xe8, 0x73, 0x1f, 0x7d, 0xf4, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0x9f, 0xf7, 0xea, 0xbb, 0xe7, 0x9f, 0x3f, 0xfe, 0x53, 0x47, 0xfd, 0xff, 0xf7, 0x5f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xf1, 0xe7, 0x9a, 0xfb, 0xfc, 0xb1, 0xc7, 0x3f, 0x96, 0x5d, 0xff, 0xef, 0xfd, 0xd7, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xcb, 0xff, 0xef, 0xf9, 0xf2, 0xff, 0x2f, 0x2f, 0xf9, 0xff, 0xfd, 0xff, 0x7f, 0x7a, 0xe9, 0xf7, 0xff, 0x6f, 0xfa, 0xff, 0xcb, 0xae, 0xbf, 0xf6, 0x7a, 0x6b, 0xaf, 0xb9, 0xce, 0xf5, 0xd7, 0x5f, 0x7f, 0xdd, 0xf5, 0xd6, 0x5d, 0xff, 0x9a, 0xfd, 0xff, 0xff, 0xfb, 0x63, 0xdb, 0xfd, 0xf7, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xef, 0xff, 0xdf, 0xc6, 0xff, 0xff, 0xfb, 0x9f, 0xfb, 0x9d, 0xdd, 0xfe, 0xff, 0xff, 0xbf, 0x7f, 0xff, 0xed, 0xff, 0xff, 0x3f, 0xff, 0xfd, 0x9f, 0xf9, 0x9f, 0xff, 0x7d, 0x57, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0x7f, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0x3f, 0xfa, 0xfb, 0xef, 0xfb, 0xbe, 0xff, 0xbb, 0xff, 0x7b, 0xdf, 0xb5, 0xf0, 0xdf, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xeb, 0xf7, 0xff, 0xfd, 0x7b, 0xff, 0x5f, 0xff, 0xf5, 0xfb, 0xff, 0xf6, 0x7f, 0xff, 0xd7, 0xff, 0x5f, 0xff, 0xe6, 0xff, 0xfb, 0xef, 0xbf, 0xf7, 0xbf, 0xff, 0xef, 0xfe, 0xff, 0xf7, 0xf7, 0xfd, 0x77, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xef, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xf6, 0xdf, 0x7f, 0x3b, 0xfc, 0xff, 0x7f, 0xff, 0xf7, 0xbb, 0xfd, 0xfe, 0xff, 0x6f, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xff, 0xff, 0xef, 0xff, 0xaf, 0xff, 0xfe, 0xff, 0x79, 0x77, 0xff, 0xfa, 0x9b, 0xff, 0xff, 0x3f, 0x7f, 0xfc, 0xd1, 0xf7, 0x3f, 0xfe, 0xf8, 0xc7, 0xed, 0x77, 0xff, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0x6f, 0xbf, 0xf9, 0xe6, 0xff, 0xbf, 0xef, 0xb5, 0xb7, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xbf, 0x99, 0xff, 0xff, 0xee, 0xaf, 0xdd, 0xff, 0xff, 0xeb, 0x2f, 0xf7, 0xdf, 0x47, 0xfe, 0xfb, 0xef, 0xff, 0xf7, 0xff, 0xff, 0x6f, 0xec, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xea, 0xbb, 0xef, 0xfe, 0xed, 0xfe, 0xff, 0xbd, 0x5d, 0xff, 0xff, 0xff, 0x7f, 0x98, 0xff, 0xff, 0xbf, 0xfe, 0xfd, 0xff, 0xbf, 0xfb, 0xfe, 0xfd, 0x7f, 0xee, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xa6, 0xff, 0xeb, 0xbf, 0xfe, 0xf2, 0xef, 0xfb, 0xbf, 0xfc, 0xf2, 0xdf, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xaf, 0xd9, 0xff, 0xfa, 0xdb, 0x6f, 0xff, 0x9d, 0xfe, 0xdb, 0x6f, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x6d, 0xfe, 0xbf, 0xde, 0x76, 0xdb, 0x69, 0xbf, 0xdf, 0x76, 0xdb, 0xff, 0x4e, 0xf5, 0xff, 0xff, 0x6b, 0x2f, 0xff, 0xff, 0xfa, 0x9b, 0xf5, 0xaf, 0xd7, 0x5a, 0x6b, 0xbb, 0xef, 0xd7, 0x5e, 0xfb, 0xff, 0xd3, 0xff, 0xff, 0x7f, 0xf6, 0xd9, 0xff, 0xbf, 0xd7, 0xe6, 0xfe, 0x6b, 0xbf, 0xd9, 0x26, 0xfb, 0xef, 0xb7, 0xd8, 0x62, 0xd5, 0xdf, 0xff, 0xff, 0xff, 0x2d, 0xbb, 0xfe, 0xdf, 0xbb, 0x99, 0x6f, 0xea, 0x7b, 0xe5, 0xfd, 0xfa, 0xae, 0x78, 0xef, 0x7d, 0xf5, 0xdf, 0xfa, 0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0x6c, 0xec, 0xbf, 0xfa, 0xfe, 0xfb, 0xaf, 0xff, 0xfe, 0x5e, 0xfb, 0x5d, 0x67, 0xfd, 0xff, 0xff, 0x5f, 0x7f, 0xfd, 0xff, 0xbf, 0x99, 0xf8, 0xaf, 0xff, 0xf6, 0xdb, 0x6b, 0xef, 0xff, 0x16, 0x5b, 0xd4, 0xdf, 0xff, 0xff, 0xff, 0x97, 0x5f, 0xfc, 0xff, 0xef, 0xc6, 0xfd, 0xff, 0xef, 0xbd, 0xe7, 0x9f, 0xff, 0xec, 0xbd, 0xe7, 0x7e, 0xff, 0xff, 0xff, 0xdf, 0x6e, 0xbe, 0xf9, 0xff, 0x9d, 0x79, 0xdf, 0x7f, 0xfb, 0xef, 0xb3, 0xce, 0x7f, 0xfa, 0xef, 0x73, 0x9d, 0xff, 0xfe, 0xff, 0xcf, 0xb7, 0xdf, 0xfe, 0x7f, 0x6f, 0xec, 0xef, 0xee, 0xfa, 0xeb, 0xbf, 0xff, 0xf6, 0xfa, 0xeb, 0x7f, 0xbf, 0xdd, 0xf7, 0xdf, 0x7f, 0x8d, 0x7d, 0xf7, 0xbf, 0x99, 0xf9, 0xff, 0xbf, 0xf7, 0xde, 0x7f, 0xff, 0xbf, 0xf7, 0xde, 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xce, 0xe6, 0xfe, 0xff, 0xef, 0xbf, 0xfd, 0xff, 0xff, 0xef, 0xbf, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xbb, 0xb9, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xfa, 0x7f, 0xff, 0xf5, 0xef, 0xf5, 0xd7, 0x5f, 0x7f, 0xf9, 0xe7, 0xd7, 0xff, 0x6e, 0xde, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xbe, 0xfc, 0xef, 0xbf, 0xff, 0xbd, 0xb9, 0xe5, 0x97, 0x5f, 0x7d, 0xd5, 0xe5, 0xdf, 0x9b, 0xff, 0xaf, 0xfb, 0xef, 0xfa, 0xeb, 0xe7, 0xf7, 0xff, 0xfa, 0xd7, 0x4f, 0x7f, 0xfd, 0xff, 0xf7, 0xfb, 0x7f, 0xfd, 0xff, 0xe6, 0xff, 0xeb, 0xf3, 0x83, 0x0e, 0xba, 0xf8, 0xf3, 0x83, 0x0e, 0x75, 0xd1, 0x47, 0x9f, 0x7f, 0xfc, 0xd9, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xf7, 0xeb, 0xa7, 0x9f, 0xfe, 0xfb, 0xeb, 0xa7, 0x1f, 0xfd, 0xf5, 0x97, 0x5f, 0xff, 0xfd, 0xf7, 0xd7, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xba, 0xe8, 0xa2, 0xeb, 0xfe, 0xba, 0xe8, 0x52, 0x57, 0xfd, 0xe5, 0xd7, 0x7f, 0x7f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0x2f, 0xbe, 0x9e, 0x7f, 0xfe, 0xfb, 0xbf, 0x9e, 0x7f, 0xfe, 0x57, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xe6, 0xff, 0xeb, 0xaf, 0xf9, 0xe7, 0x9f, 0xdf, 0xaf, 0xf9, 0xe7, 0x3e, 0xd7, 0x5f, 0xfe, 0xff, 0xbf, 0xdf, 0x5e, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xbd, 0xf4, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xeb, 0xaf, 0xbf, 0xfe, 0xba, 0xab, 0xaf, 0xbf, 0xe6, 0xf5, 0xd7, 0x5f, 0x7b, 0xfd, 0xf5, 0xd7, 0x5f, 0xff, 0x9b, 0xfd, 0x3d, 0xfe, 0x7c, 0xf3, 0xc5, 0xff, 0xff, 0xef, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfd, 0xff, 0xff, 0xc6, 0xff, 0xfb, 0xbf, 0xff, 0xfe, 0x7b, 0xbf, 0xff, 0xdb, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9f, 0xf9, 0xff, 0xfd, 0xfb, 0xef, 0xbd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x6f, 0xfc, 0xff, 0xff, 0xfb, 0xef, 0xcf, 0xff, 0xfe, 0x7b, 0xef, 0x7d, 0x7f, 0x9f, 0xff, 0xff, 0x7f, 0xdf, 0xef, 0xff, 0xff, 0x99, 0xfd, 0xff, 0xbf, 0xff, 0xee, 0xfe, 0xeb, 0xbf, 0xbf, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x6f, 0xff, 0xe6, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xfc, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x6f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0x5f, 0x7f, 0xfe, 0xff, 0xff, 0xbf, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xc7, 0x9f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xfb, 0xdf, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfb, 0xef, 0xbf, 0xdf, 0xfe, 0xf9, 0xef, 0xbd, 0x77, 0xbd, 0xf4, 0xd7, 0x5f, 0x77, 0xfd, 0xf1, 0xd7, 0xff, 0x6f, 0xf6, 0xff, 0xfe, 0xf9, 0xe7, 0x1f, 0x7f, 0xfc, 0x79, 0xe7, 0x7f, 0xf7, 0xfd, 0xf7, 0xdf, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0x9b, 0xef, 0xcf, 0x7f, 0xfb, 0xed, 0xf7, 0xdf, 0x7f, 0xdb, 0xfd, 0xdf, 0xbf, 0xff, 0xfd, 0xfb, 0x5f, 0xff, 0xff, 0xff, 0xff, 0x86, 0xff, 0xff, 0xbf, 0xfd, 0xf6, 0xdb, 0xef, 0xbf, 0xfd, 0xf6, 0xb7, 0xdf, 0x7e, 0xab, 0xed, 0xf7, 0xf7, 0xde, 0xfb, 0x8f, 0xd9, 0xff, 0xfa, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xd3, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x6d, 0xfe, 0xe7, 0xde, 0x76, 0xdb, 0x6d, 0xb7, 0xdf, 0x76, 0xdb, 0xdd, 0x6f, 0xbf, 0xfd, 0xb6, 0xdb, 0xef, 0xbd, 0xe7, 0xff, 0x9b, 0xf5, 0xe9, 0xd7, 0x5a, 0x6b, 0xad, 0xb5, 0xd7, 0x5e, 0x7b, 0xdd, 0x6b, 0xaf, 0xbd, 0xe6, 0xda, 0x6b, 0xaf, 0xf5, 0xd7, 0xe6, 0xfe, 0x6f, 0xb6, 0xd9, 0x66, 0x9b, 0x6d, 0xb5, 0xd8, 0x62, 0x37, 0xdb, 0x6c, 0xb3, 0xcd, 0xb6, 0xf2, 0xde, 0xff, 0xbb, 0x99, 0xff, 0x5e, 0x79, 0xef, 0xbd, 0xf7, 0xde, 0x79, 0xef, 0x7d, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xbc, 0xf7, 0xff, 0x6c, 0xec, 0xff, 0xfe, 0xfe, 0xfb, 0xef, 0xbf, 0xb7, 0x7e, 0xfb, 0xdd, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xdb, 0xfd, 0x77, 0xbe, 0x99, 0xfb, 0xef, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0x1e, 0x7b, 0xdc, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xad, 0xef, 0xe6, 0xfd, 0xff, 0xef, 0xbd, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0xe7, 0x3c, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xff, 0xfc, 0xd3, 0xbd, 0x79, 0xff, 0x7f, 0xfb, 0xef, 0xb3, 0xcf, 0x3e, 0xfb, 0xec, 0x73, 0x9f, 0x7d, 0xf6, 0xd9, 0x67, 0x9f, 0x7d, 0x7e, 0x79, 0x6f, 0xe0, 0xff, 0xbe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xbf, 0x99, 0xf9, 0xff, 0xbf, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xcf, 0xe6, 0xfe, 0xff, 0xef, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xdf, 0xfe, 0xbb, 0xa9, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x6a, 0xd8, 0xb7, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0x5f, 0xdf, 0x9b, 0xff, 0xaf, 0xfb, 0xff, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0xf3, 0x83, 0x0e, 0x3a, 0xe8, 0xa0, 0x83, 0x0e, 0x75, 0xd0, 0x41, 0x07, 0x1d, 0x74, 0xd0, 0x41, 0x9f, 0xbf, 0xf9, 0xff, 0xfb, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0x3f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xff, 0x6f, 0xfe, 0x9f, 0xff, 0xba, 0xe9, 0xa6, 0x9b, 0x6e, 0xba, 0xe9, 0x56, 0x37, 0xdd, 0x74, 0xd3, 0x4d, 0x37, 0xdd, 0xf4, 0xff, 0x9b, 0xff, 0xaf, 0xbe, 0x9e, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xaf, 0xc9, 0x27, 0x9f, 0x7c, 0xf2, 0xc9, 0x27, 0x3f, 0xf9, 0xe4, 0x93, 0x4f, 0x3e, 0xf9, 0xe4, 0xfb, 0xbf, 0xf9, 0xff, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x37, 0xff, 0x6f, 0xfa, 0xbf, 0x6b, 0xaf, 0xbf, 0xfe, 0xea, 0xeb, 0xaf, 0xbe, 0xfe, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5d, 0xff, 0x9a, 0xff, 0xff, 0xff, 0xfc, 0xf3, 0xcf, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb, 0xdf, 0xc6, 0xff, 0xff, 0xbf, 0xdf, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xfe, 0xfd, 0xde, 0xff, 0x9f, 0xc9, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x6b, 0xfe, 0xff, 0xff, 0xf4, 0x93, 0xcf, 0x3f, 0xff, 0xdc, 0xd3, 0x9d, 0xff, 0xf9, 0xe9, 0xa7, 0x9f, 0x7e, 0xba, 0xf5, 0xff, 0x9b, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0xfe, 0xfa, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7b, 0xff, 0xe6, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xf9, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xff, 0xbe, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x9b, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf3, 0xce, 0xff, 0xff, 0xbd, 0xe7, 0xff, 0xf7, 0x7e, 0xf9, 0xe7, 0xbf, 0x7e, 0xfb, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xfd, 0xf7, 0xef, 0xdd, 0xff, 0xbf, 0xb9, 0xff, 0xf7, 0xdf, 0xff, 0x5f, 0xfe, 0xfd, 0xef, 0xff, 0xff, 0xfc, 0xf4, 0xd7, 0x17, 0x7f, 0xfc, 0xf5, 0xd7, 0xff, 0x6f, 0xfc, 0xff, 0xff, 0xf7, 0xdf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x7f, 0xfe, 0xdf, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xfe, 0x99, 0xfb, 0xff, 0xff, 0x7f, 0xff, 0xeb, 0xb7, 0xbf, 0xfe, 0xfb, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa6, 0xff, 0xff, 0xbf, 0xa7, 0xfe, 0x7b, 0xae, 0xbf, 0xfc, 0xfa, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5c, 0x7f, 0xff, 0xaf, 0xd9, 0xff, 0xff, 0xfb, 0xa5, 0xbf, 0x9f, 0xfe, 0xbb, 0x6f, 0x57, 0xff, 0xdd, 0x77, 0xdf, 0x7d, 0x37, 0xfd, 0xf7, 0xff, 0x6d, 0xfe, 0xff, 0xff, 0xfb, 0xeb, 0xed, 0xb7, 0xdb, 0x76, 0xdb, 0xdd, 0x6d, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xb7, 0xfd, 0xfc, 0x9b, 0xf5, 0xff, 0xbf, 0xff, 0x7a, 0xed, 0xb5, 0xd7, 0x5e, 0x7b, 0xdd, 0x6b, 0xaf, 0xbd, 0xf6, 0xda, 0x6b, 0xaf, 0xfd, 0xd7, 0xe6, 0xfe, 0x7f, 0xbf, 0x9d, 0xf6, 0x5b, 0x6d, 0xb5, 0xd8, 0x52, 0xb7, 0xda, 0x6c, 0xab, 0xad, 0xb6, 0xda, 0x6a, 0xb3, 0xbb, 0x99, 0x6f, 0xff, 0xbb, 0xab, 0xbe, 0x77, 0xde, 0x79, 0xef, 0x5d, 0xef, 0xbc, 0xf2, 0xce, 0x3b, 0xef, 0xbc, 0xf3, 0xea, 0x6c, 0xec, 0xff, 0xfb, 0x6b, 0xab, 0xed, 0xa5, 0xb7, 0x7e, 0x7b, 0xd9, 0x5b, 0xff, 0xbd, 0xf5, 0xd6, 0x5b, 0x6f, 0x7d, 0xbe, 0x99, 0xfb, 0xff, 0xb3, 0x8f, 0xda, 0x6e, 0xb9, 0xfd, 0x16, 0x5b, 0xdc, 0x7e, 0xfb, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xad, 0xef, 0xc6, 0xfd, 0xdf, 0x7f, 0xff, 0xfd, 0xde, 0x7a, 0xee, 0xb9, 0xe7, 0x3d, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xdc, 0xd3, 0x9d, 0x79, 0xff, 0xe7, 0x9f, 0x7f, 0xbe, 0xff, 0x3e, 0xfb, 0xec, 0x73, 0x9f, 0x7d, 0xf6, 0xd9, 0x67, 0x9f, 0x7d, 0xf6, 0x79, 0x6f, 0xec, 0xff, 0xf8, 0xe3, 0x8f, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xbf, 0x99, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xcf, 0xe6, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdb, 0x6f, 0xbf, 0xfd, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xdf, 0xfe, 0xbb, 0xb9, 0x7f, 0xe6, 0x99, 0x2d, 0xfc, 0xf7, 0x5f, 0x7f, 0xff, 0xf5, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x6e, 0xde, 0xbf, 0xf9, 0xe6, 0x8b, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xdf, 0x9b, 0xff, 0xe7, 0x9e, 0xfb, 0x7a, 0xff, 0xad, 0xbf, 0xde, 0xfa, 0xd7, 0x5b, 0x67, 0xbd, 0xf5, 0xd6, 0x5f, 0x6f, 0xdd, 0xff, 0xe6, 0xff, 0xfb, 0xe3, 0x8b, 0x0c, 0xff, 0xe8, 0xa0, 0x8f, 0x3e, 0xf5, 0xd1, 0x47, 0x1f, 0x7d, 0xf4, 0xd1, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xf3, 0xdf, 0x76, 0x9f, 0x7e, 0xfa, 0xe9, 0xaf, 0x3f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xff, 0x6f, 0xf8, 0xff, 0xfe, 0xff, 0xfc, 0xa1, 0x8f, 0x3e, 0xfa, 0xeb, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0x3f, 0xff, 0xbd, 0xb7, 0xea, 0xfb, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x86, 0xfe, 0x6f, 0xff, 0xf5, 0xd7, 0x1a, 0x7f, 0xfc, 0xfd, 0xf7, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xf2, 0xf7, 0x8b, 0x2f, 0xbd, 0xf8, 0xfa, 0xab, 0xaf, 0xbe, 0xfe, 0xd5, 0xd7, 0x5f, 0x7d, 0xfd, 0xb5, 0xd7, 0x5f, 0xff, 0x9b, 0xff, 0x37, 0xfe, 0xf8, 0xf3, 0xfe, 0xf7, 0xff, 0xe8, 0xff, 0x7f, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0xff, 0xfd, 0xff, 0xff, 0xc6, 0xff, 0xfb, 0xef, 0xff, 0xfb, 0xff, 0x7f, 0xe7, 0xdf, 0x77, 0xff, 0xd3, 0xcf, 0x7b, 0xfd, 0x3d, 0xff, 0xf7, 0xff, 0x9a, 0xf9, 0xff, 0xfd, 0xf7, 0xaf, 0xfb, 0xff, 0xff, 0x6f, 0xfb, 0xdf, 0xff, 0xfe, 0xdf, 0xf7, 0xbb, 0xfd, 0xbf, 0xff, 0xfb, 0x6f, 0xfe, 0xf6, 0xdc, 0xfb, 0xe3, 0xbf, 0xfd, 0xf6, 0xb3, 0xef, 0x7d, 0xfb, 0xf9, 0xb6, 0x9f, 0x7f, 0xbf, 0xbd, 0xf7, 0xff, 0x99, 0xfd, 0xff, 0xff, 0xf7, 0xff, 0xba, 0xef, 0xff, 0xbf, 0xfe, 0xff, 0xdf, 0x7b, 0x7f, 0xdd, 0xf7, 0xdf, 0x7f, 0xff, 0xff, 0xe6, 0xff, 0xfb, 0xef, 0xbf, 0xf7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xcf, 0x3f, 0xfb, 0xfc, 0xf2, 0xcf, 0xff, 0xbf, 0xbf, 0xe7, 0xf7, 0x57, 0x7e, 0xf9, 0xe5, 0xf7, 0xd7, 0xff, 0xff, 0xe6, 0xff, 0xaf, 0xbf, 0xf7, 0xfe, 0xfb, 0xef, 0xfd, 0xff, 0xdf, 0xf7, 0xfe, 0x7b, 0xef, 0xfd, 0xf8, 0xfe, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf9, 0xf7, 0x9f, 0x7f, 0xdb, 0xf9, 0xff, 0xbf, 0xef, 0xfc, 0xf6, 0xcf, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfc, 0xff, 0xfe, 0xdb, 0x6f, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xaf, 0xff, 0xfe, 0xfa, 0xad, 0xad, 0xfe, 0xfe, 0xea, 0xef, 0xbf, 0xfd, 0xf6, 0xdb, 0x7f, 0xfb, 0xfd, 0xf7, 0xfb, 0x86, 0x7f, 0x2e, 0xbf, 0xfc, 0xf6, 0xcb, 0x2f, 0xbf, 0xe4, 0xf2, 0x97, 0x5f, 0x7e, 0x79, 0xe7, 0xcf, 0xff, 0xff, 0xff, 0x8f, 0xd9, 0x9f, 0xfe, 0xbb, 0xef, 0x97, 0xff, 0xee, 0xbb, 0xe5, 0x7e, 0xf7, 0xdd, 0x77, 0xdf, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0x6d, 0xfe, 0xb7, 0xdb, 0x7e, 0xfb, 0xed, 0xb6, 0xdf, 0x76, 0xdb, 0xdd, 0x6f, 0xbb, 0xfd, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xf5, 0xb5, 0xd7, 0x5e, 0x7b, 0xed, 0xb5, 0xd7, 0x5e, 0x73, 0xdd, 0x6b, 0xaf, 0xbd, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xe6, 0xfe, 0x6f, 0xb6, 0xd9, 0x66, 0x9b, 0x6d, 0xb6, 0xd8, 0x66, 0x37, 0x5b, 0x6c, 0x33, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbb, 0x99, 0xfe, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0x7d, 0xef, 0xbd, 0xf7, 0xde, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0x6c, 0xec, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0x7e, 0xfb, 0xdf, 0x7f, 0x9f, 0xfd, 0xdf, 0xff, 0xef, 0xff, 0xff, 0xbf, 0x99, 0xfb, 0xbf, 0xfd, 0xf6, 0x5b, 0x6d, 0xbf, 0xfd, 0x16, 0xdb, 0xdf, 0x7e, 0xab, 0xed, 0xb7, 0xff, 0xf3, 0xff, 0xff, 0xef, 0xe6, 0xfd, 0x7b, 0xee, 0xb9, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0xe7, 0x3d, 0xf7, 0xdc, 0xf3, 0xcf, 0xff, 0xfd, 0xff, 0xff, 0xbd, 0x79, 0xff, 0x3e, 0xfb, 0xec, 0xb3, 0xcf, 0x3e, 0xfb, 0xec, 0x73, 0x9f, 0x7d, 0xf6, 0xd9, 0xe7, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0xec, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x7f, 0xff, 0xfd, 0xf7, 0x3f, 0x99, 0xf9, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xe6, 0xfe, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xa9, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0x7b, 0xfd, 0xff, 0xff, 0xff, 0x6a, 0xde, 0xfd, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0x5f, 0xfe, 0xff, 0xff, 0xdf, 0x98, 0xff, 0xaf, 0xbb, 0xee, 0xfa, 0xeb, 0xae, 0xbb, 0xee, 0xba, 0xd7, 0x5d, 0x77, 0xfd, 0xf5, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xeb, 0xa3, 0x8b, 0x2e, 0xfa, 0xe8, 0xa2, 0x8f, 0x2e, 0x75, 0xd1, 0x45, 0x17, 0x7d, 0x74, 0xf8, 0xe3, 0x9f, 0xbf, 0xf9, 0xff, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0x3f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xf1, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xfa, 0xe9, 0xa7, 0x9f, 0x7e, 0xfa, 0xe9, 0x57, 0x3f, 0xfd, 0xf4, 0xd3, 0x4f, 0xaf, 0xff, 0xfe, 0xff, 0x9b, 0xff, 0xf7, 0xff, 0xaf, 0xbf, 0xfe, 0xfb, 0xeb, 0xbf, 0xbf, 0xfe, 0xf5, 0xd7, 0x5f, 0xff, 0xd5, 0xf5, 0xcf, 0xff, 0xff, 0x86, 0xff, 0x7f, 0xff, 0xc1, 0x07, 0x1f, 0x7c, 0xf0, 0xc1, 0x07, 0x3f, 0xf8, 0xe0, 0x83, 0x0f, 0x64, 0xf8, 0xe1, 0xff, 0x8f, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfa, 0xff, 0xeb, 0xaf, 0xbf, 0xfa, 0xfa, 0xab, 0xaf, 0xbf, 0xfa, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0xff, 0x9a, 0xff, 0xf7, 0xcf, 0x7c, 0xff, 0xff, 0x3f, 0xff, 0xec, 0xf3, 0x9f, 0x7f, 0xfe, 0xf1, 0xe6, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xc6, 0xfb, 0xfd, 0x67, 0xff, 0xdd, 0x7f, 0x7f, 0xff, 0xfd, 0x7f, 0xbf, 0xfb, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0x9f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfa, 0xea, 0xa7, 0x5f, 0xfd, 0xf4, 0xd3, 0x4f, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0x6f, 0xfe, 0x17, 0xdf, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xdc, 0xf3, 0x9d, 0x7f, 0xfe, 0xf7, 0xa6, 0xef, 0xfe, 0xff, 0xff, 0xfb, 0x9b, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x9f, 0xff, 0xfe, 0xff, 0xdd, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xbe, 0xff, 0xde, 0xf7, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xf6, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0x7f, 0xcf, 0x3f, 0xbf, 0xfc, 0xf3, 0xcb, 0x2f, 0xfe, 0xf8, 0xe6, 0x17, 0xdf, 0x7f, 0xe9, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xfe, 0xf7, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xd9, 0xa7, 0x9f, 0x77, 0xfe, 0xf9, 0xef, 0xbf, 0xef, 0xfc, 0x76, 0xdf, 0x3f, 0xbf, 0xff, 0xf7, 0xd5, 0xff, 0x6a, 0xfc, 0x2f, 0xfc, 0xf0, 0xc3, 0x0f, 0x3f, 0xfc, 0xf0, 0xc3, 0x1f, 0x7e, 0xf8, 0xf1, 0x85, 0x5f, 0x7f, 0xdc, 0xf5, 0xff, 0x99, 0xff, 0xf7, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xef, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa6, 0x7c, 0xae, 0xb9, 0xfc, 0x9e, 0x0b, 0x2f, 0xbf, 0xe4, 0xf2, 0x97, 0x5f, 0x78, 0xfd, 0xe5, 0x97, 0x77, 0xff, 0xff, 0x8f, 0xd9, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0x5f, 0xfe, 0xdb, 0x65, 0x7f, 0xf7, 0xed, 0x72, 0xdf, 0x7d, 0xf7, 0xdd, 0xff, 0xff, 0x6d, 0xfe, 0xb7, 0xdb, 0x6e, 0xfb, 0xed, 0xb6, 0xdb, 0x76, 0xdb, 0xdd, 0x6f, 0xbb, 0xed, 0xf6, 0xdb, 0xee, 0xf9, 0xff, 0xff, 0x1b, 0xf5, 0xb5, 0xd7, 0x5e, 0x7b, 0xed, 0xb5, 0xd7, 0x5e, 0x73, 0xdd, 0x6b, 0xaf, 0xb9, 0xf6, 0xda, 0x6b, 0xff, 0xff, 0xd7, 0xe6, 0xfe, 0x6f, 0xb5, 0xd9, 0x56, 0x9b, 0x6d, 0xb6, 0xd8, 0x66, 0x37, 0x5b, 0x6c, 0xab, 0xcd, 0x16, 0x73, 0xfe, 0xff, 0xbb, 0x99, 0xff, 0xde, 0x79, 0xef, 0x9d, 0xf7, 0xde, 0x7b, 0xef, 0x7d, 0xef, 0xbd, 0xf7, 0xce, 0x7b, 0xef, 0xbd, 0xff, 0xff, 0x6c, 0xec, 0xbf, 0xb7, 0xfe, 0x7b, 0xe9, 0xbf, 0xff, 0x7e, 0xfb, 0xdf, 0x7f, 0x9f, 0xbd, 0xf5, 0xdf, 0xe7, 0xad, 0xff, 0xbf, 0x19, 0xfb, 0xbf, 0xfd, 0xf6, 0x1b, 0x6e, 0xbf, 0xfd, 0x16, 0xdb, 0xdf, 0x7e, 0xab, 0xed, 0xb7, 0xdf, 0x6a, 0xcb, 0xff, 0xef, 0xe6, 0xfd, 0x7b, 0xef, 0xbd, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0xe7, 0x3d, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xff, 0xf4, 0xff, 0xbd, 0x79, 0xff, 0xff, 0xfb, 0xef, 0xb3, 0xcf, 0x3e, 0xfb, 0xec, 0x73, 0x9f, 0x7d, 0xf6, 0xd9, 0x67, 0x9f, 0x7d, 0xfe, 0x7f, 0x6f, 0xec, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf7, 0xbf, 0x99, 0xf9, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0xfb, 0xff, 0xcf, 0xe6, 0xfe, 0xfb, 0xef, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xff, 0xff, 0xbb, 0xb9, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xdf, 0xff, 0x6a, 0xde, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xe7, 0xde, 0x98, 0xff, 0xff, 0xfb, 0xff, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0xff, 0xbd, 0xff, 0xe6, 0xff, 0xff, 0xf3, 0x83, 0x0e, 0x3a, 0xe8, 0xa0, 0x83, 0x4e, 0x75, 0xd2, 0x49, 0x07, 0x1d, 0x74, 0xd0, 0x61, 0x9f, 0xbf, 0xf9, 0xff, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0x3f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xdf, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xba, 0xe9, 0xa6, 0x9b, 0x6e, 0xba, 0xe9, 0x56, 0x37, 0xdd, 0x74, 0xd3, 0x4d, 0x37, 0xdd, 0xf6, 0xff, 0x9b, 0xff, 0xaf, 0xbf, 0x9e, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfc, 0xe3, 0x8f, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0xfd, 0xff, 0xe6, 0xff, 0x6b, 0xaf, 0xc9, 0x27, 0x9f, 0x7c, 0xf2, 0xc9, 0xe7, 0x3e, 0xff, 0xfc, 0x93, 0x4f, 0x3e, 0xf9, 0x64, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x7f, 0xff, 0x6f, 0xfe, 0xff, 0xe9, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xee, 0xf5, 0xd7, 0x5e, 0x7f, 0xfd, 0xf5, 0xd6, 0x5f, 0xff, 0x9a, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0x9e, 0xff, 0xdf, 0x39, 0xe7, 0x9f, 0x7f, 0xfe, 0xff, 0xff, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0x9f, 0xf9, 0xff, 0xff, 0xfe, 0xff, 0xeb, 0xbf, 0xff, 0x7f, 0xff, 0x66, 0x7d, 0x7f, 0x53, 0x5f, 0x57, 0xf5, 0xf5, 0x7d, 0xf7, 0x6e, 0xfe, 0xff, 0xde, 0xfc, 0xf1, 0xcf, 0x17, 0x7f, 0x7c, 0xf3, 0x9b, 0x7f, 0xfe, 0xf9, 0xe5, 0x9f, 0x7f, 0xde, 0xff, 0xff, 0x9b, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7d, 0xf7, 0xdf, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x76, 0xff, 0x7d, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xf9, 0xff, 0x3f, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xfe, 0xff, 0xe7, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xef, 0xcf, 0xbd, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9b, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfd, 0xff, 0xff, 0xcf, 0x3f, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xe6, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xef, 0xff, 0xff, 0x7f, 0xff, 0xaf, 0x6f, 0xff, 0x7f, 0xff, 0x6f, 0xfc, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xf5, 0xd7, 0x4f, 0x7f, 0xf8, 0xeb, 0xef, 0xbf, 0x7f, 0xfe, 0xfb, 0xff, 0xff, 0x99, 0xff, 0xff, 0xfa, 0x6f, 0xff, 0xff, 0xff, 0xdf, 0xef, 0x7d, 0xdf, 0xfd, 0xbf, 0xdf, 0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0x66, 0xff, 0xcf, 0x3d, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xd5, 0xef, 0x9e, 0xfb, 0xee, 0xb1, 0xee, 0x9e, 0x7f, 0xfe, 0x9f, 0xf9, 0xff, 0xf7, 0xde, 0x7f, 0xfb, 0xfd, 0xf7, 0x9e, 0xdf, 0xfb, 0xdf, 0xef, 0xdb, 0xff, 0xfe, 0xff, 0xee, 0xbf, 0xef, 0x6f, 0xfe, 0xbf, 0xfe, 0xf9, 0xeb, 0xaf, 0xb7, 0xfe, 0xfa, 0xeb, 0x5f, 0x7f, 0xfd, 0xf5, 0xc7, 0xdb, 0x7f, 0xbd, 0x71, 0xff, 0x9b, 0xff, 0xef, 0xdf, 0x77, 0xff, 0x7d, 0xf7, 0xdf, 0x77, 0xff, 0xf9, 0xef, 0xfd, 0xfb, 0xff, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xa6, 0xff, 0xef, 0xbf, 0x7f, 0xfa, 0xf9, 0xe7, 0x9f, 0x7f, 0xde, 0xf3, 0xcf, 0x5f, 0x69, 0xfd, 0xf3, 0xd6, 0x3f, 0xff, 0xbf, 0xf9, 0xff, 0xfd, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0xaf, 0xfb, 0x7f, 0xcf, 0x7f, 0xf7, 0xff, 0xef, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0xdf, 0xff, 0xfa, 0xff, 0x6f, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0x9b, 0xff, 0x9f, 0x7e, 0xfa, 0xe9, 0xa7, 0x9f, 0x7e, 0xfa, 0xfd, 0xef, 0x7f, 0xfd, 0xfe, 0xd3, 0xef, 0x3f, 0xfd, 0xf4, 0xff, 0xe6, 0xff, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xf7, 0xf7, 0xfd, 0xf7, 0xff, 0xff, 0xbe, 0xff, 0xbf, 0xf9, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0x7f, 0xbe, 0xf3, 0xdf, 0xbf, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0x7f, 0xff, 0xfe, 0xf3, 0xef, 0x3f, 0xff, 0xfe, 0xf3, 0xdf, 0xfb, 0xfe, 0xf9, 0xf7, 0xdf, 0x7f, 0x7e, 0xff, 0xfb, 0x9b, 0xff, 0xff, 0x3f, 0xdf, 0x7d, 0xf7, 0xdd, 0x77, 0xdf, 0x7d, 0xef, 0xbb, 0xaf, 0xbe, 0xfa, 0xfa, 0x9b, 0x6f, 0xfe, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0x77, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xb9, 0xff, 0xb7, 0xdf, 0x4e, 0x3b, 0x6d, 0xb4, 0xd3, 0x46, 0x7b, 0xda, 0x69, 0xa7, 0x95, 0x76, 0xdb, 0x6f, 0xb7, 0xf9, 0x6f, 0xfe, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0x77, 0xdf, 0x7f, 0xe7, 0xdb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xbf, 0xe7, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xbe, 0xfb, 0xef, 0xe6, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xdf, 0x7f, 0xbf, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfe, 0xf7, 0x5f, 0x7f, 0xff, 0xf5, 0xf7, 0x5f, 0x7f, 0xfd, 0x6f, 0xfe, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdd, 0x7f, 0xff, 0xdd, 0xf7, 0xdf, 0xfe, 0x9b, 0xff, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xf6, 0xf9, 0xe7, 0xf7, 0xe6, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xaf, 0xbf, 0xde, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xbf, 0xf9, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xaf, 0xbf, 0xee, 0xfa, 0xeb, 0x2f, 0xbf, 0xfe, 0xf8, 0x6f, 0xee, 0xff, 0xf6, 0xfb, 0xef, 0xbf, 0xff, 0xf2, 0xfb, 0x6f, 0x7f, 0xfb, 0xfd, 0xb5, 0xdf, 0x7f, 0xb9, 0xfd, 0xd7, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xe6, 0xfe, 0x5b, 0xef, 0xbf, 0xef, 0xfe, 0x7b, 0xef, 0xbf, 0xe5, 0x2d, 0xf7, 0xdf, 0x72, 0xff, 0x2d, 0xf7, 0xdf, 0xfe, 0xbf, 0xf9, 0xbf, 0xf5, 0xf5, 0xd7, 0x5b, 0x7f, 0xfd, 0xf5, 0x37, 0xd3, 0x99, 0xfa, 0xbb, 0xa9, 0xbf, 0xd9, 0xfa, 0xab, 0xef, 0x6f, 0xfe, 0xff }; /* rom names */ /* rom locations */ static const unsigned long eppchk_roms[0] = { }; baycomepp-0.10.orig/main/eppsamp_firmware.h0100644000175100017510000022546706743641707017077 0ustar abaaba/*****************************************************************************/ /* * eppsamp_firmware.h -- HDLC packet radio modem for EPP using FPGA utility. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ /* automatically generated, do not edit */ #define EPPSAMP_FIRMWAREDATE "19990716" /* firmware */ static const unsigned char eppsamp_firmware[] = { 0xff, 0x04, 0xe8, 0x8c, 0xf9, 0xfe, 0xff, 0xff, 0xfd, 0xed, 0xd7, 0xdf, 0xde, 0xfd, 0xed, 0x7d, 0xef, 0xfe, 0xf6, 0xee, 0x6f, 0xef, 0xfe, 0xfe, 0xff, 0x9b, 0xff, 0xfd, 0xaf, 0xff, 0xfd, 0xfb, 0xff, 0xaf, 0xff, 0x7f, 0xfe, 0xd7, 0xff, 0x7f, 0xfd, 0xff, 0xd7, 0xff, 0x7f, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfc, 0xed, 0xcf, 0xff, 0xfe, 0xfc, 0xed, 0xcf, 0x5f, 0xfe, 0xf6, 0xe7, 0x6f, 0x7f, 0xfe, 0xf6, 0xe7, 0xef, 0x6f, 0xfe, 0xbf, 0x77, 0x5f, 0x7b, 0xfd, 0xb5, 0x77, 0x5f, 0x7b, 0xd7, 0xbb, 0xaf, 0xbd, 0xfb, 0xda, 0xbb, 0xaf, 0xbd, 0xfb, 0x9b, 0xff, 0x3f, 0xed, 0xf5, 0xd3, 0x5f, 0x3f, 0xfd, 0xf5, 0xd3, 0x9f, 0xfe, 0xfa, 0xe9, 0xaf, 0x9f, 0xfe, 0xfa, 0x69, 0xff, 0xc6, 0xff, 0x3b, 0xfb, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0x9e, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xde, 0xb9, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xff, 0xfe, 0xfb, 0xaf, 0xbf, 0xff, 0xfa, 0xd7, 0xdf, 0x7f, 0xfd, 0xfd, 0xd7, 0xdf, 0x7f, 0xfd, 0x6f, 0xfe, 0xff, 0xfa, 0xaf, 0xae, 0xfa, 0xfa, 0xfa, 0xaf, 0xaf, 0x7f, 0xfd, 0xd7, 0xd7, 0x7f, 0x7d, 0xfd, 0xd7, 0xd7, 0x7f, 0x9b, 0xff, 0xdf, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf6, 0xff, 0xc6, 0xff, 0xdf, 0x7f, 0xef, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0x9f, 0x7f, 0xff, 0xed, 0xf7, 0x9f, 0x7f, 0xff, 0xf9, 0xcf, 0xbf, 0xff, 0xfc, 0xfb, 0xcf, 0xbf, 0xff, 0xfc, 0x6f, 0xf4, 0xff, 0xed, 0xb7, 0xdf, 0x76, 0xfb, 0xed, 0xb7, 0xdf, 0xfe, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xf9, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xe7, 0xbf, 0xff, 0xfc, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xe6, 0xbf, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xf7, 0xdd, 0xef, 0xbf, 0xff, 0xee, 0xbb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xfc, 0xf3, 0xcf, 0x35, 0xff, 0xec, 0xf3, 0xcf, 0x7f, 0xfe, 0xf9, 0xa7, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0xff, 0x6f, 0xfe, 0xff, 0xfd, 0x77, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xfd, 0x9b, 0xdd, 0xcf, 0x3f, 0xbf, 0xfc, 0xf2, 0xcf, 0x3d, 0xf7, 0xcc, 0xe7, 0x9f, 0x77, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xdd, 0x66, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xb7, 0xf9, 0xef, 0xfe, 0xfb, 0xef, 0xb7, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xf7, 0x6f, 0xfe, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0x9d, 0xfd, 0xf6, 0xdb, 0xdf, 0x7a, 0xfb, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xad, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xfd, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xe6, 0xff, 0x7f, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x6f, 0xf6, 0x3f, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x9b, 0xff, 0x5f, 0xff, 0xfd, 0xf7, 0x5f, 0x7d, 0xf5, 0xdd, 0xf7, 0xbd, 0xff, 0xee, 0xfb, 0xef, 0xbf, 0xff, 0xfa, 0xfb, 0xff, 0xe6, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xe9, 0xff, 0x7f, 0xfe, 0xff, 0xed, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf7, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xbf, 0x7f, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xdf, 0xfe, 0xfb, 0xef, 0xf7, 0xff, 0xfb, 0xbf, 0xff, 0xef, 0xff, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0x66, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xaf, 0xde, 0xff, 0xfb, 0xfd, 0xef, 0x7b, 0xfe, 0xff, 0x57, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xf6, 0xf7, 0xff, 0xef, 0xd7, 0xff, 0xdf, 0xff, 0xdf, 0xef, 0xff, 0xfb, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xfc, 0xff, 0xff, 0xf6, 0xfb, 0xfe, 0xed, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xfb, 0xf7, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xcf, 0x2f, 0xf7, 0xfa, 0x5d, 0xff, 0xff, 0xff, 0xf4, 0xb7, 0x5f, 0xf7, 0x7b, 0xdf, 0xbf, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xef, 0xed, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xf7, 0xff, 0xff, 0xca, 0xff, 0xff, 0xff, 0xff, 0x6b, 0xfe, 0xfd, 0x7f, 0xff, 0xfd, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xbf, 0xff, 0xbf, 0xfa, 0xee, 0xf2, 0xef, 0xaf, 0xff, 0xfc, 0xf7, 0xfd, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0x7f, 0xff, 0xe6, 0xbf, 0xff, 0xbf, 0xff, 0xef, 0xbf, 0xf7, 0x7d, 0xf7, 0xdb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x6f, 0x7e, 0xff, 0xff, 0x7b, 0xf3, 0xff, 0xbf, 0xff, 0xfd, 0xf3, 0x5f, 0xff, 0xfd, 0xf9, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xff, 0x7b, 0x89, 0xff, 0xe7, 0x5a, 0xe3, 0xdf, 0xff, 0xff, 0xfd, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xe6, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xfa, 0xff, 0xbc, 0xa7, 0xff, 0xf5, 0xdf, 0x5f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x79, 0xff, 0x7f, 0xf9, 0xb5, 0x97, 0xf2, 0xff, 0xaf, 0xbf, 0xfe, 0xfd, 0xbf, 0xdc, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x6f, 0xdc, 0xff, 0xcf, 0x3f, 0xef, 0xaf, 0xff, 0xff, 0xfb, 0xfb, 0x5f, 0xff, 0xfd, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x99, 0xfb, 0xf5, 0xbf, 0x7f, 0xdb, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xd5, 0xeb, 0x7f, 0xfd, 0xb4, 0xff, 0xff, 0xff, 0xff, 0xef, 0x46, 0xfe, 0xff, 0xbf, 0xca, 0x58, 0x6f, 0xfd, 0x3f, 0xbf, 0xbb, 0xdd, 0x7b, 0x5f, 0x95, 0xed, 0xfe, 0xff, 0xff, 0xfd, 0x93, 0x99, 0xff, 0x7f, 0xf9, 0x3f, 0xff, 0xfe, 0xff, 0xcf, 0xbf, 0x7f, 0x7d, 0xff, 0xd7, 0x5f, 0xdb, 0xff, 0xff, 0xff, 0xff, 0x66, 0xec, 0xff, 0xcf, 0xfb, 0x9f, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xdf, 0xff, 0xff, 0xf5, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x19, 0xf7, 0xf6, 0xff, 0xef, 0xb7, 0xff, 0xf6, 0xdb, 0xfd, 0xbf, 0xf9, 0xff, 0xb7, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xe6, 0x7d, 0xff, 0xff, 0xdf, 0x79, 0x7f, 0xff, 0x79, 0xf6, 0xff, 0xff, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xb9, 0xbe, 0xfb, 0xed, 0x35, 0xfe, 0x6e, 0xfb, 0xcd, 0xbe, 0xff, 0xfd, 0xf7, 0xd9, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xae, 0x6e, 0xee, 0xff, 0x3f, 0xff, 0xfd, 0xf7, 0xcf, 0xef, 0xef, 0xff, 0xff, 0xff, 0x77, 0xde, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x3d, 0x9b, 0xf9, 0xff, 0xf7, 0xef, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xe6, 0xf6, 0xff, 0xaf, 0xff, 0xff, 0xfb, 0xeb, 0x2d, 0xbd, 0xff, 0xff, 0xde, 0x5b, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xbb, 0x61, 0xff, 0xff, 0xcb, 0xbd, 0x9e, 0x7c, 0xf2, 0xa9, 0x66, 0xff, 0xbb, 0xd7, 0x57, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0xfa, 0xff, 0x7f, 0xfa, 0xef, 0xfe, 0xbf, 0xfe, 0xfa, 0xeb, 0xfd, 0x7f, 0xbd, 0xf7, 0xd6, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xfe, 0xff, 0x8f, 0x3e, 0xfb, 0xfc, 0xa3, 0x9b, 0x5e, 0x3a, 0xfd, 0x47, 0x9f, 0xdf, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xaf, 0xbf, 0xdf, 0xed, 0xff, 0x5f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xe1, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xfa, 0xeb, 0xe7, 0x5f, 0xfb, 0xff, 0xd7, 0xcf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfb, 0xbf, 0xff, 0xbf, 0xae, 0x6a, 0xe8, 0xf2, 0x7f, 0xf5, 0x57, 0x59, 0xef, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x6f, 0xbb, 0xcf, 0xba, 0xbf, 0x5f, 0xff, 0x9d, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0x6d, 0x3f, 0xf9, 0xf2, 0xff, 0x2f, 0xff, 0xf7, 0xe4, 0xb4, 0x9f, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xaf, 0xb7, 0xee, 0x7a, 0x43, 0xaf, 0xb5, 0xfc, 0xe2, 0xd7, 0x5f, 0x75, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0x6f, 0x3e, 0xfe, 0xff, 0xbe, 0x7f, 0xff, 0xff, 0xeb, 0xf3, 0xff, 0xbf, 0x7f, 0xfe, 0xff, 0x6f, 0xf5, 0xff, 0xff, 0xff, 0xe7, 0x9b, 0xff, 0xf7, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xa9, 0x66, 0xff, 0xff, 0xfb, 0xf7, 0xdf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xe6, 0xfb, 0xff, 0xff, 0xdd, 0x7f, 0xdf, 0xbd, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x71, 0xfe, 0xff, 0xeb, 0xaf, 0xbd, 0xdd, 0xfa, 0xef, 0xff, 0x71, 0xf9, 0xf7, 0xc7, 0x9b, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x67, 0xbc, 0xfb, 0xff, 0xfb, 0xea, 0x7f, 0xbf, 0xfd, 0xfd, 0xff, 0xbf, 0xbe, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x99, 0xfb, 0xff, 0xbb, 0xff, 0xd9, 0x5f, 0xff, 0xef, 0xfe, 0xcb, 0xf9, 0xdf, 0xff, 0xbf, 0xf3, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xc6, 0xfb, 0xbf, 0xef, 0xbd, 0xff, 0xff, 0xff, 0x4e, 0xbf, 0xff, 0xbf, 0xff, 0xdf, 0xff, 0xf3, 0xf9, 0xbe, 0xff, 0xff, 0x9f, 0xe1, 0xef, 0xff, 0xee, 0xbe, 0xdf, 0xeb, 0xff, 0xfb, 0x3d, 0xff, 0xdf, 0xff, 0xf7, 0xf6, 0xeb, 0xfd, 0xff, 0xff, 0xff, 0x6b, 0xfc, 0xff, 0xff, 0xfd, 0xfd, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0x12, 0xbd, 0x7f, 0xfe, 0xfb, 0x9f, 0xf7, 0xff, 0xff, 0xff, 0x99, 0xfd, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0x5f, 0xff, 0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xef, 0xde, 0xda, 0xef, 0xaf, 0x9b, 0xee, 0xff, 0xd7, 0xef, 0x7f, 0xfd, 0xf1, 0xff, 0xff, 0xdf, 0xbf, 0xf9, 0xf7, 0xda, 0xff, 0xdf, 0xff, 0xfa, 0xff, 0xfe, 0xaf, 0xff, 0xff, 0xf5, 0xfd, 0x7f, 0xf6, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xfd, 0xff, 0xff, 0xbf, 0xbf, 0xbf, 0xdf, 0xef, 0xfd, 0xff, 0xbf, 0xdf, 0x9f, 0x6f, 0x7f, 0xef, 0xff, 0xff, 0xff, 0x1b, 0xfe, 0xff, 0xff, 0xff, 0xda, 0x9f, 0x7f, 0xff, 0xcf, 0x2f, 0x3f, 0xf2, 0xff, 0x3d, 0xf5, 0xdf, 0xff, 0xff, 0xff, 0x3f, 0x66, 0xff, 0xff, 0xff, 0xbf, 0xce, 0xff, 0x6f, 0xff, 0xfd, 0xcf, 0xbf, 0xff, 0xdf, 0x2f, 0xfd, 0xb7, 0xff, 0xff, 0xff, 0xb7, 0xf9, 0xff, 0x7f, 0xfe, 0xaf, 0xff, 0xf9, 0xff, 0xdf, 0x7c, 0xfe, 0xf3, 0xaf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xd6, 0xff, 0x9f, 0xff, 0xfb, 0x5f, 0xe7, 0xcf, 0xed, 0xf7, 0xbf, 0xff, 0xfa, 0xfd, 0xde, 0xfb, 0xff, 0xff, 0xff, 0x5f, 0x9b, 0xfb, 0xff, 0xbf, 0x6d, 0xba, 0xfd, 0xff, 0x9b, 0xf5, 0xc7, 0x7f, 0xff, 0x7f, 0x5d, 0xa4, 0xf0, 0xff, 0xff, 0xff, 0xef, 0x66, 0xfe, 0xff, 0x7f, 0x96, 0x6e, 0xf7, 0xbb, 0xff, 0xd6, 0xff, 0xff, 0xff, 0x5f, 0x2d, 0xf9, 0xdd, 0xff, 0xff, 0xff, 0xb3, 0xb1, 0xff, 0xff, 0xdf, 0xaf, 0xfd, 0xcd, 0x7a, 0xff, 0xe5, 0xd5, 0xbb, 0xef, 0xd7, 0xff, 0x7e, 0xfd, 0xff, 0xff, 0xff, 0x66, 0xe2, 0xff, 0xff, 0xff, 0xeb, 0x7f, 0xb3, 0x8e, 0xef, 0x3b, 0xff, 0xdf, 0xff, 0xf5, 0x7f, 0x5f, 0xff, 0xff, 0xff, 0xbf, 0x9b, 0xf7, 0xff, 0xf3, 0x6f, 0x3f, 0xdf, 0xff, 0xf3, 0xcf, 0x3f, 0xbb, 0xf9, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xe6, 0xfd, 0xff, 0x79, 0xf7, 0x9b, 0xe7, 0xff, 0x7f, 0xfe, 0x99, 0xef, 0xbe, 0xfb, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xb1, 0x7f, 0xfb, 0x4d, 0xb1, 0xd7, 0x5c, 0xfb, 0x8d, 0x3f, 0xd7, 0x79, 0xa7, 0xdd, 0x7f, 0x9c, 0xfd, 0xf7, 0xdf, 0xff, 0x62, 0xe6, 0xef, 0x3f, 0xff, 0xfd, 0xf7, 0xdf, 0x6f, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0x3f, 0x9b, 0xfb, 0xff, 0xf7, 0xbf, 0xff, 0xbe, 0xfe, 0xf7, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xa6, 0xfe, 0xeb, 0xff, 0xb6, 0xde, 0x77, 0xff, 0x77, 0xfe, 0xfd, 0xcf, 0xf7, 0xff, 0xaf, 0xf1, 0xf5, 0xff, 0xff, 0xff, 0xab, 0x79, 0xff, 0xf2, 0xff, 0xaf, 0xda, 0xf9, 0xf7, 0x9f, 0x7f, 0xda, 0xfb, 0xed, 0xbf, 0x7b, 0x7c, 0xf9, 0xff, 0xff, 0x7f, 0x6f, 0xfe, 0x9f, 0xfe, 0x72, 0xef, 0xff, 0xbf, 0xef, 0x2e, 0xff, 0xff, 0x7e, 0xfd, 0xff, 0xd7, 0x5d, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xaf, 0x8f, 0x3e, 0xfe, 0xfc, 0xf3, 0xdb, 0x7f, 0x3f, 0xfd, 0x47, 0x9f, 0x9f, 0xe4, 0xd1, 0xe7, 0x9f, 0x7f, 0xfe, 0xe6, 0xff, 0xff, 0xbf, 0xbf, 0xfe, 0xe7, 0xdf, 0xef, 0xbf, 0xff, 0xff, 0xd7, 0x7f, 0xe7, 0xfd, 0xe5, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xfb, 0xaf, 0xbf, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xf5, 0xf7, 0x6f, 0x3f, 0xfb, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfa, 0xaf, 0xff, 0xfe, 0xad, 0xef, 0xbc, 0x70, 0xff, 0xfd, 0xf7, 0x51, 0x4f, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xef, 0xbf, 0xfe, 0xfa, 0xfb, 0x7f, 0xfb, 0xcf, 0x3f, 0xf7, 0x7f, 0x7f, 0xdf, 0xf5, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0x6f, 0xbf, 0xfc, 0xff, 0xdf, 0x4d, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xfb, 0xed, 0xff, 0xf7, 0xff, 0xbf, 0xe9, 0xff, 0xaf, 0xbd, 0xf6, 0xda, 0xeb, 0xa7, 0x9a, 0xd6, 0xfa, 0xd7, 0x5f, 0x7f, 0xc9, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0x6b, 0xfe, 0xff, 0xf7, 0xbc, 0x37, 0x3f, 0x9e, 0xac, 0xc3, 0xdf, 0xff, 0xff, 0xd9, 0xff, 0x77, 0x9d, 0xff, 0xff, 0xff, 0xff, 0x1b, 0xff, 0xff, 0xef, 0xaf, 0xff, 0xfa, 0xed, 0xbf, 0xff, 0xad, 0xfd, 0x5d, 0xd7, 0xff, 0x3e, 0x7f, 0xfb, 0xff, 0xff, 0x7e, 0xe6, 0x7f, 0xdf, 0xff, 0xfd, 0xff, 0x1d, 0xef, 0x5f, 0xfd, 0x5f, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbb, 0xf9, 0xff, 0xfe, 0xff, 0xa7, 0x3b, 0xfe, 0x7b, 0xe3, 0x2f, 0x7f, 0xd8, 0xed, 0xf7, 0xff, 0xff, 0xf9, 0xef, 0xff, 0xef, 0x6f, 0xfe, 0xff, 0xde, 0xff, 0x9b, 0xdf, 0xb7, 0xf7, 0x1d, 0xe7, 0xbf, 0xef, 0x5b, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x9b, 0xfe, 0xff, 0x6f, 0xfe, 0xb9, 0xff, 0xff, 0x7f, 0xfe, 0xfb, 0xcf, 0x7f, 0xef, 0xe8, 0x5f, 0xc7, 0xfd, 0xff, 0x7f, 0xff, 0xe6, 0xff, 0xfb, 0xaf, 0xbd, 0xff, 0xf7, 0x7f, 0xff, 0x3e, 0xb7, 0xcc, 0xd7, 0xff, 0x7f, 0xfb, 0xf5, 0xff, 0xfd, 0xff, 0xbf, 0xf9, 0xfe, 0xfb, 0xff, 0xbf, 0xdd, 0xfb, 0xef, 0xff, 0xbf, 0xbf, 0xfd, 0xef, 0xff, 0x7f, 0xe9, 0x7f, 0xff, 0xff, 0xff, 0x6e, 0xbe, 0xff, 0xff, 0xe7, 0xfe, 0xfe, 0x5f, 0x7f, 0xff, 0x91, 0xf6, 0x3d, 0x54, 0xe4, 0xfb, 0xff, 0xfd, 0xfe, 0xff, 0xff, 0x9b, 0xef, 0xff, 0xf7, 0xbf, 0xff, 0x7f, 0xdf, 0xfe, 0xff, 0xec, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0xff, 0xff, 0xff, 0xe6, 0xdf, 0xff, 0xff, 0xfd, 0xfe, 0xfa, 0xef, 0xae, 0x99, 0x5e, 0x3f, 0xda, 0x5d, 0xf7, 0xfd, 0xc7, 0xff, 0xff, 0xff, 0xbb, 0xc1, 0x7f, 0xff, 0xff, 0x1f, 0xdf, 0xff, 0xdb, 0x6f, 0xad, 0x7f, 0xfd, 0xb5, 0xdf, 0x1f, 0xfe, 0xed, 0xff, 0xff, 0xff, 0x66, 0xba, 0xff, 0xf7, 0xff, 0xaf, 0xff, 0xbf, 0xde, 0xfd, 0xbf, 0xf5, 0x7f, 0xff, 0xfb, 0xff, 0x9f, 0xfd, 0xff, 0xff, 0xfb, 0x9b, 0xfe, 0xaf, 0xbf, 0x98, 0xff, 0xff, 0xb9, 0xbe, 0xff, 0x6b, 0xd5, 0xdf, 0x7d, 0xe3, 0xd7, 0xff, 0xfe, 0xfc, 0xff, 0xbf, 0xa6, 0xff, 0x6b, 0xbf, 0xfc, 0xff, 0xff, 0xdb, 0xef, 0xbf, 0xcd, 0xf5, 0xb2, 0xdf, 0x62, 0xff, 0xfd, 0xbf, 0xff, 0xff, 0xb7, 0x79, 0xff, 0x7a, 0xea, 0xf5, 0xf3, 0xff, 0x73, 0xf9, 0xb5, 0xff, 0xf9, 0xfd, 0xf7, 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xf3, 0x6f, 0xd4, 0xa7, 0xde, 0x3b, 0xff, 0xef, 0xbf, 0xfd, 0x7e, 0xfb, 0x19, 0x7e, 0xff, 0x7d, 0xfe, 0xf3, 0xff, 0xff, 0xff, 0x5e, 0x99, 0xfb, 0xb7, 0xaf, 0x5e, 0xbe, 0x7d, 0x3f, 0xd9, 0xbf, 0xbf, 0xd5, 0xde, 0xff, 0xff, 0xf7, 0xfa, 0xea, 0xff, 0x7f, 0xef, 0x86, 0x7e, 0xac, 0xbf, 0xda, 0x7b, 0xdf, 0xdb, 0xf5, 0xff, 0x7f, 0xb5, 0x57, 0xff, 0x7d, 0xbf, 0x3e, 0xfb, 0xff, 0xff, 0x93, 0xb9, 0xff, 0xfa, 0x6f, 0xff, 0xef, 0xff, 0xf3, 0xeb, 0xaf, 0xef, 0xab, 0xbd, 0xff, 0x5f, 0xff, 0xef, 0xff, 0xff, 0xff, 0x66, 0xec, 0xbf, 0xfe, 0xfb, 0xff, 0xef, 0xbf, 0xf1, 0x5a, 0x6b, 0xff, 0x47, 0xed, 0xff, 0xd7, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x18, 0xf7, 0xfc, 0xf3, 0xff, 0x3f, 0xff, 0xf6, 0xfd, 0xbf, 0xbf, 0xf9, 0xed, 0xb7, 0xff, 0x7f, 0xfb, 0xff, 0xff, 0xdf, 0x77, 0xe6, 0xfd, 0xff, 0xf9, 0xf7, 0x9f, 0xef, 0x1f, 0xf9, 0xfe, 0xfb, 0xbf, 0xfe, 0xfb, 0xff, 0x37, 0xff, 0xfe, 0xff, 0x8f, 0xb5, 0xb9, 0x5e, 0xfb, 0xef, 0xbb, 0xfd, 0xfe, 0xeb, 0xef, 0xb5, 0xd7, 0x6d, 0xf7, 0xd9, 0x6f, 0xaf, 0x7d, 0xf7, 0xdf, 0xbf, 0x6e, 0xee, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x73, 0xff, 0xfd, 0xf7, 0xff, 0x7f, 0xfe, 0xf9, 0xef, 0xff, 0xff, 0xff, 0x3b, 0x9b, 0xf9, 0xfd, 0xef, 0xbf, 0xbf, 0xff, 0xfd, 0xf7, 0xbf, 0xff, 0xfe, 0xff, 0xef, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xef, 0xe6, 0xf6, 0xfb, 0xf7, 0xbf, 0xde, 0x7a, 0x7f, 0xbf, 0xfd, 0xf6, 0xf5, 0xff, 0x7f, 0x7f, 0xad, 0xff, 0xff, 0x4f, 0x7f, 0xbb, 0x61, 0xff, 0xf6, 0xdf, 0x6f, 0x9f, 0xc9, 0xe7, 0xab, 0xae, 0x7a, 0xf5, 0xdf, 0x57, 0xdf, 0xf5, 0xf7, 0xff, 0x97, 0x7f, 0x6f, 0xfe, 0xdf, 0xff, 0xfe, 0xeb, 0xaf, 0xff, 0xff, 0xfb, 0xff, 0x5d, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0x9b, 0xff, 0xff, 0xcf, 0x3e, 0xfa, 0xe8, 0xf3, 0x8f, 0x8e, 0x3b, 0xde, 0x67, 0x1f, 0x7d, 0xff, 0xfc, 0xe7, 0x9f, 0x7f, 0xfe, 0xe6, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xfa, 0xff, 0xfb, 0xef, 0xbe, 0xc5, 0xff, 0xff, 0x7f, 0xfd, 0xfd, 0xff, 0x5f, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xff, 0xef, 0xbf, 0xfe, 0xff, 0xfb, 0xa6, 0x57, 0xfd, 0xff, 0xf7, 0xcf, 0xaf, 0xff, 0xff, 0xd7, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0xff, 0xfb, 0xaf, 0xfe, 0xbb, 0x6f, 0xbe, 0x5a, 0xfd, 0xf5, 0xdf, 0x5f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x1b, 0xfe, 0xff, 0xff, 0xff, 0xf6, 0xeb, 0xbf, 0xbb, 0xef, 0x7b, 0x9f, 0x7f, 0x7e, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xdf, 0xff, 0x3f, 0xf9, 0xff, 0xfe, 0x2f, 0xfe, 0xbb, 0xfc, 0xa7, 0xdf, 0xfe, 0xf7, 0xe5, 0x7d, 0xff, 0xff, 0xbf, 0xf9, 0xbf, 0x8f, 0xbd, 0xda, 0xea, 0xab, 0x07, 0xbf, 0xfc, 0x32, 0x17, 0x4f, 0x6d, 0xfd, 0xf1, 0xd6, 0x5f, 0x7f, 0xed, 0x6f, 0x3e, 0xbf, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xfb, 0xdd, 0xff, 0xfe, 0xde, 0x9e, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xdf, 0xfa, 0xff, 0xfd, 0xf7, 0xee, 0x7f, 0xff, 0xf5, 0xec, 0xf7, 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0x7f, 0xe6, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfb, 0xee, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf1, 0xff, 0xbb, 0xcb, 0xff, 0xbf, 0xde, 0x7e, 0xe3, 0xff, 0xfe, 0xbf, 0xef, 0xdf, 0xff, 0x7f, 0xdf, 0xdf, 0xff, 0xff, 0x67, 0xf8, 0xbd, 0xef, 0xba, 0xfc, 0xaf, 0xff, 0xfa, 0xfd, 0xff, 0xfb, 0xff, 0x7f, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x99, 0xf7, 0xf7, 0x7f, 0xd6, 0x7f, 0xef, 0xfb, 0xfb, 0xef, 0xff, 0xcb, 0x7e, 0x7b, 0xdf, 0xe7, 0xbf, 0xff, 0xfb, 0xff, 0x7f, 0xc6, 0xdf, 0xeb, 0xef, 0xf7, 0xff, 0xff, 0xdf, 0x7e, 0xd7, 0xfd, 0xf5, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xbf, 0xb1, 0xff, 0x3f, 0x6f, 0xff, 0xff, 0x79, 0xdf, 0xff, 0xff, 0xb1, 0xef, 0xef, 0xff, 0xf3, 0xea, 0xff, 0xff, 0xff, 0xef, 0x6f, 0xfc, 0xff, 0xfd, 0xbf, 0xdf, 0xde, 0x7f, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xda, 0xf1, 0xff, 0x1f, 0x77, 0xfc, 0xff, 0xff, 0x9b, 0xdb, 0xff, 0xff, 0xff, 0x6f, 0xf7, 0xbf, 0xff, 0xff, 0xfc, 0xfe, 0x7f, 0xff, 0xfd, 0x7f, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xed, 0xaf, 0xff, 0xff, 0xb3, 0xff, 0xf7, 0xcf, 0xff, 0xff, 0x93, 0xed, 0xff, 0xf9, 0xff, 0xd3, 0xff, 0xfe, 0xab, 0xf9, 0xf7, 0xfb, 0xef, 0xaf, 0x7f, 0xfe, 0xd7, 0x7f, 0xfd, 0xfd, 0xfd, 0xc7, 0xff, 0x53, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0x6d, 0xfe, 0x3f, 0xff, 0xfd, 0xbf, 0xb7, 0xfe, 0xff, 0xbf, 0xff, 0x7f, 0xfb, 0xfd, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x1b, 0xfe, 0xaf, 0xbf, 0x5f, 0x63, 0xbe, 0xfc, 0xe6, 0x9b, 0x6e, 0x7e, 0x4b, 0xfd, 0xf7, 0xfd, 0x7c, 0xff, 0xe7, 0xf7, 0x3f, 0x66, 0xff, 0xeb, 0xff, 0xbf, 0x5b, 0xf7, 0xff, 0xf5, 0x96, 0x5d, 0xdf, 0x92, 0xff, 0x7e, 0xbf, 0xfe, 0xff, 0xeb, 0xfd, 0xb7, 0xf9, 0x9f, 0x7f, 0x79, 0x35, 0xd5, 0xf7, 0xef, 0xff, 0xef, 0xf3, 0xed, 0xe5, 0xff, 0xeb, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x6f, 0xd6, 0xf7, 0xff, 0x3b, 0xd3, 0xed, 0xff, 0xff, 0xff, 0xfb, 0xd9, 0x7f, 0xf4, 0xff, 0xfc, 0xff, 0xff, 0xfe, 0xff, 0x5f, 0x9b, 0xeb, 0x3b, 0x9b, 0xff, 0xfa, 0x7c, 0xf6, 0xfd, 0xf7, 0xde, 0xd7, 0xca, 0xfa, 0xef, 0xbd, 0xff, 0xfe, 0xfa, 0xef, 0xef, 0x66, 0xfe, 0xdf, 0xb7, 0x9a, 0xbe, 0xef, 0xff, 0xff, 0xbf, 0xfb, 0xd5, 0x33, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xb3, 0xb1, 0xff, 0xff, 0xfa, 0xaf, 0xff, 0xc3, 0xcf, 0xbf, 0xed, 0xfe, 0x6d, 0xcd, 0xff, 0x5b, 0xff, 0xf7, 0xff, 0x7a, 0xeb, 0x66, 0xee, 0xff, 0xfd, 0xfb, 0xdb, 0xff, 0xfd, 0xf7, 0x5f, 0x7a, 0xdf, 0x79, 0xab, 0x1f, 0xd4, 0xff, 0xfb, 0xf7, 0x3f, 0xbe, 0x9b, 0xf7, 0x7f, 0xdb, 0x6f, 0xff, 0xdf, 0x7f, 0xff, 0xbd, 0xf7, 0xbb, 0xff, 0xdf, 0xfb, 0x7f, 0xfe, 0xff, 0xff, 0xfb, 0xf7, 0xe6, 0xfd, 0xff, 0xfd, 0xf7, 0xdb, 0x67, 0x1f, 0x7f, 0xfc, 0xf1, 0xcf, 0x3f, 0xf3, 0xf8, 0xbf, 0xff, 0xbf, 0xfb, 0xfc, 0xad, 0xb1, 0x5f, 0xf3, 0xee, 0xb3, 0xcf, 0xe8, 0xe3, 0x8f, 0x3f, 0xde, 0xf9, 0xd7, 0x9f, 0x7f, 0xdf, 0xfd, 0x67, 0x1f, 0xff, 0x66, 0xe6, 0xdf, 0x7f, 0xbf, 0xfd, 0xf3, 0xff, 0xfb, 0xef, 0xbf, 0xf6, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x9b, 0xfb, 0xfe, 0xfb, 0xdf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xa6, 0xfe, 0xdf, 0xef, 0xdf, 0xdf, 0xc2, 0x1f, 0x7f, 0xbc, 0xf0, 0x87, 0x7f, 0xfb, 0x7a, 0xfd, 0xff, 0x13, 0xff, 0xf8, 0xab, 0x79, 0xff, 0xff, 0xdd, 0x7d, 0x9a, 0xf8, 0xef, 0xbf, 0x2f, 0x7e, 0xf1, 0xce, 0x7f, 0x5f, 0xfd, 0xf7, 0xc5, 0x7f, 0x7f, 0x6f, 0xfe, 0xbf, 0xfe, 0x7e, 0xff, 0xef, 0xf2, 0xdd, 0x6f, 0xe9, 0x7f, 0xee, 0xf7, 0x7f, 0xdf, 0xff, 0xb7, 0xf5, 0xdf, 0xff, 0x9b, 0xff, 0xbf, 0x8f, 0x3f, 0xff, 0xe8, 0xf3, 0xdb, 0x4f, 0x32, 0xd5, 0xe7, 0x9f, 0x9f, 0xf6, 0xf9, 0x67, 0x9f, 0x7f, 0xfe, 0xe6, 0xff, 0xeb, 0xaf, 0xff, 0xfe, 0xfa, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xff, 0x7c, 0xff, 0xef, 0xdf, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xeb, 0xff, 0xbf, 0xfe, 0xbf, 0xff, 0xf5, 0xdb, 0xfd, 0xfd, 0xff, 0xcd, 0xbf, 0xfb, 0xf7, 0xff, 0xff, 0x6f, 0xfe, 0x9f, 0xfe, 0xfa, 0xbf, 0xaf, 0xfe, 0xb9, 0xaf, 0x9c, 0xf1, 0xfd, 0xf7, 0xdf, 0x78, 0xef, 0x7d, 0xf5, 0xdf, 0xff, 0x9b, 0xff, 0xaf, 0xbf, 0xfe, 0xff, 0xeb, 0xff, 0xfb, 0xdf, 0xbf, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0x5f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xfb, 0xef, 0xaf, 0xfd, 0xf6, 0xff, 0xff, 0xb7, 0xfd, 0xdf, 0xa7, 0xff, 0x6f, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xbf, 0xe9, 0xff, 0xad, 0xbd, 0xd6, 0xba, 0xab, 0x2f, 0x3f, 0x76, 0xea, 0xd7, 0x5c, 0x7d, 0xcd, 0xf5, 0xd7, 0x5f, 0x7f, 0xed, 0x6b, 0xde, 0xff, 0xff, 0xfd, 0x9b, 0xee, 0xff, 0x7c, 0xf3, 0xc2, 0x7e, 0xf4, 0xf9, 0x6f, 0xf7, 0xef, 0xef, 0xff, 0xcf, 0xff, 0x1b, 0x7d, 0xff, 0xff, 0xef, 0xed, 0xfe, 0xef, 0xbb, 0x6f, 0xfb, 0xdd, 0x57, 0xff, 0xfa, 0xff, 0xfe, 0xef, 0xed, 0xfe, 0x7f, 0xa6, 0xff, 0x9f, 0xff, 0xef, 0xf7, 0xe7, 0xef, 0xdf, 0xb7, 0x7f, 0x7d, 0xfb, 0xe7, 0xff, 0x77, 0xfe, 0xff, 0xfd, 0xff, 0xaf, 0xf9, 0xff, 0xac, 0xa9, 0xcf, 0x37, 0x5f, 0x7f, 0xff, 0x29, 0xff, 0xfd, 0xf1, 0xff, 0x7f, 0xff, 0xdf, 0xd1, 0xff, 0xff, 0x6f, 0xfe, 0xf7, 0xff, 0xfb, 0xfd, 0xff, 0xff, 0xbb, 0xff, 0x6b, 0xff, 0xf5, 0x7e, 0xff, 0xf7, 0xf6, 0xff, 0xfe, 0xfe, 0xff, 0x9b, 0xbe, 0x9f, 0x3f, 0xee, 0xff, 0xe7, 0xff, 0xdb, 0xff, 0xf9, 0x53, 0x7f, 0xff, 0xdd, 0xaf, 0xfe, 0x7d, 0xf7, 0xff, 0xff, 0xe6, 0xfd, 0xdf, 0x2f, 0xbf, 0xfc, 0xce, 0xdf, 0x7b, 0xaf, 0xff, 0xb0, 0x87, 0x1f, 0xfe, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xb9, 0xff, 0x5f, 0x3f, 0xff, 0xff, 0xfe, 0xdf, 0xfe, 0xbf, 0xf7, 0xaf, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xef, 0xff, 0xfb, 0x6f, 0xfa, 0xff, 0xfb, 0xff, 0x23, 0x7b, 0xcb, 0x7f, 0xfe, 0xfd, 0xf7, 0xad, 0xdf, 0x7e, 0xfb, 0xfb, 0xf7, 0xf7, 0xff, 0xff, 0x9b, 0xfb, 0xff, 0xff, 0xdf, 0xf7, 0xfc, 0xff, 0xb7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xe6, 0xdf, 0xe9, 0xba, 0xdf, 0xff, 0xfb, 0xef, 0xf7, 0xda, 0xde, 0xf7, 0xdf, 0x6b, 0xf7, 0xff, 0xf7, 0xbb, 0xff, 0xff, 0xbb, 0xf1, 0xff, 0xfb, 0xed, 0x7e, 0x79, 0xfc, 0xff, 0x3f, 0xff, 0x75, 0xd4, 0xf1, 0xc7, 0xff, 0xff, 0xb7, 0xf5, 0xff, 0xff, 0x67, 0xfe, 0x7f, 0xff, 0xfc, 0xbf, 0xbf, 0xbb, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xcf, 0xff, 0xff, 0xfe, 0xbf, 0x9b, 0xfe, 0xff, 0xbf, 0xf6, 0xea, 0x8b, 0xff, 0xf3, 0xf6, 0xff, 0xdf, 0x7f, 0xff, 0xef, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xbf, 0xa6, 0xff, 0xff, 0xaf, 0xbf, 0xfa, 0xeb, 0xfb, 0xec, 0xff, 0xff, 0xfd, 0xf7, 0xfe, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xb7, 0x79, 0xff, 0x7b, 0xee, 0xa5, 0x97, 0x5e, 0x3b, 0xfb, 0xb5, 0xff, 0xfd, 0x77, 0xd6, 0xd2, 0xff, 0x3d, 0xff, 0xff, 0xff, 0x6f, 0xd4, 0xf7, 0xdf, 0xfa, 0xeb, 0xa9, 0xb3, 0x9e, 0x7e, 0xfa, 0xdf, 0x7f, 0x3f, 0x75, 0xde, 0xdf, 0xef, 0xff, 0xff, 0x5e, 0x99, 0xfb, 0xf1, 0xaf, 0x66, 0x9f, 0xe9, 0xff, 0xd5, 0x76, 0x9a, 0xf5, 0xcf, 0xb3, 0xcd, 0xb6, 0xf3, 0x65, 0xb3, 0x7f, 0x6f, 0x86, 0xfe, 0xbf, 0xa6, 0xd6, 0xfb, 0xaa, 0x79, 0xe7, 0x8a, 0x56, 0xdd, 0x70, 0xcc, 0x79, 0x27, 0x5c, 0x73, 0xec, 0xff, 0xb3, 0xb9, 0xfe, 0xff, 0xab, 0xbf, 0xb5, 0xfe, 0xdb, 0xba, 0xbc, 0x7f, 0xff, 0xbd, 0xdf, 0x5f, 0x7f, 0xef, 0xf5, 0xff, 0xff, 0x66, 0xec, 0xff, 0xff, 0xfa, 0x3f, 0xa1, 0xbf, 0xfe, 0xde, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0xd7, 0xdf, 0x7f, 0xfd, 0xff, 0xbf, 0x1b, 0xf7, 0xf6, 0xdb, 0xff, 0x37, 0xff, 0xff, 0xfb, 0xfd, 0x3f, 0xfb, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x77, 0xa6, 0xfd, 0xff, 0xff, 0xf6, 0xd9, 0x7f, 0xff, 0x75, 0xf6, 0xdf, 0xdf, 0xff, 0xeb, 0xaf, 0xbf, 0xde, 0xfc, 0xff, 0xff, 0x8d, 0xb9, 0x7e, 0xdb, 0xef, 0x36, 0xd3, 0xbe, 0xbb, 0x8d, 0xbb, 0xcf, 0xfd, 0x77, 0xdf, 0x67, 0xb7, 0xfd, 0xf6, 0xdf, 0xeb, 0x66, 0xee, 0xdb, 0xff, 0xbf, 0xfd, 0xf7, 0xff, 0x6f, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xf9, 0xe7, 0x9f, 0xff, 0xff, 0x3f, 0x9b, 0xf9, 0xfd, 0xff, 0xdb, 0xef, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xef, 0xe6, 0xf6, 0xeb, 0xaf, 0xbf, 0xf1, 0xff, 0xeb, 0x2f, 0xbc, 0xfe, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0xbb, 0x79, 0x7f, 0xf2, 0x89, 0x35, 0xfe, 0xfd, 0xea, 0x8b, 0xaf, 0x7e, 0xd3, 0xc5, 0x17, 0x5f, 0x7c, 0xd1, 0xc5, 0xff, 0x7f, 0x6f, 0xfa, 0xbf, 0xfe, 0x7e, 0xbf, 0xff, 0xfb, 0x7e, 0x7b, 0xef, 0x56, 0xff, 0xfd, 0xf6, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x9b, 0xfe, 0xef, 0x8f, 0x2f, 0x7f, 0xf8, 0xb3, 0x9b, 0x5d, 0xbb, 0xf5, 0x67, 0x97, 0xbd, 0xfc, 0xf1, 0x47, 0x9f, 0x7f, 0xfe, 0xe6, 0xff, 0xeb, 0x2f, 0xbf, 0x5c, 0xff, 0xff, 0x6f, 0xbf, 0xff, 0xf7, 0xf7, 0xdd, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xe1, 0xff, 0xfa, 0xeb, 0x3b, 0xff, 0xff, 0xff, 0xcf, 0xe7, 0xdf, 0xff, 0xfd, 0xf5, 0xef, 0x3f, 0xfd, 0xfd, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0xa7, 0xaf, 0xff, 0xff, 0xaa, 0x6f, 0xbc, 0x72, 0xfd, 0xf7, 0xdf, 0x58, 0xef, 0xfd, 0xf7, 0xff, 0xff, 0x1b, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfb, 0xcf, 0x3f, 0xfb, 0xff, 0xf7, 0x9f, 0xfd, 0xf6, 0xdf, 0xff, 0xfb, 0xff, 0xe6, 0xff, 0xff, 0x6f, 0xb7, 0xfd, 0xf6, 0x7b, 0x6f, 0xff, 0xff, 0xcc, 0xa7, 0xff, 0xff, 0xe7, 0xcd, 0xff, 0xff, 0xfb, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xee, 0xfa, 0xab, 0xaf, 0xbf, 0xfe, 0xba, 0xd7, 0x5b, 0x7d, 0xf5, 0xf5, 0xd3, 0x5f, 0x7f, 0xfd, 0x6f, 0x3e, 0xff, 0xff, 0xe0, 0xab, 0x86, 0x7f, 0xdb, 0xec, 0xbf, 0x96, 0xf5, 0xf7, 0xdf, 0xff, 0x9f, 0xfd, 0xef, 0xff, 0xff, 0x9b, 0xff, 0xf7, 0x6b, 0xbf, 0xbf, 0xbf, 0xff, 0xdf, 0xff, 0xf7, 0xff, 0xef, 0xfb, 0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe6, 0xfd, 0xfd, 0xbb, 0x7f, 0xff, 0xeb, 0xfd, 0xff, 0xdb, 0xcf, 0x5f, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf9, 0xff, 0xff, 0x8f, 0xf1, 0xff, 0xfb, 0xaf, 0xcb, 0xff, 0xdc, 0xb3, 0xea, 0xbf, 0x7f, 0xbe, 0xb7, 0x9e, 0x9f, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0x67, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xfb, 0x76, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x99, 0xf7, 0x6f, 0xb3, 0xff, 0xf9, 0xfb, 0xef, 0xfb, 0xfe, 0xfe, 0xbf, 0xdf, 0x77, 0xff, 0xff, 0xbf, 0x7e, 0xff, 0xff, 0x7f, 0xc6, 0xff, 0xff, 0xff, 0xbd, 0xff, 0xf7, 0xff, 0xc8, 0xff, 0xf7, 0xff, 0xb7, 0xff, 0xfe, 0xfb, 0xff, 0xbf, 0xef, 0xf7, 0xbf, 0xf1, 0xe7, 0xff, 0xff, 0xbf, 0xdf, 0xef, 0xff, 0xee, 0xf6, 0xbf, 0xff, 0xf7, 0xff, 0xfb, 0xff, 0xef, 0xef, 0xff, 0xfb, 0x6d, 0xf8, 0x3f, 0xbe, 0xfc, 0x76, 0xff, 0xbe, 0x76, 0xf0, 0xe3, 0x96, 0x9f, 0xfe, 0x3a, 0x63, 0x9f, 0x75, 0x76, 0xff, 0xff, 0x9b, 0xff, 0xdf, 0xfd, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0x9e, 0x7d, 0xd7, 0x7e, 0xf7, 0xfb, 0xb9, 0xbf, 0x7f, 0xff, 0xdf, 0xef, 0xe6, 0xfe, 0xff, 0xde, 0xff, 0xfd, 0xff, 0xef, 0xf3, 0xff, 0xff, 0xf7, 0xff, 0xef, 0xbd, 0xf7, 0xf1, 0xab, 0xff, 0xdd, 0xab, 0xa9, 0xff, 0xff, 0x7f, 0x7f, 0xfe, 0xf7, 0xfb, 0xfe, 0xfb, 0xfb, 0x7d, 0xff, 0x7f, 0xff, 0xfe, 0xff, 0xaf, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0x7f, 0xbf, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0x5f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xff, 0x1b, 0xfe, 0xff, 0xff, 0xcb, 0xca, 0xdf, 0xfc, 0xf2, 0xfb, 0xcf, 0x5f, 0x53, 0xaf, 0xed, 0xbf, 0x7c, 0xf9, 0xfd, 0xff, 0x3f, 0x66, 0xff, 0xff, 0x7f, 0x97, 0xfc, 0x7f, 0xdd, 0xfc, 0xff, 0xcf, 0xff, 0xf4, 0xd9, 0xcf, 0xbf, 0x5e, 0x7e, 0xff, 0xff, 0xb7, 0xf9, 0xff, 0x7f, 0xfa, 0xec, 0x97, 0xfe, 0xff, 0x3f, 0xff, 0x66, 0xf5, 0xe5, 0xdf, 0xff, 0xfe, 0xfb, 0xbf, 0xff, 0xff, 0x6f, 0xd6, 0xff, 0xcf, 0x7b, 0xfa, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xd9, 0x67, 0xf8, 0xfd, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x9b, 0xfb, 0xff, 0xff, 0xf7, 0xda, 0xff, 0xff, 0xbd, 0xf6, 0xdf, 0xdf, 0x4a, 0xb7, 0xed, 0xbf, 0x7f, 0x7e, 0xfb, 0xff, 0xef, 0x66, 0xfe, 0xff, 0xff, 0xbe, 0xfa, 0xef, 0xff, 0xaf, 0xfe, 0xff, 0x5f, 0x53, 0xdf, 0xbd, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xb3, 0xb1, 0xff, 0xff, 0xbb, 0xfd, 0xbc, 0x5e, 0xcf, 0xab, 0xfd, 0x7e, 0xb5, 0xe5, 0xdf, 0xf1, 0xaf, 0xef, 0xf7, 0xff, 0xff, 0x66, 0xee, 0xff, 0xff, 0xdb, 0x7e, 0xaf, 0xd7, 0xf7, 0x5a, 0x7e, 0xdf, 0x0b, 0xfd, 0x9d, 0x7f, 0xea, 0xe1, 0xe5, 0xff, 0xbf, 0x9b, 0xf7, 0xff, 0xff, 0x6f, 0xff, 0xff, 0x7e, 0xff, 0xbd, 0xb7, 0xb9, 0xff, 0xe6, 0xfb, 0xaf, 0xbf, 0xec, 0xfe, 0xff, 0xf7, 0xe6, 0xfd, 0xff, 0xff, 0xf7, 0xfb, 0x7f, 0x1d, 0x7f, 0xfc, 0xd1, 0xcf, 0x3c, 0xf3, 0xf8, 0xf3, 0xcf, 0x3f, 0xff, 0xff, 0xbd, 0xb1, 0xff, 0xfb, 0xef, 0xb3, 0xff, 0xbe, 0xe3, 0x8f, 0x3f, 0xce, 0xb1, 0x86, 0x9f, 0x7f, 0xae, 0xf9, 0xe7, 0xdf, 0xff, 0x66, 0xe6, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0xf6, 0xbf, 0xf7, 0xdf, 0xff, 0xee, 0xfb, 0xff, 0xff, 0x3f, 0x9b, 0xfb, 0xff, 0xff, 0xef, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xf7, 0xff, 0xf7, 0xdf, 0x7d, 0xff, 0xfd, 0xff, 0xef, 0xa6, 0xde, 0xff, 0xff, 0xb7, 0xf7, 0x7f, 0x0f, 0x7f, 0xbc, 0xf0, 0x85, 0x3f, 0xff, 0xf8, 0xab, 0x85, 0x3f, 0xfe, 0xff, 0xab, 0x79, 0xff, 0xff, 0x9f, 0x3f, 0xde, 0x7d, 0x63, 0xbf, 0x25, 0xf6, 0xf1, 0xcf, 0x7e, 0xff, 0x7d, 0xb1, 0xcf, 0xfe, 0x7f, 0x6f, 0xfe, 0xff, 0xff, 0xba, 0xfb, 0xaf, 0xfb, 0xfe, 0xaf, 0xdf, 0x7f, 0xae, 0xfb, 0xff, 0xfe, 0x5b, 0xb7, 0xfb, 0xff, 0xff, 0x9b, 0xff, 0xff, 0x8f, 0x3e, 0xbb, 0xe8, 0x33, 0xcb, 0x8f, 0x3f, 0xfe, 0xe7, 0x9f, 0x1b, 0xff, 0x95, 0xe7, 0x9f, 0x3f, 0xfe, 0xe6, 0xff, 0xdf, 0x7f, 0xbe, 0xff, 0xfa, 0xcf, 0x7b, 0xaf, 0xbc, 0xc5, 0xf7, 0xff, 0xde, 0xfb, 0xe5, 0xdf, 0xff, 0xbe, 0xbf, 0xf9, 0xff, 0xf7, 0xff, 0xbf, 0xaf, 0xfe, 0xbb, 0xdf, 0xa5, 0xdb, 0xfd, 0xf7, 0xbf, 0xed, 0x3e, 0xf9, 0xfd, 0xff, 0xfb, 0x6f, 0xfe, 0xff, 0xff, 0xef, 0xbb, 0xae, 0xff, 0xb8, 0xaf, 0x9e, 0x79, 0xfd, 0xf7, 0xdf, 0x7c, 0x7f, 0xfd, 0xf5, 0xef, 0xff, 0x9b, 0xfd, 0x7f, 0xff, 0xff, 0xfb, 0xeb, 0xbf, 0xfb, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xd6, 0xdf, 0xff, 0xbb, 0xff, 0xe6, 0xff, 0xff, 0xff, 0x3f, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x97, 0xf7, 0xff, 0xff, 0x9f, 0xa7, 0xff, 0xff, 0xbf, 0xe9, 0xbf, 0xaf, 0x9f, 0xda, 0xfa, 0xab, 0xaf, 0xbf, 0xfa, 0xfa, 0x97, 0x1d, 0x7e, 0xf9, 0xd5, 0xd7, 0x5d, 0x3d, 0xfd, 0x6b, 0xf6, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xfd, 0xff, 0xcf, 0xfe, 0xf7, 0xff, 0xfe, 0x9f, 0x7f, 0xfe, 0xe9, 0x47, 0xff, 0x1b, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xfd, 0xe7, 0xdf, 0x7f, 0xbb, 0xfe, 0xfd, 0xfd, 0xfb, 0xf5, 0xef, 0x2f, 0xbf, 0xbf, 0x7f, 0xa6, 0xff, 0xfe, 0xff, 0xdf, 0x7f, 0xef, 0x5f, 0x77, 0x9f, 0xb7, 0xff, 0xff, 0xfe, 0xbf, 0xfb, 0xb7, 0xff, 0x5f, 0xff, 0xb7, 0xf9, 0xff, 0x7f, 0xea, 0xff, 0xff, 0xde, 0x7f, 0xff, 0xfd, 0xda, 0xbf, 0xe6, 0xfe, 0xfb, 0x67, 0xbe, 0xd0, 0xff, 0xfb, 0x6d, 0xfe, 0xff, 0x7f, 0xfb, 0xff, 0xeb, 0xff, 0xef, 0xdf, 0xfe, 0xfe, 0x7f, 0xdf, 0x7e, 0xff, 0xf8, 0xff, 0x76, 0xff, 0xfd, 0x9b, 0xfe, 0xff, 0xbf, 0xfe, 0xdf, 0xff, 0xbb, 0x7f, 0xfe, 0xfb, 0xcb, 0x7f, 0xff, 0xdb, 0xff, 0xfc, 0x7f, 0xf7, 0xec, 0x9f, 0xe6, 0xdf, 0xeb, 0xcf, 0xff, 0xff, 0x9f, 0xbb, 0xaf, 0xfd, 0xd7, 0xfc, 0xf6, 0xfe, 0xff, 0xfb, 0xbf, 0xa7, 0xef, 0xfd, 0xaf, 0xf9, 0xf7, 0xff, 0xed, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x75, 0xef, 0xed, 0xed, 0xff, 0xf7, 0xef, 0xff, 0xf7, 0xfe, 0xfb, 0x6f, 0xfe, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xcf, 0xbf, 0xff, 0x9f, 0x17, 0xde, 0xf8, 0xf3, 0xbf, 0x75, 0xfe, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0x56, 0x7f, 0x7b, 0xfd, 0xfd, 0xeb, 0xd7, 0xfe, 0xef, 0xff, 0xe6, 0xff, 0xcf, 0x2e, 0xdb, 0x6b, 0xbf, 0x7d, 0xae, 0xf7, 0xf9, 0x75, 0xcf, 0xe9, 0xaf, 0xbf, 0xff, 0xd7, 0x5f, 0xf7, 0xbf, 0xf1, 0xff, 0xf3, 0xef, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0x7d, 0xfd, 0xf7, 0xff, 0xf6, 0xf9, 0xfb, 0xf7, 0x9f, 0xff, 0x67, 0xbe, 0xbf, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x77, 0xfd, 0xff, 0xff, 0xff, 0xf7, 0xfd, 0xfb, 0xfb, 0x9b, 0xfe, 0xef, 0xbf, 0xff, 0x1f, 0xfb, 0x75, 0xfe, 0xf3, 0xfe, 0x57, 0x52, 0xe7, 0x37, 0xbd, 0xb7, 0x6b, 0xf9, 0xe5, 0xa7, 0xa6, 0xff, 0xef, 0xbf, 0xff, 0xcf, 0x7f, 0xfd, 0xf9, 0xff, 0x5f, 0x6d, 0xf6, 0xff, 0x7e, 0xff, 0xfd, 0xb2, 0xd9, 0xfd, 0xb7, 0x79, 0xdf, 0x7b, 0xef, 0xff, 0xbf, 0xff, 0xcf, 0x2f, 0xef, 0x67, 0x99, 0xe5, 0xbf, 0xdf, 0x7f, 0xef, 0xf7, 0xdf, 0xeb, 0x6f, 0xd4, 0x97, 0x5f, 0xfe, 0xff, 0xff, 0xff, 0xcf, 0xfe, 0xff, 0x5d, 0x7d, 0xf9, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0x5e, 0x99, 0xfb, 0xb7, 0xff, 0x66, 0xff, 0xfb, 0xaf, 0xbf, 0x66, 0x5a, 0xd4, 0x5e, 0xb3, 0xe7, 0xbd, 0xf7, 0xff, 0xb3, 0x4f, 0xee, 0x86, 0x7e, 0xf8, 0xe5, 0xfd, 0xff, 0xaf, 0xa9, 0xaf, 0xbe, 0x63, 0xf5, 0xd3, 0xff, 0x7f, 0xf7, 0xdd, 0x7f, 0xff, 0xfd, 0x93, 0xb9, 0xff, 0xfe, 0xfb, 0xff, 0xb7, 0xdf, 0x7a, 0xef, 0xac, 0x7f, 0x31, 0xe4, 0x7e, 0xde, 0x2f, 0xbf, 0xff, 0xfa, 0xfb, 0x66, 0xec, 0xff, 0xfe, 0xfb, 0xff, 0xf9, 0xa7, 0x1e, 0x4e, 0xfb, 0x5f, 0x63, 0x35, 0xbf, 0x72, 0xca, 0xdf, 0x87, 0x9f, 0x38, 0x18, 0xf7, 0xe6, 0xbb, 0xef, 0xbf, 0xfe, 0xf2, 0xff, 0xbd, 0xbf, 0xfb, 0xfe, 0x93, 0xeb, 0xaf, 0xff, 0xff, 0xfe, 0xfb, 0x77, 0xe6, 0x7d, 0xba, 0xec, 0xb3, 0xce, 0xef, 0xff, 0x7f, 0xfe, 0x5f, 0xdf, 0x7e, 0xf2, 0xfc, 0xf3, 0xff, 0x3e, 0xff, 0xfc, 0xbd, 0xb9, 0xfe, 0xfa, 0xeb, 0xb7, 0xd7, 0xfe, 0x7b, 0xcd, 0xbf, 0xdb, 0x35, 0xf6, 0x1a, 0x7f, 0xfe, 0xdd, 0xe7, 0x9f, 0xbe, 0x6e, 0xee, 0xbf, 0xff, 0xfe, 0xfe, 0xf7, 0xff, 0x7f, 0xff, 0xfd, 0xf6, 0xb9, 0xef, 0xbe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x3b, 0x9a, 0xf9, 0x6f, 0xbf, 0xfd, 0xff, 0xbe, 0xff, 0xef, 0xbb, 0xff, 0xfe, 0xfd, 0xf5, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xd7, 0xcf, 0xe6, 0xf6, 0xfb, 0xef, 0xb7, 0xff, 0xdf, 0xeb, 0x3f, 0xf4, 0xfe, 0xd5, 0xd7, 0x7e, 0xfa, 0xe3, 0xfe, 0x37, 0xde, 0x78, 0xbb, 0x61, 0xdf, 0xae, 0xbb, 0xbf, 0xfe, 0xf9, 0xf2, 0x8b, 0x67, 0x7e, 0xb5, 0xd5, 0x33, 0xfb, 0xfd, 0xfb, 0xcd, 0x37, 0x7f, 0x6f, 0xfe, 0xff, 0xee, 0xbb, 0xef, 0xbf, 0xbf, 0xee, 0xeb, 0xef, 0x5f, 0x7f, 0x9d, 0xf7, 0xff, 0x4f, 0x7f, 0xf7, 0xdd, 0xff, 0x9b, 0xff, 0xbf, 0xcf, 0x3e, 0xfe, 0xf8, 0xa3, 0x9b, 0x5e, 0xbe, 0x95, 0x41, 0x1f, 0x9f, 0xee, 0xd0, 0xc7, 0x1f, 0x7f, 0xfe, 0xe6, 0xff, 0xef, 0xbf, 0xff, 0xf8, 0xff, 0x9f, 0x7e, 0xbf, 0xfe, 0xc5, 0x93, 0x7f, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xef, 0xfb, 0xef, 0xef, 0xff, 0xff, 0xff, 0xcf, 0xa7, 0x5f, 0x3d, 0xe5, 0xf7, 0xeb, 0xaf, 0xfb, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xfb, 0xee, 0xbb, 0xbf, 0xfe, 0xbf, 0x6f, 0xbc, 0x72, 0xf5, 0xf5, 0x57, 0x39, 0x4f, 0xff, 0xf7, 0xdf, 0xff, 0x1b, 0xfe, 0xef, 0xbf, 0xff, 0xf3, 0xfb, 0x7f, 0xfb, 0xce, 0x3f, 0xd3, 0x5b, 0x7f, 0xbf, 0xff, 0x96, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xc5, 0xff, 0xff, 0xaf, 0xfc, 0xe9, 0xa7, 0xfe, 0x5f, 0xef, 0xed, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xfd, 0xaf, 0xbd, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xe2, 0xd6, 0x5d, 0x7f, 0xfd, 0x55, 0xd7, 0x5f, 0x7f, 0xfd, 0x6f, 0x36, 0xff, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xef, 0xaf, 0xf7, 0x7f, 0xf7, 0xfd, 0xf6, 0xae, 0xdf, 0x9f, 0xdf, 0x47, 0xe6, 0x9b, 0x7b, 0xf7, 0xeb, 0xaf, 0xbf, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0xfd, 0xf9, 0xef, 0xcd, 0xba, 0xff, 0xfe, 0xef, 0xbe, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xd7, 0xf5, 0xb7, 0x9b, 0xfe, 0xbb, 0xbf, 0xdf, 0x7f, 0xbe, 0xff, 0xbf, 0x31, 0xdf, 0x7e, 0xff, 0xb5, 0xff, 0x7f, 0x78, 0x2f, 0x8f, 0x57, 0xb8, 0xe7, 0xfc, 0xff, 0xf3, 0xff, 0xe9, 0xdf, 0xff, 0x67, 0xfc, 0xed, 0xee, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff, 0xf6, 0xfe, 0xff, 0xf7, 0xfe, 0xfd, 0xef, 0xeb, 0x7f, 0xff, 0x7b, 0x99, 0xfe, 0xbf, 0xff, 0xfe, 0xfb, 0xee, 0xee, 0xaf, 0xee, 0xff, 0xf2, 0xdd, 0xf7, 0xff, 0xff, 0xdf, 0xf7, 0x7f, 0xdf, 0xf7, 0x46, 0xff, 0xeb, 0xad, 0xbf, 0xf6, 0xea, 0xff, 0x67, 0xff, 0xd7, 0xff, 0xfe, 0xff, 0xfe, 0xef, 0xe9, 0xff, 0xfb, 0xe7, 0x9f, 0xf1, 0xf7, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0x5f, 0x8f, 0xfc, 0xbb, 0x67, 0xff, 0x7e, 0xfd, 0xed, 0xfd, 0xff, 0x7f, 0xff, 0x67, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x6f, 0xcf, 0xe1, 0xb5, 0xb7, 0xce, 0xb0, 0xc3, 0x1f, 0xf7, 0x86, 0x9b, 0xff, 0x98, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xff, 0xfa, 0xfb, 0x77, 0xbd, 0xbb, 0xff, 0xfe, 0xef, 0x66, 0xff, 0xee, 0xbf, 0xdf, 0xfe, 0xfb, 0xfd, 0xaf, 0xdf, 0xf7, 0x77, 0xf9, 0xfd, 0xbf, 0xef, 0xe7, 0xfb, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xcb, 0xa9, 0xbf, 0xfe, 0xff, 0xeb, 0xfb, 0x6f, 0xfc, 0xdf, 0x3f, 0xff, 0xbe, 0xfc, 0xef, 0xff, 0xff, 0x6d, 0xfe, 0xbf, 0xef, 0xfe, 0xfb, 0xef, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0x9b, 0x78, 0xe2, 0xfc, 0xfb, 0x9f, 0x1f, 0x7f, 0xe4, 0xd5, 0xf7, 0xbe, 0xfe, 0xf8, 0x9b, 0x6f, 0x7d, 0xf9, 0xd0, 0x33, 0xdf, 0xa6, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0x7e, 0x1d, 0x2f, 0xe6, 0xcb, 0xdf, 0x72, 0xff, 0xf9, 0xf7, 0xd5, 0x7a, 0xff, 0xfc, 0xaf, 0xd9, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xff, 0xab, 0x7f, 0xd7, 0x97, 0xdd, 0xba, 0xf9, 0x4e, 0xbb, 0xfe, 0x7f, 0xff, 0x6d, 0xfe, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xff, 0xfb, 0xfa, 0xdf, 0xff, 0x7e, 0x3b, 0xa5, 0xbf, 0x53, 0x7e, 0xf5, 0xff, 0xfa, 0x1b, 0xf5, 0xe5, 0x97, 0x5f, 0x7e, 0xf9, 0xff, 0xbf, 0xfe, 0xef, 0xff, 0xdf, 0x67, 0xf9, 0x7f, 0x96, 0x53, 0xff, 0x9f, 0x57, 0xe6, 0xbe, 0x6d, 0xbf, 0xdd, 0xf6, 0xfb, 0xfd, 0xff, 0xff, 0xf7, 0x9f, 0x77, 0xfe, 0xfb, 0xe7, 0xb5, 0xfa, 0xfe, 0xff, 0x9b, 0x91, 0xff, 0xde, 0x7b, 0xe3, 0xbd, 0x1f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xdd, 0x7f, 0xff, 0x7f, 0xf5, 0xde, 0xff, 0xff, 0x6c, 0xec, 0xbf, 0xff, 0xfe, 0xfa, 0xef, 0xff, 0xdf, 0xff, 0x3f, 0xfd, 0x69, 0xe7, 0xd5, 0xff, 0x5f, 0x5f, 0xed, 0xff, 0xbf, 0x19, 0xfb, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0xef, 0xff, 0xdf, 0xfe, 0xd6, 0x2b, 0xad, 0x1f, 0x56, 0x4a, 0xa9, 0xff, 0xef, 0xc6, 0xfd, 0xfb, 0xee, 0xbb, 0xef, 0xfe, 0xff, 0xff, 0xfb, 0xf5, 0xae, 0xbf, 0xfe, 0xda, 0x8b, 0x2f, 0xbb, 0xfe, 0xff, 0x9d, 0x79, 0xf7, 0x3f, 0xff, 0xfc, 0xf3, 0xfb, 0xff, 0xff, 0x71, 0xfe, 0xf3, 0xcf, 0x3f, 0xff, 0xec, 0x33, 0xcf, 0xff, 0x7f, 0x67, 0xae, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xff, 0xfe, 0xfb, 0x8f, 0x7f, 0xfc, 0xf1, 0xc7, 0x9f, 0x77, 0xfe, 0xf9, 0xf7, 0xbf, 0x99, 0xf8, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xce, 0xe6, 0xfe, 0xdb, 0x6f, 0xbf, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xf7, 0xbb, 0xb9, 0xfd, 0x7e, 0xfb, 0xef, 0xff, 0xff, 0xfa, 0xe9, 0x2f, 0xf4, 0xe1, 0x85, 0x3e, 0x5e, 0x7a, 0xa1, 0xaf, 0xfb, 0xff, 0x6e, 0xde, 0xbf, 0xfb, 0xee, 0xbb, 0xff, 0xba, 0xfc, 0xf2, 0x8b, 0x7f, 0x6c, 0xf1, 0xdf, 0x13, 0x5f, 0xfc, 0xf7, 0xef, 0xdf, 0x9b, 0xff, 0xbf, 0xfb, 0xee, 0x7b, 0xff, 0xad, 0xbf, 0x5f, 0xaa, 0xdf, 0x4b, 0xfe, 0xf7, 0xff, 0x57, 0xfb, 0xbf, 0xff, 0xff, 0xe6, 0xff, 0xef, 0xb3, 0xcf, 0x3e, 0xff, 0xe8, 0xe3, 0x8f, 0x0e, 0x67, 0xd0, 0xe1, 0x87, 0x1f, 0x74, 0xf8, 0xe5, 0x97, 0xbf, 0xf9, 0xff, 0xfb, 0xef, 0xbf, 0xbf, 0xfe, 0xe7, 0xeb, 0xff, 0xff, 0xf9, 0xff, 0xbf, 0x5f, 0x7f, 0xf9, 0xcf, 0x97, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xfb, 0xef, 0xaf, 0xff, 0xff, 0xfa, 0xff, 0x75, 0xb6, 0xbf, 0x7e, 0xd3, 0x4d, 0xb7, 0xff, 0x64, 0xff, 0x9b, 0xff, 0xef, 0xbe, 0xfb, 0xee, 0xab, 0xff, 0xbf, 0xff, 0xaf, 0x5e, 0xf3, 0xd5, 0x33, 0xdf, 0x1c, 0xf3, 0x55, 0x7d, 0xff, 0xe6, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfa, 0xdf, 0xef, 0xff, 0x1f, 0x76, 0xf9, 0xe3, 0x97, 0x5f, 0x74, 0xf9, 0x41, 0xd6, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfd, 0xb7, 0xf7, 0xe5, 0xff, 0xff, 0x7f, 0xf9, 0xdf, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xcb, 0xaf, 0xbf, 0xfc, 0xfa, 0xeb, 0xaf, 0xbe, 0xea, 0xb5, 0x56, 0x5f, 0x7b, 0xad, 0xf5, 0xc7, 0x5e, 0xff, 0x9b, 0xfd, 0xff, 0xfc, 0xf7, 0xaf, 0xff, 0xfc, 0xfb, 0xec, 0xfb, 0x9f, 0xf9, 0xee, 0xfd, 0x47, 0xbf, 0x7f, 0xfe, 0xdf, 0xd9, 0xc6, 0xfb, 0xfd, 0xf7, 0xef, 0x7f, 0xff, 0xfd, 0x67, 0xdf, 0xff, 0xdf, 0xf5, 0x7f, 0xf7, 0xfc, 0xfb, 0x8f, 0xff, 0xff, 0xbf, 0xf9, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xed, 0xdf, 0x6a, 0x55, 0xcf, 0xfd, 0xfe, 0xdb, 0xf7, 0x7f, 0xfc, 0xf9, 0x6f, 0xfe, 0xbf, 0xdb, 0xeb, 0xfb, 0xcf, 0xaf, 0xfe, 0xff, 0xfe, 0xf5, 0xff, 0x7d, 0xfe, 0xfd, 0x9d, 0xff, 0xff, 0xf5, 0x9f, 0x19, 0xff, 0x7e, 0xff, 0xff, 0xfb, 0xff, 0xaf, 0xf7, 0xfb, 0x7f, 0xff, 0xdd, 0xff, 0xbf, 0x7f, 0xff, 0xff, 0xf7, 0x3c, 0x3f, 0xe6, 0xff, 0xc7, 0xe7, 0xe3, 0xef, 0xbf, 0xdd, 0xff, 0xdb, 0x36, 0xf7, 0xdb, 0x7f, 0xf7, 0xff, 0xf3, 0x5f, 0xf7, 0xb7, 0xbf, 0xd1, 0xff, 0xfa, 0xfd, 0x7b, 0xff, 0xff, 0xbf, 0xff, 0x0f, 0x3f, 0xfc, 0xe1, 0x87, 0xdf, 0xff, 0xbb, 0xf9, 0xff, 0xfd, 0x67, 0xee, 0xff, 0x7f, 0xff, 0xff, 0xf5, 0xef, 0xcf, 0xff, 0x7d, 0xf6, 0xbb, 0x8f, 0x5f, 0xf7, 0xfb, 0xbf, 0xbd, 0xbf, 0xbe, 0x99, 0xff, 0xcf, 0xff, 0x6f, 0xff, 0xfb, 0xfe, 0xfc, 0xef, 0xf8, 0xc6, 0xbd, 0x7f, 0xff, 0x6f, 0x7b, 0x9f, 0xff, 0xff, 0x7f, 0xe6, 0xff, 0xf3, 0xfd, 0xf7, 0xef, 0x7e, 0xff, 0xfb, 0xf5, 0xfe, 0xef, 0xef, 0xdf, 0xff, 0xff, 0x7f, 0xe6, 0xfe, 0xfd, 0xbb, 0xf9, 0xef, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0x7f, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0x5b, 0xff, 0x6b, 0xfd, 0x75, 0x7f, 0xf7, 0x6f, 0xfe, 0xdf, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x61, 0x13, 0x7a, 0xec, 0xc1, 0xd3, 0x77, 0xb6, 0xfd, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0x7f, 0xff, 0xff, 0xff, 0x86, 0xff, 0xbf, 0xb9, 0xe4, 0xfb, 0xee, 0xef, 0xaf, 0xbf, 0xfb, 0xdd, 0xf7, 0xdf, 0x7d, 0xf7, 0xdd, 0xf7, 0xdf, 0xff, 0x8f, 0xd9, 0xff, 0x6f, 0xbe, 0xf9, 0xbc, 0xfb, 0xfb, 0xeb, 0x3f, 0xff, 0xf9, 0xf7, 0xda, 0x7e, 0xc9, 0xe5, 0xf7, 0xf7, 0xff, 0x6d, 0xfe, 0xd7, 0xff, 0x7b, 0xfa, 0xef, 0xff, 0xfe, 0x7f, 0x4f, 0x7d, 0xee, 0xad, 0x97, 0x9e, 0x7b, 0xea, 0xed, 0xfd, 0xff, 0x9b, 0xf5, 0xf9, 0xff, 0xdf, 0xfb, 0xfb, 0xbf, 0xff, 0x5f, 0x6e, 0xf5, 0xcb, 0x2f, 0xbf, 0xfc, 0xb2, 0xcb, 0x7f, 0xff, 0xd7, 0xe6, 0xfe, 0x6b, 0xbf, 0xc9, 0x77, 0xde, 0xef, 0xaf, 0xff, 0x76, 0x17, 0xdb, 0x6f, 0xb7, 0xf5, 0xf6, 0xdb, 0xcf, 0xff, 0xbb, 0x99, 0xff, 0xea, 0xbf, 0xf7, 0xae, 0xfb, 0xeb, 0xab, 0xef, 0x44, 0xc7, 0xdc, 0x70, 0xcd, 0x0d, 0x37, 0xdc, 0x70, 0xff, 0x6c, 0xec, 0xff, 0xff, 0xfb, 0x3a, 0xe5, 0xff, 0xf6, 0xdf, 0x7b, 0xdf, 0x7f, 0xef, 0xfd, 0xf7, 0xdf, 0x7b, 0xaf, 0xfd, 0xbf, 0x99, 0xf9, 0xff, 0xf0, 0xd3, 0x5b, 0x3b, 0xbd, 0xff, 0xff, 0xdb, 0xdf, 0x6a, 0xab, 0xed, 0x37, 0xde, 0x7e, 0x4b, 0xff, 0xef, 0xa6, 0xfd, 0xdf, 0x7f, 0xef, 0xad, 0xf7, 0xfe, 0xfe, 0xbf, 0xf7, 0x3c, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xf4, 0xf7, 0xbd, 0x69, 0xff, 0x67, 0x9f, 0x7f, 0xde, 0xf9, 0xdf, 0x7d, 0xef, 0x7f, 0x9f, 0x5d, 0x76, 0xd9, 0x65, 0x97, 0x5d, 0xd6, 0x79, 0x6f, 0xe4, 0xdf, 0xbc, 0xf3, 0x8f, 0x3f, 0xff, 0x56, 0xfb, 0xeb, 0x5f, 0x7f, 0xfd, 0xb5, 0xd7, 0x5f, 0x7f, 0xed, 0xf6, 0xbf, 0x99, 0xf9, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0x9b, 0xff, 0xcf, 0xe6, 0xfe, 0xbf, 0xfb, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xbf, 0xff, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xfd, 0xff, 0xbb, 0xa9, 0xff, 0xc6, 0x1f, 0x77, 0xfc, 0xd1, 0xfa, 0xef, 0xff, 0x75, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xaf, 0xbd, 0xf7, 0xff, 0x6a, 0xde, 0xdf, 0x78, 0xe7, 0x9f, 0xff, 0xbe, 0xda, 0xef, 0x9d, 0xdf, 0x3c, 0xd3, 0x4c, 0x33, 0xdd, 0x34, 0xd3, 0xe7, 0xdf, 0x9b, 0xff, 0xff, 0xf2, 0xdf, 0xef, 0xbf, 0xff, 0xff, 0xde, 0xff, 0xdd, 0x6f, 0xbf, 0xfd, 0x76, 0xdb, 0x6b, 0xff, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0x73, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x0f, 0x77, 0xd8, 0x65, 0x97, 0x5d, 0x76, 0xd9, 0xc5, 0x97, 0xbf, 0xf9, 0xff, 0xf6, 0x8f, 0xaf, 0xff, 0xfd, 0xf7, 0xef, 0xaf, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xfd, 0x6f, 0xfe, 0xff, 0xfc, 0xfe, 0xeb, 0x7f, 0xff, 0xff, 0xff, 0xeb, 0x75, 0xb7, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xfc, 0xff, 0x9b, 0xff, 0xff, 0xfe, 0xfa, 0xef, 0xbf, 0x7f, 0xfe, 0xfa, 0xaa, 0x76, 0xd3, 0x55, 0x57, 0x5d, 0x75, 0xd5, 0x55, 0x7f, 0xff, 0xe6, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xbf, 0x1e, 0x7d, 0xf1, 0xc1, 0x07, 0x1f, 0x7c, 0xf0, 0x61, 0xdf, 0xbf, 0xf9, 0xff, 0xff, 0xdf, 0xff, 0xbf, 0xf4, 0xd4, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xef, 0xbf, 0xff, 0xa6, 0xff, 0x6f, 0xfa, 0xff, 0xeb, 0xaf, 0xbf, 0xdc, 0x7a, 0xab, 0xaf, 0xbf, 0xfa, 0xd5, 0xd7, 0x5f, 0x7b, 0xf5, 0xf5, 0xd7, 0x5f, 0xff, 0x9a, 0x7f, 0x3f, 0xba, 0xfc, 0xf3, 0x5d, 0xbf, 0xff, 0xef, 0xbb, 0xfe, 0xfd, 0xa7, 0x5f, 0x57, 0x3e, 0xf9, 0xe7, 0xde, 0xff, 0xc6, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf7, 0xe7, 0xfe, 0xef, 0xff, 0xfb, 0xfb, 0xbb, 0xfd, 0xff, 0xfb, 0xfb, 0x9f, 0xf9, 0xf7, 0xfa, 0xeb, 0x2f, 0xfd, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xbf, 0xff, 0xef, 0xff, 0xff, 0xff, 0x6b, 0xfe, 0xf7, 0xff, 0xfb, 0xe3, 0xff, 0xff, 0xfc, 0xf7, 0xcb, 0x5f, 0x77, 0xfe, 0xf5, 0xe6, 0x9f, 0x7f, 0xfa, 0xf5, 0xff, 0x9b, 0xff, 0xff, 0xbf, 0xef, 0xfd, 0xff, 0xdf, 0xee, 0xef, 0xf5, 0xbe, 0xfd, 0xdf, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xe6, 0xff, 0xef, 0xff, 0xf7, 0xef, 0x2f, 0x5f, 0xff, 0xff, 0x7f, 0xfc, 0xfb, 0xcd, 0xb7, 0xfc, 0xf2, 0xfb, 0x4d, 0xf7, 0xbf, 0xf9, 0xef, 0xfa, 0x7f, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0x7f, 0x9a, 0xaf, 0xef, 0xff, 0x4f, 0x7e, 0xfd, 0xff, 0xaf, 0xff, 0x6f, 0xfe, 0xff, 0xfd, 0xdf, 0xfd, 0xff, 0xee, 0xf3, 0xbf, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0x9b, 0xff, 0xef, 0xbf, 0xef, 0xfc, 0xf3, 0x8f, 0x1f, 0x7e, 0x7d, 0x77, 0xbd, 0x6f, 0x9f, 0x61, 0x46, 0xbe, 0xdf, 0xff, 0xdf, 0xe6, 0xff, 0xfb, 0xef, 0xff, 0xed, 0xfc, 0xee, 0xbf, 0x7f, 0x7f, 0xfd, 0xef, 0xdc, 0xff, 0xfd, 0xcf, 0xef, 0xff, 0xfd, 0xbf, 0xb9, 0xff, 0xfa, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xfa, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x6f, 0xe8, 0xff, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xfe, 0xf7, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa6, 0x7f, 0x2d, 0x6f, 0xfe, 0x93, 0x2f, 0xbf, 0xfc, 0xa6, 0x9b, 0xdf, 0x5c, 0xf3, 0xfd, 0x37, 0xdf, 0x7c, 0xff, 0xff, 0xa9, 0xd9, 0x5f, 0xfe, 0xdb, 0x79, 0xff, 0xfd, 0xff, 0xff, 0x6c, 0xe5, 0x3b, 0xed, 0xbc, 0xf3, 0xce, 0x3b, 0xef, 0xff, 0xff, 0x6d, 0xfe, 0xff, 0x92, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xdb, 0xff, 0xfe, 0xf9, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xdf, 0x1b, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xff, 0xdf, 0xfd, 0xff, 0xef, 0x7f, 0xff, 0xfd, 0xff, 0x57, 0xe6, 0xf6, 0x7f, 0xef, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xbd, 0xf7, 0x9f, 0xdf, 0xee, 0x79, 0xed, 0xb5, 0xff, 0x5e, 0xff, 0xbb, 0xb9, 0xff, 0xaf, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xdd, 0xfd, 0x5f, 0x7d, 0xf5, 0xff, 0x57, 0xff, 0x64, 0xee, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xf3, 0xfb, 0x4f, 0xb9, 0xff, 0xfd, 0xf5, 0xdf, 0xd7, 0x59, 0xff, 0xff, 0xf5, 0xbf, 0x19, 0xf8, 0xff, 0xe4, 0xff, 0xcf, 0x3f, 0xf5, 0xfd, 0xc7, 0x5e, 0xff, 0xd8, 0xeb, 0x8f, 0x95, 0x57, 0xfa, 0x69, 0xfd, 0x0f, 0xe6, 0xfd, 0xdf, 0xfb, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xb5, 0xae, 0xbf, 0xf6, 0xfa, 0xeb, 0xaf, 0xbd, 0xf6, 0xff, 0x9d, 0x79, 0x9f, 0xe7, 0xff, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xb3, 0xcf, 0x3f, 0xff, 0xec, 0xf3, 0xcf, 0xff, 0x7f, 0x6d, 0xec, 0xdf, 0x7c, 0xfb, 0xcf, 0x3f, 0xff, 0xf8, 0xe3, 0x8f, 0x7f, 0xdc, 0xf1, 0xc7, 0x9f, 0x77, 0xfe, 0xf9, 0xb7, 0x2a, 0x9a, 0xf9, 0xfb, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xce, 0xe6, 0xfe, 0xbf, 0xfe, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xdf, 0xb3, 0xb9, 0xff, 0xc7, 0xfb, 0x2f, 0xfc, 0xf1, 0xd7, 0x1f, 0x7f, 0x7c, 0xe1, 0x8f, 0x3f, 0x5e, 0xfa, 0xe3, 0x8f, 0xff, 0xdf, 0x6e, 0xde, 0xff, 0xf8, 0x73, 0x8b, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0x5f, 0xfc, 0xf7, 0xdf, 0x17, 0xff, 0xfd, 0xf7, 0xff, 0xdf, 0x9b, 0xff, 0x7f, 0x9f, 0xff, 0xfa, 0xbf, 0xff, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x7f, 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xef, 0xb3, 0x8f, 0x3c, 0xff, 0xfc, 0xf3, 0xcf, 0x8d, 0x6f, 0xb8, 0xe1, 0x86, 0x1f, 0x6e, 0xb9, 0xe1, 0x9f, 0xbf, 0xf9, 0xff, 0xe7, 0xff, 0x2f, 0xff, 0xff, 0xf7, 0xdf, 0x7f, 0x6e, 0xf9, 0xcf, 0xbf, 0x5f, 0xe4, 0xd3, 0xcf, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xff, 0xeb, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0x55, 0xb7, 0xbf, 0x7e, 0xd3, 0xef, 0xbf, 0xdf, 0xfe, 0xff, 0x9b, 0xff, 0xff, 0xfe, 0xff, 0xe2, 0xbf, 0xff, 0xfe, 0xfb, 0xaf, 0x3e, 0xf3, 0xd5, 0x33, 0xdf, 0x7d, 0xf7, 0xcd, 0x7f, 0xff, 0x86, 0xff, 0xef, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xf9, 0xe3, 0x97, 0x3f, 0xfe, 0xf8, 0xe5, 0xdf, 0xbf, 0xf9, 0xff, 0xff, 0x8b, 0xfb, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x7e, 0xff, 0xeb, 0x8d, 0xbf, 0xfe, 0xfa, 0xab, 0xaf, 0xbc, 0xfe, 0xf5, 0xd7, 0x5f, 0x7f, 0xfc, 0xf5, 0x57, 0x5f, 0xff, 0x9b, 0xff, 0xf6, 0xfd, 0xf7, 0xf3, 0xfd, 0x3d, 0xff, 0xef, 0xb6, 0xbf, 0xfd, 0xf6, 0xf9, 0xe6, 0xdf, 0xed, 0xf6, 0xff, 0xf9, 0xc6, 0xff, 0xbf, 0xff, 0xdf, 0xce, 0xff, 0xe9, 0xf7, 0xbf, 0x7f, 0xfb, 0xf6, 0x6f, 0x3f, 0x7d, 0xbf, 0xf3, 0xff, 0xef, 0xbb, 0xf9, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xff, 0xf7, 0x7f, 0xff, 0xfe, 0xff, 0xbf, 0xb7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x6f, 0xfc, 0xff, 0xfd, 0x70, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xfd, 0xbf, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x99, 0x7f, 0xff, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x7e, 0xff, 0xd7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe6, 0xff, 0xff, 0xfe, 0xff, 0xdd, 0xbf, 0xef, 0xfd, 0xfb, 0xef, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xf9, 0xff, 0xbf, 0xbd, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xef, 0xfb, 0xef, 0x7b, 0xff, 0xfe, 0xfb, 0xfe, 0xff, 0xff, 0x67, 0xfe, 0xff, 0xd7, 0xdf, 0x7f, 0xff, 0xff, 0xbd, 0xef, 0xff, 0xfd, 0xdf, 0xbf, 0xbf, 0xfe, 0xff, 0xeb, 0xff, 0xff, 0xff, 0x99, 0xdf, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x3f, 0xf7, 0xbd, 0x77, 0xdf, 0xf7, 0xfe, 0x7b, 0xf6, 0xbf, 0xff, 0xfe, 0x7f, 0xe6, 0xbf, 0xff, 0xff, 0xfb, 0xfb, 0xbf, 0x7f, 0xc7, 0x7f, 0xf7, 0xfd, 0xf7, 0xbf, 0xff, 0xfe, 0xfd, 0xef, 0xbf, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xeb, 0xaf, 0xfb, 0xbf, 0xfb, 0xff, 0xf7, 0xdf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6e, 0xfe, 0xff, 0xf8, 0xfb, 0xef, 0x7f, 0xbf, 0xfc, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xfd, 0xbf, 0x7b, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xcf, 0x86, 0xff, 0xeb, 0x2f, 0xbf, 0xfe, 0x67, 0x2e, 0xe5, 0xe6, 0x9a, 0xdf, 0x7c, 0xf3, 0xcd, 0x37, 0xdf, 0x7c, 0x53, 0xfd, 0x8f, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcb, 0x3e, 0xdb, 0x6c, 0xff, 0x9b, 0xdf, 0x7f, 0xff, 0xfe, 0xfb, 0xef, 0xd4, 0xff, 0x6d, 0xfe, 0xf7, 0xdf, 0x5f, 0x7f, 0xff, 0xe7, 0xfb, 0xfe, 0xcf, 0xff, 0x7e, 0xfd, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xd5, 0xff, 0x9b, 0xf5, 0xa5, 0x97, 0x5e, 0xfa, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0x7f, 0x5b, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x7d, 0xfd, 0xd7, 0xe6, 0xfe, 0xeb, 0xa6, 0xbf, 0x6e, 0xff, 0xfb, 0xe6, 0xfd, 0x72, 0xbf, 0xfd, 0xfe, 0xfb, 0xe7, 0xbf, 0xff, 0x5e, 0xfb, 0xbb, 0x99, 0xfe, 0x6f, 0xbd, 0xf7, 0xfe, 0xff, 0x7e, 0xb9, 0xef, 0xce, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0x6c, 0xec, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xbf, 0xff, 0x3e, 0xef, 0xf9, 0x6f, 0xfd, 0x9f, 0x7f, 0xfb, 0xff, 0xff, 0xb5, 0xbe, 0x99, 0xfb, 0xaf, 0xbf, 0xfe, 0xfa, 0xff, 0xef, 0xbd, 0xc3, 0xce, 0x7e, 0x42, 0xe9, 0x8f, 0x3f, 0x7c, 0xfe, 0x61, 0x05, 0xef, 0xe6, 0xfd, 0xfb, 0xee, 0xbb, 0xef, 0xbf, 0xff, 0x76, 0xff, 0xf5, 0xae, 0xbf, 0xf6, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xbd, 0x79, 0xff, 0x3e, 0xfb, 0xec, 0xb3, 0xce, 0x6f, 0x9f, 0x7f, 0xfe, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0x7f, 0x6f, 0xec, 0x9f, 0xfe, 0xfa, 0xe9, 0xb7, 0xdf, 0xbe, 0xf3, 0xcf, 0x7f, 0xfe, 0xf9, 0xc7, 0x1f, 0x7f, 0xfe, 0xf9, 0xe7, 0xbf, 0x99, 0xf9, 0x6b, 0x9f, 0x3d, 0xb6, 0xfd, 0xf3, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xcf, 0xe6, 0xfe, 0xdb, 0x6b, 0xaf, 0xdd, 0xbf, 0xff, 0xff, 0xfe, 0xfb, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xbb, 0xa9, 0xdf, 0xfb, 0xed, 0xbf, 0xff, 0xfe, 0xdb, 0x1f, 0x7f, 0xfc, 0xa3, 0x8f, 0x3f, 0xfe, 0xf8, 0xe3, 0x8f, 0x3f, 0xfe, 0x6a, 0xd8, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xf7, 0xea, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0xdf, 0x9b, 0xff, 0xe7, 0xbf, 0xff, 0xfe, 0xfb, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xf7, 0xff, 0xe6, 0xff, 0xef, 0xb2, 0xc7, 0x1e, 0xfb, 0xec, 0x73, 0xcb, 0x0d, 0x6f, 0xb8, 0xe5, 0x8e, 0x1b, 0x7e, 0xb8, 0xe1, 0x97, 0xbf, 0xf9, 0xff, 0xf6, 0xf9, 0xe7, 0x9f, 0xff, 0xfb, 0x9f, 0x7f, 0xdf, 0xf3, 0x4e, 0x3b, 0xef, 0xbe, 0xfb, 0xce, 0xbb, 0xfd, 0x6f, 0xfe, 0xdf, 0x3e, 0xfb, 0xec, 0xb3, 0xef, 0xfe, 0xbf, 0xfe, 0xf2, 0x8f, 0x7f, 0xfe, 0xf9, 0xe3, 0x97, 0x5f, 0xfe, 0xfd, 0x9b, 0xff, 0x3f, 0xeb, 0x9e, 0x7b, 0xee, 0xfb, 0xfe, 0xbb, 0x67, 0x7e, 0xf5, 0xdd, 0x37, 0x4f, 0x3d, 0xf3, 0xcd, 0x73, 0xff, 0x86, 0xff, 0xdb, 0xec, 0xb3, 0xcf, 0xbe, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xfe, 0xfb, 0xe7, 0xbf, 0x7f, 0xff, 0xfd, 0xff, 0xbf, 0xf9, 0xff, 0xf4, 0xdb, 0x4f, 0xfe, 0xf7, 0xf6, 0xcb, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x6f, 0xfe, 0xbf, 0xab, 0xaf, 0xbb, 0xfe, 0xf2, 0xab, 0xad, 0x3f, 0xfe, 0xf5, 0x57, 0x5f, 0x7f, 0xed, 0xf1, 0xd7, 0x5f, 0xff, 0x9a, 0xfe, 0x3f, 0x3f, 0xdf, 0x7f, 0xcd, 0xcf, 0xf7, 0xef, 0xb3, 0xbe, 0x7d, 0xfe, 0xb9, 0xe7, 0x9f, 0xff, 0xf7, 0xfb, 0xff, 0xc6, 0xef, 0xfb, 0xff, 0xf7, 0xff, 0x7a, 0xff, 0xf7, 0x9f, 0xdf, 0xbd, 0xf3, 0x4e, 0xff, 0xfd, 0xfc, 0xfd, 0xdf, 0xfb, 0x9f, 0xf9, 0xfb, 0xf3, 0xff, 0x7f, 0xfd, 0xfd, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xde, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xd7, 0xfe, 0xfa, 0xbf, 0xbf, 0x3f, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x9b, 0xfd, 0xff, 0x7f, 0xed, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xef, 0xfe, 0xf7, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa6, 0xff, 0x7b, 0xff, 0xef, 0xf7, 0xbf, 0xcf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0x7f, 0xbf, 0xff, 0xf7, 0xbf, 0xf9, 0xf7, 0xff, 0x7f, 0xff, 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xf7, 0x5f, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xef, 0xdf, 0xdf, 0xbf, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x9b, 0xff, 0xfe, 0xef, 0xff, 0xcf, 0x23, 0xf7, 0xff, 0xf7, 0x3d, 0xef, 0xbb, 0xef, 0xfe, 0x7b, 0xef, 0xb3, 0xff, 0xff, 0xff, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfd, 0xfe, 0xef, 0xef, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xef, 0xff, 0xfb, 0x7e, 0xf7, 0xfd, 0xf3, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0x7f, 0xdf, 0xff, 0x6f, 0xfc, 0xff, 0xfe, 0xbb, 0xfd, 0x87, 0xfb, 0xfd, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x99, 0xff, 0xbf, 0xbf, 0x7e, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xa6, 0xff, 0xeb, 0xaf, 0xbf, 0xfc, 0x7f, 0xbe, 0xf9, 0xe7, 0xfb, 0xdf, 0x5a, 0xf9, 0xcd, 0x37, 0xdf, 0x7c, 0x5f, 0xff, 0xad, 0xd9, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xc7, 0x7e, 0xfe, 0x7c, 0xe7, 0x3b, 0xbd, 0xbf, 0xf3, 0xce, 0x3b, 0xef, 0xd7, 0xff, 0x6c, 0xde, 0xf7, 0xdf, 0x7f, 0xff, 0xff, 0xd7, 0xfb, 0xff, 0xdf, 0xff, 0xfe, 0xf5, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xf5, 0xff, 0x1b, 0xf5, 0xa5, 0x97, 0x5e, 0xfa, 0xff, 0xe9, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0x7f, 0x3d, 0x57, 0xe6, 0xbe, 0xe9, 0xa6, 0x9b, 0x5e, 0xff, 0x7b, 0xff, 0xff, 0xf3, 0xbf, 0xdf, 0xea, 0xfb, 0xe7, 0xbf, 0x7f, 0x5e, 0x7f, 0xbb, 0x91, 0x7f, 0xef, 0xbf, 0xff, 0xd6, 0xfb, 0xda, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0x64, 0xec, 0xef, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbd, 0xff, 0x7f, 0xfb, 0xe5, 0xb7, 0xf4, 0xbf, 0x19, 0xfb, 0xaf, 0xbf, 0xfe, 0x3a, 0xff, 0xef, 0xfd, 0xff, 0x0f, 0x7f, 0xc2, 0x89, 0xa7, 0xbe, 0xfc, 0xea, 0x63, 0xfd, 0x6f, 0xc6, 0xfd, 0xfb, 0xee, 0xbb, 0xff, 0xff, 0xff, 0xf6, 0xdb, 0xf5, 0xae, 0xbf, 0xfe, 0xfa, 0x6b, 0xaf, 0xbf, 0xfe, 0xb7, 0x9d, 0x79, 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xfe, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0xff, 0x7b, 0x6f, 0xae, 0xbf, 0x7e, 0xfa, 0xeb, 0xa7, 0xdf, 0x1e, 0xfb, 0xcf, 0x7f, 0xfe, 0xf9, 0xe7, 0x1f, 0x7f, 0xfc, 0xf1, 0xf7, 0xa9, 0x9b, 0xf9, 0x67, 0x8f, 0xfd, 0xf6, 0xf8, 0xfb, 0xdf, 0xff, 0xdf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xdf, 0xce, 0x66, 0x7e, 0xdb, 0x6b, 0xbf, 0xed, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xb3, 0xb9, 0xf5, 0xfb, 0xef, 0xaf, 0xbf, 0xfe, 0xda, 0xef, 0x7f, 0xfc, 0xeb, 0xaf, 0xbf, 0xfe, 0xf8, 0xe3, 0x8f, 0xdb, 0xdf, 0x6e, 0xde, 0xbf, 0xfd, 0xf6, 0xc9, 0x2f, 0xbf, 0x7a, 0xf7, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xee, 0xdf, 0x9b, 0xff, 0xe7, 0xbf, 0x7f, 0xfa, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xe6, 0xff, 0xef, 0xb3, 0x8f, 0x3e, 0xfa, 0xec, 0xf3, 0xcf, 0x0d, 0x7f, 0xf8, 0xe1, 0x87, 0x1b, 0x7e, 0xb8, 0xe1, 0x97, 0xbd, 0xf9, 0xff, 0xfe, 0xfb, 0xaf, 0xbf, 0xfc, 0xff, 0xff, 0x7f, 0xdf, 0xf3, 0xce, 0x3b, 0xef, 0xbe, 0xfb, 0xee, 0xfb, 0xfd, 0x6f, 0xfe, 0xff, 0xfe, 0xfb, 0xeb, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x8f, 0x5f, 0xfe, 0xf8, 0xe3, 0x8f, 0x3f, 0xfe, 0xfd, 0x9b, 0xff, 0xbf, 0xff, 0xfe, 0xfa, 0xeb, 0xff, 0xfe, 0xff, 0x67, 0x7e, 0xf5, 0xcd, 0x57, 0x4f, 0x3d, 0xf5, 0xd4, 0x7f, 0xff, 0xe6, 0xff, 0xfb, 0xef, 0xbf, 0xfe, 0xf2, 0xef, 0x7f, 0xff, 0xef, 0xff, 0xfe, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xbf, 0xf9, 0xff, 0xf6, 0xfb, 0xef, 0xff, 0xff, 0xe3, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x6f, 0xfa, 0x5f, 0xeb, 0xae, 0xbf, 0xfe, 0xda, 0xeb, 0xaf, 0x3d, 0xfe, 0xd1, 0xd7, 0x4f, 0x7f, 0xfd, 0xf5, 0xc7, 0x4f, 0x7f, 0x9b, 0xbd, 0xef, 0xff, 0xff, 0xfd, 0xbc, 0xff, 0xff, 0xef, 0xd3, 0x9d, 0x7f, 0xb6, 0xf9, 0xe7, 0xbf, 0x7f, 0xee, 0xff, 0xf9, 0xc6, 0xfe, 0xff, 0xfe, 0xeb, 0xc7, 0xff, 0xfe, 0xff, 0xaf, 0xff, 0xf5, 0xcb, 0x5f, 0xef, 0xfd, 0xfb, 0xf7, 0xff, 0xff, 0xbf, 0xf9, 0xfb, 0xff, 0xbd, 0xff, 0xef, 0x5d, 0xff, 0xbf, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xff, 0xbb, 0xff, 0xff, 0x6f, 0xfe, 0x37, 0xff, 0xfa, 0xef, 0xbf, 0xff, 0x66, 0xfa, 0xfe, 0xfd, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xe7, 0xdf, 0x99, 0xff, 0xfb, 0xbf, 0xfe, 0x7d, 0xf7, 0xfd, 0xb5, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0x5f, 0xff, 0x7f, 0xe6, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xf9, 0xe3, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0x7b, 0xff, 0xef, 0xff, 0xde, 0x7f, 0xff, 0xbb, 0xf9, 0xf7, 0xf8, 0x5b, 0xff, 0xbf, 0xfd, 0xfe, 0xff, 0x7e, 0xbe, 0xef, 0xed, 0xa7, 0xfd, 0x5d, 0xfb, 0xb5, 0xd7, 0xff, 0x67, 0xfe, 0xf9, 0xdf, 0xfb, 0xdf, 0xb7, 0xde, 0xfe, 0xdf, 0xff, 0xee, 0xff, 0x7d, 0xf7, 0xfe, 0xdf, 0xff, 0xbb, 0xee, 0x7b, 0x99, 0xff, 0xcf, 0x3b, 0xc3, 0xfc, 0x73, 0xff, 0xff, 0xfb, 0xfc, 0xbf, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe6, 0xff, 0xde, 0x77, 0xdf, 0xf5, 0xd7, 0xff, 0xfd, 0xfe, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xbf, 0xf9, 0xff, 0xfd, 0xf7, 0xdf, 0x77, 0xef, 0xda, 0xef, 0xd7, 0xfd, 0xff, 0xf7, 0xd7, 0xff, 0xfb, 0xff, 0xf7, 0x9f, 0xf7, 0x6f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0x6f, 0xfd, 0xf7, 0xdf, 0x5f, 0x3f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xbf, 0xfa, 0xff, 0xff, 0xdf, 0xff, 0xbd, 0xf7, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0x86, 0x3f, 0xbf, 0xec, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xe7, 0xcb, 0xdf, 0xdf, 0xfe, 0xe7, 0xfb, 0xf7, 0xf7, 0xdf, 0xff, 0x8f, 0xd9, 0xcf, 0xf7, 0xdb, 0x7f, 0xff, 0xfd, 0xef, 0xff, 0xfc, 0xd6, 0xf7, 0xfd, 0xff, 0xf3, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x6d, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xf5, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xf5, 0xff, 0x79, 0x67, 0x3f, 0xfd, 0xff, 0x9b, 0xf5, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xd3, 0x4f, 0xfd, 0xff, 0xf7, 0xdf, 0x6f, 0xff, 0xd7, 0xe6, 0xfe, 0x6f, 0xff, 0xbd, 0xf7, 0xda, 0x7f, 0xf6, 0xff, 0xf7, 0xbf, 0xdf, 0xef, 0xbf, 0xff, 0xb7, 0xf7, 0xd6, 0xab, 0xbb, 0x99, 0xff, 0xeb, 0xbf, 0xbf, 0x9e, 0xfa, 0xdb, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xf9, 0xe3, 0x7f, 0xaf, 0x3c, 0xf3, 0xae, 0x6c, 0xec, 0xff, 0xfa, 0xef, 0x7b, 0xfb, 0xfe, 0xfe, 0x7f, 0xfd, 0xfd, 0xef, 0xfd, 0xf5, 0xff, 0x7f, 0x7f, 0xff, 0xfd, 0xbd, 0x99, 0xfb, 0xbf, 0xfd, 0xf7, 0x4b, 0x7d, 0xa5, 0xfd, 0x5f, 0x4f, 0x7c, 0xe2, 0xff, 0xfd, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xe6, 0xfd, 0xdf, 0x7f, 0xff, 0x6d, 0xb7, 0xff, 0xfe, 0xf3, 0xf5, 0xae, 0xff, 0xed, 0xb7, 0xdf, 0x7f, 0xfb, 0xed, 0xff, 0xbd, 0x79, 0xff, 0xe7, 0x9f, 0x7f, 0xe6, 0x19, 0x7f, 0xdd, 0x7f, 0xfe, 0xf3, 0xdf, 0x7e, 0xfb, 0xbf, 0xbf, 0xff, 0xff, 0x73, 0x6f, 0xec, 0xff, 0xf0, 0xe3, 0x4f, 0x3f, 0xfe, 0x6e, 0xf3, 0xcf, 0x7f, 0xae, 0x7d, 0xf6, 0xd8, 0x6f, 0x9f, 0xfd, 0xf7, 0xbf, 0x99, 0xf9, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xf7, 0xcf, 0xff, 0xdf, 0xff, 0xee, 0xdf, 0xff, 0x7e, 0xff, 0xfd, 0xbf, 0xff, 0xcf, 0xe6, 0xbe, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xfe, 0xfb, 0xff, 0xfb, 0x5f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbb, 0xa9, 0x7f, 0xc7, 0x5f, 0x7f, 0xdd, 0xf5, 0xdb, 0xfd, 0x2f, 0xfc, 0xe3, 0xfd, 0xf7, 0x6f, 0x7f, 0xbf, 0xfd, 0xf7, 0xff, 0x6a, 0xde, 0xff, 0x79, 0xe7, 0x9d, 0x7f, 0xfe, 0xdb, 0xf7, 0x8b, 0xff, 0x7d, 0xd5, 0x55, 0xbe, 0x5f, 0x7d, 0xb5, 0xd5, 0xdf, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xeb, 0xaf, 0xdb, 0xff, 0xfa, 0xff, 0xff, 0xf7, 0xdf, 0xfe, 0xd6, 0x5d, 0x77, 0xdd, 0xff, 0xe6, 0xff, 0xdf, 0xf0, 0x83, 0x2e, 0xba, 0xf8, 0xf3, 0x8f, 0x0c, 0x6f, 0xf8, 0xe3, 0x9f, 0x1f, 0x74, 0xd0, 0x45, 0x9f, 0xbf, 0xf9, 0xff, 0xf3, 0xed, 0x77, 0xfe, 0xf9, 0xfb, 0x9f, 0x2f, 0xde, 0xf3, 0xf4, 0xd3, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0x6f, 0xfe, 0xbf, 0x2f, 0xbe, 0xfc, 0xfa, 0xeb, 0xff, 0xff, 0xea, 0xf2, 0x0f, 0x7d, 0xf4, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xfd, 0x9b, 0xff, 0x3f, 0xe6, 0x9a, 0xef, 0xbe, 0xbb, 0xbe, 0xbf, 0x6a, 0x7e, 0xf5, 0xcd, 0x77, 0x7f, 0x7c, 0xf1, 0xd5, 0x77, 0xff, 0xe6, 0xff, 0xfb, 0xee, 0xfb, 0xef, 0xbf, 0xff, 0x7f, 0xbb, 0xee, 0xff, 0xfe, 0xf9, 0xe7, 0xdb, 0x7f, 0xfe, 0xf9, 0xff, 0x8f, 0xf9, 0xdf, 0xf2, 0xfb, 0xff, 0xff, 0xbf, 0xf4, 0xff, 0xfb, 0xff, 0xe7, 0xe5, 0x97, 0xfe, 0x7f, 0xf9, 0xe5, 0x97, 0xff, 0x6f, 0xea, 0xbf, 0xab, 0xae, 0xbf, 0xf6, 0x7a, 0xcb, 0xaf, 0xbf, 0xfa, 0x75, 0x57, 0x5d, 0x7f, 0xad, 0xf5, 0xd6, 0x5a, 0xff, 0x9a, 0xff, 0x77, 0xfb, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfe, 0x33, 0x9f, 0xeb, 0xf5, 0xff, 0xbf, 0x7f, 0xfe, 0xf9, 0xf7, 0xff, 0xc6, 0xff, 0xfb, 0x9f, 0x7f, 0xff, 0xf9, 0xff, 0xf7, 0x9e, 0x6f, 0xf5, 0xff, 0xed, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x9e, 0xd9, 0x77, 0xff, 0xff, 0xdb, 0xdd, 0x5f, 0xfa, 0xd5, 0xb4, 0xf8, 0xff, 0xff, 0xff, 0xef, 0xf9, 0xe7, 0xff, 0xff, 0xe6, 0x6f, 0xfe, 0xbf, 0xfe, 0xda, 0xef, 0xaf, 0xbf, 0xec, 0xfa, 0xff, 0xff, 0x5f, 0xfd, 0xf5, 0xc7, 0x5f, 0x4f, 0xf5, 0xd5, 0xff, 0x9b, 0xfd, 0x9e, 0x7d, 0xee, 0xfd, 0xef, 0xbf, 0xbf, 0xf9, 0xff, 0x7f, 0x3f, 0xff, 0xfc, 0xbb, 0xdf, 0x7e, 0xbf, 0x6d, 0xff, 0xe6, 0xff, 0x7f, 0x9f, 0xff, 0xfe, 0xbe, 0xfb, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xf5, 0xff, 0xef, 0x7d, 0xf7, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xfb, 0x8f, 0xfb, 0xff, 0xf7, 0x7f, 0xfd, 0xef, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0xfe, 0xbf, 0xef, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0x3f, 0xef, 0xdf, 0xe7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0x7d, 0xcf, 0x17, 0xef, 0xff, 0xfd, 0xf7, 0x3f, 0xff, 0xfc, 0xff, 0x17, 0xef, 0xbf, 0xcf, 0xe7, 0xff, 0xdf, 0xff, 0xff, 0x66, 0xdf, 0xdf, 0x7f, 0xfd, 0xff, 0x7f, 0xff, 0x7f, 0xbf, 0xd9, 0xff, 0xbb, 0xff, 0xff, 0xdf, 0xef, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf1, 0xe7, 0x7d, 0xd7, 0xfe, 0xda, 0xe3, 0x7b, 0xff, 0x7d, 0xf7, 0xdb, 0x6f, 0xff, 0xec, 0xd7, 0xdf, 0xff, 0x6f, 0xdc, 0x6f, 0xff, 0xfb, 0xeb, 0x9f, 0xfe, 0xfe, 0xfb, 0xef, 0xf7, 0x7f, 0xdc, 0xd1, 0xc7, 0x0f, 0x3f, 0xfc, 0xf0, 0xff, 0x99, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xf7, 0xbf, 0x7a, 0xdf, 0xfb, 0xf7, 0xfb, 0xfd, 0xf7, 0xff, 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xa6, 0xff, 0x3f, 0xff, 0xfe, 0xff, 0xc7, 0x3b, 0xbf, 0xa4, 0xf7, 0xbf, 0x37, 0x7f, 0xfc, 0xfd, 0x87, 0xda, 0x7f, 0xff, 0x8f, 0xf9, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xfb, 0xfe, 0xdb, 0xf9, 0xff, 0xff, 0xad, 0xf2, 0xdf, 0x7f, 0x9b, 0xfd, 0xf7, 0xff, 0x6d, 0xda, 0xff, 0xfe, 0x3f, 0xfb, 0xbf, 0xf7, 0xda, 0xfe, 0xdb, 0x5c, 0xef, 0xbd, 0xdd, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xff, 0x1b, 0xf7, 0xed, 0xf3, 0xfe, 0xfb, 0xef, 0xb5, 0xd7, 0xfe, 0x35, 0xd7, 0x6b, 0xaf, 0xbd, 0xf6, 0xda, 0x6b, 0xaf, 0xfd, 0xd7, 0xe6, 0xfe, 0xee, 0xb5, 0x97, 0xff, 0xff, 0xfb, 0xbf, 0x99, 0x67, 0xff, 0xf2, 0x7f, 0xb7, 0xdd, 0xf6, 0xda, 0x6b, 0xaf, 0xbb, 0x99, 0xff, 0x7b, 0xf9, 0xe6, 0xdb, 0xfb, 0xfe, 0x7b, 0xff, 0xfe, 0xdf, 0xdc, 0x77, 0xcf, 0x2d, 0xd7, 0x5c, 0x73, 0xed, 0x6c, 0xe6, 0xff, 0xfe, 0xdb, 0xfb, 0xb5, 0xff, 0xfe, 0xfe, 0x7b, 0x5f, 0xff, 0xfd, 0xfd, 0xf5, 0xdf, 0x7f, 0xff, 0xfd, 0xbf, 0x19, 0xfb, 0xef, 0xbd, 0xf6, 0x5e, 0xed, 0xbf, 0xfd, 0xf6, 0xef, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xe6, 0xbd, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xee, 0xff, 0x6f, 0xfe, 0xff, 0xdd, 0x77, 0xdf, 0x7d, 0xf7, 0xdd, 0xff, 0xbd, 0x79, 0x17, 0x6f, 0xbe, 0xfd, 0xfe, 0xff, 0x2f, 0xff, 0xff, 0xf6, 0xb7, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0x7f, 0x6f, 0xec, 0xdf, 0x7e, 0xfb, 0xec, 0xbf, 0xbf, 0xfe, 0x7a, 0xed, 0x7e, 0x5f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xbf, 0x99, 0xfb, 0xf6, 0xfb, 0x6f, 0xff, 0xff, 0xef, 0xbf, 0x7f, 0xff, 0xfd, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0x4f, 0xe6, 0x7e, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xdb, 0xef, 0xfb, 0xdb, 0xff, 0xb7, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xdf, 0xff, 0xbb, 0xb9, 0xdf, 0x5b, 0x6f, 0xbf, 0xdd, 0xde, 0xdf, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6a, 0xd8, 0xfd, 0xeb, 0xab, 0xbf, 0x36, 0xff, 0xeb, 0x6f, 0x9f, 0xdd, 0xb5, 0xfb, 0xee, 0xbb, 0xef, 0xbe, 0xfb, 0xee, 0xce, 0x9b, 0xff, 0xaf, 0xbf, 0xff, 0xfa, 0xef, 0xaf, 0xf3, 0xff, 0xbb, 0xdf, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5b, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xef, 0xb3, 0xcf, 0x3e, 0xfb, 0xe8, 0xf3, 0xcf, 0x3f, 0xfd, 0xd1, 0x47, 0x1f, 0x7d, 0xf4, 0xd1, 0xe7, 0x9f, 0xbf, 0xf9, 0xef, 0xfb, 0xef, 0xbf, 0x9f, 0xfe, 0xfa, 0xeb, 0x7f, 0xff, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xdf, 0x6f, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xa7, 0xbf, 0xfe, 0xfa, 0xdf, 0xdf, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xbf, 0xfe, 0xfb, 0xeb, 0xeb, 0xff, 0xbe, 0xfa, 0xef, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfa, 0xff, 0xaf, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x5f, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xca, 0x6f, 0xbf, 0xfc, 0xf7, 0xff, 0x2f, 0x3f, 0xf2, 0xe9, 0x7f, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xf7, 0x6f, 0xfe, 0x7f, 0xa3, 0xad, 0x39, 0xda, 0xea, 0x6b, 0xaf, 0x3e, 0xbe, 0x75, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0xff, 0x9a, 0xff, 0xff, 0xfe, 0xff, 0xee, 0xcd, 0xef, 0xff, 0xff, 0xf1, 0xff, 0xeb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xef, 0xdf, 0xff, 0xff, 0xf7, 0xce, 0xff, 0xff, 0xff, 0xfb, 0xbf, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf9, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xab, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xdb, 0xef, 0xff, 0xff, 0x6f, 0xfc, 0xff, 0xfe, 0xfb, 0xef, 0xef, 0xbf, 0xfe, 0xfb, 0xc1, 0x77, 0x5f, 0xdd, 0xf7, 0xdf, 0x7f, 0xef, 0xfd, 0xb7, 0xff, 0x9b, 0xff, 0xff, 0xbf, 0xff, 0xbe, 0xdf, 0x6e, 0xbf, 0xff, 0xef, 0xed, 0xdf, 0x7e, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xef, 0xff, 0xe6, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xff, 0xf6, 0xbf, 0xff, 0xfe, 0xfb, 0xf1, 0xf7, 0xdf, 0xff, 0xbf, 0xe9, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb, 0x7a, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xfb, 0x7f, 0xff, 0xbd, 0x7f, 0xdd, 0xff, 0xdf, 0xff, 0xff, 0x3f, 0xff, 0xbf, 0xff, 0x6f, 0xfe, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xdf, 0xef, 0x5f, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0x99, 0xff, 0xbf, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xfe, 0x73, 0xbc, 0x7f, 0xff, 0x7f, 0xfe, 0xff, 0xef, 0xff, 0xef, 0xff, 0xff, 0x66, 0xff, 0xcf, 0x3e, 0xff, 0xfc, 0xf3, 0xdf, 0x3f, 0xdf, 0xfc, 0xef, 0x9f, 0xfd, 0xfe, 0x79, 0xef, 0x9f, 0x7f, 0xfe, 0x9f, 0xf9, 0xff, 0xbf, 0xdd, 0xff, 0x5f, 0x7d, 0xb3, 0xcf, 0x7f, 0xff, 0xdf, 0x6f, 0xff, 0x7f, 0xfe, 0xff, 0xee, 0xbf, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfb, 0xef, 0xbe, 0x3f, 0xfe, 0x7b, 0xce, 0x75, 0xff, 0xbd, 0xf6, 0xdd, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0x7f, 0xbf, 0xfd, 0xfd, 0xdf, 0xff, 0xfe, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa6, 0xff, 0xaf, 0xbf, 0xff, 0xfe, 0xfb, 0xe7, 0xbf, 0xef, 0xdf, 0xf7, 0xdf, 0x7f, 0xdf, 0xf9, 0xf7, 0xde, 0x7f, 0xff, 0xbf, 0xf9, 0xff, 0xfc, 0xf3, 0xcf, 0x37, 0xff, 0xdd, 0xf3, 0xcb, 0x7f, 0xfe, 0xf9, 0xe7, 0x97, 0x7f, 0xfe, 0xf9, 0xe7, 0xff, 0x6f, 0xfe, 0xbb, 0xfe, 0xfe, 0xeb, 0xef, 0xaf, 0xff, 0xbe, 0xfb, 0xdf, 0x7e, 0xef, 0xed, 0xf7, 0xcd, 0x7a, 0xff, 0xfc, 0xff, 0x9b, 0xff, 0xdf, 0x7f, 0xfa, 0xf9, 0xa7, 0xdf, 0x7e, 0xfa, 0xfd, 0xef, 0x3f, 0xfd, 0xfe, 0xd3, 0xef, 0x3f, 0xfd, 0xf4, 0xff, 0xe6, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xde, 0x7f, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xbf, 0xf9, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0x7f, 0xfb, 0xfd, 0xf7, 0xf7, 0xff, 0xff, 0xbf, 0xb7, 0xbf, 0xff, 0xf6, 0xfb, 0xef, 0xbe, 0xff, 0x7e, 0xfb, 0xfe, 0x9b, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x7f, 0xff, 0xf7, 0xfd, 0xff, 0xbf, 0xff, 0xdf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xf9, 0xf7, 0x9f, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xcf, 0xbf, 0xff, 0xfe, 0xbf, 0xb9, 0xff, 0xb7, 0xdf, 0x7e, 0xbb, 0xed, 0xb7, 0xd7, 0x7e, 0xfb, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xf9, 0x6f, 0xfe, 0xff, 0xf7, 0xdf, 0x7f, 0xfb, 0xfd, 0xb7, 0xdf, 0x7e, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xf6, 0xdb, 0xef, 0xbf, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xbd, 0xf7, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbd, 0xf7, 0xbe, 0xfb, 0xef, 0xe6, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xb7, 0xfb, 0xfe, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xfe, 0xea, 0xeb, 0xaf, 0xbf, 0xfe, 0xfe, 0xf7, 0x5f, 0x7f, 0xff, 0xf5, 0xf7, 0x5f, 0x7f, 0xf9, 0x6f, 0xfe, 0xff, 0xfb, 0xef, 0xbf, 0xfb, 0xbe, 0xfb, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7d, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xfc, 0xf3, 0xcf, 0x3d, 0xff, 0xfc, 0xf3, 0xcf, 0x7b, 0xfe, 0xf9, 0xe7, 0x9e, 0x7f, 0xfe, 0xf9, 0xe7, 0xf7, 0xe6, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5b, 0x7f, 0xfd, 0xf5, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xbf, 0xf9, 0xff, 0x5f, 0x7f, 0xfd, 0xe5, 0xd7, 0x5d, 0x7f, 0xfd, 0xf5, 0xaf, 0xbf, 0xfe, 0xf2, 0xeb, 0xaf, 0xbf, 0xfe, 0xf8, 0x6f, 0xee, 0xff, 0xfe, 0xfb, 0x6f, 0xb7, 0xbf, 0xfe, 0xfb, 0x2f, 0x7f, 0xfd, 0xfd, 0xd7, 0xdb, 0x7f, 0xf9, 0xfd, 0xd7, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xe6, 0xfe, 0xdf, 0xee, 0xbf, 0xe7, 0xf6, 0xdf, 0xee, 0xbf, 0xf7, 0x7d, 0xf7, 0xdf, 0x77, 0xff, 0xbd, 0xf7, 0xdf, 0xff, 0xbf, 0xf9, 0xbf, 0x31, 0xf7, 0xd7, 0xfb, 0x7d, 0xb5, 0xf5, 0xb7, 0xd7, 0x9d, 0xfa, 0xdb, 0xad, 0xbf, 0xbd, 0xfa, 0xeb, 0xef, 0x6f, 0xfe, 0xff }; /* rom names */ #define EPPSAMP_ROM_DIVROM0 0 #define EPPSAMP_ROM_DIVROM1 16 #define EPPSAMP_ROM_DIVROM2 32 #define EPPSAMP_ROM_MULROM 48 #define EPPSAMP_ROM_CLKSELROM 64 /* rom locations */ static const unsigned long eppsamp_roms[80] = { 76047, 76213, 75715, 75881, 76215, 76049, 75883, 75717, 75383, 75549, 75051, 75217, 75551, 75385, 75219, 75053, 81993, 81661, 82161, 81829, 82159, 81827, 81995, 81663, 81329, 80997, 81497, 81165, 81495, 81163, 81331, 80999, 87928, 87264, 88094, 87430, 88096, 87432, 87930, 87266, 87596, 86932, 87762, 87098, 87764, 87100, 87598, 86934, 75966, 75302, 76134, 75470, 76132, 75468, 75968, 75304, 75634, 74970, 75802, 75138, 75800, 75136, 75636, 74972, 75946, 75282, 76112, 75448, 76114, 75450, 75948, 75284, 75614, 74950, 75780, 75116, 75782, 75118, 75616, 74952 }; baycomepp-0.10.orig/main/sppafsk_firmware.h0100644000175100017510000022622406735753273017074 0ustar abaaba/*****************************************************************************/ /* * sppafsk_firmware.h -- HDLC packet radio modem for EPP using FPGA utility. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ /* automatically generated, do not edit */ #define SPPAFSK_FIRMWAREDATE "19990628" /* firmware */ static const unsigned char sppafsk_firmware[] = { 0xff, 0x04, 0xe8, 0x8c, 0xf9, 0xfe, 0xff, 0xff, 0xf5, 0xfd, 0xd7, 0xdb, 0xff, 0xbd, 0xfd, 0xff, 0xff, 0xfe, 0xfe, 0xef, 0xef, 0xff, 0xfe, 0xfe, 0xff, 0x9b, 0xff, 0xff, 0xaf, 0xfd, 0xfb, 0xfb, 0xfe, 0xaf, 0xef, 0xff, 0xfe, 0xd7, 0xff, 0x7f, 0xfd, 0xff, 0xd7, 0xff, 0x7f, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xf8, 0xed, 0x9f, 0xff, 0xfe, 0xf8, 0xed, 0x8f, 0x77, 0xfc, 0xf6, 0xc7, 0x6f, 0x7f, 0xfc, 0xf6, 0xc7, 0xef, 0x6f, 0xfe, 0xff, 0xd7, 0x5f, 0x7b, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xf5, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0x9b, 0xff, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xff, 0xc6, 0xff, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xbf, 0xf9, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0x6f, 0xfe, 0xff, 0xfb, 0xaf, 0xbf, 0xfe, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfd, 0xd7, 0xdf, 0x7f, 0xfd, 0xfd, 0xd7, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xc6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xbd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x6f, 0xf4, 0xff, 0xed, 0xb7, 0xdf, 0x7a, 0x7b, 0xed, 0xb6, 0xdf, 0xfe, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x69, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0x7e, 0xfb, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdb, 0x77, 0xff, 0x7d, 0xef, 0xbf, 0xef, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xdb, 0xfe, 0xfb, 0xcd, 0x7f, 0xfe, 0xd9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xf7, 0xff, 0x6f, 0xfe, 0xff, 0xfd, 0xe7, 0xdf, 0x77, 0xff, 0xfd, 0xf7, 0x9f, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0x9b, 0xdd, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xf7, 0xfc, 0xe7, 0x9f, 0x6b, 0xfe, 0xf9, 0xe6, 0x9f, 0x7f, 0xfe, 0xdd, 0x66, 0xff, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xb7, 0xf9, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x5f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfc, 0xf7, 0xff, 0x6f, 0xfe, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xfd, 0xf7, 0xdb, 0xdf, 0x7e, 0xfb, 0xad, 0xbf, 0xef, 0x7e, 0xfb, 0xaf, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xed, 0xe7, 0xff, 0x7b, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xdf, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0x7f, 0xff, 0xdd, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xf3, 0xfb, 0x6f, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0x5f, 0xdf, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfa, 0xfb, 0xff, 0xe6, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0x7f, 0x7f, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xbf, 0x7f, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xef, 0xbf, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfb, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0x7d, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xbf, 0xff, 0xde, 0xb9, 0xcf, 0xff, 0xff, 0xfc, 0xf7, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0x7e, 0xff, 0xf7, 0xfa, 0xd3, 0xaf, 0xbf, 0xfd, 0x7c, 0xbf, 0xff, 0x7f, 0xfe, 0xf4, 0xff, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0x5f, 0xbc, 0xff, 0xfe, 0xff, 0xfb, 0xdf, 0xef, 0x3f, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xfb, 0xff, 0x9f, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xca, 0xaf, 0xbd, 0xfc, 0xff, 0xab, 0xbf, 0xbf, 0xfe, 0xe5, 0xfb, 0x7f, 0x7f, 0xfd, 0xf7, 0xff, 0x5f, 0xff, 0xbf, 0xf9, 0xff, 0xfb, 0xff, 0xb7, 0xfd, 0xf7, 0x7b, 0xeb, 0xbf, 0xff, 0xfd, 0xf7, 0xc7, 0x7f, 0x7f, 0xfd, 0xdf, 0xd7, 0xff, 0x6f, 0xfe, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xfe, 0xef, 0xb7, 0xff, 0xfd, 0xff, 0xdf, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0x9b, 0xfe, 0xbf, 0xe5, 0xc2, 0x2b, 0x3b, 0xff, 0xbf, 0xfe, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xbf, 0x66, 0xff, 0xfb, 0xec, 0xa7, 0x5f, 0xfe, 0xff, 0xaf, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0x7b, 0xfd, 0xfd, 0xf7, 0xdf, 0xff, 0xb7, 0xf9, 0xdf, 0x7e, 0xbb, 0xed, 0xa6, 0xcb, 0x3b, 0xeb, 0xfc, 0xfd, 0xbd, 0xbc, 0xdc, 0xf3, 0xaf, 0xad, 0xfc, 0xfa, 0xff, 0x6f, 0xd4, 0xd7, 0x5e, 0x7b, 0xed, 0xed, 0xff, 0xff, 0x7a, 0xfe, 0xdd, 0x7f, 0xbf, 0xfd, 0xf6, 0xdb, 0xff, 0x3d, 0xfd, 0x5f, 0x99, 0xfb, 0xbf, 0xd9, 0x66, 0x9b, 0x78, 0xff, 0x9f, 0xfe, 0xfb, 0x9e, 0xfe, 0xdf, 0x7f, 0xfe, 0xf9, 0x7f, 0xff, 0xfd, 0xef, 0x66, 0xfe, 0x7b, 0xe5, 0x95, 0x67, 0xde, 0xb9, 0xf1, 0xda, 0x7f, 0xed, 0x7a, 0xff, 0xdd, 0x57, 0x5c, 0x73, 0xdf, 0xbd, 0xb3, 0xb1, 0xff, 0x5e, 0x7b, 0xef, 0xbd, 0xbf, 0xfb, 0xeb, 0x2f, 0x6f, 0xed, 0xfd, 0xf7, 0xff, 0xff, 0xfd, 0xfd, 0xdf, 0xf7, 0x66, 0xec, 0xff, 0xb6, 0xdb, 0x6f, 0xaf, 0xbf, 0xff, 0xfb, 0xdb, 0xdf, 0x7c, 0xff, 0xf7, 0xff, 0xdf, 0xff, 0xfd, 0xfd, 0xbf, 0x99, 0xf7, 0xef, 0xbf, 0xef, 0xbe, 0xff, 0xfe, 0xfb, 0x6f, 0x37, 0xbb, 0xfd, 0xb7, 0xff, 0x7f, 0xfe, 0xed, 0xb7, 0xdf, 0xf6, 0xe6, 0xfd, 0xfb, 0xef, 0xb3, 0xcf, 0x3a, 0xff, 0xf7, 0xf7, 0xdf, 0xff, 0xfb, 0xfb, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbd, 0xb1, 0xff, 0xfa, 0xeb, 0xaf, 0xff, 0x5e, 0x5b, 0x6d, 0xb6, 0xcf, 0xf9, 0xf7, 0xdd, 0x7f, 0x9f, 0xdd, 0xf7, 0xd9, 0xf6, 0x66, 0xe6, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xdf, 0x7f, 0xbf, 0xfd, 0xfb, 0xbf, 0xff, 0xfe, 0xff, 0xe7, 0xff, 0x7f, 0xff, 0x3f, 0x9b, 0xfb, 0xef, 0xbf, 0xfd, 0xf6, 0xff, 0xfe, 0xef, 0xbf, 0xff, 0xff, 0xfd, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xef, 0xe6, 0xfe, 0x7f, 0xff, 0xf5, 0xd7, 0xdf, 0xff, 0xbf, 0xff, 0xfa, 0xe5, 0xd7, 0x7f, 0x7f, 0xff, 0xff, 0xfb, 0x5f, 0xff, 0xbb, 0x79, 0xdf, 0x6f, 0xbf, 0xfd, 0xf6, 0xfb, 0xf7, 0xdb, 0xa7, 0x7f, 0xf5, 0xe5, 0xbb, 0xdf, 0xfe, 0xfb, 0xef, 0x97, 0x7f, 0x6f, 0xfe, 0xff, 0xcf, 0x3a, 0xeb, 0xac, 0xbf, 0xff, 0xfb, 0xcb, 0xdf, 0xf7, 0xfd, 0xf6, 0xdf, 0xef, 0x7f, 0xfd, 0xfe, 0xff, 0x9b, 0xff, 0xff, 0x8f, 0x2e, 0x7a, 0xe8, 0xf3, 0x8f, 0x3e, 0xfa, 0xdc, 0x47, 0x9f, 0x7f, 0xf6, 0xf9, 0x43, 0x9f, 0x7f, 0xfe, 0xe6, 0xff, 0xeb, 0xaf, 0xbf, 0x7e, 0xfa, 0xfb, 0xbf, 0xbf, 0xfe, 0xf5, 0xdf, 0x7f, 0x7f, 0xff, 0xff, 0xd3, 0x5f, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xeb, 0xaa, 0xbf, 0xfe, 0xfb, 0xfb, 0xef, 0x7f, 0xfd, 0xfd, 0xff, 0xdf, 0xff, 0xfd, 0xf5, 0xdf, 0xff, 0x6f, 0xfe, 0xbf, 0xfa, 0xef, 0xbf, 0xfd, 0xbe, 0xff, 0xfb, 0xeb, 0x5f, 0xfd, 0xfd, 0xf7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xaf, 0xff, 0xef, 0xff, 0xff, 0xbf, 0xbf, 0xff, 0xfa, 0xdb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xe6, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf4, 0xd3, 0x4f, 0x2d, 0xfd, 0xe4, 0xaf, 0xf7, 0x7f, 0xf9, 0xe5, 0xff, 0x5f, 0xfe, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xfe, 0xba, 0xeb, 0x2f, 0xbf, 0xea, 0x32, 0xd7, 0x1f, 0x7f, 0xdd, 0x75, 0x57, 0x5f, 0x77, 0xfd, 0x6f, 0xfe, 0xff, 0xfb, 0xef, 0xff, 0xff, 0x7f, 0xff, 0x7d, 0xff, 0xfe, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x1b, 0xff, 0x7f, 0xff, 0xef, 0xbf, 0xfd, 0xfa, 0xfb, 0xfd, 0xf7, 0xff, 0xfb, 0xfe, 0x7f, 0xff, 0xff, 0xef, 0xef, 0xff, 0x7f, 0xe6, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf9, 0xff, 0x3b, 0xd3, 0xcd, 0x3f, 0xff, 0xf8, 0xe3, 0x8f, 0x7f, 0x78, 0xf1, 0xff, 0x5f, 0x7f, 0xb4, 0xfd, 0xc6, 0xff, 0x6f, 0xfc, 0xbf, 0xbb, 0xff, 0xfe, 0xfb, 0x7f, 0xff, 0xff, 0xf7, 0xba, 0x7f, 0xff, 0xff, 0xaf, 0xff, 0xdf, 0xfb, 0x7f, 0xff, 0x99, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xe7, 0xbd, 0xbb, 0xdc, 0xfb, 0xdb, 0x7f, 0xff, 0xff, 0xa7, 0xd7, 0xff, 0x7f, 0xfc, 0xff, 0xc6, 0xff, 0xff, 0xcf, 0x3f, 0xf9, 0xf6, 0xd3, 0x8f, 0x3b, 0xf6, 0xf8, 0xe7, 0xdf, 0x7f, 0xfc, 0xb1, 0xbf, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xdf, 0xfb, 0xe1, 0xf3, 0xf6, 0xfb, 0xff, 0xf7, 0x7f, 0xff, 0xfd, 0xf7, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0x7e, 0xef, 0x3f, 0x59, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0xff, 0xff, 0xf7, 0xf7, 0xff, 0xfb, 0x6f, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xf7, 0xaf, 0xfe, 0xbf, 0xeb, 0xae, 0xbb, 0xf6, 0xf7, 0x53, 0x7b, 0xff, 0xdd, 0xf7, 0xff, 0x4f, 0xbf, 0xbf, 0xf9, 0xff, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0xfb, 0xab, 0xaa, 0xef, 0xee, 0xff, 0x47, 0x1f, 0x7f, 0xfc, 0xff, 0xde, 0xff, 0x6f, 0xfe, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x1b, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xc7, 0xdf, 0x7e, 0xff, 0xfd, 0xf7, 0xdf, 0xdf, 0xff, 0xfd, 0x3f, 0x66, 0xff, 0xff, 0xbf, 0xbf, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xfd, 0xf7, 0xdf, 0xff, 0xb7, 0xf9, 0xff, 0x7f, 0x7d, 0xef, 0xbd, 0xcf, 0x3f, 0xfb, 0xb9, 0xf3, 0x3f, 0xb7, 0xff, 0xf9, 0xe7, 0xff, 0xb7, 0xdf, 0xff, 0x6f, 0xd6, 0xff, 0xdf, 0x7f, 0xeb, 0xfc, 0xf3, 0x9f, 0x7e, 0xef, 0xfc, 0x67, 0xbf, 0xff, 0xf7, 0xdf, 0xef, 0xfd, 0xfd, 0x5f, 0x9b, 0xfb, 0xff, 0xef, 0x1d, 0x7e, 0xfd, 0x6f, 0xdf, 0x1f, 0xff, 0xfd, 0x6d, 0x97, 0xbd, 0xf6, 0xdb, 0xc3, 0x7f, 0xdf, 0xee, 0x66, 0xfe, 0xff, 0xff, 0xfe, 0x7b, 0xbf, 0xcd, 0xf1, 0xfe, 0x2b, 0xdd, 0x73, 0xed, 0x3d, 0x37, 0x5c, 0x73, 0xff, 0xad, 0xb3, 0xb1, 0xff, 0xff, 0xdf, 0xbf, 0xaf, 0xfc, 0xf6, 0xef, 0xef, 0xff, 0x7f, 0xf7, 0xdf, 0x77, 0xff, 0xfd, 0xf7, 0xf7, 0xff, 0x66, 0xee, 0xff, 0xff, 0xf7, 0xeb, 0xaf, 0xff, 0xfc, 0xfe, 0xeb, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xfd, 0xff, 0xbf, 0x9b, 0xf7, 0xff, 0xff, 0xcd, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xfb, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xfd, 0xb7, 0xdf, 0xf6, 0xe6, 0xfd, 0xff, 0x7f, 0xf7, 0x9f, 0xff, 0x9f, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xf3, 0xef, 0x3f, 0xff, 0xfb, 0xfb, 0xcf, 0xbd, 0xb1, 0xff, 0x7b, 0xed, 0xb4, 0xdf, 0x76, 0xe3, 0xec, 0xbf, 0xd7, 0xfd, 0xf7, 0xdb, 0x67, 0xbf, 0xfd, 0xf7, 0xdd, 0xfe, 0x66, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdb, 0x6f, 0xff, 0xfd, 0xff, 0xbf, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x3f, 0x9b, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xa6, 0xfe, 0xff, 0x2f, 0xff, 0xfe, 0xef, 0x9d, 0xb7, 0x9f, 0xff, 0xf5, 0xdf, 0x5f, 0x7f, 0xfd, 0xf5, 0xff, 0xdf, 0xff, 0xab, 0x79, 0xff, 0xff, 0xe9, 0x67, 0xff, 0xfd, 0xe7, 0xdb, 0x7f, 0x7f, 0xf5, 0xe5, 0x93, 0x5f, 0x3e, 0xf9, 0xee, 0xb7, 0x7f, 0x6f, 0xfe, 0xff, 0xff, 0xfa, 0xff, 0x7f, 0x9f, 0xfc, 0xfb, 0xfb, 0x5f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0x8f, 0x1e, 0xff, 0xfc, 0xb3, 0x8f, 0x3f, 0x3f, 0xd4, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0x47, 0x9f, 0x7d, 0xfe, 0xe6, 0xff, 0xff, 0xaf, 0xd7, 0xfe, 0xfb, 0xff, 0xbf, 0xbf, 0x4f, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xeb, 0xef, 0xbf, 0xff, 0xff, 0xeb, 0xff, 0xef, 0xfd, 0xf5, 0xdf, 0x7f, 0xff, 0xfd, 0xf5, 0xf7, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfb, 0xfb, 0xbf, 0xbf, 0xfa, 0xfa, 0xfb, 0x5f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xbf, 0xde, 0xfe, 0xfb, 0xaf, 0xbf, 0xfe, 0x7f, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xbf, 0x4f, 0xff, 0xdf, 0xf6, 0xda, 0x6f, 0xbf, 0xfd, 0xef, 0xa7, 0xbf, 0xfe, 0xfa, 0xcb, 0xf7, 0x5f, 0xfe, 0xbf, 0xe9, 0xff, 0xaf, 0xb7, 0xfe, 0xba, 0xeb, 0xaf, 0xbb, 0xee, 0xba, 0xd7, 0x5b, 0x7d, 0xfd, 0xd5, 0x57, 0x5c, 0x7f, 0xed, 0x6b, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0x3f, 0xff, 0xbe, 0xcb, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xf7, 0xdf, 0xfb, 0xff, 0x1b, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xee, 0xfe, 0xff, 0xfb, 0xef, 0xbf, 0xfb, 0xff, 0xbf, 0xff, 0x7f, 0x66, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0x1f, 0xbf, 0xed, 0x2f, 0xf6, 0xea, 0xbb, 0x7f, 0x7e, 0xfb, 0xe7, 0x83, 0x1f, 0x7f, 0xbc, 0xf5, 0xd7, 0xff, 0x6f, 0xfe, 0xff, 0xbf, 0xff, 0xef, 0xff, 0xbf, 0xfd, 0xfb, 0xff, 0x7f, 0xff, 0xd6, 0xfd, 0xf7, 0xdf, 0xd7, 0xfc, 0xeb, 0xff, 0x9b, 0xff, 0x9f, 0xff, 0xf6, 0xf7, 0xfb, 0xbf, 0xff, 0xf6, 0xb9, 0xde, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xe6, 0xff, 0xff, 0xef, 0xfb, 0xff, 0xef, 0xd3, 0x8f, 0xbf, 0x7d, 0xfc, 0xd6, 0xdf, 0x73, 0xfd, 0xfd, 0xd7, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xdb, 0xff, 0xe3, 0xf7, 0xfb, 0xfd, 0xbf, 0x3f, 0xeb, 0xff, 0xdf, 0xef, 0xfd, 0xfd, 0xff, 0x9b, 0xef, 0x6f, 0xfe, 0xff, 0xef, 0x2f, 0xfe, 0xf7, 0xde, 0xff, 0xff, 0xff, 0x9f, 0x7f, 0xf4, 0xbe, 0x7f, 0xfd, 0xdb, 0xff, 0x9e, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xeb, 0xfb, 0xff, 0xfb, 0xbf, 0xeb, 0xfe, 0xfa, 0xfe, 0xfb, 0x9f, 0xef, 0xff, 0xbd, 0xfe, 0x9b, 0x5f, 0xff, 0xbf, 0xf1, 0xff, 0xfb, 0x7f, 0xff, 0xef, 0xf7, 0xdb, 0xeb, 0x9f, 0xf7, 0x7b, 0xb7, 0xdf, 0x7f, 0xfb, 0xfd, 0xf7, 0xd7, 0xff, 0x67, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xef, 0xff, 0x7f, 0xfd, 0xf7, 0xd7, 0x7f, 0x7f, 0xfd, 0xff, 0xff, 0x9b, 0xfe, 0xef, 0xbd, 0xfe, 0xfe, 0xfb, 0xef, 0xbf, 0x9e, 0x7b, 0x56, 0xff, 0xcd, 0xf7, 0x9f, 0xff, 0xf3, 0xfd, 0xfd, 0xbf, 0x66, 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xfe, 0xef, 0xff, 0xb3, 0x5e, 0xfd, 0x97, 0x4b, 0x67, 0xfd, 0xf5, 0xd2, 0xff, 0xfb, 0xb7, 0xf9, 0xff, 0x3e, 0xeb, 0xef, 0xe7, 0xff, 0x7e, 0xea, 0xb5, 0x7f, 0xa5, 0xf5, 0x56, 0x5b, 0x6d, 0xbd, 0xd5, 0xdf, 0xff, 0x6f, 0xd4, 0xbf, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xde, 0x3f, 0xef, 0x5f, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xff, 0xff, 0x5f, 0x99, 0xfb, 0xff, 0xbd, 0x5e, 0xde, 0x79, 0xff, 0x8b, 0x6e, 0x73, 0xf5, 0x4a, 0x7b, 0xdd, 0xf4, 0xd7, 0x4d, 0x7b, 0xfd, 0xef, 0x66, 0xfe, 0x7f, 0xbf, 0xfe, 0x37, 0xde, 0xbf, 0xf6, 0x9e, 0x6b, 0x5f, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xee, 0xbd, 0xb3, 0xb1, 0xff, 0xff, 0xeb, 0xef, 0xef, 0xf7, 0xff, 0xff, 0xfb, 0x7f, 0xbf, 0xbe, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xd5, 0xf7, 0x66, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xdf, 0x7f, 0x79, 0xed, 0xb5, 0xd7, 0x5e, 0x0b, 0xed, 0xff, 0xbf, 0x99, 0xf7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xcf, 0xbf, 0xbb, 0xdf, 0x77, 0xdf, 0x7d, 0xf7, 0xfd, 0xf7, 0xff, 0xf7, 0xe6, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xe7, 0x5d, 0xcd, 0xf7, 0xd9, 0x65, 0x97, 0x5d, 0xf6, 0xf9, 0xff, 0xbd, 0xb1, 0xff, 0xfb, 0xec, 0xb5, 0xdf, 0xfe, 0xfb, 0x6c, 0x3f, 0x7b, 0xb9, 0xf4, 0xd3, 0x4f, 0x7f, 0xfd, 0xf4, 0xdb, 0xef, 0x66, 0xe6, 0xff, 0x3f, 0xff, 0xfd, 0xf3, 0xff, 0x6f, 0xff, 0xff, 0xdf, 0x7f, 0xdb, 0xec, 0xb1, 0xdf, 0x36, 0x7b, 0x7f, 0x3f, 0x9b, 0xfb, 0xff, 0xf7, 0xef, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xdf, 0x6e, 0xbb, 0xed, 0xb7, 0xdd, 0xfe, 0xff, 0xef, 0xe6, 0xfe, 0xfb, 0xf7, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xdb, 0x8f, 0xd7, 0x5a, 0x6b, 0xad, 0xb5, 0xd6, 0xfe, 0xff, 0xbb, 0x79, 0xff, 0xee, 0xdf, 0xbf, 0xfe, 0xfa, 0xf6, 0xcf, 0xef, 0xff, 0xb3, 0xdf, 0x7f, 0xfd, 0xf5, 0xd7, 0xdf, 0x9b, 0x7f, 0x6f, 0xfe, 0xf7, 0xff, 0xff, 0xfb, 0xee, 0xdb, 0xff, 0xff, 0xfd, 0xf7, 0xfd, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xcf, 0x3f, 0xbb, 0xec, 0xf2, 0xcf, 0x3e, 0xf2, 0xfc, 0x45, 0x0f, 0x7d, 0xf4, 0xd1, 0x47, 0x8f, 0x7d, 0xfe, 0xe6, 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xe5, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xfb, 0xff, 0xeb, 0xaf, 0xfe, 0xef, 0xaf, 0x7f, 0x79, 0xf5, 0xd6, 0x5f, 0x7f, 0xfd, 0xf5, 0xf7, 0xff, 0x6f, 0xfe, 0xff, 0xfb, 0xfb, 0xbf, 0xff, 0xfe, 0xff, 0xfe, 0xef, 0x5f, 0x75, 0xf5, 0xd5, 0x57, 0x5f, 0x7d, 0xb5, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0xbf, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xfe, 0xfb, 0xd7, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xe6, 0xff, 0x5b, 0x2f, 0xbf, 0xfd, 0xf6, 0xff, 0xef, 0xff, 0xfc, 0xec, 0xf7, 0x9f, 0xfe, 0x6a, 0xc9, 0xa7, 0x5f, 0xfe, 0xbb, 0xf9, 0xff, 0xad, 0xb7, 0xde, 0x5a, 0xeb, 0xaf, 0xba, 0x7c, 0x2a, 0xd7, 0x1d, 0x6f, 0xfd, 0xd5, 0x57, 0x5f, 0x7b, 0xed, 0x6f, 0xfe, 0xbf, 0xfb, 0xff, 0x7b, 0xe7, 0xfe, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0xdf, 0xfe, 0xbf, 0xff, 0x9e, 0xfb, 0xff, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xdf, 0xbf, 0xef, 0xfd, 0xf7, 0xef, 0x9f, 0xff, 0xfb, 0xef, 0xfb, 0xff, 0x7f, 0xe6, 0xff, 0xff, 0xf7, 0xfe, 0xfb, 0xef, 0xff, 0xf7, 0xdf, 0xaf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfb, 0x9f, 0xf9, 0xff, 0xff, 0xfb, 0xaf, 0xbf, 0xee, 0xef, 0xef, 0xef, 0x6f, 0x7d, 0x37, 0xf7, 0x9f, 0x5b, 0xb8, 0xf7, 0xd7, 0xff, 0x67, 0xfc, 0xff, 0xbf, 0xf7, 0xef, 0xbf, 0xff, 0xfb, 0xfe, 0xde, 0xdc, 0xbe, 0xff, 0xef, 0xfb, 0xbf, 0xf7, 0xff, 0xab, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xdd, 0xb7, 0xed, 0x7f, 0xff, 0xdf, 0xff, 0xdf, 0x7f, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xdf, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x8f, 0xbf, 0x9f, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0xfe, 0x6f, 0x7e, 0xff, 0xef, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xeb, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0x9b, 0xff, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xef, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xeb, 0xb7, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xdf, 0xfe, 0xff, 0xfc, 0xff, 0xff, 0xfd, 0xf7, 0xdb, 0xef, 0xff, 0xbf, 0xf9, 0xff, 0xfb, 0xe7, 0x17, 0x5f, 0xfe, 0xf9, 0x7d, 0xff, 0xfb, 0x7d, 0xf6, 0xff, 0x5f, 0x77, 0xfd, 0xf5, 0xdf, 0xff, 0x6f, 0xbe, 0xff, 0xfe, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfe, 0xfb, 0xbf, 0xff, 0xbe, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xf7, 0xff, 0x1b, 0xfe, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0x6c, 0xfe, 0xf5, 0xe7, 0xff, 0xf9, 0xfc, 0xf7, 0xf7, 0x54, 0x5f, 0x7d, 0xf5, 0x3f, 0x66, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0x7e, 0xfa, 0xff, 0xf3, 0xfd, 0xff, 0xff, 0xff, 0x7d, 0x3f, 0xff, 0x7f, 0xff, 0xfd, 0xb7, 0xf9, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xdf, 0xeb, 0xff, 0x7f, 0xff, 0xeb, 0xcf, 0xda, 0xda, 0xef, 0xb7, 0xff, 0xfe, 0xff, 0x6f, 0xd6, 0xd7, 0x5e, 0x7b, 0xed, 0xb5, 0xd7, 0xfe, 0xff, 0xf7, 0xbf, 0xfd, 0xb6, 0xf7, 0xda, 0x4b, 0x2f, 0xbd, 0xf4, 0x5f, 0x9b, 0xfb, 0xbf, 0xdb, 0x6e, 0x7b, 0xed, 0xe5, 0xff, 0xff, 0xe7, 0xff, 0xff, 0x5e, 0xff, 0x37, 0xd3, 0x4d, 0x2f, 0xad, 0xee, 0x66, 0xfa, 0xbb, 0xe6, 0xbe, 0x6b, 0xae, 0xb9, 0xff, 0xff, 0xfd, 0xff, 0xbf, 0xdf, 0x7d, 0xaf, 0x7e, 0xfb, 0xeb, 0xb3, 0xb3, 0xb1, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xdb, 0xff, 0xf5, 0xf7, 0xfb, 0xbf, 0xdf, 0xdf, 0xef, 0xff, 0xff, 0xff, 0xff, 0x66, 0xe6, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0x3f, 0xff, 0xfb, 0xae, 0xff, 0xf7, 0xdf, 0x52, 0x7b, 0xed, 0xb5, 0xbf, 0x9b, 0xf5, 0xef, 0xbf, 0xef, 0xbe, 0xfb, 0xfe, 0xfb, 0xff, 0xb7, 0xbb, 0xff, 0xf6, 0xdf, 0x7d, 0xf5, 0xdd, 0x77, 0xdf, 0xf7, 0xe6, 0xfd, 0xfb, 0xef, 0xb3, 0xcf, 0x3e, 0xfb, 0xfc, 0xf7, 0x1f, 0xff, 0xfe, 0x6b, 0xe7, 0x9f, 0x5f, 0x7e, 0xf9, 0xe7, 0xbd, 0xb1, 0xff, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xef, 0xb3, 0xdd, 0x7d, 0x76, 0xdf, 0x4f, 0x3f, 0xbd, 0xf4, 0xd2, 0xff, 0x66, 0xe6, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0x7f, 0xbf, 0xfd, 0xf3, 0xb7, 0xff, 0xff, 0xb1, 0xc7, 0x3e, 0xfb, 0xed, 0x3f, 0x9b, 0xfb, 0xef, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xef, 0xdf, 0xff, 0xfe, 0xfb, 0xff, 0x7f, 0xed, 0xb6, 0xdd, 0x7e, 0xfb, 0xef, 0xa6, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xf8, 0xcd, 0x17, 0xff, 0xfb, 0xed, 0xb7, 0xdf, 0x7e, 0xfb, 0xab, 0x61, 0xff, 0xf7, 0xdd, 0x77, 0xdf, 0xfd, 0xf7, 0xcf, 0x2f, 0xdf, 0xf9, 0xe5, 0x7f, 0xdf, 0x6d, 0xd7, 0x5d, 0x77, 0x7f, 0x63, 0xfe, 0xdf, 0xff, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfe, 0xef, 0xfe, 0xfd, 0xbb, 0xf5, 0xf7, 0xdf, 0x7f, 0xff, 0x7d, 0xff, 0x9a, 0xff, 0xff, 0x8b, 0x3e, 0xfa, 0xe8, 0xa3, 0xcf, 0x3e, 0xf2, 0xdc, 0xe7, 0x1f, 0x3d, 0xf6, 0xd8, 0x67, 0x9f, 0x7d, 0xbe, 0xe6, 0xff, 0xeb, 0xae, 0xbf, 0xfe, 0xfa, 0xeb, 0xef, 0xff, 0xff, 0xfd, 0xdf, 0x5f, 0x3f, 0xff, 0xfc, 0xf7, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xea, 0xaf, 0xbf, 0xfe, 0xfa, 0xff, 0xff, 0xff, 0xfd, 0xf5, 0xd7, 0x7b, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0x5f, 0x7b, 0xfd, 0xf5, 0xd7, 0xff, 0x1b, 0xf6, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xdf, 0x7f, 0xff, 0xbf, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0x3f, 0xe6, 0xfd, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xfe, 0xfa, 0xfd, 0xf7, 0x5f, 0xf8, 0xbf, 0xa9, 0xff, 0xaf, 0xbe, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xba, 0x57, 0x5f, 0x7f, 0xfc, 0x35, 0xd7, 0x5f, 0x75, 0xed, 0x6b, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0x7f, 0xff, 0xfd, 0x7f, 0xfe, 0xfd, 0xe5, 0xff, 0xed, 0xff, 0xf8, 0xc7, 0xff, 0x1b, 0xff, 0xfb, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0xef, 0xfb, 0x7d, 0xfd, 0xbf, 0xff, 0xdf, 0x7f, 0xfd, 0x7f, 0xe6, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x7b, 0xef, 0xfd, 0xdd, 0x7f, 0xff, 0xde, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xef, 0xcf, 0xff, 0xfe, 0xfb, 0xcb, 0x2f, 0x7f, 0xfc, 0xf7, 0xde, 0x57, 0x5f, 0xfc, 0xf4, 0xd7, 0xfd, 0x6f, 0xfe, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xda, 0xbf, 0x7f, 0xbf, 0xff, 0x37, 0xff, 0xff, 0xdd, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0xbf, 0xef, 0xbf, 0xfb, 0xef, 0x9f, 0xfd, 0xff, 0xdb, 0xfa, 0x7e, 0xf7, 0xbf, 0xc7, 0x5f, 0x7f, 0xff, 0xff, 0xe6, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0xe9, 0xf7, 0xff, 0xfb, 0xff, 0x3f, 0xf7, 0xff, 0xbf, 0xbf, 0xf9, 0xdf, 0xff, 0xff, 0xfe, 0xef, 0xff, 0xff, 0x7f, 0xff, 0xbf, 0x95, 0xbd, 0xff, 0xff, 0xfb, 0xff, 0xed, 0xfb, 0xdb, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xf7, 0xff, 0xff, 0xfd, 0xfb, 0xff, 0xfb, 0xfe, 0xef, 0xff, 0xff, 0x71, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xbf, 0xef, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xe6, 0xff, 0xef, 0xbb, 0xfd, 0xfc, 0xfa, 0xff, 0x3f, 0xf7, 0xfc, 0xf5, 0xfb, 0x7f, 0x7b, 0xfd, 0xf5, 0xdb, 0x5f, 0xdf, 0xbf, 0xe1, 0xff, 0xf8, 0xe3, 0x8f, 0xfd, 0xf6, 0xff, 0xe3, 0x8f, 0xfd, 0x75, 0xb5, 0xdd, 0xef, 0xfd, 0xfd, 0xf3, 0xdb, 0xff, 0x67, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x76, 0xff, 0xff, 0xf5, 0x7f, 0xbf, 0xff, 0xf6, 0xfa, 0xff, 0x9b, 0xfe, 0xbf, 0xfc, 0xf6, 0xee, 0xef, 0xf5, 0xff, 0xfa, 0x4e, 0x9e, 0x5f, 0xff, 0xff, 0xf5, 0xff, 0x7f, 0x7b, 0xf5, 0xbf, 0x66, 0xff, 0xbb, 0xef, 0xbf, 0xfb, 0x3e, 0xff, 0xef, 0xbe, 0xcb, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xb7, 0xf9, 0xdf, 0x7e, 0xfb, 0xbd, 0xe7, 0x5f, 0x56, 0xfb, 0xbd, 0x67, 0x9f, 0x75, 0x96, 0x5f, 0x7f, 0xbd, 0xfe, 0xfe, 0xf3, 0x6f, 0xd4, 0xd7, 0x5e, 0x7b, 0xed, 0xff, 0x27, 0x5b, 0x7b, 0xed, 0x7f, 0x7f, 0xff, 0xd5, 0xff, 0x59, 0x67, 0xbf, 0xf4, 0x5f, 0x99, 0xfb, 0xbf, 0xd9, 0x66, 0xfe, 0x6f, 0x7f, 0xff, 0x66, 0xde, 0xff, 0x4f, 0xff, 0xfb, 0xf5, 0xd3, 0x7f, 0x7b, 0xad, 0x6e, 0x66, 0xfe, 0x7b, 0xef, 0xbd, 0xff, 0x9e, 0xfd, 0xef, 0x95, 0xf7, 0xdf, 0x50, 0xff, 0xfe, 0x77, 0xd4, 0xdf, 0xee, 0xfb, 0xb3, 0xb1, 0xff, 0xfe, 0xfb, 0xbd, 0xfd, 0xff, 0xfe, 0x7b, 0xbf, 0x7f, 0x9f, 0xff, 0xc7, 0x5b, 0xdf, 0xff, 0xfd, 0xfd, 0xff, 0x66, 0xec, 0xff, 0xf6, 0x5b, 0x6e, 0xff, 0xbf, 0xdf, 0xdb, 0x6f, 0x7f, 0xaf, 0xff, 0x75, 0xfc, 0xff, 0x7f, 0xff, 0xb5, 0xbf, 0x9b, 0xf7, 0xef, 0xbf, 0xaf, 0xbf, 0xff, 0x7f, 0xa3, 0xff, 0xbf, 0xfb, 0xfd, 0xb7, 0xfb, 0x7f, 0xfb, 0xff, 0x37, 0xdf, 0x77, 0xe6, 0xfd, 0xfb, 0xef, 0xb3, 0xcb, 0xff, 0x9f, 0xef, 0xbf, 0xcf, 0xff, 0xfa, 0xfb, 0xef, 0xff, 0xff, 0x77, 0xdb, 0xe7, 0x9d, 0xb1, 0xff, 0xfa, 0xeb, 0xaf, 0xdf, 0x7e, 0xf3, 0xeb, 0xaf, 0xdf, 0xdd, 0xb6, 0xd9, 0x77, 0xaf, 0xed, 0x75, 0xd3, 0xff, 0x66, 0xe6, 0xbf, 0xff, 0xfe, 0xfb, 0xf3, 0xdb, 0xfb, 0xfe, 0xfb, 0xf3, 0x9f, 0x7f, 0xfe, 0xff, 0xff, 0x3f, 0x7f, 0xec, 0x3f, 0x9b, 0xfb, 0xef, 0xbf, 0xfd, 0xb6, 0xff, 0xfd, 0xbf, 0xff, 0xb6, 0xff, 0xf7, 0xdf, 0xfd, 0xff, 0xff, 0xfd, 0x5d, 0xfb, 0xef, 0xe6, 0xfe, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x0d, 0xfd, 0xfd, 0xf7, 0xf5, 0xd6, 0xef, 0x7c, 0xff, 0xff, 0xd3, 0x7f, 0xfb, 0xbb, 0x79, 0xff, 0xef, 0xbf, 0xff, 0xfa, 0xfa, 0xa7, 0xbf, 0xfd, 0x7e, 0xfb, 0xe6, 0x3f, 0xcf, 0x7e, 0xb9, 0xc5, 0x77, 0x7f, 0x6f, 0xfe, 0xff, 0xff, 0xfa, 0xeb, 0xff, 0xfb, 0xdf, 0xbf, 0xeb, 0xd5, 0x7f, 0xfd, 0xef, 0xdf, 0xff, 0x7f, 0xfd, 0xfd, 0xff, 0x9b, 0xff, 0xff, 0x8f, 0x3e, 0xfa, 0xec, 0x73, 0xcf, 0x3f, 0xfa, 0xfc, 0x67, 0x9f, 0x7f, 0xf6, 0xd1, 0x47, 0x9f, 0x7d, 0xfe, 0xe6, 0xff, 0xeb, 0xaf, 0xbf, 0xfe, 0xff, 0xff, 0xaf, 0xbf, 0xfe, 0xf7, 0x97, 0xff, 0x7c, 0xff, 0xff, 0x17, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xeb, 0xaf, 0xff, 0xfe, 0xff, 0xeb, 0xaf, 0x7f, 0xff, 0xf7, 0xff, 0xdf, 0x7f, 0xfd, 0xf5, 0xdf, 0xff, 0x6f, 0xfe, 0xbf, 0xfa, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xea, 0xbf, 0xff, 0x7f, 0xfb, 0xdf, 0xdf, 0xff, 0x7f, 0xf5, 0xd7, 0xff, 0x9b, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xfe, 0xff, 0xbb, 0xff, 0xfe, 0xff, 0xf7, 0xd7, 0x5f, 0x7f, 0xff, 0xff, 0xe6, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xef, 0xfb, 0xff, 0xfd, 0xfc, 0xed, 0xf7, 0xff, 0x7b, 0xf9, 0xff, 0xa7, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xaf, 0xbf, 0xfa, 0xfa, 0xe3, 0x2e, 0xbe, 0xfe, 0xea, 0x16, 0x5d, 0x7e, 0xbd, 0xf5, 0xd7, 0x5e, 0x77, 0xfd, 0x6f, 0xfe, 0xff, 0xfc, 0xff, 0xc9, 0xff, 0xfe, 0xfc, 0xe3, 0xcf, 0xdf, 0xdf, 0xf9, 0xe6, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0x1b, 0xff, 0xa7, 0xef, 0xff, 0xda, 0xff, 0x9f, 0xb7, 0x7c, 0xf6, 0xfd, 0xdb, 0xf7, 0xff, 0xee, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xff, 0xff, 0xfe, 0xef, 0xdb, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9f, 0xf9, 0xff, 0xfc, 0xf3, 0xbf, 0xff, 0xfb, 0xfe, 0xf1, 0xbe, 0x7e, 0xfd, 0xe5, 0xf3, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0x6f, 0xfc, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfb, 0xfe, 0xff, 0xfb, 0x3b, 0xff, 0xfd, 0xd7, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xbd, 0x99, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xef, 0xff, 0xff, 0xff, 0xf3, 0xfb, 0x5f, 0xfb, 0xdd, 0xff, 0xdf, 0x7f, 0xff, 0xfc, 0xff, 0xc6, 0xff, 0xdf, 0xff, 0xff, 0xef, 0xdf, 0x7f, 0xff, 0x3f, 0xff, 0xdf, 0xe7, 0x9f, 0x7e, 0xfd, 0xf9, 0xef, 0xcf, 0xfe, 0xbf, 0xf9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xbf, 0xbf, 0xaf, 0xff, 0xfd, 0xf7, 0xfe, 0xff, 0xbd, 0xff, 0xdf, 0xff, 0x6f, 0x7e, 0xff, 0xff, 0xff, 0xe3, 0xff, 0x7f, 0x7b, 0xdd, 0xdb, 0x5f, 0xdf, 0x9f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf5, 0x99, 0xff, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xd7, 0xfe, 0x7e, 0xfe, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xfe, 0xaf, 0xb3, 0xce, 0xf3, 0xeb, 0xff, 0xbf, 0x7e, 0xff, 0xd5, 0xef, 0xff, 0xbd, 0xd5, 0xfe, 0xef, 0xff, 0xbf, 0xf9, 0xff, 0xf7, 0xcf, 0xbf, 0xff, 0xba, 0xdb, 0xdf, 0xff, 0x77, 0xe5, 0xbe, 0xd7, 0x7e, 0xe9, 0xfd, 0xff, 0x9f, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xbd, 0xaf, 0xcf, 0xff, 0xfa, 0xff, 0xbd, 0xff, 0xff, 0xf7, 0xff, 0xd6, 0x7f, 0xff, 0xdf, 0xfb, 0xff, 0x1b, 0xfe, 0xff, 0xa7, 0xf3, 0xeb, 0xff, 0xff, 0xbc, 0xcb, 0x2f, 0x3f, 0xdf, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0x3f, 0x66, 0xff, 0xff, 0xef, 0xbf, 0xfd, 0xff, 0xdf, 0x6f, 0xe7, 0xcb, 0xfd, 0xf7, 0xfe, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xff, 0xb7, 0xf9, 0x5f, 0x7b, 0xaf, 0xed, 0xe7, 0x57, 0xfa, 0xfb, 0xfc, 0xe7, 0xf7, 0xf7, 0xfc, 0xde, 0x7f, 0xff, 0xbd, 0xda, 0xff, 0x6f, 0xd6, 0xf3, 0x5e, 0x7b, 0xed, 0xfd, 0xb3, 0xfe, 0xfe, 0xf7, 0xff, 0x6f, 0x3f, 0xff, 0xff, 0xdf, 0x7f, 0x9f, 0xfd, 0x5f, 0x9b, 0xfb, 0xff, 0xbd, 0xf7, 0x5b, 0xfc, 0xb5, 0xdd, 0xf6, 0xbf, 0xf5, 0xe3, 0xb7, 0xff, 0xf5, 0xfa, 0xff, 0x7f, 0xdd, 0xee, 0x66, 0xfe, 0x7f, 0xef, 0xbd, 0x77, 0xef, 0x7b, 0xb2, 0xfd, 0x5d, 0x75, 0x7b, 0xcf, 0xad, 0xd7, 0xde, 0x7f, 0x5f, 0xb5, 0xb3, 0xb1, 0xff, 0xfb, 0xef, 0xef, 0xed, 0xff, 0xfe, 0x6f, 0xff, 0xff, 0xfb, 0xff, 0xdd, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x66, 0xee, 0xff, 0xfe, 0xdb, 0x6f, 0xef, 0xff, 0xf6, 0xdb, 0xdb, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x9b, 0xe7, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xb7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf7, 0xe6, 0xdd, 0xff, 0xff, 0xf3, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xd9, 0xef, 0xfe, 0xfb, 0x8f, 0xbf, 0xff, 0xff, 0xff, 0xcf, 0xbd, 0xb1, 0xff, 0xfb, 0xeb, 0xaf, 0xdf, 0xbe, 0xfb, 0xed, 0xb7, 0xd9, 0x7d, 0x76, 0xdb, 0x6f, 0x9f, 0xfd, 0xf7, 0xdb, 0xff, 0x66, 0xe6, 0xdf, 0xff, 0xfe, 0xfb, 0xf3, 0xdf, 0x3f, 0xff, 0xfc, 0xf3, 0xb7, 0x7f, 0x7e, 0xfb, 0xe7, 0xbf, 0x7f, 0xfe, 0x3f, 0x9b, 0xfb, 0xfe, 0xbf, 0xfd, 0xfe, 0xfe, 0xfb, 0xef, 0xef, 0xbf, 0xff, 0xfb, 0xdf, 0xbf, 0xff, 0xfd, 0xfd, 0xef, 0xff, 0xaf, 0xa6, 0x7e, 0xff, 0xff, 0xfd, 0xf7, 0x7b, 0xff, 0xef, 0xfd, 0xf0, 0xf7, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xef, 0xbb, 0x61, 0xdf, 0xef, 0xbf, 0xfd, 0xbe, 0xe9, 0xea, 0xaf, 0x2f, 0xfa, 0xff, 0xec, 0x9b, 0x7f, 0x7e, 0xfb, 0xee, 0x9b, 0x7b, 0x63, 0xfe, 0xff, 0xff, 0xba, 0xff, 0xbf, 0xff, 0xcf, 0xfe, 0xed, 0x7f, 0x77, 0xff, 0xff, 0xdf, 0xef, 0xff, 0xff, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0x87, 0x3e, 0xff, 0xf8, 0xa3, 0xcb, 0x3e, 0xf7, 0xf4, 0xe7, 0x9f, 0x7f, 0xfc, 0xf1, 0xe7, 0x9f, 0x7f, 0xfe, 0xe6, 0xff, 0xef, 0xa7, 0xbf, 0xfe, 0xff, 0xff, 0xef, 0xff, 0xfe, 0xe7, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xeb, 0xaf, 0xff, 0xff, 0xfa, 0xee, 0xbf, 0xff, 0xfb, 0xfd, 0xf7, 0x7f, 0x7f, 0xff, 0xfd, 0xdf, 0xff, 0x6f, 0xfe, 0xdf, 0xda, 0xef, 0xab, 0xff, 0xfe, 0xeb, 0xee, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0x1b, 0xfe, 0xef, 0xff, 0xff, 0xfa, 0xff, 0xaf, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xdf, 0x3f, 0xfd, 0xbf, 0xf2, 0x7f, 0x6f, 0x3d, 0xfd, 0xe5, 0xa7, 0x9f, 0xfa, 0xfb, 0xdd, 0x77, 0xfb, 0xff, 0xbf, 0xe9, 0xff, 0xaf, 0xbe, 0xfe, 0xfa, 0x6b, 0xaf, 0xbf, 0xee, 0x7a, 0xd7, 0x5f, 0x77, 0xfd, 0x55, 0xd7, 0x5d, 0x7f, 0xed, 0x6b, 0xfe, 0xbf, 0xff, 0xef, 0xff, 0xdf, 0xfb, 0xff, 0xec, 0xef, 0xff, 0xbf, 0xfe, 0xff, 0xf3, 0xff, 0xbf, 0xdf, 0xff, 0xff, 0x1b, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xfe, 0xef, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x7f, 0x66, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xff, 0x7f, 0xdf, 0x4e, 0xff, 0xbf, 0xed, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfb, 0xef, 0xcf, 0x1f, 0xfe, 0xbf, 0xff, 0xbf, 0xff, 0x79, 0xfe, 0xc7, 0xfb, 0xe7, 0xff, 0xf1, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfe, 0xbd, 0xef, 0x7f, 0xdb, 0xfd, 0xff, 0x77, 0xff, 0xff, 0xff, 0x9a, 0xff, 0xff, 0xbd, 0xbd, 0xf7, 0xe7, 0xff, 0xef, 0xff, 0xf6, 0xbf, 0xfe, 0xff, 0xff, 0xb7, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0x7f, 0x7f, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xb7, 0x5f, 0xef, 0xfe, 0xf5, 0xd3, 0xdf, 0xf7, 0xbf, 0xd9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xfd, 0xff, 0xff, 0xeb, 0xfb, 0xef, 0xdf, 0xff, 0x6f, 0xfe, 0xfd, 0xff, 0xf7, 0xff, 0xcd, 0xff, 0x7f, 0xff, 0xd5, 0xf7, 0xff, 0xbf, 0xf1, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfb, 0xff, 0xf7, 0xfb, 0xff, 0xef, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xeb, 0xaf, 0xff, 0xff, 0xfd, 0xeb, 0xab, 0xd7, 0x72, 0xff, 0xbd, 0x7f, 0x7e, 0xfd, 0xe7, 0x9b, 0xff, 0xff, 0xbf, 0xf1, 0xff, 0xfb, 0xef, 0x7f, 0xfe, 0xb9, 0xfa, 0xeb, 0x8f, 0x7f, 0x69, 0xff, 0xdb, 0x7f, 0x7f, 0xfd, 0xf5, 0xdd, 0xff, 0x67, 0xfe, 0xff, 0xfe, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0x6f, 0xbf, 0xff, 0xff, 0xff, 0xf5, 0xdf, 0xdf, 0x7f, 0xff, 0xf6, 0xfb, 0x9b, 0xfe, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xbc, 0xb2, 0x9a, 0x2b, 0x77, 0xff, 0xad, 0xfb, 0xcd, 0xdf, 0xdf, 0x7f, 0xff, 0xbf, 0x66, 0xff, 0xef, 0xbf, 0xbd, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x5c, 0xfd, 0xfc, 0xf3, 0x4f, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xb7, 0xf9, 0xdf, 0x7b, 0xef, 0xef, 0xd5, 0xdf, 0x6e, 0xbf, 0x3c, 0xff, 0x95, 0x55, 0xbe, 0xde, 0x68, 0xbf, 0xf7, 0xde, 0xf9, 0x6f, 0xd4, 0x97, 0x5f, 0x7e, 0xeb, 0xfc, 0xd7, 0x5e, 0x7a, 0xa7, 0xdc, 0x7f, 0x3d, 0xdf, 0xf7, 0xcb, 0x2f, 0xbf, 0x7c, 0x5e, 0x99, 0xfb, 0xef, 0xbf, 0xbf, 0xff, 0x7f, 0xb7, 0x95, 0x16, 0xde, 0xf5, 0xcd, 0xfb, 0xbf, 0xde, 0xf7, 0x7e, 0xb3, 0xad, 0xee, 0x66, 0xfe, 0xaf, 0xb7, 0xfe, 0xfb, 0xef, 0x78, 0xf7, 0x9d, 0x25, 0xfd, 0xf7, 0xfe, 0xad, 0xf7, 0xbd, 0xf7, 0xce, 0xb3, 0x93, 0xb1, 0xff, 0xfb, 0xee, 0xaf, 0xff, 0x1b, 0xde, 0x7e, 0xeb, 0xff, 0xed, 0xfd, 0xef, 0xbf, 0xab, 0xfd, 0xfd, 0xf5, 0xff, 0x66, 0xec, 0xbf, 0xff, 0xfe, 0xeb, 0xef, 0xd5, 0xf6, 0xda, 0x7b, 0xdf, 0x7b, 0xef, 0x7f, 0xfe, 0x6b, 0xff, 0xfd, 0xf7, 0xbf, 0x99, 0xf7, 0xef, 0xbf, 0xef, 0xbf, 0xdf, 0xee, 0xbb, 0xef, 0xf7, 0xfb, 0xff, 0xb7, 0x9d, 0xff, 0xff, 0xdd, 0x77, 0xdf, 0x77, 0xe6, 0xfd, 0xfb, 0xef, 0xb3, 0xce, 0x23, 0xff, 0xfc, 0xf3, 0x9b, 0xdf, 0xff, 0xff, 0xef, 0x3f, 0x7f, 0xfe, 0xf9, 0xe7, 0xbd, 0xb1, 0xff, 0xda, 0xeb, 0xbf, 0xff, 0x58, 0xfa, 0xeb, 0x25, 0xfe, 0xfd, 0xf7, 0xdb, 0x69, 0x7f, 0xfd, 0xf5, 0xd7, 0xbf, 0x6e, 0xe6, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0x9f, 0x7d, 0xf6, 0xfb, 0xf7, 0xff, 0xdf, 0xfe, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0x3b, 0x9b, 0x7b, 0xef, 0xbf, 0xfd, 0xff, 0xff, 0x6d, 0xb7, 0xfd, 0xff, 0xfe, 0xff, 0xf7, 0xbd, 0xf7, 0xb7, 0xdf, 0x7e, 0xdb, 0xef, 0xe6, 0xde, 0xff, 0xaf, 0x9f, 0xde, 0x52, 0x7f, 0xbf, 0xfd, 0xf0, 0xb5, 0xd7, 0xfe, 0xbd, 0xff, 0xfd, 0xf6, 0xdb, 0x7f, 0xbb, 0x79, 0xff, 0xf7, 0xc9, 0x2f, 0xbf, 0xf8, 0xef, 0xbb, 0x77, 0x7e, 0xd7, 0xd5, 0x3f, 0xff, 0x7c, 0xf7, 0xdd, 0x77, 0x7f, 0x6f, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xfe, 0x7e, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xff, 0xbd, 0x77, 0xff, 0x9b, 0xff, 0xff, 0xcf, 0x3f, 0xff, 0xfc, 0xa3, 0xcf, 0x3e, 0xf7, 0xf4, 0xe7, 0x9f, 0x7b, 0xfe, 0xd9, 0x67, 0x9f, 0x7d, 0xfe, 0xe6, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xf2, 0xeb, 0xef, 0xff, 0xfe, 0xf7, 0xdf, 0xff, 0xfe, 0xfb, 0xf7, 0xdf, 0x7f, 0xff, 0xbf, 0xf9, 0xff, 0xfa, 0xff, 0xff, 0xbf, 0xfc, 0xfa, 0xef, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xff, 0xfd, 0xf7, 0xdd, 0xff, 0x6f, 0xfe, 0x9f, 0xfe, 0xfa, 0xeb, 0xff, 0xfe, 0xfb, 0xeb, 0xbf, 0x7f, 0xfd, 0xf5, 0xdf, 0x3f, 0xdf, 0x7d, 0xf7, 0xdd, 0xff, 0x9b, 0xff, 0xaf, 0xbf, 0xfe, 0xfa, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0x77, 0xff, 0xff, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xcb, 0xff, 0xbe, 0xf5, 0xe5, 0x77, 0xdf, 0x7f, 0xf9, 0xed, 0xff, 0xff, 0xf9, 0xbf, 0xf9, 0xff, 0xaf, 0xbe, 0xfe, 0xe2, 0xab, 0xae, 0x9f, 0xee, 0xba, 0x96, 0x5f, 0x6f, 0xb9, 0x75, 0x57, 0x5f, 0x7f, 0xfd, 0x6f, 0xfe, 0xff, 0xf7, 0xff, 0xff, 0xde, 0xff, 0x6f, 0xff, 0xdb, 0xff, 0xbd, 0xfe, 0xe7, 0x9f, 0xcb, 0xff, 0xff, 0xff, 0xe7, 0x1b, 0xff, 0xfb, 0xdf, 0xff, 0xff, 0xfd, 0xf7, 0xf3, 0xef, 0x6e, 0xff, 0xff, 0xbe, 0xf6, 0xf4, 0xff, 0xfd, 0xb7, 0xff, 0xff, 0xe6, 0x7f, 0xfd, 0x77, 0xdf, 0xf3, 0xf7, 0x7f, 0xff, 0xee, 0xfb, 0xff, 0xff, 0x7f, 0xf9, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xe9, 0xff, 0xfe, 0x6f, 0xbd, 0xff, 0xdf, 0xfc, 0xf3, 0x2f, 0xf7, 0xb9, 0xf7, 0xf7, 0x1f, 0x7f, 0xff, 0xf5, 0xd7, 0xfb, 0x67, 0xfc, 0xff, 0xfd, 0xff, 0xf7, 0xfb, 0xff, 0xff, 0xdf, 0xe6, 0xf7, 0xff, 0xfe, 0xf7, 0xef, 0xff, 0xfe, 0x7d, 0xf7, 0xfd, 0x99, 0xff, 0xff, 0xbb, 0x7f, 0xf1, 0xff, 0xfe, 0xef, 0xf2, 0xbf, 0xf5, 0x7d, 0xde, 0x7b, 0xf3, 0xdf, 0x5b, 0x7f, 0xdd, 0xff, 0xc6, 0xdf, 0xff, 0xff, 0xbf, 0xde, 0xf7, 0xdf, 0xef, 0xff, 0x9d, 0xef, 0xe6, 0x4f, 0xff, 0xff, 0xf5, 0x57, 0x5f, 0xf7, 0x8f, 0xf9, 0xbf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xfd, 0xdf, 0xcf, 0xfd, 0xff, 0xff, 0xeb, 0xfb, 0xef, 0xbd, 0xfd, 0x6f, 0xfe, 0x3f, 0xff, 0xbc, 0xe3, 0xff, 0x3b, 0xf7, 0xbc, 0x9f, 0xff, 0x9f, 0xff, 0xd8, 0xe2, 0xef, 0xff, 0xff, 0xff, 0xff, 0x99, 0xff, 0xaf, 0xbb, 0xfd, 0xf7, 0xbf, 0x7f, 0xbf, 0xfd, 0xbf, 0xff, 0xff, 0x7f, 0xfd, 0xf5, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xea, 0x27, 0xdb, 0x67, 0xfa, 0xe3, 0x77, 0xb7, 0xfe, 0xd5, 0xd3, 0x6b, 0x6f, 0x7d, 0xf7, 0xdf, 0x7f, 0xff, 0xbf, 0xf9, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xf6, 0xf3, 0xdf, 0x37, 0xdf, 0xe5, 0xbf, 0xdd, 0x7f, 0x7d, 0xdd, 0xe5, 0xd1, 0xff, 0x6f, 0xfe, 0x7f, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0x7e, 0xff, 0xef, 0xbf, 0xbf, 0xd7, 0xf5, 0xef, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0x9b, 0xfe, 0xfb, 0xff, 0xff, 0xf7, 0xbf, 0xfd, 0xff, 0xff, 0xf7, 0x7f, 0xfd, 0xd7, 0xf3, 0xff, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xa6, 0xff, 0xaf, 0xbf, 0xff, 0xcb, 0xce, 0x2f, 0xf9, 0xd6, 0x5a, 0x97, 0x7f, 0xff, 0xe7, 0xf3, 0xfd, 0xf7, 0xde, 0xff, 0xaf, 0xd9, 0xff, 0xee, 0xfb, 0xef, 0xa4, 0xff, 0x76, 0xbd, 0xec, 0x72, 0xbb, 0xfe, 0xff, 0xff, 0xfd, 0xfd, 0xf7, 0xdf, 0xff, 0x65, 0xfe, 0xb7, 0xdf, 0x1e, 0xff, 0xbd, 0xb6, 0x5f, 0x7f, 0xfb, 0xdd, 0x7f, 0x35, 0xff, 0xff, 0x7b, 0xef, 0xbd, 0xf7, 0xfa, 0x9b, 0xf5, 0xb5, 0xd7, 0xfe, 0x7f, 0xed, 0xb5, 0xff, 0x5f, 0x7b, 0xdd, 0x5b, 0xe7, 0x3f, 0xff, 0xf2, 0xcb, 0x2f, 0x9f, 0x57, 0xe6, 0x7e, 0x6d, 0xbf, 0xbd, 0xf7, 0xfe, 0x6f, 0xf6, 0xd9, 0x66, 0x37, 0xf1, 0xff, 0xb7, 0xbf, 0xf6, 0xdf, 0x6d, 0xb3, 0x9b, 0x99, 0x6f, 0xae, 0xb9, 0xaf, 0xbe, 0xff, 0xde, 0xbf, 0xef, 0x7e, 0xf7, 0xfc, 0x7f, 0xeb, 0x35, 0xff, 0xfd, 0xf2, 0xee, 0x6c, 0xec, 0xbf, 0x5b, 0xee, 0xeb, 0xbf, 0xbf, 0xff, 0xef, 0xbb, 0xdc, 0x47, 0xff, 0xfb, 0xef, 0xca, 0x7f, 0xff, 0xfd, 0xbd, 0x99, 0xfb, 0xbf, 0xf5, 0xf6, 0x0a, 0x6f, 0xbf, 0xbd, 0xf7, 0x5b, 0x5f, 0xca, 0xfb, 0x9f, 0xff, 0xde, 0x7f, 0xff, 0xfd, 0xef, 0xc6, 0xbd, 0xdb, 0x6b, 0xfb, 0xed, 0xbf, 0xfb, 0x7f, 0xbb, 0xad, 0x6c, 0xfb, 0x7f, 0xff, 0x7d, 0xfd, 0xf7, 0xdd, 0xf7, 0x9d, 0x79, 0x5f, 0xe6, 0x9b, 0x2c, 0xf2, 0xcb, 0xff, 0x8f, 0x7c, 0xf2, 0xb3, 0xdf, 0xff, 0xfb, 0x6f, 0xf7, 0x5d, 0xf6, 0x79, 0x67, 0xe4, 0xaf, 0xf8, 0xe2, 0xcf, 0xaf, 0xbf, 0xfe, 0xe3, 0x0b, 0x5f, 0xb6, 0xfd, 0x77, 0xda, 0x57, 0x7f, 0xfd, 0xf5, 0xbf, 0x99, 0xf9, 0xef, 0xbf, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xfe, 0xf5, 0xed, 0xbf, 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xff, 0xce, 0xe6, 0xfe, 0xfb, 0x6f, 0xff, 0xfb, 0xf6, 0xfb, 0xff, 0xbf, 0xed, 0xdd, 0xfd, 0x7b, 0xef, 0xfd, 0xfd, 0xb7, 0xdf, 0xf6, 0xbb, 0xb9, 0xff, 0xc7, 0x1f, 0x7f, 0xfc, 0xf7, 0xdf, 0x1d, 0x7f, 0x7c, 0xe3, 0xb5, 0xff, 0xff, 0xfd, 0xff, 0xfd, 0xf7, 0xff, 0x6e, 0xde, 0xf7, 0xf9, 0xe7, 0x9f, 0xff, 0xfa, 0xfb, 0xe7, 0x9f, 0x77, 0x7c, 0xd7, 0xcf, 0x3f, 0xfb, 0x75, 0xd7, 0xdd, 0xdf, 0x9b, 0xff, 0x7f, 0xb7, 0x6c, 0x2a, 0xeb, 0xff, 0xbf, 0x7c, 0xba, 0xff, 0x5f, 0xff, 0xff, 0xdf, 0xff, 0x7d, 0xff, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0xa2, 0x8f, 0x3e, 0xfa, 0xfc, 0xa3, 0x8f, 0x3c, 0xef, 0xf1, 0xe7, 0x9f, 0x7f, 0xfe, 0xd9, 0x67, 0x97, 0xbf, 0xf9, 0xff, 0xa2, 0xcb, 0x2f, 0xbf, 0xfe, 0xfa, 0xeb, 0x2f, 0x7e, 0xf3, 0xf7, 0x3f, 0xff, 0x7f, 0xfd, 0xf7, 0xdf, 0xff, 0x6f, 0xfe, 0x9f, 0xbe, 0xfa, 0xcb, 0xaf, 0xaf, 0xfe, 0xfa, 0xeb, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xfd, 0x77, 0xfd, 0x9b, 0xfd, 0xaf, 0xfe, 0xf9, 0xef, 0xbf, 0xaf, 0xfe, 0xfb, 0xef, 0x7f, 0x7f, 0xfd, 0xf7, 0xdf, 0x57, 0xdf, 0x7d, 0xf7, 0xff, 0xe6, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xbf, 0xeb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf7, 0xdf, 0xf7, 0xbf, 0xf9, 0xff, 0xef, 0xff, 0x3f, 0xbf, 0xfd, 0xef, 0x9a, 0xff, 0xfd, 0xef, 0x8f, 0xf7, 0xd7, 0xfe, 0x7f, 0xdf, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0x6b, 0x8f, 0xbe, 0xe8, 0xea, 0xcb, 0xad, 0xbf, 0xf6, 0xe5, 0x97, 0x5b, 0x76, 0xf9, 0xd5, 0xd7, 0x5e, 0xff, 0x9b, 0xff, 0x3f, 0xfb, 0xf4, 0xa3, 0xfb, 0xff, 0xba, 0x7c, 0xff, 0xfe, 0xcf, 0xbf, 0xf9, 0xe5, 0xff, 0xff, 0xff, 0xf7, 0xf9, 0xc6, 0xbf, 0xe9, 0xaf, 0xdd, 0xfd, 0xbf, 0xff, 0x1f, 0xfa, 0xfd, 0xff, 0xfe, 0x6f, 0x79, 0xcf, 0x7f, 0xff, 0xfd, 0xbf, 0xbf, 0xf9, 0xf7, 0xff, 0xfe, 0xaf, 0xef, 0xdf, 0xdf, 0xff, 0x7f, 0xfb, 0xfb, 0xff, 0xb7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x6f, 0xfc, 0xb7, 0xf6, 0x7a, 0xe9, 0xaf, 0xdf, 0xde, 0xe8, 0xe2, 0xd9, 0x6f, 0xfe, 0x7d, 0xe7, 0xdf, 0x6b, 0xf5, 0xf5, 0xff, 0x99, 0xff, 0xaf, 0xba, 0xfe, 0xf9, 0xda, 0xfe, 0xbf, 0xdf, 0xff, 0xbd, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0x5f, 0xdf, 0x5b, 0x5f, 0xe6, 0xbf, 0xe7, 0x9f, 0xff, 0xf4, 0xfb, 0xeb, 0x97, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xf6, 0xff, 0x5b, 0xbf, 0xbf, 0xf9, 0x7f, 0xfa, 0xeb, 0xff, 0x3f, 0xfb, 0xf7, 0xeb, 0xae, 0xbf, 0xdb, 0xef, 0xff, 0xef, 0x7e, 0xfb, 0xdf, 0xe6, 0xef, 0x67, 0xfe, 0xff, 0xff, 0xdf, 0x1d, 0xef, 0xff, 0xfd, 0xff, 0xfe, 0xfd, 0xdf, 0xdf, 0xbf, 0xff, 0x7f, 0xfe, 0xef, 0xf7, 0xff, 0x9b, 0xdf, 0xfb, 0xfe, 0xeb, 0xbe, 0xdf, 0x8f, 0x3f, 0xeb, 0xff, 0xe7, 0x9e, 0x7f, 0xbe, 0xc9, 0xfb, 0xbf, 0xff, 0x7f, 0x7f, 0xe6, 0x7f, 0xff, 0xfd, 0xbf, 0x1f, 0xff, 0xdf, 0xb6, 0xff, 0xf7, 0xf5, 0xd5, 0x4b, 0xff, 0xfb, 0xff, 0xeb, 0xff, 0xff, 0xbf, 0xb9, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xfc, 0x7f, 0xd5, 0xb4, 0xf6, 0xfd, 0xfe, 0xff, 0xb5, 0x7f, 0xfd, 0xf7, 0xfb, 0xff, 0x6f, 0xfe, 0xbf, 0xec, 0xfa, 0x7f, 0x3f, 0xfe, 0xfa, 0xdf, 0xf7, 0xbe, 0x76, 0xf9, 0xf7, 0xff, 0x5f, 0xff, 0xf8, 0xff, 0xff, 0x9b, 0xfb, 0xff, 0xfb, 0xfb, 0xff, 0xf3, 0xbf, 0xff, 0xfb, 0xef, 0xff, 0xfd, 0xfb, 0xfe, 0x7f, 0xff, 0x7f, 0xff, 0xdf, 0xff, 0x86, 0xff, 0x2f, 0xbf, 0xf2, 0xfb, 0xf7, 0xbb, 0xbf, 0xf1, 0xf2, 0xf5, 0x5c, 0x73, 0x79, 0xe7, 0xff, 0x3c, 0xff, 0xff, 0x8f, 0xd9, 0xff, 0xef, 0xbb, 0xf9, 0xfe, 0xf7, 0xf6, 0xff, 0xbc, 0xff, 0x9f, 0x7d, 0xf6, 0xdf, 0xfe, 0x2f, 0xff, 0xff, 0xff, 0x6d, 0xfe, 0x97, 0xfe, 0x3f, 0xdf, 0xbf, 0xa5, 0xff, 0x3b, 0xaf, 0xfd, 0x6f, 0xb7, 0xdd, 0x9e, 0x7f, 0x7f, 0x37, 0xff, 0xff, 0x9b, 0xf5, 0xec, 0xa7, 0xdf, 0x37, 0xff, 0xed, 0xff, 0xdf, 0x7b, 0xd5, 0x6b, 0xaf, 0xbd, 0xf6, 0xdc, 0x7b, 0xcf, 0xff, 0xd7, 0xe6, 0xfe, 0x6f, 0xb5, 0xc5, 0x67, 0xfe, 0x7a, 0xf5, 0x8b, 0x57, 0xb5, 0xda, 0x6c, 0x33, 0xf7, 0xbf, 0xfd, 0x5f, 0xff, 0xbb, 0x99, 0xff, 0x9e, 0x79, 0xff, 0x9d, 0x7a, 0xeb, 0xb9, 0xef, 0xdf, 0xef, 0xbc, 0xf2, 0xde, 0xff, 0xf3, 0xdf, 0x52, 0xff, 0x6c, 0xec, 0xff, 0xfe, 0xfb, 0xf7, 0xa9, 0xe7, 0xba, 0xff, 0xbb, 0xfb, 0x4b, 0xff, 0xfd, 0xdf, 0xea, 0x7a, 0xff, 0xff, 0xbf, 0x99, 0xfb, 0xef, 0xbd, 0xf6, 0x5f, 0xea, 0xe8, 0xbd, 0xff, 0x5e, 0xd7, 0x76, 0xfb, 0xed, 0xb7, 0x7f, 0x7f, 0xff, 0xff, 0xef, 0xe6, 0xf9, 0xff, 0xff, 0xfb, 0x8e, 0xbf, 0xfd, 0xff, 0xff, 0xbf, 0x3c, 0xf7, 0xdc, 0xf3, 0xcf, 0xff, 0xff, 0xed, 0xb7, 0xbc, 0x79, 0xff, 0x7f, 0xff, 0xf7, 0xe7, 0x9f, 0xff, 0xbf, 0xed, 0x7e, 0x9f, 0x7d, 0xf6, 0xd9, 0xe5, 0xff, 0xff, 0xfe, 0x7b, 0x6f, 0xec, 0xff, 0x4e, 0x7b, 0xed, 0xbf, 0xff, 0x56, 0xfb, 0xe8, 0x57, 0x3f, 0xfd, 0xf4, 0xd3, 0x6b, 0xfe, 0xdd, 0x37, 0xbf, 0x99, 0xf9, 0xf7, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xb6, 0xc6, 0x32, 0xcb, 0xac, 0xfb, 0xff, 0xbf, 0xff, 0xcf, 0xa6, 0xbe, 0xff, 0xfe, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xee, 0xff, 0xed, 0xb5, 0xd7, 0x5e, 0xdb, 0xff, 0xff, 0xf7, 0xff, 0xbb, 0xb9, 0xdf, 0xdb, 0x6b, 0xff, 0xfc, 0xfe, 0xff, 0xef, 0xff, 0xfd, 0xed, 0xb5, 0xff, 0xfe, 0xfb, 0xf9, 0xff, 0xff, 0xff, 0x6a, 0xd8, 0xbf, 0xfb, 0x6a, 0xbf, 0x67, 0xb7, 0xfa, 0xee, 0x89, 0xde, 0x7d, 0xf5, 0xdf, 0x7e, 0xfd, 0xfd, 0xfb, 0xee, 0xdf, 0x9b, 0xff, 0xbc, 0xb7, 0xee, 0xf7, 0xed, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x77, 0xfd, 0xf5, 0xde, 0x7b, 0xff, 0xfd, 0xff, 0xe6, 0xff, 0xfb, 0xb3, 0xcf, 0x3f, 0xfe, 0xe8, 0xf2, 0x8f, 0x3e, 0xf7, 0xf9, 0x43, 0x1f, 0x5d, 0xfe, 0xd9, 0xc5, 0x9f, 0xbf, 0xf9, 0xff, 0xfb, 0xff, 0x7f, 0xfe, 0xfe, 0xf7, 0xcf, 0x7f, 0x7e, 0xff, 0xff, 0xd3, 0x5f, 0x7f, 0xff, 0xef, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xbf, 0xbe, 0xf6, 0xeb, 0x7f, 0xff, 0xff, 0xf5, 0xd7, 0x57, 0xff, 0x7b, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0xfe, 0xfa, 0xef, 0xef, 0x7f, 0xfa, 0xfb, 0xef, 0x5f, 0x5f, 0xed, 0xf7, 0x5f, 0x77, 0x7f, 0xf7, 0xfd, 0xff, 0x86, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xeb, 0xff, 0xbf, 0xfe, 0xfd, 0xd7, 0xfb, 0xff, 0xdf, 0xf5, 0x9f, 0xdf, 0xff, 0x8f, 0xd9, 0xff, 0xfe, 0xcb, 0x6f, 0xbf, 0xf8, 0xf4, 0xfb, 0x3f, 0xfd, 0xe9, 0x87, 0xb7, 0xff, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfa, 0xbf, 0xab, 0xa5, 0x39, 0xee, 0xfa, 0xab, 0x2f, 0xbf, 0xec, 0xc4, 0x97, 0x5c, 0x7d, 0xbd, 0xb5, 0xd7, 0x5f, 0xff, 0x9a, 0xff, 0x7f, 0xdd, 0xc9, 0xf6, 0xff, 0x5e, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xfd, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xff, 0xf7, 0xdf, 0x6f, 0xff, 0xff, 0xdb, 0xff, 0xfb, 0xdd, 0xef, 0xff, 0xff, 0xbf, 0xef, 0xff, 0xfe, 0xff, 0xbf, 0x9f, 0xf9, 0xff, 0xc7, 0xfd, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0x77, 0xdb, 0x7b, 0x6e, 0xff, 0xff, 0x7d, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xb7, 0xff, 0xea, 0xf3, 0x8f, 0xfe, 0xdf, 0xb7, 0xeb, 0x9d, 0xff, 0xfd, 0xf7, 0xdf, 0xdd, 0xef, 0xbf, 0xff, 0xff, 0x9b, 0xff, 0xbf, 0xfe, 0x7e, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfa, 0x7e, 0xdf, 0xff, 0xff, 0xfa, 0xdf, 0xff, 0xf7, 0x6f, 0xff, 0xe6, 0xff, 0xff, 0x6d, 0x7f, 0xee, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xaf, 0xf9, 0xff, 0xfe, 0xfb, 0xaf, 0xff, 0xff, 0xbf, 0xdb, 0x7f, 0xff, 0xef, 0xee, 0xfb, 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xff, 0x6f, 0xfa, 0xff, 0xd6, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0xef, 0xff, 0xff, 0x9b, 0xff, 0x8f, 0xff, 0xb7, 0xfc, 0xf5, 0xe6, 0x3b, 0x7f, 0x77, 0xfd, 0xef, 0x73, 0xff, 0xf1, 0xc5, 0xfb, 0x6f, 0xfe, 0xff, 0xe6, 0x7f, 0xf7, 0xfb, 0xbb, 0xed, 0xfd, 0xfb, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xcd, 0xff, 0xbb, 0xf7, 0x7f, 0xff, 0xfe, 0xbf, 0xf9, 0xbf, 0x7f, 0xeb, 0xbf, 0x9f, 0xfe, 0xf2, 0xf7, 0xfd, 0x7d, 0x9d, 0xff, 0xdd, 0x7f, 0xff, 0xff, 0xfe, 0xcf, 0xff, 0x6f, 0xfc, 0xdf, 0xff, 0xeb, 0xef, 0xae, 0xbb, 0xfe, 0xff, 0xef, 0xff, 0xfe, 0xf7, 0x7f, 0xcf, 0xef, 0xef, 0xff, 0xdb, 0xff, 0x99, 0xfd, 0xff, 0xfe, 0xfe, 0xfc, 0xff, 0xff, 0xff, 0xd3, 0xed, 0xff, 0xff, 0x7d, 0xff, 0xdb, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xa6, 0x7f, 0xad, 0xff, 0xe7, 0xfb, 0x6b, 0xed, 0xaf, 0xbf, 0xf5, 0xdd, 0x57, 0x73, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xfc, 0xaf, 0xd9, 0x9f, 0xf7, 0xff, 0xf5, 0xa7, 0xfb, 0xfe, 0xeb, 0xbf, 0xd7, 0x95, 0xf5, 0xb4, 0xff, 0x7f, 0xff, 0xff, 0xbf, 0xff, 0x6d, 0xde, 0xd7, 0xcc, 0x3e, 0x9f, 0xed, 0xb7, 0x9f, 0x7a, 0xef, 0x7d, 0xff, 0xf5, 0xb7, 0xd4, 0xf3, 0xfb, 0xff, 0xfd, 0xfc, 0x1b, 0xf5, 0x4d, 0xf3, 0xcf, 0x6f, 0xed, 0xb5, 0xb3, 0x5e, 0x7e, 0xf5, 0x7f, 0x7f, 0x9f, 0xf7, 0xfe, 0xff, 0xe7, 0x9d, 0x57, 0xe6, 0xfe, 0x6a, 0xe7, 0xff, 0xf7, 0x9b, 0x6d, 0xaf, 0xbd, 0x6f, 0xbd, 0xdb, 0x7e, 0xb2, 0x5d, 0xf4, 0xff, 0xff, 0xff, 0xbb, 0x99, 0xff, 0x56, 0xbc, 0xff, 0x99, 0xfb, 0xae, 0xa9, 0xbf, 0xda, 0x55, 0xd6, 0xf7, 0xed, 0x7d, 0xf5, 0xff, 0x7f, 0xeb, 0x64, 0xec, 0xff, 0xf6, 0xfe, 0x77, 0xef, 0xbe, 0x5f, 0x2e, 0xef, 0x75, 0x69, 0xb5, 0xd7, 0xd7, 0x7f, 0xff, 0xff, 0xfd, 0xbf, 0x19, 0xfb, 0x6f, 0xfd, 0xff, 0x5f, 0x6f, 0xbf, 0xbc, 0xcf, 0x7e, 0xf5, 0x50, 0x43, 0xeb, 0xf7, 0xdf, 0xff, 0xff, 0xfd, 0x6f, 0xe6, 0x3d, 0xdf, 0xff, 0xff, 0x2e, 0xf6, 0xdb, 0x7e, 0xbb, 0xff, 0x6c, 0xbf, 0xfd, 0xfe, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x9d, 0x79, 0xdf, 0x6f, 0xff, 0xfd, 0xbf, 0xf9, 0x26, 0x8b, 0xec, 0x7f, 0x93, 0x45, 0x3e, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x7f, 0x6f, 0xec, 0xc7, 0x4c, 0xfb, 0xec, 0x2f, 0xbe, 0xf4, 0xe3, 0xeb, 0x5f, 0xf8, 0xf1, 0xe7, 0xda, 0x7f, 0xdf, 0xfd, 0xf6, 0xab, 0x9b, 0xf9, 0xf7, 0xff, 0x6f, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0x9f, 0xdf, 0xce, 0xe6, 0xfe, 0xfe, 0xff, 0xef, 0xfe, 0xfe, 0x9b, 0xff, 0xbf, 0xff, 0xed, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xfb, 0xef, 0xbb, 0xb9, 0x7f, 0xdf, 0xeb, 0xff, 0xfc, 0xf1, 0xc7, 0x9f, 0xff, 0x7f, 0xa1, 0xa5, 0x37, 0xfa, 0x7f, 0xff, 0xf5, 0xfb, 0xdf, 0x6e, 0xde, 0xd7, 0xe9, 0xf2, 0xbf, 0x7f, 0xfe, 0xf9, 0xe7, 0xdf, 0x57, 0x7c, 0xf1, 0x4c, 0x9f, 0x7f, 0x3e, 0xf9, 0xed, 0xdf, 0x9b, 0xff, 0xbf, 0xbb, 0xfe, 0xef, 0xfd, 0xaf, 0x9f, 0xea, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf2, 0x5f, 0xff, 0xdf, 0xff, 0xe6, 0xff, 0xfb, 0xa3, 0xcf, 0x3f, 0xf7, 0xc8, 0xa3, 0xcf, 0x2f, 0xef, 0xf8, 0xc7, 0x9e, 0x7d, 0xf6, 0xd1, 0xc7, 0x9f, 0xbf, 0xf9, 0xff, 0xff, 0xeb, 0x77, 0x9f, 0xfc, 0xf2, 0xcb, 0xaf, 0xfb, 0xf3, 0xce, 0x9f, 0x7f, 0x7e, 0xf9, 0xf5, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfa, 0xdf, 0x2f, 0xbf, 0xfc, 0xf2, 0xeb, 0xfb, 0xef, 0xff, 0xf7, 0x97, 0x5f, 0x7e, 0xfd, 0xfd, 0xff, 0x9b, 0xff, 0xbf, 0xfe, 0xfe, 0xef, 0xab, 0xff, 0xfe, 0xfb, 0xfa, 0x57, 0x5f, 0xfd, 0xf1, 0xf7, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xfb, 0xaf, 0xf7, 0xdf, 0xfa, 0xff, 0xff, 0xbf, 0xfe, 0xf5, 0xd6, 0x7f, 0x7f, 0xf9, 0xef, 0xd7, 0xdf, 0xff, 0xbf, 0xf9, 0xff, 0xf4, 0xdf, 0x2f, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xef, 0xc9, 0xff, 0xdf, 0x7f, 0xfa, 0xff, 0xff, 0xf7, 0x6f, 0xfe, 0xbf, 0xeb, 0xaf, 0xbd, 0xfe, 0xfa, 0xab, 0xae, 0xbf, 0xfa, 0xf5, 0x56, 0x4f, 0x2e, 0xc9, 0xf1, 0xd7, 0x5f, 0xfb, 0x9b, 0xcf, 0xff, 0xbd, 0xef, 0xe1, 0xcf, 0xf6, 0xfe, 0xfb, 0xbf, 0xbf, 0x7f, 0xf6, 0xd1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xe6, 0xff, 0xbf, 0xfb, 0x7b, 0xfd, 0x3e, 0xff, 0xf7, 0xf3, 0xed, 0xfb, 0xd5, 0xcd, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xfe, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0x5b, 0xff, 0xbe, 0xef, 0xff, 0xfe, 0xff, 0xfb, 0xbf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xdc, 0xf7, 0xed, 0xf0, 0xeb, 0xa7, 0xbd, 0xfc, 0xfa, 0xeb, 0x5f, 0x36, 0xfd, 0xf7, 0xf7, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x19, 0xf7, 0xff, 0xfb, 0xbf, 0xd5, 0xeb, 0x7f, 0xf7, 0x7e, 0xfa, 0x3e, 0x7d, 0xdf, 0x7f, 0xf7, 0xef, 0xff, 0xff, 0xff, 0x7f, 0xa6, 0xbd, 0xef, 0x2f, 0xff, 0xf6, 0xdb, 0xfb, 0x8e, 0x7f, 0xde, 0xfc, 0xf7, 0xd9, 0xff, 0xdf, 0xff, 0xcf, 0x7f, 0xf7, 0xbf, 0xf1, 0xfb, 0xfd, 0xff, 0xff, 0x3f, 0xfb, 0xff, 0x7f, 0x6d, 0x3f, 0xef, 0xff, 0xbf, 0xff, 0xfe, 0xcf, 0xff, 0xe7, 0xff, 0x67, 0xfc, 0xfd, 0xd7, 0xf7, 0xdf, 0xe7, 0xe5, 0xff, 0xdf, 0xfb, 0x7f, 0xfb, 0xef, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xf7, 0xfb, 0x1b, 0xff, 0xff, 0xbf, 0x68, 0xfa, 0xfe, 0xcf, 0xda, 0x7f, 0xef, 0xfd, 0xe7, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe6, 0xff, 0xbf, 0xfe, 0xf7, 0xff, 0xff, 0xdb, 0xfe, 0xf7, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xdf, 0x6f, 0xdc, 0xfe, 0xdb, 0xff, 0xff, 0x97, 0x5e, 0xfe, 0xfd, 0xf5, 0xd7, 0xff, 0x6f, 0xfe, 0xff, 0xec, 0xff, 0xff, 0x3e, 0xcf, 0xfe, 0x7f, 0xeb, 0xfb, 0x77, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0xfd, 0xf6, 0xff, 0x9b, 0xff, 0xbf, 0xfe, 0xef, 0xff, 0xef, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfe, 0xf7, 0xf7, 0xaf, 0xff, 0xfd, 0xff, 0x86, 0xff, 0xbf, 0xf5, 0xf2, 0xfb, 0xff, 0x1f, 0xfc, 0xf3, 0xc3, 0x9d, 0xd7, 0x59, 0x4d, 0xf5, 0xf7, 0x3c, 0xff, 0xff, 0x8f, 0xd9, 0xff, 0xee, 0xff, 0xff, 0xfe, 0x9f, 0x1f, 0xff, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xf3, 0xff, 0x3d, 0xf5, 0xd7, 0xff, 0x6d, 0xfe, 0xe7, 0xcf, 0x2f, 0xff, 0xec, 0xff, 0x93, 0x53, 0xa9, 0x55, 0xed, 0xbf, 0xdf, 0x7e, 0x79, 0x6f, 0xb5, 0xb5, 0xff, 0x9b, 0xf5, 0xec, 0xf3, 0xcf, 0x7f, 0xee, 0xdf, 0x77, 0xcd, 0x3a, 0xd7, 0x4b, 0x2f, 0xbd, 0x74, 0xde, 0xeb, 0xaf, 0xff, 0xd7, 0xe6, 0xfe, 0x7f, 0xf6, 0xd7, 0x57, 0xbe, 0xfd, 0xeb, 0xfd, 0xf6, 0xfd, 0xd7, 0x4e, 0x7b, 0xcd, 0xf6, 0xd7, 0x4f, 0xff, 0xbb, 0x99, 0xff, 0xde, 0xfd, 0xff, 0x95, 0x6f, 0xff, 0x4b, 0xf5, 0x59, 0xf7, 0xbf, 0xfd, 0xea, 0xbb, 0xfd, 0xdf, 0x78, 0xbf, 0x6c, 0xec, 0xbf, 0xbe, 0x7d, 0xf7, 0xef, 0xf3, 0xff, 0xda, 0xeb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x77, 0xfe, 0xff, 0xff, 0xaf, 0x99, 0xfb, 0xaf, 0xfd, 0x97, 0x1f, 0xeb, 0xf5, 0xbf, 0xd6, 0xde, 0xff, 0x5e, 0x6b, 0xed, 0xb5, 0x9f, 0x5f, 0x7f, 0xfd, 0xef, 0xe6, 0xfd, 0xff, 0xb6, 0xeb, 0xce, 0xff, 0xdf, 0x76, 0xef, 0xff, 0x7e, 0xf7, 0xd5, 0x77, 0xdf, 0xef, 0xff, 0xdd, 0xf7, 0xbd, 0x69, 0xff, 0x7f, 0xbf, 0xf7, 0xf7, 0xfb, 0x7f, 0xde, 0xf9, 0xff, 0x9d, 0x7f, 0xfe, 0xf9, 0xe7, 0xf3, 0x7f, 0xfe, 0x79, 0x6f, 0xec, 0xff, 0xee, 0xfb, 0xed, 0xb6, 0xd7, 0x7c, 0xfb, 0xef, 0x7f, 0x2f, 0xfd, 0xf5, 0xd3, 0x5f, 0x3f, 0xed, 0xf4, 0xbf, 0x99, 0xf9, 0xf7, 0xdf, 0x6f, 0xbf, 0xff, 0xf7, 0xfb, 0xfb, 0xff, 0xff, 0xcf, 0x3e, 0x7b, 0xec, 0xf7, 0xcd, 0x36, 0xfb, 0xcf, 0xe6, 0x7e, 0xff, 0xbb, 0xef, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xdd, 0x76, 0xfb, 0xdf, 0xb5, 0xd7, 0xfe, 0xbb, 0xa9, 0xdf, 0xda, 0x3f, 0xff, 0xfc, 0xf7, 0xe2, 0xdf, 0xbf, 0xfd, 0xef, 0xb7, 0xdf, 0x7e, 0xfb, 0xff, 0xf5, 0xd7, 0xff, 0x6a, 0xde, 0xbf, 0xda, 0xaf, 0xbf, 0x2d, 0xba, 0xdc, 0xef, 0xaf, 0xff, 0x7d, 0xb7, 0xdd, 0x77, 0x7f, 0xfc, 0xfb, 0xef, 0xdf, 0x9b, 0xff, 0xbf, 0xfb, 0xeb, 0xff, 0xff, 0xaf, 0xbf, 0xdf, 0xfb, 0xd7, 0xdd, 0x7f, 0xff, 0xfd, 0xfe, 0xef, 0xf7, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xf3, 0xcf, 0x3d, 0x7a, 0xc8, 0xb3, 0x8b, 0x1e, 0x75, 0xd9, 0x67, 0x9f, 0x7d, 0x76, 0xd0, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xfb, 0xdf, 0x7f, 0xfe, 0x5f, 0xfa, 0xff, 0xbf, 0x5f, 0xfd, 0xfd, 0xf7, 0xdf, 0xff, 0xdb, 0xfe, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xbf, 0xfe, 0xff, 0xee, 0x5f, 0xd7, 0xfd, 0xf7, 0xdf, 0x7f, 0x5f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xb7, 0xfe, 0xf9, 0xef, 0xbf, 0xbf, 0xbf, 0xeb, 0x6f, 0x7f, 0x7f, 0xfd, 0xf5, 0xd7, 0x3f, 0x5b, 0x7f, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0xeb, 0xbf, 0xfb, 0xfe, 0x7f, 0xf7, 0xdf, 0x7f, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0x8f, 0xd9, 0xff, 0xf2, 0xff, 0x6f, 0xff, 0xfd, 0xff, 0x1b, 0x6f, 0x7f, 0xfb, 0xe9, 0xff, 0xdf, 0x7e, 0xfb, 0xed, 0xb7, 0xff, 0x6f, 0xfa, 0xbf, 0x6b, 0x2f, 0xbe, 0x7e, 0xe8, 0xab, 0x2f, 0xbf, 0xfe, 0x35, 0xd3, 0x5f, 0x7f, 0xad, 0x75, 0x57, 0x5d, 0xfb, 0x9b, 0xff, 0x3f, 0xff, 0xfc, 0xf4, 0xf9, 0xff, 0x3f, 0xfd, 0x7c, 0xe7, 0xfd, 0xfd, 0xff, 0xb9, 0x17, 0xdb, 0x7b, 0xdf, 0xbf, 0xc6, 0xff, 0xf5, 0xbf, 0x7f, 0xef, 0xdf, 0x3f, 0xdf, 0xeb, 0xff, 0x7f, 0xfd, 0xee, 0xff, 0x7f, 0xff, 0xfe, 0xff, 0xfd, 0x9f, 0xf9, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0x67, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xfd, 0x6f, 0xfe, 0xb7, 0xfe, 0xfa, 0xcf, 0xf7, 0xbf, 0xff, 0x7f, 0xfa, 0x7a, 0x7f, 0xbe, 0xf5, 0x77, 0x57, 0xdf, 0xb7, 0xf6, 0xff, 0x9b, 0xff, 0x9f, 0xb7, 0xfe, 0xff, 0xff, 0x7f, 0xfe, 0x7f, 0xfb, 0x77, 0xf7, 0x7f, 0xfb, 0xb6, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xcf, 0xff, 0x8f, 0xf6, 0xff, 0x5f, 0x1f, 0xfb, 0xef, 0x7f, 0x4e, 0x7f, 0xe7, 0xe7, 0xb7, 0xff, 0xdf, 0xf7, 0xbf, 0xf9, 0xff, 0xfe, 0x7f, 0xcf, 0xbf, 0xfb, 0xff, 0xeb, 0x6f, 0x9f, 0xfb, 0x3f, 0xf7, 0xff, 0xff, 0xfe, 0xf5, 0xf7, 0xff, 0x6f, 0xfe, 0xbd, 0xf5, 0xff, 0xfb, 0xef, 0xf7, 0x1f, 0x6f, 0xfb, 0xf7, 0xf7, 0xf7, 0xe7, 0x7f, 0xf7, 0xfd, 0xff, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xd7, 0x7f, 0x7f, 0xfc, 0xef, 0x5e, 0x7f, 0xf8, 0xfe, 0x7f, 0xfd, 0xf3, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xdf, 0xdf, 0xfc, 0xfd, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0x5e, 0xff, 0xff, 0xff, 0xbf, 0xa9, 0x7f, 0xff, 0xef, 0xad, 0xbd, 0x7e, 0x73, 0xff, 0xdd, 0xef, 0xbb, 0xf5, 0x96, 0x7f, 0xf7, 0xff, 0x77, 0xfb, 0xef, 0x6f, 0xfc, 0xff, 0xfe, 0xf8, 0xef, 0xaf, 0x7f, 0xfe, 0xf7, 0x3e, 0xf7, 0xff, 0xfd, 0xf5, 0xbf, 0xff, 0xfb, 0xfd, 0xf7, 0xff, 0x99, 0xff, 0xbf, 0xff, 0xff, 0x6b, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xfd, 0xff, 0x5f, 0xff, 0xfd, 0xff, 0xa6, 0xff, 0xff, 0xff, 0xd7, 0xfb, 0x6f, 0x9e, 0xbf, 0xe6, 0xf3, 0xd7, 0xff, 0xff, 0xaf, 0x9f, 0xdd, 0xff, 0xff, 0xff, 0xaf, 0xd9, 0xff, 0xff, 0xff, 0xe5, 0xff, 0xcb, 0xcf, 0xdf, 0xfc, 0x7f, 0xfb, 0xbd, 0xff, 0xfe, 0x67, 0xff, 0xf5, 0xd7, 0xff, 0x6d, 0xfe, 0xa7, 0xff, 0x7b, 0xbd, 0xb9, 0xff, 0xf5, 0x7a, 0xbd, 0xd5, 0x2f, 0xff, 0xff, 0xd4, 0xd9, 0x6d, 0xbd, 0x75, 0xfe, 0x1b, 0xf5, 0xec, 0xb3, 0xff, 0xfe, 0xfb, 0x5f, 0xb7, 0x9f, 0x7d, 0xdf, 0x5f, 0xff, 0x9f, 0xf5, 0xf7, 0xeb, 0xaf, 0xff, 0x57, 0xc6, 0x7e, 0x4d, 0x6f, 0xdf, 0x7d, 0x76, 0xfd, 0xbb, 0xd7, 0x35, 0xb7, 0xfa, 0x4c, 0xbb, 0xcd, 0xbc, 0xd7, 0x4f, 0xff, 0xbb, 0x99, 0xff, 0xf6, 0xd9, 0x63, 0xaf, 0x6d, 0xff, 0xfb, 0x76, 0x48, 0xef, 0xde, 0x5b, 0xe5, 0x3d, 0xef, 0x5f, 0x79, 0xed, 0x64, 0xec, 0xbf, 0x1e, 0x7a, 0xe8, 0xaf, 0xff, 0xff, 0xfb, 0xff, 0xdf, 0xdb, 0x07, 0xf5, 0x57, 0x71, 0xff, 0xff, 0xff, 0xbf, 0x99, 0xfb, 0x6f, 0x94, 0x5d, 0xf2, 0xdb, 0xff, 0xbf, 0xf7, 0xde, 0xdf, 0xfe, 0xe7, 0xf5, 0x75, 0xde, 0x5e, 0x7f, 0xfd, 0x6f, 0xc6, 0xfd, 0xdf, 0x7e, 0xdb, 0xed, 0xb7, 0xdd, 0xff, 0xf3, 0xff, 0xfe, 0xbf, 0xff, 0xf6, 0xdb, 0xfe, 0xf7, 0xdf, 0xf7, 0x9d, 0x71, 0xff, 0x7f, 0xbd, 0xf9, 0xc6, 0x9b, 0x7f, 0xbf, 0xf9, 0xfe, 0xff, 0xcf, 0x3f, 0xef, 0x6c, 0xf7, 0xfd, 0xf7, 0x79, 0x6f, 0xec, 0xdf, 0xbc, 0xe3, 0x8d, 0x37, 0xd6, 0x6e, 0xfb, 0xcf, 0x7f, 0xaf, 0xb1, 0xe6, 0x1a, 0x57, 0x7f, 0xfd, 0xb4, 0xaa, 0x9b, 0xf9, 0xf3, 0xdf, 0x6f, 0xff, 0xfc, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf7, 0xcf, 0x36, 0xfb, 0xcf, 0xe6, 0xfe, 0xfe, 0xfb, 0xf7, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xff, 0x7f, 0xb7, 0xd7, 0xfe, 0xbb, 0xb9, 0xff, 0xf2, 0x4f, 0x3f, 0xf5, 0xd4, 0x7f, 0x6f, 0x7d, 0x7d, 0xef, 0xcf, 0x3f, 0xff, 0xfc, 0xef, 0xff, 0xd7, 0xdf, 0x6e, 0xde, 0xbf, 0xfa, 0xea, 0xab, 0xaf, 0xfe, 0xfd, 0xab, 0xbd, 0x7c, 0x7d, 0xf3, 0xc7, 0x33, 0xff, 0xf4, 0xff, 0xee, 0xdf, 0x9b, 0xff, 0xbf, 0xfb, 0xfe, 0xfb, 0xef, 0xff, 0xf7, 0xfe, 0x7f, 0xf7, 0xfb, 0x7d, 0xbd, 0x5f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xe3, 0x8f, 0x3f, 0xfe, 0xfc, 0xe3, 0xcf, 0x3f, 0xf7, 0xf1, 0x67, 0x1e, 0x7f, 0xfe, 0xf9, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xf7, 0xef, 0xff, 0x7f, 0xff, 0xef, 0xbf, 0xdf, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0xbf, 0xfd, 0xfb, 0xff, 0x7f, 0xff, 0xfb, 0xe7, 0xf7, 0x5f, 0xff, 0xff, 0xf5, 0xff, 0x9b, 0xff, 0xbf, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xfa, 0xef, 0x77, 0xff, 0xfd, 0xf5, 0xdf, 0x57, 0xff, 0x7f, 0xfd, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xfe, 0xfb, 0x4f, 0xbf, 0xfd, 0x7f, 0xdb, 0xef, 0xef, 0xff, 0xfd, 0xf7, 0xdf, 0x7e, 0xf3, 0xe7, 0x97, 0xff, 0x6f, 0xfa, 0x7f, 0xeb, 0xae, 0xbb, 0xe6, 0xfa, 0xe3, 0xaf, 0xbb, 0xfe, 0x75, 0xc7, 0x1f, 0x3f, 0xf5, 0xd5, 0x57, 0x5f, 0xfb, 0x9b, 0xbf, 0xff, 0xfd, 0xfb, 0xff, 0xcb, 0x3e, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xef, 0xb6, 0xd9, 0x67, 0xff, 0xf7, 0xfe, 0xf9, 0xc6, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xeb, 0xef, 0xff, 0x7b, 0xf7, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xd9, 0xbf, 0x6f, 0xff, 0xff, 0x7f, 0xfb, 0xd2, 0xfd, 0xf7, 0xdf, 0xdb, 0xbf, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0x7a, 0x2b, 0xef, 0xff, 0xfe, 0xfb, 0xff, 0xfe, 0xc7, 0xf9, 0xf7, 0xdd, 0xff, 0x7f, 0xfd, 0xf1, 0xff, 0x99, 0xff, 0x9f, 0x7f, 0xde, 0xf9, 0xdf, 0xe7, 0xfe, 0xbf, 0xff, 0xff, 0xdf, 0xb7, 0xff, 0xdf, 0xff, 0x3d, 0x5f, 0xff, 0x7f, 0xe6, 0xbf, 0xff, 0xbe, 0xff, 0xb5, 0xfb, 0xff, 0xef, 0x7f, 0xfe, 0xfe, 0xcf, 0xdf, 0x7f, 0xdf, 0xff, 0x7f, 0xfd, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xdf, 0xfd, 0x3f, 0xf6, 0xff, 0xbf, 0xaf, 0x7f, 0xfd, 0xf5, 0x7f, 0x5f, 0x5f, 0xff, 0x75, 0xf7, 0xff, 0x67, 0xfe, 0xfe, 0xff, 0xf7, 0x7f, 0xff, 0xf7, 0xef, 0xff, 0xfe, 0xf7, 0xef, 0xd7, 0x7f, 0xff, 0x7f, 0xff, 0xef, 0xd7, 0xfb, 0x9b, 0xff, 0xfd, 0xdf, 0xff, 0xff, 0xe3, 0xce, 0x3e, 0xff, 0xff, 0xe7, 0xbf, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x9f, 0xff, 0x7f, 0xe6, 0xff, 0xfe, 0xfd, 0xdf, 0xff, 0xfb, 0xb3, 0xcf, 0xff, 0xff, 0xf9, 0xef, 0xff, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0x7a, 0xeb, 0xff, 0xff, 0xed, 0xfb, 0xaf, 0xbe, 0xff, 0xfd, 0xe7, 0xff, 0x7f, 0xc7, 0xbf, 0xe7, 0xff, 0xff, 0x6f, 0xfc, 0xff, 0xfe, 0xfa, 0xff, 0xf7, 0x7f, 0xf6, 0xf9, 0xef, 0x7b, 0xff, 0xfd, 0x9f, 0xdd, 0x7e, 0xf3, 0xfd, 0xf7, 0xff, 0x9b, 0xef, 0xdf, 0xff, 0xff, 0xef, 0xff, 0xdf, 0x7f, 0x7f, 0xfc, 0xd7, 0x9f, 0xfd, 0xdf, 0xf5, 0xdf, 0x5f, 0xff, 0xfd, 0xff, 0x86, 0xff, 0xef, 0xff, 0xff, 0x5f, 0xea, 0x3b, 0xbf, 0xbe, 0x9f, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xd9, 0xff, 0xff, 0xff, 0xaf, 0xa7, 0xfc, 0xf6, 0xdb, 0xef, 0xff, 0x3f, 0xff, 0xf7, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0xff, 0x6d, 0xfe, 0xa7, 0xce, 0xfe, 0xff, 0xaf, 0xf7, 0xde, 0x3e, 0x7b, 0xff, 0xaf, 0x8d, 0xf7, 0xd6, 0x5b, 0x6f, 0xbd, 0xf5, 0xff, 0x9b, 0xf5, 0xed, 0xb7, 0xff, 0x7a, 0xeb, 0xb5, 0xd7, 0xfe, 0xfe, 0xff, 0x7b, 0xef, 0xbd, 0xfe, 0xfa, 0xeb, 0xaf, 0xff, 0xd7, 0xe6, 0xfe, 0xee, 0x32, 0xff, 0xbf, 0xdf, 0x7b, 0xbf, 0xd5, 0xff, 0xbf, 0xdd, 0xc2, 0x7f, 0xfd, 0xb5, 0xd3, 0x4c, 0xfb, 0xbb, 0x99, 0xfe, 0xef, 0xd9, 0xa7, 0xfe, 0xfb, 0xde, 0x7b, 0xf7, 0xfe, 0xef, 0xdf, 0x73, 0xff, 0xbf, 0x6f, 0x3e, 0xfb, 0xbe, 0x6c, 0xec, 0xbf, 0xbe, 0x7a, 0xfc, 0xaf, 0xfe, 0xfe, 0xde, 0xea, 0xbf, 0xab, 0x75, 0xf7, 0xff, 0xf6, 0xdf, 0xff, 0xff, 0xbf, 0x99, 0xfb, 0xef, 0xbf, 0x5d, 0xfa, 0xeb, 0xbf, 0xfd, 0xf6, 0xfa, 0xff, 0xf8, 0xff, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xef, 0xe6, 0xfd, 0xff, 0x76, 0xff, 0x6f, 0xff, 0xff, 0xee, 0xff, 0xff, 0x76, 0xbb, 0xfd, 0x7f, 0xdf, 0x7d, 0xf7, 0xfd, 0xf7, 0xbd, 0x79, 0xff, 0x7f, 0xbf, 0xfd, 0xf7, 0xd7, 0x3f, 0xff, 0xff, 0xff, 0xbf, 0xcf, 0xf3, 0xdf, 0x65, 0x9f, 0x7d, 0xf6, 0x79, 0x6f, 0xec, 0xff, 0x6e, 0xe3, 0xee, 0xbb, 0xb9, 0xfe, 0x7a, 0xed, 0x75, 0x9f, 0xf1, 0xb5, 0xd3, 0x4b, 0x3f, 0xbd, 0xf4, 0xbf, 0x99, 0xf9, 0xff, 0xcf, 0xff, 0xff, 0xbf, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0xdf, 0xed, 0xb3, 0xcd, 0x3e, 0xfb, 0xcf, 0xe6, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdb, 0xef, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0x7b, 0xed, 0xb6, 0xd7, 0xfe, 0xbb, 0xa9, 0xff, 0xfb, 0x4b, 0xf7, 0xbf, 0xf6, 0xdf, 0x7f, 0xaf, 0xff, 0xaf, 0xcf, 0xff, 0xff, 0x7f, 0xfd, 0xf5, 0xd7, 0xff, 0x6a, 0xd8, 0xff, 0xdc, 0xea, 0xdf, 0x2f, 0xfe, 0xfb, 0xef, 0xdb, 0xfd, 0xfd, 0xb3, 0xef, 0x57, 0xf9, 0xfd, 0xb7, 0xdf, 0xdf, 0x9b, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xeb, 0xae, 0xfb, 0x7f, 0xfa, 0xff, 0x7f, 0xaf, 0xbf, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xef, 0xf3, 0xcf, 0x3f, 0xfa, 0xe8, 0xf3, 0x8f, 0x3f, 0xff, 0x91, 0xe5, 0x9f, 0x7f, 0xf4, 0xd1, 0x47, 0x9f, 0xbf, 0xf9, 0xff, 0xfa, 0xef, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xbf, 0xff, 0xff, 0xef, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xff, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xff, 0xff, 0xff, 0x7b, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xbf, 0xff, 0xbe, 0xfa, 0xfb, 0x7f, 0xff, 0x75, 0xf9, 0xd5, 0x57, 0x5f, 0x7d, 0xf5, 0xff, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xf7, 0x5d, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xf9, 0xff, 0xf2, 0xcb, 0x2f, 0xff, 0xff, 0xf3, 0xbf, 0xef, 0xfe, 0xff, 0xcf, 0xa7, 0xdf, 0x7e, 0xfb, 0xef, 0xa7, 0xff, 0x6f, 0xfa, 0xff, 0xeb, 0xad, 0xbf, 0xfe, 0xd8, 0xeb, 0x8f, 0xb7, 0xee, 0xf5, 0xd7, 0x5a, 0x7f, 0xdd, 0xf5, 0xc7, 0x5d, 0xff, 0x9b, 0xff, 0xdf, 0xdf, 0x7f, 0xdd, 0xbf, 0xff, 0xfe, 0xf3, 0xbf, 0x9f, 0xdf, 0xdd, 0xfd, 0xf9, 0xf7, 0xdf, 0xfd, 0xff, 0xbf, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xd3, 0xff, 0xff, 0xff, 0xcf, 0xfb, 0xfd, 0xff, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xdf, 0xfd, 0xfb, 0xff, 0xdd, 0xef, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xbf, 0xfe, 0xfa, 0xab, 0xa7, 0xef, 0x7e, 0xfb, 0xcd, 0x5b, 0xff, 0xfd, 0xf1, 0x47, 0x5f, 0x7f, 0xbd, 0xf5, 0xff, 0x9b, 0xff, 0x5f, 0x7f, 0xfe, 0xf5, 0xd7, 0xff, 0xfe, 0xff, 0xff, 0xd7, 0xff, 0x7f, 0xff, 0xdf, 0xdf, 0x7f, 0xff, 0xfc, 0xff, 0xe6, 0xff, 0xdf, 0x9f, 0x7f, 0xfe, 0xab, 0xfb, 0x6e, 0xbf, 0xef, 0xf6, 0xd7, 0x3f, 0x7f, 0xff, 0xe5, 0xd7, 0x7f, 0xf7, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xed, 0x1f, 0xbf, 0xfe, 0xff, 0x7f, 0x7f, 0xbb, 0x69, 0xfe, 0xff, 0x7f, 0xff, 0xdd, 0xf7, 0x7f, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0x7b, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xce, 0xbe, 0xfd, 0x7f, 0xff, 0xdf, 0x7e, 0x3b, 0xed, 0xfb, 0x9b, 0xfd, 0xff, 0xff, 0xdf, 0xef, 0xf3, 0x7b, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xe6, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xb7, 0x7f, 0xf9, 0x7b, 0xef, 0xbd, 0xf7, 0xdf, 0x75, 0xd7, 0xff, 0xe7, 0xfb, 0xef, 0xbc, 0xff, 0x6f, 0xfc, 0xff, 0xff, 0xef, 0x37, 0xf7, 0xde, 0xfa, 0xf8, 0xe2, 0x7f, 0xff, 0xed, 0xb7, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xfe, 0xff, 0xfe, 0xbf, 0xff, 0xbe, 0xff, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xe9, 0xe4, 0xf2, 0xbf, 0x7a, 0xf3, 0x7d, 0xff, 0xf5, 0xff, 0x5f, 0xff, 0x8f, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x5e, 0xf9, 0xe5, 0xf3, 0x9f, 0xff, 0x7f, 0xdf, 0x7f, 0xff, 0xfd, 0xdf, 0xff, 0x6d, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xd7, 0x6b, 0xbb, 0xff, 0xaf, 0xf7, 0xff, 0xdc, 0x5f, 0xaf, 0xfd, 0xfd, 0xff, 0x9b, 0xf5, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xef, 0xd7, 0x5e, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xf4, 0x79, 0xef, 0xfd, 0xd7, 0xa6, 0x7e, 0xfd, 0xbb, 0xff, 0xff, 0xdf, 0xed, 0xe5, 0xfd, 0x66, 0xbf, 0xfa, 0xea, 0x5b, 0xab, 0xb4, 0xf2, 0xc3, 0xb3, 0xbb, 0x99, 0x5f, 0xff, 0xaf, 0xbf, 0xda, 0x1b, 0xaa, 0x79, 0xef, 0xfd, 0xef, 0x3e, 0xfb, 0xca, 0xac, 0xaf, 0xf4, 0xda, 0xea, 0x6c, 0xe6, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xf6, 0xfe, 0xfb, 0xfb, 0xbf, 0x8f, 0xbe, 0xfa, 0xdf, 0xfe, 0x7f, 0xfd, 0xfd, 0xbf, 0x99, 0xfb, 0xff, 0xbf, 0xfe, 0xfb, 0x7f, 0xa9, 0xff, 0xf6, 0xdb, 0xff, 0xf8, 0xab, 0xaf, 0xdf, 0xff, 0xdf, 0xff, 0xfd, 0xef, 0xc6, 0xbd, 0xff, 0xff, 0xfb, 0x6f, 0x37, 0xfe, 0xfe, 0xbb, 0xff, 0xf6, 0xdf, 0x7f, 0x97, 0x9f, 0x7f, 0xfe, 0xf9, 0xff, 0xbd, 0x79, 0x1f, 0xff, 0xff, 0xf5, 0xff, 0xf9, 0x7f, 0xfd, 0xfc, 0xff, 0x3f, 0xff, 0xfe, 0xfb, 0xee, 0xbf, 0xdf, 0xfe, 0x7b, 0x6f, 0xec, 0xff, 0xfe, 0xfb, 0xee, 0x3f, 0xfe, 0xbe, 0xfa, 0xeb, 0x75, 0xbf, 0x3d, 0x76, 0x9f, 0x69, 0xb7, 0xdd, 0x76, 0xbf, 0x99, 0xf9, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xe7, 0xff, 0xff, 0xfe, 0xfb, 0xe7, 0xb7, 0xff, 0xcf, 0xe6, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xbf, 0xff, 0xf7, 0xdd, 0x7f, 0xdf, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xbb, 0xb9, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xf1, 0xfb, 0x7f, 0xff, 0xfd, 0xa7, 0x9f, 0x7f, 0xde, 0xed, 0xff, 0xff, 0xff, 0xff, 0x6a, 0xde, 0xff, 0xff, 0xf2, 0xdd, 0x7d, 0xde, 0xfc, 0xef, 0xbf, 0xfd, 0xfd, 0xf7, 0xdf, 0x5f, 0xff, 0xfd, 0x95, 0xdf, 0xcf, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0xa7, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xed, 0xff, 0xfd, 0xdf, 0x7f, 0xff, 0xfd, 0xfe, 0xe6, 0xff, 0xff, 0xf3, 0xcf, 0x3e, 0xff, 0xe8, 0xa3, 0xcf, 0x3f, 0xef, 0xf9, 0xe7, 0x96, 0x39, 0xfc, 0xf9, 0x43, 0x9f, 0xbf, 0xf9, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xfd, 0xfb, 0xeb, 0xaf, 0xff, 0xfb, 0xef, 0x3f, 0x7f, 0xbf, 0xfd, 0xfd, 0xd3, 0xdf, 0x6f, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0x3f, 0xff, 0xfe, 0xfa, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xdb, 0x7f, 0xbf, 0xf5, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xbf, 0xff, 0xff, 0xfb, 0xea, 0x3f, 0xff, 0xfc, 0xd7, 0xdd, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xe6, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xff, 0xf7, 0xfb, 0xff, 0x8f, 0xd9, 0xff, 0xef, 0xcb, 0xeb, 0xaf, 0xfc, 0xe6, 0x4f, 0xff, 0xff, 0xfb, 0xed, 0xb7, 0x9f, 0xfe, 0xf3, 0xe5, 0xbf, 0xff, 0x6f, 0xfe, 0xff, 0xeb, 0xaf, 0xb9, 0xde, 0x7a, 0xeb, 0xaf, 0xbe, 0xee, 0xd5, 0xc7, 0x5d, 0x75, 0xfd, 0x75, 0xd7, 0x5f, 0xff, 0x9b, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xe7, 0xef, 0xff, 0xef, 0x97, 0x1f, 0x7e, 0xdb, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xc6, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x7f, 0x73, 0xd7, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xdd, 0x7f, 0xef, 0xdf, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x6f, 0xfc, 0xff, 0xfb, 0xfa, 0xcb, 0xef, 0x37, 0xff, 0xf4, 0xcf, 0x7f, 0xfe, 0xf9, 0xf9, 0xc7, 0x7f, 0x7f, 0xfd, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0x7f, 0xfd, 0xbb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xf7, 0x7f, 0x7b, 0xf7, 0x3f, 0x7f, 0xff, 0xff, 0x66, 0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xfe, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff, 0x6f, 0xfa, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xef, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xfd, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0x7f, 0xff, 0xf3, 0x93, 0x7f, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xdf, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x66, 0xff, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xfd, 0xf8, 0xe7, 0x9f, 0x7f, 0xfa, 0xf9, 0xe7, 0x1f, 0x7f, 0xfe, 0x9f, 0xf9, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x3f, 0xff, 0xfb, 0x6f, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0x6f, 0xfe, 0xff, 0xfe, 0xfa, 0xe3, 0xb7, 0xfd, 0xee, 0x7b, 0xed, 0x7e, 0xff, 0xbd, 0xf6, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xa6, 0xff, 0xef, 0xaf, 0x7f, 0xfe, 0xfb, 0xaf, 0xbf, 0xff, 0xfc, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xbf, 0xf9, 0xff, 0xfc, 0xf7, 0xdf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x77, 0xfe, 0xf9, 0xe7, 0x9f, 0x3f, 0xfe, 0xf9, 0xe7, 0xff, 0x6f, 0xfe, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0x9b, 0xff, 0x9f, 0x7e, 0xfa, 0xe9, 0xa7, 0x9f, 0x7e, 0xfa, 0xe9, 0x4f, 0x3f, 0xfd, 0xf4, 0xd3, 0x4f, 0x3f, 0xfd, 0xf4, 0xff, 0xe6, 0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xdf, 0xbb, 0xef, 0xbf, 0xfb, 0xfe, 0xfb, 0xef, 0xbf, 0xfb, 0xbf, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfe, 0x7f, 0xfb, 0xfd, 0xf7, 0xdf, 0xff, 0xff, 0x7f, 0xf7, 0xbb, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x1f, 0xfb, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xdf, 0x7f, 0xff, 0xf9, 0xf7, 0xd7, 0x7f, 0xff, 0xfd, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xbf, 0xb9, 0xff, 0x37, 0xdf, 0x7e, 0xf3, 0xad, 0x37, 0xdf, 0x7e, 0xfb, 0xdb, 0x6f, 0xbf, 0xfd, 0xf6, 0xdb, 0x6f, 0xbf, 0xf9, 0x6f, 0xfe, 0xff, 0xf5, 0xdf, 0x7f, 0xfb, 0xfd, 0xf5, 0xdf, 0x7f, 0xef, 0xdb, 0xef, 0xbb, 0xff, 0xfe, 0xfb, 0xef, 0xaf, 0xff, 0x9b, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xbd, 0xff, 0x7e, 0xfa, 0xee, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xe6, 0xff, 0xbf, 0xff, 0xfe, 0xbb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfc, 0xbf, 0xf9, 0xff, 0x2f, 0xbf, 0xfe, 0xf2, 0x6b, 0x2f, 0xbf, 0xff, 0xfe, 0x77, 0x5f, 0x7f, 0xff, 0xf5, 0xf7, 0x5f, 0x7f, 0xf9, 0x6f, 0xfe, 0xff, 0xf9, 0xef, 0xbf, 0xff, 0xfe, 0xf9, 0xef, 0xbf, 0xff, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xcf, 0xff, 0x9b, 0xff, 0xff, 0xfc, 0xf3, 0xcf, 0x3f, 0xff, 0xfc, 0xf3, 0xcf, 0x7b, 0xfe, 0xf9, 0xe7, 0x9f, 0x7f, 0xfe, 0xf9, 0xe7, 0xf7, 0xe6, 0xff, 0x5f, 0x7f, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xfe, 0xfa, 0xbf, 0xf9, 0xff, 0x1b, 0x7f, 0xfd, 0xf1, 0xd7, 0x1b, 0x7f, 0xfd, 0xf5, 0xaf, 0xbf, 0xfe, 0xfa, 0xeb, 0xaf, 0xbf, 0xde, 0xf8, 0x6f, 0xee, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xee, 0xfb, 0x2f, 0x7f, 0xfd, 0xfd, 0xd7, 0xdf, 0x7f, 0xff, 0xfd, 0x77, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xef, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbb, 0xe7, 0x6d, 0xf7, 0xdd, 0x77, 0xff, 0x7f, 0xf7, 0xdf, 0xff, 0xbf, 0xf9, 0xbf, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0xf6, 0xdb, 0xdb, 0x7a, 0xfb, 0xad, 0xbf, 0xdd, 0xfa, 0xeb, 0xef, 0x6f, 0xfe, 0xff }; /* rom names */ #define SPPAFSK_ROM_DIVROM0 0 #define SPPAFSK_ROM_DIVROM1 16 #define SPPAFSK_ROM_DIVROM2 32 #define SPPAFSK_ROM_SWROMIE 48 #define SPPAFSK_ROM_SWROMOE 64 #define SPPAFSK_ROM_CLKSELROM 80 #define SPPAFSK_ROM_PTTMUTEROM 96 /* rom locations */ static const unsigned long sppafsk_roms[112] = { 49076, 48908, 49408, 49240, 49740, 49572, 50072, 49904, 48910, 49074, 49242, 49406, 49574, 49738, 49906, 50070, 42914, 42746, 43578, 43410, 43246, 43078, 43910, 43742, 42748, 42912, 43412, 43576, 43080, 43244, 43744, 43908, 39924, 40092, 39592, 39760, 39260, 39428, 38928, 39096, 40090, 39926, 39758, 39594, 39426, 39262, 39094, 38930, 55062, 54894, 55726, 55558, 55394, 55226, 56058, 55890, 54896, 55060, 55560, 55724, 55228, 55392, 55892, 56056, 42944, 42776, 43608, 43440, 43276, 43108, 43940, 43772, 42778, 42942, 43442, 43606, 43110, 43274, 43774, 43938, 34039, 33375, 34205, 33541, 34207, 33543, 34041, 33377, 33707, 33043, 33873, 33209, 33875, 33211, 33709, 33045, 67065, 66897, 67397, 67229, 67729, 67561, 68061, 67893, 66899, 67063, 67231, 67395, 67563, 67727, 67895, 68059 }; baycomepp-0.10.orig/main/epp_fpga.h0100644000175100017510000002305006735660170015273 0ustar abaaba/*****************************************************************************/ /* * epp_fpga.h -- HDLC packet radio modem for EPP using FPGA utility. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ /* automatically generated, do not edit */ #define FPGA_PART "XCS10_PC84" #define FPGA_BOUND 344 #define FPGA_FRAMELEN 166 #define FPGA_NUMFRAMES 572 /*#define FPGA_CONFIGSIZE ((FPGA_FRAMELEN*FPGA_NUMFRAMES+56)/8)*/ #define FPGA_CONFIGSIZE 11876 #define FPGA_BOUNDSIZE ((FPGA_BOUND+7)/8) /* safe boundary */ static const unsigned char fpga_safebound[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; /* IO pin names */ #define FPGA_PIN_RAMD0_T 253 #define FPGA_PIN_RAMD0_O 254 #define FPGA_PIN_RAMD0_I 255 #define FPGA_PIN_RAMD1_T 241 #define FPGA_PIN_RAMD1_O 242 #define FPGA_PIN_RAMD1_I 243 #define FPGA_PIN_RAMD2_T 229 #define FPGA_PIN_RAMD2_O 230 #define FPGA_PIN_RAMD2_I 231 #define FPGA_PIN_RAMD3_T 217 #define FPGA_PIN_RAMD3_O 218 #define FPGA_PIN_RAMD3_I 219 #define FPGA_PIN_RAMD4_T 220 #define FPGA_PIN_RAMD4_O 221 #define FPGA_PIN_RAMD4_I 222 #define FPGA_PIN_RAMD5_T 232 #define FPGA_PIN_RAMD5_O 233 #define FPGA_PIN_RAMD5_I 234 #define FPGA_PIN_RAMD6_T 244 #define FPGA_PIN_RAMD6_O 245 #define FPGA_PIN_RAMD6_I 246 #define FPGA_PIN_RAMD7_T 256 #define FPGA_PIN_RAMD7_O 257 #define FPGA_PIN_RAMD7_I 258 #define FPGA_PIN_RAMA0_T 259 #define FPGA_PIN_RAMA0_O 260 #define FPGA_PIN_RAMA0_I 261 #define FPGA_PIN_RAMA1_T 262 #define FPGA_PIN_RAMA1_O 263 #define FPGA_PIN_RAMA1_I 264 #define FPGA_PIN_RAMA2_T 283 #define FPGA_PIN_RAMA2_O 284 #define FPGA_PIN_RAMA2_I 285 #define FPGA_PIN_RAMA3_T 295 #define FPGA_PIN_RAMA3_O 296 #define FPGA_PIN_RAMA3_I 297 #define FPGA_PIN_RAMA4_T 301 #define FPGA_PIN_RAMA4_O 302 #define FPGA_PIN_RAMA4_I 303 #define FPGA_PIN_RAMA5_T 313 #define FPGA_PIN_RAMA5_O 314 #define FPGA_PIN_RAMA5_I 315 #define FPGA_PIN_RAMA6_T 325 #define FPGA_PIN_RAMA6_O 326 #define FPGA_PIN_RAMA6_I 327 #define FPGA_PIN_RAMA7_T 337 #define FPGA_PIN_RAMA7_O 338 #define FPGA_PIN_RAMA7_I 339 #define FPGA_PIN_RAMA8_T 328 #define FPGA_PIN_RAMA8_O 329 #define FPGA_PIN_RAMA8_I 330 #define FPGA_PIN_RAMA9_T 316 #define FPGA_PIN_RAMA9_O 317 #define FPGA_PIN_RAMA9_I 318 #define FPGA_PIN_RAMA10_T 286 #define FPGA_PIN_RAMA10_O 287 #define FPGA_PIN_RAMA10_I 288 #define FPGA_PIN_RAMA11_T 304 #define FPGA_PIN_RAMA11_O 305 #define FPGA_PIN_RAMA11_I 306 #define FPGA_PIN_RAMA12_T 2 #define FPGA_PIN_RAMA12_O 3 #define FPGA_PIN_RAMA12_I 4 #define FPGA_PIN_RAMA13_T 340 #define FPGA_PIN_RAMA13_O 341 #define FPGA_PIN_RAMA13_I 342 #define FPGA_PIN_RAMA14_T 14 #define FPGA_PIN_RAMA14_O 15 #define FPGA_PIN_RAMA14_I 16 #define FPGA_PIN_RAMCE_T 271 #define FPGA_PIN_RAMCE_O 272 #define FPGA_PIN_RAMCE_I 273 #define FPGA_PIN_RAMOE_T 298 #define FPGA_PIN_RAMOE_O 299 #define FPGA_PIN_RAMOE_I 300 #define FPGA_PIN_RAMWR_T 5 #define FPGA_PIN_RAMWR_O 6 #define FPGA_PIN_RAMWR_I 7 #define FPGA_PIN_EPPDATA0_T -1 #define FPGA_PIN_EPPDATA0_O -1 #define FPGA_PIN_EPPDATA0_I -1 #define FPGA_PIN_EPPDATA1_T -1 #define FPGA_PIN_EPPDATA1_O -1 #define FPGA_PIN_EPPDATA1_I -1 #define FPGA_PIN_EPPDATA2_T -1 #define FPGA_PIN_EPPDATA2_O -1 #define FPGA_PIN_EPPDATA2_I -1 #define FPGA_PIN_EPPDATA3_T 113 #define FPGA_PIN_EPPDATA3_O 114 #define FPGA_PIN_EPPDATA3_I 115 #define FPGA_PIN_EPPDATA4_T 122 #define FPGA_PIN_EPPDATA4_O 123 #define FPGA_PIN_EPPDATA4_I 124 #define FPGA_PIN_EPPDATA5_T 125 #define FPGA_PIN_EPPDATA5_O 126 #define FPGA_PIN_EPPDATA5_I 127 #define FPGA_PIN_EPPDATA6_T 128 #define FPGA_PIN_EPPDATA6_O 129 #define FPGA_PIN_EPPDATA6_I 130 #define FPGA_PIN_EPPDATA7_T 131 #define FPGA_PIN_EPPDATA7_O 132 #define FPGA_PIN_EPPDATA7_I 133 #define FPGA_PIN_EPPNADDRSTB_T 140 #define FPGA_PIN_EPPNADDRSTB_O 141 #define FPGA_PIN_EPPNADDRSTB_I 142 #define FPGA_PIN_EPPNDATASTB_T 86 #define FPGA_PIN_EPPNDATASTB_O 87 #define FPGA_PIN_EPPNDATASTB_I 88 #define FPGA_PIN_EPPNWRITE_T 89 #define FPGA_PIN_EPPNWRITE_O 90 #define FPGA_PIN_EPPNWRITE_I 91 #define FPGA_PIN_EPPNRESET_T 83 #define FPGA_PIN_EPPNRESET_O 84 #define FPGA_PIN_EPPNRESET_I 85 #define FPGA_PIN_EPPNWAIT_T -1 #define FPGA_PIN_EPPNWAIT_O -1 #define FPGA_PIN_EPPNWAIT_I -1 #define FPGA_PIN_EPPNINTR_T -1 #define FPGA_PIN_EPPNINTR_O -1 #define FPGA_PIN_EPPNINTR_I -1 #define FPGA_PIN_SPPSELECT_T -1 #define FPGA_PIN_SPPSELECT_O -1 #define FPGA_PIN_SPPSELECT_I -1 #define FPGA_PIN_DAC0_T 47 #define FPGA_PIN_DAC0_O 48 #define FPGA_PIN_DAC0_I 49 #define FPGA_PIN_DAC1_T 56 #define FPGA_PIN_DAC1_O 57 #define FPGA_PIN_DAC1_I 58 #define FPGA_PIN_DAC2_T 59 #define FPGA_PIN_DAC2_O 60 #define FPGA_PIN_DAC2_I 61 #define FPGA_PIN_DAC3_T 68 #define FPGA_PIN_DAC3_O 69 #define FPGA_PIN_DAC3_I 70 #define FPGA_PIN_DAC4_T 71 #define FPGA_PIN_DAC4_O 72 #define FPGA_PIN_DAC4_I 73 #define FPGA_PIN_DAC5_T 41 #define FPGA_PIN_DAC5_O 42 #define FPGA_PIN_DAC5_I 43 #define FPGA_PIN_DAC6_T 38 #define FPGA_PIN_DAC6_O 39 #define FPGA_PIN_DAC6_I 40 #define FPGA_PIN_DINDAC_T 44 #define FPGA_PIN_DINDAC_O 45 #define FPGA_PIN_DINDAC_I 46 #define FPGA_PIN_DIN_T 80 #define FPGA_PIN_DIN_O 81 #define FPGA_PIN_DIN_I 82 #define FPGA_PIN_RXC_T 143 #define FPGA_PIN_RXC_O 144 #define FPGA_PIN_RXC_I 145 #define FPGA_PIN_RXD_T 164 #define FPGA_PIN_RXD_O 165 #define FPGA_PIN_RXD_I 166 #define FPGA_PIN_TXC_T 152 #define FPGA_PIN_TXC_O 153 #define FPGA_PIN_TXC_I 154 #define FPGA_PIN_TXD_T 178 #define FPGA_PIN_TXD_O 179 #define FPGA_PIN_TXD_I 180 #define FPGA_PIN_DCD_T 167 #define FPGA_PIN_DCD_O 168 #define FPGA_PIN_DCD_I 169 #define FPGA_PIN_MRES_T 199 #define FPGA_PIN_MRES_O 200 #define FPGA_PIN_MRES_I 201 #define FPGA_PIN_EPPNERR_T 202 #define FPGA_PIN_EPPNERR_O 203 #define FPGA_PIN_EPPNERR_I 204 #define FPGA_PIN_SPPPE_T 211 #define FPGA_PIN_SPPPE_O 212 #define FPGA_PIN_SPPPE_I 213 #define FPGA_PIN_CLKFPGA_T 175 #define FPGA_PIN_CLKFPGA_O 176 #define FPGA_PIN_CLKFPGA_I 177 #define FPGA_PIN_LEDPTT_T 190 #define FPGA_PIN_LEDPTT_O 191 #define FPGA_PIN_LEDPTT_I 192 #define FPGA_PIN_LEDDCD_T 17 #define FPGA_PIN_LEDDCD_O 18 #define FPGA_PIN_LEDDCD_I 19 #define FPGA_PIN_LEDSTA_T 26 #define FPGA_PIN_LEDSTA_O 27 #define FPGA_PIN_LEDSTA_I 28 #define FPGA_PIN_LEDCON_T 29 #define FPGA_PIN_LEDCON_O 30 #define FPGA_PIN_LEDCON_I 31 baycomepp-0.10.orig/main/ppdirect.c0100644000175100017510000005030506717017635015324 0ustar abaaba/*****************************************************************************/ /* * ppdirect.c -- Parport direct access. * * Copyright (C) 1998-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #if defined(HAVE_SYS_IO_H) #include #elif defined(HAVE_ASM_IO_H) #include #endif #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ unsigned int pp_direct_iobase = 0x378; unsigned int pp_direct_flags = 0; #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ extern inline void setecr(unsigned char ecr) { if (pp_direct_flags & FLAGS_PCECR) outb(ecr, pp_direct_iobase + LPTREG_ECONTROL); } int pp_direct_epp_clear_timeout(void) { unsigned char r; if (!(inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT)) return 1; /* To clear timeout some chips require double read */ inb(pp_direct_iobase + LPTREG_STATUS); r = inb(pp_direct_iobase + LPTREG_STATUS); outb(r | 0x01, pp_direct_iobase + LPTREG_STATUS); /* Some reset by writing 1 */ outb(r & 0xfe, pp_direct_iobase + LPTREG_STATUS); /* Others by writing 0 */ r = inb(pp_direct_iobase + LPTREG_STATUS); return !(r & 0x01); } /* ---------------------------------------------------------------------- */ unsigned char parport_direct_read_data(void) { return inb(pp_direct_iobase + LPTREG_DATA); } void parport_direct_write_data(unsigned char d) { outb(d, pp_direct_iobase + LPTREG_DATA); } unsigned char parport_direct_read_status(void) { return inb(pp_direct_iobase + LPTREG_STATUS); } unsigned char parport_direct_read_control(void) { return inb(pp_direct_iobase + LPTREG_CONTROL); } void parport_direct_write_control(unsigned char d) { outb(d, pp_direct_iobase + LPTREG_CONTROL); } void parport_direct_frob_control(unsigned char mask, unsigned char val) { unsigned char d = inb(pp_direct_iobase + LPTREG_CONTROL); d = (d & (~mask)) ^ val; outb(d, pp_direct_iobase + LPTREG_CONTROL); } /* ---------------------------------------------------------------------- */ unsigned parport_direct_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { outb(*bp, pp_direct_iobase + LPTREG_EPPDATA); if (inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_direct_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_direct_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = inb(pp_direct_iobase + LPTREG_EPPDATA); if (inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_direct_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_direct_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { outb(*bp, pp_direct_iobase + LPTREG_EPPADDR); if (inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_direct_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_direct_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = inb(pp_direct_iobase + LPTREG_EPPADDR); if (inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_direct_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_direct_emul_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, pp_direct_iobase + LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { outb(*bp, pp_direct_iobase + LPTREG_DATA); for (tmo = 0; ; tmo++) { if (inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_DATASTB, pp_direct_iobase + LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, pp_direct_iobase + LPTREG_CONTROL); ret++; } return ret; } unsigned parport_direct_emul_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, pp_direct_iobase + LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_DATASTB, pp_direct_iobase + LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = inb(pp_direct_iobase + LPTREG_DATA); outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, pp_direct_iobase + LPTREG_CONTROL); ret++; } return ret; } unsigned parport_direct_emul_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, pp_direct_iobase + LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { outb(*bp, pp_direct_iobase + LPTREG_DATA); for (tmo = 0; ; tmo++) { if (inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_ADDRSTB, pp_direct_iobase + LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, pp_direct_iobase + LPTREG_CONTROL); ret++; } return ret; } unsigned parport_direct_emul_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, pp_direct_iobase + LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_ADDRSTB, pp_direct_iobase + LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(inb(pp_direct_iobase + LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = inb(pp_direct_iobase + LPTREG_DATA); outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, pp_direct_iobase + LPTREG_CONTROL); ret++; } return ret; } /* ---------------------------------------------------------------------- */ static int ecp_forward(void) { unsigned tmo = 0x10000; if (inb(pp_direct_iobase + LPTREG_DSR) & 0x20) return 0; /* Event 47: Set nInit high */ outb(0x26, pp_direct_iobase + LPTREG_DCR); /* Event 49: PError goes high */ while (!(inb(pp_direct_iobase + LPTREG_DSR) & 0x20)) { if (!(--tmo)) return -1; } /* start driving the bus */ outb(0x04, pp_direct_iobase + LPTREG_DCR); return 0; } static int ecp_reverse(void) { unsigned tmo = 0x10000; if (!(inb(pp_direct_iobase + LPTREG_DSR) & 0x20)) return 0; outb(0x24, pp_direct_iobase + LPTREG_DCR); /* Event 39: Set nInit low to initiate bus reversal */ outb(0x20, pp_direct_iobase + LPTREG_DCR); while (inb(pp_direct_iobase + LPTREG_DSR) & 0x20) { if (!(--tmo)) return -1; } return 0; } static unsigned emptyfifo(unsigned cnt) { unsigned fcnt = 0; outb(0xd0, pp_direct_iobase + LPTREG_ECONTROL); /* FIFOtest mode */ while ((inb(pp_direct_iobase + LPTREG_ECONTROL) & 0x01) && fcnt < 32 && fcnt < cnt) { inb(pp_direct_iobase + LPTREG_TFIFO); fcnt++; } printf("emptyfifo: FIFO contained %d bytes\n", fcnt); outb(0x30, pp_direct_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return cnt - fcnt; } unsigned parport_direct_ecp_write_data(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (ecp_forward()) return 0; outb(0x70, pp_direct_iobase + LPTREG_ECONTROL); /* ECP mode */ while (sz > 0) { while ((stat = inb(pp_direct_iobase + LPTREG_ECONTROL)) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { outsb(pp_direct_iobase + LPTREG_DFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { outb(*bp++, pp_direct_iobase + LPTREG_DFIFO); sz--; ret++; } tmo = 0x10000; } while (!(inb(pp_direct_iobase + LPTREG_ECONTROL) & 0x01) || !(inb(pp_direct_iobase + LPTREG_DSR) & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } outb(0x30, pp_direct_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } unsigned parport_direct_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (ecp_reverse()) return 0; outb(0x70, pp_direct_iobase + LPTREG_ECONTROL); /* ECP mode */ while (sz > 0) { while ((stat = inb(pp_direct_iobase + LPTREG_ECONTROL)) & 0x01) if (!(--tmo)) { outb(0xd0, pp_direct_iobase + LPTREG_ECONTROL); /* FIFOTEST mode */ while (!(inb(pp_direct_iobase + LPTREG_ECONTROL) & 0x01) && sz > 0) { *bp++ = inb(pp_direct_iobase + LPTREG_TFIFO); sz--; ret++; } outb(0x30, pp_direct_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } if (stat & 0x02 && sz >= 8) { insb(pp_direct_iobase + LPTREG_DFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { *bp++ = inb(pp_direct_iobase + LPTREG_DFIFO); sz--; ret++; } tmo = 0x10000; } outb(0x30, pp_direct_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } unsigned parport_direct_ecp_write_addr(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (ecp_forward()) return 0; outb(0x70, pp_direct_iobase + LPTREG_ECONTROL); /* ECP mode */ while (sz > 0) { while ((stat = inb(pp_direct_iobase + LPTREG_ECONTROL)) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { outsb(pp_direct_iobase + LPTREG_AFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { outb(*bp++, pp_direct_iobase + LPTREG_AFIFO); sz--; ret++; } tmo = 0x10000; } while (!(inb(pp_direct_iobase + LPTREG_ECONTROL) & 0x01) || !(inb(pp_direct_iobase + LPTREG_DSR) & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } outb(0x30, pp_direct_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_direct_emul_ecp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = inb(pp_direct_iobase + LPTREG_CONTROL) & ~PARPORT_CONTROL_AUTOFD; /* HostAck high (data, not command) */ outb(ctl, pp_direct_iobase + LPTREG_CONTROL); for (ret = 0; ret < sz; ret++, bp++) { outb(*bp, pp_direct_iobase + LPTREG_DATA); outb(ctl | PARPORT_CONTROL_STROBE, pp_direct_iobase + LPTREG_CONTROL); for (tmo = 0; inb(pp_direct_iobase + LPTREG_STATUS) & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; outb(ctl, pp_direct_iobase + LPTREG_CONTROL); for (tmo = 0; !(inb(pp_direct_iobase + LPTREG_STATUS) & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_direct_emul_ecp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = inb(pp_direct_iobase + LPTREG_CONTROL) | PARPORT_CONTROL_AUTOFD; /* HostAck low (command, not data) */ outb(ctl, pp_direct_iobase + LPTREG_CONTROL); for (ret = 0; ret < sz; ret++, bp++) { outb(*bp, pp_direct_iobase + LPTREG_DATA); outb(ctl | PARPORT_CONTROL_STROBE, pp_direct_iobase + LPTREG_CONTROL); for (tmo = 0; inb(pp_direct_iobase + LPTREG_STATUS) & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; outb(ctl, pp_direct_iobase + LPTREG_CONTROL); for (tmo = 0; !(inb(pp_direct_iobase + LPTREG_STATUS) & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_direct_emul_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned char ctl, stat; int command; unsigned tmo; if (ecp_reverse()) return 0; ctl = inb(pp_direct_iobase + LPTREG_CONTROL); /* Set HostAck low to start accepting data. */ outb(ctl | PARPORT_CONTROL_AUTOFD, pp_direct_iobase + LPTREG_CONTROL); while (ret < sz) { /* Event 43: Peripheral sets nAck low. It can take as long as it wants. */ tmo = 0; do { stat = inb(pp_direct_iobase + LPTREG_STATUS); if ((++tmo) > 0x10000) goto out; } while (stat & PARPORT_STATUS_ACK); /* Is this a command? */ command = stat & PARPORT_STATUS_BUSY; if (command) { //lprintf(3, "ECP: warning: emulation does not support RLE\n"); goto out; } /* Read the data. */ *bp = inb(pp_direct_iobase + LPTREG_DATA); /* Event 44: Set HostAck high, acknowledging handshake. */ outb(ctl & ~PARPORT_CONTROL_AUTOFD, pp_direct_iobase + LPTREG_CONTROL); /* Event 45: The peripheral has 35ms to set nAck high. */ tmo = 0; do { stat = inb(pp_direct_iobase + LPTREG_STATUS); if ((++tmo) > 0x10000) goto out; } while (!(stat & PARPORT_STATUS_ACK)); /* Event 46: Set HostAck low and accept the data. */ outb(ctl | PARPORT_CONTROL_AUTOFD, pp_direct_iobase + LPTREG_CONTROL); /* Normal data byte. */ bp++; ret++; } out: return ret; } /* ---------------------------------------------------------------------- */ #if 1 unsigned parport_direct_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned u; for (u = 0; u < sz; u++, bp++) outb(*bp, pp_direct_iobase + LPTREG_DATA); return sz; } #else unsigned parport_direct_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (pp_direct_modes & PARPORT_MODE_PCECR) { outb(0x50, pp_direct_iobase + LPTREG_ECONTROL); /* COMPAT FIFO mode */ while (sz > 0) { while ((stat = inb(pp_direct_iobase + LPTREG_ECONTROL)) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { outsb(pp_direct_iobase + LPTREG_DFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { outb(*bp++, pp_direct_iobase + LPTREG_DFIFO); sz--; ret++; } tmo = 0x10000; } while (!(inb(pp_direct_iobase + LPTREG_ECONTROL) & 0x01) || !(inb(pp_direct_iobase + LPTREG_DSR) & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } outb(0x30, pp_direct_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } for (ret = 0; ret < sz; ret++, bp++) outb(*bp, pp_direct_iobase + LPTREG_DATA); return sz; } #endif /* ---------------------------------------------------------------------- */ const struct parport_ops parport_direct_ops = { parport_direct_read_data, parport_direct_write_data, parport_direct_read_status, parport_direct_read_control, parport_direct_write_control, parport_direct_frob_control, parport_direct_epp_write_data, parport_direct_epp_read_data, parport_direct_epp_write_addr, parport_direct_epp_read_addr, parport_direct_ecp_write_data, parport_direct_ecp_read_data, parport_direct_ecp_write_addr, parport_direct_fpgaconfig_write }; const struct parport_ops parport_direct_emul_ops = { parport_direct_read_data, parport_direct_write_data, parport_direct_read_status, parport_direct_read_control, parport_direct_write_control, parport_direct_frob_control, parport_direct_emul_epp_write_data, parport_direct_emul_epp_read_data, parport_direct_emul_epp_write_addr, parport_direct_emul_epp_read_addr, parport_direct_emul_ecp_write_data, parport_direct_emul_ecp_read_data, parport_direct_emul_ecp_write_addr, parport_direct_fpgaconfig_write }; /* ---------------------------------------------------------------------- */ struct parport_ops parport_ops = { parport_direct_read_data, parport_direct_write_data, parport_direct_read_status, parport_direct_read_control, parport_direct_write_control, parport_direct_frob_control, parport_direct_emul_epp_write_data, parport_direct_emul_epp_read_data, parport_direct_emul_epp_write_addr, parport_direct_emul_epp_read_addr, parport_direct_emul_ecp_write_data, parport_direct_emul_ecp_read_data, parport_direct_emul_ecp_write_addr, parport_direct_fpgaconfig_write }; /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/snprintpkt.c0100644000175100017510000001257006706650767015737 0ustar abaaba/*****************************************************************************/ /* * snprintpkt.c -- Print an AX.25 packet (with header) into a buffer. * * Copyright (C) 1996 Thomas Sailer (sailer@ife.ee.ethz.ch) * Swiss Federal Institute of Technology (ETH), Electronics Lab * * 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. * * * This is the Linux realtime sound output driver */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define _GNU_SOURCE #include #include "fpga.h" /* --------------------------------------------------------------------- */ #define ADDCH(c) \ do { \ if (p + 1 >= endp) \ return -1; \ *p++ = (c); \ } while(0) #define ADDSTR(s) \ do { \ int l = strlen(s); \ if (p + l >= endp) \ return -1; \ memcpy(p, s, l); \ p += l; \ } while(0) #ifdef HAVE_SNPRINTF #define ADDF(fmt, args...) \ do { \ int xlen = snprintf(p, endp-p, fmt, ## args); \ if (xlen < 0) \ return -1; \ p += xlen; \ } while(0) #else /* HAVE_SNPRINTF */ #define ADDF(fmt, args...) \ do { \ char xbuf[64]; \ int xlen = sprintf(xbuf, fmt, ## args); \ if (p + xlen >= endp) \ return -1; \ memcpy(p, xbuf, xlen); \ p += xlen; \ } while(0) #endif /* HAVE_SNPRINTF */ int snprintpkt(char *buf, size_t sz, const u_int8_t *pkt, unsigned len) { u_int8_t v1=1 , cmd=0; u_int8_t i, j; char *p = buf; char *endp = buf + sz; if (sz < 2) return -1; *buf = 0; if (!pkt || len < 8) return 0; if (pkt[1] & 1) { /* * FlexNet Header Compression */ v1 = 0; cmd = (pkt[1] & 2) != 0; ADDSTR("fm ? to "); i = (pkt[2] >> 2) & 0x3f; if (i) { ADDCH(i+0x20); } i = ((pkt[2] << 4) | ((pkt[3] >> 4) & 0xf)) & 0x3f; if (i) { ADDCH(i+0x20); } i = ((pkt[3] << 2) | ((pkt[4] >> 6) & 3)) & 0x3f; if (i) { ADDCH(i+0x20); } i = pkt[4] & 0x3f; if (i) { ADDCH(i+0x20); } i = (pkt[5] >> 2) & 0x3f; if (i) { ADDCH(i+0x20); } i = ((pkt[5] << 4) | ((pkt[6] >> 4) & 0xf)) & 0x3f; if (i) { ADDCH(i+0x20); } ADDF("-%u QSO Nr %u", pkt[6] & 0xf, (pkt[0] << 6) | (pkt[1] >> 2)); pkt += 7; len -= 7; } else { /* * normal header */ if (len < 15) return 0; if ((pkt[6] & 0x80) != (pkt[13] & 0x80)) { v1 = 0; cmd = (pkt[6] & 0x80); } ADDSTR("fm "); for(i = 7; i < 13; i++) if ((pkt[i] &0xfe) != 0x40) { ADDCH(pkt[i] >> 1); } ADDF("-%u to ", (pkt[13] >> 1) & 0xf); for(i = 0; i < 6; i++) if ((pkt[i] &0xfe) != 0x40) { ADDCH(pkt[i] >> 1); } ADDF("-%u", (pkt[6] >> 1) & 0xf); pkt += 14; len -= 14; if ((!(pkt[-1] & 1)) && (len >= 7)) { ADDSTR(" via "); } while ((!(pkt[-1] & 1)) && (len >= 7)) { for(i = 0; i < 6; i++) if ((pkt[i] &0xfe) != 0x40) { ADDCH(pkt[i] >> 1); } ADDF("-%u", (pkt[6] >> 1) & 0xf); pkt += 7; len -= 7; if ((!(pkt[-1] & 1)) && (len >= 7)) { ADDCH(','); } } } if (!len) { *p = 0; return p - buf; } i = *pkt++; len--; j = v1 ? ((i & 0x10) ? '!' : ' ') : ((i & 0x10) ? (cmd ? '+' : '-') : (cmd ? '^' : 'v')); if (!(i & 1)) { /* * Info frame */ ADDF(" I%u%u%c", (i >> 5) & 7, (i >> 1) & 7, j); } else if (i & 2) { /* * U frame */ switch (i & (~0x10)) { case 0x03: ADDF(" UI%c", j); break; case 0x2f: ADDF(" SABM%c", j); break; case 0x43: ADDF(" DISC%c", j); break; case 0x0f: ADDF(" DM%c", j); break; case 0x63: ADDF(" UA%c", j); break; case 0x87: ADDF(" FRMR%c", j); break; default: ADDF(" unknown U (0x%x)%c", i & (~0x10), j); break; } } else { /* * supervisory */ switch (i & 0xf) { case 0x1: ADDF(" RR%u%c", (i >> 5) & 7, j); break; case 0x5: ADDF(" RNR%u%c", (i >> 5) & 7, j); break; case 0x9: ADDF(" REJ%u%c", (i >> 5) & 7, j); break; default: ADDF(" unknown S (0x%x)%u%c", i & 0xf, (i >> 5) & 7, j); break; } } if (!len) { ADDCH('\n'); *p = 0; return p - buf; } ADDF(" pid=%02X\n", *pkt++); len--; j = 0; while (len) { i = *pkt++; if ((i >= 32) && (i < 128)) { ADDCH(i); } else if (i == 13) { if (j) { ADDCH('\n'); } j = 0; } else { ADDCH('.'); } if (i >= 32) j = 1; len--; } if (j) { ADDCH('\n'); } *p = 0; return p - buf; } baycomepp-0.10.orig/main/eppfpga.c0100644000175100017510000002062607144045354015131 0ustar abaaba/*****************************************************************************/ /* * eppfpga.c -- HDLC packet radio modem for EPP using FPGA utility. * * Copyright (C) 1998-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #ifdef HAVE_GETOPT_H #include #else #include "getopt.h" #endif #ifdef HAVE_SYSLOG_H #include #endif #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ static unsigned verboselevel = 0; static unsigned syslogmsg = 0; static struct adapter_config cfg = { 19666600, 9600, 0, 0, 0, 1, 1, 0, 1 }; static int quit = 0; /* ---------------------------------------------------------------------- */ int lprintf(unsigned vl, const char *format, ...) { va_list ap; int r; if (vl > verboselevel) return 0; va_start(ap, format); #ifdef HAVE_VSYSLOG if (syslogmsg) { static const int logprio[] = { LOG_ERR, LOG_INFO }; vsyslog((vl > 1) ? LOG_DEBUG : logprio[vl], format, ap); r = 0; } else #endif r = vfprintf(stderr, format, ap); va_end(ap); return r; } int tprintf(const char *format, ...) { va_list ap; int i; va_start(ap, format); i = vprintf(format, ap); va_end(ap); fflush(stdout); return i; } int idle_callback(unsigned us_delay) { if (us_delay) usleep(us_delay); return quit; } void epp_error(const char *msg) { lprintf(0, msg); reset_modem(); exit(1); } static void signal_quit(int signum) { quit = 1; } /* ---------------------------------------------------------------------- */ int main(int argc, char *argv[]) { static const struct option long_options[] = { #ifdef HAVE_PPUSER { "ppuser", 1, 0, 0x400 }, { "ppdev", 1, 0, 0x402 }, #endif #ifdef HAVE_PPKDRV { "ppkdrv", 1, 0, 0x401 }, #endif #ifdef WIN32 { "ppgenport", 0, 0, 0x403 }, { "ppwin", 1, 0, 0x404 }, { "pplpt", 1, 0, 0x404 }, { "ppring0", 0, 0, 0x405 }, #endif { "ppforcehwepp", 0, 0, 0x410 }, { "ppswemulepp", 0, 0, 0x411 }, { "ppswemulecp", 0, 0, 0x412 }, { 0, 0, 0, 0 } }; int c, err = 0; const struct eppfpgatests *tst = NULL; unsigned int iobase = 0x378, ntddkgenport = 0, ntdrv = 0, w9xring0 = 0, ppflags = 0; const char *ppuser = NULL, *ppkdrv = NULL, *ppdev = NULL; printf("eppfpga v" VERSION " (c) 1998-2000 by Thomas Sailer, HB9JNX/AE4WA\n"); while ((c = getopt_long(argc, argv, "svp:m:t:", long_options, NULL)) != EOF) { switch (c) { case 0x400: ppuser = optarg; ppkdrv = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = 0; w9xring0 = 0; break; case 0x401: ppkdrv = optarg; ppuser = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = 0; w9xring0 = 0; break; case 0x402: ppkdrv = NULL; ppuser = NULL; ppdev = optarg; ntddkgenport = 0; ntdrv = 0; w9xring0 = 0; break; case 0x403: ppkdrv = NULL; ppuser = NULL; ppdev = NULL; ntddkgenport = 1; ntdrv = 0; w9xring0 = 0; break; case 0x404: ppkdrv = NULL; ppuser = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = strtoul(optarg, NULL, 0); w9xring0 = 0; break; case 0x405: ppkdrv = NULL; ppuser = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = 0; w9xring0 = 1; break; case 0x410: ppflags |= PPFLAG_FORCEHWEPP; break; case 0x411: ppflags |= PPFLAG_SWEMULEPP; break; case 0x412: ppflags |= PPFLAG_SWEMULECP; break; #if defined(HAVE_SYSLOG) && defined(HAVE_VSYSLOG) case 's': if (syslogmsg) break; openlog("eppfpga", LOG_PID, LOG_USER); syslogmsg = 1; break; #endif case 'v': verboselevel++; break; case 'p': iobase = strtoul(optarg, NULL, 0); if (iobase <= 0 || iobase >= 0x3f8) err++; ppuser = NULL; ppkdrv = NULL; break; case 'm': parseconfig(&cfg, optarg); break; case 't': if (tst != NULL) { err++; break; } for (tst = eppfpgatests; tst->name && strcmp(optarg, tst->name); tst++); if (!tst->name) err++; break; default: err++; break; } } if (err) { lprintf(0, "usage: %s [-v] [-p ] [-m ] [-t ]\n" " mode options:\n" " intclk uses FPGA internal clock; DON'T use if an external osc is on board\n" " extclk uses the external oscillator; recommended if the internal modem is used\n" " intmodem uses the internal modem\n" " extmodem uses a DF9IC type modem connected to the high speed modem connector\n" " fclk= sets the FPGA clock frequency (default 19.6666 MHz)\n" " bitrate= sets the bitrate for the FSK modem\n" " loopback sets an internal modem loopback\n" " extstat allows extended status readback\n" " noextstat disallows extended status readback\n" " test options:\n", argv[0]); for (tst = eppfpgatests; tst->name; tst++) lprintf(0, " %-15s%s\n", tst->name, tst->desc); exit(1); } #ifdef HAVE_PPUSER if (ppkdrv) { if (parport_init_ppkdrv(ppkdrv)) { fprintf(stderr, "no kernel interface %s driver found\n", ppkdrv); exit(1); } } else #endif #ifdef HAVE_PPUSER if (ppdev) { if (parport_init_ppdev(ppdev)) { fprintf(stderr, "no ppdev driver found at %s\n", ppdev); exit(1); } } else if (ppuser) { if (parport_init_ppuser(ppuser)) { fprintf(stderr, "no ppuser driver found at %s\n", ppuser); exit(1); } } else #endif #ifdef WIN32 if (ntdrv) { if (parport_init_win_flags(ntdrv-1, ppflags)) { fprintf(stderr, "no eppflex.sys/vxd driver found\n"); exit(1); } } else if (ntddkgenport) { if (parport_init_ntddkgenport()) { fprintf(stderr, "no NTDDK genport.sys driver found\n"); exit(1); } } else if (w9xring0) { if (parport_init_w9xring0_flags(iobase, ppflags)) { fprintf(stderr, "no parport found at 0x%x\n", iobase); exit(1); } } else #endif if (parport_init_direct_flags(iobase, ppflags)) { fprintf(stderr, "no parport found at 0x%x\n", iobase); exit(1); } if (!tst) { err = abs(adapter_start_epp(&cfg)); goto out; } #ifdef SIGHUP signal(SIGHUP, signal_quit); #endif signal(SIGINT, signal_quit); #ifdef SIGQUIT signal(SIGQUIT, signal_quit); #endif signal(SIGTERM, signal_quit); err = abs(tst->func(&cfg)); out: #ifdef WIN32 if (!ppkdrv && !ppuser && !ppdev && !ntddkgenport && ntdrv) parport_stop_win(); #endif exit(err); } baycomepp-0.10.orig/main/fpga.h0100644000175100017510000001176607070606427014440 0ustar abaaba/*****************************************************************************/ /* * fpga.h -- FPGA test library exports (and imports). * * Copyright (C) 1998, 1999, 2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifndef _FPGA_H #define _FPGA_H /* ---------------------------------------------------------------------- */ #include "sysdeps.h" #include "parport.h" /* ---------------------------------------------------------------------- */ struct adapter_config { unsigned int fclk; unsigned int bitrate; unsigned int intclk; unsigned int extmodem; unsigned int loopback; unsigned int extstat; unsigned int pttmute; unsigned int filtmode; unsigned int gain; }; /* ---------------------------------------------------------------------- */ extern void printconfig(const struct adapter_config *cfg); extern void parseconfig(struct adapter_config *cfg, const char *modestr); extern int adapter_start_no_firmware(void); extern int adapter_start_eppchk(void); extern int adapter_start_epp(struct adapter_config *cfg); extern int adapter_start_ecp(struct adapter_config *cfg); extern int adapter_start_eppafsk(struct adapter_config *cfg); extern int adapter_start_sppafsk(struct adapter_config *cfg); extern int adapter_start_eppsamp(struct adapter_config *cfg); /* ---------------------------------------------------------------------- */ extern inline void sppafsk_wrcmd(unsigned char d) { parport_write_data(d); parport_write_control(LPTCTRL_PROGRAM | 0x09); parport_write_control(LPTCTRL_PROGRAM | 0x08); } extern inline void sppafsk_wrdata(unsigned char d) { parport_write_data(d); parport_write_control(LPTCTRL_PROGRAM | 0x01); parport_write_control(LPTCTRL_PROGRAM | 0x00); } extern inline unsigned char sppafsk_rdcmd(void) { unsigned char d1, d2; parport_write_control(LPTCTRL_PROGRAM | 0x0b); parport_read_status(); d2 = parport_read_status(); d1 = ((d2 & 0xe0) | ((d2 << 1) & 0x10)) >> 4; parport_write_control(LPTCTRL_PROGRAM | 0x0a); parport_read_status(); d2 = parport_read_status(); d1 |= (d2 & 0xe0) | ((d2 << 1) & 0x10); return d1; } extern inline unsigned char sppafsk_rddata(void) { unsigned char d1, d2; parport_write_control(LPTCTRL_PROGRAM | 0x03); parport_read_status(); d2 = parport_read_status(); d1 = ((d2 & 0xe0) | ((d2 << 1) & 0x10)) >> 4; parport_write_control(LPTCTRL_PROGRAM | 0x02); parport_read_status(); d2 = parport_read_status(); d1 |= (d2 & 0xe0) | ((d2 << 1) & 0x10); return d1; } /* ---------------------------------------------------------------------- */ /* * description of the test procedures defined */ extern const struct eppfpgatests { const char *name; const char *desc; int (*func)(struct adapter_config *); } eppfpgatests[]; /* ---------------------------------------------------------------------- */ /* * provided externally! */ extern int lprintf(unsigned vl, const char *format, ...) __attribute__ ((format (printf, 2, 3))); extern int tprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))); extern int idle_callback(unsigned us_delay); /* ---------------------------------------------------------------------- */ extern int snprintpkt(char *buf, size_t sz, const u_int8_t *pkt, unsigned len); /* ---------------------------------------------------------------------- */ extern inline void reset_modem(void) { unsigned char null = 0; parport_epp_write_addr(&null, 1); parport_write_control(LPTCTRL_ADDRSTB); } /* ---------------------------------------------------------------------- */ extern inline unsigned readboundary(const unsigned char *b, unsigned x) { return (b[x >> 3] >> (x & 7)) & 1; } extern inline void writeboundary(unsigned char *b, unsigned x, int v) { b[x >> 3] &= ~(1 << (x & 7)); b[x >> 3] |= (v & 1) << (x & 7); } /* ---------------------------------------------------------------------- */ extern void boundary(unsigned int blen, const unsigned char *in, unsigned char *out, unsigned char eppdata); /* ---------------------------------------------------------------------- */ #endif /* _FPGA_H */ baycomepp-0.10.orig/main/sysdeps.h0100644000175100017510000001611707141053231015174 0ustar abaaba/*****************************************************************************/ /* * sysdeps.h -- System dependencies. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifndef _SYSDEPS_H #define _SYSDEPS_H /* ---------------------------------------------------------------------- */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #if defined(HAVE_SYS_IO_H) #include #elif defined(HAVE_ASM_IO_H) #include #endif #ifdef GETOPT_H #include #endif #ifdef UNISTD_H #include #endif #include #include /* ---------------------------------------------------------------------- */ /* * Bittypes */ #ifndef HAVE_BITTYPES #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) typedef int int8_t __attribute__((__mode__(__QI__))); typedef unsigned int u_int8_t __attribute__((__mode__(__QI__))); typedef int int16_t __attribute__((__mode__(__HI__))); typedef unsigned int u_int16_t __attribute__((__mode__(__HI__))); typedef int int32_t __attribute__((__mode__(__SI__))); typedef unsigned int u_int32_t __attribute__((__mode__(__SI__))); typedef int int64_t __attribute__((__mode__(__DI__))); typedef unsigned int u_int64_t __attribute__((__mode__(__DI__))); #else typedef char /* deduced */ int8_t __attribute__((__mode__(__QI__))); typedef unsigned char /* deduced */ u_int8_t __attribute__((__mode__(__QI__))); typedef short /* deduced */ int16_t __attribute__((__mode__(__HI__))); typedef unsigned short /* deduced */ u_int16_t __attribute__((__mode__(__HI__))); typedef long /* deduced */ int32_t __attribute__((__mode__(__SI__))); typedef unsigned long /* deduced */ u_int32_t __attribute__((__mode__(__SI__))); typedef long long /* deduced */ int64_t __attribute__((__mode__(__DI__))); typedef unsigned long long /* deduced */ u_int64_t __attribute__((__mode__(__DI__))); #endif #endif /* !HAVE_BITTYPES */ /* ---------------------------------------------------------------------- */ /* * IO routines */ #ifndef HAVE_IOFUNCS extern inline unsigned char inb(unsigned short port) { unsigned char ret; __asm__ __volatile__("inb %w1,%b0" : "=a" (ret) : "d" (port)); return ret; } extern inline void outb(unsigned char val, unsigned short port) { __asm__ __volatile__("outb %b0,%w1" : : "a" (val), "d" (port)); } extern inline unsigned short inw(unsigned short port) { unsigned short ret; __asm__ __volatile__("inw %w1,%w0" : "=a" (ret) : "d" (port)); return ret; } extern inline void outw(unsigned short val, unsigned short port) { __asm__ __volatile__("outw %w0,%w1" : : "a" (val), "d" (port)); } extern inline unsigned int inl(unsigned short port) { unsigned int ret; __asm__ __volatile__("inl %w1,%0" : "=a" (ret) : "d" (port)); return ret; } extern inline void outl(unsigned int val, unsigned short port) { __asm__ __volatile__("outl %0,%w1" : : "a" (val), "d" (port)); } extern inline void insb(unsigned short port, unsigned char *addr, unsigned long count) { __asm__ __volatile__("cld ; rep ; insb" : "=D" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); } extern inline void outsb(unsigned short port, const unsigned char *addr, unsigned long count) { __asm__ __volatile__("cld ; rep ; outsb" : "=S" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); } #endif /* !HAVE_IOFUNCS */ /* ---------------------------------------------------------------------- */ /* * syslog routines */ #ifdef HAVE_SYSLOG_H #include #else #define LOG_EMERG 0 /* system is unusable */ #define LOG_ALERT 1 /* action must be taken immediately */ #define LOG_CRIT 2 /* critical conditions */ #define LOG_ERR 3 /* error conditions */ #define LOG_WARNING 4 /* warning conditions */ #define LOG_NOTICE 5 /* normal but significant condition */ #define LOG_INFO 6 /* informational */ #define LOG_DEBUG 7 /* debug-level messages */ /* facility codes */ #define LOG_KERN (0<<3) /* kernel messages */ #define LOG_USER (1<<3) /* random user-level messages */ #define LOG_MAIL (2<<3) /* mail system */ #define LOG_DAEMON (3<<3) /* system daemons */ #define LOG_AUTH (4<<3) /* security/authorization messages */ #define LOG_SYSLOG (5<<3) /* messages generated internally by syslogd */ #define LOG_LPR (6<<3) /* line printer subsystem */ #define LOG_NEWS (7<<3) /* network news subsystem */ #define LOG_UUCP (8<<3) /* UUCP subsystem */ #define LOG_CRON (9<<3) /* clock daemon */ #define LOG_AUTHPRIV (10<<3) /* security/authorization messages (private) */ #define LOG_FTP (11<<3) /* ftp daemon */ extern inline void closelog(void) {} extern inline void openlog(__const char *__ident, int __option, int __facility) {} extern inline void vsyslog(int __pri, __const char *__fmt, va_list __ap) {} #endif /* ---------------------------------------------------------------------- */ #ifdef __MINGW32__ #include extern inline void usleep(unsigned long x) { Sleep(x / 1000); } #endif /* ---------------------------------------------------------------------- */ #ifdef HAVE_GETTIMEOFDAY #include #include extern inline int gettime(struct timeval *tv) { return gettimeofday(tv, NULL); } #elif HAVE_GETSYSTEMTIME #ifdef HAVE_WINDOWS_H #include #endif #if 0 struct timeval { long tv_sec; long tv_usec; }; #endif extern inline int gettime(struct timeval *tv) { SYSTEMTIME tm; GetSystemTime(&tm); tv->tv_usec = 1000UL * tm.wMilliseconds; tv->tv_sec = tm.wSecond + 60 * tm.wMinute + 3600 * tm.wHour + 86400 * tm.wDay; return 0; } #else #error "Don't know how to get a high resolution time" #endif /* ---------------------------------------------------------------------- */ #ifndef HAVE_RANDOM extern inline long int random(void) { return rand(); } #endif /* ---------------------------------------------------------------------- */ #endif /* _SYSDEPS_H */ baycomepp-0.10.orig/main/util.h0100644000175100017510000000472706706651543014503 0ustar abaaba/*****************************************************************************/ /* * util.h -- Some utility functions. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifndef _UTIL_H #define _UTIL_H /* ---------------------------------------------------------------------- */ extern inline unsigned int hweight32(unsigned int w) { unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555); res = (res & 0x33333333) + ((res >> 2) & 0x33333333); res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F); res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF); return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF); } extern inline unsigned int hweight16(unsigned int w) { unsigned int res = (w & 0x5555) + ((w >> 1) & 0x5555); res = (res & 0x3333) + ((res >> 2) & 0x3333); res = (res & 0x0F0F) + ((res >> 4) & 0x0F0F); return (res & 0x00FF) + ((res >> 8) & 0x00FF); } extern inline unsigned int hweight8(unsigned int w) { unsigned int res = (w & 0x55) + ((w >> 1) & 0x55); res = (res & 0x33) + ((res >> 2) & 0x33); return (res & 0x0F) + ((res >> 4) & 0x0F); } extern inline unsigned char rev8(unsigned char x) { static const unsigned char rev4[16] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7,15 }; return (rev4[x & 15] << 4) | rev4[(x >> 4) & 15]; } /* ---------------------------------------------------------------------- */ #endif /* _UTIL_H */ baycomepp-0.10.orig/main/parport.h0100644000175100017510000001707707143571030015203 0ustar abaaba/*****************************************************************************/ /* * parport.h -- FPGA test library exports (and imports). * * Copyright (C) 1998, 2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifndef _PARPORT_H #define _PARPORT_H /* ---------------------------------------------------------------------- */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "sysdeps.h" /* ---------------------------------------------------------------------- */ /* LPT control register */ #define LPTCTRL_PROGRAM 0x04 /* 0 to reprogram */ #define LPTCTRL_WRITE 0x01 #define LPTCTRL_ADDRSTB 0x08 #define LPTCTRL_DATASTB 0x02 #define LPTCTRL_INTEN 0x10 #define LPTCTRL_DIRECTION 0x20 /* LPT status register */ #define LPTSTAT_SHIFT_NINTR 6 #define LPTSTAT_WAIT 0x80 #define LPTSTAT_NINTR (1< * * 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. * */ #define PP_MAJOR 99 #define PP_IOCTL 'p' /* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */ #define PPSETMODE _IOW(PP_IOCTL, 0x80, int) /* Read status */ #define PPRSTATUS _IOR(PP_IOCTL, 0x81, unsigned char) #define PPWSTATUS OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char) /* Read/write control */ #define PPRCONTROL _IOR(PP_IOCTL, 0x83, unsigned char) #define PPWCONTROL _IOW(PP_IOCTL, 0x84, unsigned char) struct ppdev_frob_struct { unsigned char mask; unsigned char val; }; #define PPFCONTROL _IOW(PP_IOCTL, 0x8e, struct ppdev_frob_struct) /* Read/write data */ #define PPRDATA _IOR(PP_IOCTL, 0x85, unsigned char) #define PPWDATA _IOW(PP_IOCTL, 0x86, unsigned char) /* Read/write econtrol (not used) */ #define PPRECONTROL OBSOLETE__IOR(PP_IOCTL, 0x87, unsigned char) #define PPWECONTROL OBSOLETE__IOW(PP_IOCTL, 0x88, unsigned char) /* Read/write FIFO (not used) */ #define PPRFIFO OBSOLETE__IOR(PP_IOCTL, 0x89, unsigned char) #define PPWFIFO OBSOLETE__IOW(PP_IOCTL, 0x8a, unsigned char) /* Claim the port to start using it */ #define PPCLAIM _IO(PP_IOCTL, 0x8b) /* Release the port when you aren't using it */ #define PPRELEASE _IO(PP_IOCTL, 0x8c) /* Yield the port (release it if another driver is waiting, * then reclaim) */ #define PPYIELD _IO(PP_IOCTL, 0x8d) /* Register device exclusively (must be before PPCLAIM). */ #define PPEXCL _IO(PP_IOCTL, 0x8f) /* Data line direction: non-zero for input mode. */ #define PPDATADIR _IOW(PP_IOCTL, 0x90, int) /* Negotiate a particular IEEE 1284 mode. */ #define PPNEGOT _IOW(PP_IOCTL, 0x91, int) /* IEEE1284 modes: Nibble mode, byte mode, ECP, ECPRLE and EPP are their own 'extensibility request' values. Others are special. 'Real' ECP modes must have the IEEE1284_MODE_ECP bit set. */ #define IEEE1284_MODE_NIBBLE 0 #define IEEE1284_MODE_BYTE (1<<0) #define IEEE1284_MODE_COMPAT (1<<8) #define IEEE1284_MODE_BECP (1<<9) /* Bounded ECP mode */ #define IEEE1284_MODE_ECP (1<<4) #define IEEE1284_MODE_ECPRLE (IEEE1284_MODE_ECP | (1<<5)) #define IEEE1284_MODE_ECPSWE (1<<10) /* Software-emulated */ #define IEEE1284_MODE_EPP (1<<6) #define IEEE1284_MODE_EPPSL (1<<11) /* EPP 1.7 */ #define IEEE1284_MODE_EPPSWE (1<<12) /* Software-emulated */ #define IEEE1284_DEVICEID (1<<2) /* This is a flag */ /* For the benefit of parport_read/write, you can use these with * parport_negotiate to use address operations. They have no effect * other than to make parport_read/write use address transfers. */ #define IEEE1284_ADDR (1<<13) /* This is a flag */ #define IEEE1284_DATA 0 /* So is this */ /* IEEE1284 phases */ enum ieee1284_phase { IEEE1284_PH_FWD_DATA, IEEE1284_PH_FWD_IDLE, IEEE1284_PH_TERMINATE, IEEE1284_PH_NEGOTIATION, IEEE1284_PH_HBUSY_DNA, IEEE1284_PH_REV_IDLE, IEEE1284_PH_HBUSY_DAVAIL, IEEE1284_PH_REV_DATA, IEEE1284_PH_ECP_SETUP, IEEE1284_PH_ECP_FWD_TO_REV, IEEE1284_PH_ECP_REV_TO_FWD }; baycomepp-0.10.orig/main/ppuser.h0100644000175100017510000000270606714622742015035 0ustar abaaba/* * User-space parallel port device driver (header file). * * Copyright (C) 1998-9 Tim Waugh * * 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. * */ #define PP_MAJOR 99 #define PP_IOCTL 'p' /* Set mode for read/write (e.g. PARPORT_MODE_PCEPP) */ #define PPSETMODE _IOW(PP_IOCTL, 0x80, int) /* Read/write status */ #define PPRSTATUS _IOR(PP_IOCTL, 0x81, unsigned char) #define PPWSTATUS _IOW(PP_IOCTL, 0x82, unsigned char) /* Read/write control */ #define PPRCONTROL _IOR(PP_IOCTL, 0x83, unsigned char) #define PPWCONTROL _IOW(PP_IOCTL, 0x84, unsigned char) /* Read/write data */ #define PPRDATA _IOR(PP_IOCTL, 0x85, unsigned char) #define PPWDATA _IOW(PP_IOCTL, 0x86, unsigned char) /* Read/write econtrol */ #define PPRECONTROL _IOR(PP_IOCTL, 0x87, unsigned char) #define PPWECONTROL _IOW(PP_IOCTL, 0x88, unsigned char) /* Read/write FIFO */ #define PPRFIFO _IOR(PP_IOCTL, 0x89, unsigned char) #define PPWFIFO _IOW(PP_IOCTL, 0x8a, unsigned char) /* Claim the port to start using it */ #define PPCLAIM _IO(PP_IOCTL, 0x8b) /* Release the port when you aren't using it */ #define PPRELEASE _IO(PP_IOCTL, 0x8c) /* Yield the port (release it if another driver is waiting, * then reclaim) */ #define PPYIELD _IO(PP_IOCTL, 0x8d) baycomepp-0.10.orig/main/syslog.c0100644000175100017510000000374406706651143015033 0ustar abaaba/*****************************************************************************/ /* * syslog.c -- Syslog "abstraction" routines. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define _COMPILE_LIBFPGA #include "libfpga.h" /* ---------------------------------------------------------------------- */ #if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__CYGWIN__) || defined(GO32) int syslogprintf(unsigned vl, const char *format, va_list ap) { return 0; } int syslogopen(const char *ident) { return -1; } #else #include int syslogprintf(unsigned vl, const char *format, va_list ap) { static const int logprio[] = { LOG_ERR, LOG_INFO }; vsyslog((vl > 1) ? LOG_DEBUG : logprio[vl], format, ap); return 0; } int syslogopen(const char *ident) { openlog(ident, LOG_PID, LOG_USER); return 0; } #endif /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/eppfpga.80100644000175100017510000000547307070607722015062 0ustar abaaba.\" Copyright 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) .\" May be distributed under the GNU General Public License .\" .\" " .TH EPPFPGA 8 "30 March 2000" "Eppfpga 0.8" "Linux AX.25 Utilities Manual" .SH NAME eppfpga \- Baycom EPP modem with FPGA configuration/diagnostics tool .SH SYNOPSIS .B eppfpga .B "[ \-vh ]" .B "[\-p portaddr]" .B "[\-m modestr]" .B "[\-t test]" .SH DESCRIPTION .B eppfpga is the configuration and diagnostics utility for the Baycom EPP modem. It can be used to download the FPGA ``firmware'' or to execute various tests. This utility is also needed during .I "ifconfig bcex up" and therefore should reside in /sbin. .SH OPTIONS .B eppfpga accepts the following options: .TP .B \-h Display an overview of the available command line parameters and exit. .TP .B \-v Increases the verbosity of the output. May be cumulated. .TP .B \-p Specifies the base address of the EPP capable parallel port to which the modem is connected. Use the .I 0x prefix to specify hexadecimal numbers. .TP .B \-m Specifies various ``firmware'' options. .TP .B \-t Execute the named test. Tests may be stopped by pressing \fICTRL\-C\fP. .SH "FIRMWARE OPTIONS" .TP .B intclk uses FPGA internal clock; \fBdon't\fP use if an external oscillator is on board. .TP .B extclk uses the external oscillator; recommended if the internal modem is used, as the frequency of the FPGA oscillator is not accurate enough. .TP .B intmodem uses the internal modem .TP .B extmodem uses a DF9IC type modem connected to the high speed modem connector .TP .B divider=x sets the clock divider for the internal modem (baud=fquartz/16/divider) .TP .B loopback sets an internal modem loopback .TP .B extstat allows extended status readback .TP .B noextstat disallows extended status readback .TP .B pttmute mutes modulation signal output when PTT is off (default) .TP .B nopttmute modulation signal is continuously output .SH TESTS .TP .B ram tests the on board SRAM using boundary scan .TP .B bled tests the on board LED's using boundary scan; \fBdisconnect PTT\fP during the test. .TP .B dac tests the on board DAC using boundary scan .TP .B led tests the CON and STA leds using EPP address write .TP .B ledfast tests the CON and STA leds using fast EPP address write .TP .B berr performs a BER test using the complete adapter. An external loopback is required. .TP .B berrv performs a BER test using the complete adapter. Also prints out the received bits. An external loopback is required. .TP .B ccnt frequency counter using the check firmware .TP .B cdac fast DAC test using the check firmware .TP .B cram fast RAM test using the check firmware .TP .B cled LED test using the check firmware .SH "SEE ALSO" .nf .BR ifconfig "\ (8), " sethdlc "\ (8), " linux/drivers/net/hamradio/baycom_epp.c .fi .SH AUTHOR eppfpga was written by Thomas Sailer, HB9JNX/AE4WA (sailer@ife.ee.ethz.ch). baycomepp-0.10.orig/main/openpty.c0100644000175100017510000000651106706651612015205 0ustar abaaba/*****************************************************************************/ /* * openpty.c -- openpty. * * From glibc2, Copyright (C) Free Software Foundation * Modified by Thomas Sailer, sailer@ife.ee.ethz.ch * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include int openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) { char line[11]; const char *cp1, *cp2; int master, slave, ttygid; struct group *gr; strcpy (line, "/dev/ptyXX"); if (gr = getgrnam("tty")) ttygid = gr->gr_gid; else ttygid = -1; for (cp1 = "pqrs"; *cp1; cp1++) { line[8] = *cp1; for (cp2 = "0123456789abcdef"; *cp2; cp2++) { line[9] = *cp2; if ((master = open(line, O_RDWR, 0)) == -1) { if (errno == ENOENT) return (-1); /* out of ptys */ } else { line[5] = 't'; (void)chown(line, getuid(), ttygid); (void)chmod(line, S_IRUSR|S_IWUSR|S_IWGRP); #ifdef HAVE_REVOKE revoke(line); #endif if ((slave = open(line, O_RDWR, 0)) != -1) { *amaster = master; *aslave = slave; if (name) strcpy(name, line); if (termp) (void)tcsetattr(slave, TCSAFLUSH, termp); if (winp) (void)ioctl(slave, TIOCSWINSZ, (char *)winp); return 0; } (void)close(master); line[5] = 'p'; } } } errno = ENOENT; /* out of ptys */ return -1; } baycomepp-0.10.orig/main/ppuser.c0100644000175100017510000002447606717012256015034 0ustar abaaba/*****************************************************************************/ /* * ppuser.c -- Parport access via Linux PPUSER device. * * Copyright (C) 1998-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include #include "parport.h" #include "fpga.h" #include "ppuser.h" /* ---------------------------------------------------------------------- */ int pp_user_fd = -1; /* ---------------------------------------------------------------------- */ void parport_user_exit(void) { if (pp_user_fd != -1) { ioctl(pp_user_fd, PPRELEASE, 0); close(pp_user_fd); } pp_user_fd = -1; } /* ---------------------------------------------------------------------- */ unsigned char parport_user_read_data(void) { unsigned char r; ioctl(pp_user_fd, PPRDATA, &r); return r; } void parport_user_write_data(unsigned char d) { ioctl(pp_user_fd, PPWDATA, &d); } unsigned char parport_user_read_status(void) { unsigned char r; ioctl(pp_user_fd, PPRSTATUS, &r); return r; } unsigned char parport_user_read_control(void) { unsigned char r; ioctl(pp_user_fd, PPRCONTROL, &r); return r; } void parport_user_write_control(unsigned char d) { ioctl(pp_user_fd, PPWCONTROL, &d); } void parport_user_frob_control(unsigned char mask, unsigned char val) { unsigned char d; ioctl(pp_user_fd, PPRCONTROL, &d); d = (d & (~mask)) ^ val; ioctl(pp_user_fd, PPWCONTROL, &d); } /* ---------------------------------------------------------------------- */ unsigned parport_user_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; unsigned char d; d = LPTCTRL_PROGRAM | LPTCTRL_WRITE; ioctl(pp_user_fd, PPWCONTROL, &d); for (; sz > 0; sz--, bp++) { ioctl(pp_user_fd, PPWDATA, bp); for (tmo = 0; ; tmo++) { ioctl(pp_user_fd, PPRSTATUS, &d); if (d & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } d = LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_DATASTB; ioctl(pp_user_fd, PPWCONTROL, &d); for (tmo = 0; ; tmo++) { ioctl(pp_user_fd, PPRSTATUS, &d); if (!(d & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } d = LPTCTRL_PROGRAM | LPTCTRL_WRITE; ioctl(pp_user_fd, PPWCONTROL, &d); ret++; } return ret; } unsigned parport_user_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; unsigned char d; d = LPTCTRL_PROGRAM | LPTCTRL_DIRECTION; ioctl(pp_user_fd, PPWCONTROL, &d); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { ioctl(pp_user_fd, PPRSTATUS, &d); if (d & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } d = LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_DATASTB; ioctl(pp_user_fd, PPWCONTROL, &d); for (tmo = 0; ; tmo++) { ioctl(pp_user_fd, PPRSTATUS, &d); if (!(d & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } ioctl(pp_user_fd, PPRDATA, bp); d = LPTCTRL_PROGRAM | LPTCTRL_DIRECTION; ioctl(pp_user_fd, PPWCONTROL, &d); ret++; } return ret; } unsigned parport_user_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; unsigned char d; d = LPTCTRL_PROGRAM | LPTCTRL_WRITE; ioctl(pp_user_fd, PPWCONTROL, &d); for (; sz > 0; sz--, bp++) { ioctl(pp_user_fd, PPWDATA, bp); for (tmo = 0; ; tmo++) { ioctl(pp_user_fd, PPRSTATUS, &d); if (d & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } d = LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_ADDRSTB; ioctl(pp_user_fd, PPWCONTROL, &d); for (tmo = 0; ; tmo++) { ioctl(pp_user_fd, PPRSTATUS, &d); if (!(d & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } d = LPTCTRL_PROGRAM | LPTCTRL_WRITE; ioctl(pp_user_fd, PPWCONTROL, &d); ret++; } return ret; } unsigned parport_user_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; unsigned char d; d = LPTCTRL_PROGRAM | LPTCTRL_DIRECTION; ioctl(pp_user_fd, PPWCONTROL, &d); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { ioctl(pp_user_fd, PPRSTATUS, &d); if (d & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } d = LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_ADDRSTB; ioctl(pp_user_fd, PPWCONTROL, &d); for (tmo = 0; ; tmo++) { ioctl(pp_user_fd, PPRSTATUS, &d); if (!(d & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } ioctl(pp_user_fd, PPRDATA, bp); d = LPTCTRL_PROGRAM | LPTCTRL_DIRECTION; ioctl(pp_user_fd, PPWCONTROL, &d); ret++; } return ret; } /* ---------------------------------------------------------------------- */ static int ecp_forward(void) { unsigned tmo = 0x10000; unsigned char d; ioctl(pp_user_fd, PPRSTATUS, &d); if (d & 0x20) return 0; /* Event 47: Set nInit high */ d = 0x26; ioctl(pp_user_fd, PPWCONTROL, &d); /* Event 49: PError goes high */ for (;;) { ioctl(pp_user_fd, PPRSTATUS, &d); if (d & 0x20) break; if (!(--tmo)) return -1; } /* start driving the bus */ d = 0x04; ioctl(pp_user_fd, PPWCONTROL, &d); return 0; } static int ecp_reverse(void) { unsigned tmo = 0x10000; unsigned char d; ioctl(pp_user_fd, PPRSTATUS, &d); if (!(d & 0x20)) return 0; d = 0x24; ioctl(pp_user_fd, PPWCONTROL, &d); /* Event 39: Set nInit low to initiate bus reversal */ d = 0x20; ioctl(pp_user_fd, PPWCONTROL, &d); for (;;) { ioctl(pp_user_fd, PPRSTATUS, &d); if (!(d & 0x20)) break; if (!(--tmo)) return -1; } return 0; } unsigned parport_user_ecp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl, d; unsigned tmo; if (ecp_forward()) return 0; ioctl(pp_user_fd, PPRCONTROL, &ctl); ctl &= ~PARPORT_CONTROL_AUTOFD; /* HostAck high (data, not command) */ ioctl(pp_user_fd, PPWCONTROL, &ctl); for (ret = 0; ret < sz; ret++, bp++) { ioctl(pp_user_fd, PPWDATA, bp); d = ctl | PARPORT_CONTROL_STROBE; ioctl(pp_user_fd, PPWCONTROL, &d); tmo = 0; do { if (tmo > 0x1000) return ret; tmo++; ioctl(pp_user_fd, PPRSTATUS, &d); } while (d & PARPORT_STATUS_BUSY); ioctl(pp_user_fd, PPWCONTROL, &ctl); tmo = 0; do { if (tmo > 0x1000) return ret; tmo++; ioctl(pp_user_fd, PPRSTATUS, &d); } while (!(d & PARPORT_STATUS_BUSY)); } return ret; } unsigned parport_user_ecp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl, d; unsigned tmo; if (ecp_forward()) return 0; ioctl(pp_user_fd, PPRCONTROL, &ctl); ctl |= PARPORT_CONTROL_AUTOFD; /* HostAck low (command, not data) */ ioctl(pp_user_fd, PPWCONTROL, &ctl); for (ret = 0; ret < sz; ret++, bp++) { ioctl(pp_user_fd, PPWDATA, bp); d = ctl | PARPORT_CONTROL_STROBE; ioctl(pp_user_fd, PPWCONTROL, &d); tmo = 0; do { if (tmo > 0x1000) return ret; tmo++; ioctl(pp_user_fd, PPRSTATUS, &d); } while (d & PARPORT_STATUS_BUSY); ioctl(pp_user_fd, PPWCONTROL, &ctl); tmo = 0; do { if (tmo > 0x1000) return ret; tmo++; ioctl(pp_user_fd, PPRSTATUS, &d); } while (!(d & PARPORT_STATUS_BUSY)); } return ret; } unsigned parport_user_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned char ctl, stat; int command; unsigned tmo; unsigned char d; if (ecp_reverse()) return 0; ioctl(pp_user_fd, PPRCONTROL, &ctl); /* Set HostAck low to start accepting data. */ d = ctl | PARPORT_CONTROL_AUTOFD; ioctl(pp_user_fd, PPWCONTROL, &d); while (ret < sz) { /* Event 43: Peripheral sets nAck low. It can take as long as it wants. */ tmo = 0; do { ioctl(pp_user_fd, PPRSTATUS, &stat); if ((++tmo) > 0x10000) goto out; } while (stat & PARPORT_STATUS_ACK); /* Is this a command? */ command = stat & PARPORT_STATUS_BUSY; if (command) { //lprintf(3, "ECP: warning: emulation does not support RLE\n"); goto out; } /* Read the data. */ ioctl(pp_user_fd, PPRDATA, bp); /* Event 44: Set HostAck high, acknowledging handshake. */ d = ctl & ~PARPORT_CONTROL_AUTOFD; ioctl(pp_user_fd, PPWCONTROL, &d); /* Event 45: The peripheral has 35ms to set nAck high. */ tmo = 0; do { ioctl(pp_user_fd, PPRSTATUS, &stat); if ((++tmo) > 0x10000) goto out; } while (!(stat & PARPORT_STATUS_ACK)); /* Event 46: Set HostAck low and accept the data. */ d = ctl | PARPORT_CONTROL_AUTOFD; ioctl(pp_user_fd, PPWCONTROL, &d); /* Normal data byte. */ bp++; ret++; } out: return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_user_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned u; for (u = 0; u < sz; u++, bp++) parport_user_write_data(*bp); return sz; } /* ---------------------------------------------------------------------- */ const struct parport_ops parport_user_ops = { parport_user_read_data, parport_user_write_data, parport_user_read_status, parport_user_read_control, parport_user_write_control, parport_user_frob_control, parport_user_epp_write_data, parport_user_epp_read_data, parport_user_epp_write_addr, parport_user_epp_read_addr, parport_user_ecp_write_data, parport_user_ecp_read_data, parport_user_ecp_write_addr, parport_user_fpgaconfig_write }; /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/ppuserinit.c0100644000175100017510000000466306717012314015707 0ustar abaaba/*****************************************************************************/ /* * ppuserinit.c -- Parport access via Linux PPUSER device (init routines). * * Copyright (C) 1998-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include #include #include #include #include #include #include #include "parport.h" #include "fpga.h" #include "ppuser.h" /* ---------------------------------------------------------------------- */ extern int pp_user_fd; extern const struct parport_ops parport_user_ops; extern void parport_user_exit(void); /* ---------------------------------------------------------------------- */ int parport_init_ppuser(const char *path) { unsigned char d; if ((pp_user_fd = open(path, O_RDWR | O_NONBLOCK)) == -1) { lprintf(0, "Cannot open ppuser device %s (error %s)\n", path, strerror(errno)); return -1; } if (ioctl(pp_user_fd, PPCLAIM, 0)) { lprintf(0, "Cannot claim ppuser device %s (error %s)\n", path, strerror(errno)); close(pp_user_fd); pp_user_fd = -1; return -1; } if (atexit(parport_user_exit)) { lprintf(0, "Cannot install atexit handler (error %s)\n", strerror(errno)); ioctl(pp_user_fd, PPRELEASE, 0); close(pp_user_fd); pp_user_fd = -1; return -1; } d = 0x30; /* set PS/2 mode */ ioctl(pp_user_fd, PPWECONTROL, &d); parport_ops = parport_user_ops; return 0; } baycomepp-0.10.orig/main/ppdev.c0100644000175100017510000001232706747115464014634 0ustar abaaba/*****************************************************************************/ /* * ppdev.c -- Parport access via Linux PPDEV device. * * Copyright (C) 1998-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include #include "parport.h" #include "fpga.h" #include "ppdev.h" /* ---------------------------------------------------------------------- */ int pp_dev_fd = -1; int pp_dev_mode; /* ---------------------------------------------------------------------- */ void parport_dev_exit(void) { if (pp_dev_fd != -1) { ioctl(pp_dev_fd, PPRELEASE, 0); close(pp_dev_fd); } pp_dev_fd = -1; } /* ---------------------------------------------------------------------- */ static void setmode(int newmode) { int datadir = 0; if (newmode == pp_dev_mode) return; pp_dev_mode = newmode; ioctl(pp_dev_fd, PPSETMODE, &pp_dev_mode); if (pp_dev_mode == IEEE1284_MODE_COMPAT) ioctl(pp_dev_fd, PPDATADIR, &datadir); } /* ---------------------------------------------------------------------- */ unsigned char parport_dev_read_data(void) { unsigned char r; ioctl(pp_dev_fd, PPRDATA, &r); return r; } void parport_dev_write_data(unsigned char d) { setmode(IEEE1284_MODE_COMPAT); ioctl(pp_dev_fd, PPWDATA, &d); } unsigned char parport_dev_read_status(void) { unsigned char r; ioctl(pp_dev_fd, PPRSTATUS, &r); return r; } unsigned char parport_dev_read_control(void) { unsigned char r; ioctl(pp_dev_fd, PPRCONTROL, &r); return r; } void parport_dev_write_control(unsigned char d) { ioctl(pp_dev_fd, PPWCONTROL, &d); } void parport_dev_frob_control(unsigned char mask, unsigned char val) { struct ppdev_frob_struct f = { mask, val }; ioctl(pp_dev_fd, PPFCONTROL, &f); } /* ---------------------------------------------------------------------- */ unsigned parport_dev_epp_write_data(const void *buf, unsigned sz) { ssize_t ret; setmode(IEEE1284_MODE_EPP | IEEE1284_DATA); ret = write(pp_dev_fd, buf, sz); if (ret < 0) return 0; return ret; } unsigned parport_dev_epp_read_data(void *buf, unsigned sz) { ssize_t ret; setmode(IEEE1284_MODE_EPP | IEEE1284_DATA); ret = read(pp_dev_fd, buf, sz); if (ret < 0) return 0; return ret; } unsigned parport_dev_epp_write_addr(const void *buf, unsigned sz) { ssize_t ret; setmode(IEEE1284_MODE_EPP | IEEE1284_ADDR); ret = write(pp_dev_fd, buf, sz); if (ret < 0) return 0; return ret; } unsigned parport_dev_epp_read_addr(void *buf, unsigned sz) { ssize_t ret; setmode(IEEE1284_MODE_EPP | IEEE1284_ADDR); ret = read(pp_dev_fd, buf, sz); if (ret < 0) return 0; return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_dev_ecp_write_data(const void *buf, unsigned sz) { ssize_t ret; setmode(IEEE1284_MODE_ECP | IEEE1284_DATA); ret = write(pp_dev_fd, buf, sz); if (ret < 0) return 0; return ret; } unsigned parport_dev_ecp_write_addr(const void *buf, unsigned sz) { ssize_t ret; setmode(IEEE1284_MODE_ECP | IEEE1284_ADDR); ret = write(pp_dev_fd, buf, sz); if (ret < 0) return 0; return ret; } unsigned parport_dev_ecp_read_data(void *buf, unsigned sz) { ssize_t ret; setmode(IEEE1284_MODE_ECP | IEEE1284_DATA); ret = read(pp_dev_fd, buf, sz); if (ret < 0) return 0; return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_dev_fpgaconfig_write(const void *buf, unsigned sz) { #if 1 const unsigned char *bp = buf; unsigned u; for (u = 0; u < sz; u++, bp++) parport_dev_write_data(*bp); return sz; #else ssize_t ret; setmode(IEEE1284_MODE_COMPAT); ret = write(pp_dev_fd, buf, sz); if (ret < 0) return 0; return ret; #endif } /* ---------------------------------------------------------------------- */ const struct parport_ops parport_dev_ops = { parport_dev_read_data, parport_dev_write_data, parport_dev_read_status, parport_dev_read_control, parport_dev_write_control, parport_dev_frob_control, parport_dev_epp_write_data, parport_dev_epp_read_data, parport_dev_epp_write_addr, parport_dev_epp_read_addr, parport_dev_ecp_write_data, parport_dev_ecp_read_data, parport_dev_ecp_write_addr, parport_dev_fpgaconfig_write }; /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/ppdevinit.c0100644000175100017510000000555206747114303015511 0ustar abaaba/*****************************************************************************/ /* * ppdevinit.c -- Parport access via Linux PPDEV device (init routines). * * Copyright (C) 1998-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include #include #include #include #include #include #include #include "parport.h" #include "fpga.h" #include "ppdev.h" /* ---------------------------------------------------------------------- */ extern int pp_dev_fd; extern int pp_dev_mode; extern const struct parport_ops parport_dev_ops; extern void parport_dev_exit(void); /* ---------------------------------------------------------------------- */ int parport_init_ppdev(const char *path) { int datadir = 0; if ((pp_dev_fd = open(path, O_RDWR | O_NONBLOCK)) == -1) { lprintf(0, "Cannot open ppdev device %s (error %s)\n", path, strerror(errno)); return -1; } if (ioctl(pp_dev_fd, PPEXCL, 0)) { lprintf(0, "Cannot set exclusive mode on ppdev device %s (error %s)\n", path, strerror(errno)); goto err; } if (ioctl(pp_dev_fd, PPCLAIM, 0)) { lprintf(0, "Cannot claim ppdev device %s (error %s)\n", path, strerror(errno)); goto err; } pp_dev_mode = IEEE1284_MODE_COMPAT; if (ioctl(pp_dev_fd, PPSETMODE, &pp_dev_mode)) { lprintf(0, "Cannot set mode on ppdev device %s (error %s)\n", path, strerror(errno)); goto err; } if (ioctl(pp_dev_fd, PPDATADIR, &datadir)) { lprintf(0, "Cannot set data direction on ppdev device %s (error %s)\n", path, strerror(errno)); goto err; } if (atexit(parport_dev_exit)) { lprintf(0, "Cannot install atexit handler (error %s)\n", strerror(errno)); goto errrelease; } parport_ops = parport_dev_ops; return 0; errrelease: ioctl(pp_dev_fd, PPRELEASE, 0); err: close(pp_dev_fd); pp_dev_fd = -1; return -1; } baycomepp-0.10.orig/main/ppkdrv.c0100644000175100017510000001762406717023742015023 0ustar abaaba/*****************************************************************************/ /* * ppkdrv.c -- Parport access via Linux kernel driver. * * Copyright (C) 1998-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include #include #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ int pp_kdrv_fd = -1; struct ifreq pp_kdrv_ifr; /* ---------------------------------------------------------------------- */ void parport_kdrv_exit(void) { if (pp_kdrv_fd != -1) close(pp_kdrv_fd); pp_kdrv_fd = -1; } /* ---------------------------------------------------------------------- */ struct eppflex_ioctl_params { int cmd; int mode; union { unsigned char d; struct { unsigned size; unsigned char *data; } blk; } u; }; #define EPPFLEX_PPRSTATUS _IOR(0xbc, 0x81, struct eppflex_ioctl_params) #define EPPFLEX_PPRCONTROL _IOR(0xbc, 0x83, struct eppflex_ioctl_params) #define EPPFLEX_PPWCONTROL _IOW(0xbc, 0x84, struct eppflex_ioctl_params) #define EPPFLEX_PPRDATA _IOR(0xbc, 0x85, struct eppflex_ioctl_params) #define EPPFLEX_PPWDATA _IOW(0xbc, 0x86, struct eppflex_ioctl_params) #define EPPFLEX_PPWFPGACFG _IOW(0xbc, 0x87, struct eppflex_ioctl_params) #define EPPFLEX_PPREPPDATA _IOR(0xbc, 0x88, struct eppflex_ioctl_params) #define EPPFLEX_PPWEPPDATA _IOW(0xbc, 0x89, struct eppflex_ioctl_params) #define EPPFLEX_PPREPPADDR _IOR(0xbc, 0x8a, struct eppflex_ioctl_params) #define EPPFLEX_PPWEPPADDR _IOW(0xbc, 0x8b, struct eppflex_ioctl_params) #define EPPFLEX_PPRECPDATA _IOR(0xbc, 0x8c, struct eppflex_ioctl_params) #define EPPFLEX_PPWECPDATA _IOW(0xbc, 0x8d, struct eppflex_ioctl_params) #define EPPFLEX_PPWECPCMD _IOW(0xbc, 0x8e, struct eppflex_ioctl_params) #define EPPFLEX_PPCHANGEMODE _IOW(0xbc, 0x8f, struct eppflex_ioctl_params) /* ---------------------------------------------------------------------- */ unsigned char parport_kdrv_read_data(void) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPRDATA, }; ifr.ifr_data = (caddr_t)&i; ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr); return i.u.d; } void parport_kdrv_write_data(unsigned char d) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPWDATA, }; ifr.ifr_data = (caddr_t)&i; i.u.d = d; ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr); } unsigned char parport_kdrv_read_status(void) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPRSTATUS, }; ifr.ifr_data = (caddr_t)&i; ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr); return i.u.d; } unsigned char parport_kdrv_read_control(void) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPRCONTROL, }; ifr.ifr_data = (caddr_t)&i; ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr); return i.u.d; } void parport_kdrv_write_control(unsigned char d) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPWCONTROL, }; ifr.ifr_data = (caddr_t)&i; i.u.d = d; ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr); } void parport_kdrv_frob_control(unsigned char mask, unsigned char val) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPRCONTROL, }; ifr.ifr_data = (caddr_t)&i; ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr); i.u.d = (i.u.d & (~mask)) ^ val; i.cmd = EPPFLEX_PPWCONTROL; ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr); } /* ---------------------------------------------------------------------- */ unsigned parport_kdrv_epp_write_data(const void *buf, unsigned sz) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPWEPPDATA, }; ifr.ifr_data = (caddr_t)&i; i.u.blk.size = sz; i.u.blk.data = (void *)buf; if (ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr)) return 0; return sz; } unsigned parport_kdrv_epp_read_data(void *buf, unsigned sz) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPREPPDATA, }; ifr.ifr_data = (caddr_t)&i; i.u.blk.size = sz; i.u.blk.data = (void *)buf; if (ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr)) return 0; return sz; } unsigned parport_kdrv_epp_write_addr(const void *buf, unsigned sz) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPWEPPADDR, }; ifr.ifr_data = (caddr_t)&i; i.u.blk.size = sz; i.u.blk.data = (void *)buf; if (ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr)) return 0; return sz; } unsigned parport_kdrv_epp_read_addr(void *buf, unsigned sz) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPREPPADDR, }; ifr.ifr_data = (caddr_t)&i; i.u.blk.size = sz; i.u.blk.data = (void *)buf; if (ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr)) return 0; return sz; } /* ---------------------------------------------------------------------- */ unsigned parport_kdrv_ecp_write_data(const void *buf, unsigned sz) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPWECPDATA, }; ifr.ifr_data = (caddr_t)&i; i.u.blk.size = sz; i.u.blk.data = (void *)buf; if (ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr)) return 0; return sz; } unsigned parport_kdrv_ecp_write_addr(const void *buf, unsigned sz) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPWECPCMD, }; ifr.ifr_data = (caddr_t)&i; i.u.blk.size = sz; i.u.blk.data = (void *)buf; if (ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr)) return 0; return sz; } unsigned parport_kdrv_ecp_read_data(void *buf, unsigned sz) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPRECPDATA, }; ifr.ifr_data = (caddr_t)&i; i.u.blk.size = sz; i.u.blk.data = (void *)buf; if (ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr)) return 0; return sz; } /* ---------------------------------------------------------------------- */ #if 0 unsigned parport_kdrv_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned u; for (u = 0; u < sz; u++, bp++) parport_kdrv_write_data(*bp); return sz; } #else unsigned parport_kdrv_fpgaconfig_write(const void *buf, unsigned sz) { struct ifreq ifr = pp_kdrv_ifr; struct eppflex_ioctl_params i = { EPPFLEX_PPWFPGACFG, }; ifr.ifr_data = (caddr_t)&i; i.u.blk.size = sz; i.u.blk.data = (void *)buf; if (ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr)) return 0; return sz; } #endif /* ---------------------------------------------------------------------- */ const struct parport_ops parport_kdrv_ops = { parport_kdrv_read_data, parport_kdrv_write_data, parport_kdrv_read_status, parport_kdrv_read_control, parport_kdrv_write_control, parport_kdrv_frob_control, parport_kdrv_epp_write_data, parport_kdrv_epp_read_data, parport_kdrv_epp_write_addr, parport_kdrv_epp_read_addr, parport_kdrv_ecp_write_data, parport_kdrv_ecp_read_data, parport_kdrv_ecp_write_addr, parport_kdrv_fpgaconfig_write }; /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/ppkdrvinit.c0100644000175100017510000001001306717023442015665 0ustar abaaba/*****************************************************************************/ /* * ppkdrvinit.c -- Parport access via Linux kernel driver (init routines). * * Copyright (C) 1998-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include #include #include #include #include #include #include #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ extern int pp_kdrv_fd; extern struct ifreq pp_kdrv_ifr; extern const struct parport_ops parport_kdrv_ops; extern void parport_kdrv_exit(void); /* ---------------------------------------------------------------------- */ struct eppflex_ioctl_params { int cmd; int mode; union { unsigned char d; struct { unsigned size; unsigned char *data; } blk; } u; }; #define EPPFLEX_PPRSTATUS _IOR(0xbc, 0x81, struct eppflex_ioctl_params) #define EPPFLEX_PPRCONTROL _IOR(0xbc, 0x83, struct eppflex_ioctl_params) #define EPPFLEX_PPWCONTROL _IOW(0xbc, 0x84, struct eppflex_ioctl_params) #define EPPFLEX_PPRDATA _IOR(0xbc, 0x85, struct eppflex_ioctl_params) #define EPPFLEX_PPWDATA _IOW(0xbc, 0x86, struct eppflex_ioctl_params) #define EPPFLEX_PPWFPGACFG _IOW(0xbc, 0x87, struct eppflex_ioctl_params) #define EPPFLEX_PPREPPDATA _IOR(0xbc, 0x88, struct eppflex_ioctl_params) #define EPPFLEX_PPWEPPDATA _IOW(0xbc, 0x89, struct eppflex_ioctl_params) #define EPPFLEX_PPREPPADDR _IOR(0xbc, 0x8a, struct eppflex_ioctl_params) #define EPPFLEX_PPWEPPADDR _IOW(0xbc, 0x8b, struct eppflex_ioctl_params) #define EPPFLEX_PPRECPDATA _IOR(0xbc, 0x8c, struct eppflex_ioctl_params) #define EPPFLEX_PPWECPDATA _IOW(0xbc, 0x8d, struct eppflex_ioctl_params) #define EPPFLEX_PPWECPCMD _IOW(0xbc, 0x8e, struct eppflex_ioctl_params) #define EPPFLEX_PPCHANGEMODE _IOW(0xbc, 0x8f, struct eppflex_ioctl_params) /* ---------------------------------------------------------------------- */ int parport_init_ppkdrv(const char *ifname) { struct ifreq ifr; struct eppflex_ioctl_params i; strncpy(pp_kdrv_ifr.ifr_name, ifname, sizeof(pp_kdrv_ifr.ifr_name)); if ((pp_kdrv_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_AX25))) == -1) { lprintf(0, "Cannot open socket (error %s)\n", strerror(errno)); return -1; } if (ioctl(pp_kdrv_fd, SIOCGIFINDEX, &pp_kdrv_ifr)) { lprintf(0, "Cannot open interface %s (error %s)\n", ifname, strerror(errno)); close(pp_kdrv_fd); return -1; } ifr = pp_kdrv_ifr; i.cmd = EPPFLEX_PPRCONTROL; ifr.ifr_data = (caddr_t)&i; if (ioctl(pp_kdrv_fd, SIOCDEVPRIVATE, &ifr)) { lprintf(0, "Cannot access parport through kernel driver %s (error %s)\n", ifname, strerror(errno)); close(pp_kdrv_fd); return -1; } if (atexit(parport_kdrv_exit)) { lprintf(0, "Cannot install atexit handler (error %s)\n", strerror(errno)); close(pp_kdrv_fd); pp_kdrv_fd = -1; return -1; } parport_ops = parport_kdrv_ops; return 0; } baycomepp-0.10.orig/main/ppntddkgenport.c0100644000175100017510000005456407141051400016544 0ustar abaaba/*****************************************************************************/ /* * ppntddkgenport.c -- Parport direct access with NTDDK genport.sys. * * Copyright (C) 2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ #define DEVICE_TYPE DWORD #define CTL_CODE( DeviceType, Function, Method, Access ) ( \ ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ ) #define METHOD_BUFFERED 0 #define METHOD_IN_DIRECT 1 #define METHOD_OUT_DIRECT 2 #define METHOD_NEITHER 3 #define FILE_ANY_ACCESS 0 #define FILE_READ_ACCESS (0x0001) #define FILE_WRITE_ACCESS (0x0002) #define GPD_TYPE 40000 #define IOCTL_GPD_READ_PORT_UCHAR \ CTL_CODE( GPD_TYPE, 0x900, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_GPD_READ_PORT_USHORT \ CTL_CODE( GPD_TYPE, 0x901, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_GPD_READ_PORT_ULONG \ CTL_CODE( GPD_TYPE, 0x902, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_GPD_WRITE_PORT_UCHAR \ CTL_CODE(GPD_TYPE, 0x910, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_GPD_WRITE_PORT_USHORT \ CTL_CODE(GPD_TYPE, 0x911, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_GPD_WRITE_PORT_ULONG \ CTL_CODE(GPD_TYPE, 0x912, METHOD_BUFFERED, FILE_WRITE_ACCESS) typedef struct _GENPORT_WRITE_INPUT { ULONG PortNumber; /* Port # to write to */ union { /* Data to be output to port */ ULONG LongData; USHORT ShortData; UCHAR CharData; }; } GENPORT_WRITE_INPUT; /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ HANDLE pp_ntddkgenport_handle = INVALID_HANDLE_VALUE; unsigned int pp_ntddkgenport_flags = 0; #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ unsigned char pp_ntddkgenport_inb(unsigned int port) { ULONG p = port; UCHAR ch; BOOL res; DWORD retl; if (pp_ntddkgenport_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_ntddkgenport_handle, IOCTL_GPD_READ_PORT_UCHAR, &p, sizeof(p), &ch, sizeof(ch), &retl, NULL); if (!res) { lprintf(0, "Parport: inb ioctl failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(ch)) { lprintf(0, "Parport: inb ioctl returned invalid length, %lu\n", retl); return 0xff; } return ch; } void pp_ntddkgenport_outb(unsigned char val, unsigned int port) { GENPORT_WRITE_INPUT buf; BOOL res; DWORD retl; if (pp_ntddkgenport_handle == INVALID_HANDLE_VALUE) return; buf.PortNumber = port; buf.CharData = val; res = DeviceIoControl(pp_ntddkgenport_handle, IOCTL_GPD_WRITE_PORT_UCHAR, &buf, sizeof(buf), NULL, 0, &retl, NULL); if (!res) { lprintf(0, "Parport: outb ioctl failed, error 0x%08lx\n", GetLastError()); return; } } void pp_ntddkgenport_insb(unsigned int port, unsigned char *bp, unsigned int len) { for (; len > 0; len--, bp++) *bp = pp_ntddkgenport_inb(port); } void pp_ntddkgenport_outsb(unsigned int port, const unsigned char *bp, unsigned int len) { for (; len > 0; len--, bp++) pp_ntddkgenport_outb(*bp, port); } /* ---------------------------------------------------------------------- */ extern inline void setecr(unsigned char ecr) { if (pp_ntddkgenport_flags & FLAGS_PCECR) pp_ntddkgenport_outb(ecr, LPTREG_ECONTROL); } int pp_ntddkgenport_epp_clear_timeout(void) { unsigned char r; if (!(pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT)) return 1; /* To clear timeout some chips require double read */ pp_ntddkgenport_inb(LPTREG_STATUS); r = pp_ntddkgenport_inb(LPTREG_STATUS); pp_ntddkgenport_outb(r | 0x01, LPTREG_STATUS); /* Some reset by writing 1 */ pp_ntddkgenport_outb(r & 0xfe, LPTREG_STATUS); /* Others by writing 0 */ r = pp_ntddkgenport_inb(LPTREG_STATUS); return !(r & 0x01); } /* ---------------------------------------------------------------------- */ unsigned char parport_ntddkgenport_read_data(void) { return pp_ntddkgenport_inb(LPTREG_DATA); } void parport_ntddkgenport_write_data(unsigned char d) { pp_ntddkgenport_outb(d, LPTREG_DATA); } unsigned char parport_ntddkgenport_read_status(void) { return pp_ntddkgenport_inb(LPTREG_STATUS); } unsigned char parport_ntddkgenport_read_control(void) { return pp_ntddkgenport_inb(LPTREG_CONTROL); } void parport_ntddkgenport_write_control(unsigned char d) { pp_ntddkgenport_outb(d, LPTREG_CONTROL); } void parport_ntddkgenport_frob_control(unsigned char mask, unsigned char val) { unsigned char d = pp_ntddkgenport_inb(LPTREG_CONTROL); d = (d & (~mask)) ^ val; pp_ntddkgenport_outb(d, LPTREG_CONTROL); } /* ---------------------------------------------------------------------- */ unsigned parport_ntddkgenport_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { pp_ntddkgenport_outb(*bp, LPTREG_EPPDATA); if (pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_ntddkgenport_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_ntddkgenport_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = pp_ntddkgenport_inb(LPTREG_EPPDATA); if (pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_ntddkgenport_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_ntddkgenport_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { pp_ntddkgenport_outb(*bp, LPTREG_EPPADDR); if (pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_ntddkgenport_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_ntddkgenport_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = pp_ntddkgenport_inb(LPTREG_EPPADDR); if (pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_ntddkgenport_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_ntddkgenport_emul_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { pp_ntddkgenport_outb(*bp, LPTREG_DATA); for (tmo = 0; ; tmo++) { if (pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_DATASTB, LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, LPTREG_CONTROL); ret++; } return ret; } unsigned parport_ntddkgenport_emul_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_DATASTB, LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = pp_ntddkgenport_inb(LPTREG_DATA); pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, LPTREG_CONTROL); ret++; } return ret; } unsigned parport_ntddkgenport_emul_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { pp_ntddkgenport_outb(*bp, LPTREG_DATA); for (tmo = 0; ; tmo++) { if (pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_ADDRSTB, LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, LPTREG_CONTROL); ret++; } return ret; } unsigned parport_ntddkgenport_emul_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_ADDRSTB, LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(pp_ntddkgenport_inb(LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = pp_ntddkgenport_inb(LPTREG_DATA); pp_ntddkgenport_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, LPTREG_CONTROL); ret++; } return ret; } /* ---------------------------------------------------------------------- */ static int ecp_forward(void) { unsigned tmo = 0x10000; if (pp_ntddkgenport_inb(LPTREG_DSR) & 0x20) return 0; /* Event 47: Set nInit high */ pp_ntddkgenport_outb(0x26, LPTREG_DCR); /* Event 49: PError goes high */ while (!(pp_ntddkgenport_inb(LPTREG_DSR) & 0x20)) { if (!(--tmo)) return -1; } /* start driving the bus */ pp_ntddkgenport_outb(0x04, LPTREG_DCR); return 0; } static int ecp_reverse(void) { unsigned tmo = 0x10000; if (!(pp_ntddkgenport_inb(LPTREG_DSR) & 0x20)) return 0; pp_ntddkgenport_outb(0x24, LPTREG_DCR); /* Event 39: Set nInit low to initiate bus reversal */ pp_ntddkgenport_outb(0x20, LPTREG_DCR); while (pp_ntddkgenport_inb(LPTREG_DSR) & 0x20) { if (!(--tmo)) return -1; } return 0; } static unsigned emptyfifo(unsigned cnt) { unsigned fcnt = 0; pp_ntddkgenport_outb(0xd0, LPTREG_ECONTROL); /* FIFOtest mode */ while ((pp_ntddkgenport_inb(LPTREG_ECONTROL) & 0x01) && fcnt < 32 && fcnt < cnt) { pp_ntddkgenport_inb(LPTREG_TFIFO); fcnt++; } lprintf(10, "emptyfifo: FIFO contained %d bytes\n", fcnt); pp_ntddkgenport_outb(0x30, LPTREG_ECONTROL); /* PS/2 mode */ return cnt - fcnt; } unsigned parport_ntddkgenport_ecp_write_data(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (ecp_forward()) return 0; pp_ntddkgenport_outb(0x70, LPTREG_ECONTROL); /* ECP mode */ while (sz > 0) { while ((stat = pp_ntddkgenport_inb(LPTREG_ECONTROL)) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { pp_ntddkgenport_outsb(LPTREG_DFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { pp_ntddkgenport_outb(*bp++, LPTREG_DFIFO); sz--; ret++; } tmo = 0x10000; } while (!(pp_ntddkgenport_inb(LPTREG_ECONTROL) & 0x01) || !(pp_ntddkgenport_inb(LPTREG_DSR) & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } pp_ntddkgenport_outb(0x30, LPTREG_ECONTROL); /* PS/2 mode */ return ret; } unsigned parport_ntddkgenport_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (ecp_reverse()) return 0; pp_ntddkgenport_outb(0x70, LPTREG_ECONTROL); /* ECP mode */ while (sz > 0) { while ((stat = pp_ntddkgenport_inb(LPTREG_ECONTROL)) & 0x01) if (!(--tmo)) { pp_ntddkgenport_outb(0xd0, LPTREG_ECONTROL); /* FIFOTEST mode */ while (!(pp_ntddkgenport_inb(LPTREG_ECONTROL) & 0x01) && sz > 0) { *bp++ = pp_ntddkgenport_inb(LPTREG_TFIFO); sz--; ret++; } pp_ntddkgenport_outb(0x30, LPTREG_ECONTROL); /* PS/2 mode */ return ret; } if (stat & 0x02 && sz >= 8) { pp_ntddkgenport_insb(LPTREG_DFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { *bp++ = pp_ntddkgenport_inb(LPTREG_DFIFO); sz--; ret++; } tmo = 0x10000; } pp_ntddkgenport_outb(0x30, LPTREG_ECONTROL); /* PS/2 mode */ return ret; } unsigned parport_ntddkgenport_ecp_write_addr(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (ecp_forward()) return 0; pp_ntddkgenport_outb(0x70, LPTREG_ECONTROL); /* ECP mode */ while (sz > 0) { while ((stat = pp_ntddkgenport_inb(LPTREG_ECONTROL)) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { pp_ntddkgenport_outsb(LPTREG_AFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { pp_ntddkgenport_outb(*bp++, LPTREG_AFIFO); sz--; ret++; } tmo = 0x10000; } while (!(pp_ntddkgenport_inb(LPTREG_ECONTROL) & 0x01) || !(pp_ntddkgenport_inb(LPTREG_DSR) & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } pp_ntddkgenport_outb(0x30, LPTREG_ECONTROL); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_ntddkgenport_emul_ecp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = pp_ntddkgenport_inb(LPTREG_CONTROL) & ~PARPORT_CONTROL_AUTOFD; /* HostAck high (data, not command) */ pp_ntddkgenport_outb(ctl, LPTREG_CONTROL); for (ret = 0; ret < sz; ret++, bp++) { pp_ntddkgenport_outb(*bp, LPTREG_DATA); pp_ntddkgenport_outb(ctl | PARPORT_CONTROL_STROBE, LPTREG_CONTROL); for (tmo = 0; pp_ntddkgenport_inb(LPTREG_STATUS) & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; pp_ntddkgenport_outb(ctl, LPTREG_CONTROL); for (tmo = 0; !(pp_ntddkgenport_inb(LPTREG_STATUS) & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_ntddkgenport_emul_ecp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = pp_ntddkgenport_inb(LPTREG_CONTROL) | PARPORT_CONTROL_AUTOFD; /* HostAck low (command, not data) */ pp_ntddkgenport_outb(ctl, LPTREG_CONTROL); for (ret = 0; ret < sz; ret++, bp++) { pp_ntddkgenport_outb(*bp, LPTREG_DATA); pp_ntddkgenport_outb(ctl | PARPORT_CONTROL_STROBE, LPTREG_CONTROL); for (tmo = 0; pp_ntddkgenport_inb(LPTREG_STATUS) & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; pp_ntddkgenport_outb(ctl, LPTREG_CONTROL); for (tmo = 0; !(pp_ntddkgenport_inb(LPTREG_STATUS) & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_ntddkgenport_emul_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned char ctl, stat; int command; unsigned tmo; if (ecp_reverse()) return 0; ctl = pp_ntddkgenport_inb(LPTREG_CONTROL); /* Set HostAck low to start accepting data. */ pp_ntddkgenport_outb(ctl | PARPORT_CONTROL_AUTOFD, LPTREG_CONTROL); while (ret < sz) { /* Event 43: Peripheral sets nAck low. It can take as long as it wants. */ tmo = 0; do { stat = pp_ntddkgenport_inb(LPTREG_STATUS); if ((++tmo) > 0x10000) goto out; } while (stat & PARPORT_STATUS_ACK); /* Is this a command? */ command = stat & PARPORT_STATUS_BUSY; if (command) { //lprintf(3, "ECP: warning: emulation does not support RLE\n"); goto out; } /* Read the data. */ *bp = pp_ntddkgenport_inb(LPTREG_DATA); /* Event 44: Set HostAck high, acknowledging handshake. */ pp_ntddkgenport_outb(ctl & ~PARPORT_CONTROL_AUTOFD, LPTREG_CONTROL); /* Event 45: The peripheral has 35ms to set nAck high. */ tmo = 0; do { stat = pp_ntddkgenport_inb(LPTREG_STATUS); if ((++tmo) > 0x10000) goto out; } while (!(stat & PARPORT_STATUS_ACK)); /* Event 46: Set HostAck low and accept the data. */ pp_ntddkgenport_outb(ctl | PARPORT_CONTROL_AUTOFD, LPTREG_CONTROL); /* Normal data byte. */ bp++; ret++; } out: return ret; } /* ---------------------------------------------------------------------- */ #if 1 unsigned parport_ntddkgenport_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned u; for (u = 0; u < sz; u++, bp++) pp_ntddkgenport_outb(*bp, LPTREG_DATA); return sz; } #else unsigned parport_ntddkgenport_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (pp_ntddkgenport_modes & PARPORT_MODE_PCECR) { pp_ntddkgenport_outb(0x50, LPTREG_ECONTROL); /* COMPAT FIFO mode */ while (sz > 0) { while ((stat = pp_ntddkgenport_inb(LPTREG_ECONTROL)) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { pp_ntddkgenport_outsb(LPTREG_DFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { pp_ntddkgenport_outb(*bp++, LPTREG_DFIFO); sz--; ret++; } tmo = 0x10000; } while (!(pp_ntddkgenport_inb(LPTREG_ECONTROL) & 0x01) || !(pp_ntddkgenport_inb(LPTREG_DSR) & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } pp_ntddkgenport_outb(0x30, LPTREG_ECONTROL); /* PS/2 mode */ return ret; } for (ret = 0; ret < sz; ret++, bp++) pp_ntddkgenport_outb(*bp, LPTREG_DATA); return sz; } #endif /* ---------------------------------------------------------------------- */ const struct parport_ops parport_ntddkgenport_ops = { parport_ntddkgenport_read_data, parport_ntddkgenport_write_data, parport_ntddkgenport_read_status, parport_ntddkgenport_read_control, parport_ntddkgenport_write_control, parport_ntddkgenport_frob_control, parport_ntddkgenport_epp_write_data, parport_ntddkgenport_epp_read_data, parport_ntddkgenport_epp_write_addr, parport_ntddkgenport_epp_read_addr, parport_ntddkgenport_ecp_write_data, parport_ntddkgenport_ecp_read_data, parport_ntddkgenport_ecp_write_addr, parport_ntddkgenport_fpgaconfig_write }; const struct parport_ops parport_ntddkgenport_emul_ops = { parport_ntddkgenport_read_data, parport_ntddkgenport_write_data, parport_ntddkgenport_read_status, parport_ntddkgenport_read_control, parport_ntddkgenport_write_control, parport_ntddkgenport_frob_control, parport_ntddkgenport_emul_epp_write_data, parport_ntddkgenport_emul_epp_read_data, parport_ntddkgenport_emul_epp_write_addr, parport_ntddkgenport_emul_epp_read_addr, parport_ntddkgenport_emul_ecp_write_data, parport_ntddkgenport_emul_ecp_read_data, parport_ntddkgenport_emul_ecp_write_addr, parport_ntddkgenport_fpgaconfig_write }; /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/ppntddkgenportinit.c0100644000175100017510000003663307141051401017426 0ustar abaaba/*****************************************************************************/ /* * ppntddkgenportinit.c -- Parport direct access with NTDDK genport.sys (init routines). * * Copyright (C) 2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ #define DEVNAME "\\\\.\\GpdDev" /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ extern HANDLE pp_ntddkgenport_handle; extern unsigned int pp_ntddkgenport_flags; extern const struct parport_ops parport_ntddkgenport_ops, parport_ntddkgenport_emul_ops; extern unsigned char pp_ntddkgenport_inb(unsigned int port); extern void pp_ntddkgenport_outb(unsigned char val, unsigned int port); extern int pp_ntddkgenport_epp_clear_timeout(void); #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ static int parport_spp(void) { pp_ntddkgenport_epp_clear_timeout(); /* prevent lockup of some SMSC IC's */ /* this routine is mostly copied from Linux Kernel parport */ pp_ntddkgenport_outb(0xc, LPTREG_ECONTROL); pp_ntddkgenport_outb(0xc, LPTREG_CONTROL); pp_ntddkgenport_outb(0xaa, LPTREG_DATA); if (pp_ntddkgenport_inb(LPTREG_DATA) != 0xaa) return 0; pp_ntddkgenport_outb(0x55, LPTREG_DATA); if (pp_ntddkgenport_inb(LPTREG_DATA) != 0x55) return 0; return PARPORT_MODE_PCSPP; } /* Check for ECP * * Old style XT ports alias io ports every 0x400, hence accessing ECR * on these cards actually accesses the CTR. * * Modern cards don't do this but reading from ECR will return 0xff * regardless of what is written here if the card does NOT support * ECP. * * We will write 0x2c to ECR and 0xcc to CTR since both of these * values are "safe" on the CTR since bits 6-7 of CTR are unused. */ static int parport_ecr(void) { unsigned char r = 0xc; pp_ntddkgenport_outb(r, LPTREG_CONTROL); if ((pp_ntddkgenport_inb(LPTREG_ECONTROL) & 0x3) == (r & 0x3)) { pp_ntddkgenport_outb(r ^ 0x2, LPTREG_CONTROL); /* Toggle bit 1 */ r = pp_ntddkgenport_inb(LPTREG_CONTROL); if ((pp_ntddkgenport_inb(LPTREG_ECONTROL) & 0x2) == (r & 0x2)) goto no_reg; /* Sure that no ECR register exists */ } if ((pp_ntddkgenport_inb(LPTREG_ECONTROL) & 0x3 ) != 0x1) goto no_reg; pp_ntddkgenport_outb(0x34, LPTREG_ECONTROL); if (pp_ntddkgenport_inb(LPTREG_ECONTROL) != 0x35) goto no_reg; pp_ntddkgenport_outb(0xc, LPTREG_CONTROL); /* Go to mode 000 */ pp_ntddkgenport_outb(pp_ntddkgenport_inb(LPTREG_ECONTROL) & ~0xe0, LPTREG_ECONTROL); return PARPORT_MODE_PCECR; no_reg: pp_ntddkgenport_outb(0xc, LPTREG_CONTROL); return 0; } static int parport_ecp(void) { int i; int config; int pword; int fifo_depth, writeIntrThreshold, readIntrThreshold; /* Find out FIFO depth */ pp_ntddkgenport_outb(0x00, LPTREG_ECONTROL); /* Reset FIFO */ pp_ntddkgenport_outb(0xc0, LPTREG_ECONTROL); /* TEST FIFO */ for (i=0; i < 1024 && !(pp_ntddkgenport_inb(LPTREG_ECONTROL) & 0x02); i++) pp_ntddkgenport_outb(0xaa, LPTREG_TFIFO); /* * Using LGS chipset it uses ECR register, but * it doesn't support ECP or FIFO MODE */ if (i == 1024) { pp_ntddkgenport_outb(0x00, LPTREG_ECONTROL); return 0; } fifo_depth = i; lprintf(3, "ECP: FIFO depth is %d bytes\n", fifo_depth); /* Find out writeIntrThreshold */ pp_ntddkgenport_outb(pp_ntddkgenport_inb(LPTREG_ECONTROL) | (1<<2), LPTREG_ECONTROL); pp_ntddkgenport_outb(pp_ntddkgenport_inb(LPTREG_ECONTROL) & ~(1<<2) , LPTREG_ECONTROL); for (i = 1; i <= fifo_depth; i++) { pp_ntddkgenport_inb(LPTREG_TFIFO); usleep(50); if (pp_ntddkgenport_inb(LPTREG_ECONTROL) & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: writeIntrThreshold is %d\n", i); else /* Number of bytes we know we can write if we get an interrupt. */ i = 0; writeIntrThreshold = i; /* Find out readIntrThreshold */ pp_ntddkgenport_outb((pp_ntddkgenport_inb(LPTREG_ECONTROL) & ~0xe0) | 0x20, LPTREG_ECONTROL); /* Reset FIFO, PS2 */ pp_ntddkgenport_outb(pp_ntddkgenport_inb(LPTREG_CONTROL) | PARPORT_CONTROL_DIRECTION, LPTREG_CONTROL); pp_ntddkgenport_outb((pp_ntddkgenport_inb(LPTREG_ECONTROL) & ~0xe0) | 0xc0, LPTREG_ECONTROL); /* Test FIFO */ pp_ntddkgenport_outb(pp_ntddkgenport_inb(LPTREG_ECONTROL) | (1<<2), LPTREG_ECONTROL); pp_ntddkgenport_outb(pp_ntddkgenport_inb(LPTREG_ECONTROL) & ~(1<<2) , LPTREG_ECONTROL); for (i = 1; i <= fifo_depth; i++) { pp_ntddkgenport_outb(0xaa, LPTREG_TFIFO); if (pp_ntddkgenport_inb(LPTREG_ECONTROL) & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: readIntrThreshold is %d\n", i); else /* Number of bytes we can read if we get an interrupt. */ i = 0; readIntrThreshold = i; pp_ntddkgenport_outb(0x00, LPTREG_ECONTROL); /* Reset FIFO */ pp_ntddkgenport_outb(0xf4, LPTREG_ECONTROL); /* Configuration mode */ config = pp_ntddkgenport_inb(LPTREG_CONFIGA); pword = (config >> 4) & 0x7; switch (pword) { case 0: pword = 2; lprintf(0, "ECP: Unsupported pword size! (2)\n"); break; case 2: pword = 4; lprintf(0, "ECP: Unsupported pword size! (4)\n"); break; default: lprintf(0, "ECP: Unknown implementation ID (%d)\n", pword); /* Assume 1 */ case 1: pword = 1; } lprintf(3, "ECP: PWord is %d bits\n", 8 * pword); config = pp_ntddkgenport_inb(LPTREG_CONFIGB); lprintf(3, "ECP: Interrupts are ISA-%s\n", config & 0x80 ? "Level" : "Pulses"); if (!(config & 0x40)) lprintf(3, "ECP: IRQ conflict!\n"); /* Go back to mode 000 */ pp_ntddkgenport_outb(pp_ntddkgenport_inb(LPTREG_ECONTROL) & ~0xe0, LPTREG_ECONTROL); return PARPORT_MODE_PCECP; } /* EPP mode detection */ static int parport_epp(void) { /* If EPP timeout bit clear then EPP available */ if (!pp_ntddkgenport_epp_clear_timeout()) return 0; /* No way to clear timeout */ /* * Theory: * Write two values to the EPP address register and * read them back. When the transfer times out, the state of * the EPP register is undefined in some cases (EPP 1.9?) but * in others (EPP 1.7, ECPEPP?) it is possible to read back * its value. */ pp_ntddkgenport_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ pp_ntddkgenport_outb(0x55, LPTREG_EPPADDR); pp_ntddkgenport_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (pp_ntddkgenport_inb(LPTREG_EPPADDR) == 0x55) { pp_ntddkgenport_outb(0xaa, LPTREG_EPPADDR); pp_ntddkgenport_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (pp_ntddkgenport_inb(LPTREG_EPPADDR) == 0xaa) { pp_ntddkgenport_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } } /* * Theory: * Bit 0 of STR is the EPP timeout bit, this bit is 0 * when EPP is possible and is set high when an EPP timeout * occurs (EPP uses the HALT line to stop the CPU while it does * the byte transfer, an EPP timeout occurs if the attached * device fails to respond after 10 micro seconds). * * This bit is cleared by either reading it (National Semi) * or writing a 1 to the bit (SMC, UMC, WinBond), others ??? * This bit is always high in non EPP modes. */ pp_ntddkgenport_outb(pp_ntddkgenport_inb(LPTREG_CONTROL) | 0x20, LPTREG_CONTROL); pp_ntddkgenport_outb(pp_ntddkgenport_inb(LPTREG_CONTROL) | 0x10, LPTREG_CONTROL); pp_ntddkgenport_epp_clear_timeout(); pp_ntddkgenport_inb(LPTREG_EPPDATA); usleep(30); /* Wait for possible EPP timeout */ if (pp_ntddkgenport_inb(LPTREG_STATUS) & 0x01) { pp_ntddkgenport_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } return 0; } static int parport_ecpepp(void) { int mode; unsigned char oecr; oecr = pp_ntddkgenport_inb(LPTREG_ECONTROL); /* Search for SMC style EPP+ECP mode */ pp_ntddkgenport_outb(0x80, LPTREG_ECONTROL); mode = parport_epp(); pp_ntddkgenport_outb(oecr, LPTREG_ECONTROL); return mode ? PARPORT_MODE_PCECPEPP : 0; } /* Detect PS/2 support. * * Bit 5 (0x20) sets the PS/2 data direction; setting this high * allows us to read data from the data lines. In theory we would get back * 0xff but any peripheral attached to the port may drag some or all of the * lines down to zero. So if we get back anything that isn't the contents * of the data register we deem PS/2 support to be present. * * Some SPP ports have "half PS/2" ability - you can't turn off the line * drivers, but an external peripheral with sufficiently beefy drivers of * its own can overpower them and assert its own levels onto the bus, from * where they can then be read back as normal. Ports with this property * and the right type of device attached are likely to fail the SPP test, * (as they will appear to have stuck bits) and so the fact that they might * be misdetected here is rather academic. */ static int parport_ps2(void) { int ok = 0; unsigned char octr = pp_ntddkgenport_inb(LPTREG_CONTROL); pp_ntddkgenport_epp_clear_timeout(); pp_ntddkgenport_outb(octr | 0x20, LPTREG_CONTROL); /* try to tri-state the buffer */ pp_ntddkgenport_outb(0x55, LPTREG_DATA); if (pp_ntddkgenport_inb(LPTREG_DATA) != 0x55) ok++; pp_ntddkgenport_outb(0xaa, LPTREG_DATA); if (pp_ntddkgenport_inb(LPTREG_DATA) != 0xaa) ok++; pp_ntddkgenport_outb(octr, 0); /* cancel input mode */ return ok ? PARPORT_MODE_PCPS2 : 0; } static int parport_ecpps2(void) { int mode; unsigned char oecr; oecr = pp_ntddkgenport_inb(LPTREG_ECONTROL); pp_ntddkgenport_outb(0x20, LPTREG_ECONTROL); mode = parport_ps2(); pp_ntddkgenport_outb(oecr, LPTREG_ECONTROL); return mode ? PARPORT_MODE_PCECPPS2 : 0; } /* ---------------------------------------------------------------------- */ int parport_init_ntddkgenport(void) { if (pp_ntddkgenport_handle != INVALID_HANDLE_VALUE) CloseHandle(pp_ntddkgenport_handle); pp_ntddkgenport_handle = CreateFile(DEVNAME, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (pp_ntddkgenport_handle == INVALID_HANDLE_VALUE) { lprintf(0, "Cannot open genport.sys driver, error 0x%08lx\n", GetLastError()); return -1; } pp_ntddkgenport_flags = FLAGS_PCSPP; if (!parport_spp()) { lprintf(0, "No parport present\n"); goto err; } if (parport_ecr()) { pp_ntddkgenport_flags |= FLAGS_PCECR; pp_ntddkgenport_flags |= parport_ecp(); pp_ntddkgenport_flags |= parport_ecpps2(); pp_ntddkgenport_flags |= parport_ecpepp(); } else { pp_ntddkgenport_flags |= parport_ps2(); pp_ntddkgenport_flags |= parport_epp(); } lprintf(0, "Parport capabilities: SPP"); if (pp_ntddkgenport_flags & FLAGS_PCPS2) lprintf(0, ", PS2"); if (pp_ntddkgenport_flags & FLAGS_PCEPP) lprintf(0, ", EPP"); if (pp_ntddkgenport_flags & FLAGS_PCECR) lprintf(0, ", ECR"); if (pp_ntddkgenport_flags & FLAGS_PCECP) lprintf(0, ", ECP"); if (pp_ntddkgenport_flags & FLAGS_PCECPEPP) lprintf(0, ", ECPEPP"); if (pp_ntddkgenport_flags & FLAGS_PCECPPS2) lprintf(0, ", ECPPS2"); if (!(pp_ntddkgenport_flags & (FLAGS_PCPS2 | FLAGS_PCECPPS2))) { lprintf(0, "\nParport does not even support PS/2 mode, cannot use it\n"); goto err; } lprintf(0, "\nParport using NTDDK genport.sys hardware access"); if (pp_ntddkgenport_flags & FLAGS_PCECR) pp_ntddkgenport_outb(0x30, LPTREG_ECONTROL); /* PS/2 mode */ parport_ops = parport_ntddkgenport_ops; if (!(pp_ntddkgenport_flags & FLAGS_PCECP)) { parport_ops.parport_ecp_write_data = parport_ntddkgenport_emul_ops.parport_ecp_write_data; parport_ops.parport_ecp_read_data = parport_ntddkgenport_emul_ops.parport_ecp_read_data; parport_ops.parport_ecp_write_addr = parport_ntddkgenport_emul_ops.parport_ecp_write_addr; lprintf(0, ", emulating ECP"); } if (!(pp_ntddkgenport_flags & (FLAGS_PCEPP | FLAGS_PCECPEPP))) { parport_ops.parport_epp_write_data = parport_ntddkgenport_emul_ops.parport_epp_write_data; parport_ops.parport_epp_read_data = parport_ntddkgenport_emul_ops.parport_epp_read_data; parport_ops.parport_epp_write_addr = parport_ntddkgenport_emul_ops.parport_epp_write_addr; parport_ops.parport_epp_read_addr = parport_ntddkgenport_emul_ops.parport_epp_read_addr; lprintf(0, ", emulating EPP"); } lprintf(0, "\n"); return 0; err: CloseHandle(pp_ntddkgenport_handle); pp_ntddkgenport_handle = INVALID_HANDLE_VALUE; return -1; } baycomepp-0.10.orig/main/ppnt.c0100644000175100017510000006612207141320403014455 0ustar abaaba/*****************************************************************************/ /* * ppnt.c -- Parport direct access with NT eppflex.sys. * * Copyright (C) 2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ #define DEVICE_TYPE DWORD #define CTL_CODE( DeviceType, Function, Method, Access ) ( \ ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ ) #define METHOD_BUFFERED 0 #define METHOD_IN_DIRECT 1 #define METHOD_OUT_DIRECT 2 #define METHOD_NEITHER 3 #define FILE_ANY_ACCESS 0 #define FILE_READ_ACCESS (0x0001) #define FILE_WRITE_ACCESS (0x0002) #include "eppflex.h" /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ HANDLE pp_nt_handle = INVALID_HANDLE_VALUE; unsigned int pp_nt_flags = 0; #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ unsigned char parport_nt_read_data(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_READ_DATA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_read_data failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_nt_write_data(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_WRITE_DATA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_nt_write_data failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_nt_read_status(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_READ_STATUS, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_read_status failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_nt_write_status(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_WRITE_STATUS, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_nt_write_status failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_nt_read_control(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_READ_CONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_read_control failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_nt_write_control(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_WRITE_CONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_nt_write_control failed, error 0x%08lx\n", GetLastError()); } void parport_nt_frob_control(unsigned char mask, unsigned char val) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = val; rw.mask = mask; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_FROB_CONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_frob_control failed, error 0x%08lx\n", GetLastError()); return; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return; } } unsigned char parport_nt_read_configa(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_READ_CONFIGA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_read_configa failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_nt_write_configa(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_WRITE_CONFIGA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_nt_write_configa failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_nt_read_configb(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_READ_CONFIGB, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_read_configb failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_nt_write_configb(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_WRITE_CONFIGB, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_nt_write_configb failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_nt_read_econtrol(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_READ_ECONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_read_econtrol failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_nt_write_econtrol(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_WRITE_ECONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_nt_write_econtrol failed, error 0x%08lx\n", GetLastError()); } void parport_nt_frob_econtrol(unsigned char mask, unsigned char val) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = val; rw.mask = mask; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_FROB_ECONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_frob_econtrol failed, error 0x%08lx\n", GetLastError()); return; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return; } } unsigned char parport_nt_read_eppaddr(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_READ_EPPADDR, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_read_eppaddr failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_nt_write_eppaddr(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_WRITE_EPPADDR, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_nt_write_eppaddr failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_nt_read_eppdata(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_READ_EPPDATA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_nt_read_eppdata failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_nt_write_eppdata(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_nt_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_nt_handle, IOCTL_EPPFLEX_WRITE_EPPDATA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_nt_write_eppdata failed, error 0x%08lx\n", GetLastError()); } /* ---------------------------------------------------------------------- */ extern inline void setecr(unsigned char ecr) { if (pp_nt_flags & FLAGS_PCECR) parport_nt_write_econtrol(ecr); } int pp_nt_epp_clear_timeout(void) { unsigned char r; if (!(parport_nt_read_status() & LPTSTAT_EPPTIMEOUT)) return 1; /* To clear timeout some chips require double read */ parport_nt_read_status(); r = parport_nt_read_status(); parport_nt_write_status(r | 0x01); /* Some reset by writing 1 */ parport_nt_write_status(r & 0xfe); /* Others by writing 0 */ r = parport_nt_read_status(); return !(r & 0x01); } /* ---------------------------------------------------------------------- */ unsigned parport_nt_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { parport_nt_write_eppdata(*bp); if (parport_nt_read_status() & LPTSTAT_EPPTIMEOUT) { pp_nt_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_nt_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = parport_nt_read_eppdata(); if (parport_nt_read_status() & LPTSTAT_EPPTIMEOUT) { pp_nt_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_nt_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { parport_nt_write_eppaddr(*bp); if (parport_nt_read_status() & LPTSTAT_EPPTIMEOUT) { pp_nt_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_nt_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = parport_nt_read_eppaddr(); if (parport_nt_read_status() & LPTSTAT_EPPTIMEOUT) { pp_nt_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_nt_emul_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE); for (; sz > 0; sz--, bp++) { parport_nt_write_data(*bp); for (tmo = 0; ; tmo++) { if (parport_nt_read_status() & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_DATASTB); for (tmo = 0; ; tmo++) { if (!(parport_nt_read_status() & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE); ret++; } return ret; } unsigned parport_nt_emul_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (parport_nt_read_status() & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_DATASTB); for (tmo = 0; ; tmo++) { if (!(parport_nt_read_status() & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = parport_nt_read_data(); parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION); ret++; } return ret; } unsigned parport_nt_emul_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE); for (; sz > 0; sz--, bp++) { parport_nt_write_data(*bp); for (tmo = 0; ; tmo++) { if (parport_nt_read_status() & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_ADDRSTB); for (tmo = 0; ; tmo++) { if (!(parport_nt_read_status() & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE); ret++; } return ret; } unsigned parport_nt_emul_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (parport_nt_read_status() & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_ADDRSTB); for (tmo = 0; ; tmo++) { if (!(parport_nt_read_status() & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = parport_nt_read_data(); parport_nt_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION); ret++; } return ret; } /* ---------------------------------------------------------------------- */ static int ecp_forward(void) { unsigned tmo = 0x10000; if (parport_nt_read_status() & 0x20) return 0; /* Event 47: Set nInit high */ parport_nt_write_control(0x26); /* Event 49: PError goes high */ while (!(parport_nt_read_status() & 0x20)) { if (!(--tmo)) return -1; } /* start driving the bus */ parport_nt_write_control(0x04); return 0; } static int ecp_reverse(void) { unsigned tmo = 0x10000; if (!(parport_nt_read_status() & 0x20)) return 0; parport_nt_write_control(0x24); /* Event 39: Set nInit low to initiate bus reversal */ parport_nt_write_control(0x20); while (parport_nt_read_status() & 0x20) { if (!(--tmo)) return -1; } return 0; } static unsigned emptyfifo(unsigned cnt) { unsigned fcnt = 0; parport_nt_write_econtrol(0xd0); /* FIFOtest mode */ while ((parport_nt_read_econtrol() & 0x01) && fcnt < 32 && fcnt < cnt) { parport_nt_read_configa(); fcnt++; } lprintf(10, "emptyfifo: FIFO contained %d bytes\n", fcnt); parport_nt_write_econtrol(0x30); /* PS/2 mode */ return cnt - fcnt; } unsigned parport_nt_ecp_write_data(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; unsigned int i; if (ecp_forward()) return 0; parport_nt_write_econtrol(0x70); /* ECP mode */ while (sz > 0) { while ((stat = parport_nt_read_econtrol()) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { for (i = 0; i < 8; i++) parport_nt_write_configa(bp[i]); bp += 8; sz -= 8; ret += 8; } else { parport_nt_write_configa(*bp++); sz--; ret++; } tmo = 0x10000; } while (!(parport_nt_read_econtrol() & 0x01) || !(parport_nt_read_status() & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } parport_nt_write_econtrol(0x30); /* PS/2 mode */ return ret; } unsigned parport_nt_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; unsigned int i; if (ecp_reverse()) return 0; parport_nt_write_econtrol(0x70); /* ECP mode */ while (sz > 0) { while ((stat = parport_nt_read_econtrol()) & 0x01) if (!(--tmo)) { parport_nt_write_econtrol(0xd0); /* FIFOTEST mode */ while (!(parport_nt_read_econtrol() & 0x01) && sz > 0) { *bp++ = parport_nt_read_configa(); sz--; ret++; } parport_nt_write_econtrol(0x30); /* PS/2 mode */ return ret; } if (stat & 0x02 && sz >= 8) { for (i = 0; i < 8; i++) bp[i] = parport_nt_read_configa(); bp += 8; sz -= 8; ret += 8; } else { *bp++ = parport_nt_read_configa(); sz--; ret++; } tmo = 0x10000; } parport_nt_write_econtrol(0x30); /* PS/2 mode */ return ret; } unsigned parport_nt_ecp_write_addr(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; unsigned int i; if (ecp_forward()) return 0; parport_nt_write_econtrol(0x70); /* ECP mode */ while (sz > 0) { while ((stat = parport_nt_read_econtrol()) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { for (i = 0; i < 8; i++) parport_nt_write_data(bp[i]); bp += 8; sz -= 8; ret += 8; } else { parport_nt_write_data(*bp++); sz--; ret++; } tmo = 0x10000; } while (!(parport_nt_read_econtrol() & 0x01) || !(parport_nt_read_status() & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } parport_nt_write_econtrol(0x30); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_nt_emul_ecp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = parport_nt_read_control() & ~PARPORT_CONTROL_AUTOFD; /* HostAck high (data, not command) */ parport_nt_write_control(ctl); for (ret = 0; ret < sz; ret++, bp++) { parport_nt_write_data(*bp); parport_nt_write_control(ctl | PARPORT_CONTROL_STROBE); for (tmo = 0; parport_nt_read_status() & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; parport_nt_write_control(ctl); for (tmo = 0; !(parport_nt_read_status() & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_nt_emul_ecp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = parport_nt_read_control() | PARPORT_CONTROL_AUTOFD; /* HostAck low (command, not data) */ parport_nt_write_control(ctl); for (ret = 0; ret < sz; ret++, bp++) { parport_nt_write_data(*bp); parport_nt_write_control(ctl | PARPORT_CONTROL_STROBE); for (tmo = 0; parport_nt_read_status() & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; parport_nt_write_control(ctl); for (tmo = 0; !(parport_nt_read_status() & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_nt_emul_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned char ctl, stat; int command; unsigned tmo; if (ecp_reverse()) return 0; ctl = parport_nt_read_control(); /* Set HostAck low to start accepting data. */ parport_nt_write_control(ctl | PARPORT_CONTROL_AUTOFD); while (ret < sz) { /* Event 43: Peripheral sets nAck low. It can take as long as it wants. */ tmo = 0; do { stat = parport_nt_read_status(); if ((++tmo) > 0x10000) goto out; } while (stat & PARPORT_STATUS_ACK); /* Is this a command? */ command = stat & PARPORT_STATUS_BUSY; if (command) { //lprintf(3, "ECP: warning: emulation does not support RLE\n"); goto out; } /* Read the data. */ *bp = parport_nt_read_data(); /* Event 44: Set HostAck high, acknowledging handshake. */ parport_nt_write_control(ctl & ~PARPORT_CONTROL_AUTOFD); /* Event 45: The peripheral has 35ms to set nAck high. */ tmo = 0; do { stat = parport_nt_read_status(); if ((++tmo) > 0x10000) goto out; } while (!(stat & PARPORT_STATUS_ACK)); /* Event 46: Set HostAck low and accept the data. */ parport_nt_write_control(ctl | PARPORT_CONTROL_AUTOFD); /* Normal data byte. */ bp++; ret++; } out: return ret; } /* ---------------------------------------------------------------------- */ #if 1 unsigned parport_nt_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned u; for (u = 0; u < sz; u++, bp++) parport_nt_write_data(*bp); return sz; } #else unsigned parport_nt_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; unsigned int i; if (pp_nt_modes & PARPORT_MODE_PCECR) { parport_nt_write_econtrol(0x50); /* COMPAT FIFO mode */ while (sz > 0) { while ((stat = parport_nt_read_econtrol()) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { for (i = 0; i < 8; i++) parport_nt_write_configa(bp[i]); bp += 8; sz -= 8; ret += 8; } else { parport_nt_write_configa(*bp++); sz--; ret++; } tmo = 0x10000; } while (!(parport_nt_read_econtrol() & 0x01) || !(parport_nt_read_status() & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } parport_nt_write_econtrol(0x30); /* PS/2 mode */ return ret; } for (ret = 0; ret < sz; ret++, bp++) parport_nt_write_data(*bp); return sz; } #endif /* ---------------------------------------------------------------------- */ const struct parport_ops parport_nt_ops = { parport_nt_read_data, parport_nt_write_data, parport_nt_read_status, parport_nt_read_control, parport_nt_write_control, parport_nt_frob_control, parport_nt_epp_write_data, parport_nt_epp_read_data, parport_nt_epp_write_addr, parport_nt_epp_read_addr, parport_nt_ecp_write_data, parport_nt_ecp_read_data, parport_nt_ecp_write_addr, parport_nt_fpgaconfig_write }; const struct parport_ops parport_nt_emul_ops = { parport_nt_read_data, parport_nt_write_data, parport_nt_read_status, parport_nt_read_control, parport_nt_write_control, parport_nt_frob_control, parport_nt_emul_epp_write_data, parport_nt_emul_epp_read_data, parport_nt_emul_epp_write_addr, parport_nt_emul_epp_read_addr, parport_nt_emul_ecp_write_data, parport_nt_emul_ecp_read_data, parport_nt_emul_ecp_write_addr, parport_nt_fpgaconfig_write }; /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/ppntinit.c0100644000175100017510000004557407245777336015403 0ustar abaaba/*****************************************************************************/ /* * ppntinit.c -- Parport direct access with NT eppflex.sys (init routines). * * Copyright (C) 2000-2001 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ #define DEVNAME "\\\\.\\GpdDev" /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ extern HANDLE pp_nt_handle; extern unsigned int pp_nt_flags; extern const struct parport_ops parport_nt_ops, parport_nt_emul_ops; extern unsigned char parport_nt_read_data(void); extern void parport_nt_write_data(unsigned char d); extern unsigned char parport_nt_read_status(void); extern unsigned char parport_nt_read_control(void); extern void parport_nt_write_control(unsigned char d); extern void parport_nt_frob_control(unsigned char mask, unsigned char val); extern unsigned char parport_nt_read_configa(void); extern void parport_nt_write_configa(unsigned char d); extern unsigned char parport_nt_read_configb(void); extern void parport_nt_write_configb(unsigned char d); extern unsigned char parport_nt_read_econtrol(void); extern void parport_nt_write_econtrol(unsigned char d); extern void parport_nt_frob_econtrol(unsigned char mask, unsigned char val); extern unsigned char parport_nt_read_eppaddr(void); extern void parport_nt_write_eppaddr(unsigned char d); extern unsigned char parport_nt_read_eppdata(void); extern void parport_nt_write_eppdata(unsigned char d); extern int pp_nt_epp_clear_timeout(void); #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ static int parport_spp(void) { pp_nt_epp_clear_timeout(); /* prevent lockup of some SMSC IC's */ /* this routine is mostly copied from Linux Kernel parport */ parport_nt_write_econtrol(0xc); parport_nt_write_control(0xc); parport_nt_write_data(0xaa); if (parport_nt_read_data() != 0xaa) return 0; parport_nt_write_data(0x55); if (parport_nt_read_data() != 0x55) return 0; return PARPORT_MODE_PCSPP; } /* Check for ECP * * Old style XT ports alias io ports every 0x400, hence accessing ECR * on these cards actually accesses the CTR. * * Modern cards don't do this but reading from ECR will return 0xff * regardless of what is written here if the card does NOT support * ECP. * * We will write 0x2c to ECR and 0xcc to CTR since both of these * values are "safe" on the CTR since bits 6-7 of CTR are unused. */ static int parport_ecr(void) { unsigned char r = 0xc; parport_nt_write_control(r); if ((parport_nt_read_econtrol() & 0x3) == (r & 0x3)) { parport_nt_write_control(r ^ 0x2); /* Toggle bit 1 */ r = parport_nt_read_control(); if ((parport_nt_read_econtrol() & 0x2) == (r & 0x2)) goto no_reg; /* Sure that no ECR register exists */ } if ((parport_nt_read_econtrol() & 0x3 ) != 0x1) goto no_reg; parport_nt_write_econtrol(0x34); if (parport_nt_read_econtrol() != 0x35) goto no_reg; parport_nt_write_control(0xc); /* Go to mode 000 */ parport_nt_frob_econtrol(0xe0, 0); return PARPORT_MODE_PCECR; no_reg: parport_nt_write_control(0xc); return 0; } static int parport_ecp(void) { int i; int config; int pword; int fifo_depth, writeIntrThreshold, readIntrThreshold; /* Find out FIFO depth */ parport_nt_write_econtrol(0x00); /* Reset FIFO */ parport_nt_write_econtrol(0xc0); /* TEST FIFO */ for (i=0; i < 1024 && !(parport_nt_read_econtrol() & 0x02); i++) parport_nt_write_configa(0xaa); /* * Using LGS chipset it uses ECR register, but * it doesn't support ECP or FIFO MODE */ if (i == 1024) { parport_nt_write_econtrol(0x00); return 0; } fifo_depth = i; lprintf(3, "ECP: FIFO depth is %d bytes\n", fifo_depth); /* Find out writeIntrThreshold */ parport_nt_frob_econtrol((1<<2), (1<<2)); parport_nt_frob_econtrol((1<<2), 0); for (i = 1; i <= fifo_depth; i++) { parport_nt_read_configa(); usleep(50); if (parport_nt_read_econtrol() & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: writeIntrThreshold is %d\n", i); else /* Number of bytes we know we can write if we get an interrupt. */ i = 0; writeIntrThreshold = i; /* Find out readIntrThreshold */ parport_nt_frob_econtrol(0xe0, 0x20); /* Reset FIFO, PS2 */ parport_nt_frob_control(PARPORT_CONTROL_DIRECTION, PARPORT_CONTROL_DIRECTION); parport_nt_frob_econtrol(0xe0, 0xc0); /* Test FIFO */ parport_nt_frob_econtrol((1<<2), (1<<2)); parport_nt_frob_econtrol((1<<2), 0); for (i = 1; i <= fifo_depth; i++) { parport_nt_write_configa(0xaa); if (parport_nt_read_econtrol() & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: readIntrThreshold is %d\n", i); else /* Number of bytes we can read if we get an interrupt. */ i = 0; readIntrThreshold = i; parport_nt_write_econtrol(0x00); /* Reset FIFO */ parport_nt_write_econtrol(0xf4); /* Configuration mode */ config = parport_nt_read_configa(); pword = (config >> 4) & 0x7; switch (pword) { case 0: pword = 2; lprintf(0, "ECP: Unsupported pword size! (2)\n"); break; case 2: pword = 4; lprintf(0, "ECP: Unsupported pword size! (4)\n"); break; default: lprintf(0, "ECP: Unknown implementation ID (%d)\n", pword); /* Assume 1 */ case 1: pword = 1; } lprintf(3, "ECP: PWord is %d bits\n", 8 * pword); config = parport_nt_read_configb(); lprintf(3, "ECP: Interrupts are ISA-%s\n", config & 0x80 ? "Level" : "Pulses"); if (!(config & 0x40)) lprintf(3, "ECP: IRQ conflict!\n"); /* Go back to mode 000 */ parport_nt_frob_econtrol(0xe0, 0); return PARPORT_MODE_PCECP; } /* EPP mode detection */ static int parport_epp(void) { /* If EPP timeout bit clear then EPP available */ if (!pp_nt_epp_clear_timeout()) return 0; /* No way to clear timeout */ /* * Theory: * Write two values to the EPP address register and * read them back. When the transfer times out, the state of * the EPP register is undefined in some cases (EPP 1.9?) but * in others (EPP 1.7, ECPEPP?) it is possible to read back * its value. */ pp_nt_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ parport_nt_write_eppaddr(0x55); pp_nt_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (parport_nt_read_eppaddr() == 0x55) { parport_nt_write_eppaddr(0xaa); pp_nt_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (parport_nt_read_eppaddr() == 0xaa) { pp_nt_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } } /* * Theory: * Bit 0 of STR is the EPP timeout bit, this bit is 0 * when EPP is possible and is set high when an EPP timeout * occurs (EPP uses the HALT line to stop the CPU while it does * the byte transfer, an EPP timeout occurs if the attached * device fails to respond after 10 micro seconds). * * This bit is cleared by either reading it (National Semi) * or writing a 1 to the bit (SMC, UMC, WinBond), others ??? * This bit is always high in non EPP modes. */ parport_nt_frob_control(0x20, 0x20); parport_nt_frob_control(0x10, 0x10); pp_nt_epp_clear_timeout(); parport_nt_read_eppdata(); usleep(30); /* Wait for possible EPP timeout */ if (parport_nt_read_status() & 0x01) { pp_nt_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } return 0; } static int parport_ecpepp(void) { int mode; unsigned char oecr; oecr = parport_nt_read_econtrol(); /* Search for SMC style EPP+ECP mode */ parport_nt_write_econtrol(0x80); mode = parport_epp(); parport_nt_write_econtrol(oecr); return mode ? PARPORT_MODE_PCECPEPP : 0; } /* Detect PS/2 support. * * Bit 5 (0x20) sets the PS/2 data direction; setting this high * allows us to read data from the data lines. In theory we would get back * 0xff but any peripheral attached to the port may drag some or all of the * lines down to zero. So if we get back anything that isn't the contents * of the data register we deem PS/2 support to be present. * * Some SPP ports have "half PS/2" ability - you can't turn off the line * drivers, but an external peripheral with sufficiently beefy drivers of * its own can overpower them and assert its own levels onto the bus, from * where they can then be read back as normal. Ports with this property * and the right type of device attached are likely to fail the SPP test, * (as they will appear to have stuck bits) and so the fact that they might * be misdetected here is rather academic. */ static int parport_ps2(void) { int ok = 0; unsigned char octr = parport_nt_read_control(); pp_nt_epp_clear_timeout(); parport_nt_write_control(octr | 0x20); /* try to tri-state the buffer */ parport_nt_write_data(0x55); if (parport_nt_read_data() != 0x55) ok++; parport_nt_write_data(0xaa); if (parport_nt_read_data() != 0xaa) ok++; parport_nt_write_control(octr); /* cancel input mode */ return ok ? PARPORT_MODE_PCPS2 : 0; } static int parport_ecpps2(void) { int mode; unsigned char oecr; oecr = parport_nt_read_econtrol(); parport_nt_write_econtrol(0x20); mode = parport_ps2(); parport_nt_write_econtrol(oecr); return mode ? PARPORT_MODE_PCECPPS2 : 0; } /* ---------------------------------------------------------------------- */ #define SERVICENAME "eppflex" #define SERVICEDISPLAYNAME "Baycom EPPFLEX" //#define SERVICEBINARY "\"\\??\\g:\\nteppflex\\eppflex.sys\"" #define SERVICEBINARY "System32\\drivers\\eppflex.sys" static int start_service(void) { int ret = -1; SC_HANDLE hscm, hserv; hscm = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if (!hscm) { lprintf(5, "Cannot open SC manager, error 0x%08lx\n", GetLastError()); return -1; } hserv = CreateService(hscm, SERVICENAME, SERVICEDISPLAYNAME, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, SERVICEBINARY, NULL, NULL, NULL, NULL, NULL); if (!hserv) { lprintf(5, "Cannot create service, error 0x%08lx\n", GetLastError()); hserv = OpenService(hscm, SERVICENAME, SERVICE_ALL_ACCESS); if (!hserv) { lprintf(5, "Cannot open service, error 0x%08lx\n", GetLastError()); goto closescm; } } if (!StartService(hserv, 0, NULL)) { lprintf(5, "Cannot start service, error 0x%08lx\n", GetLastError()); goto closeserv; } lprintf(1, "Service %s started successfully\n", SERVICENAME); ret = 0; closeserv: if (!CloseServiceHandle(hserv)) lprintf(5, "Cannot close service handle, error 0x%08lx\n", GetLastError()); closescm: if (!CloseServiceHandle(hscm)) lprintf(5, "Cannot close service manager handle, error 0x%08lx\n", GetLastError()); return ret; } static int stop_service(void) { int ret = -1; SC_HANDLE hscm, hserv; SERVICE_STATUS sstat; hscm = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if (!hscm) { lprintf(5, "Cannot open SC manager, error 0x%08lx\n", GetLastError()); return -1; } hserv = OpenService(hscm, SERVICENAME, SERVICE_ALL_ACCESS); if (!hserv) { lprintf(5, "Cannot open service, error 0x%08lx\n", GetLastError()); goto closescm; } ret = 0; if (!ControlService(hserv, SERVICE_CONTROL_STOP, &sstat)) { lprintf(5, "Cannot delete service, error 0x%08lx\n", GetLastError()); ret = -1; } if (!DeleteService(hserv)) { lprintf(5, "Cannot delete service, error 0x%08lx\n", GetLastError()); ret = -1; } if (!ret) lprintf(1, "Service %s stopped successfully\n", SERVICENAME); if (!CloseServiceHandle(hserv)) lprintf(5, "Cannot close service handle, error 0x%08lx\n", GetLastError()); closescm: if (!CloseServiceHandle(hscm)) lprintf(5, "Cannot close service manager handle, error 0x%08lx\n", GetLastError()); return ret; } /* ---------------------------------------------------------------------- */ void parport_stop_nt(void) { if (pp_nt_handle != INVALID_HANDLE_VALUE) CloseHandle(pp_nt_handle); pp_nt_handle = INVALID_HANDLE_VALUE; stop_service(); } /* ---------------------------------------------------------------------- */ int parport_init_nt_flags(unsigned int portnr, unsigned int flags) { char buf[32]; if (pp_nt_handle != INVALID_HANDLE_VALUE) CloseHandle(pp_nt_handle); start_service(); snprintf(buf, sizeof(buf), "\\\\.\\eppflex\\%u", portnr); pp_nt_handle = CreateFile(buf, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (pp_nt_handle == INVALID_HANDLE_VALUE) { lprintf(0, "Cannot open eppflex.sys driver, error 0x%08lx\n", GetLastError()); goto err; } pp_nt_flags = FLAGS_PCSPP; if (!parport_spp()) { lprintf(0, "No parport present\n"); goto err; } if (parport_ecr()) { pp_nt_flags |= FLAGS_PCECR; pp_nt_flags |= parport_ecp(); pp_nt_flags |= parport_ecpps2(); pp_nt_flags |= parport_ecpepp(); if ((flags & PPFLAG_FORCEHWEPP) && (pp_nt_flags & (FLAGS_PCPS2|FLAGS_PCECPPS2)) && !(pp_nt_flags & (FLAGS_PCEPP|FLAGS_PCECPEPP))) pp_nt_flags |= FLAGS_PCECPEPP; else flags &= ~PPFLAG_FORCEHWEPP; } else { pp_nt_flags |= parport_ps2(); pp_nt_flags |= parport_epp(); if ((flags & PPFLAG_FORCEHWEPP) && (pp_nt_flags & (FLAGS_PCPS2|FLAGS_PCECPPS2)) && !(pp_nt_flags & (FLAGS_PCEPP|FLAGS_PCECPEPP))) pp_nt_flags |= FLAGS_PCEPP; else flags &= ~PPFLAG_FORCEHWEPP; } lprintf(0, "Parport capabilities: SPP%s%s%s%s%s%s\n", (pp_nt_flags & FLAGS_PCPS2) ? ", PS2" : "", (pp_nt_flags & FLAGS_PCEPP) ? ((flags & PPFLAG_FORCEHWEPP) ? ", EPP (forced)" : ", EPP") : "", (pp_nt_flags & FLAGS_PCECR) ? ", ECR" : "", (pp_nt_flags & FLAGS_PCECP) ? ", ECP" : "", (pp_nt_flags & FLAGS_PCECPEPP) ? ((flags & PPFLAG_FORCEHWEPP) ? ", ECPEPP (forced)" : ", ECPEPP") : "", (pp_nt_flags & FLAGS_PCECPPS2) ? ", ECPPS2" : ""); if (!(pp_nt_flags & (FLAGS_PCPS2 | FLAGS_PCECPPS2))) { lprintf(0, "Parport does not even support PS/2 mode, cannot use it\n"); goto err; } lprintf(0, "Parport using NT eppflex.sys hardware access"); if (pp_nt_flags & FLAGS_PCECR) parport_nt_write_econtrol(0x30); /* PS/2 mode */ parport_ops = parport_nt_ops; if ((flags & PPFLAG_SWEMULECP) || !(pp_nt_flags & FLAGS_PCECP)) { parport_ops.parport_ecp_write_data = parport_nt_emul_ops.parport_ecp_write_data; parport_ops.parport_ecp_read_data = parport_nt_emul_ops.parport_ecp_read_data; parport_ops.parport_ecp_write_addr = parport_nt_emul_ops.parport_ecp_write_addr; lprintf(0, ", emulating ECP"); } if ((flags & PPFLAG_SWEMULEPP) || !(pp_nt_flags & (FLAGS_PCEPP | FLAGS_PCECPEPP))) { parport_ops.parport_epp_write_data = parport_nt_emul_ops.parport_epp_write_data; parport_ops.parport_epp_read_data = parport_nt_emul_ops.parport_epp_read_data; parport_ops.parport_epp_write_addr = parport_nt_emul_ops.parport_epp_write_addr; parport_ops.parport_epp_read_addr = parport_nt_emul_ops.parport_epp_read_addr; lprintf(0, ", emulating EPP"); } lprintf(0, "\n"); return 0; err: parport_stop_nt(); return -1; } int parport_init_nt(unsigned int portnr) { return parport_init_nt_flags(portnr, 0); } baycomepp-0.10.orig/main/ppw9xring0.c0100644000175100017510000005567107144107267015550 0ustar abaaba/*****************************************************************************/ /* * ppw9xring0.c -- Parport direct access under Win9x using Ring0 hack. * * Copyright (C) 1998-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ unsigned int pp_w9xring0_iobase = 0x378; unsigned int pp_w9xring0_flags = 0; #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ asm(".text\n\t" ".align\t4\n" "_do_ring0_inb:\n\t" "inb %dx,%al\n\t" "lret\n\n\t" ".align\t4\n" "_do_ring0_outb:\n\t" "outb %al,%dx\n\t" "lret\n\n\t" ".align\t4\n\t" ".data\n\t"); extern int do_ring0_inb(int,int); extern int do_ring0_outb(int,int); static int call_ring0(int (*routine)(int,int), int param1, int param2) { unsigned short gdtbase[3]; unsigned short callgateaddr[3]; struct gdt { unsigned short offslo; unsigned short selector; unsigned short flags; unsigned short offshi; } *gdt, *mygdt; unsigned int i, maxgdt; int ret; asm("sgdt\t%0" : "=m" (gdtbase)); gdt = (struct gdt *)((gdtbase[2] << 16) | gdtbase[1]); maxgdt = gdtbase[0]/8; /* gdt limit */ for (i = 1; i < maxgdt; i++) { if (!gdt[i].flags && !gdt[i].selector && !gdt[i].offslo && !gdt[i].offshi) break; } if (i >= maxgdt) { lprintf(3, "Cannot find free GDT entry\n"); return -1; } mygdt = &gdt[i]; mygdt->flags = (1 << 15) | /* present */ (0x0c00) | /* type: call gate */ (3 << 13) | /* DPL */ 0; /* dword count */ mygdt->selector = 0x28; mygdt->offslo = ((unsigned long)routine); mygdt->offshi = ((unsigned long)routine) >> 16; callgateaddr[0] = callgateaddr[1] = 0; callgateaddr[2] = (i << 3) | 3; asm("lcall\t%1" : "=a" (ret) : "m" (callgateaddr[0]), "d" (param1), "0" (param2) : "memory"); memset(mygdt, 0, sizeof(struct gdt)); return ret; } unsigned char ring0_inb(unsigned int port) { return call_ring0(do_ring0_inb, port, 0); } void ring0_outb(unsigned char val, unsigned int port) { call_ring0(do_ring0_outb, port, val); } void ring0_outsb(unsigned int port, const unsigned char *bp, unsigned int count) { while (count > 0) { ring0_outb(*bp++, port); count--; } } void ring0_insb(unsigned int port, unsigned char *bp, unsigned int count) { while (count > 0) { *bp++ = ring0_inb(port); count--; } } /* ---------------------------------------------------------------------- */ extern inline void setecr(unsigned char ecr) { if (pp_w9xring0_flags & FLAGS_PCECR) ring0_outb(ecr, pp_w9xring0_iobase + LPTREG_ECONTROL); } int pp_w9xring0_epp_clear_timeout(void) { unsigned char r; if (!(ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT)) return 1; /* To clear timeout some chips require double read */ ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS); r = ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS); ring0_outb(r | 0x01, pp_w9xring0_iobase + LPTREG_STATUS); /* Some reset by writing 1 */ ring0_outb(r & 0xfe, pp_w9xring0_iobase + LPTREG_STATUS); /* Others by writing 0 */ r = ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS); return !(r & 0x01); } /* ---------------------------------------------------------------------- */ unsigned char parport_w9xring0_read_data(void) { return ring0_inb(pp_w9xring0_iobase + LPTREG_DATA); } void parport_w9xring0_write_data(unsigned char d) { ring0_outb(d, pp_w9xring0_iobase + LPTREG_DATA); } unsigned char parport_w9xring0_read_status(void) { return ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS); } unsigned char parport_w9xring0_read_control(void) { return ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL); } void parport_w9xring0_write_control(unsigned char d) { ring0_outb(d, pp_w9xring0_iobase + LPTREG_CONTROL); } void parport_w9xring0_frob_control(unsigned char mask, unsigned char val) { unsigned char d = ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL); d = (d & (~mask)) ^ val; ring0_outb(d, pp_w9xring0_iobase + LPTREG_CONTROL); } /* ---------------------------------------------------------------------- */ unsigned parport_w9xring0_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { ring0_outb(*bp, pp_w9xring0_iobase + LPTREG_EPPDATA); if (ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_w9xring0_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_w9xring0_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = ring0_inb(pp_w9xring0_iobase + LPTREG_EPPDATA); if (ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_w9xring0_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_w9xring0_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { ring0_outb(*bp, pp_w9xring0_iobase + LPTREG_EPPADDR); if (ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_w9xring0_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_w9xring0_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = ring0_inb(pp_w9xring0_iobase + LPTREG_EPPADDR); if (ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { pp_w9xring0_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_w9xring0_emul_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, pp_w9xring0_iobase + LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { ring0_outb(*bp, pp_w9xring0_iobase + LPTREG_DATA); for (tmo = 0; ; tmo++) { if (ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_DATASTB, pp_w9xring0_iobase + LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, pp_w9xring0_iobase + LPTREG_CONTROL); ret++; } return ret; } unsigned parport_w9xring0_emul_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, pp_w9xring0_iobase + LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_DATASTB, pp_w9xring0_iobase + LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = ring0_inb(pp_w9xring0_iobase + LPTREG_DATA); ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, pp_w9xring0_iobase + LPTREG_CONTROL); ret++; } return ret; } unsigned parport_w9xring0_emul_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, pp_w9xring0_iobase + LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { ring0_outb(*bp, pp_w9xring0_iobase + LPTREG_DATA); for (tmo = 0; ; tmo++) { if (ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_ADDRSTB, pp_w9xring0_iobase + LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_WRITE, pp_w9xring0_iobase + LPTREG_CONTROL); ret++; } return ret; } unsigned parport_w9xring0_emul_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, pp_w9xring0_iobase + LPTREG_CONTROL); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_ADDRSTB, pp_w9xring0_iobase + LPTREG_CONTROL); for (tmo = 0; ; tmo++) { if (!(ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = ring0_inb(pp_w9xring0_iobase + LPTREG_DATA); ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION, pp_w9xring0_iobase + LPTREG_CONTROL); ret++; } return ret; } /* ---------------------------------------------------------------------- */ static int ecp_forward(void) { unsigned tmo = 0x10000; if (ring0_inb(pp_w9xring0_iobase + LPTREG_DSR) & 0x20) return 0; /* Event 47: Set nInit high */ ring0_outb(0x26, pp_w9xring0_iobase + LPTREG_DCR); /* Event 49: PError goes high */ while (!(ring0_inb(pp_w9xring0_iobase + LPTREG_DSR) & 0x20)) { if (!(--tmo)) return -1; } /* start driving the bus */ ring0_outb(0x04, pp_w9xring0_iobase + LPTREG_DCR); return 0; } static int ecp_reverse(void) { unsigned tmo = 0x10000; if (!(ring0_inb(pp_w9xring0_iobase + LPTREG_DSR) & 0x20)) return 0; ring0_outb(0x24, pp_w9xring0_iobase + LPTREG_DCR); /* Event 39: Set nInit low to initiate bus reversal */ ring0_outb(0x20, pp_w9xring0_iobase + LPTREG_DCR); while (ring0_inb(pp_w9xring0_iobase + LPTREG_DSR) & 0x20) { if (!(--tmo)) return -1; } return 0; } static unsigned emptyfifo(unsigned cnt) { unsigned fcnt = 0; ring0_outb(0xd0, pp_w9xring0_iobase + LPTREG_ECONTROL); /* FIFOtest mode */ while ((ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & 0x01) && fcnt < 32 && fcnt < cnt) { ring0_inb(pp_w9xring0_iobase + LPTREG_TFIFO); fcnt++; } printf("emptyfifo: FIFO contained %d bytes\n", fcnt); ring0_outb(0x30, pp_w9xring0_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return cnt - fcnt; } unsigned parport_w9xring0_ecp_write_data(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (ecp_forward()) return 0; ring0_outb(0x70, pp_w9xring0_iobase + LPTREG_ECONTROL); /* ECP mode */ while (sz > 0) { while ((stat = ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL)) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { ring0_outsb(pp_w9xring0_iobase + LPTREG_DFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { ring0_outb(*bp++, pp_w9xring0_iobase + LPTREG_DFIFO); sz--; ret++; } tmo = 0x10000; } while (!(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & 0x01) || !(ring0_inb(pp_w9xring0_iobase + LPTREG_DSR) & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } ring0_outb(0x30, pp_w9xring0_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } unsigned parport_w9xring0_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (ecp_reverse()) return 0; ring0_outb(0x70, pp_w9xring0_iobase + LPTREG_ECONTROL); /* ECP mode */ while (sz > 0) { while ((stat = ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL)) & 0x01) if (!(--tmo)) { ring0_outb(0xd0, pp_w9xring0_iobase + LPTREG_ECONTROL); /* FIFOTEST mode */ while (!(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & 0x01) && sz > 0) { *bp++ = ring0_inb(pp_w9xring0_iobase + LPTREG_TFIFO); sz--; ret++; } ring0_outb(0x30, pp_w9xring0_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } if (stat & 0x02 && sz >= 8) { ring0_insb(pp_w9xring0_iobase + LPTREG_DFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { *bp++ = ring0_inb(pp_w9xring0_iobase + LPTREG_DFIFO); sz--; ret++; } tmo = 0x10000; } ring0_outb(0x30, pp_w9xring0_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } unsigned parport_w9xring0_ecp_write_addr(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (ecp_forward()) return 0; ring0_outb(0x70, pp_w9xring0_iobase + LPTREG_ECONTROL); /* ECP mode */ while (sz > 0) { while ((stat = ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL)) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { ring0_outsb(pp_w9xring0_iobase + LPTREG_AFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { ring0_outb(*bp++, pp_w9xring0_iobase + LPTREG_AFIFO); sz--; ret++; } tmo = 0x10000; } while (!(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & 0x01) || !(ring0_inb(pp_w9xring0_iobase + LPTREG_DSR) & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } ring0_outb(0x30, pp_w9xring0_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_w9xring0_emul_ecp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL) & ~PARPORT_CONTROL_AUTOFD; /* HostAck high (data, not command) */ ring0_outb(ctl, pp_w9xring0_iobase + LPTREG_CONTROL); for (ret = 0; ret < sz; ret++, bp++) { ring0_outb(*bp, pp_w9xring0_iobase + LPTREG_DATA); ring0_outb(ctl | PARPORT_CONTROL_STROBE, pp_w9xring0_iobase + LPTREG_CONTROL); for (tmo = 0; ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; ring0_outb(ctl, pp_w9xring0_iobase + LPTREG_CONTROL); for (tmo = 0; !(ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_w9xring0_emul_ecp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL) | PARPORT_CONTROL_AUTOFD; /* HostAck low (command, not data) */ ring0_outb(ctl, pp_w9xring0_iobase + LPTREG_CONTROL); for (ret = 0; ret < sz; ret++, bp++) { ring0_outb(*bp, pp_w9xring0_iobase + LPTREG_DATA); ring0_outb(ctl | PARPORT_CONTROL_STROBE, pp_w9xring0_iobase + LPTREG_CONTROL); for (tmo = 0; ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; ring0_outb(ctl, pp_w9xring0_iobase + LPTREG_CONTROL); for (tmo = 0; !(ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_w9xring0_emul_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned char ctl, stat; int command; unsigned tmo; if (ecp_reverse()) return 0; ctl = ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL); /* Set HostAck low to start accepting data. */ ring0_outb(ctl | PARPORT_CONTROL_AUTOFD, pp_w9xring0_iobase + LPTREG_CONTROL); while (ret < sz) { /* Event 43: Peripheral sets nAck low. It can take as long as it wants. */ tmo = 0; do { stat = ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS); if ((++tmo) > 0x10000) goto out; } while (stat & PARPORT_STATUS_ACK); /* Is this a command? */ command = stat & PARPORT_STATUS_BUSY; if (command) { //lprintf(3, "ECP: warning: emulation does not support RLE\n"); goto out; } /* Read the data. */ *bp = ring0_inb(pp_w9xring0_iobase + LPTREG_DATA); /* Event 44: Set HostAck high, acknowledging handshake. */ ring0_outb(ctl & ~PARPORT_CONTROL_AUTOFD, pp_w9xring0_iobase + LPTREG_CONTROL); /* Event 45: The peripheral has 35ms to set nAck high. */ tmo = 0; do { stat = ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS); if ((++tmo) > 0x10000) goto out; } while (!(stat & PARPORT_STATUS_ACK)); /* Event 46: Set HostAck low and accept the data. */ ring0_outb(ctl | PARPORT_CONTROL_AUTOFD, pp_w9xring0_iobase + LPTREG_CONTROL); /* Normal data byte. */ bp++; ret++; } out: return ret; } /* ---------------------------------------------------------------------- */ #if 1 unsigned parport_w9xring0_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned u; for (u = 0; u < sz; u++, bp++) ring0_outb(*bp, pp_w9xring0_iobase + LPTREG_DATA); return sz; } #else unsigned parport_w9xring0_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; if (pp_w9xring0_modes & PARPORT_MODE_PCECR) { ring0_outb(0x50, pp_w9xring0_iobase + LPTREG_ECONTROL); /* COMPAT FIFO mode */ while (sz > 0) { while ((stat = ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL)) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { ring0_outsb(pp_w9xring0_iobase + LPTREG_DFIFO, bp, 8); bp += 8; sz -= 8; ret += 8; } else { ring0_outb(*bp++, pp_w9xring0_iobase + LPTREG_DFIFO); sz--; ret++; } tmo = 0x10000; } while (!(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & 0x01) || !(ring0_inb(pp_w9xring0_iobase + LPTREG_DSR) & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } ring0_outb(0x30, pp_w9xring0_iobase + LPTREG_ECONTROL); /* PS/2 mode */ return ret; } for (ret = 0; ret < sz; ret++, bp++) ring0_outb(*bp, pp_w9xring0_iobase + LPTREG_DATA); return sz; } #endif /* ---------------------------------------------------------------------- */ const struct parport_ops parport_w9xring0_ops = { parport_w9xring0_read_data, parport_w9xring0_write_data, parport_w9xring0_read_status, parport_w9xring0_read_control, parport_w9xring0_write_control, parport_w9xring0_frob_control, parport_w9xring0_epp_write_data, parport_w9xring0_epp_read_data, parport_w9xring0_epp_write_addr, parport_w9xring0_epp_read_addr, parport_w9xring0_ecp_write_data, parport_w9xring0_ecp_read_data, parport_w9xring0_ecp_write_addr, parport_w9xring0_fpgaconfig_write }; const struct parport_ops parport_w9xring0_emul_ops = { parport_w9xring0_read_data, parport_w9xring0_write_data, parport_w9xring0_read_status, parport_w9xring0_read_control, parport_w9xring0_write_control, parport_w9xring0_frob_control, parport_w9xring0_emul_epp_write_data, parport_w9xring0_emul_epp_read_data, parport_w9xring0_emul_epp_write_addr, parport_w9xring0_emul_epp_read_addr, parport_w9xring0_emul_ecp_write_data, parport_w9xring0_emul_ecp_read_data, parport_w9xring0_emul_ecp_write_addr, parport_w9xring0_fpgaconfig_write }; /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/ppw9xring0init.c0100644000175100017510000005616007143550024016416 0ustar abaaba/*****************************************************************************/ /* * ppw9xring0init.c -- Parport direct access under Win9x using Ring0 hack (init routines). * * Copyright (C) 1998-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #if defined(HAVE_SYS_IO_H) #include #elif defined(HAVE_ASM_IO_H) #include #endif #include #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ #ifndef HAVE_IOPL #ifdef HAVE_WINDOWS_H #include extern inline int iopl(unsigned int level) { OSVERSIONINFO info; info.dwOSVersionInfoSize = sizeof(info); if (GetVersionEx(&info) && (info.dwPlatformId == VER_PLATFORM_WIN32s || info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)) return 0; return 1; } #else extern inline int iopl(unsigned int level) { return 0; } #endif #endif /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ extern unsigned int pp_w9xring0_iobase; extern unsigned int pp_w9xring0_flags; extern const struct parport_ops parport_w9xring0_ops, parport_w9xring0_emul_ops; extern unsigned char ring0_inb(unsigned int port); extern void ring0_outb(unsigned char val, unsigned int port); extern void ring0_outsb(unsigned int port, const unsigned char *bp, unsigned int count); extern void ring0_insb(unsigned int port, unsigned char *bp, unsigned int count); extern int pp_w9xring0_epp_clear_timeout(void); #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ #if 0 #ifndef EPPEMUL static int detect_epp(void) { /* pulse PROGRAM low, reset FPGA just to be safe */ ring0_outb(LPTCTRL_ADDRSTB, iobase+LPTREG_CONTROL); usleep(10); ring0_outb(LPTCTRL_PROGRAM, iobase+LPTREG_CONTROL); /* start of ordinary test */ if (!epp_clear_timeout()) return -1; ring0_outb(ring0_inb(iobase + LPTREG_CONTROL) | 0x20, iobase + LPTREG_CONTROL); ring0_outb(ring0_inb(iobase + LPTREG_CONTROL) | 0x10, iobase + LPTREG_CONTROL); epp_clear_timeout(); ring0_inb(iobase + LPTREG_EPPDATA); /* udelay(30); */ if (ring0_inb(iobase + LPTREG_STATUS) & LPTSTAT_EPPTIMEOUT) { epp_clear_timeout(); return 0; } /*return -1;*/ lprintf(3, "warning: no EPP timeout\n"); return 0; } #endif /* !EPPEMUL */ static int detect_ecr(void) { unsigned char r, oc, oec; oec = ring0_inb(iobase + LPTREG_ECONTROL); oc = ring0_inb(iobase + LPTREG_CONTROL); if ((oc & 3) == (oec & 3)) { ring0_outb(oc ^ 2, iobase + LPTREG_CONTROL); r = ring0_inb(iobase + LPTREG_CONTROL); if ((ring0_inb(iobase + LPTREG_ECONTROL) & 2) == (r & 2)) { ring0_outb(oc, iobase + LPTREG_CONTROL); return -1; } } if ((oec & 3) != 1) return -1; ring0_outb(0x34, iobase + LPTREG_ECONTROL); r = ring0_inb(iobase + LPTREG_ECONTROL); ring0_outb(oc, iobase + LPTREG_CONTROL); ring0_outb(oec, iobase + LPTREG_ECONTROL); return -(r != 0x35); } int detect_port(void) { ring0_outb(LPTCTRL_ADDRSTB, iobase+LPTREG_CONTROL); pp_w9xring0_epp_clear_timeout(); /* prevent lockup of some SMSC IC's */ /* this routine is mostly copied from Linux Kernel parport */ ring0_outb(0xc, iobase+LPTREG_ECONTROL); ring0_outb(0xc, iobase+LPTREG_CONTROL); ring0_outb(0xaa, iobase+LPTREG_DATA); if (ring0_inb(iobase+LPTREG_DATA) != 0xaa) goto fail_spp; ring0_outb(0x55, iobase+LPTREG_DATA); if (ring0_inb(iobase+LPTREG_DATA) != 0x55) goto fail_spp; #ifdef EPPEMUL /* tentatively enable PS/2 mode if ECP port */ ring0_outb(0x20, iobase + LPTREG_ECONTROL); ring0_outb(LPTCTRL_PROGRAM, iobase+LPTREG_CONTROL); if ((ring0_inb(iobase+LPTREG_CONTROL) & 0x3f) != LPTCTRL_PROGRAM) goto fail_ps2; ring0_outb(LPTCTRL_PROGRAM | LPTCTRL_W9XRING0ION, iobase+LPTREG_CONTROL); if ((ring0_inb(iobase+LPTREG_CONTROL) & 0x3f) != (LPTCTRL_PROGRAM | LPTCTRL_W9XRING0ION)) goto fail_ps2; return 0; fail_ps2: lprintf(3, "parport (PS/2 bidir) test failed\n"); return -1; #else /* !EPPEMUL */ if (!detect_ecr()) { ring0_outb(0x80, iobase + LPTREG_ECONTROL); lprintf(3, "parport SMSC style ECP+EPP detected\n"); return 0; } if (!detect_epp()) return 0; /* goto fail_epp; */ fail_epp: lprintf(3, "parport (EPP) test failed\n"); return -1; #endif /* !EPPEMUL */ fail_spp: lprintf(3, "parport (SPP) test failed\n"); return -1; } /* ---------------------------------------------------------------------- */ /* * ECP routines */ static void ecp_port_cap(void) { static const char *pwordstr[8] = { "2 bytes", "1 byte", "4 bytes", "3?", "4?", "5?", "6?", "7?" }; static const char *irqstr[8] = { "jumpered", "7", "9", "10", "11", "14", "15", "5" }; static const char *dmastr[8] = { "jumpered 8bit", "1", "2", "3", "jumpered 16bit", "5", "6", "7" }; unsigned char cnfga, cnfgb; unsigned int cnt, fwcnt, wthr = ~0, frcnt, rthr = ~0; ring0_outb(0x30, iobase + LPTREG_ECONTROL); /* PS/2 mode */ ring0_outb(0xf0, iobase + LPTREG_ECONTROL); /* config mode */ cnfga = ring0_inb(iobase + LPTREG_CONFIGA); cnfgb = ring0_inb(iobase + LPTREG_CONFIGB); ring0_outb(cnfgb & 0x7f, iobase + LPTREG_CONFIGB); /* disable compression */ ring0_outb(0x30, iobase + LPTREG_ECONTROL); /* PS/2 mode */ ring0_outb(0x04, iobase + LPTREG_DCR); /* w9xring0ion=output */ ring0_outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode */ for (cnt = 0; cnt < 1024 && !(ring0_inb(iobase + LPTREG_ECONTROL) & 0x02); cnt++) ring0_outb(0, iobase + LPTREG_TFIFO); ring0_outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode, clear serviceintr */ for (fwcnt = 0; fwcnt < 1024 && !(ring0_inb(iobase + LPTREG_ECONTROL) & 0x01); fwcnt++) { ring0_inb(iobase + LPTREG_TFIFO); if (ring0_inb(iobase + LPTREG_ECONTROL) & 0x04) { wthr = fwcnt; ring0_outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode, clear serviceintr */ } } ring0_outb(0x24, iobase + LPTREG_DCR); /* w9xring0ion=input */ ring0_outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode */ for (cnt = 0; cnt < 1024 && !(ring0_inb(iobase + LPTREG_ECONTROL) & 0x02); cnt++) ring0_outb(0, iobase + LPTREG_TFIFO); ring0_outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode, clear serviceintr */ for (frcnt = 0; frcnt < 1024 && !(ring0_inb(iobase + LPTREG_ECONTROL) & 0x01); frcnt++) { ring0_inb(iobase + LPTREG_TFIFO); if (ring0_inb(iobase + LPTREG_ECONTROL) & 0x04) { rthr = frcnt; ring0_outb(0xd0, iobase + LPTREG_ECONTROL); /* test mode, clear serviceintr */ } } ring0_outb(0x30, iobase + LPTREG_ECONTROL); /* PS/2 mode */ ring0_outb(0x04, iobase + LPTREG_DCR); /* w9xring0ion=output */ lprintf(3, "ECP capabilities: %s int, PWord %s, %sextra tx pipe, IRQ %s, DMA %s\n" "Tx: FIFO size %d threshold %d Rx: FIFO size %d threshold %d\n", (cnfga & 0x80) ? "level" : "edge", pwordstr[(cnfga >> 4) & 7], (cnfga & 0x04) ? "no" : "", irqstr[(cnfgb >> 3) & 7], dmastr[cnfgb & 7], fwcnt, wthr, frcnt, rthr); } int detect_port_ecp(void) { epp_clear_timeout(); /* prevent lockup of some SMSC IC's */ /* this routine is mostly copied from Linux Kernel parport */ ring0_outb(0xc, iobase+LPTREG_ECONTROL); ring0_outb(0xc, iobase+LPTREG_CONTROL); ring0_outb(0xaa, iobase+LPTREG_DATA); if (ring0_inb(iobase+LPTREG_DATA) != 0xaa) goto fail_spp; ring0_outb(0x55, iobase+LPTREG_DATA); if (ring0_inb(iobase+LPTREG_DATA) != 0x55) goto fail_spp; /* check for ECP ECR mode */ if (detect_ecr()) goto fail_ecp; ecp_port_cap(); return 0; fail_ecp: lprintf(0, "parport (ECP) test failed\n"); return -1; fail_spp: lprintf(0, "parport (SPP) test failed\n"); return -1; } #endif /* ---------------------------------------------------------------------- */ static int parport_spp(void) { pp_w9xring0_epp_clear_timeout(); /* prevent lockup of some SMSC IC's */ /* this routine is mostly copied from Linux Kernel parport */ ring0_outb(0xc, pp_w9xring0_iobase+LPTREG_ECONTROL); ring0_outb(0xc, pp_w9xring0_iobase+LPTREG_CONTROL); ring0_outb(0xaa, pp_w9xring0_iobase+LPTREG_DATA); if (ring0_inb(pp_w9xring0_iobase+LPTREG_DATA) != 0xaa) return 0; ring0_outb(0x55, pp_w9xring0_iobase+LPTREG_DATA); if (ring0_inb(pp_w9xring0_iobase+LPTREG_DATA) != 0x55) return 0; return PARPORT_MODE_PCSPP; } /* Check for ECP * * Old style XT ports alias io ports every 0x400, hence accessing ECR * on these cards actually accesses the CTR. * * Modern cards don't do this but reading from ECR will return 0xff * regardless of what is written here if the card does NOT support * ECP. * * We will write 0x2c to ECR and 0xcc to CTR since both of these * values are "safe" on the CTR since bits 6-7 of CTR are unused. */ static int parport_ecr(void) { unsigned char r = 0xc; ring0_outb(r, pp_w9xring0_iobase + LPTREG_CONTROL); if ((ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & 0x3) == (r & 0x3)) { ring0_outb(r ^ 0x2, pp_w9xring0_iobase + LPTREG_CONTROL); /* Toggle bit 1 */ r = ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL); if ((ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & 0x2) == (r & 0x2)) goto no_reg; /* Sure that no ECR register exists */ } if ((ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & 0x3 ) != 0x1) goto no_reg; ring0_outb(0x34, pp_w9xring0_iobase + LPTREG_ECONTROL); if (ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) != 0x35) goto no_reg; ring0_outb(0xc, pp_w9xring0_iobase + LPTREG_CONTROL); /* Go to mode 000 */ ring0_outb(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & ~0xe0, pp_w9xring0_iobase + LPTREG_ECONTROL); return PARPORT_MODE_PCECR; no_reg: ring0_outb(0xc, pp_w9xring0_iobase + LPTREG_CONTROL); return 0; } static int parport_ecp(void) { int i; int config; int pword; int fifo_depth, writeIntrThreshold, readIntrThreshold; /* Find out FIFO depth */ ring0_outb(0x00, pp_w9xring0_iobase + LPTREG_ECONTROL); /* Reset FIFO */ ring0_outb(0xc0, pp_w9xring0_iobase + LPTREG_ECONTROL); /* TEST FIFO */ for (i=0; i < 1024 && !(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & 0x02); i++) ring0_outb(0xaa, pp_w9xring0_iobase + LPTREG_TFIFO); /* * Using LGS chipset it uses ECR register, but * it doesn't support ECP or FIFO MODE */ if (i == 1024) { ring0_outb(0x00, pp_w9xring0_iobase + LPTREG_ECONTROL); return 0; } fifo_depth = i; lprintf(3, "ECP: FIFO depth is %d bytes\n", fifo_depth); /* Find out writeIntrThreshold */ ring0_outb(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) | (1<<2), pp_w9xring0_iobase + LPTREG_ECONTROL); ring0_outb(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & ~(1<<2) , pp_w9xring0_iobase + LPTREG_ECONTROL); for (i = 1; i <= fifo_depth; i++) { ring0_inb(pp_w9xring0_iobase + LPTREG_TFIFO); usleep(50); if (ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: writeIntrThreshold is %d\n", i); else /* Number of bytes we know we can write if we get an interrupt. */ i = 0; writeIntrThreshold = i; /* Find out readIntrThreshold */ ring0_outb((ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & ~0xe0) | 0x20, pp_w9xring0_iobase + LPTREG_ECONTROL); /* Reset FIFO, PS2 */ ring0_outb(ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL) | PARPORT_CONTROL_DIRECTION, pp_w9xring0_iobase + LPTREG_CONTROL); ring0_outb((ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & ~0xe0) | 0xc0, pp_w9xring0_iobase + LPTREG_ECONTROL); /* Test FIFO */ ring0_outb(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) | (1<<2), pp_w9xring0_iobase + LPTREG_ECONTROL); ring0_outb(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & ~(1<<2) , pp_w9xring0_iobase + LPTREG_ECONTROL); for (i = 1; i <= fifo_depth; i++) { ring0_outb(0xaa, pp_w9xring0_iobase + LPTREG_TFIFO); if (ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: readIntrThreshold is %d\n", i); else /* Number of bytes we can read if we get an interrupt. */ i = 0; readIntrThreshold = i; ring0_outb(0x00, pp_w9xring0_iobase + LPTREG_ECONTROL); /* Reset FIFO */ ring0_outb(0xf4, pp_w9xring0_iobase + LPTREG_ECONTROL); /* Configuration mode */ config = ring0_inb(pp_w9xring0_iobase + LPTREG_CONFIGA); pword = (config >> 4) & 0x7; switch (pword) { case 0: pword = 2; lprintf(0, "ECP: Unsupported pword size! (2)\n"); break; case 2: pword = 4; lprintf(0, "ECP: Unsupported pword size! (4)\n"); break; default: lprintf(0, "ECP: Unknown implementation ID (%d)\n", pword); /* Assume 1 */ case 1: pword = 1; } lprintf(3, "ECP: PWord is %d bits\n", 8 * pword); config = ring0_inb(pp_w9xring0_iobase + LPTREG_CONFIGB); lprintf(3, "ECP: Interrupts are ISA-%s\n", config & 0x80 ? "Level" : "Pulses"); if (!(config & 0x40)) lprintf(3, "ECP: IRQ conflict!\n"); /* Go back to mode 000 */ ring0_outb(ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL) & ~0xe0, pp_w9xring0_iobase + LPTREG_ECONTROL); return PARPORT_MODE_PCECP; } /* EPP mode detection */ static int parport_epp(void) { /* If EPP timeout bit clear then EPP available */ if (!pp_w9xring0_epp_clear_timeout()) return 0; /* No way to clear timeout */ /* * Theory: * Write two values to the EPP address register and * read them back. When the transfer times out, the state of * the EPP register is undefined in some cases (EPP 1.9?) but * in others (EPP 1.7, ECPEPP?) it is possible to read back * its value. */ pp_w9xring0_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ ring0_outb(0x55, pp_w9xring0_iobase + LPTREG_EPPADDR); pp_w9xring0_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (ring0_inb(pp_w9xring0_iobase + LPTREG_EPPADDR) == 0x55) { ring0_outb(0xaa, pp_w9xring0_iobase + LPTREG_EPPADDR); pp_w9xring0_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (ring0_inb(pp_w9xring0_iobase + LPTREG_EPPADDR) == 0xaa) { pp_w9xring0_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } } /* * Theory: * Bit 0 of STR is the EPP timeout bit, this bit is 0 * when EPP is possible and is set high when an EPP timeout * occurs (EPP uses the HALT line to stop the CPU while it does * the byte transfer, an EPP timeout occurs if the attached * device fails to respond after 10 micro seconds). * * This bit is cleared by either reading it (National Semi) * or writing a 1 to the bit (SMC, UMC, Wring0_inbond), others ??? * This bit is always high in non EPP modes. */ ring0_outb(ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL) | 0x20, pp_w9xring0_iobase + LPTREG_CONTROL); ring0_outb(ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL) | 0x10, pp_w9xring0_iobase + LPTREG_CONTROL); pp_w9xring0_epp_clear_timeout(); ring0_inb(pp_w9xring0_iobase + LPTREG_EPPDATA); usleep(30); /* Wait for possible EPP timeout */ if (ring0_inb(pp_w9xring0_iobase + LPTREG_STATUS) & 0x01) { pp_w9xring0_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } return 0; } static int parport_ecpepp(void) { int mode; unsigned char oecr; oecr = ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL); /* Search for SMC style EPP+ECP mode */ ring0_outb(0x80, pp_w9xring0_iobase + LPTREG_ECONTROL); mode = parport_epp(); ring0_outb(oecr, pp_w9xring0_iobase + LPTREG_ECONTROL); return mode ? PARPORT_MODE_PCECPEPP : 0; } /* Detect PS/2 support. * * Bit 5 (0x20) sets the PS/2 data w9xring0ion; setting this high * allows us to read data from the data lines. In theory we would get back * 0xff but any peripheral attached to the port may drag some or all of the * lines down to zero. So if we get back anything that isn't the contents * of the data register we deem PS/2 support to be present. * * Some SPP ports have "half PS/2" ability - you can't turn off the line * drivers, but an external peripheral with sufficiently beefy drivers of * its own can overpower them and assert its own levels onto the bus, from * where they can then be read back as normal. Ports with this property * and the right type of device attached are likely to fail the SPP test, * (as they will appear to have stuck bits) and so the fact that they might * be misdetected here is rather academic. */ static int parport_ps2(void) { int ok = 0; unsigned char octr = ring0_inb(pp_w9xring0_iobase + LPTREG_CONTROL); pp_w9xring0_epp_clear_timeout(); ring0_outb(octr | 0x20, pp_w9xring0_iobase + LPTREG_CONTROL); /* try to tri-state the buffer */ ring0_outb(0x55, pp_w9xring0_iobase + LPTREG_DATA); if (ring0_inb(pp_w9xring0_iobase + LPTREG_DATA) != 0x55) ok++; ring0_outb(0xaa, pp_w9xring0_iobase + LPTREG_DATA); if (ring0_inb(pp_w9xring0_iobase + LPTREG_DATA) != 0xaa) ok++; ring0_outb(octr, pp_w9xring0_iobase); /* cancel input mode */ return ok ? PARPORT_MODE_PCPS2 : 0; } static int parport_ecpps2(void) { int mode; unsigned char oecr; oecr = ring0_inb(pp_w9xring0_iobase + LPTREG_ECONTROL); ring0_outb(0x20, pp_w9xring0_iobase + LPTREG_ECONTROL); mode = parport_ps2(); ring0_outb(oecr, pp_w9xring0_iobase + LPTREG_ECONTROL); return mode ? PARPORT_MODE_PCECPPS2 : 0; } /* ---------------------------------------------------------------------- */ int parport_init_w9xring0_flags(unsigned io, unsigned int flags) { pp_w9xring0_flags = FLAGS_PCSPP; pp_w9xring0_iobase = io; if (iopl(3)) { lprintf(0, "Cannot get direct IO port access (iopl: %s)\n", strerror(errno)); return -1; } if (!parport_spp()) { lprintf(0, "No parport present at 0x%x\n", pp_w9xring0_iobase); return -1; } if (parport_ecr()) { pp_w9xring0_flags |= FLAGS_PCECR; pp_w9xring0_flags |= parport_ecp(); pp_w9xring0_flags |= parport_ecpps2(); pp_w9xring0_flags |= parport_ecpepp(); if ((flags & PPFLAG_FORCEHWEPP) && (pp_w9xring0_flags & (FLAGS_PCPS2|FLAGS_PCECPPS2)) && !(pp_w9xring0_flags & (FLAGS_PCEPP|FLAGS_PCECPEPP))) pp_w9xring0_flags |= FLAGS_PCECPEPP; else flags &= ~PPFLAG_FORCEHWEPP; } else { pp_w9xring0_flags |= parport_ps2(); pp_w9xring0_flags |= parport_epp(); if ((flags & PPFLAG_FORCEHWEPP) && (pp_w9xring0_flags & (FLAGS_PCPS2|FLAGS_PCECPPS2)) && !(pp_w9xring0_flags & (FLAGS_PCEPP|FLAGS_PCECPEPP))) pp_w9xring0_flags |= FLAGS_PCEPP; else flags &= ~PPFLAG_FORCEHWEPP; } lprintf(0, "Parport 0x%x capabilities: SPP%s%s%s%s%s%s\n", pp_w9xring0_iobase, (pp_w9xring0_flags & FLAGS_PCPS2) ? ", PS2" : "", (pp_w9xring0_flags & FLAGS_PCEPP) ? ((flags & PPFLAG_FORCEHWEPP) ? ", EPP (forced)" : ", EPP") : "", (pp_w9xring0_flags & FLAGS_PCECR) ? ", ECR" : "", (pp_w9xring0_flags & FLAGS_PCECP) ? ", ECP" : "", (pp_w9xring0_flags & FLAGS_PCECPEPP) ? ((flags & PPFLAG_FORCEHWEPP) ? ", ECPEPP (forced)" : ", ECPEPP") : "", (pp_w9xring0_flags & FLAGS_PCECPPS2) ? ", ECPPS2" : ""); if (!(pp_w9xring0_flags & (FLAGS_PCPS2 | FLAGS_PCECPPS2))) { lprintf(0, "Parport 0x%x does not even support PS/2 mode, cannot use it\n", pp_w9xring0_iobase); return -1; } lprintf(0, "Parport 0x%x using direct Win9x Ring0 hardware access\n", pp_w9xring0_iobase); if (pp_w9xring0_flags & FLAGS_PCECR) ring0_outb(0x30, pp_w9xring0_iobase + LPTREG_ECONTROL); /* PS/2 mode */ parport_ops = parport_w9xring0_ops; if ((flags & PPFLAG_SWEMULECP) || !(pp_w9xring0_flags & FLAGS_PCECP)) { parport_ops.parport_ecp_write_data = parport_w9xring0_emul_ops.parport_ecp_write_data; parport_ops.parport_ecp_read_data = parport_w9xring0_emul_ops.parport_ecp_read_data; parport_ops.parport_ecp_write_addr = parport_w9xring0_emul_ops.parport_ecp_write_addr; lprintf(0, "Parport 0x%x emulating ECP\n", pp_w9xring0_iobase); } if ((flags & PPFLAG_SWEMULEPP) || !(pp_w9xring0_flags & (FLAGS_PCEPP | FLAGS_PCECPEPP))) { parport_ops.parport_epp_write_data = parport_w9xring0_emul_ops.parport_epp_write_data; parport_ops.parport_epp_read_data = parport_w9xring0_emul_ops.parport_epp_read_data; parport_ops.parport_epp_write_addr = parport_w9xring0_emul_ops.parport_epp_write_addr; parport_ops.parport_epp_read_addr = parport_w9xring0_emul_ops.parport_epp_read_addr; lprintf(0, "Parport 0x%x emulating EPP\n", pp_w9xring0_iobase); } return 0; } int parport_init_w9xring0(unsigned io) { return parport_init_w9xring0_flags(io, 0); } baycomepp-0.10.orig/main/ppwin.c0100644000175100017510000006557107143674255014663 0ustar abaaba/*****************************************************************************/ /* * ppnt.c -- Parport direct access with eppflex.sys/vxd. * * Copyright (C) 2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ #define DEVICE_TYPE DWORD #include "w9xdrv/eppflex.h" /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ HANDLE pp_win_handle = INVALID_HANDLE_VALUE; unsigned int pp_win_flags = 0; #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ unsigned char parport_win_read_data(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_READ_DATA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_read_data failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_win_write_data(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_WRITE_DATA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_win_write_data failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_win_read_status(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_READ_STATUS, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_read_status failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_win_write_status(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_WRITE_STATUS, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_win_write_status failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_win_read_control(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_READ_CONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_read_control failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_win_write_control(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_WRITE_CONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_win_write_control failed, error 0x%08lx\n", GetLastError()); } void parport_win_frob_control(unsigned char mask, unsigned char val) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = val; rw.mask = mask; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_FROB_CONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_frob_control failed, error 0x%08lx\n", GetLastError()); return; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return; } } unsigned char parport_win_read_configa(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_READ_CONFIGA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_read_configa failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_win_write_configa(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_WRITE_CONFIGA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_win_write_configa failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_win_read_configb(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_READ_CONFIGB, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_read_configb failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_win_write_configb(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_WRITE_CONFIGB, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_win_write_configb failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_win_read_econtrol(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_READ_ECONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_read_econtrol failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_win_write_econtrol(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_WRITE_ECONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_win_write_econtrol failed, error 0x%08lx\n", GetLastError()); } void parport_win_frob_econtrol(unsigned char mask, unsigned char val) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = val; rw.mask = mask; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_FROB_ECONTROL, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_frob_econtrol failed, error 0x%08lx\n", GetLastError()); return; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return; } } unsigned char parport_win_read_eppaddr(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_READ_EPPADDR, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_read_eppaddr failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_win_write_eppaddr(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_WRITE_EPPADDR, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_win_write_eppaddr failed, error 0x%08lx\n", GetLastError()); } unsigned char parport_win_read_eppdata(void) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return 0xff; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_READ_EPPDATA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) { lprintf(0, "Parport: parport_win_read_eppdata failed, error 0x%08lx\n", GetLastError()); return 0xff; } if (retl != sizeof(rw)) { lprintf(0, "Parport: ioctl returned invalid length, %lu\n", retl); return 0xff; } return rw.data; } void parport_win_write_eppdata(unsigned char d) { struct eppflex_rwdata rw; BOOL res; DWORD retl; if (pp_win_handle == INVALID_HANDLE_VALUE) return; rw.data = d; res = DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_WRITE_EPPDATA, &rw, sizeof(rw), &rw, sizeof(rw), &retl, NULL); if (!res) lprintf(0, "Parport: parport_win_write_eppdata failed, error 0x%08lx\n", GetLastError()); } /* ---------------------------------------------------------------------- */ extern inline void setecr(unsigned char ecr) { if (pp_win_flags & FLAGS_PCECR) parport_win_write_econtrol(ecr); } int pp_win_epp_clear_timeout(void) { unsigned char r; if (!(parport_win_read_status() & LPTSTAT_EPPTIMEOUT)) return 1; /* To clear timeout some chips require double read */ parport_win_read_status(); r = parport_win_read_status(); parport_win_write_status(r | 0x01); /* Some reset by writing 1 */ parport_win_write_status(r & 0xfe); /* Others by writing 0 */ r = parport_win_read_status(); return !(r & 0x01); } /* ---------------------------------------------------------------------- */ unsigned parport_win_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { parport_win_write_eppdata(*bp); if (parport_win_read_status() & LPTSTAT_EPPTIMEOUT) { pp_win_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_win_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = parport_win_read_eppdata(); if (parport_win_read_status() & LPTSTAT_EPPTIMEOUT) { pp_win_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_win_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { parport_win_write_eppaddr(*bp); if (parport_win_read_status() & LPTSTAT_EPPTIMEOUT) { pp_win_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } unsigned parport_win_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; setecr(0x90); /* EPP mode */ for (; sz > 0; sz--, bp++) { *bp = parport_win_read_eppaddr(); if (parport_win_read_status() & LPTSTAT_EPPTIMEOUT) { pp_win_epp_clear_timeout(); goto rt; } ret++; } rt: setecr(0x30); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_win_emul_epp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE); for (; sz > 0; sz--, bp++) { parport_win_write_data(*bp); for (tmo = 0; ; tmo++) { if (parport_win_read_status() & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_DATASTB); for (tmo = 0; ; tmo++) { if (!(parport_win_read_status() & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE); ret++; } return ret; } unsigned parport_win_emul_epp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (parport_win_read_status() & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_DATASTB); for (tmo = 0; ; tmo++) { if (!(parport_win_read_status() & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = parport_win_read_data(); parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION); ret++; } return ret; } unsigned parport_win_emul_epp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE); for (; sz > 0; sz--, bp++) { parport_win_write_data(*bp); for (tmo = 0; ; tmo++) { if (parport_win_read_status() & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE | LPTCTRL_ADDRSTB); for (tmo = 0; ; tmo++) { if (!(parport_win_read_status() & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_WRITE); ret++; } return ret; } unsigned parport_win_emul_epp_read_addr(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo; parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION); for (; sz > 0; sz--, bp++) { for (tmo = 0; ; tmo++) { if (parport_win_read_status() & LPTSTAT_WAIT) break; if (tmo > 1000) return ret; } parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION | LPTCTRL_ADDRSTB); for (tmo = 0; ; tmo++) { if (!(parport_win_read_status() & LPTSTAT_WAIT)) break; if (tmo > 1000) return ret; } *bp = parport_win_read_data(); parport_win_write_control(LPTCTRL_PROGRAM | LPTCTRL_DIRECTION); ret++; } return ret; } /* ---------------------------------------------------------------------- */ static int ecp_forward(void) { unsigned tmo = 0x10000; if (parport_win_read_status() & 0x20) return 0; /* Event 47: Set nInit high */ parport_win_write_control(0x26); /* Event 49: PError goes high */ while (!(parport_win_read_status() & 0x20)) { if (!(--tmo)) return -1; } /* start driving the bus */ parport_win_write_control(0x04); return 0; } static int ecp_reverse(void) { unsigned tmo = 0x10000; if (!(parport_win_read_status() & 0x20)) return 0; parport_win_write_control(0x24); /* Event 39: Set nInit low to initiate bus reversal */ parport_win_write_control(0x20); while (parport_win_read_status() & 0x20) { if (!(--tmo)) return -1; } return 0; } static unsigned emptyfifo(unsigned cnt) { unsigned fcnt = 0; parport_win_write_econtrol(0xd0); /* FIFOtest mode */ while ((parport_win_read_econtrol() & 0x01) && fcnt < 32 && fcnt < cnt) { parport_win_read_configa(); fcnt++; } lprintf(10, "emptyfifo: FIFO contained %d bytes\n", fcnt); parport_win_write_econtrol(0x30); /* PS/2 mode */ return cnt - fcnt; } unsigned parport_win_ecp_write_data(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; unsigned int i; if (ecp_forward()) return 0; parport_win_write_econtrol(0x70); /* ECP mode */ while (sz > 0) { while ((stat = parport_win_read_econtrol()) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { for (i = 0; i < 8; i++) parport_win_write_configa(bp[i]); bp += 8; sz -= 8; ret += 8; } else { parport_win_write_configa(*bp++); sz--; ret++; } tmo = 0x10000; } while (!(parport_win_read_econtrol() & 0x01) || !(parport_win_read_status() & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } parport_win_write_econtrol(0x30); /* PS/2 mode */ return ret; } unsigned parport_win_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; unsigned int i; if (ecp_reverse()) return 0; parport_win_write_econtrol(0x70); /* ECP mode */ while (sz > 0) { while ((stat = parport_win_read_econtrol()) & 0x01) if (!(--tmo)) { parport_win_write_econtrol(0xd0); /* FIFOTEST mode */ while (!(parport_win_read_econtrol() & 0x01) && sz > 0) { *bp++ = parport_win_read_configa(); sz--; ret++; } parport_win_write_econtrol(0x30); /* PS/2 mode */ return ret; } if (stat & 0x02 && sz >= 8) { for (i = 0; i < 8; i++) bp[i] = parport_win_read_configa(); bp += 8; sz -= 8; ret += 8; } else { *bp++ = parport_win_read_configa(); sz--; ret++; } tmo = 0x10000; } parport_win_write_econtrol(0x30); /* PS/2 mode */ return ret; } unsigned parport_win_ecp_write_addr(const void *buf, unsigned sz) { const unsigned char *bp = (const unsigned char *)buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; unsigned int i; if (ecp_forward()) return 0; parport_win_write_econtrol(0x70); /* ECP mode */ while (sz > 0) { while ((stat = parport_win_read_econtrol()) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { for (i = 0; i < 8; i++) parport_win_write_data(bp[i]); bp += 8; sz -= 8; ret += 8; } else { parport_win_write_data(*bp++); sz--; ret++; } tmo = 0x10000; } while (!(parport_win_read_econtrol() & 0x01) || !(parport_win_read_status() & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } parport_win_write_econtrol(0x30); /* PS/2 mode */ return ret; } /* ---------------------------------------------------------------------- */ unsigned parport_win_emul_ecp_write_data(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = parport_win_read_control() & ~PARPORT_CONTROL_AUTOFD; /* HostAck high (data, not command) */ parport_win_write_control(ctl); for (ret = 0; ret < sz; ret++, bp++) { parport_win_write_data(*bp); parport_win_write_control(ctl | PARPORT_CONTROL_STROBE); for (tmo = 0; parport_win_read_status() & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; parport_win_write_control(ctl); for (tmo = 0; !(parport_win_read_status() & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_win_emul_ecp_write_addr(const void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret; unsigned char ctl; unsigned tmo; if (ecp_forward()) return 0; ctl = parport_win_read_control() | PARPORT_CONTROL_AUTOFD; /* HostAck low (command, not data) */ parport_win_write_control(ctl); for (ret = 0; ret < sz; ret++, bp++) { parport_win_write_data(*bp); parport_win_write_control(ctl | PARPORT_CONTROL_STROBE); for (tmo = 0; parport_win_read_status() & PARPORT_STATUS_BUSY; tmo++) if (tmo > 0x1000) return ret; parport_win_write_control(ctl); for (tmo = 0; !(parport_win_read_status() & PARPORT_STATUS_BUSY); tmo++) if (tmo > 0x1000) return ret; } return ret; } unsigned parport_win_emul_ecp_read_data(void *buf, unsigned sz) { unsigned char *bp = (unsigned char *)buf; unsigned ret = 0; unsigned char ctl, stat; int command; unsigned tmo; if (ecp_reverse()) return 0; ctl = parport_win_read_control(); /* Set HostAck low to start accepting data. */ parport_win_write_control(ctl | PARPORT_CONTROL_AUTOFD); while (ret < sz) { /* Event 43: Peripheral sets nAck low. It can take as long as it wants. */ tmo = 0; do { stat = parport_win_read_status(); if ((++tmo) > 0x10000) goto out; } while (stat & PARPORT_STATUS_ACK); /* Is this a command? */ command = stat & PARPORT_STATUS_BUSY; if (command) { //lprintf(3, "ECP: warning: emulation does not support RLE\n"); goto out; } /* Read the data. */ *bp = parport_win_read_data(); /* Event 44: Set HostAck high, acknowledging handshake. */ parport_win_write_control(ctl & ~PARPORT_CONTROL_AUTOFD); /* Event 45: The peripheral has 35ms to set nAck high. */ tmo = 0; do { stat = parport_win_read_status(); if ((++tmo) > 0x10000) goto out; } while (!(stat & PARPORT_STATUS_ACK)); /* Event 46: Set HostAck low and accept the data. */ parport_win_write_control(ctl | PARPORT_CONTROL_AUTOFD); /* Normal data byte. */ bp++; ret++; } out: return ret; } /* ---------------------------------------------------------------------- */ #if 1 unsigned parport_win_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned u; for (u = 0; u < sz; u++, bp++) parport_win_write_data(*bp); return sz; } #else unsigned parport_win_fpgaconfig_write(const void *buf, unsigned sz) { const unsigned char *bp = buf; unsigned ret = 0; unsigned tmo = 0x10000; unsigned char stat; unsigned int i; if (pp_win_modes & PARPORT_MODE_PCECR) { parport_win_write_econtrol(0x50); /* COMPAT FIFO mode */ while (sz > 0) { while ((stat = parport_win_read_econtrol()) & 0x02) { if (!(--tmo)) return emptyfifo(ret); } if (stat & 0x01 && sz >= 8) { for (i = 0; i < 8; i++) parport_win_write_configa(bp[i]); bp += 8; sz -= 8; ret += 8; } else { parport_win_write_configa(*bp++); sz--; ret++; } tmo = 0x10000; } while (!(parport_win_read_econtrol() & 0x01) || !(parport_win_read_status() & 0x80)) { if (!(--tmo)) return emptyfifo(ret); } parport_win_write_econtrol(0x30); /* PS/2 mode */ return ret; } for (ret = 0; ret < sz; ret++, bp++) parport_win_write_data(*bp); return sz; } #endif /* ---------------------------------------------------------------------- */ const struct parport_ops parport_win_ops = { parport_win_read_data, parport_win_write_data, parport_win_read_status, parport_win_read_control, parport_win_write_control, parport_win_frob_control, parport_win_epp_write_data, parport_win_epp_read_data, parport_win_epp_write_addr, parport_win_epp_read_addr, parport_win_ecp_write_data, parport_win_ecp_read_data, parport_win_ecp_write_addr, parport_win_fpgaconfig_write }; const struct parport_ops parport_win_emul_ops = { parport_win_read_data, parport_win_write_data, parport_win_read_status, parport_win_read_control, parport_win_write_control, parport_win_frob_control, parport_win_emul_epp_write_data, parport_win_emul_epp_read_data, parport_win_emul_epp_write_addr, parport_win_emul_epp_read_addr, parport_win_emul_ecp_write_data, parport_win_emul_ecp_read_data, parport_win_emul_ecp_write_addr, parport_win_fpgaconfig_write }; /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/main/ppwininit.c0100644000175100017510000005102607245777362015543 0ustar abaaba/*****************************************************************************/ /* * ppntinit.c -- Parport direct access with eppflex.sys/vxd (init routines). * * Copyright (C) 2000-2001 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #include #include "parport.h" #include "fpga.h" /* ---------------------------------------------------------------------- */ #define DEVICE_TYPE DWORD #include "w9xdrv/eppflex.h" /* ---------------------------------------------------------------------- */ /* LPT registers */ /* ECP specific registers */ #define LPTREG_ECONTROL 0x402 #define LPTREG_CONFIGB 0x401 #define LPTREG_CONFIGA 0x400 #define LPTREG_TFIFO 0x400 #define LPTREG_DFIFO 0x400 #define LPTREG_AFIFO 0x000 #define LPTREG_DSR 0x001 #define LPTREG_DCR 0x002 /* EPP specific registers */ #define LPTREG_EPPDATA 0x004 #define LPTREG_EPPADDR 0x003 /* standard registers */ #define LPTREG_CONTROL 0x002 #define LPTREG_STATUS 0x001 #define LPTREG_DATA 0x000 /* ECP config A */ #define LPTCFGA_INTRISALEVEL 0x80 #define LPTCFGA_IMPIDMASK 0x70 #define LPTCFGA_IMPID16BIT 0x00 #define LPTCFGA_IMPID8BIT 0x10 #define LPTCFGA_IMPID32BIT 0x20 #define LPTCFGA_NOPIPELINE 0x04 #define LPTCFGA_PWORDCOUNT 0x03 /* ECP config B */ #define LPTCFGB_COMPRESS 0x80 #define LPTCFGB_INTRVALUE 0x40 #define LPTCFGB_IRQMASK 0x38 #define LPTCFGB_IRQ5 0x38 #define LPTCFGB_IRQ15 0x30 #define LPTCFGB_IRQ14 0x28 #define LPTCFGB_IRQ11 0x20 #define LPTCFGB_IRQ10 0x18 #define LPTCFGB_IRQ9 0x10 #define LPTCFGB_IRQ7 0x08 #define LPTCFGB_IRQJUMPER 0x00 #define LPTCFGB_DMAMASK 0x07 #define LPTCFGB_DMA7 0x07 #define LPTCFGB_DMA6 0x06 #define LPTCFGB_DMA5 0x05 #define LPTCFGB_DMAJUMPER16 0x04 #define LPTCFGB_DMA3 0x03 #define LPTCFGB_DMA2 0x02 #define LPTCFGB_DMA1 0x01 #define LPTCFGB_DMAJUMPER8 0x00 /* ECP ECR */ #define LPTECR_MODEMASK 0xe0 #define LPTECR_MODESPP 0x00 #define LPTECR_MODEPS2 0x20 #define LPTECR_MODESPPFIFO 0x40 #define LPTECR_MODEECP 0x60 #define LPTECR_MODEECPEPP 0x80 #define LPTECR_MODETEST 0xc0 #define LPTECR_MODECFG 0xe0 #define LPTECR_NERRINTRDIS 0x10 #define LPTECR_DMAEN 0x08 #define LPTECR_SERVICEINTR 0x04 #define LPTECR_FIFOFULL 0x02 #define LPTECR_FIFOEMPTY 0x01 /* ---------------------------------------------------------------------- */ extern HANDLE pp_win_handle; extern unsigned int pp_win_flags; extern const struct parport_ops parport_win_ops, parport_win_emul_ops; extern unsigned char parport_win_read_data(void); extern void parport_win_write_data(unsigned char d); extern unsigned char parport_win_read_status(void); extern unsigned char parport_win_read_control(void); extern void parport_win_write_control(unsigned char d); extern void parport_win_frob_control(unsigned char mask, unsigned char val); extern unsigned char parport_win_read_configa(void); extern void parport_win_write_configa(unsigned char d); extern unsigned char parport_win_read_configb(void); extern void parport_win_write_configb(unsigned char d); extern unsigned char parport_win_read_econtrol(void); extern void parport_win_write_econtrol(unsigned char d); extern void parport_win_frob_econtrol(unsigned char mask, unsigned char val); extern unsigned char parport_win_read_eppaddr(void); extern void parport_win_write_eppaddr(unsigned char d); extern unsigned char parport_win_read_eppdata(void); extern void parport_win_write_eppdata(unsigned char d); extern int pp_win_epp_clear_timeout(void); #define FLAGS_PCSPP (1<<0) #define FLAGS_PCPS2 (1<<1) #define FLAGS_PCEPP (1<<2) #define FLAGS_PCECR (1<<3) /* ECR Register Exists */ #define FLAGS_PCECP (1<<4) #define FLAGS_PCECPEPP (1<<5) #define FLAGS_PCECPPS2 (1<<6) /* ---------------------------------------------------------------------- */ static int parport_spp(void) { pp_win_epp_clear_timeout(); /* prevent lockup of some SMSC IC's */ /* this routine is mostly copied from Linux Kernel parport */ parport_win_write_econtrol(0xc); parport_win_write_control(0xc); parport_win_write_data(0xaa); if (parport_win_read_data() != 0xaa) return 0; parport_win_write_data(0x55); if (parport_win_read_data() != 0x55) return 0; return PARPORT_MODE_PCSPP; } /* Check for ECP * * Old style XT ports alias io ports every 0x400, hence accessing ECR * on these cards actually accesses the CTR. * * Modern cards don't do this but reading from ECR will return 0xff * regardless of what is written here if the card does NOT support * ECP. * * We will write 0x2c to ECR and 0xcc to CTR since both of these * values are "safe" on the CTR since bits 6-7 of CTR are unused. */ static int parport_ecr(void) { unsigned char r = 0xc; parport_win_write_control(r); if ((parport_win_read_econtrol() & 0x3) == (r & 0x3)) { parport_win_write_control(r ^ 0x2); /* Toggle bit 1 */ r = parport_win_read_control(); if ((parport_win_read_econtrol() & 0x2) == (r & 0x2)) goto no_reg; /* Sure that no ECR register exists */ } if ((parport_win_read_econtrol() & 0x3 ) != 0x1) goto no_reg; parport_win_write_econtrol(0x34); if (parport_win_read_econtrol() != 0x35) goto no_reg; parport_win_write_control(0xc); /* Go to mode 000 */ parport_win_frob_econtrol(0xe0, 0); return PARPORT_MODE_PCECR; no_reg: parport_win_write_control(0xc); return 0; } static int parport_ecp(void) { int i; int config; int pword; int fifo_depth, writeIntrThreshold, readIntrThreshold; /* Find out FIFO depth */ parport_win_write_econtrol(0x00); /* Reset FIFO */ parport_win_write_econtrol(0xc0); /* TEST FIFO */ for (i=0; i < 1024 && !(parport_win_read_econtrol() & 0x02); i++) parport_win_write_configa(0xaa); /* * Using LGS chipset it uses ECR register, but * it doesn't support ECP or FIFO MODE */ if (i == 1024) { parport_win_write_econtrol(0x00); return 0; } fifo_depth = i; lprintf(3, "ECP: FIFO depth is %d bytes\n", fifo_depth); /* Find out writeIntrThreshold */ parport_win_frob_econtrol((1<<2), (1<<2)); parport_win_frob_econtrol((1<<2), 0); for (i = 1; i <= fifo_depth; i++) { parport_win_read_configa(); usleep(50); if (parport_win_read_econtrol() & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: writeIntrThreshold is %d\n", i); else /* Number of bytes we know we can write if we get an interrupt. */ i = 0; writeIntrThreshold = i; /* Find out readIntrThreshold */ parport_win_frob_econtrol(0xe0, 0x20); /* Reset FIFO, PS2 */ parport_win_frob_control(PARPORT_CONTROL_DIRECTION, PARPORT_CONTROL_DIRECTION); parport_win_frob_econtrol(0xe0, 0xc0); /* Test FIFO */ parport_win_frob_econtrol((1<<2), (1<<2)); parport_win_frob_econtrol((1<<2), 0); for (i = 1; i <= fifo_depth; i++) { parport_win_write_configa(0xaa); if (parport_win_read_econtrol() & (1<<2)) break; } if (i <= fifo_depth) lprintf(3, "ECP: readIntrThreshold is %d\n", i); else /* Number of bytes we can read if we get an interrupt. */ i = 0; readIntrThreshold = i; parport_win_write_econtrol(0x00); /* Reset FIFO */ parport_win_write_econtrol(0xf4); /* Configuration mode */ config = parport_win_read_configa(); pword = (config >> 4) & 0x7; switch (pword) { case 0: pword = 2; lprintf(0, "ECP: Unsupported pword size! (2)\n"); break; case 2: pword = 4; lprintf(0, "ECP: Unsupported pword size! (4)\n"); break; default: lprintf(0, "ECP: Unknown implementation ID (%d)\n", pword); /* Assume 1 */ case 1: pword = 1; } lprintf(3, "ECP: PWord is %d bits\n", 8 * pword); config = parport_win_read_configb(); lprintf(3, "ECP: Interrupts are ISA-%s\n", config & 0x80 ? "Level" : "Pulses"); if (!(config & 0x40)) lprintf(3, "ECP: IRQ conflict!\n"); /* Go back to mode 000 */ parport_win_frob_econtrol(0xe0, 0); return PARPORT_MODE_PCECP; } /* EPP mode detection */ static int parport_epp(void) { /* If EPP timeout bit clear then EPP available */ if (!pp_win_epp_clear_timeout()) return 0; /* No way to clear timeout */ /* * Theory: * Write two values to the EPP address register and * read them back. When the transfer times out, the state of * the EPP register is undefined in some cases (EPP 1.9?) but * in others (EPP 1.7, ECPEPP?) it is possible to read back * its value. */ pp_win_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ parport_win_write_eppaddr(0x55); pp_win_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (parport_win_read_eppaddr() == 0x55) { parport_win_write_eppaddr(0xaa); pp_win_epp_clear_timeout(); usleep(30); /* Wait for possible EPP timeout */ if (parport_win_read_eppaddr() == 0xaa) { pp_win_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } } /* * Theory: * Bit 0 of STR is the EPP timeout bit, this bit is 0 * when EPP is possible and is set high when an EPP timeout * occurs (EPP uses the HALT line to stop the CPU while it does * the byte transfer, an EPP timeout occurs if the attached * device fails to respond after 10 micro seconds). * * This bit is cleared by either reading it (National Semi) * or writing a 1 to the bit (SMC, UMC, WinBond), others ??? * This bit is always high in non EPP modes. */ parport_win_frob_control(0x20, 0x20); parport_win_frob_control(0x10, 0x10); pp_win_epp_clear_timeout(); parport_win_read_eppdata(); usleep(30); /* Wait for possible EPP timeout */ if (parport_win_read_status() & 0x01) { pp_win_epp_clear_timeout(); return PARPORT_MODE_PCEPP; } return 0; } static int parport_ecpepp(void) { int mode; unsigned char oecr; oecr = parport_win_read_econtrol(); /* Search for SMC style EPP+ECP mode */ parport_win_write_econtrol(0x80); mode = parport_epp(); parport_win_write_econtrol(oecr); return mode ? PARPORT_MODE_PCECPEPP : 0; } /* Detect PS/2 support. * * Bit 5 (0x20) sets the PS/2 data direction; setting this high * allows us to read data from the data lines. In theory we would get back * 0xff but any peripheral attached to the port may drag some or all of the * lines down to zero. So if we get back anything that isn't the contents * of the data register we deem PS/2 support to be present. * * Some SPP ports have "half PS/2" ability - you can't turn off the line * drivers, but an external peripheral with sufficiently beefy drivers of * its own can overpower them and assert its own levels onto the bus, from * where they can then be read back as normal. Ports with this property * and the right type of device attached are likely to fail the SPP test, * (as they will appear to have stuck bits) and so the fact that they might * be misdetected here is rather academic. */ static int parport_ps2(void) { int ok = 0; unsigned char octr = parport_win_read_control(); pp_win_epp_clear_timeout(); parport_win_write_control(octr | 0x20); /* try to tri-state the buffer */ parport_win_write_data(0x55); if (parport_win_read_data() != 0x55) ok++; parport_win_write_data(0xaa); if (parport_win_read_data() != 0xaa) ok++; parport_win_write_control(octr); /* cancel input mode */ return ok ? PARPORT_MODE_PCPS2 : 0; } static int parport_ecpps2(void) { int mode; unsigned char oecr; oecr = parport_win_read_econtrol(); parport_win_write_econtrol(0x20); mode = parport_ps2(); parport_win_write_econtrol(oecr); return mode ? PARPORT_MODE_PCECPPS2 : 0; } /* ---------------------------------------------------------------------- */ #define SERVICENAME "eppflex" #define SERVICEDISPLAYNAME "Baycom EPPFLEX" //#define SERVICEBINARY "\"\\??\\g:\\nteppflex\\eppflex.sys\"" #define SERVICEBINARY "System32\\drivers\\eppflex.sys" static int start_service(void) { int ret = -1; SC_HANDLE hscm, hserv; hscm = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if (!hscm) { lprintf(5, "Cannot open SC manager, error 0x%08lx\n", GetLastError()); return -1; } hserv = CreateService(hscm, SERVICENAME, SERVICEDISPLAYNAME, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, SERVICEBINARY, NULL, NULL, NULL, NULL, NULL); if (!hserv) { lprintf(5, "Cannot create service, error 0x%08lx\n", GetLastError()); hserv = OpenService(hscm, SERVICENAME, SERVICE_ALL_ACCESS); if (!hserv) { lprintf(5, "Cannot open service, error 0x%08lx\n", GetLastError()); goto closescm; } } if (!StartService(hserv, 0, NULL)) { lprintf(5, "Cannot start service, error 0x%08lx\n", GetLastError()); goto closeserv; } lprintf(1, "Service %s started successfully\n", SERVICENAME); ret = 0; closeserv: if (!CloseServiceHandle(hserv)) lprintf(5, "Cannot close service handle, error 0x%08lx\n", GetLastError()); closescm: if (!CloseServiceHandle(hscm)) lprintf(5, "Cannot close service manager handle, error 0x%08lx\n", GetLastError()); return ret; } static int stop_service(void) { int ret = -1; SC_HANDLE hscm, hserv; SERVICE_STATUS sstat; hscm = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if (!hscm) { lprintf(5, "Cannot open SC manager, error 0x%08lx\n", GetLastError()); return -1; } hserv = OpenService(hscm, SERVICENAME, SERVICE_ALL_ACCESS); if (!hserv) { lprintf(5, "Cannot open service, error 0x%08lx\n", GetLastError()); goto closescm; } ret = 0; if (!ControlService(hserv, SERVICE_CONTROL_STOP, &sstat)) { lprintf(5, "Cannot delete service, error 0x%08lx\n", GetLastError()); ret = -1; } if (!DeleteService(hserv)) { lprintf(5, "Cannot delete service, error 0x%08lx\n", GetLastError()); ret = -1; } if (!ret) lprintf(1, "Service %s stopped successfully\n", SERVICENAME); if (!CloseServiceHandle(hserv)) lprintf(5, "Cannot close service handle, error 0x%08lx\n", GetLastError()); closescm: if (!CloseServiceHandle(hscm)) lprintf(5, "Cannot close service manager handle, error 0x%08lx\n", GetLastError()); return ret; } /* ---------------------------------------------------------------------- */ extern inline int isnt() { OSVERSIONINFO info; info.dwOSVersionInfoSize = sizeof(info); if (GetVersionEx(&info) && info.dwPlatformId == VER_PLATFORM_WIN32_NT) return 1; return 0; } /* ---------------------------------------------------------------------- */ void parport_stop_win(void) { DWORD bytesret; int nt = isnt(); if (pp_win_handle != INVALID_HANDLE_VALUE) { if (!nt) DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_RELEASEPORT, NULL, 0, NULL, 0, &bytesret, NULL); CloseHandle(pp_win_handle); } pp_win_handle = INVALID_HANDLE_VALUE; if (nt) stop_service(); } /* ---------------------------------------------------------------------- */ int parport_init_win_flags(unsigned int portnr, unsigned int flags) { char buf[32]; DWORD bytesret; if (pp_win_handle != INVALID_HANDLE_VALUE) CloseHandle(pp_win_handle); if (isnt()) { start_service(); snprintf(buf, sizeof(buf), "\\\\.\\eppflex\\%u", portnr); pp_win_handle = CreateFile(buf, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (pp_win_handle == INVALID_HANDLE_VALUE) { lprintf(0, "Cannot open eppflex.sys driver, error 0x%08lx\n", GetLastError()); goto err; } } else { pp_win_handle = CreateFile("\\\\.\\EPPFLEX.VXD", 0, 0, NULL, OPEN_ALWAYS, FILE_FLAG_DELETE_ON_CLOSE, NULL); if (pp_win_handle == INVALID_HANDLE_VALUE) { lprintf(0, "Cannot open eppflex.vxd driver, error 0x%08lx\n", GetLastError()); goto err; } if (!DeviceIoControl(pp_win_handle, IOCTL_EPPFLEX_ACQUIREPORT, &portnr, sizeof(portnr), NULL, 0, &bytesret, NULL)) { CloseHandle(pp_win_handle); pp_win_handle = INVALID_HANDLE_VALUE; lprintf(0, "Cannot open acquire port LPT%u, error 0x%08lx\n", portnr+1, GetLastError()); goto err; } } pp_win_flags = FLAGS_PCSPP; if (!parport_spp()) { lprintf(0, "No parport present\n"); goto err; } if (parport_ecr()) { pp_win_flags |= FLAGS_PCECR; pp_win_flags |= parport_ecp(); pp_win_flags |= parport_ecpps2(); pp_win_flags |= parport_ecpepp(); if ((flags & PPFLAG_FORCEHWEPP) && (pp_win_flags & (FLAGS_PCPS2|FLAGS_PCECPPS2)) && !(pp_win_flags & (FLAGS_PCEPP|FLAGS_PCECPEPP))) pp_win_flags |= FLAGS_PCECPEPP; else flags &= ~PPFLAG_FORCEHWEPP; } else { pp_win_flags |= parport_ps2(); pp_win_flags |= parport_epp(); if ((flags & PPFLAG_FORCEHWEPP) && (pp_win_flags & (FLAGS_PCPS2|FLAGS_PCECPPS2)) && !(pp_win_flags & (FLAGS_PCEPP|FLAGS_PCECPEPP))) pp_win_flags |= FLAGS_PCEPP; else flags &= ~PPFLAG_FORCEHWEPP; } lprintf(0, "Parport capabilities: SPP%s%s%s%s%s%s\n", (pp_win_flags & FLAGS_PCPS2) ? ", PS2" : "", (pp_win_flags & FLAGS_PCEPP) ? ((flags & PPFLAG_FORCEHWEPP) ? ", EPP (forced)" : ", EPP") : "", (pp_win_flags & FLAGS_PCECR) ? ", ECR" : "", (pp_win_flags & FLAGS_PCECP) ? ", ECP" : "", (pp_win_flags & FLAGS_PCECPEPP) ? ((flags & PPFLAG_FORCEHWEPP) ? ", ECPEPP (forced)" : ", ECPEPP") : "", (pp_win_flags & FLAGS_PCECPPS2) ? ", ECPPS2" : ""); if (!(pp_win_flags & (FLAGS_PCPS2 | FLAGS_PCECPPS2))) { lprintf(0, "Parport does not even support PS/2 mode, cannot use it\n"); goto err; } lprintf(0, "Parport using eppflex.sys/vxd hardware access"); if (pp_win_flags & FLAGS_PCECR) parport_win_write_econtrol(0x30); /* PS/2 mode */ parport_ops = parport_win_ops; if ((flags & PPFLAG_SWEMULECP) || !(pp_win_flags & FLAGS_PCECP)) { parport_ops.parport_ecp_write_data = parport_win_emul_ops.parport_ecp_write_data; parport_ops.parport_ecp_read_data = parport_win_emul_ops.parport_ecp_read_data; parport_ops.parport_ecp_write_addr = parport_win_emul_ops.parport_ecp_write_addr; lprintf(0, ", emulating ECP"); } if ((flags & PPFLAG_SWEMULEPP) || !(pp_win_flags & (FLAGS_PCEPP | FLAGS_PCECPEPP))) { parport_ops.parport_epp_write_data = parport_win_emul_ops.parport_epp_write_data; parport_ops.parport_epp_read_data = parport_win_emul_ops.parport_epp_read_data; parport_ops.parport_epp_write_addr = parport_win_emul_ops.parport_epp_write_addr; parport_ops.parport_epp_read_addr = parport_win_emul_ops.parport_epp_read_addr; lprintf(0, ", emulating EPP"); } lprintf(0, "\n"); return 0; err: parport_stop_win(); return -1; } int parport_init_win(unsigned int portnr) { return parport_init_win_flags(portnr, 0); } baycomepp-0.10.orig/udriver/0042755000175100017510000000000007511777223014103 5ustar abaababaycomepp-0.10.orig/udriver/Makefile.in0100644000175100017510000003130007511777222016137 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ INCLUDES = -I$(top_srcdir)/main -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" -fPIC -DPIC @BAYCOMDRV_TRUE@DRVPROGS = @BAYCOMDRV_TRUE@baycomepp @BAYCOMDRV_FALSE@DRVPROGS = @BAYCOMDRV_TRUE@DRVEXECSCR = @BAYCOMDRV_TRUE@baycomfpga_init.so @BAYCOMDRV_TRUE@DRVLIBS = @BAYCOMDRV_TRUE@libdrvinit.a noinst_LIBRARIES = $(DRVLIBS) libexec_SCRIPTS = $(DRVEXECSCR) man_MANS = baycomepp.8 sbin_PROGRAMS = $(DRVPROGS) libdrvinit_a_SOURCES = \ drvinit.c baycomepp_SOURCES = \ drvresident.c baycomepp_LDADD = \ $(top_builddir)/main/libresident.a $(top_builddir)/main/libmisc.a \ $(DRVLIBOBJS) -ldl baycomepp_LDFLAGS = \ -rdynamic -Wl,-Map -Wl,baycomepp.map -Wl,--rpath -Wl,$(libexecdir) CLEANFILES = baycomepp.map baycomfpga_init.so noinst_HEADERS = \ drv.h EXTRA_DIST = baycomepp.8 baycomepp.initscript mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libdrvinit_a_LIBADD = libdrvinit_a_OBJECTS = drvinit.$(OBJEXT) @BAYCOMDRV_FALSE@sbin_PROGRAMS = @BAYCOMDRV_TRUE@sbin_PROGRAMS = baycomepp$(EXEEXT) PROGRAMS = $(sbin_PROGRAMS) baycomepp_OBJECTS = drvresident.$(OBJEXT) baycomepp_DEPENDENCIES = $(top_builddir)/main/libresident.a \ $(top_builddir)/main/libmisc.a SCRIPTS = $(libexec_SCRIPTS) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ man8dir = $(mandir)/man8 MANS = $(man_MANS) NROFF = nroff HEADERS = $(noinst_HEADERS) DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(libdrvinit_a_SOURCES) $(baycomepp_SOURCES) OBJECTS = $(libdrvinit_a_OBJECTS) $(baycomepp_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps udriver/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 $< # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: libdrvinit.a: $(libdrvinit_a_OBJECTS) $(libdrvinit_a_DEPENDENCIES) -rm -f libdrvinit.a $(AR) cru libdrvinit.a $(libdrvinit_a_OBJECTS) $(libdrvinit_a_LIBADD) $(RANLIB) libdrvinit.a mostlyclean-sbinPROGRAMS: clean-sbinPROGRAMS: -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) distclean-sbinPROGRAMS: maintainer-clean-sbinPROGRAMS: install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(sbindir) @list='$(sbin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) list='$(sbin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done baycomepp$(EXEEXT): $(baycomepp_OBJECTS) $(baycomepp_DEPENDENCIES) @rm -f baycomepp$(EXEEXT) $(LINK) $(baycomepp_LDFLAGS) $(baycomepp_OBJECTS) $(baycomepp_LDADD) $(LIBS) install-libexecSCRIPTS: $(libexec_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libexecdir) @list='$(libexec_SCRIPTS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(libexecdir)/`echo $$p|sed '$(transform)'`"; \ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(libexecdir)/`echo $$p|sed '$(transform)'`; \ else if test -f $(srcdir)/$$p; then \ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(libexecdir)/`echo $$p|sed '$(transform)'`"; \ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(libexecdir)/`echo $$p|sed '$(transform)'`; \ else :; fi; fi; \ done uninstall-libexecSCRIPTS: @$(NORMAL_UNINSTALL) list='$(libexec_SCRIPTS)'; for p in $$list; do \ rm -f $(DESTDIR)$(libexecdir)/`echo $$p|sed '$(transform)'`; \ done install-man8: $(mkinstalldirs) $(DESTDIR)$(man8dir) @list='$(man8_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.8*) 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)$(man8dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ done uninstall-man8: @list='$(man8_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.8*) 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)$(man8dir)/$$inst"; \ rm -f $(DESTDIR)$(man8dir)/$$inst; \ done install-man: $(MANS) @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-man8 uninstall-man: @$(NORMAL_UNINSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-man8 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 = udriver 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 drvinit.o: drvinit.c ../config.h ../main/getopt.h drv.h ../main/fpga.h \ ../main/sysdeps.h ../main/parport.h drvresident.o: drvresident.c ../config.h ../main/getopt.h drv.h \ ../main/fpga.h ../main/sysdeps.h ../main/parport.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-sbinPROGRAMS install-libexecSCRIPTS 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-sbinPROGRAMS uninstall-libexecSCRIPTS \ uninstall-man uninstall: uninstall-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(libexecdir) \ $(DESTDIR)$(mandir)/man8 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]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ mostlyclean-sbinPROGRAMS mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-sbinPROGRAMS \ clean-tags clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-sbinPROGRAMS distclean-tags distclean-generic \ clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile maintainer-clean-sbinPROGRAMS \ 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-sbinPROGRAMS \ distclean-sbinPROGRAMS clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS \ uninstall-sbinPROGRAMS install-sbinPROGRAMS uninstall-libexecSCRIPTS \ install-libexecSCRIPTS install-man8 uninstall-man8 install-man \ uninstall-man 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 baycomfpga_init.so: drvinit.o $(top_builddir)/main/libinit.a $(LIBOBJS) $(CC) -shared -Wl,-soname -Wl,baycomfpga_init.so -o $@ $^ # 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: baycomepp-0.10.orig/udriver/Makefile.am0100644000175100017510000000164107142057312016122 0ustar abaaba## Process this file with automake to produce Makefile.in INCLUDES = -I$(top_srcdir)/main -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" -fPIC -DPIC if BAYCOMDRV DRVPROGS = baycomepp DRVEXECSCR = baycomfpga_init.so DRVLIBS = libdrvinit.a else DRVPROGS = endif noinst_LIBRARIES = $(DRVLIBS) libexec_SCRIPTS = $(DRVEXECSCR) man_MANS = baycomepp.8 sbin_PROGRAMS = $(DRVPROGS) libdrvinit_a_SOURCES = \ drvinit.c baycomfpga_init.so: drvinit.o $(top_builddir)/main/libinit.a $(LIBOBJS) $(CC) -shared -Wl,-soname -Wl,baycomfpga_init.so -o $@ $^ baycomepp_SOURCES = \ drvresident.c baycomepp_LDADD = \ $(top_builddir)/main/libresident.a $(top_builddir)/main/libmisc.a \ $(DRVLIBOBJS) -ldl baycomepp_LDFLAGS = \ -rdynamic -Wl,-Map -Wl,baycomepp.map -Wl,--rpath -Wl,$(libexecdir) CLEANFILES = baycomepp.map baycomfpga_init.so noinst_HEADERS = \ drv.h EXTRA_DIST = baycomepp.8 baycomepp.initscript baycomepp-0.10.orig/udriver/drvinit.c0100644000175100017510000005430107511777042015723 0ustar abaaba/*****************************************************************************/ /* * drvinit.c -- HDLC packet radio modem for EPP/ECP using FPGA usermode driver. * Init code (discarded at runtime). * * Copyright (C) 1998-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_LINUX_IF_H #include #elif defined(HAVE_NET_IF_H) #include #endif #ifdef HAVE_SCHED_H #include #endif #ifdef HAVE_GETOPT_H #include #endif #ifdef HAVE_PTY_H #include #else extern int openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp); #endif #include "drv.h" #include "parport.h" #include "fpga.h" #ifdef HAVE_MKISS #include /* glibc2.0 does not have sockaddr_ax25, ifr.ifr_newname and SIOCSIFNAME */ #include #include #include #include #endif /* --------------------------------------------------------------------- */ #define PIDFILE LOCALSTATEDIR "/run/baycomepp.pid" /* ---------------------------------------------------------------------- */ static unsigned verboselevel = 0; #ifdef HAVE_MKISS struct ifconfig { char ifname[IFNAMSIZ]; ax25_address hwaddr; struct in_addr ipaddr, netmask, broadcast; }; #define IFCONFIGINIT { "", { "" }, { INADDR_NONE }, { INADDR_NONE }, { INADDR_NONE } } #else /* !HAVE_MKISS */ struct ifconfig { char ifname[PATH_MAX]; }; #define IFCONFIGINIT { "" } #endif /* !HAVE_MKISS */ /* ---------------------------------------------------------------------- */ int lprintf(unsigned vl, const char *format, ...) { static const int logprio[] = { LOG_ERR, LOG_INFO }; va_list ap; int r = 0; if (vl > verboselevel) return 0; va_start(ap, format); if (logging) vsyslog((vl > 1) ? LOG_DEBUG : logprio[vl], format, ap); else { r = fprintf(stderr, "baycomepp[%u]: ", getpid()); r += vfprintf(stderr, format, ap); } va_end(ap); return r; } int tprintf(const char *format, ...) { va_list ap; int i; va_start(ap, format); i = vprintf(format, ap); va_end(ap); fflush(stdout); return i; } int idle_callback(unsigned us_delay) { return 1; } /* --------------------------------------------------------------------- */ #ifdef HAVE_MKISS static inline void ifconfigure(struct ifconfig *cfg) { int master, slave, fd, disc = N_AX25, encap = 4; char mbuf[512], *mptr = mbuf; struct sockaddr_ax25 sax25; struct sockaddr_in sin; struct termios tm; struct ifreq ifr; unsigned i; openpty(&master, &slave, NULL, NULL, NULL); /* set pty/tty pair to raw */ memset(&tm, 0, sizeof(tm)); tm.c_cflag = CS8 | CREAD | CLOCAL; if (tcsetattr(master, TCSANOW, &tm)) errstr(SEV_WARNING, "master: tcsetattr"); memset(&tm, 0, sizeof(tm)); tm.c_cflag = CS8 | CREAD | CLOCAL; if (tcsetattr(slave, TCSANOW, &tm)) errstr(SEV_WARNING, "slave: tcsetattr"); if (ioctl(master, TIOCSETD, &disc) == -1) errstr(SEV_FATAL, "ioctl: TIOCSETD"); if (ioctl(master, SIOCGIFNAME, ifr.ifr_name) == -1) errstr(SEV_FATAL, "ioctl: SIOCGIFNAME"); if (ioctl(master, SIOCSIFENCAP, &encap) == -1) errstr(SEV_FATAL, "ioctl: SIOCSIFENCAP"); /* configure interface */ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) errstr(SEV_FATAL, "socket"); #ifdef HAVE_IFRNEWNAME if (cfg->ifname[0]) { strncpy(ifr.ifr_newname, cfg->ifname, sizeof(ifr.ifr_newname)); if (ioctl(fd, SIOCSIFNAME, &ifr) == -1) { errstr(SEV_WARNING, "ioctl: SIOCSIFNAME"); errprintf(SEV_WARNING, "baycomepp: cannot set ifname to %s, using %s (old kernel version?)\n", cfg->ifname, ifr.ifr_name); } else { memcpy(ifr.ifr_name, ifr.ifr_newname, sizeof(ifr.ifr_name)); } } #endif /* HAVE_IFRNEWNAME */ mptr += sprintf(mptr, "ifname %s mtu 256", ifr.ifr_name); ifr.ifr_mtu = 256; if (ioctl(fd, SIOCSIFMTU, &ifr) < 0) errstr(SEV_FATAL, "ioctl: SIOCSIFMTU"); if (cfg->hwaddr.ax25_call[0]) { sax25.sax25_family = AF_AX25; memcpy(&sax25.sax25_call, &cfg->hwaddr, sizeof(sax25.sax25_call)); sax25.sax25_ndigis = 0; memcpy(&ifr.ifr_hwaddr, &sax25, sizeof(ifr.ifr_hwaddr)); if (ioctl(fd, SIOCSIFHWADDR, &ifr) == -1) errstr(SEV_WARNING, "ioctl: SIOCSIFHWADDR"); else { mptr += sprintf(mptr, " hwaddr "); for (i = 0; i < 6; i++) if (sax25.sax25_call.ax25_call[i] != (' ' << 1)) *mptr++ = (sax25.sax25_call.ax25_call[i] >> 1) & 0x7f; mptr += sprintf(mptr, "-%d", (sax25.sax25_call.ax25_call[6] >> 1) & 0x7f); } } if (cfg->ipaddr.s_addr != INADDR_NONE) { sin.sin_family = AF_INET; sin.sin_addr = cfg->ipaddr; memcpy(&ifr.ifr_addr, &sin, sizeof(ifr.ifr_addr)); if (ioctl(fd, SIOCSIFADDR, &ifr) == -1) errstr(SEV_WARNING, "ioctl: SIOCSIFADDR"); else mptr += sprintf(mptr, " ipaddr %s", inet_ntoa(cfg->ipaddr)); } if (cfg->netmask.s_addr != INADDR_NONE) { sin.sin_family = AF_INET; sin.sin_addr = cfg->netmask; memcpy(&ifr.ifr_netmask, &sin, sizeof(ifr.ifr_netmask)); if (ioctl(fd, SIOCSIFNETMASK, &ifr) == -1) errstr(SEV_WARNING, "ioctl: SIOCSIFNETMASK"); else mptr += sprintf(mptr, " netmask %s", inet_ntoa(cfg->netmask)); } if (cfg->broadcast.s_addr != INADDR_NONE) { sin.sin_family = AF_INET; sin.sin_addr = cfg->broadcast; memcpy(&ifr.ifr_broadaddr, &sin, sizeof(ifr.ifr_broadaddr)); if (ioctl(fd, SIOCSIFBRDADDR, &ifr) == -1) errstr(SEV_WARNING, "ioctl: SIOCSIFBRDADDR"); else mptr += sprintf(mptr, " broadcast %s", inet_ntoa(cfg->broadcast)); } if (ioctl(fd, SIOCGIFFLAGS, &ifr) == -1) errstr(SEV_FATAL, "ioctl: SIOCGIFFLAGS"); ifr.ifr_flags &= ~IFF_NOARP; ifr.ifr_flags |= IFF_UP | IFF_RUNNING; if (ioctl(fd, SIOCSIFFLAGS, &ifr) == -1) { printf("flags: 0x%x name %s\n", ifr.ifr_flags, ifr.ifr_name); errstr(SEV_FATAL, "ioctl: SIOCSIFFLAGS"); } close(fd); /* prepare modem state etc. */ state.kissfd = slave; /* don't close the master side! */ fcntl(state.kissfd, F_SETFL, fcntl(state.kissfd, F_GETFL, 0) | O_NONBLOCK); errprintf(SEV_INFO, "baycomepp: %s\n", mbuf); } #else /* !HAVE_MKISS */ static inline void ifconfigure(struct ifconfig *cfg) { int master, slave; struct termios tm; char ttyname[32]; openpty(&master, &slave, ttyname, NULL, NULL); /* set pty/tty pair to raw */ memset(&tm, 0, sizeof(tm)); tm.c_cflag = CS8 | CREAD | CLOCAL; if (tcsetattr(master, TCSANOW, &tm)) errstr(SEV_WARNING, "master: tcsetattr"); memset(&tm, 0, sizeof(tm)); tm.c_cflag = CS8 | CREAD | CLOCAL; if (tcsetattr(slave, TCSANOW, &tm)) errstr(SEV_WARNING, "slave: tcsetattr"); /* make link */ if (cfg->ifname[0]) { //fchmod(slave, 0600); unlink(cfg->ifname); if (symlink(ttyname, cfg->ifname)) errprintf(SEV_WARNING, "baycomepp: symlink error: %s -> %s\n", ttyname, cfg->ifname); } /* prepare modem state etc. */ state.kissfd = master; close(slave); /* don't close the master side! */ fcntl(state.kissfd, F_SETFL, fcntl(state.kissfd, F_GETFL, 0) | O_NONBLOCK); errprintf(SEV_INFO, "baycomepp: starting AX.25 interface %s\n", cfg->ifname ? cfg->ifname : ttyname); } #endif /* !HAVE_MKISS */ /* --------------------------------------------------------------------- */ static void write_pid(pid_t pid) { FILE *f = fopen(PIDFILE, "a"); if (!f) { errprintf(SEV_INFO, "cannot open PID file %s\n", PIDFILE); return; } fprintf(f, "%i\n", pid); fclose(f); } /* --------------------------------------------------------------------- */ static void kill_baycomeppd(void) { FILE *f = fopen(PIDFILE, "r"); pid_t pid; if (!f) { errprintf(SEV_INFO, "cannot open PID file %s\n", PIDFILE); return; } while (fscanf(f, " %i \n", &pid) == 1) if (pid <= 0 || pid == getpid()) errprintf(SEV_INFO, "invalid pid %i\n", pid); else { kill(pid, SIGTERM); errprintf(SEV_INFO, "terminating process %i\n", pid); } fclose(f); unlink(PIDFILE); } /* --------------------------------------------------------------------- */ static void init(int mode) { unsigned char eio[2048]; u_int8_t stat; u_int8_t statecp[6]; int cnt, icnt; struct timeval tv1, tv2; unsigned long usec; unsigned bytecnt = 0; /* we need this here so that the bitrate autoprobe works correctly */ /* * set the process to realtime privs */ #ifdef HAVE_SCHED_H { struct sched_param schp; memset(&schp, 0, sizeof(schp)); schp.sched_priority = sched_get_priority_min(SCHED_RR)+1; #if 1 if (sched_setscheduler(0, SCHED_RR, &schp) != 0) errstr(SEV_ERROR, "sched_setscheduler"); #endif } #endif /* HAVE_SCHED_H */ /* * lock memory down */ if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) errstr(SEV_ERROR, "mlockall"); switch(mode) { case MODE_EPP: if (adapter_start_epp(&state.config)) exit(1); /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errret; gettimeofday(&tv1, NULL); for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* try to determine the FIFO count if in extended mode */ if (state.config.extstat) { eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|1; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 2) != 2) goto errret; icnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 1) != 1) goto errret; icnt &= 0x7fff; } else { /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icnt = 0; break; case EPP_NRAEF: icnt = 1025; break; case 0: icnt = 1793; break; default: icnt = 256; break; } } /* rx */ while (icnt > 0) { cnt = icnt; if (cnt > sizeof(eio)) cnt = sizeof(eio); icnt -= cnt; bytecnt += cnt; if (parport_epp_read_data(eio, cnt) != cnt) goto errret; } gettimeofday(&tv2, NULL); usec = ((60 + tv2.tv_sec - tv1.tv_sec) % 60) * 1000000 + tv2.tv_usec - tv1.tv_usec; if (usec >= 500000) break; usleep(8000); /* must be more than 2ms, Linux busy-waits up to 2ms! */ } break; case MODE_ECP: if (adapter_start_ecp(&state.config)) exit(1); eio[0] = 0xaf; /* reset register: all reset */ eio[1] = 0xa0; /* reset register: terminate reset */ eio[2] = 0xb0; if (parport_ecp_write_addr(eio, 3) != 3) goto errret; gettimeofday(&tv1, NULL); for (;;) { eio[0] = 0x81; if (parport_ecp_write_addr(eio, 1) != 1) goto errret; if (parport_ecp_read_data(statecp, 6) != 6) goto errret; eio[0] = 0x80; if (parport_ecp_write_addr(eio, 1) != 1) goto errret; icnt = ((unsigned)statecp[2] << 8) | statecp[1]; /* read */ while (icnt > 0) { cnt = icnt; if (cnt > sizeof(eio)) cnt = sizeof(eio); icnt -= cnt; bytecnt += cnt; eio[0] = 0xc0 | (cnt & 0xf); eio[1] = 0xd0 | ((cnt >> 4) & 0xf); eio[2] = 0xe0 | ((cnt >> 8) & 0xf); if (parport_ecp_write_addr(eio, 3) != 3) goto errret; if (parport_ecp_read_data(eio, cnt) != cnt) goto errret; } gettimeofday(&tv2, NULL); usec = ((60 + tv2.tv_sec - tv1.tv_sec) % 60) * 1000000 + tv2.tv_usec - tv1.tv_usec; if (usec >= 500000) break; usleep(8000); /* must be more than 2ms, Linux busy-waits up to 2ms! */ } break; case MODE_EPPAFSK: state.config.bitrate = 1200; if (adapter_start_eppafsk(&state.config)) exit(1); /* reset modem */ eio[0] = 0x00; eio[1] = 0x18; if (parport_epp_write_addr(eio, 2) != 2) goto errret; gettimeofday(&tv1, NULL); for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* determine the FIFO count */ eio[0] = 0x1a; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 1) != 1) goto errret; icnt = eio[0] & 0x1f; eio[0] = 0x18; if (parport_epp_write_addr(eio, 1) != 1) goto errret; /* rx */ if (icnt > 0) { if (parport_epp_read_data(eio, icnt) != icnt) goto errret; bytecnt += icnt; } gettimeofday(&tv2, NULL); usec = ((60 + tv2.tv_sec - tv1.tv_sec) % 60) * 1000000 + tv2.tv_usec - tv1.tv_usec; if (usec >= 500000) break; usleep(8000); /* must be more than 2ms, Linux busy-waits up to 2ms! */ } break; case MODE_EPPCONV: /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errret; gettimeofday(&tv1, NULL); for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* try to determine the FIFO count if in extended mode */ /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icnt = 0; break; case EPP_NRAEF: icnt = 1025; break; case 0: icnt = 1793; break; default: icnt = 256; break; } /* rx */ while (icnt > 0) { cnt = icnt; if (cnt > sizeof(eio)) cnt = sizeof(eio); icnt -= cnt; bytecnt += cnt; if (parport_epp_read_data(eio, cnt) != cnt) goto errret; } gettimeofday(&tv2, NULL); usec = ((60 + tv2.tv_sec - tv1.tv_sec) % 60) * 1000000 + tv2.tv_usec - tv1.tv_usec; if (usec >= 500000) break; usleep(8000); /* must be more than 2ms, Linux busy-waits up to 2 ms! */ } for (icnt = 0; icnt < 256; icnt++) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; if (!(stat & EPP_NREF)) break; if (parport_epp_read_data(eio, 1) != 1) goto errret; bytecnt++; } break; default: exit(1); } state.access.bitrate = (bytecnt * 8000000ULL + usec / 2ULL) / usec; state.access.bitrateby25 = (state.access.bitrate + 12) / 25; errprintf(SEV_INFO, "autoprobed bitrate: %u\n", state.access.bitrate); return; errret: errprintf(SEV_FATAL, "Modem timeout\n"); } static void init2(struct ifconfig *ifcfg) { ifconfigure(ifcfg); /* * sigusr1 is used to display the current state */ if (signal(SIGUSR1, sig_usr1) == SIG_ERR) errstr(SEV_ERROR, "signal"); if (signal(SIGUSR2, sig_usr2) == SIG_ERR) errstr(SEV_ERROR, "signal"); if (signal(SIGHUP, SIG_IGN) == SIG_ERR) errstr(SEV_ERROR, "signal"); if (signal(SIGTERM, sighandler) == SIG_ERR) errstr(SEV_ERROR, "signal"); /* start the modem */ state.access.state = tx_idle; state.access.slotcnt = 1; } /* --------------------------------------------------------------------- */ /* * convert_call_entry is taken from the ax25 library */ static inline int convert_call_entry(const char *name, char *buf) { int ct = 0; int ssid = 0; const char *p = name; char c; while (ct < 6) { c = toupper(*p); if (c == '-' || c == '\0') break; if (!isalnum(c)) { fprintf(stderr, "baycomepp: invalid symbol in callsign %s\n", name); return -1; } buf[ct] = c << 1; p++; ct++; } for ( ; ct < 6; ct++) buf[ct] = ' ' << 1; if (*p != '\0') { p++; if (sscanf(p, "%d", &ssid) != 1 || ssid < 0 || ssid > 15) { fprintf(stderr, "baycomepp: SSID must follow '-' and " "be numeric in the range 0-15 - %s\n", name); return -1; } } buf[6] = ((ssid + '0') << 1) & 0x1E; return 0; } /* --------------------------------------------------------------------- */ int driver_init(int argc, char *argv[]) { static const struct option long_options[] = { { "epp", 0, 0, 0x400+MODE_EPP }, { "ecp", 0, 0, 0x400+MODE_ECP }, { "eppafsk", 0, 0, 0x400+MODE_EPPAFSK }, { "eppconv", 0, 0, 0x400+MODE_EPPCONV }, { "log", 0, 0, 'l' }, { "kill", 0, 0, 'k' }, { "mode", 1, 0, 'm' }, { "port", 1, 0, 'p' }, { "verbose", 0, 0, 'v' }, { "no-daemon", 0, 0, 'n' }, #ifdef HAVE_MKISS #ifdef HAVE_IFRNEWNAME { "ifname", 1, 0, 0x500 }, #endif /* HAVE_IFRNEWNAME */ { "hwaddr", 1, 0, 0x501 }, { "ipaddr", 1, 0, 0x502 }, { "netmask", 1, 0, 0x503 }, { "broadcast", 1, 0, 0x504 }, #else /* !HAVE_MKISS */ { "iflink", 1, 0, 0x600 }, #endif /* !HAVE_MKISS */ { 0, 0, 0, 0} }; struct ifconfig ifcfg = IFCONFIGINIT; int c; int err = 0; pid_t pid; int daemon = 1; int mode = MODE_EPP; int pfds[2]; unsigned iobase = 0x378; printf("baycomepp v" VERSION " (c) 1998-2000,2002 by Thomas Sailer, HB9JNX/AE4WA" #ifdef EPPLONG " (epplong)" #endif #ifdef EPPEMUL " (eppemul)" #endif "\n"); /* initialize state struct */ memset(&state, 0, sizeof(state)); state.hrx.bufptr = state.hrx.buf; state.config = (struct adapter_config) { 19666600, 9600, 0, 0, 0, 1, 1, 0, 1 }; state.chaccesspar = (struct chaccesspar) { 10, 10, 40, 3, 0 }; /* parse arguments */ while ((c = getopt_long(argc, argv, "lknvm:p:caz", long_options, NULL)) != EOF) switch (c) { case 'l': logging = 1; break; case 'k': kill_baycomeppd(); exit(0); case 'n': daemon = 0; logpackets = 1; break; case 'v': verboselevel++; break; case 'm': parseconfig(&state.config, optarg); state.config.extstat = 1; break; case 'p': iobase = strtoul(optarg, NULL, 0); if (iobase <= 0 || iobase >= 0x3f8) err++; break; case 0x400+MODE_EPPAFSK: case 'a': mode = MODE_EPPAFSK; break; case 0x400+MODE_ECP: case 'c': mode = MODE_ECP; break; case 0x400+MODE_EPPCONV: case 'z': mode = MODE_EPPCONV; break; case 0x400+MODE_EPP: mode = MODE_EPP; break; #ifdef HAVE_MKISS case 0x500: /* ifname */ if (strlen(optarg) >= IFNAMSIZ) { fprintf(stderr, "baycomepp: ifname \"%s\"too long\n", optarg); err++; } strncpy(ifcfg.ifname, optarg, sizeof(ifcfg.ifname)-1); ifcfg.ifname[sizeof(ifcfg.ifname)-1] = 0; break; case 0x501: /* hwaddr */ if (convert_call_entry(optarg, ifcfg.hwaddr.ax25_call)) err++; break; case 0x502: /* ipaddr */ if (!inet_aton(optarg, &ifcfg.ipaddr)) { fprintf(stderr, "baycomepp: invalid ip address \"%s\"\n", optarg); err++; } break; case 0x503: /* netmask */ if (!inet_aton(optarg, &ifcfg.netmask)) { fprintf(stderr, "baycomepp: invalid netmask \"%s\"\n", optarg); err++; } break; case 0x504: /* broadcast */ if (!inet_aton(optarg, &ifcfg.broadcast)) { fprintf(stderr, "baycomepp: invalid broadcast address \"%s\"\n", optarg); err++; } break; #else /* !HAVE_MKISS */ case 0x600: /* iflink */ strncpy(ifcfg.ifname, optarg, sizeof(ifcfg.ifname)-1); ifcfg.ifname[sizeof(ifcfg.ifname)-1] = 0; break; #endif /* !HAVE_MKISS */ default: err++; break; } if (err) { fprintf(stderr, "usage: baycomepp [-c ] [-l] [-k] [-n] [-v] [-p ] [-m ]\n" #ifdef HAVE_MKISS " [--ifname=] [--hwaddr=] [--ipaddr=]\n" " [--netmask=] [--broadcast=]\n" #else /* !HAVE_MKISS */ " [--iflink=]\n" #endif /* !HAVE_MKISS */ " mode options:\n" " intclk uses FPGA internal clock; DON'T use if an external osc is on board\n" " extclk uses the external oscillator; recommended if the internal modem is used\n" " intmodem uses the internal modem\n" " extmodem uses a DF9IC type modem connected to the high speed modem connector\n" " fclk= sets the FPGA clock frequency (default 19.6666 MHz)\n" " bitrate= sets the bitrate for the FSK modem\n" " loopback sets an internal modem loopback\n" " extstat allows extended status readback\n" " noextstat disallows extended status readback\n"); exit(1); } if (parport_init_direct(iobase)) errprintf(SEV_FATAL, "no parport found at 0x%x\n", iobase); init(mode); if (!daemon) { setsid(); /* become a process group leader and drop controlling terminal */ fclose(stdin); /* no more standard in */ if (logging) openlog(progname, LOG_PID, LOG_DAEMON); init2(&ifcfg); return mode; } if (pipe(pfds)) { errstr(SEV_FATAL, "pipe\n"); exit(1); } switch (pid = fork()) { case -1: errstr(SEV_FATAL, "fork\n"); exit(1); case 0: /* child process */ close(pfds[0]); setsid(); /* become a process group leader and drop controlling terminal */ fclose(stdin); /* no more standard in */ if (logging) openlog(progname, LOG_PID, LOG_DAEMON); init2(&ifcfg); if (write(pfds[1], &mode, sizeof(mode)) != sizeof(mode)) errstr(SEV_ERROR, "write\n"); close(pfds[1]); return mode; default: close(pfds[1]); err = read(pfds[0], &c, sizeof(c)); if (err != sizeof(c)) errprintf(SEV_FATAL, "baycomepp: modem init failed (read: %d errno: %d %s)\n", err, errno, strerror(errno)); write_pid(pid); fprintf(stderr, "baycomepp: child pid: %u\n", pid); break; } exit(0); } baycomepp-0.10.orig/udriver/drvresident.c0100644000175100017510000007505107511775402016600 0ustar abaaba/*****************************************************************************/ /* * drvresident.c -- HDLC packet radio modem for EPP/ECP using FPGA usermode driver. * * Copyright (C) 1998-2000, 2002 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include #include #include #include #include "drv.h" #include "parport.h" /* ---------------------------------------------------------------------- */ int logging = 0; int logpackets = 0; struct baycomepp_state state; const char *progname = "baycomepp"; /* --------------------------------------------------------------------- */ /* * Logging functions */ void errprintf(int severity, const char *fmt, ...) { va_list args; va_start(args, fmt); if (logging) { char tmp[512]; vsnprintf(tmp, sizeof(tmp), fmt, args); syslog(severity, tmp); } else { fprintf(stderr, "baycomepp[%u]: ", getpid()); vfprintf(stderr, fmt, args); } va_end(args); if (severity <= SEV_FATAL) exit(1); } /* --------------------------------------------------------------------- */ void errstr(int severity, const char *st) { errprintf(severity, "%s: %s\n", st, strerror(errno)); } /* --------------------------------------------------------------------- */ void epp_error(const char *msg) { errprintf(SEV_FATAL, msg); } /* --------------------------------------------------------------------- */ /* * the CRC routines are stolen from WAMPES * by Dieter Deyke */ const u_int16_t crc_ccitt_table[0x100] = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; /* --------------------------------------------------------------------- */ extern inline u_int16_t calc_crc_ccitt(const u_int8_t *buffer, int len) { u_int16_t crc = 0xffff; for (;len>0;len--) crc = (crc >> 8) ^ crc_ccitt_table[(crc ^ *buffer++) & 0xff]; crc ^= 0xffff; return crc; } extern inline void append_crc_ccitt(u_int8_t *buffer, int len) { u_int16_t crc = calc_crc_ccitt(buffer, len); *buffer++ = crc; *buffer++ = crc >> 8; } extern inline int check_crc_ccitt(const u_int8_t *buffer, int len) { u_int16_t crc = calc_crc_ccitt(buffer, len); return (crc & 0xffff) == 0x0f47; } /* ---------------------------------------------------------------------- */ #define ADDRXCH(x) \ do { \ state.kissout.b[wr] = (x); \ wr = (wr + 1) % KISSOUTBUF_SIZE; \ if (wr == rd) \ goto errout; \ total++; \ } while (0); static size_t rxpacket(const struct iovec *vector, size_t count) { u_int8_t *bp; size_t len; size_t total = 0; unsigned wr = state.kissout.wr; unsigned rd = state.kissout.rd; ADDRXCH(KISS_FEND); for (; count > 0; count--, vector++) { for (bp = vector->iov_base, len = vector->iov_len; len > 0; len--, bp++) { if (*bp == KISS_FEND) { ADDRXCH(KISS_FESC); ADDRXCH(KISS_TFEND); } else if (*bp == KISS_FESC) { ADDRXCH(KISS_FESC); ADDRXCH(KISS_TFESC); } else { ADDRXCH(*bp); } } } if (total <= 1) return 0; ADDRXCH(KISS_FEND); state.kissout.wr = wr; state.stat.kiss_out++; return total; errout: state.stat.kiss_outerr++; return 0; } #undef ADDRXCH /* --------------------------------------------------------------------- */ /* * high performance HDLC encoder * yes, it's ugly, but generates pretty good code */ #define ENCODEITERA(j) \ ({ \ if (!(notbitstream & (0x1f0 << j))) \ goto stuff##j; \ encodeend##j: \ }) #define ENCODEITERB(j) \ ({ \ stuff##j: \ bitstream &= ~(0x100 << j); \ bitbuf = (bitbuf & (((2 << j) << numbit) - 1)) | \ ((bitbuf & ~(((2 << j) << numbit) - 1)) << 1); \ numbit++; \ notbitstream = ~bitstream; \ goto encodeend##j; \ }) static int hdlc_enqueue(u_int8_t *pkt, int len) { unsigned bitstream, notbitstream, bitbuf, numbit, crc; u_int8_t crcarr[2]; unsigned wr = state.htx.wr; state.htx.buf[wr] = 0x7e; wr = (wr + 1) % TXBUFFER_SIZE; if (wr == state.htx.rd) return -1; crc = calc_crc_ccitt(pkt, len); crcarr[0] = crc; crcarr[1] = crc >> 8; bitstream = bitbuf = numbit = 0; while (len > -2) { bitstream >>= 8; bitstream |= ((unsigned int)*pkt) << 8; bitbuf |= ((unsigned int)*pkt) << numbit; notbitstream = ~bitstream; pkt++; len--; if (!len) pkt = crcarr; ENCODEITERA(0); ENCODEITERA(1); ENCODEITERA(2); ENCODEITERA(3); ENCODEITERA(4); ENCODEITERA(5); ENCODEITERA(6); ENCODEITERA(7); goto enditer; ENCODEITERB(0); ENCODEITERB(1); ENCODEITERB(2); ENCODEITERB(3); ENCODEITERB(4); ENCODEITERB(5); ENCODEITERB(6); ENCODEITERB(7); enditer: numbit += 8; while (numbit >= 8) { state.htx.buf[wr] = bitbuf; wr = (wr + 1) % TXBUFFER_SIZE; if (wr == state.htx.rd) return -1; bitbuf >>= 8; numbit -= 8; } } bitbuf |= 0x7e7e << numbit; numbit += 16; while (numbit >= 8) { state.htx.buf[wr] = bitbuf; wr = (wr + 1) % TXBUFFER_SIZE; if (wr == state.htx.rd) return -1; bitbuf >>= 8; numbit -= 8; } state.htx.wr = wr; return 0; } /* ---------------------------------------------------------------------- */ static void do_rxpacket(void) { static const u_int8_t kissdata = KISS_CMD_DATA; struct iovec iov[2]; char buf[512]; if (state.hrx.bufcnt < 4) return; if (!check_crc_ccitt(state.hrx.buf, state.hrx.bufcnt)) return; iov[0].iov_len = 1; iov[0].iov_base = &kissdata; iov[1].iov_len = state.hrx.bufcnt-2; iov[1].iov_base = state.hrx.buf; rxpacket(iov, 2); state.stat.pkt_in++; if (!logpackets) return; if (snprintpkt(buf, sizeof(buf), state.hrx.buf, state.hrx.bufcnt-2) != -1) printf("rx: %s", buf); } #define DECODEITERA(j) \ ({ \ if (!(notbitstream & (0x0fc << j))) /* flag or abort */ \ goto flgabrt##j; \ if ((bitstream & (0x1f8 << j)) == (0xf8 << j)) /* stuffed bit */ \ goto stuff##j; \ enditer##j: \ }) #define DECODEITERB(j) \ ({ \ flgabrt##j: \ if (!(notbitstream & (0x1fc << j))) { /* abort received */ \ stat = 0; \ goto enditer##j; \ } \ if ((bitstream & (0x1fe << j)) != (0x0fc << j)) /* flag received */ \ goto enditer##j; \ if (stat) \ do_rxpacket(); \ state.hrx.bufcnt = 0; \ state.hrx.bufptr = state.hrx.buf; \ stat = 1; \ numbits = 7-j; \ goto enditer##j; \ stuff##j: \ numbits--; \ bitbuf = (bitbuf & ((~0xff) << j)) | ((bitbuf & ~((~0xff) << j)) << 1); \ goto enditer##j; \ }) /* --------------------------------------------------------------------- */ static void hdlc_receive(u_int8_t *pkt, int len) { unsigned int bitbuf, notbitstream, bitstream, numbits, stat; state.stat.bytes_in += len; numbits = state.hrx.numbits; stat = state.hrx.state; bitstream = state.hrx.bitstream; bitbuf = state.hrx.bitbuf; for (; len > 0; len--, pkt++) { bitstream >>= 8; bitstream |= ((unsigned int)*pkt) << 8; bitbuf >>= 8; bitbuf |= ((unsigned int)*pkt) << 8; numbits += 8; notbitstream = ~bitstream; DECODEITERA(0); DECODEITERA(1); DECODEITERA(2); DECODEITERA(3); DECODEITERA(4); DECODEITERA(5); DECODEITERA(6); DECODEITERA(7); goto enddec; DECODEITERB(0); DECODEITERB(1); DECODEITERB(2); DECODEITERB(3); DECODEITERB(4); DECODEITERB(5); DECODEITERB(6); DECODEITERB(7); enddec: while (stat && numbits >= 8) { if (state.hrx.bufcnt >= RXBUFFER_SIZE) { stat = 0; } else { *(state.hrx.bufptr)++ = bitbuf >> (16-numbits); state.hrx.bufcnt++; numbits -= 8; } } } state.hrx.numbits = numbits; state.hrx.state = stat; state.hrx.bitstream = bitstream; state.hrx.bitbuf = bitbuf; } /* ---------------------------------------------------------------------- */ static u_int16_t random_seed; extern inline u_int16_t random_num(void) { random_seed = 28629 * random_seed + 157; return random_seed; } /* --------------------------------------------------------------------- */ /* * here we do the channel access algorithm, and process calibration bytes */ extern inline void arbitrate(void) { if (state.htx.rd == state.htx.wr) return; if (!state.chaccesspar.fulldup) { if (state.access.slotcnt > 0) return; state.access.slotcnt = state.chaccesspar.slottime; if (state.access.dcd) return; if ((random_num() % 256) > state.chaccesspar.ppersist) return; } state.access.state = tx_keyup; state.access.flagcnt = (state.access.bitrateby25 * state.chaccesspar.txdelay) >> 5; state.stat.ptt_keyed++; } static int hdlc_transmit(u_int8_t *pkt, int len) { int ret = 0, i; while (len > 0) { switch (state.access.state) { case tx_keyup: i = state.access.flagcnt; if (i <= 0) { state.access.state = tx_data; break; } if (i > len) i = len; state.access.flagcnt -= i; memset(pkt, 0x7e, i); ret += i; pkt += i; len -= i; break; case tx_data: if (state.htx.rd == state.htx.wr) { state.access.state = tx_tail; state.access.flagcnt = (state.access.bitrateby25 * state.chaccesspar.txtail) >> 5; break; } i = ((state.htx.rd > state.htx.wr) ? TXBUFFER_SIZE : state.htx.wr) - state.htx.rd; if (i > len) i = len; memcpy(pkt, state.htx.buf + state.htx.rd, i); state.htx.rd = (state.htx.rd + i) % TXBUFFER_SIZE; ret += i; pkt += i; len -= i; break; case tx_tail: i = state.access.flagcnt; if (i <= 0) { if (state.access.ptt) return ret; state.access.state = tx_idle; state.access.slotcnt = state.chaccesspar.slottime; break; } if (i > len) i = len; state.access.flagcnt -= i; memset(pkt, 0x7e, i); ret += i; pkt += i; len -= i; break; default: arbitrate(); if (state.access.state == tx_keyup) break; i = state.access.calib; if (i <= 0) return ret; if (i > len) i = len; state.access.calib -= i; memset(pkt, 0, i); ret += i; pkt += i; len -= i; break; } } return ret; } /* --------------------------------------------------------------------- */ void sighandler(int sig) { errprintf(LOG_INFO, "terminating on receiving signal %i\n", sig); reset_modem(); exit(0); } /* --------------------------------------------------------------------- */ void sig_usr2(int sig) { if (state.access.calib > 0) { errprintf(LOG_DEBUG, "terminating calibration\n"); state.access.calib = 0; } else { errprintf(LOG_DEBUG, "calibrating for 1min\n"); state.access.calib = state.access.bitrate * (60/8); } if (signal(SIGUSR2, sig_usr2) == SIG_ERR) errstr(SEV_ERROR, "signal"); } /* --------------------------------------------------------------------- */ void sig_usr1(int sig) { printf("Statistics:\n KISS out: %ld errors: %ld in: %ld errors: %ld\n" " Packets out: %ld in: %ld\n" " Bytes out: %ld in: %ld\n" " PTT:%c DCD:%c PTT keyed: %ld\n" " ch par: txdel %u slot %u ppersist %u txtail %u fulldup %u\n" " status 0x%02x icnt %d %d %d ocnt %d %d %d IntRate: %d\n", state.stat.kiss_out, state.stat.kiss_outerr, state.stat.kiss_in, state.stat.kiss_inerr, state.stat.pkt_out, state.stat.pkt_in, state.stat.bytes_out, state.stat.bytes_in, state.access.ptt ? 'P' : '-', state.access.dcd ? 'D' : '-', state.stat.ptt_keyed, state.chaccesspar.txdelay, state.chaccesspar.slottime, state.chaccesspar.ppersist, state.chaccesspar.txtail, state.chaccesspar.fulldup, state.stat.status, state.stat.icnt1, state.stat.icnt2, state.stat.icnt3, state.stat.ocnt1, state.stat.ocnt2, state.stat.ocnt3, state.stat.intcnt); printf("TX: rd %d wr %d st: %d slotcnt: %d\n", state.htx.rd, state.htx.wr, state.access.state, state.access.slotcnt); if (signal(SIGUSR1, sig_usr1) == SIG_ERR) errstr(SEV_ERROR, "signal"); } /* ---------------------------------------------------------------------- */ /* * Process KISS io */ extern inline void process_pkt(u_int8_t *pkt, unsigned int len) { char buf[512]; if (len < 2) return; switch (pkt[0]) { case KISS_CMD_DATA: if (hdlc_enqueue(pkt+1, len-1)) state.stat.pkt_outerr++; else state.stat.pkt_out++; if (!logpackets) return; if (snprintpkt(buf, sizeof(buf), pkt+1, len-1) != -1) printf("tx: %s", buf); return; case KISS_CMD_TXDELAY: state.chaccesspar.txdelay = pkt[1]; errprintf(SEV_INFO, "kiss: txdelay = %ums\n", state.chaccesspar.txdelay*10); return; case KISS_CMD_SLOTTIME: state.chaccesspar.slottime = pkt[1]; errprintf(SEV_INFO, "kiss: slottime = %ums\n", state.chaccesspar.slottime*10); return; case KISS_CMD_PPERSIST: state.chaccesspar.ppersist = pkt[1]; errprintf(SEV_INFO, "kiss: ppersist = %u/256\n", state.chaccesspar.ppersist); return; case KISS_CMD_TXTAIL: state.chaccesspar.txtail = pkt[1]; errprintf(SEV_INFO, "kiss: txtail = %ums\n", state.chaccesspar.txtail*10); return; case KISS_CMD_FULLDUP: state.chaccesspar.fulldup = !!pkt[1]; errprintf(SEV_INFO, "kiss: %sduplex\n", state.chaccesspar.fulldup ? "full" : "half"); return; default: errprintf(SEV_WARNING, "unknown kiss packet: 0x%02x 0x%02x\n", pkt[0], pkt[1]); return; } } /* --------------------------------------------------------------------- */ /* we decode on the fly in place */ extern inline void kiss_decode(u_int8_t *b, int len) { int nlen = 0; u_int8_t *p1 = b, *p2 = b; while (len > 0) { if (*p1 != KISS_FESC) { *p2++ = *p1++; nlen++; len--; continue; } if (len < 2) goto err; /* invalid escape */ if (p1[1] == KISS_TFEND) *p2++ = KISS_FEND; else if (p1[1] == KISS_TFESC) *p2++ = KISS_FESC; else goto err; /* invalid escape */ nlen++; p1 += 2; len -= 2; } process_pkt(b, nlen); state.stat.kiss_in++; return; err: state.stat.kiss_inerr++; } /* --------------------------------------------------------------------- */ extern inline void kiss_read(void) { char *cp1, *cp2, *endp; int i; if (state.kissin.ptr >= KISSINBUF_SIZE) /* discard oversized packets */ state.kissin.ptr = 0; i = read(state.kissfd, state.kissin.b + state.kissin.ptr, KISSINBUF_SIZE - state.kissin.ptr); if (i < 0) { if (errno == EAGAIN) return; errstr(SEV_FATAL, "read"); } if (i == 0) return; state.kissin.ptr += i; endp = state.kissin.b + state.kissin.ptr; cp1 = memchr(state.kissin.b, KISS_FEND, state.kissin.ptr); while (cp1) { cp2 = memchr(cp1+1, KISS_FEND, endp - cp1 - 1); if (!cp2) { state.kissin.ptr = endp-cp1; memmove(state.kissin.b, cp1, state.kissin.ptr); return; } kiss_decode(cp1+1, cp2-cp1-1); cp1 = cp2; } } /* ---------------------------------------------------------------------- */ extern inline void kiss_write(void) { struct iovec iov[2]; int i; if (state.kissout.rd == state.kissout.wr) return; if (state.kissout.rd > state.kissout.wr) { iov[0].iov_len = KISSOUTBUF_SIZE - state.kissout.rd; iov[0].iov_base = state.kissout.b + state.kissout.rd; iov[1].iov_len = state.kissout.wr; iov[1].iov_base = state.kissout.b; i = writev(state.kissfd, iov, 2); } else i = write(state.kissfd, state.kissout.b + state.kissout.rd, state.kissout.wr - state.kissout.rd); if (i < 0) { if (errno == EAGAIN) return; errstr(SEV_FATAL, "read"); } state.kissout.rd = (state.kissout.rd + i) % KISSOUTBUF_SIZE; } /* ---------------------------------------------------------------------- */ static void handle_kiss(void) { kiss_read(); kiss_write(); /* reschedule */ usleep(8000); /* must be more than 2ms, Linux busy-waits up to 2ms! */ state.stat.intcnt++; state.access.slotcnt--; } /* ---------------------------------------------------------------------- */ /* * EPP Mode */ /* _MUST_ not return! */ static void epp_modem(void) { unsigned char eio[1024]; u_int8_t stat; int cnt, icnt, ocnt, icntx, ocntx; /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errret; for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* determine TX fifo size from status bits */ switch (stat & (EPP_NTAEF|EPP_NTHF)) { case EPP_NTHF: ocntx = 2048 - 256; break; case EPP_NTAEF: ocntx = 2048 - 1793; break; case 0: ocntx = 0; break; default: ocntx = 2048 - 1025; break; } /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icntx = 0; break; case EPP_NRAEF: icntx = 1025; break; case 0: icntx = 1793; break; default: icntx = 256; break; } /* try to determine the FIFO count if in extended mode */ if (state.config.extstat) { eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|1; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 2) != 2) goto errret; icnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|2; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 2) != 2) goto errret; ocnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 1) != 1) goto errret; ocnt = 16384 - (ocnt & 0x7fff); icnt &= 0x7fff; } else { ocnt = ocntx; icnt = icntx; } /* update status */ state.stat.icnt3 = state.stat.icnt1; state.stat.icnt1 = icnt; state.stat.icnt2 = icntx; state.stat.ocnt3 = state.stat.ocnt1; state.stat.ocnt1 = ocnt; state.stat.ocnt2 = ocntx; state.stat.status = stat; state.access.dcd = !(stat & EPP_DCDBIT); state.access.ptt = !!(stat & EPP_PTTBIT); /* rx */ while (icnt > 0) { cnt = icnt; if (cnt > sizeof(eio)) cnt = sizeof(eio); icnt -= cnt; if (parport_epp_read_data(eio, cnt) != cnt) goto errret; hdlc_receive(eio, cnt); } /* tx */ if (ocnt > 0) { if (ocnt > sizeof(eio)) ocnt = sizeof(eio); cnt = hdlc_transmit(eio, ocnt); if (parport_epp_write_data(eio, cnt) != cnt) goto errret; } /* KISS and reschedule */ handle_kiss(); } errret: errprintf(SEV_FATAL, "Modem timeout\n"); } /* ---------------------------------------------------------------------- */ /* * ECP Mode */ /* _MUST_ not return! */ static void ecp_modem(void) { u_int8_t data[1024]; unsigned char stat[6]; int cnt, icnt, ocnt; data[0] = 0xaf; /* reset register: all reset */ data[1] = 0xa0; /* reset register: terminate reset */ data[2] = 0xb0; if (parport_ecp_write_addr(data, 3) != 3) goto errret; for (;;) { data[0] = 0x81; if (parport_ecp_write_addr(data, 1) != 1) goto errret; if (parport_ecp_read_data(stat, 6) != 6) goto errret; data[0] = 0x80; if (parport_ecp_write_addr(data, 1) != 1) goto errret; icnt = ((unsigned)stat[2] << 8) | stat[1]; ocnt = ((unsigned)stat[4] << 8) | stat[3]; /* update status */ state.stat.icnt3 = state.stat.icnt2; state.stat.icnt2 = state.stat.icnt1; state.stat.icnt1 = icnt; state.stat.ocnt3 = state.stat.ocnt2; state.stat.ocnt2 = state.stat.ocnt1; state.stat.ocnt1 = ocnt; state.stat.status = stat[0]; state.access.dcd = !(stat[0] & 0x80); state.access.ptt = !(stat[0] & 0x40); /* read */ while (icnt > 0) { cnt = icnt; if (cnt > sizeof(data)) cnt = sizeof(data); icnt -= cnt; data[0] = 0xc0 | (cnt & 0xf); data[1] = 0xd0 | ((cnt >> 4) & 0xf); data[2] = 0xe0 | ((cnt >> 8) & 0xf); if (parport_ecp_write_addr(data, 3) != 3) goto errret; if (parport_ecp_read_data(data, cnt) != cnt) goto errret; hdlc_receive(data, cnt); } /* write */ if (ocnt < 8192) { /* fixme */ cnt = 8192 - ocnt; if (cnt > sizeof(data)) cnt = sizeof(data); cnt = hdlc_transmit(data, cnt); if (parport_ecp_write_data(data, cnt) != cnt) goto errret; } /* KISS and reschedule */ handle_kiss(); } errret: errprintf(SEV_FATAL, "Modem timeout\n"); } /* ---------------------------------------------------------------------- */ /* * EPP AFSK Mode */ /* _MUST_ not return! */ static void eppafsk_modem(void) { unsigned char eio[32]; u_int8_t stat; int cnt, icnt, ocnt; /* reset modem */ eio[0] = 0x00; eio[1] = 0x18; if (parport_epp_write_addr(eio, 2) != 2) goto errret; for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* determine the FIFO count */ eio[0] = 0x19; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 1) != 1) goto errret; ocnt = 0x10 - (eio[0] & 0x1f); eio[0] = 0x1a; if (parport_epp_write_addr(eio, 1) != 1) goto errret; if (parport_epp_read_addr(eio, 1) != 1) goto errret; icnt = eio[0] & 0x1f; eio[0] = 0x18; if (parport_epp_write_addr(eio, 1) != 1) goto errret; /* update status */ state.stat.icnt3 = state.stat.icnt2; state.stat.icnt2 = state.stat.icnt1; state.stat.icnt1 = icnt; state.stat.ocnt3 = state.stat.ocnt2; state.stat.ocnt2 = state.stat.ocnt1; state.stat.ocnt1 = ocnt; state.stat.status = stat; state.access.dcd = !(stat & 0x80); state.access.ptt = !(stat & 0x40); /* rx */ if (icnt > 0) { if (parport_epp_read_data(eio, icnt) != icnt) goto errret; hdlc_receive(eio, icnt); } /* tx */ if (ocnt > 0) { cnt = hdlc_transmit(eio, ocnt); if (parport_epp_write_data(eio, cnt) != cnt) goto errret; } /* KISS and reschedule */ handle_kiss(); } errret: errprintf(SEV_FATAL, "Modem timeout\n"); } /* ---------------------------------------------------------------------- */ /* * EPP conventional Mode */ /* _MUST_ not return! */ static void eppconv_modem(void) { unsigned char eio[1024]; u_int8_t stat; int cnt, i, icnt, ocnt; /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errret; for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errret; /* determine TX fifo size from status bits */ switch (stat & (EPP_NTAEF|EPP_NTHF)) { case EPP_NTHF: ocnt = 2048 - 256; break; case EPP_NTAEF: ocnt = 2048 - 1793; break; case 0: ocnt = 0; break; default: ocnt = 2048 - 1025; break; } /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icnt = 0; break; case EPP_NRAEF: icnt = 1025; break; case 0: icnt = 1793; break; default: icnt = 256; break; } /* update status */ state.stat.icnt3 = state.stat.icnt2; state.stat.icnt2 = state.stat.icnt1; state.stat.icnt1 = icnt; state.stat.ocnt3 = state.stat.ocnt2; state.stat.ocnt2 = state.stat.ocnt1; state.stat.ocnt1 = ocnt; state.stat.status = stat; state.access.dcd = !(stat & EPP_DCDBIT); state.access.ptt = !!(stat & EPP_PTTBIT); /* rx */ if (icnt == 0 && state.access.bitrate < 100000) { cnt = 0; i = (state.access.bitrate < 50000) ? 256 : 128; while (i > 0 && cnt < sizeof(eio) && stat & EPP_NREF) { if (parport_epp_read_data(eio+cnt, 1) != 1) goto errret; cnt++; i--; if (parport_epp_read_addr(&stat, 1) != 1) goto errret; } hdlc_receive(eio, cnt); } while (icnt > 0) { cnt = icnt; if (cnt > sizeof(eio)) cnt = sizeof(eio); icnt -= cnt; if (parport_epp_read_data(eio, cnt) != cnt) goto errret; hdlc_receive(eio, cnt); } /* tx */ if (ocnt > 0) { if (ocnt > sizeof(eio)) ocnt = sizeof(eio); cnt = hdlc_transmit(eio, ocnt); if (parport_epp_write_data(eio, cnt) != cnt) goto errret; } /* KISS and reschedule */ handle_kiss(); } errret: errprintf(SEV_FATAL, "Modem timeout\n"); } /* ---------------------------------------------------------------------- */ int main(int argc, char *argv[]) { void *so; int (*drvinit)(int argc, char *argv[]); int mode; if (!(so = dlopen("baycomfpga_init.so", RTLD_NOW)) || !(drvinit = dlsym(so, "driver_init"))) { fprintf(stderr, "baycomepp: cannot load initialization code from baycomfpga_init.so\n"); exit(1); } mode = drvinit(argc, argv); dlclose(so); switch(mode) { case MODE_EPP: epp_modem(); case MODE_ECP: ecp_modem(); case MODE_EPPAFSK: eppafsk_modem(); case MODE_EPPCONV: eppconv_modem(); } exit(1); } /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/udriver/drv.h0100644000175100017510000001173207142057370015040 0ustar abaaba/*****************************************************************************/ /* * drv.h -- HDLC packet radio modem for EPP/ECP using FPGA usermode driver. * * Copyright (C) 1998 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifndef _DRV_H #define _DRV_H /* --------------------------------------------------------------------- */ #if defined(HAVE_SYS_IO_H) #include #elif defined(HAVE_ASM_IO_H) #include #endif #include #include "fpga.h" /* --------------------------------------------------------------------- */ #define KISS_FEND ((unsigned char)0300) #define KISS_FESC ((unsigned char)0333) #define KISS_TFEND ((unsigned char)0334) #define KISS_TFESC ((unsigned char)0335) #define KISS_CMD_DATA 0 #define KISS_CMD_TXDELAY 1 #define KISS_CMD_PPERSIST 2 #define KISS_CMD_SLOTTIME 3 #define KISS_CMD_TXTAIL 4 #define KISS_CMD_FULLDUP 5 #define KISS_CMD_HARDWARE 6 #define KISS_CMD_FECLEVEL 8 #define KISS_CMD_RETURN 255 /* --------------------------------------------------------------------- */ #define MAXFLEN 512 #define RXBUFFER_SIZE ((MAXFLEN*6/5)+8) #define TXBUFFER_SIZE 8192 #define KISSOUTBUF_SIZE 8192 #define KISSINBUF_SIZE (2*MAXFLEN+8) struct baycomepp_state { int kissfd; struct adapter_config config; struct { unsigned bitrate, bitrateby25; int slotcnt, flagcnt; int dcd, ptt; int calib; enum { tx_idle = 0, tx_keyup, tx_data, tx_tail } state; } access; struct chaccesspar { unsigned int txdelay; unsigned int slottime; unsigned int ppersist; unsigned int txtail; unsigned int fulldup; } chaccesspar; struct hdlc_receiver { unsigned int bitbuf, bitstream, numbits, state; unsigned char *bufptr; int bufcnt; unsigned char buf[RXBUFFER_SIZE]; } hrx; struct hdlc_transmitter { unsigned rd, wr; u_int8_t buf[TXBUFFER_SIZE]; } htx; struct { unsigned ptr; u_int8_t b[KISSINBUF_SIZE]; } kissin; struct { unsigned rd; unsigned wr; u_int8_t b[KISSOUTBUF_SIZE]; } kissout; struct statistics { unsigned long pkt_in; unsigned long pkt_out; unsigned long pkt_outerr; unsigned long bytes_in; unsigned long bytes_out; unsigned long kiss_out; unsigned long kiss_outerr; unsigned long kiss_in; unsigned long kiss_inerr; unsigned long ptt_keyed; unsigned int intcnt, icnt1, icnt2, icnt3, ocnt1, ocnt2, ocnt3; u_int8_t status; } stat; }; /* --------------------------------------------------------------------- */ extern int logging; extern int logpackets; extern struct baycomepp_state state; extern const char *progname; /* --------------------------------------------------------------------- */ #define SEV_FATAL LOG_CRIT #define SEV_ERROR LOG_ERR #define SEV_WARNING LOG_WARNING #define SEV_NOTICE LOG_NOTICE #define SEV_INFO LOG_INFO #define SEV_DEBUG LOG_DEBUG extern void errprintf(int severity, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); extern void errstr(int severity, const char *st); extern void sighandler(int sig); extern void sig_usr1(int sig); extern void sig_usr2(int sig); /* ---------------------------------------------------------------------- */ #ifdef __i386__ #define GETTICK(x) \ ({ \ __asm__ __volatile__("rdtsc" : "=a" (x) : : "dx"); \ }) #else /* __i386__ */ #define GETTICK(x) ((x)=0) #endif /* __i386__ */ /* --------------------------------------------------------------------- */ #define MODE_EPP 0 #define MODE_ECP 1 #define MODE_EPPAFSK 2 #define MODE_EPPCONV 3 /* conventional modem */ /* --------------------------------------------------------------------- */ #endif /* _DRV_H */ baycomepp-0.10.orig/udriver/baycomepp.80100644000175100017510000000637506706650735016164 0ustar abaaba.\" Copyright 1999 Thomas Sailer (sailer@ife.ee.ethz.ch) .\" May be distributed under the GNU General Public License .\" .\" " .TH BAYCOMEPP 8 "13 May 1998" "BaycomEPP 0.2" "Linux AX.25 Utilities Manual" .SH NAME baycomepp \- Baycom EPP modem driver .SH SYNOPSIS .B baycomepp .B "[ \-lknvcaz ]" .B "[\-p portaddr]" .B "[\-m modestr]" .B "[\--epp]" .B "[\--ecp]" .B "[\--eppconv]" .B "[\--eppafsk]" .B "[\--ifname name]" .B "[\--hwaddr callsign]" .B "[\--ipaddr ipaddress]" .B "[\--netmask netmask]" .B "[\--broadcast broadcast]" .SH DESCRIPTION .B baycomepp is a user mode driver for the Baycom EPP modem family. It currently supports the conventional EPP modem (using the IDT 72xxx FIFO's) and the FPGA (Xilinx XCS10) variant. The driver automatically initializes the FPGA modem depending on the requested mode. In order to keep the resident memory footprint small (approx 20kBytes plus standard system shared libraries like libc), the initialization code is contained in a shared library called .I "baycomfpga_init.so". This driver is able to automatically attach itself to the kernel network stack as a network interface (usually called ax0). To do this it requires the Linux Kernel MKISS driver (enable CONFIG_MKISS). .SH OPTIONS .B baycomepp accepts the following options: .TP .B \-h .B \--help Display an overview of the available command line parameters and exit. .TP .B \-v .B \--verbose Increases the verbosity of the output. May be cumulated. .TP .B \-p .B \--port Specifies the base address of the EPP capable parallel port to which the modem is connected. Use the .I 0x prefix to specify hexadecimal numbers. .TP .B \-m .B \--mode Specifies various ``firmware'' options. .TP .B \-n .B \--no-daemon Do not start up in background as a daemon. Also log received and transmitted packets to stdout. .TP .B \-l .B \--log Log to syslog. .TP .B \-k .B \--kill Kill running baycomepp daemons. Don't start the driver proper. .TP .B \--epp Start up in EPP FSK mode. Requires the FPGA version. .TP .B \--eppafsk Start up in EPP AFSK mode. Requires the FPGA version. .TP .B \--ecp Start up in ECP FSK mode. Requires the FPGA version. .TP .B \--eppconv Start up in conventional EPP FSK mode. Requires the conventional version. .TP .B \--ifname Set the name of the interface (requires Linux 2.2.x) .TP .B \--hwaddr Set the hardware address (callsign) of the interface .TP .B \--ipaddr Set the ip address of the interface .TP .B \--netmask Set the netmask of the interface .TP .B \--broadcast Set the broadcast address of the interface .SH "FIRMWARE OPTIONS" .TP .B intclk uses FPGA internal clock; \fBdon't\fP use if an external oscillator is on board. .TP .B extclk uses the external oscillator; recommended if the internal modem is used, as the frequency of the FPGA oscillator is not accurate enough. .TP .B intmodem uses the internal modem .TP .B extmodem uses a DF9IC type modem connected to the high speed modem connector .TP .B divider=x sets the clock divider for the internal modem (baud=fquartz/16/divider) .TP .B loopback sets an internal modem loopback .TP .B extstat allows extended status readback .TP .B noextstat disallows extended status readback .SH "SEE ALSO" .nf .BR ifconfig "\ (8), " sethdlc "\ (8), " .fi .SH AUTHOR baycomepp was written by Thomas Sailer, HB9JNX/AE4WA (sailer@ife.ee.ethz.ch). baycomepp-0.10.orig/udriver/baycomepp.initscript0100755000175100017510000000237606706651570020203 0ustar abaaba#! /bin/sh # # baycomepp Start Baycom EPP driver. # # Author: Thomas Sailer, # # chkconfig: 345 50 50 # description: This script starts/stops the Baycom EPP driver # processname: baycomepp # pidfile: /var/run/baycomepp.pid # Source function library. . /etc/rc.d/init.d/functions # Get config. . /etc/sysconfig/network ## Check that networking is up. #if [ ${NETWORKING} = "no" ] #then # exit 0 #fi [ -f /usr/sbin/baycomepp ] || exit 0 EPPCONV="-m divider=64 --epp" EPPIF=ax0 MYCALL=hb9jnx MYIP=44.142.52.99 GWCALL=hb9w-11 GWPATH=hb9zrh GWIP=44.142.52.7 GWMODE="-ipmode v" # See how we were called. case "$1" in start) echo -n "Starting BaycomEPP driver: " if /usr/sbin/baycomepp -v -v -v -l ${EPPCONV} --hwaddr=${MYCALL} --ipaddr=${MYIP}; then /sbin/route add -host ${GWIP} dev ${EPPIF} /sbin/arp -H ax25 -s ${GWIP} ${GWCALL} /usr/sbin/axparms -route add ${EPPIF} ${GWCALL} ${GWPATH} ${GWMODE} /sbin/route add -net 44.0.0.0 netmask 255.0.0.0 gw ${GWIP} else echo "unable to start BaycomEPP" exit 1 fi echo ;; stop) echo -n "Stopping BaycomEPP driver: " /usr/sbin/baycomepp -k echo ;; status) killall -USR1 baycomepp ;; *) echo "Usage: baycomepp {start|stop|status}" exit 1 esac exit 0 baycomepp-0.10.orig/eppdiag/0042755000175100017510000000000007511777223014034 5ustar abaababaycomepp-0.10.orig/eppdiag/Makefile.in0100644000175100017510000002313307511777223016076 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ INCLUDES = $(GTK_CFLAGS) -I$(top_srcdir)/main \ -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" @HAVEGTK_TRUE@GTKPROGS = @HAVEGTK_TRUE@eppdiag @HAVEGTK_FALSE@GTKPROGS = @DIRECTX_TRUE@DIRECTXLIBS = @DIRECTX_TRUE@-L$(top_builddir)/directx -ldsound -luser32 -lgdi32 @DIRECTX_FALSE@DIRECTXLIBS = sbin_PROGRAMS = $(GTKPROGS) eppdiag_SOURCES = \ gladesrc.c \ eppdiag.c eppdiag_LDADD = \ ../main/libinit.a ../main/libresident.a ../main/libresident2.a \ $(GTK_LIBS) ../main/libmisc.a $(DIRECTXLIBS) CLEANFILES = noinst_HEADERS = \ gladesrc.h \ gladesig.h EXTRA_DIST = eppdiag.glade mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = @HAVEGTK_TRUE@sbin_PROGRAMS = eppdiag$(EXEEXT) @HAVEGTK_FALSE@sbin_PROGRAMS = PROGRAMS = $(sbin_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ eppdiag_OBJECTS = gladesrc.$(OBJEXT) eppdiag.$(OBJEXT) @DIRECTX_TRUE@eppdiag_DEPENDENCIES = ../main/libinit.a \ @DIRECTX_TRUE@../main/libresident.a ../main/libresident2.a \ @DIRECTX_TRUE@../main/libmisc.a @DIRECTX_FALSE@eppdiag_DEPENDENCIES = ../main/libinit.a \ @DIRECTX_FALSE@../main/libresident.a ../main/libresident2.a \ @DIRECTX_FALSE@../main/libmisc.a eppdiag_LDFLAGS = CFLAGS = @CFLAGS@ 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 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(eppdiag_SOURCES) OBJECTS = $(eppdiag_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps eppdiag/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-sbinPROGRAMS: clean-sbinPROGRAMS: -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) distclean-sbinPROGRAMS: maintainer-clean-sbinPROGRAMS: install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(sbindir) @list='$(sbin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) list='$(sbin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .c.o: $(COMPILE) -c $< # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: eppdiag$(EXEEXT): $(eppdiag_OBJECTS) $(eppdiag_DEPENDENCIES) @rm -f eppdiag$(EXEEXT) $(LINK) $(eppdiag_LDFLAGS) $(eppdiag_OBJECTS) $(eppdiag_LDADD) $(LIBS) 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 = eppdiag 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 eppdiag.o: eppdiag.c ../config.h ../main/getopt.h ../main/fpga.h \ ../main/sysdeps.h ../main/parport.h gladesrc.h gladesig.h gladesrc.o: gladesrc.c ../main/getopt.h ../config.h gladesig.h \ gladesrc.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-sbinPROGRAMS 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-sbinPROGRAMS uninstall: uninstall-am all-am: Makefile $(PROGRAMS) $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(sbindir) 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]* maintainer-clean-generic: mostlyclean-am: mostlyclean-sbinPROGRAMS mostlyclean-compile \ mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-sbinPROGRAMS clean-compile clean-tags clean-generic \ mostlyclean-am clean: clean-am distclean-am: distclean-sbinPROGRAMS distclean-compile distclean-tags \ distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-sbinPROGRAMS \ maintainer-clean-compile 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-sbinPROGRAMS distclean-sbinPROGRAMS \ clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \ install-sbinPROGRAMS mostlyclean-compile distclean-compile \ clean-compile maintainer-clean-compile 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: baycomepp-0.10.orig/eppdiag/Makefile.am0100644000175100017510000000124607142112433016050 0ustar abaaba## Process this file with automake to produce Makefile.in INCLUDES = $(GTK_CFLAGS) -I$(top_srcdir)/main \ -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" ##dnl man_MANS = eppdiag.8 if HAVEGTK GTKPROGS = eppdiag else GTKPROGS = endif if DIRECTX DIRECTXLIBS = -L$(top_builddir)/directx -ldsound -luser32 -lgdi32 else DIRECTXLIBS = endif sbin_PROGRAMS = $(GTKPROGS) eppdiag_SOURCES = \ gladesrc.c \ eppdiag.c eppdiag_LDADD = \ ../main/libinit.a ../main/libresident.a ../main/libresident2.a \ $(GTK_LIBS) ../main/libmisc.a $(DIRECTXLIBS) CLEANFILES = noinst_HEADERS = \ gladesrc.h \ gladesig.h EXTRA_DIST = eppdiag.glade baycomepp-0.10.orig/eppdiag/gladesrc.c0100644000175100017510000003355506736135315015770 0ustar abaaba/* Note: You are free to use whatever license you want. Eventually you will be able to edit it within Glade. */ /* eppdiag * Copyright (C) * * 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. */ #include #include #include #ifdef HAVE_CONFIG_H # include #endif #include #include #include "gladesig.h" #include "gladesrc.h" GtkWidget* get_widget (GtkWidget *widget, gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = widget->parent; if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } /* This is an internally used function to set notebook tab widgets. */ void set_notebook_tab (GtkWidget *notebook, gint page_num, GtkWidget *widget) { GtkNotebookPage *page; GtkWidget *notebook_page; page = (GtkNotebookPage*) g_list_nth (GTK_NOTEBOOK (notebook)->children, page_num)->data; notebook_page = page->child; gtk_widget_ref (notebook_page); gtk_notebook_remove_page (GTK_NOTEBOOK (notebook), page_num); gtk_notebook_insert_page (GTK_NOTEBOOK (notebook), notebook_page, widget, page_num); gtk_widget_unref (notebook_page); } static GList *pixmaps_directories = NULL; /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (gchar *directory) { pixmaps_directories = g_list_prepend (pixmaps_directories, g_strdup (directory)); } /* This is an internally used function to check if a pixmap file exists. */ #ifndef G_DIR_SEPARATOR_S #define G_DIR_SEPARATOR_S "/" #endif gchar* check_file_exists (gchar *directory, gchar *filename) { gchar *full_filename; struct stat s; gint status; full_filename = g_malloc (strlen (directory) + 1 + strlen (filename) + 1); strcpy (full_filename, directory); strcat (full_filename, G_DIR_SEPARATOR_S); strcat (full_filename, filename); status = stat (full_filename, &s); if (status == 0 && S_ISREG (s.st_mode)) return full_filename; g_free (full_filename); return NULL; } /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap (GtkWidget *widget, gchar *filename) { gchar *found_filename = NULL; GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; GList *elem; /* We first try any pixmaps directories set by the application. */ elem = pixmaps_directories; while (elem) { found_filename = check_file_exists ((gchar*)elem->data, filename); if (found_filename) break; elem = elem->next; } /* If we haven't found the pixmap, try the source directory. */ if (!found_filename) { found_filename = check_file_exists ("pixmaps", filename); } if (!found_filename) { g_print ("Couldn't find pixmap file: %s", filename); return NULL; } colormap = gtk_widget_get_colormap (widget); gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, &mask, NULL, found_filename); g_free (found_filename); if (gdkpixmap == NULL) return NULL; pixmap = gtk_pixmap_new (gdkpixmap, mask); gdk_pixmap_unref (gdkpixmap); gdk_bitmap_unref (mask); return pixmap; } GtkWidget* create_diag () { GtkWidget *diag; GtkWidget *hbox1; GtkWidget *vbox1; GtkWidget *table1; GtkWidget *label7; GtkWidget *label6; GtkWidget *label5; GtkWidget *label4; GtkWidget *parfilter; GList *parfilter_items = NULL; GtkObject *parbitrate_adj; GtkWidget *parbitrate; GtkWidget *paraddress; GList *paraddress_items = NULL; GtkWidget *partest; GtkWidget *label8; GtkObject *parfclk_adj; GtkWidget *parfclk; GtkWidget *parclk; GtkWidget *hbox4; GtkWidget *parmodem; GtkWidget *parstat; GtkWidget *parloopback; GtkWidget *hbuttonbox1; GtkWidget *bquit; GtkWidget *btest; GtkWidget *vpaned1; GtkWidget *scrolledwindow1; GtkWidget *textl; GtkWidget *scrolledwindow2; GtkWidget *textt; diag = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_object_set_data (GTK_OBJECT (diag), "diag", diag); gtk_window_set_title (GTK_WINDOW (diag), "EPP FPGA Modem Diagnostics"); gtk_window_set_policy (GTK_WINDOW (diag), TRUE, TRUE, FALSE); hbox1 = gtk_hbox_new (FALSE, 0); gtk_object_set_data (GTK_OBJECT (diag), "hbox1", hbox1); gtk_widget_show (hbox1); gtk_container_add (GTK_CONTAINER (diag), hbox1); vbox1 = gtk_vbox_new (FALSE, 0); gtk_object_set_data (GTK_OBJECT (diag), "vbox1", vbox1); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (hbox1), vbox1, FALSE, FALSE, 0); table1 = gtk_table_new (5, 2, FALSE); gtk_object_set_data (GTK_OBJECT (diag), "table1", table1); gtk_widget_show (table1); gtk_box_pack_start (GTK_BOX (vbox1), table1, FALSE, FALSE, 0); gtk_table_set_row_spacings (GTK_TABLE (table1), 4); label7 = gtk_label_new ("Filter"); gtk_object_set_data (GTK_OBJECT (diag), "label7", label7); gtk_widget_show (label7); gtk_table_attach (GTK_TABLE (table1), label7, 0, 1, 3, 4, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); gtk_label_set_justify (GTK_LABEL (label7), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label7), 0.05, 0.5); gtk_misc_set_padding (GTK_MISC (label7), 4, 0); label6 = gtk_label_new ("Bitrate"); gtk_object_set_data (GTK_OBJECT (diag), "label6", label6); gtk_widget_show (label6); gtk_table_attach (GTK_TABLE (table1), label6, 0, 1, 2, 3, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); gtk_label_set_justify (GTK_LABEL (label6), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label6), 0.05, 0.5); gtk_misc_set_padding (GTK_MISC (label6), 4, 0); label5 = gtk_label_new ("Port Address"); gtk_object_set_data (GTK_OBJECT (diag), "label5", label5); gtk_widget_show (label5); gtk_table_attach (GTK_TABLE (table1), label5, 0, 1, 1, 2, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); gtk_misc_set_alignment (GTK_MISC (label5), 0.05, 0.5); gtk_misc_set_padding (GTK_MISC (label5), 4, 0); label4 = gtk_label_new ("Test"); gtk_object_set_data (GTK_OBJECT (diag), "label4", label4); gtk_widget_show (label4); gtk_table_attach (GTK_TABLE (table1), label4, 0, 1, 0, 1, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); gtk_label_set_justify (GTK_LABEL (label4), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label4), 0.05, 0.5); gtk_misc_set_padding (GTK_MISC (label4), 4, 0); parfilter = gtk_combo_new (); gtk_object_set_data (GTK_OBJECT (diag), "parfilter", parfilter); gtk_widget_show (parfilter); gtk_table_attach (GTK_TABLE (table1), parfilter, 1, 2, 3, 4, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); gtk_combo_set_use_arrows_always (GTK_COMBO (parfilter), TRUE); parfilter_items = g_list_append (parfilter_items, "Default"); parfilter_items = g_list_append (parfilter_items, "Analog Filter Eq"); parfilter_items = g_list_append (parfilter_items, "Linear Phase"); gtk_combo_set_popdown_strings (GTK_COMBO (parfilter), parfilter_items); g_list_free (parfilter_items); parbitrate_adj = gtk_adjustment_new (9600, 4800, 1.5e+06, 4800, 115200, 115200); parbitrate = gtk_spin_button_new (GTK_ADJUSTMENT (parbitrate_adj), 1, 0); gtk_object_set_data (GTK_OBJECT (diag), "parbitrate", parbitrate); gtk_widget_show (parbitrate); gtk_table_attach (GTK_TABLE (table1), parbitrate, 1, 2, 2, 3, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); paraddress = gtk_combo_new (); gtk_object_set_data (GTK_OBJECT (diag), "paraddress", paraddress); gtk_widget_show (paraddress); gtk_table_attach (GTK_TABLE (table1), paraddress, 1, 2, 1, 2, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); paraddress_items = g_list_append (paraddress_items, "0x378"); paraddress_items = g_list_append (paraddress_items, "0x278"); paraddress_items = g_list_append (paraddress_items, "0x3bc"); gtk_combo_set_popdown_strings (GTK_COMBO (paraddress), paraddress_items); g_list_free (paraddress_items); partest = gtk_combo_new (); gtk_object_set_data (GTK_OBJECT (diag), "partest", partest); gtk_widget_show (partest); gtk_table_attach (GTK_TABLE (table1), partest, 1, 2, 0, 1, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); gtk_combo_set_use_arrows_always (GTK_COMBO (partest), TRUE); label8 = gtk_label_new ("FPGA clock"); gtk_object_set_data (GTK_OBJECT (diag), "label8", label8); gtk_widget_show (label8); gtk_table_attach (GTK_TABLE (table1), label8, 0, 1, 4, 5, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment (GTK_MISC (label8), 0.05, 0.5); gtk_misc_set_padding (GTK_MISC (label8), 4, 0); parfclk_adj = gtk_adjustment_new (1.96666e+07, 1e+06, 2.5e+07, 100000, 1e+06, 1e+06); parfclk = gtk_spin_button_new (GTK_ADJUSTMENT (parfclk_adj), 1, 0); gtk_object_set_data (GTK_OBJECT (diag), "parfclk", parfclk); gtk_widget_show (parfclk); gtk_table_attach (GTK_TABLE (table1), parfclk, 1, 2, 4, 5, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); parclk = gtk_check_button_new_with_label ("Internal Clock"); gtk_object_set_data (GTK_OBJECT (diag), "parclk", parclk); gtk_widget_show (parclk); gtk_box_pack_start (GTK_BOX (vbox1), parclk, FALSE, FALSE, 2); gtk_widget_set_usize (parclk, 60, -2); hbox4 = gtk_hbox_new (FALSE, 0); gtk_object_set_data (GTK_OBJECT (diag), "hbox4", hbox4); gtk_widget_show (hbox4); gtk_box_pack_start (GTK_BOX (vbox1), hbox4, FALSE, FALSE, 2); parmodem = gtk_check_button_new_with_label ("Internal Modem"); gtk_object_set_data (GTK_OBJECT (diag), "parmodem", parmodem); gtk_widget_show (parmodem); gtk_box_pack_start (GTK_BOX (hbox4), parmodem, FALSE, FALSE, 2); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (parmodem), TRUE); parstat = gtk_check_button_new_with_label ("Extended Status"); gtk_object_set_data (GTK_OBJECT (diag), "parstat", parstat); gtk_widget_show (parstat); gtk_box_pack_start (GTK_BOX (vbox1), parstat, FALSE, FALSE, 2); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (parstat), TRUE); parloopback = gtk_check_button_new_with_label ("Loopback"); gtk_object_set_data (GTK_OBJECT (diag), "parloopback", parloopback); gtk_widget_show (parloopback); gtk_box_pack_start (GTK_BOX (vbox1), parloopback, FALSE, FALSE, 2); hbuttonbox1 = gtk_hbutton_box_new (); gtk_object_set_data (GTK_OBJECT (diag), "hbuttonbox1", hbuttonbox1); gtk_widget_show (hbuttonbox1); gtk_box_pack_end (GTK_BOX (vbox1), hbuttonbox1, FALSE, FALSE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_SPREAD); bquit = gtk_button_new_with_label ("Quit"); gtk_object_set_data (GTK_OBJECT (diag), "bquit", bquit); gtk_widget_show (bquit); gtk_container_add (GTK_CONTAINER (hbuttonbox1), bquit); gtk_container_border_width (GTK_CONTAINER (bquit), 5); gtk_signal_connect (GTK_OBJECT (bquit), "clicked", GTK_SIGNAL_FUNC (on_bquit_clicked), NULL); btest = gtk_button_new_with_label ("Test"); gtk_object_set_data (GTK_OBJECT (diag), "btest", btest); gtk_widget_show (btest); gtk_container_add (GTK_CONTAINER (hbuttonbox1), btest); GTK_WIDGET_SET_FLAGS (btest, GTK_CAN_DEFAULT); gtk_signal_connect (GTK_OBJECT (btest), "clicked", GTK_SIGNAL_FUNC (on_btest_clicked), NULL); vpaned1 = gtk_vpaned_new (); gtk_object_set_data (GTK_OBJECT (diag), "vpaned1", vpaned1); gtk_widget_show (vpaned1); gtk_box_pack_start (GTK_BOX (hbox1), vpaned1, TRUE, TRUE, 0); gtk_paned_gutter_size (GTK_PANED (vpaned1), 15); scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); gtk_object_set_data (GTK_OBJECT (diag), "scrolledwindow1", scrolledwindow1); gtk_widget_show (scrolledwindow1); gtk_container_add (GTK_CONTAINER (vpaned1), scrolledwindow1); textl = gtk_text_new (NULL, NULL); gtk_object_set_data (GTK_OBJECT (diag), "textl", textl); gtk_widget_show (textl); gtk_container_add (GTK_CONTAINER (scrolledwindow1), textl); scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL); gtk_object_set_data (GTK_OBJECT (diag), "scrolledwindow2", scrolledwindow2); gtk_widget_show (scrolledwindow2); gtk_container_add (GTK_CONTAINER (vpaned1), scrolledwindow2); textt = gtk_text_new (NULL, NULL); gtk_object_set_data (GTK_OBJECT (diag), "textt", textt); gtk_widget_show (textt); gtk_container_add (GTK_CONTAINER (scrolledwindow2), textt); return diag; } baycomepp-0.10.orig/eppdiag/eppdiag.c0100644000175100017510000002172407143572262015607 0ustar abaaba/*****************************************************************************/ /* * eppdiag.c -- HDLC packet radio modem for EPP using FPGA GUI tool. * * Copyright (C) 1998, 2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #ifdef HAVE_GETOPT_H #include #endif #include "fpga.h" #include #include #include "gladesrc.h" #include "gladesig.h" /* ---------------------------------------------------------------------- */ static unsigned verboselevel = 0; static int quit = 0; static GtkWidget *diag; /* ---------------------------------------------------------------------- */ int lprintf(unsigned vl, const char *format, ...) { char buf[256]; va_list ap; int r; char *cp; #if 0 if (vl > verboselevel) return 0; #endif va_start(ap, format); r = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); while (cp = strchr(buf, '\r')) *cp = '\n'; gtk_text_insert(GTK_TEXT(gtk_object_get_data(GTK_OBJECT(diag), "textl")), NULL, NULL, NULL, buf, r); return r; } int tprintf(const char *format, ...) { char buf[256]; va_list ap; int r; char *cp; va_start(ap, format); r = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); while (cp = strchr(buf, '\r')) *cp = '\n'; gtk_text_insert(GTK_TEXT(gtk_object_get_data(GTK_OBJECT(diag), "textt")), NULL, NULL, NULL, buf, r); return r; } int idle_callback(unsigned us_delay) { while (gtk_events_pending()) gtk_main_iteration(); if (us_delay) usleep(us_delay); return quit; } void epp_error(const char *msg) { lprintf(0, msg); reset_modem(); exit(1); } /* ---------------------------------------------------------------------- */ void on_bquit_clicked(GtkButton *button, gpointer user_data) { quit = 1; gtk_main_quit(); } void on_btest_clicked(GtkButton *button, gpointer user_data) { static int test_run = 0; const struct eppfpgatests *tst; struct adapter_config cfg; gchar *cp; if (test_run) { quit = 1; return; } cp = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(gtk_object_get_data(GTK_OBJECT(diag), "partest"))->entry)); for (tst = eppfpgatests; tst->name && strcmp(cp, tst->name); tst++); if (!tst->name) { g_error("Internal Error: test %s not found\n", cp); return; } /*iobase = strtoul(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(gtk_object_get_data(GTK_OBJECT(diag), "paraddress"))->entry)), NULL, 0);*/ cfg.intclk = GTK_TOGGLE_BUTTON(gtk_object_get_data(GTK_OBJECT(diag), "parclk"))->active; cfg.bitrate = strtoul(gtk_entry_get_text(GTK_ENTRY(gtk_object_get_data(GTK_OBJECT(diag), "parbitrate"))), NULL, 0); cfg.fclk = strtoul(gtk_entry_get_text(GTK_ENTRY(gtk_object_get_data(GTK_OBJECT(diag), "parfclk"))), NULL, 0); cfg.extmodem = !GTK_TOGGLE_BUTTON(gtk_object_get_data(GTK_OBJECT(diag), "parmodem"))->active; cfg.loopback = GTK_TOGGLE_BUTTON(gtk_object_get_data(GTK_OBJECT(diag), "parloopback"))->active; cfg.extstat = GTK_TOGGLE_BUTTON(gtk_object_get_data(GTK_OBJECT(diag), "parstat"))->active; cp = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(gtk_object_get_data(GTK_OBJECT(diag), "parfilter"))->entry)); switch(cp[0]) { default: cfg.filtmode = 0; break; case 'A': cfg.filtmode = 1; break; case 'L': cfg.filtmode = 2; break; } cfg.gain = 1; test_run = 1; quit = 0; tst->func(&cfg); test_run = 0; } /* ---------------------------------------------------------------------- */ static void initdiag(void) { GList *items = NULL; const struct eppfpgatests *tst; diag = create_diag(); for (tst = eppfpgatests; tst->name; tst++) items = g_list_append(items, tst->name); gtk_combo_set_popdown_strings(GTK_COMBO(gtk_object_get_data(GTK_OBJECT(diag), "partest")), items); g_list_free(items); gtk_widget_show(diag); } /* ---------------------------------------------------------------------- */ int main(int argc, char *argv[]) { static const struct option long_options[] = { #ifdef HAVE_PPUSER { "ppuser", 1, 0, 0x400 }, { "ppdev", 1, 0, 0x402 }, #endif #ifdef HAVE_PPKDRV { "ppkdrv", 1, 0, 0x401 }, #endif #ifdef WIN32 { "ppgenport", 0, 0, 0x403 }, { "ppwin", 1, 0, 0x404 }, { "pplpt", 1, 0, 0x404 }, { "ppring0", 0, 0, 0x405 }, #endif { "ppforcehwepp", 0, 0, 0x410 }, { "ppswemulepp", 0, 0, 0x411 }, { "ppswemulecp", 0, 0, 0x412 }, { 0, 0, 0, 0 } }; int c, err = 0; unsigned int iobase = 0x378, ntddkgenport = 0, ntdrv = 0, w9xring0 = 0, ppflags = 0; const char *ppuser = NULL, *ppkdrv = NULL, *ppdev = NULL; gtk_set_locale(); gtk_init(&argc, &argv); while ((c = getopt_long(argc, argv, "vp:", long_options, NULL)) != EOF) { switch (c) { case 0x400: ppuser = optarg; ppkdrv = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = 0; w9xring0 = 0; break; case 0x401: ppkdrv = optarg; ppuser = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = 0; w9xring0 = 0; break; case 0x402: ppkdrv = NULL; ppuser = NULL; ppdev = optarg; ntddkgenport = 0; ntdrv = 0; w9xring0 = 0; break; case 0x403: ppkdrv = NULL; ppuser = NULL; ppdev = NULL; ntddkgenport = 1; ntdrv = 0; w9xring0 = 0; break; case 0x404: ppkdrv = NULL; ppuser = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = strtoul(optarg, NULL, 0); w9xring0 = 0; break; case 0x405: ppkdrv = NULL; ppuser = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = 0; w9xring0 = 1; break; case 0x410: ppflags |= PPFLAG_FORCEHWEPP; break; case 0x411: ppflags |= PPFLAG_SWEMULEPP; break; case 0x412: ppflags |= PPFLAG_SWEMULECP; break; case 'v': verboselevel++; break; case 'p': iobase = strtoul(optarg, NULL, 0); if (iobase <= 0 || iobase >= 0x3f8) err++; break; default: err++; break; } } if (err) { lprintf(0, "usage: %s [-v] [-p ]\n", argv[0]); exit(1); } #ifdef HAVE_PPUSER if (ppkdrv) { if (parport_init_ppkdrv(ppkdrv)) { fprintf(stderr, "no kernel interface %s driver found\n", ppkdrv); exit(1); } } else #endif #ifdef HAVE_PPUSER if (ppdev) { if (parport_init_ppdev(ppdev)) { fprintf(stderr, "no ppdev driver found at %s\n", ppdev); exit(1); } } else if (ppuser) { if (parport_init_ppuser(ppuser)) { fprintf(stderr, "no ppuser driver found at %s\n", ppuser); exit(1); } } else #endif #ifdef WIN32 if (ntdrv) { if (parport_init_win_flags(ntdrv-1, ppflags)) { fprintf(stderr, "no eppflex.sys/vxd driver found\n"); exit(1); } } else if (ntddkgenport) { if (parport_init_ntddkgenport()) { fprintf(stderr, "no NTDDK genport.sys driver found\n"); exit(1); } } else if (w9xring0) { if (parport_init_w9xring0_flags(iobase, ppflags)) { fprintf(stderr, "no parport found at 0x%x\n", iobase); exit(1); } } else #endif if (parport_init_direct_flags(iobase, ppflags)) { fprintf(stderr, "no parport found at 0x%x\n", iobase); exit(1); } initdiag(); gtk_main(); exit(0); } baycomepp-0.10.orig/eppdiag/gladesrc.h0100644000175100017510000000402406736135315015762 0ustar abaaba/* Note: You are free to use whatever license you want. Eventually you will be able to edit it within Glade. */ /* eppdiag * Copyright (C) * * 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. */ #include /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget* get_widget (GtkWidget *widget, gchar *widget_name); /* * This is an internally used function for setting notebook tabs. It is only * included in this header file so you don't get compilation warnings */ void set_notebook_tab (GtkWidget *notebook, gint page_num, GtkWidget *widget); /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (gchar *directory); /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap (GtkWidget *widget, gchar *filename); GtkWidget* create_diag (void); baycomepp-0.10.orig/eppdiag/gladesig.h0100644000175100017510000000226006706650706015760 0ustar abaaba/* Note: You are free to use whatever license you want. Eventually you will be able to edit it within Glade. */ /* project1 * Copyright (C) * * 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. */ #include void on_bquit_clicked (GtkButton *button, gpointer user_data); void on_btest_clicked (GtkButton *button, gpointer user_data); baycomepp-0.10.orig/eppdiag/eppdiag.glade0100644000175100017510000002670706736135315016450 0ustar abaaba eppdiag pixmaps C False False gladesrc.c gladesrc.h gladesig.c gladesig.h GtkWindow diag EPP FPGA Modem Diagnostics GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True True False GtkHBox hbox1 False 0 GtkVBox vbox1 0 False False False 0 GtkTable table1 0 False False 5 2 False 4 0 GtkLabel label7 0 1 3 4 0 0 False False False False True False GTK_JUSTIFY_LEFT 0.05 0.5 4 0 GtkLabel label6 0 1 2 3 0 0 False False False False True False GTK_JUSTIFY_LEFT 0.05 0.5 4 0 GtkLabel label5 0 1 1 2 0 0 False False False False True False GTK_JUSTIFY_CENTER 0.05 0.5 4 0 GtkLabel label4 0 1 0 1 0 0 False False False False True False GTK_JUSTIFY_LEFT 0.05 0.5 4 0 GtkCombo parfilter 1 2 3 4 0 0 False False False False True False False True True Default Analog Filter Eq Linear Phase GtkSpinButton parbitrate 1 2 2 3 0 0 False False False False True False True 1 0 False GTK_UPDATE_ALWAYS False False 9600 4800 1.5e+06 4800 115200 115200 GtkCombo paraddress 1 2 1 2 0 0 False False False False True False False True False 0x378 0x278 0x3bc GtkCombo partest 1 2 0 1 0 0 False False False False True False False True True GtkLabel label8 0 1 4 5 0 0 True True False False True True GTK_JUSTIFY_CENTER 0.05 0.5 4 0 GtkSpinButton parfclk 1 2 4 5 0 0 False False False False True False True 1 0 False GTK_UPDATE_ALWAYS False False 1.96666e+07 1e+06 2.5e+07 100000 1e+06 1e+06 GtkCheckButton parclk 2 False False 60 True False True GtkHBox hbox4 2 False False False 0 GtkCheckButton parmodem 2 False False True True True GtkCheckButton parstat 2 False False True True True GtkCheckButton parloopback 2 False False True False True GtkHButtonBox hbuttonbox1 0 False False GTK_PACK_END GTK_BUTTONBOX_SPREAD 30 85 27 7 0 GtkButton bquit 5 True clicked on_bquit_clicked Tue, 08 Dec 1998 16:48:38 GMT GtkButton btest True True clicked on_btest_clicked Tue, 08 Dec 1998 16:48:28 GMT GtkVPaned vpaned1 0 True True 10 15 GtkScrolledWindow scrolledwindow1 GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_UPDATE_CONTINUOUS GTK_UPDATE_CONTINUOUS GtkText textl True False GtkScrolledWindow scrolledwindow2 GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_UPDATE_CONTINUOUS GTK_UPDATE_CONTINUOUS GtkText textt True False baycomepp-0.10.orig/eppfm/0042755000175100017510000000000007511777224013533 5ustar abaababaycomepp-0.10.orig/eppfm/Makefile.in0100644000175100017510000002612307511777224015577 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ INCLUDES = $(GTK_CFLAGS) -I$(top_srcdir)/main \ -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" \ -I$(top_srcdir)/directx/include -I$(top_srcdir)/directx/include/directx6 @DIRECTX_TRUE@DIRECTXLIBS = @DIRECTX_TRUE@-L$(top_builddir)/directx -ldsound -luser32 -lgdi32 @DIRECTX_FALSE@DIRECTXLIBS = @HAVEGTK_TRUE@bin_PROGRAMS = @HAVEGTK_TRUE@eppfm EXTRA_DIST = costab.c gentbl.c @CROSSCOMP_FALSE@gentbl_SOURCES = @CROSSCOMP_FALSE@gentbl.c @CROSSCOMP_FALSE@BUILT_SOURCES = @CROSSCOMP_FALSE@costab.c @CROSSCOMP_FALSE@noinst_PROGRAMS = @CROSSCOMP_FALSE@gentbl eppfm_SOURCES = \ main.c audio.c eppfm.h costab.c \ support.c support.h \ interface.c interface.h \ callbacks.c callbacks.h eppfm_LDADD = \ $(top_builddir)/main/libinit.a $(top_builddir)/main/libresident.a \ $(GTK_LIBS) $(top_builddir)/main/libmisc.a $(DIRECTXLIBS) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = @HAVEGTK_TRUE@bin_PROGRAMS = eppfm$(EXEEXT) @CROSSCOMP_FALSE@noinst_PROGRAMS = gentbl$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ eppfm_OBJECTS = main.$(OBJEXT) audio.$(OBJEXT) costab.$(OBJEXT) \ support.$(OBJEXT) interface.$(OBJEXT) callbacks.$(OBJEXT) @DIRECTX_TRUE@eppfm_DEPENDENCIES = $(top_builddir)/main/libinit.a \ @DIRECTX_TRUE@$(top_builddir)/main/libresident.a \ @DIRECTX_TRUE@$(top_builddir)/main/libmisc.a @DIRECTX_FALSE@eppfm_DEPENDENCIES = $(top_builddir)/main/libinit.a \ @DIRECTX_FALSE@$(top_builddir)/main/libresident.a \ @DIRECTX_FALSE@$(top_builddir)/main/libmisc.a eppfm_LDFLAGS = @CROSSCOMP_FALSE@gentbl_OBJECTS = gentbl.$(OBJEXT) gentbl_LDADD = $(LDADD) gentbl_DEPENDENCIES = gentbl_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(eppfm_SOURCES) $(gentbl_SOURCES) OBJECTS = $(eppfm_OBJECTS) $(gentbl_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps eppfm/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 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) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(INSTALL_PROGRAM) $$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 mostlyclean-noinstPROGRAMS: clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) distclean-noinstPROGRAMS: maintainer-clean-noinstPROGRAMS: .c.o: $(COMPILE) -c $< # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: eppfm$(EXEEXT): $(eppfm_OBJECTS) $(eppfm_DEPENDENCIES) @rm -f eppfm$(EXEEXT) $(LINK) $(eppfm_LDFLAGS) $(eppfm_OBJECTS) $(eppfm_LDADD) $(LIBS) gentbl$(EXEEXT): $(gentbl_OBJECTS) $(gentbl_DEPENDENCIES) @rm -f gentbl$(EXEEXT) $(LINK) $(gentbl_LDFLAGS) $(gentbl_OBJECTS) $(gentbl_LDADD) $(LIBS) 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 = eppfm 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 audio.o: audio.c ../config.h ../main/getopt.h eppfm.h ../main/fpga.h \ ../main/sysdeps.h ../main/parport.h callbacks.o: callbacks.c ../config.h eppfm.h ../main/fpga.h \ ../main/sysdeps.h ../main/getopt.h ../main/parport.h \ callbacks.h interface.h support.h costab.o: costab.c eppfm.h ../main/fpga.h ../main/sysdeps.h ../config.h \ ../main/getopt.h ../main/parport.h gentbl.o: gentbl.c interface.o: interface.c ../config.h ../main/getopt.h callbacks.h \ interface.h support.h main.o: main.c ../config.h ../main/getopt.h eppfm.h ../main/fpga.h \ ../main/sysdeps.h ../main/parport.h interface.h support.h support.o: support.c ../config.h ../main/getopt.h support.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: 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: uninstall-am all-am: Makefile $(PROGRAMS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-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: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-noinstPROGRAMS \ mostlyclean-compile mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-binPROGRAMS clean-noinstPROGRAMS clean-compile \ clean-tags clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-binPROGRAMS distclean-noinstPROGRAMS \ distclean-compile distclean-tags distclean-generic \ clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-noinstPROGRAMS \ maintainer-clean-compile 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-noinstPROGRAMS distclean-noinstPROGRAMS \ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile 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 @CROSSCOMP_FALSE@$(srcdir)/costab.c: gentbl @CROSSCOMP_FALSE@ ./gentbl $(srcdir)/costab.c # 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: baycomepp-0.10.orig/eppfm/Makefile.am0100644000175100017510000000154206741765434015570 0ustar abaaba## Process this file with automake to produce Makefile.in INCLUDES = $(GTK_CFLAGS) -I$(top_srcdir)/main \ -DCONFIGDIR=\"$(sysconfdir)\" -DLOCALSTATEDIR=\"$(localstatedir)\" \ -I$(top_srcdir)/directx/include -I$(top_srcdir)/directx/include/directx6 if DIRECTX DIRECTXLIBS = -L$(top_builddir)/directx -ldsound -luser32 -lgdi32 else DIRECTXLIBS = endif if HAVEGTK bin_PROGRAMS = eppfm endif EXTRA_DIST = costab.c gentbl.c if CROSSCOMP else gentbl_SOURCES = gentbl.c BUILT_SOURCES = costab.c noinst_PROGRAMS = gentbl $(srcdir)/costab.c: gentbl ./gentbl $(srcdir)/costab.c endif eppfm_SOURCES = \ main.c audio.c eppfm.h costab.c \ support.c support.h \ interface.c interface.h \ callbacks.c callbacks.h eppfm_LDADD = \ $(top_builddir)/main/libinit.a $(top_builddir)/main/libresident.a \ $(GTK_LIBS) $(top_builddir)/main/libmisc.a $(DIRECTXLIBS) baycomepp-0.10.orig/eppfm/main.c0100644000175100017510000001200107070607065014603 0ustar abaaba/*****************************************************************************/ /* * main.c -- Main routines for "virtual transceiver". * * Copyright (C) 1999-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define G_LOG_DOMAIN "eppfm" #include #include #include #include #ifdef HAVE_SYSLOG_H #include #endif #ifdef HAVE_GETOPT_H #include #endif #include #include #include "eppfm.h" #include "interface.h" #include "support.h" /* ---------------------------------------------------------------------- */ static struct adapter_config cfg = { 19666600, 9600, 0, 0, 0, 1, 1, 0, 1 }; static unsigned verboselevel = 0; static unsigned syslogmsg = 0; /* ---------------------------------------------------------------------- */ /*OutputDebugStringA*/ int lprintf(unsigned vl, const char *format, ...) { va_list ap; int r; if (vl > verboselevel) return 0; va_start(ap, format); #ifdef HAVE_VSYSLOG if (syslogmsg) { static const int logprio[] = { LOG_ERR, LOG_INFO }; vsyslog((vl > 1) ? LOG_DEBUG : logprio[vl], format, ap); r = 0; } else #endif r = vfprintf(stderr, format, ap); va_end(ap); return r; } /* ---------------------------------------------------------------------- */ static gint periodic(gpointer data) { GtkWidget *mainwindow = (GtkWidget *)data; GtkWidget *meterrx; GtkWidget *metertx; unsigned ilvl, olvl; ilvl = audio_getilevel(); olvl = audio_getolevel(); printf("ilvl %5u log %6.2f\n", ilvl, log(ilvl ? ilvl : 1) * (1.0 / 11.09)); meterrx = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(mainwindow), "meterrx")); metertx = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(mainwindow), "metertx")); gtk_progress_set_percentage(GTK_PROGRESS(meterrx), log(ilvl ? ilvl : 1) * (1.0 / 11.09)); gtk_progress_set_percentage(GTK_PROGRESS(metertx), log(olvl ? olvl : 1) * (1.0 / 11.09)); return TRUE; } /* ---------------------------------------------------------------------- */ int main(int argc, char *argv[]) { GtkWidget *mainwindow; gint tmtag; int c, err = 0; unsigned iobase = 0x378; printf("EPP virtual transceiver (c) 1998-2000 by Thomas Sailer, HB9JNX/AE4WA\n"); #if 0 bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR); textdomain (PACKAGE); #endif gtk_set_locale(); gtk_init(&argc, &argv); #if 0 add_pixmap_directory(PACKAGE_DATA_DIR "/pixmaps"); add_pixmap_directory(PACKAGE_SOURCE_DIR "/pixmaps"); #endif while ((c = getopt(argc, argv, "svp:m:")) != EOF) { switch (c) { case 'p': iobase = strtoul(optarg, NULL, 0); if (iobase <= 0 || iobase >= 0x3f8) err++; break; case 'm': parseconfig(&cfg, optarg); break; case 'v': verboselevel++; break; #if defined(HAVE_SYSLOG) && defined(HAVE_VSYSLOG) case 's': if (syslogmsg) break; openlog("eppfpga", LOG_PID, LOG_USER); syslogmsg = 1; break; #endif default: err++; break; } } if (err) { g_message("usage: %s [-v] [-p ] [-m ]\n", argv[0]); exit(1); } if (parport_init_direct(iobase)) { g_error("no parport found at 0x%x\n", iobase); exit(1); } if (audio_start(&cfg)) { g_error("Cannot start audio services\n"); exit(1); } mainwindow = create_mainwindow(); gtk_widget_show(mainwindow); tmtag = gtk_timeout_add(250, periodic, mainwindow); gtk_main(); gtk_timeout_remove(tmtag); audio_stop(); return 0; } baycomepp-0.10.orig/eppfm/audio.c0100644000175100017510000006546107141055661015000 0ustar abaaba/*****************************************************************************/ /* * audio.c -- Audio processing for "virtual transceiver". * * Copyright (C) 1999-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #define G_LOG_DOMAIN "eppfm" #ifdef HAVE_LINUX_SOUNDCARD_H #include #include #include #include #include #include #include #include #endif #ifdef HAVE_DIRECTX #include #endif #include "eppfm.h" #include #include struct { /* gtk timeout handle */ gint tmotag; /* sampling rate conversion state */ unsigned phinceppdsp, phincdspepp, pheppdsp, phdspepp; /* ptt state */ unsigned ptt_state; /* control register */ unsigned char ctrlreg; /* led blink counter */ unsigned ledcnt; /* level counter */ unsigned lvlicnt, lvliaccum, lvli, lvlocnt, lvloaccum, lvlo; /* frequency generators */ unsigned phase0, phase1, phase2, phase3; unsigned freq0, freq1, freq2, freq3; /* low level driver specific data */ #ifdef HAVE_LINUX_SOUNDCARD_H int fddsp; #endif #ifdef HAVE_DIRECTX LPDIRECTSOUND dsplay; LPDIRECTSOUNDCAPTURE dsrec; LPDIRECTSOUNDBUFFER playbuf; LPDIRECTSOUNDCAPTUREBUFFER recbuf; HANDLE hinst; HWND hwnd; DWORD playbufsz, recbufsz, playptr, recptr; #endif } state; #define SNDLATENCY 4000 /* approx 1/2 seconds */ #define BUFSIZE 8192 /* must be significantly bigger than SNDLATENCY! */ #define PHASEFRAC 12 /* ---------------------------------------------------------------------- */ void audio_ptt(int ptt) { if (ptt) state.ptt_state |= 1; else state.ptt_state &= ~1; } void audio_1750(int on) { if (on) { state.freq2 = (1750*65536+8000/2)/8000; } else { state.freq2 = 0; state.phase2 = 0x4000; } } /* * * DTMF frequencies * * 1209 1336 1477 1633 * 697 1 2 3 A * 770 4 5 6 B * 852 7 8 9 C * 941 * 0 # D * */ void audio_dtmf(int ch) { switch (ch) { case 0: state.freq0 = (1336*65536+8000/2)/8000; state.freq1 = (941*65536+8000/2)/8000; break; case 1: state.freq0 = (1209*65536+8000/2)/8000; state.freq1 = (697*65536+8000/2)/8000; break; case 2: state.freq0 = (1336*65536+8000/2)/8000; state.freq1 = (697*65536+8000/2)/8000; break; case 3: state.freq0 = (1477*65536+8000/2)/8000; state.freq1 = (697*65536+8000/2)/8000; break; case 4: state.freq0 = (1209*65536+8000/2)/8000; state.freq1 = (770*65536+8000/2)/8000; break; case 5: state.freq0 = (1336*65536+8000/2)/8000; state.freq1 = (770*65536+8000/2)/8000; break; case 6: state.freq0 = (1477*65536+8000/2)/8000; state.freq1 = (770*65536+8000/2)/8000; break; case 7: state.freq0 = (1209*65536+8000/2)/8000; state.freq1 = (852*65536+8000/2)/8000; break; case 8: state.freq0 = (1336*65536+8000/2)/8000; state.freq1 = (852*65536+8000/2)/8000; break; case 9: state.freq0 = (1477*65536+8000/2)/8000; state.freq1 = (852*65536+8000/2)/8000; break; case 10: state.freq0 = (1633*65536+8000/2)/8000; state.freq1 = (697*65536+8000/2)/8000; break; case 11: state.freq0 = (1633*65536+8000/2)/8000; state.freq1 = (770*65536+8000/2)/8000; break; case 12: state.freq0 = (1633*65536+8000/2)/8000; state.freq1 = (852*65536+8000/2)/8000; break; case 13: state.freq0 = (1633*65536+8000/2)/8000; state.freq1 = (941*65536+8000/2)/8000; break; case 14: state.freq0 = (1209*65536+8000/2)/8000; state.freq1 = (941*65536+8000/2)/8000; break; case 15: state.freq0 = (1477*65536+8000/2)/8000; state.freq1 = (941*65536+8000/2)/8000; break; default: state.freq0 = state.freq1 = 0; state.phase0 = state.phase1 = 0x4000; break; } } unsigned audio_getilevel(void) { return state.lvli; } unsigned audio_getolevel(void) { return state.lvlo; } /* ---------------------------------------------------------------------- */ #define LEVELACCUM 2048 static void process_input(int16_t *buf, unsigned cnt) { unsigned i; for (i = 0; i < cnt; i++) { state.lvliaccum += ((int)buf[i] * (int)buf[i]) >> 16; if ((++state.lvlicnt) >= LEVELACCUM) { state.lvli = state.lvliaccum / LEVELACCUM; state.lvlicnt = state.lvliaccum = 0; } } } static void process_output(int16_t *buf, unsigned cnt) { unsigned i; int acc; for (i = 0; i < cnt; i++) { acc = buf[i]; state.lvloaccum += (acc * acc) >> 16; if ((++state.lvlocnt) >= LEVELACCUM) { state.lvlo = state.lvloaccum / LEVELACCUM; state.lvlocnt = state.lvloaccum = 0; } acc += (SIN(state.phase0) + SIN(state.phase1) + SIN(state.phase2) + SIN(state.phase3)) >> 1; if (acc > 32767) acc = 32767; else if (acc < -32768) acc = -32768; buf[i] = acc; state.phase0 += state.freq0; state.phase1 += state.freq1; state.phase2 += state.freq2; state.phase3 += state.freq3; } } static void initstate(void) { state.pheppdsp = 0; state.phdspepp = 0; state.ptt_state = 0; state.ctrlreg = 0; state.ledcnt = 0; state.lvlicnt = state.lvliaccum = state.lvli = 0; state.lvlocnt = state.lvloaccum = state.lvlo = 0; state.phase0 = state.phase1 = state.phase2 = state.phase3 = 0x4000; state.freq0 = state.freq1 = state.freq2 = state.freq3 = 0; } /* ---------------------------------------------------------------------- */ #ifdef HAVE_LINUX_SOUNDCARD_H void audio_stop(void) { if (state.fddsp != -1) { gtk_timeout_remove(state.tmotag); close(state.fddsp); state.fddsp = -1; reset_modem(); } } static gint periodic(gpointer data) { union { unsigned char u[BUFSIZE]; signed char s[BUFSIZE]; } buf; int16_t sbuf[BUFSIZE]; int apar, i, icnt, ocnt, cnt, ocnts, omax; /* first do the epp->dsp direction */ /* get FIFO count */ buf.u[0] = state.ctrlreg | 1; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; icnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; icnt &= 0x7fff; if (icnt > 0) { if (icnt > BUFSIZE/2) icnt = BUFSIZE/2; if (parport_epp_read_data(buf.s, icnt) != icnt) goto err; state.pheppdsp &= 0xff; cnt = 0; while (state.pheppdsp < (icnt << PHASEFRAC)) { sbuf[cnt] = buf.s[state.pheppdsp >> PHASEFRAC] << 8; state.pheppdsp += state.phinceppdsp; cnt++; } process_input(sbuf, cnt); if ((i = write(state.fddsp, sbuf, 2*cnt)) != 2*cnt) { lprintf(0, "write(%d) failed %i (%s)\n", 2*cnt, i, strerror(errno)); goto err; } if (ioctl(state.fddsp, SNDCTL_DSP_GETODELAY, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETODELAY failed (%s)\n", strerror(errno)); goto err; } apar >>= 1; /* adjust speed */ lprintf(4, "icnt %d cnt %d odel %d\n", icnt, cnt, apar); if (apar > SNDLATENCY) state.phinceppdsp++; else if (apar < SNDLATENCY) state.phinceppdsp--; if (state.phinceppdsp < (0x9 << (PHASEFRAC-4)) || state.phinceppdsp > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phinceppdsp (0x%05x) out of range\n", state.phinceppdsp); goto err; } /* play games with the LEDS */ state.ledcnt += icnt; if (state.ledcnt >= 4000) { state.ledcnt %= 4000; state.ctrlreg += 0x40; } } /* next do the dsp->epp direction */ /* read sound */ ocnts = read(state.fddsp, sbuf, 2*BUFSIZE/2); if (ocnts == -1 && errno == EAGAIN) ocnts = 0; if (ocnts < 0) { lprintf(0, "read(%d) failed %i (%s)\n", 2*BUFSIZE/2, ocnts, strerror(errno)); goto err; } ocnts >>= 1; process_output(sbuf, ocnts); if (state.ptt_state == 2) { state.ptt_state = 0; state.ctrlreg &= ~0x20; buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; } if (!state.ptt_state) goto endper; /* get FIFO count */ state.ctrlreg |= 0x20; buf.u[0] = state.ctrlreg | 2; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; ocnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; ocnt &= 0x7fff; omax = 16384 - ocnt; if (state.ptt_state == 1) { if (ocnt < SNDLATENCY) { memset(buf.s, 0, SNDLATENCY-ocnt); if (parport_epp_write_data(buf.s, SNDLATENCY-ocnt) != SNDLATENCY-ocnt) goto err; } state.ptt_state = 3; goto endper; } if (ocnts > 0) { state.phdspepp &= 0xff; cnt = 0; while (state.phdspepp < (ocnts << PHASEFRAC)) { buf.s[cnt] = sbuf[state.phdspepp >> PHASEFRAC] >> 8; state.phdspepp += state.phincdspepp; cnt++; } if (cnt > omax) { lprintf(0, "epp adapter output overrun (%d, %d)\n", cnt, omax); goto err; } if (parport_epp_write_data(buf.s, cnt) != cnt) goto err; /* reget the FIFO count */ buf.u[0] = state.ctrlreg | 2; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; ocnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; ocnt &= 0x7fff; } /* adjust speed */ lprintf(4, "ocnts %d cnt %d ocnt %d\n", ocnts, cnt, ocnt); if (ocnt > SNDLATENCY) state.phincdspepp++; else if (ocnt < SNDLATENCY) state.phincdspepp--; if (state.phincdspepp < (0x9 << (PHASEFRAC-4)) || state.phincdspepp > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phincdspepp (0x%05x) out of range\n", state.phincdspepp); goto err; } endper: lprintf(3, "phase increments: 0x%05x 0x%05x\n", state.phinceppdsp, state.phincdspepp); return TRUE; err: lprintf(0, "EPP timeout\n"); close(state.fddsp); state.fddsp = -1; reset_modem(); return FALSE; } int audio_start(struct adapter_config *cfg) { unsigned char buf[2]; int16_t sbuf[SNDLATENCY]; audio_buf_info aboinfo, abiinfo; int apar; unsigned srate; int i; initstate(); cfg->bitrate = 8000; if ((i = adapter_start_eppsamp(cfg))) { lprintf(0, "Cannot initialize the modem\n"); return i; } if ((state.fddsp = open("/dev/dsp", O_RDWR | O_NONBLOCK)) == -1) { lprintf(0, "cannot open /dev/dsp (%s)\n", strerror(errno)); return -1; } fcntl(state.fddsp, F_SETFL, fcntl(state.fddsp, F_GETFL, 0) | O_NONBLOCK); if (ioctl(state.fddsp, SNDCTL_DSP_NONBLOCK, 0) == -1) { lprintf(0, "ioctl SNDCTL_DSP_NONBLOCK failed (%s)\n", strerror(errno)); goto errsnd; } if (ioctl(state.fddsp, SNDCTL_DSP_GETCAPS, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETCAPS failed (%s)\n", strerror(errno)); goto errsnd; } if (!(apar & DSP_CAP_DUPLEX)) { lprintf(0, "full duplex soundcard required\n"); goto errsnd; } if (!(apar & DSP_CAP_TRIGGER)) { lprintf(0, "soundcard does not support trigger\n"); goto errsnd; } if (ioctl(state.fddsp, SNDCTL_DSP_SETDUPLEX, 0) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETDUPLEX failed (%s)\n", strerror(errno)); goto errsnd; } apar = AFMT_S16_LE; if (ioctl(state.fddsp, SNDCTL_DSP_SETFMT, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETFMT failed (%s), S16_LE not supported??\n", strerror(errno)); goto errsnd; } apar = 0; if (ioctl(state.fddsp, SNDCTL_DSP_STEREO, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_STEREO failed (%s), mono not supported??\n", strerror(errno)); goto errsnd; } srate = cfg->bitrate; if (ioctl(state.fddsp, SNDCTL_DSP_SPEED, &srate) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SPEED failed (%s), samplingrate %u not supported??\n", strerror(errno), cfg->bitrate); goto errsnd; } lprintf(2, "epp adapter sampling rate %u, soundcard sampling rate %u\n", cfg->bitrate, srate); if (abs(cfg->bitrate - srate) > cfg->bitrate / 2) { lprintf(0, "sampling rates (%u,%u) too different\n", cfg->bitrate, srate); goto errsnd; } state.phinceppdsp = ((1 << PHASEFRAC) * cfg->bitrate + srate / 2) / srate; state.phincdspepp = ((1 << PHASEFRAC) * srate + cfg->bitrate / 2) / cfg->bitrate; lprintf(2, "epp->dsp phase inc: 0x%05x dsp->epp phase inc: 0x%05x\n", state.phinceppdsp, state.phincdspepp); if (ioctl(state.fddsp, SNDCTL_DSP_GETOSPACE, &aboinfo) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETOSPACE failed (%s)\n", strerror(errno)); goto errsnd; } if (ioctl(state.fddsp, SNDCTL_DSP_GETISPACE, &abiinfo) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETISPACE failed (%s)\n", strerror(errno)); goto errsnd; } if (aboinfo.fragstotal * aboinfo.fragsize < 2*SNDLATENCY*2 || abiinfo.fragstotal * abiinfo.fragsize < 2*SNDLATENCY*2) { lprintf(0, "soundcard buffers too small (%u,%u)\n", aboinfo.fragstotal * aboinfo.fragsize, abiinfo.fragstotal * abiinfo.fragsize); goto errsnd; } lprintf(0, "Audio IO to Linux Soundcard\n"); /* reset the EPP adapter */ buf[0] = 7; buf[1] = 0; if (parport_epp_write_addr(buf, 2) != 2) goto errret; /* prefill to nominal queue size and stard soundcard */ memset(sbuf, 0, sizeof(sbuf)); if ((i = write(state.fddsp, sbuf, 2*SNDLATENCY)) != 2*SNDLATENCY) { lprintf(0, "write(%d) failed %i (%s)\n", 2*SNDLATENCY, i, strerror(errno)); goto errsnd; } apar = PCM_ENABLE_INPUT | PCM_ENABLE_OUTPUT; if (ioctl(state.fddsp, SNDCTL_DSP_SETTRIGGER, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETTRIGGER failed (%s)\n", strerror(errno)); goto errsnd; } state.tmotag = gtk_timeout_add(100, periodic, NULL); return 0; errret: lprintf(0, "EPP timeout\n"); errsnd: close(state.fddsp); return -1; } #endif /* HAVE_LINUX_SOUNDCARD_H */ /* ---------------------------------------------------------------------- */ #ifdef HAVE_DIRECTX static BOOL CALLBACK DSEnumProc(LPGUID guid, LPCSTR lpszDesc, LPCSTR lpszDrvName, LPVOID lpcontext) { lprintf(1, "has %sGUID, desc %s drvname %s\n", guid ? "" : "no ", lpszDesc, lpszDrvName); return TRUE; } #if 0 static LRESULT CALLBACK MyWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) { switch(umsg) { /* Add cases such as WM_CREATE, WM_COMMAND, WM_PAINT if you don't want to pass these messages along for default processing. */ case WM_CLOSE: DestroyWindow(hwnd); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, umsg, wParam, lParam); } #endif void audio_stop(void) { if (state.hwnd != NULL) { gtk_timeout_remove(state.tmotag); IDirectSoundBuffer_Stop(state.playbuf); IDirectSoundCaptureBuffer_Stop(state.recbuf); IDirectSoundBuffer_Release(state.playbuf); IDirectSoundCaptureBuffer_Release(state.recbuf); IDirectSoundCapture_Release(state.dsrec); IDirectSound_Release(state.dsplay); #if 0 DestroyWindow(state.hwnd); UnregisterClass("MyClass", state.hinst); #endif state.hwnd = NULL; reset_modem(); } } static gint periodic(gpointer data) { union { unsigned char u[BUFSIZE]; signed char s[BUFSIZE]; } buf; int16_t sbuf[BUFSIZE]; int16_t *sptr1, *sptr2; HRESULT res; DWORD lockbytes1, lockbytes2, delay; int icnt, ocnt, cnt, ocnts, omax; /* first do the epp->dsp direction */ /* get FIFO count */ buf.u[0] = state.ctrlreg | 1; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; icnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; icnt &= 0x7fff; if (icnt > 0) { if (icnt > BUFSIZE/2) icnt = BUFSIZE/2; if (parport_epp_read_data(buf.s, icnt) != icnt) goto err; state.pheppdsp &= 0xff; cnt = 0; while (state.pheppdsp < (icnt << PHASEFRAC)) { sbuf[cnt] = buf.s[state.pheppdsp >> PHASEFRAC] << 8; state.pheppdsp += state.phinceppdsp; cnt++; } process_input(sbuf, cnt); if (FAILED(res = IDirectSoundBuffer_Lock(state.playbuf, state.playptr, cnt*2, (LPVOID)&sptr1, &lockbytes1, (LPVOID)&sptr2, &lockbytes2, 0))) { lprintf(0, "IDirectSoundBuffer_Lock error %lu\n", res); goto err; } memcpy(sptr1, sbuf, lockbytes1); if (lockbytes1 < 2*cnt) memcpy(sptr2, sbuf + lockbytes1/2, 2*cnt - lockbytes1); if (FAILED(res = IDirectSoundBuffer_Unlock(state.playbuf, sptr1, lockbytes1, sptr2, lockbytes2))) { lprintf(0, "IDirectSoundBuffer_Unlock error %lu\n", res); goto err; } state.playptr = (state.playptr + 2*cnt) % state.playbufsz; /* get output delay */ if (FAILED(res = IDirectSoundBuffer_GetCurrentPosition(state.playbuf, &delay, NULL))) { lprintf(0, "IDirectSoundBuffer_GetCurrentPosition error %lu\n", res); goto err; } delay = (state.playbufsz + state.playptr - delay) % state.playbufsz; delay >>= 1; /* adjust speed */ lprintf(4, "icnt %d cnt %d odel %u\n", icnt, cnt, delay); if (delay > SNDLATENCY) state.phinceppdsp++; else if (delay < SNDLATENCY) state.phinceppdsp--; if (state.phinceppdsp < (0x9 << (PHASEFRAC-4)) || state.phinceppdsp > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phinceppdsp (0x%05x) out of range\n", state.phinceppdsp); goto err; } /* play games with the LEDS */ state.ledcnt += icnt; if (state.ledcnt >= 4000) { state.ledcnt %= 4000; state.ctrlreg += 0x40; } } /* next do the dsp->epp direction */ /* read sound */ if (FAILED(res = IDirectSoundCaptureBuffer_GetCurrentPosition(state.recbuf, &delay, NULL))) { lprintf(0, "IDirectSoundCaptureBuffer_GetCurrentPosition error %lu\n", res); goto err; } ocnts = (state.recbufsz + delay - state.recptr) % state.recbufsz; if (ocnts > 0) { if (FAILED(res = IDirectSoundCaptureBuffer_Lock(state.recbuf, state.recptr, ocnts, (LPVOID)&sptr1, &lockbytes1, (LPVOID)&sptr2, &lockbytes2, 0))) { lprintf(0, "IDirectSoundCaptureBuffer_Lock error %lu\n", res); goto err; } memcpy(sbuf, sptr1, lockbytes1); if (lockbytes1 < ocnts) memcpy(sbuf + lockbytes1/2, sptr2, ocnts - lockbytes1); state.recptr = (state.recptr + ocnts) % state.recbufsz; if (FAILED(res = IDirectSoundCaptureBuffer_Unlock(state.recbuf, sptr1, lockbytes1, sptr2, lockbytes2))) { lprintf(0, "IDirectSoundCaptureBuffer_Unlock error %lu\n", res); goto err; } } ocnts >>= 1; process_output(sbuf, ocnts); if (state.ptt_state == 2) { state.ptt_state = 0; state.ctrlreg &= ~0x20; buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; } if (!state.ptt_state) goto endper; /* get FIFO count */ state.ctrlreg |= 0x20; buf.u[0] = state.ctrlreg | 2; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; ocnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; ocnt &= 0x7fff; omax = 16384 - ocnt; if (state.ptt_state == 1) { if (ocnt < SNDLATENCY) { memset(buf.s, 0, SNDLATENCY-ocnt); if (parport_epp_write_data(buf.s, SNDLATENCY-ocnt) != SNDLATENCY-ocnt) goto err; } state.ptt_state = 3; goto endper; } if (ocnts > 0) { state.phdspepp &= 0xff; cnt = 0; while (state.phdspepp < (ocnts << PHASEFRAC)) { buf.s[cnt] = sbuf[state.phdspepp >> PHASEFRAC] >> 8; state.phdspepp += state.phincdspepp; cnt++; } if (cnt > omax) { lprintf(0, "epp adapter output overrun (%d, %d)\n", cnt, omax); goto err; } if (parport_epp_write_data(buf.s, cnt) != cnt) goto err; /* reget the FIFO count */ buf.u[0] = state.ctrlreg | 2; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; ocnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; ocnt &= 0x7fff; } /* adjust speed */ lprintf(4, "ocnts %d cnt %d ocnt %d\n", ocnts, cnt, ocnt); if (ocnt > SNDLATENCY) state.phincdspepp++; else if (ocnt < SNDLATENCY) state.phincdspepp--; if (state.phincdspepp < (0x9 << (PHASEFRAC-4)) || state.phincdspepp > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phincdspepp (0x%05x) out of range\n", state.phincdspepp); goto err; } endper: lprintf(3, "phase increments: 0x%05x 0x%05x\n", state.phinceppdsp, state.phincdspepp); return TRUE; err: lprintf(0, "EPP timeout\n"); IDirectSoundBuffer_Stop(state.playbuf); IDirectSoundCaptureBuffer_Stop(state.recbuf); IDirectSoundBuffer_Release(state.playbuf); IDirectSoundCaptureBuffer_Release(state.recbuf); IDirectSoundCapture_Release(state.dsrec); IDirectSound_Release(state.dsplay); #if 0 DestroyWindow(state.hwnd); UnregisterClass("MyClass", state.hinst); #endif state.hwnd = NULL; reset_modem(); return FALSE; } int audio_start(struct adapter_config *cfg) { WNDCLASS wndclass; HRESULT res; WAVEFORMATEX waveformat; DSBUFFERDESC bdesc; DSCBUFFERDESC cbdesc; DWORD lockbytes; int16_t *sptr; int retval = -1; unsigned char buf[2]; int i; state.dsplay = NULL; state.dsrec = NULL; state.playbuf = NULL; state.recbuf = NULL; state.hwnd = NULL; state.hinst = GetModuleHandleA(0); state.playptr = 0; state.recptr = 0; initstate(); lprintf(1, "DirectSound drivers\n"); DirectSoundEnumerateA(DSEnumProc, NULL); lprintf(1, "DirectSoundCapture drivers\n"); DirectSoundCaptureEnumerateA(DSEnumProc, NULL); #if 0 wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = (WNDPROC)MyWndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hIcon = NULL; wndclass.hInstance = state.hinst; wndclass.hCursor = NULL; wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "MyClass"; if (!RegisterClass(&wndclass)) { lprintf(0, "RegisterClass error, %d\n", GetLastError()); return -1; } state.hwnd = CreateWindowEx(WS_EX_APPWINDOW, "MyClass", "eppfpga", WS_DISABLED | WS_POPUP, 0, 0, 0, 0, NULL, NULL, state.hinst, NULL); if (!state.hwnd) { lprintf(0, "CreateWindowEx error, %d\n", GetLastError()); goto errcreatewin; } #else state.hwnd = GetDesktopWindow(); #endif if (FAILED(res = DirectSoundCreate(NULL, &state.dsplay, NULL))) { lprintf(0, "DirectSoundCreate error %lu\n", res); goto errdscreate; } if (FAILED(res = IDirectSound_SetCooperativeLevel(state.dsplay, state.hwnd, DSSCL_NORMAL))) { lprintf(0, "SetCooperativeLevel error %lu\n", res); goto errdscreate1; } if (FAILED(res = DirectSoundCaptureCreate(NULL, &state.dsrec, NULL))) { lprintf(0, "DirectSoundCaptureCreate error %lu\n", res); goto errdscreate1; } memset(&waveformat, 0, sizeof(waveformat)); waveformat.wFormatTag = WAVE_FORMAT_PCM; waveformat.wBitsPerSample = 8; waveformat.nChannels = 1; waveformat.nSamplesPerSec = 8000; waveformat.nBlockAlign = waveformat.nChannels * waveformat.wBitsPerSample / 8; waveformat.nAvgBytesPerSec = waveformat.nSamplesPerSec * waveformat.nBlockAlign; memset(&cbdesc, 0, sizeof(cbdesc)); cbdesc.dwSize = sizeof(cbdesc); cbdesc.dwFlags = /* DSCBCAPS_WAVEMAPPED */ 0; state.recbufsz = cbdesc.dwBufferBytes = waveformat.nAvgBytesPerSec; cbdesc.lpwfxFormat = &waveformat; if (FAILED(res = IDirectSoundCapture_CreateCaptureBuffer(state.dsrec, &cbdesc, &state.recbuf, NULL))) { lprintf(0, "CreateSoundCaptureBuffer error %lu\n", res); goto errdscreate2; } memset(&waveformat, 0, sizeof(waveformat)); waveformat.wFormatTag = WAVE_FORMAT_PCM; waveformat.wBitsPerSample = 8; waveformat.nChannels = 1; waveformat.nSamplesPerSec = 8000; waveformat.nBlockAlign = waveformat.nChannels * waveformat.wBitsPerSample / 8; waveformat.nAvgBytesPerSec = waveformat.nSamplesPerSec * waveformat.nBlockAlign; memset(&bdesc, 0, sizeof(bdesc)); bdesc.dwSize = sizeof(bdesc); bdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN; state.playbufsz = bdesc.dwBufferBytes = waveformat.nAvgBytesPerSec; bdesc.lpwfxFormat = &waveformat; if (FAILED(res = IDirectSound_CreateSoundBuffer(state.dsplay, &bdesc, &state.playbuf, NULL))) { lprintf(0, "CreateSoundBuffer error %lu\n", res); goto errdscreate3; } cfg->bitrate = 8000; if ((i = adapter_start_eppsamp(cfg))) { retval = i; lprintf(0, "Cannot initialize the modem\n"); goto errdscreate4; } state.phinceppdsp = ((1 << PHASEFRAC) * cfg->bitrate + 8000 / 2) / 8000; state.phincdspepp = ((1 << PHASEFRAC) * 8000 + cfg->bitrate / 2) / cfg->bitrate; lprintf(2, "epp->dsp phase inc: 0x%05x dsp->epp phase inc: 0x%05x\n", state.phinceppdsp, state.phincdspepp); lprintf(0, "Audio IO to DirectX\n"); /* reset the EPP adapter */ buf[0] = 7; buf[1] = 0; if (parport_epp_write_addr(buf, 2) != 2) goto errret; /* prefill to nominal queue size and stard soundcard */ if (FAILED(res = IDirectSoundBuffer_Lock(state.playbuf, 0, 2*SNDLATENCY, (LPVOID)&sptr, &lockbytes, NULL, NULL, 0))) { lprintf(0, "IDirectSoundBuffer_Lock error %lu\n", res); goto errresmodem; } memset(sptr, 0, 2*SNDLATENCY); if (FAILED(res = IDirectSoundBuffer_Unlock(state.playbuf, sptr, lockbytes, NULL, 0))) { lprintf(0, "IDirectSoundBuffer_Unlock error %lu\n", res); goto errresmodem; } state.playptr = SNDLATENCY; if (FAILED(res = IDirectSoundBuffer_Play(state.playbuf, 0, 0, DSBPLAY_LOOPING))) { lprintf(0, "IDirectSoundBuffer_Play error %lu\n", res); goto errresmodem; } if (FAILED(res = IDirectSoundCaptureBuffer_Start(state.recbuf, DSCBSTART_LOOPING))) { lprintf(0, "IDirectSoundCaptureBuffer_Start error %lu\n", res); goto errresmodem; } state.tmotag = gtk_timeout_add(100, periodic, NULL); return 0; errret: lprintf(0, "EPP timeout\n"); errresmodem: IDirectSoundBuffer_Stop(state.playbuf); IDirectSoundCaptureBuffer_Stop(state.recbuf); reset_modem(); errdscreate4: IDirectSoundBuffer_Release(state.playbuf); errdscreate3: IDirectSoundCaptureBuffer_Release(state.recbuf); errdscreate2: IDirectSoundCapture_Release(state.dsrec); errdscreate1: IDirectSound_Release(state.dsplay); errdscreate: #if 0 DestroyWindow(state.hwnd); errcreatewin: UnregisterClass("MyClass", state.hinst); #endif return -1; } #endif /* HAVE_DIRECTX */ /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/eppfm/eppfm.h0100644000175100017510000000371306741507507015011 0ustar abaaba/*****************************************************************************/ /* * eppfm.h -- Function prototypes for "virtual transceiver". * * Copyright (C) 1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifndef _EPPFM_H #define _EPPFM_H /* ---------------------------------------------------------------------- */ #include "fpga.h" /* ---------------------------------------------------------------------- */ extern const int16_t costab[512]; #define COS(x) costab[((x)>>7)&0x1ff] #define SIN(x) COS((x)+0xc000) /* ---------------------------------------------------------------------- */ extern void audio_ptt(int ptt); extern void audio_stop(void); extern int audio_start(struct adapter_config *cfg); extern void audio_1750(int on); extern void audio_dtmf(int ch); extern unsigned audio_getilevel(void); extern unsigned audio_getolevel(void); /* ---------------------------------------------------------------------- */ #endif /* _EPPFM_H */ baycomepp-0.10.orig/eppfm/costab.c0100644000175100017510000001034307511775566015155 0ustar abaaba#include #include "eppfm.h" /* * cosine table */ const int16_t costab[512] = { 32767, 32764, 32757, 32744, 32727, 32705, 32678, 32646, 32609, 32567, 32520, 32468, 32412, 32350, 32284, 32213, 32137, 32056, 31970, 31880, 31785, 31684, 31580, 31470, 31356, 31236, 31113, 30984, 30851, 30713, 30571, 30424, 30272, 30116, 29955, 29790, 29621, 29446, 29268, 29085, 28897, 28706, 28510, 28309, 28105, 27896, 27683, 27466, 27244, 27019, 26789, 26556, 26318, 26077, 25831, 25582, 25329, 25072, 24811, 24546, 24278, 24006, 23731, 23452, 23169, 22883, 22594, 22301, 22004, 21705, 21402, 21096, 20787, 20474, 20159, 19840, 19519, 19194, 18867, 18537, 18204, 17868, 17530, 17189, 16845, 16499, 16150, 15799, 15446, 15090, 14732, 14372, 14009, 13645, 13278, 12909, 12539, 12166, 11792, 11416, 11038, 10659, 10278, 9895, 9511, 9126, 8739, 8351, 7961, 7571, 7179, 6786, 6392, 5997, 5601, 5205, 4807, 4409, 4011, 3611, 3211, 2811, 2410, 2009, 1607, 1206, 804, 402, 0, -402, -804, -1206, -1607, -2009, -2410, -2811, -3211, -3611, -4011, -4409, -4807, -5205, -5601, -5997, -6392, -6786, -7179, -7571, -7961, -8351, -8739, -9126, -9511, -9895, -10278, -10659, -11038, -11416, -11792, -12166, -12539, -12909, -13278, -13645, -14009, -14372, -14732, -15090, -15446, -15799, -16150, -16499, -16845, -17189, -17530, -17868, -18204, -18537, -18867, -19194, -19519, -19840, -20159, -20474, -20787, -21096, -21402, -21705, -22004, -22301, -22594, -22883, -23169, -23452, -23731, -24006, -24278, -24546, -24811, -25072, -25329, -25582, -25831, -26077, -26318, -26556, -26789, -27019, -27244, -27466, -27683, -27896, -28105, -28309, -28510, -28706, -28897, -29085, -29268, -29446, -29621, -29790, -29955, -30116, -30272, -30424, -30571, -30713, -30851, -30984, -31113, -31236, -31356, -31470, -31580, -31684, -31785, -31880, -31970, -32056, -32137, -32213, -32284, -32350, -32412, -32468, -32520, -32567, -32609, -32646, -32678, -32705, -32727, -32744, -32757, -32764, -32767, -32764, -32757, -32744, -32727, -32705, -32678, -32646, -32609, -32567, -32520, -32468, -32412, -32350, -32284, -32213, -32137, -32056, -31970, -31880, -31785, -31684, -31580, -31470, -31356, -31236, -31113, -30984, -30851, -30713, -30571, -30424, -30272, -30116, -29955, -29790, -29621, -29446, -29268, -29085, -28897, -28706, -28510, -28309, -28105, -27896, -27683, -27466, -27244, -27019, -26789, -26556, -26318, -26077, -25831, -25582, -25329, -25072, -24811, -24546, -24278, -24006, -23731, -23452, -23169, -22883, -22594, -22301, -22004, -21705, -21402, -21096, -20787, -20474, -20159, -19840, -19519, -19194, -18867, -18537, -18204, -17868, -17530, -17189, -16845, -16499, -16150, -15799, -15446, -15090, -14732, -14372, -14009, -13645, -13278, -12909, -12539, -12166, -11792, -11416, -11038, -10659, -10278, -9895, -9511, -9126, -8739, -8351, -7961, -7571, -7179, -6786, -6392, -5997, -5601, -5205, -4807, -4409, -4011, -3611, -3211, -2811, -2410, -2009, -1607, -1206, -804, -402, 0, 402, 804, 1206, 1607, 2009, 2410, 2811, 3211, 3611, 4011, 4409, 4807, 5205, 5601, 5997, 6392, 6786, 7179, 7571, 7961, 8351, 8739, 9126, 9511, 9895, 10278, 10659, 11038, 11416, 11792, 12166, 12539, 12909, 13278, 13645, 14009, 14372, 14732, 15090, 15446, 15799, 16150, 16499, 16845, 17189, 17530, 17868, 18204, 18537, 18867, 19194, 19519, 19840, 20159, 20474, 20787, 21096, 21402, 21705, 22004, 22301, 22594, 22883, 23169, 23452, 23731, 24006, 24278, 24546, 24811, 25072, 25329, 25582, 25831, 26077, 26318, 26556, 26789, 27019, 27244, 27466, 27683, 27896, 28105, 28309, 28510, 28706, 28897, 29085, 29268, 29446, 29621, 29790, 29955, 30116, 30272, 30424, 30571, 30713, 30851, 30984, 31113, 31236, 31356, 31470, 31580, 31684, 31785, 31880, 31970, 32056, 32137, 32213, 32284, 32350, 32412, 32468, 32520, 32567, 32609, 32646, 32678, 32705, 32727, 32744, 32757, 32764 }; baycomepp-0.10.orig/eppfm/support.c0100644000175100017510000001056406741357152015412 0ustar abaaba/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "support.h" /* This is an internally used function to check if a pixmap file exists. */ static gchar* check_file_exists (const gchar *directory, const gchar *filename); /* This is an internally used function to create pixmaps. */ static GtkWidget* create_dummy_pixmap (GtkWidget *widget); GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = widget->parent; if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } /* This is a dummy pixmap we use when a pixmap can't be found. */ static char *dummy_pixmap_xpm[] = { /* columns rows colors chars-per-pixel */ "1 1 1 1", " c None", /* pixels */ " " }; /* This is an internally used function to create pixmaps. */ static GtkWidget* create_dummy_pixmap (GtkWidget *widget) { GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; colormap = gtk_widget_get_colormap (widget); gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask, NULL, dummy_pixmap_xpm); if (gdkpixmap == NULL) g_error ("Couldn't create replacement pixmap."); pixmap = gtk_pixmap_new (gdkpixmap, mask); gdk_pixmap_unref (gdkpixmap); gdk_bitmap_unref (mask); return pixmap; } static GList *pixmaps_directories = NULL; /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory) { pixmaps_directories = g_list_prepend (pixmaps_directories, g_strdup (directory)); } /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename) { gchar *found_filename = NULL; GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; GList *elem; /* We first try any pixmaps directories set by the application. */ elem = pixmaps_directories; while (elem) { found_filename = check_file_exists ((gchar*)elem->data, filename); if (found_filename) break; elem = elem->next; } /* If we haven't found the pixmap, try the source directory. */ if (!found_filename) { found_filename = check_file_exists ("../pixmaps", filename); } if (!found_filename) { g_warning ("Couldn't find pixmap file: %s", filename); return create_dummy_pixmap (widget); } colormap = gtk_widget_get_colormap (widget); gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, &mask, NULL, found_filename); if (gdkpixmap == NULL) { g_warning ("Error loading pixmap file: %s", found_filename); g_free (found_filename); return create_dummy_pixmap (widget); } g_free (found_filename); pixmap = gtk_pixmap_new (gdkpixmap, mask); gdk_pixmap_unref (gdkpixmap); gdk_bitmap_unref (mask); return pixmap; } /* This is an internally used function to check if a pixmap file exists. */ gchar* check_file_exists (const gchar *directory, const gchar *filename) { gchar *full_filename; struct stat s; gint status; full_filename = (gchar*) g_malloc (strlen (directory) + 1 + strlen (filename) + 1); strcpy (full_filename, directory); strcat (full_filename, G_DIR_SEPARATOR_S); strcat (full_filename, filename); status = stat (full_filename, &s); if (status == 0 && S_ISREG (s.st_mode)) return full_filename; g_free (full_filename); return NULL; } baycomepp-0.10.orig/eppfm/support.h0100644000175100017510000000170206741357152015411 0ustar abaaba/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #include /* * Public Functions. */ /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name); /* get_widget() is deprecated. Use lookup_widget instead. */ #define get_widget lookup_widget /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory); /* * Private Functions. */ /* This is used to create the pixmaps in the interface. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename); baycomepp-0.10.orig/eppfm/interface.c0100644000175100017510000010432006741510761015625 0ustar abaaba/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "callbacks.h" #include "interface.h" #include "support.h" GtkWidget* create_mainwindow () { GtkWidget *mainwindow; GtkWidget *vbox1; GtkWidget *handlebox1; GtkWidget *menubar; guint tmp_key; GtkWidget *file; GtkWidget *file_menu; GtkAccelGroup *file_menu_accels; GtkWidget *exit; GtkWidget *help; GtkWidget *help_menu; GtkAccelGroup *help_menu_accels; GtkWidget *about; GtkWidget *hbox2; GtkWidget *vbox2; GtkWidget *button1750; GtkWidget *buttonptt; GtkWidget *frame1; GtkWidget *table1; GtkWidget *buttondtmf7; GtkWidget *buttondtmf8; GtkWidget *buttondtmf9; GtkWidget *buttondtmf10; GtkWidget *buttondtmf4; GtkWidget *buttondtmf5; GtkWidget *buttondtmf6; GtkWidget *buttondtmf11; GtkWidget *buttondtmf12; GtkWidget *buttondtmf3; GtkWidget *buttondtmf2; GtkWidget *buttondtmf1; GtkWidget *buttondtmf14; GtkWidget *buttondtmf0; GtkWidget *buttondtmf15; GtkWidget *buttondtmf13; GtkWidget *table2; GtkWidget *label1; GtkWidget *label2; GtkWidget *hbox3; GtkWidget *partxctcss; GtkWidget *partxctcssfreq; GList *partxctcssfreq_items = NULL; GtkWidget *hbox4; GtkWidget *parrxctcss; GtkWidget *parrxctcssfreq; GList *parrxctcssfreq_items = NULL; GtkWidget *parsql; GtkWidget *meterrx; GtkWidget *metertx; GtkWidget *metersql; GtkAccelGroup *accel_group; accel_group = gtk_accel_group_new (); mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_ref (mainwindow); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "mainwindow", mainwindow, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_set_usize (mainwindow, 512, 256); gtk_widget_set_events (mainwindow, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); gtk_window_set_title (GTK_WINDOW (mainwindow), "EPP FM - Computer Aided Transceiver"); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_ref (vbox1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (mainwindow), vbox1); handlebox1 = gtk_handle_box_new (); gtk_widget_ref (handlebox1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "handlebox1", handlebox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (handlebox1); gtk_box_pack_start (GTK_BOX (vbox1), handlebox1, FALSE, TRUE, 0); menubar = gtk_menu_bar_new (); gtk_widget_ref (menubar); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "menubar", menubar, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (menubar); gtk_container_add (GTK_CONTAINER (handlebox1), menubar); file = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (file)->child), "_File"); gtk_widget_add_accelerator (file, "activate_item", accel_group, tmp_key, GDK_MOD1_MASK, 0); gtk_widget_ref (file); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "file", file, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (file); gtk_container_add (GTK_CONTAINER (menubar), file); file_menu = gtk_menu_new (); gtk_widget_ref (file_menu); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "file_menu", file_menu, (GtkDestroyNotify) gtk_widget_unref); gtk_menu_item_set_submenu (GTK_MENU_ITEM (file), file_menu); file_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (file_menu)); exit = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (exit)->child), "_Exit"); gtk_widget_add_accelerator (exit, "activate_item", file_menu_accels, tmp_key, 0, 0); gtk_widget_ref (exit); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "exit", exit, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (exit); gtk_container_add (GTK_CONTAINER (file_menu), exit); gtk_widget_add_accelerator (exit, "activate", accel_group, GDK_Q, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); help = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (help)->child), "_Help"); gtk_widget_add_accelerator (help, "activate_item", accel_group, tmp_key, GDK_MOD1_MASK, 0); gtk_widget_ref (help); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "help", help, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (help); gtk_container_add (GTK_CONTAINER (menubar), help); gtk_menu_item_right_justify (GTK_MENU_ITEM (help)); help_menu = gtk_menu_new (); gtk_widget_ref (help_menu); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "help_menu", help_menu, (GtkDestroyNotify) gtk_widget_unref); gtk_menu_item_set_submenu (GTK_MENU_ITEM (help), help_menu); help_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (help_menu)); about = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (about)->child), "_About"); gtk_widget_add_accelerator (about, "activate_item", help_menu_accels, tmp_key, 0, 0); gtk_widget_ref (about); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "about", about, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (about); gtk_container_add (GTK_CONTAINER (help_menu), about); gtk_widget_add_accelerator (about, "activate", accel_group, GDK_A, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_ref (hbox2); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "hbox2", hbox2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (vbox1), hbox2, TRUE, TRUE, 0); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_ref (vbox2); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "vbox2", vbox2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox2); gtk_box_pack_start (GTK_BOX (hbox2), vbox2, TRUE, TRUE, 0); button1750 = gtk_button_new_with_label ("1750"); gtk_widget_ref (button1750); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "button1750", button1750, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (button1750); gtk_box_pack_start (GTK_BOX (vbox2), button1750, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (button1750), 4); buttonptt = gtk_button_new_with_label ("PTT"); gtk_widget_ref (buttonptt); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttonptt", buttonptt, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttonptt); gtk_box_pack_start (GTK_BOX (vbox2), buttonptt, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (buttonptt), 4); frame1 = gtk_frame_new ("DTMF Keypad"); gtk_widget_ref (frame1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "frame1", frame1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (frame1); gtk_box_pack_start (GTK_BOX (hbox2), frame1, TRUE, TRUE, 0); table1 = gtk_table_new (4, 4, FALSE); gtk_widget_ref (table1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "table1", table1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (table1); gtk_container_add (GTK_CONTAINER (frame1), table1); buttondtmf7 = gtk_button_new_with_label ("7"); gtk_widget_ref (buttondtmf7); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf7", buttondtmf7, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf7); gtk_table_attach (GTK_TABLE (table1), buttondtmf7, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf7), 4); buttondtmf8 = gtk_button_new_with_label ("8"); gtk_widget_ref (buttondtmf8); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf8", buttondtmf8, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf8); gtk_table_attach (GTK_TABLE (table1), buttondtmf8, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf8), 4); buttondtmf9 = gtk_button_new_with_label ("9"); gtk_widget_ref (buttondtmf9); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf9", buttondtmf9, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf9); gtk_table_attach (GTK_TABLE (table1), buttondtmf9, 2, 3, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf9), 4); buttondtmf10 = gtk_button_new_with_label ("A"); gtk_widget_ref (buttondtmf10); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf10", buttondtmf10, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf10); gtk_table_attach (GTK_TABLE (table1), buttondtmf10, 3, 4, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf10), 4); buttondtmf4 = gtk_button_new_with_label ("4"); gtk_widget_ref (buttondtmf4); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf4", buttondtmf4, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf4); gtk_table_attach (GTK_TABLE (table1), buttondtmf4, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf4), 4); buttondtmf5 = gtk_button_new_with_label ("5"); gtk_widget_ref (buttondtmf5); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf5", buttondtmf5, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf5); gtk_table_attach (GTK_TABLE (table1), buttondtmf5, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf5), 4); buttondtmf6 = gtk_button_new_with_label ("6"); gtk_widget_ref (buttondtmf6); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf6", buttondtmf6, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf6); gtk_table_attach (GTK_TABLE (table1), buttondtmf6, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf6), 4); buttondtmf11 = gtk_button_new_with_label ("B"); gtk_widget_ref (buttondtmf11); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf11", buttondtmf11, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf11); gtk_table_attach (GTK_TABLE (table1), buttondtmf11, 3, 4, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf11), 4); buttondtmf12 = gtk_button_new_with_label ("C"); gtk_widget_ref (buttondtmf12); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf12", buttondtmf12, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf12); gtk_table_attach (GTK_TABLE (table1), buttondtmf12, 3, 4, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf12), 4); buttondtmf3 = gtk_button_new_with_label ("3"); gtk_widget_ref (buttondtmf3); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf3", buttondtmf3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf3); gtk_table_attach (GTK_TABLE (table1), buttondtmf3, 2, 3, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf3), 4); buttondtmf2 = gtk_button_new_with_label ("2"); gtk_widget_ref (buttondtmf2); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf2", buttondtmf2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf2); gtk_table_attach (GTK_TABLE (table1), buttondtmf2, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf2), 4); buttondtmf1 = gtk_button_new_with_label ("1"); gtk_widget_ref (buttondtmf1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf1", buttondtmf1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf1); gtk_table_attach (GTK_TABLE (table1), buttondtmf1, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf1), 4); buttondtmf14 = gtk_button_new_with_label ("*"); gtk_widget_ref (buttondtmf14); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf14", buttondtmf14, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf14); gtk_table_attach (GTK_TABLE (table1), buttondtmf14, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf14), 4); buttondtmf0 = gtk_button_new_with_label ("0"); gtk_widget_ref (buttondtmf0); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf0", buttondtmf0, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf0); gtk_table_attach (GTK_TABLE (table1), buttondtmf0, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf0), 4); buttondtmf15 = gtk_button_new_with_label ("#"); gtk_widget_ref (buttondtmf15); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf15", buttondtmf15, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf15); gtk_table_attach (GTK_TABLE (table1), buttondtmf15, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf15), 4); buttondtmf13 = gtk_button_new_with_label ("D"); gtk_widget_ref (buttondtmf13); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf13", buttondtmf13, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf13); gtk_table_attach (GTK_TABLE (table1), buttondtmf13, 3, 4, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (buttondtmf13), 4); table2 = gtk_table_new (7, 2, FALSE); gtk_widget_ref (table2); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "table2", table2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (table2); gtk_box_pack_start (GTK_BOX (hbox2), table2, TRUE, TRUE, 0); label1 = gtk_label_new ("TX CTCSS"); gtk_widget_ref (label1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "label1", label1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label1); gtk_table_attach (GTK_TABLE (table2), label1, 0, 1, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_padding (GTK_MISC (label1), 3, 3); label2 = gtk_label_new ("RX CTCSS"); gtk_widget_ref (label2); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "label2", label2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label2); gtk_table_attach (GTK_TABLE (table2), label2, 0, 1, 1, 2, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_padding (GTK_MISC (label2), 3, 3); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_ref (hbox3); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "hbox3", hbox3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox3); gtk_table_attach (GTK_TABLE (table2), hbox3, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); partxctcss = gtk_check_button_new_with_label (""); gtk_widget_ref (partxctcss); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "partxctcss", partxctcss, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (partxctcss); gtk_box_pack_start (GTK_BOX (hbox3), partxctcss, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (partxctcss), 3); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (partxctcss), TRUE); partxctcssfreq = gtk_combo_new (); gtk_widget_ref (partxctcssfreq); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "partxctcssfreq", partxctcssfreq, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (partxctcssfreq); gtk_box_pack_start (GTK_BOX (hbox3), partxctcssfreq, TRUE, TRUE, 0); gtk_widget_set_usize (GTK_COMBO (partxctcssfreq)->entry, 34, -2); gtk_widget_set_usize (partxctcssfreq, 50, -2); gtk_container_set_border_width (GTK_CONTAINER (partxctcssfreq), 3); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "67.0"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "69.3"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "71.9"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "74.4"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "77.0"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "79.7"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "82.5"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "85.4"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "88.5"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "91.5"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "94.8"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "97.4"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "100.0"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "103.5"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "107.2"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "110.9"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "114.8"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "118.8"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "123.0"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "127.3"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "131.8"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "136.5"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "141.3"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "146.2"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "151.4"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "156.7"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "162.2"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "167.9"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "173.8"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "179.9"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "186.2"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "192.8"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "203.5"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "210.7"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "218.1"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "225.7"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "233.6"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "241.8"); partxctcssfreq_items = g_list_append (partxctcssfreq_items, "250.3"); gtk_combo_set_popdown_strings (GTK_COMBO (partxctcssfreq), partxctcssfreq_items); g_list_free (partxctcssfreq_items); hbox4 = gtk_hbox_new (FALSE, 0); gtk_widget_ref (hbox4); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "hbox4", hbox4, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox4); gtk_table_attach (GTK_TABLE (table2), hbox4, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); parrxctcss = gtk_check_button_new_with_label (""); gtk_widget_ref (parrxctcss); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "parrxctcss", parrxctcss, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (parrxctcss); gtk_box_pack_start (GTK_BOX (hbox4), parrxctcss, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (parrxctcss), 3); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (parrxctcss), TRUE); parrxctcssfreq = gtk_combo_new (); gtk_widget_ref (parrxctcssfreq); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "parrxctcssfreq", parrxctcssfreq, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (parrxctcssfreq); gtk_box_pack_start (GTK_BOX (hbox4), parrxctcssfreq, TRUE, TRUE, 0); gtk_widget_set_usize (GTK_COMBO (parrxctcssfreq)->entry, 34, -2); gtk_widget_set_usize (parrxctcssfreq, 50, -2); gtk_container_set_border_width (GTK_CONTAINER (parrxctcssfreq), 3); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "67.0"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "69.3"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "71.9"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "74.4"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "77.0"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "79.7"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "82.5"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "85.4"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "88.5"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "91.5"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "94.8"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "97.4"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "100.0"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "103.5"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "107.2"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "110.9"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "114.8"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "118.8"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "123.0"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "127.3"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "131.8"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "136.5"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "141.3"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "146.2"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "151.4"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "156.7"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "162.2"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "167.9"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "173.8"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "179.9"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "186.2"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "192.8"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "203.5"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "210.7"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "218.1"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "225.7"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "233.6"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "241.8"); parrxctcssfreq_items = g_list_append (parrxctcssfreq_items, "250.3"); gtk_combo_set_popdown_strings (GTK_COMBO (parrxctcssfreq), parrxctcssfreq_items); g_list_free (parrxctcssfreq_items); parsql = gtk_check_button_new_with_label ("Squelch"); gtk_widget_ref (parsql); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "parsql", parsql, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (parsql); gtk_table_attach (GTK_TABLE (table2), parsql, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (parsql), 3); meterrx = gtk_progress_bar_new (); gtk_widget_ref (meterrx); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "meterrx", meterrx, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (meterrx); gtk_box_pack_start (GTK_BOX (hbox2), meterrx, FALSE, FALSE, 0); gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (meterrx), GTK_PROGRESS_BOTTOM_TO_TOP); gtk_progress_set_show_text (GTK_PROGRESS (meterrx), TRUE); gtk_progress_set_format_string (GTK_PROGRESS (meterrx), "%3V"); metertx = gtk_progress_bar_new (); gtk_widget_ref (metertx); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "metertx", metertx, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (metertx); gtk_box_pack_start (GTK_BOX (hbox2), metertx, FALSE, FALSE, 0); gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (metertx), GTK_PROGRESS_BOTTOM_TO_TOP); gtk_progress_set_show_text (GTK_PROGRESS (metertx), TRUE); gtk_progress_set_format_string (GTK_PROGRESS (metertx), "%3V"); metersql = gtk_progress_bar_new (); gtk_widget_ref (metersql); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "metersql", metersql, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (metersql); gtk_box_pack_start (GTK_BOX (hbox2), metersql, FALSE, FALSE, 0); gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (metersql), GTK_PROGRESS_BOTTOM_TO_TOP); gtk_progress_set_show_text (GTK_PROGRESS (metersql), TRUE); gtk_progress_set_format_string (GTK_PROGRESS (metersql), "%3V"); gtk_signal_connect (GTK_OBJECT (mainwindow), "delete_event", GTK_SIGNAL_FUNC (on_mainwindow_delete_event), NULL); gtk_signal_connect (GTK_OBJECT (mainwindow), "destroy", GTK_SIGNAL_FUNC (on_mainwindow_destroy), NULL); gtk_signal_connect (GTK_OBJECT (mainwindow), "key_press_event", GTK_SIGNAL_FUNC (on_mainwindow_key_press_event), NULL); gtk_signal_connect (GTK_OBJECT (mainwindow), "key_release_event", GTK_SIGNAL_FUNC (on_mainwindow_key_release_event), NULL); gtk_signal_connect (GTK_OBJECT (exit), "activate", GTK_SIGNAL_FUNC (on_exit_activate), NULL); gtk_signal_connect (GTK_OBJECT (about), "activate", GTK_SIGNAL_FUNC (on_about_activate), NULL); gtk_signal_connect (GTK_OBJECT (button1750), "pressed", GTK_SIGNAL_FUNC (on_button1750_pressed), NULL); gtk_signal_connect (GTK_OBJECT (button1750), "released", GTK_SIGNAL_FUNC (on_button1750_released), NULL); gtk_signal_connect (GTK_OBJECT (buttonptt), "pressed", GTK_SIGNAL_FUNC (on_buttonptt_pressed), NULL); gtk_signal_connect (GTK_OBJECT (buttonptt), "released", GTK_SIGNAL_FUNC (on_buttonptt_released), NULL); gtk_signal_connect (GTK_OBJECT (buttondtmf7), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x17); gtk_signal_connect (GTK_OBJECT (buttondtmf7), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x07); gtk_signal_connect (GTK_OBJECT (buttondtmf8), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x18); gtk_signal_connect (GTK_OBJECT (buttondtmf8), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x08); gtk_signal_connect (GTK_OBJECT (buttondtmf9), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x19); gtk_signal_connect (GTK_OBJECT (buttondtmf9), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x09); gtk_signal_connect (GTK_OBJECT (buttondtmf10), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x1a); gtk_signal_connect (GTK_OBJECT (buttondtmf10), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x0a); gtk_signal_connect (GTK_OBJECT (buttondtmf4), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x14); gtk_signal_connect (GTK_OBJECT (buttondtmf4), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x04); gtk_signal_connect (GTK_OBJECT (buttondtmf5), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x15); gtk_signal_connect (GTK_OBJECT (buttondtmf5), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x05); gtk_signal_connect (GTK_OBJECT (buttondtmf6), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x16); gtk_signal_connect (GTK_OBJECT (buttondtmf6), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x06); gtk_signal_connect (GTK_OBJECT (buttondtmf11), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x1b); gtk_signal_connect (GTK_OBJECT (buttondtmf11), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x0b); gtk_signal_connect (GTK_OBJECT (buttondtmf12), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x1c); gtk_signal_connect (GTK_OBJECT (buttondtmf12), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x0c); gtk_signal_connect (GTK_OBJECT (buttondtmf3), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x13); gtk_signal_connect (GTK_OBJECT (buttondtmf3), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x03); gtk_signal_connect (GTK_OBJECT (buttondtmf2), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x12); gtk_signal_connect (GTK_OBJECT (buttondtmf2), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x02); gtk_signal_connect (GTK_OBJECT (buttondtmf1), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x11); gtk_signal_connect (GTK_OBJECT (buttondtmf1), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x01); gtk_signal_connect (GTK_OBJECT (buttondtmf14), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x1e); gtk_signal_connect (GTK_OBJECT (buttondtmf14), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x0e); gtk_signal_connect (GTK_OBJECT (buttondtmf0), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x10); gtk_signal_connect (GTK_OBJECT (buttondtmf0), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x00); gtk_signal_connect (GTK_OBJECT (buttondtmf15), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x1f); gtk_signal_connect (GTK_OBJECT (buttondtmf15), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x0f); gtk_signal_connect (GTK_OBJECT (buttondtmf13), "pressed", GTK_SIGNAL_FUNC (on_buttondtmf), 0x1d); gtk_signal_connect (GTK_OBJECT (buttondtmf13), "released", GTK_SIGNAL_FUNC (on_buttondtmf), 0x0d); gtk_window_add_accel_group (GTK_WINDOW (mainwindow), accel_group); return mainwindow; } baycomepp-0.10.orig/eppfm/interface.h0100644000175100017510000000014206741420105015617 0ustar abaaba/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ GtkWidget* create_mainwindow (void); baycomepp-0.10.orig/eppfm/callbacks.c0100644000175100017510000000357406741511274015615 0ustar abaaba#ifdef HAVE_CONFIG_H #include #endif #include #include #include "eppfm.h" #include #include "callbacks.h" #include "interface.h" #include "support.h" void on_button1750_pressed(GtkButton *button, gpointer user_data) { audio_1750(1); audio_ptt(1); } void on_button1750_released(GtkButton *button, gpointer user_data) { audio_1750(0); audio_ptt(0); } void on_buttonptt_pressed(GtkButton *button, gpointer user_data) { audio_ptt(1); } void on_buttonptt_released(GtkButton *button, gpointer user_data) { audio_ptt(0); } void on_buttondtmf(GtkButton *button, gpointer user_data) { unsigned int data = (unsigned int)user_data; if (data >= 0x10) audio_dtmf(data & 15); else audio_dtmf(-1); } void on_exit_activate(GtkMenuItem *menuitem, gpointer user_data) { gtk_main_quit(); } void on_about_activate(GtkMenuItem *menuitem, gpointer user_data) { printf("blah\n"); } gboolean on_mainwindow_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { return FALSE; } void on_mainwindow_destroy(GtkObject *object, gpointer user_data) { gtk_main_quit(); } gboolean on_mainwindow_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { const char dtmfch[] = "0123456789ABCD*#"; char *cp; unsigned v; cp = strchr(dtmfch, event->keyval); if (!cp) return FALSE; v = cp - dtmfch; if (v >= 16) return FALSE; audio_dtmf(v); return TRUE; /*printf("key_press: keyval %u length %d\n", event->keyval, event->length);*/ } gboolean on_mainwindow_key_release_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { const char dtmfch[] = "0123456789ABCD*#"; char *cp; unsigned v; cp = strchr(dtmfch, event->keyval); if (!cp) return FALSE; v = cp - dtmfch; if (v >= 16) return FALSE; audio_dtmf(-1); return TRUE; /*printf("key_release: keyval %u length %d\n", event->keyval, event->length);*/ } baycomepp-0.10.orig/eppfm/callbacks.h0100644000175100017510000000356606741510136015617 0ustar abaaba#include gboolean on_mainwindow_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean on_mainwindow_key_release_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean on_mainwindow_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_mainwindow_destroy (GtkObject *object, gpointer user_data); void on_exit_activate (GtkMenuItem *menuitem, gpointer user_data); void on_about_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button1750_pressed (GtkButton *button, gpointer user_data); void on_button1750_released (GtkButton *button, gpointer user_data); void on_buttonptt_pressed (GtkButton *button, gpointer user_data); void on_buttonptt_released (GtkButton *button, gpointer user_data); void on_buttondtmf (GtkButton *button, gpointer user_data); void on_buttondtmf (GtkButton *button, gpointer user_data); baycomepp-0.10.orig/eppfm/gentbl.c0100644000175100017510000000443606741765115015154 0ustar abaaba/*****************************************************************************/ /* * gentbl.c -- Soundmodem table generator. * * Copyright (C) 1996-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ #include #include #include /* -------------------------------------------------------------------- */ static const char *progname; /* -------------------------------------------------------------------- */ static void gen_costab(unsigned size, const char *fn) { FILE *f; int i; if (!(f = fopen(fn, "w"))) { fprintf(stderr, "cannot open file costab.c\n"); exit(1); } fprintf(f, "#include \n#include \"eppfm.h\"\n\n/*\n * cosine table\n */\n\n" "const int16_t costab[%d] = {", size); for (i = 0; i < size; i++) { if (!(i & 7)) fprintf(f, "\n\t"); fprintf(f, "%6d", (int)(32767.0*cos(i*(2.0*M_PI)/size))); if (i != (size-1)) fprintf(f, ", "); } fprintf(f, "\n};\n\n"); } /* -------------------------------------------------------------------- */ int main(int argc, char *argv[]) { progname = argv[0]; if (argc < 2) { fprintf(stderr, "usage: gentbl \n"); exit(1); } gen_costab(512, argv[1]); exit(0); } /* -------------------------------------------------------------------- */ baycomepp-0.10.orig/eppfm2/0042755000175100017510000000000007511777224013615 5ustar abaababaycomepp-0.10.orig/eppfm2/Makefile.in0100644000175100017510000002267307511777224015667 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ SUBDIRS = src #install-data-local: # test -d $(srcdir)/pixmaps \ # && install -d -m 0755 $(pkgdatadir)/pixmaps \ # && install -m 0644 $(srcdir)/pixmaps/* $(pkgdatadir)/pixmaps #dist-hook: # test -d pixmaps \ # && mkdir $(distdir)/pixmaps \ # && cp -p pixmaps/* $(distdir)/pixmaps EXTRA_DIST = eppfm.glade mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = DIST_COMMON = README AUTHORS ChangeLog Makefile.am Makefile.in NEWS \ configure configure.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 eppfm2/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ 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) $(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)$$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 = eppfm2 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 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=../$(top_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 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 all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-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-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am distclean: distclean-recursive maintainer-clean-am: 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 .PHONY: 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 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 # 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: baycomepp-0.10.orig/eppfm2/README0100644000175100017510000000000006743112660014447 0ustar abaababaycomepp-0.10.orig/eppfm2/AUTHORS0100644000175100017510000000004706743112713014651 0ustar abaabaThomas Sailer, baycomepp-0.10.orig/eppfm2/ChangeLog0100644000175100017510000000000006743112660015341 0ustar abaababaycomepp-0.10.orig/eppfm2/Makefile.am0100644000175100017510000000055706761312610015641 0ustar abaaba## Process this file with automake to produce Makefile.in SUBDIRS = src #install-data-local: # test -d $(srcdir)/pixmaps \ # && install -d -m 0755 $(pkgdatadir)/pixmaps \ # && install -m 0644 $(srcdir)/pixmaps/* $(pkgdatadir)/pixmaps #dist-hook: # test -d pixmaps \ # && mkdir $(distdir)/pixmaps \ # && cp -p pixmaps/* $(distdir)/pixmaps EXTRA_DIST = eppfm.glade baycomepp-0.10.orig/eppfm2/NEWS0100644000175100017510000000000006743112660014266 0ustar abaababaycomepp-0.10.orig/eppfm2/configure0100755000175100017510000035465606743144516015540 0ustar abaaba#! /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 --with-gtk-prefix=PFX Prefix where GTK is installed (optional)" ac_help="$ac_help --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)" ac_help="$ac_help --disable-gtktest Do not try to compile and run a test GTK program" 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=configure.in # 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:568: 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:621: 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:678: 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=eppfm VERSION=0.1 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:724: 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:737: 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:750: 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:763: 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:776: 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 # 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:796: 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:826: 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:877: 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:909: 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 920 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:925: \"$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:951: 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:956: 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:984: 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 for POSIXized ISC""... $ac_c" 1>&6 echo "configure:1016: 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 # 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:1039: 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:1069: 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:1120: 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:1152: 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 1163 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:1168: \"$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:1194: 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:1199: 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:1227: 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 for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6 echo "configure:1262: 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:1315: \"$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 how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:1339: 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:1360: \"$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:1377: \"$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:1394: \"$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 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:1419: 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:1432: \"$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:1499: \"$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 # Check whether --with-gtk-prefix or --without-gtk-prefix was given. if test "${with_gtk_prefix+set}" = set; then withval="$with_gtk_prefix" gtk_config_prefix="$withval" else gtk_config_prefix="" fi # Check whether --with-gtk-exec-prefix or --without-gtk-exec-prefix was given. if test "${with_gtk_exec_prefix+set}" = set; then withval="$with_gtk_exec_prefix" gtk_config_exec_prefix="$withval" else gtk_config_exec_prefix="" fi # Check whether --enable-gtktest or --disable-gtktest was given. if test "${enable_gtktest+set}" = set; then enableval="$enable_gtktest" : else enable_gtktest=yes fi for module in . do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1573: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GTK_CONFIG" in /*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # 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_GTK_CONFIG="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" ;; esac fi GTK_CONFIG="$ac_cv_path_GTK_CONFIG" if test -n "$GTK_CONFIG"; then echo "$ac_t""$GTK_CONFIG" 1>&6 else echo "$ac_t""no" 1>&6 fi min_gtk_version=1.2.0 echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6 echo "configure:1608: checking for GTK - version >= $min_gtk_version" >&5 no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat > conftest.$ac_ext < #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } EOF if { (eval echo configure:1709: \"$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* no_gtk=yes fi rm -fr conftest* fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat > conftest.$ac_ext < #include int main() { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } EOF if { (eval echo configure:1753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" fi rm -f conftest* CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" { echo "configure: error: Cannot find GTK: Is gtk-config in path?" 1>&2; exit 1; } fi rm -f conf.gtktest ALL_LINGUAS="" # 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:1796: 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 working const""... $ac_c" 1>&6 echo "configure:1824: 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:1878: \"$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:1899: 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 <&6 echo "configure:1939: 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 size_t""... $ac_c" 1>&6 echo "configure:1972: 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 # 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:2007: 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:2019: \"$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:2040: 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:2073: \"$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:2105: 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:2135: 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:2163: \"$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:2190: 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:2217: \"$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 <&6 echo "configure:2242: 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:2252: \"$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:2281: 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:2309: \"$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:2334: 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:2482: \"$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 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:2510: 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:2520: \"$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:2550: 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:2578: \"$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:2607: 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:2635: \"$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:2669: 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:2681: \"$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:2702: 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:2722: 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:2741: 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:2751: \"$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:2768: 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:2780: \"$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:2796: 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:2831: 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:2836: 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:2894: 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:2928: 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:2956: \"$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:2983: 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:3019: 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:3082: 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:3095: 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:3138: 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:3166: \"$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:3188: 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:3224: 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:3261: 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:3296: 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:3354: 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:3388: 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:3424: 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:3517: 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:3545: 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:3555: \"$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 if test "x${prefix}" = "xNONE"; then cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> 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 src/Makefile intl/Makefile po/Makefile.in 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%@CC@%$CC%g s%@CPP@%$CPP%g s%@GTK_CONFIG@%$GTK_CONFIG%g s%@GTK_CFLAGS@%$GTK_CFLAGS%g s%@GTK_LIBS@%$GTK_LIBS%g s%@RANLIB@%$RANLIB%g s%@ALLOCA@%$ALLOCA%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 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 baycomepp-0.10.orig/eppfm2/configure.in0100644000175100017510000000255206743112660016116 0ustar abaabadnl Process this file with autoconf to produce a configure script. AC_INIT(configure.in) AM_INIT_AUTOMAKE(eppfm, 0.1) AM_CONFIG_HEADER(config.h) AC_ISC_POSIX AC_PROG_CC AM_PROG_CC_STDC AC_HEADER_STDC AM_PATH_GTK(1.2.0, , AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?)) dnl Add the languages which your application supports here. ALL_LINGUAS="" AM_GNU_GETTEXT dnl Set PACKAGE_LOCALE_DIR in config.h. if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${ac_default_prefix}/${DATADIRNAME}/locale") else AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${prefix}/${DATADIRNAME}/locale") fi dnl Set PACKAGE_DATA_DIR in config.h. if test "x${datadir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}") else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}") fi else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${datadir}/${PACKAGE}") fi dnl Set PACKAGE_SOURCE_DIR in config.h. packagesrcdir=`cd $srcdir && pwd` AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}") dnl Use -Wall if we have gcc. changequote(,)dnl if test "x$GCC" = "xyes"; then case " $CFLAGS " in *[\ \ ]-Wall[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac fi changequote([,])dnl AC_OUTPUT([ Makefile src/Makefile intl/Makefile po/Makefile.in ]) baycomepp-0.10.orig/eppfm2/eppfm.glade0100644000175100017510000012264606743566010015723 0ustar abaaba eppfm eppfm src pixmaps C False True True True True True True interface.c interface.h callbacks.c callbacks.h support.c support.h GtkWindow ioconfiglinux EPPFM Input/Output Configuration GTK_WINDOW_DIALOG GTK_WIN_POS_NONE False True False GtkVBox vbox1 False 0 GtkFrame frame3 5 0 True True 0 GTK_SHADOW_ETCHED_IN GtkTable table3 2 2 False 0 0 GtkCombo sndrecord 3 1 2 0 1 0 0 True False False False True False True True False /dev/dsp /dev/dsp1 GtkCombo sndplayback 3 1 2 1 2 0 0 True False False False True False True True False /dev/dsp /dev/dsp1 GtkLabel label5 0 1 0 1 0 0 False False False False True False GTK_JUSTIFY_LEFT False 0 0.5 10 0 GtkLabel label6 0 1 1 2 0 0 False False False False True False GTK_JUSTIFY_LEFT False 0 0.5 10 0 GtkFrame frame1 5 0 True True 0 GTK_SHADOW_ETCHED_IN GtkTable table2 2 4 False 0 0 GtkCombo ioaddr 3 3 4 0 1 0 0 True True False False True False 120 False True False 0x378 0x278 GtkCombo devfile 3 3 4 1 2 0 0 True True False False True False 120 True True False /dev/ppuser0 /dev/ppuser1 GtkLabel label2 2 3 0 1 0 0 False True False False True False GTK_JUSTIFY_CENTER False 0 0.5 4 0 GtkLabel label3 2 3 1 2 0 0 False True False False True False GTK_JUSTIFY_CENTER False 0 0.5 4 0 GtkLabel label1 0 1 0 1 0 0 False True False False False False GTK_JUSTIFY_LEFT False 0.5 0.5 9 0 GtkRadioButton drvdirect 1 2 0 1 0 0 False True False False True False True False True drivergroup GtkRadioButton drvppdev 1 2 1 2 0 0 False True False False True False True False True drivergroup GtkFrame frame2 5 0 True True 0 GTK_SHADOW_ETCHED_IN GtkTable table1 1 2 False 0 0 GtkCombo fpgaclk 3 1 2 0 1 0 0 False True False False True False False True False 19666600 9830400 GtkLabel label4 0 1 0 1 0 0 False True False False True False GTK_JUSTIFY_LEFT False 0 0.5 10 0 GtkHButtonBox hbuttonbox1 0 True True GTK_BUTTONBOX_SPREAD 30 85 27 7 0 GtkButton buttonok Continue True True clicked on_configok_clicked Wed, 14 Jul 1999 14:41:49 GMT GtkButton buttonquit Quit the application True True clicked on_configquit_clicked Wed, 14 Jul 1999 14:42:03 GMT GtkWindow mainwindow GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK delete_event on_mainwindow_delete_event Wed, 14 Jul 1999 14:44:29 GMT destroy on_mainwindow_destroy Wed, 14 Jul 1999 14:44:45 GMT key_press_event on_mainwindow_key_event Thu, 15 Jul 1999 12:22:03 GMT key_release_event on_mainwindow_key_event Thu, 15 Jul 1999 12:22:07 GMT EPPFM GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False GtkVBox vbox2 False 0 GtkHandleBox handlebox1 0 False True GtkMenuBar menubar1 GtkMenuItem file File Menu False GtkMenu file_menu GtkMenuItem dtmf activate on_dtmf_activate Wed, 14 Jul 1999 13:06:53 GMT False GtkMenuItem oscilloscope activate on_oscilloscope_activate Wed, 14 Jul 1999 13:07:14 GMT False GtkMenuItem spectrum activate on_spectrum_activate Wed, 14 Jul 1999 13:07:55 GMT False GtkMenuItem separator1 False GtkMenuItem quit activate on_quit_activate Wed, 14 Jul 1999 13:08:05 GMT False GtkMenuItem help True GtkMenu help_menu GtkMenuItem about activate on_about_activate Wed, 14 Jul 1999 13:08:36 GMT False GtkVBox vbox3 0 True True False 0 GtkProgressBar progressbar1 0 True True -40 -40 0 GTK_PROGRESS_CONTINUOUS GTK_PROGRESS_LEFT_TO_RIGHT False True %P %% 0.5 0.5 GtkProgressBar progressbar2 0 True True -40 -40 0 GTK_PROGRESS_CONTINUOUS GTK_PROGRESS_LEFT_TO_RIGHT False True %P %% 0.5 0.5 GtkHandleBox handlebox2 0 False True GtkHBox hbox1 True 0 GtkToggleButton buttonptt 0 True True 70 True toggled on_mainptt_toggled Wed, 14 Jul 1999 14:42:29 GMT False GtkButton button1750 0 True True True pressed on_button1750_pressed Fri, 16 Jul 1999 08:23:22 GMT released on_button1750_released Fri, 16 Jul 1999 08:23:28 GMT GtkButton buttonsquelch 0 True True True clicked on_buttonsquelch_clicked Fri, 16 Jul 1999 08:14:18 GMT GtkButton buttondtmf 0 True True True clicked on_maindtmf_clicked Wed, 14 Jul 1999 14:42:42 GMT GtkButton buttonscope 0 True True True clicked on_mainscope_clicked Wed, 14 Jul 1999 14:42:52 GMT GtkButton buttonspectrum 0 True True True clicked on_mainspectrum_clicked Wed, 14 Jul 1999 14:43:12 GMT GtkDialog aboutdialog delete_event on_aboutdialog_delete_event Wed, 14 Jul 1999 17:48:48 GMT About GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True True False GtkVBox Dialog:vbox dialog-vbox1 False 0 GtkVBox vbox5 0 True True False 0 GtkLabel label7 0 False False GTK_JUSTIFY_CENTER False 0 0.5 4 3 GtkLabel label8 0 False False GTK_JUSTIFY_CENTER False 0.5 0.5 4 4 GtkLabel label9 0 False False GTK_JUSTIFY_CENTER False 0.5 0.5 4 4 GtkHBox Dialog:action_area dialog-action_area1 10 0 False True GTK_PACK_END True 5 GtkButton buttonok 0 False False 80 27 True clicked on_aboutok_clicked Wed, 14 Jul 1999 17:54:16 GMT GtkWindow dtmfwindow GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK key_press_event on_dtmfwindow_key_event Thu, 15 Jul 1999 12:21:28 GMT key_release_event on_dtmfwindow_key_event Thu, 15 Jul 1999 12:21:38 GMT delete_event on_dtmfwindow_delete_event Wed, 14 Jul 1999 17:49:02 GMT DTMF Keypad GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False GtkVBox vbox4 False 0 GtkFrame frame4 5 0 False True 0.01 GTK_SHADOW_ETCHED_IN GtkHBox hbox2 False 0 GtkEntry dtmfentry 0 True True True False True 0 GtkButton buttoncleardtmf 0 False False 50 True clicked on_dtmfclear_clicked Wed, 14 Jul 1999 18:16:39 GMT GtkFrame frame5 5 0 True True 0.01 GTK_SHADOW_ETCHED_IN GtkTable table4 4 4 False 0 0 GtkButton dtmf8 1 2 0 1 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x18 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x08 Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmf9 2 3 0 1 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x19 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x09 Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmfa 3 4 0 1 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x1a Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x0a Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmf4 0 1 1 2 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x14 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x04 Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmf5 1 2 1 2 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x15 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x05 Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmf6 2 3 1 2 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x16 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x06 Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmfb 3 4 1 2 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x1b Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x0b Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmf1 0 1 2 3 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x11 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x01 Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmf2 1 2 2 3 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x12 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x02 Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmf3 2 3 2 3 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x13 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x03 Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmfc 3 4 2 3 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x1c Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x0c Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmfe 0 1 3 4 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x1e Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x0e Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmf0 1 2 3 4 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x10 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x00 Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmff 2 3 3 4 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x1f Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x0f Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmfd 3 4 3 4 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x1d Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x0d Wed, 14 Jul 1999 13:32:14 GMT GtkButton dtmf7 0 1 0 1 0 0 True True False False True True True pressed on_dtmf_key (gpointer)0x17 Wed, 14 Jul 1999 13:32:19 GMT released on_dtmf_key (gpointer)0x07 Wed, 14 Jul 1999 13:32:14 GMT GtkWindow scopewindow delete_event on_scopewindow_delete_event Wed, 14 Jul 1999 17:49:17 GMT Scope GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False Custom scope 512 256 scope_new 128 0 Wed, 14 Jul 1999 18:01:10 GMT GtkWindow spectrumwindow delete_event on_spectrumwindow_delete_event Wed, 14 Jul 1999 17:49:32 GMT Spectrum GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False Custom spec 512 256 spectrum_new 256 0 Wed, 14 Jul 1999 18:01:21 GMT baycomepp-0.10.orig/eppfm2/src/0042755000175100017510000000000007511777224014404 5ustar abaababaycomepp-0.10.orig/eppfm2/src/Makefile.in0100644000175100017510000002746607511777224016463 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/main \ -I$(top_srcdir)/directx/include \ -I$(top_srcdir)/directx/include/directx6 \ @GTK_CFLAGS@ @DIRECTX_TRUE@AUDIOSRC = @DIRECTX_TRUE@audiowin32.c @DIRECTX_FALSE@AUDIOSRC = @DIRECTX_FALSE@audiolinux.c @DIRECTX_TRUE@DIRECTXLIBS = @DIRECTX_TRUE@-L$(top_builddir)/directx -ldsound -luser32 -lgdi32 @DIRECTX_FALSE@DIRECTXLIBS = @HAVEGTK_TRUE@bin_PROGRAMS = @HAVEGTK_TRUE@eppfm EXTRA_DIST = costab.c gentbl.c audiolinux.c audiowin32.c coeff.m @CROSSCOMP_FALSE@gentbl_SOURCES = @CROSSCOMP_FALSE@gentbl.c @CROSSCOMP_FALSE@BUILT_SOURCES = @CROSSCOMP_FALSE@costab.c @CROSSCOMP_FALSE@noinst_PROGRAMS = @CROSSCOMP_FALSE@gentbl eppfm_SOURCES = \ main.c costab.c audio.c $(AUDIOSRC) \ support.c support.h \ interface.c interface.h \ callbacks.h \ widgets.c widgets.h eppfm_LDADD = @GTK_LIBS@ $(INTLLIBS) \ $(top_builddir)/main/libinit.a \ $(top_builddir)/main/libresident.a \ $(top_builddir)/main/libresident2.a \ $(top_builddir)/main/libmisc.a $(DIRECTXLIBS) noinst_HEADERS = \ eppfm.h \ getopt.h \ callbacks.h \ interface.h \ support.h \ widgets.h mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h CONFIG_CLEAN_FILES = @HAVEGTK_TRUE@bin_PROGRAMS = eppfm$(EXEEXT) @CROSSCOMP_FALSE@noinst_PROGRAMS = gentbl$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ @DIRECTX_TRUE@eppfm_OBJECTS = main.$(OBJEXT) costab.$(OBJEXT) \ @DIRECTX_TRUE@audio.$(OBJEXT) audiowin32.$(OBJEXT) support.$(OBJEXT) \ @DIRECTX_TRUE@interface.$(OBJEXT) widgets.$(OBJEXT) @DIRECTX_FALSE@eppfm_OBJECTS = main.$(OBJEXT) costab.$(OBJEXT) \ @DIRECTX_FALSE@audio.$(OBJEXT) audiolinux.$(OBJEXT) support.$(OBJEXT) \ @DIRECTX_FALSE@interface.$(OBJEXT) widgets.$(OBJEXT) @DIRECTX_TRUE@eppfm_DEPENDENCIES = $(top_builddir)/main/libinit.a \ @DIRECTX_TRUE@$(top_builddir)/main/libresident.a \ @DIRECTX_TRUE@$(top_builddir)/main/libresident2.a \ @DIRECTX_TRUE@$(top_builddir)/main/libmisc.a @DIRECTX_FALSE@eppfm_DEPENDENCIES = $(top_builddir)/main/libinit.a \ @DIRECTX_FALSE@$(top_builddir)/main/libresident.a \ @DIRECTX_FALSE@$(top_builddir)/main/libresident2.a \ @DIRECTX_FALSE@$(top_builddir)/main/libmisc.a eppfm_LDFLAGS = @CROSSCOMP_FALSE@gentbl_OBJECTS = gentbl.$(OBJEXT) gentbl_LDADD = $(LDADD) gentbl_DEPENDENCIES = gentbl_LDFLAGS = CFLAGS = @CFLAGS@ 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 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(eppfm_SOURCES) $(gentbl_SOURCES) OBJECTS = $(eppfm_OBJECTS) $(gentbl_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps eppfm2/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 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) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(INSTALL_PROGRAM) $$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 mostlyclean-noinstPROGRAMS: clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) distclean-noinstPROGRAMS: maintainer-clean-noinstPROGRAMS: .c.o: $(COMPILE) -c $< # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: eppfm$(EXEEXT): $(eppfm_OBJECTS) $(eppfm_DEPENDENCIES) @rm -f eppfm$(EXEEXT) $(LINK) $(eppfm_LDFLAGS) $(eppfm_OBJECTS) $(eppfm_LDADD) $(LIBS) gentbl$(EXEEXT): $(gentbl_OBJECTS) $(gentbl_DEPENDENCIES) @rm -f gentbl$(EXEEXT) $(LINK) $(gentbl_LDFLAGS) $(gentbl_OBJECTS) $(gentbl_LDADD) $(LIBS) 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 = eppfm2/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 audio.o: audio.c ../../config.h eppfm.h ../../main/fpga.h \ ../../main/sysdeps.h getopt.h ../../main/parport.h audiolinux.o: audiolinux.c ../../config.h getopt.h eppfm.h \ ../../main/fpga.h ../../main/sysdeps.h ../../main/parport.h costab.o: costab.c eppfm.h ../../main/fpga.h ../../main/sysdeps.h \ ../../config.h getopt.h ../../main/parport.h gentbl.o: gentbl.c interface.o: interface.c ../../config.h getopt.h callbacks.h interface.h \ support.h main.o: main.c ../../config.h getopt.h eppfm.h ../../main/fpga.h \ ../../main/sysdeps.h ../../main/parport.h widgets.h callbacks.h \ interface.h support.h support.o: support.c ../../config.h getopt.h support.h widgets.o: widgets.c ../../config.h widgets.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: 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: uninstall-am all-am: Makefile $(PROGRAMS) $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-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: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-noinstPROGRAMS \ mostlyclean-compile mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-binPROGRAMS clean-noinstPROGRAMS clean-compile \ clean-tags clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-binPROGRAMS distclean-noinstPROGRAMS \ distclean-compile distclean-tags distclean-generic \ clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-noinstPROGRAMS \ maintainer-clean-compile 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-noinstPROGRAMS distclean-noinstPROGRAMS \ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile 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 @CROSSCOMP_FALSE@$(srcdir)/costab.c: gentbl @CROSSCOMP_FALSE@ ./gentbl $(srcdir)/costab.c # 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: baycomepp-0.10.orig/eppfm2/src/Makefile.am0100644000175100017510000000210006761314524016420 0ustar abaaba## Process this file with automake to produce Makefile.in INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/main \ -I$(top_srcdir)/directx/include \ -I$(top_srcdir)/directx/include/directx6 \ @GTK_CFLAGS@ if DIRECTX AUDIOSRC = audiowin32.c DIRECTXLIBS = -L$(top_builddir)/directx -ldsound -luser32 -lgdi32 else AUDIOSRC = audiolinux.c DIRECTXLIBS = endif if HAVEGTK bin_PROGRAMS = eppfm endif EXTRA_DIST = costab.c gentbl.c audiolinux.c audiowin32.c coeff.m if CROSSCOMP else gentbl_SOURCES = gentbl.c BUILT_SOURCES = costab.c noinst_PROGRAMS = gentbl $(srcdir)/costab.c: gentbl ./gentbl $(srcdir)/costab.c endif eppfm_SOURCES = \ main.c costab.c audio.c $(AUDIOSRC) \ support.c support.h \ interface.c interface.h \ callbacks.h \ widgets.c widgets.h eppfm_LDADD = @GTK_LIBS@ $(INTLLIBS) \ $(top_builddir)/main/libinit.a \ $(top_builddir)/main/libresident.a \ $(top_builddir)/main/libresident2.a \ $(top_builddir)/main/libmisc.a $(DIRECTXLIBS) noinst_HEADERS = \ eppfm.h \ getopt.h \ callbacks.h \ interface.h \ support.h \ widgets.h baycomepp-0.10.orig/eppfm2/src/main.c0100644000175100017510000003541007143572336015470 0ustar abaaba/*****************************************************************************/ /* * eppfm.c -- EPP modem virtual transceiver. * * Copyright (C) 1998-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #ifdef HAVE_GETOPT_H #include #else #include "getopt.h" #endif #include #include #include #include "eppfm.h" #include #include "widgets.h" #include "callbacks.h" #include "interface.h" #include "support.h" /* ---------------------------------------------------------------------- */ struct adapter_config cfg = { 19666600, 9600, 0, 0, 0, 1, 1, 0, 1 }; static unsigned verboselevel = 0; static unsigned syslogmsg = 0; static unsigned int ptt = 0; static unsigned int squelch = 0; /* ---------------------------------------------------------------------- */ /*OutputDebugStringA*/ int lprintf(unsigned vl, const char *format, ...) { va_list ap; int r; if (vl > verboselevel) return 0; va_start(ap, format); #ifdef HAVE_VSYSLOG if (syslogmsg) { static const int logprio[] = { LOG_ERR, LOG_INFO }; vsyslog((vl > 1) ? LOG_DEBUG : logprio[vl], format, ap); r = 0; } else #endif r = vfprintf(stderr, format, ap); va_end(ap); return r; } /* ---------------------------------------------------------------------- */ GtkWidget *ioconfig; GtkWidget *mainwindow; GtkWidget *aboutdialog; GtkWidget *dtmfwindow; GtkWidget *scopewindow; GtkWidget *spectrumwindow; void gui_addsamples(unsigned int num, const int16_t *y) { Scope *scope; Spectrum *spec; scope = SCOPE(gtk_object_get_data(GTK_OBJECT(scopewindow), "scope")); spec = SPECTRUM(gtk_object_get_data(GTK_OBJECT(spectrumwindow), "spec")); scope_addvalues(scope, num, NULL, y); spectrum_addvalues(spec, num, y); } void gui_updatevu(float meter1, float meter2) { GtkProgress *pb1, *pb2; pb1 = GTK_PROGRESS(gtk_object_get_data(GTK_OBJECT(mainwindow), "progressbar1")); pb2 = GTK_PROGRESS(gtk_object_get_data(GTK_OBJECT(mainwindow), "progressbar2")); gtk_progress_set_value(pb1, meter1); gtk_progress_set_value(pb2, meter2); } void on_dtmf_activate(GtkMenuItem *menuitem, gpointer user_data) { gtk_widget_show(dtmfwindow); } void on_oscilloscope_activate(GtkMenuItem *menuitem, gpointer user_data) { gtk_widget_show(scopewindow); } void on_spectrum_activate(GtkMenuItem *menuitem, gpointer user_data) { gtk_widget_show(spectrumwindow); } void on_quit_activate(GtkMenuItem *menuitem, gpointer user_data) { gtk_main_quit(); } void on_about_activate(GtkMenuItem *menuitem, gpointer user_data) { gtk_widget_show(aboutdialog); } void on_dtmfclear_clicked(GtkButton *button, gpointer user_data) { GtkEntry *entry; entry = GTK_ENTRY(gtk_object_get_data(GTK_OBJECT(dtmfwindow), "dtmfentry")); gtk_entry_set_text(entry, ""); } static gint dtmfkeyfunc(gpointer data) { return on_dtmfwindow_key_event(NULL, NULL, data); } gboolean on_dtmfwindow_key_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { static const char dtmfkeys[] = "0123456789ABCD*#"; static guint tmo = 0; static guint lastkey = -1; static guint currentkey = 0; GtkButton *but; gchar bname[6] = "dtmf0"; char *cp, c; if (!event) { tmo = 0; lastkey = currentkey; bname[4] += lastkey & 15; if ((lastkey & 15) >= 10) bname[4] += 'a'-'0'-10; but = GTK_BUTTON(gtk_object_get_data(GTK_OBJECT(dtmfwindow), bname)); if (lastkey & 16) gtk_button_pressed(but); else gtk_button_released(but); return FALSE; /* don't get called again */ } c = event->keyval; if (c >= 'a' && c <= 'z') c += 'A'-'a'; if (!(cp = strchr(dtmfkeys, c))) return FALSE; currentkey = cp - dtmfkeys + (event->type == GDK_KEY_PRESS ? 16 : 0); if (tmo) gtk_timeout_remove(tmo); if (currentkey != lastkey) tmo = gtk_timeout_add(10, dtmfkeyfunc, NULL); return TRUE; } void on_dtmf_key(GtkButton *button, gpointer user_data) { static const char dtmfkeys[] = "0123456789ABCD*#"; GtkEntry *entry; gchar txt[2]; guint key = (guint)user_data; printf("DTMF key: %u\n", key); if (key & 16) ptt |= 2; else ptt &= ~2; audio_ptt(ptt); audio_setsquelch(squelch); audio_dtmf(key); if (key < 0x10 || key > 0x1f) return; txt[0] = dtmfkeys[key & 0xf]; txt[1] = 0; entry = GTK_ENTRY(gtk_object_get_data(GTK_OBJECT(dtmfwindow), "dtmfentry")); gtk_entry_append_text(entry, txt); } void on_configok_clicked(GtkButton *button, gpointer user_data) { gtk_widget_show(mainwindow); gtk_widget_hide(ioconfig); } void on_configquit_clicked(GtkButton *button, gpointer user_data) { gtk_main_quit(); } gboolean on_mainwindow_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { return FALSE; } void on_mainwindow_destroy(GtkObject *object, gpointer user_data) { gtk_main_quit(); } static gint pttkeyfunc(gpointer data) { return on_mainwindow_key_event(NULL, NULL, data); } gboolean on_mainwindow_key_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { static guint tmo = 0; static guint laststate = -1; static guint currentstate = 0; GtkToggleButton *ptt; if (!event) { tmo = 0; laststate = currentstate; ptt = GTK_TOGGLE_BUTTON(gtk_object_get_data(GTK_OBJECT(mainwindow), "buttonptt")); gtk_toggle_button_set_active(ptt, laststate); printf("gtk_toggle_button_set_active: %d\n", laststate); return FALSE; /* don't get called again */ } if (event->keyval == 32) { currentstate = event->type == GDK_KEY_PRESS; if (tmo) gtk_timeout_remove(tmo); if (currentstate != laststate) tmo = gtk_timeout_add(100, pttkeyfunc, NULL); return TRUE; } printf("Mainwindow key%s: time %u state %u keyval %u len %d\n", event->type == GDK_KEY_PRESS ? "press" : "release", event->time, event->state, event->keyval, event->length); return FALSE; } void on_mainptt_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkToggleButton *pttb; unsigned int ptts; pttb = GTK_TOGGLE_BUTTON(gtk_object_get_data(GTK_OBJECT(mainwindow), "buttonptt")); ptts = gtk_toggle_button_get_active(pttb); printf("Toggle button active: %d\n", ptts); ptt = (ptt & ~1) | (ptts & 1); audio_ptt(ptt); audio_setsquelch(squelch); } void on_maindtmf_clicked(GtkButton *button, gpointer user_data) { if (GTK_WIDGET_VISIBLE(dtmfwindow)) gtk_widget_hide(dtmfwindow); else gtk_widget_show(dtmfwindow); } void on_mainscope_clicked(GtkButton *button, gpointer user_data) { if (GTK_WIDGET_VISIBLE(scopewindow)) gtk_widget_hide(scopewindow); else gtk_widget_show(scopewindow); } void on_mainspectrum_clicked(GtkButton *button, gpointer user_data) { if (GTK_WIDGET_VISIBLE(spectrumwindow)) gtk_widget_hide(spectrumwindow); else gtk_widget_show(spectrumwindow); } void on_aboutok_clicked(GtkButton *button, gpointer user_data) { gtk_widget_hide(aboutdialog); } gboolean on_aboutdialog_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_widget_hide(aboutdialog); return TRUE; } gboolean on_dtmfwindow_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_widget_hide(dtmfwindow); return TRUE; } gboolean on_scopewindow_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_widget_hide(scopewindow); return TRUE; } gboolean on_spectrumwindow_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_widget_hide(spectrumwindow); return TRUE; } void on_buttonsquelch_clicked(GtkButton *button, gpointer user_data) { GtkWidget *sqbl; squelch++; if (squelch > 1) squelch = 0; audio_setsquelch(squelch); /* set label text */ sqbl = GTK_BIN(gtk_object_get_data(GTK_OBJECT(mainwindow), "buttonsquelch"))->child; gtk_label_set_text(GTK_LABEL(sqbl), squelch ? _("Squelch on") : _("Squelch off") ); } void on_button1750_pressed(GtkButton *button, gpointer user_data) { ptt |= 4; audio_ptt(ptt); audio_1750(1); audio_setsquelch(squelch); } void on_button1750_released(GtkButton *button, gpointer user_data) { ptt &= ~4; audio_ptt(ptt); audio_1750(0); audio_setsquelch(squelch); } int main(int argc, char *argv[]) { static const struct option long_options[] = { #ifdef HAVE_PPUSER { "ppuser", 1, 0, 0x400 }, { "ppdev", 1, 0, 0x402 }, #endif #ifdef HAVE_PPKDRV { "ppkdrv", 1, 0, 0x401 }, #endif #ifdef WIN32 { "ppgenport", 0, 0, 0x403 }, { "ppwin", 1, 0, 0x404 }, { "pplpt", 1, 0, 0x404 }, { "ppring0", 0, 0, 0x405 }, #endif { "ppforcehwepp", 0, 0, 0x410 }, { "ppswemulepp", 0, 0, 0x411 }, { "ppswemulecp", 0, 0, 0x412 }, { 0, 0, 0, 0 } }; int c, err = 0; unsigned int iobase = 0x378, ntddkgenport = 0, ntdrv = 0, w9xring0 = 0, ppflags = 0; const char *snd = NULL; const char *ppuser = NULL, *ppkdrv = NULL, *ppdev = NULL; printf("EPP virtual transceiver (c) 1998-2000 by Thomas Sailer, HB9JNX/AE4WA\n"); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); textdomain(PACKAGE); gtk_set_locale(); gtk_init(&argc, &argv); add_pixmap_directory(PACKAGE_DATA_DIR "/pixmaps"); add_pixmap_directory(PACKAGE_SOURCE_DIR "/pixmaps"); while ((c = getopt_long(argc, argv, "svp:m:a:", long_options, NULL)) != EOF) { switch (c) { case 0x400: ppuser = optarg; ppkdrv = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = 0; w9xring0 = 0; break; case 0x401: ppkdrv = optarg; ppuser = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = 0; w9xring0 = 0; break; case 0x402: ppkdrv = NULL; ppuser = NULL; ppdev = optarg; ntddkgenport = 0; ntdrv = 0; w9xring0 = 0; break; case 0x403: ppkdrv = NULL; ppuser = NULL; ppdev = NULL; ntddkgenport = 1; ntdrv = 0; w9xring0 = 0; break; case 0x404: ppkdrv = NULL; ppuser = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = strtoul(optarg, NULL, 0); w9xring0 = 0; break; case 0x405: ppkdrv = NULL; ppuser = NULL; ppdev = NULL; ntddkgenport = 0; ntdrv = 0; w9xring0 = 1; break; case 0x410: ppflags |= PPFLAG_FORCEHWEPP; break; case 0x411: ppflags |= PPFLAG_SWEMULEPP; break; case 0x412: ppflags |= PPFLAG_SWEMULECP; break; case 'a': snd = optarg; break; case 'p': iobase = strtoul(optarg, NULL, 0); if (iobase <= 0 || iobase >= 0x3f8) err++; break; case 'm': parseconfig(&cfg, optarg); break; case 'v': verboselevel++; break; #if defined(HAVE_SYSLOG) && defined(HAVE_VSYSLOG) case 's': if (syslogmsg) break; openlog("eppfpga", LOG_PID, LOG_USER); syslogmsg = 1; break; #endif default: err++; break; } } if (err) { g_message("usage: %s [-v] [-p ] [-m ]\n", argv[0]); exit(1); } if (audio_drvinit(snd)) { g_error("Sound Initialisation error\n"); exit(1); } #ifdef HAVE_PPUSER if (ppkdrv) { if (parport_init_ppkdrv(ppkdrv)) { fprintf(stderr, "no kernel interface %s driver found\n", ppkdrv); exit(1); } } else #endif #ifdef HAVE_PPUSER if (ppdev) { if (parport_init_ppdev(ppdev)) { fprintf(stderr, "no ppdev driver found at %s\n", ppdev); exit(1); } } else if (ppuser) { if (parport_init_ppuser(ppuser)) { fprintf(stderr, "no ppuser driver found at %s\n", ppuser); exit(1); } } else #endif #ifdef WIN32 if (ntdrv) { if (parport_init_win_flags(ntdrv-1, ppflags)) { fprintf(stderr, "no eppflex.sys/vxd driver found\n"); exit(1); } } else if (ntddkgenport) { if (parport_init_ntddkgenport()) { fprintf(stderr, "no NTDDK genport.sys driver found\n"); exit(1); } } else if (w9xring0) { if (parport_init_w9xring0_flags(iobase, ppflags)) { fprintf(stderr, "no parport found at 0x%x\n", iobase); exit(1); } } else #endif if (parport_init_direct_flags(iobase, ppflags)) { g_error("no parport found at 0x%x\n", iobase); exit(1); } /* * The following code was added by Glade to create one of each component * (except popup menus), just so that you see something after building * the project. Delete any components that you don't want shown initially. */ aboutdialog = create_aboutdialog(); //ioconfig = create_ioconfiglinux(); mainwindow = create_mainwindow(); aboutdialog = create_aboutdialog(); dtmfwindow = create_dtmfwindow(); scopewindow = create_scopewindow(); spectrumwindow = create_spectrumwindow(); gtk_widget_show(mainwindow); audio_ptt(ptt); audio_setsquelch(squelch); gtk_main(); reset_modem(); return 0; } baycomepp-0.10.orig/eppfm2/src/costab.c0100644000175100017510000001034307511775576016027 0ustar abaaba#include #include "eppfm.h" /* * cosine table */ const int16_t costab[512] = { 32767, 32764, 32757, 32744, 32727, 32705, 32678, 32646, 32609, 32567, 32520, 32468, 32412, 32350, 32284, 32213, 32137, 32056, 31970, 31880, 31785, 31684, 31580, 31470, 31356, 31236, 31113, 30984, 30851, 30713, 30571, 30424, 30272, 30116, 29955, 29790, 29621, 29446, 29268, 29085, 28897, 28706, 28510, 28309, 28105, 27896, 27683, 27466, 27244, 27019, 26789, 26556, 26318, 26077, 25831, 25582, 25329, 25072, 24811, 24546, 24278, 24006, 23731, 23452, 23169, 22883, 22594, 22301, 22004, 21705, 21402, 21096, 20787, 20474, 20159, 19840, 19519, 19194, 18867, 18537, 18204, 17868, 17530, 17189, 16845, 16499, 16150, 15799, 15446, 15090, 14732, 14372, 14009, 13645, 13278, 12909, 12539, 12166, 11792, 11416, 11038, 10659, 10278, 9895, 9511, 9126, 8739, 8351, 7961, 7571, 7179, 6786, 6392, 5997, 5601, 5205, 4807, 4409, 4011, 3611, 3211, 2811, 2410, 2009, 1607, 1206, 804, 402, 0, -402, -804, -1206, -1607, -2009, -2410, -2811, -3211, -3611, -4011, -4409, -4807, -5205, -5601, -5997, -6392, -6786, -7179, -7571, -7961, -8351, -8739, -9126, -9511, -9895, -10278, -10659, -11038, -11416, -11792, -12166, -12539, -12909, -13278, -13645, -14009, -14372, -14732, -15090, -15446, -15799, -16150, -16499, -16845, -17189, -17530, -17868, -18204, -18537, -18867, -19194, -19519, -19840, -20159, -20474, -20787, -21096, -21402, -21705, -22004, -22301, -22594, -22883, -23169, -23452, -23731, -24006, -24278, -24546, -24811, -25072, -25329, -25582, -25831, -26077, -26318, -26556, -26789, -27019, -27244, -27466, -27683, -27896, -28105, -28309, -28510, -28706, -28897, -29085, -29268, -29446, -29621, -29790, -29955, -30116, -30272, -30424, -30571, -30713, -30851, -30984, -31113, -31236, -31356, -31470, -31580, -31684, -31785, -31880, -31970, -32056, -32137, -32213, -32284, -32350, -32412, -32468, -32520, -32567, -32609, -32646, -32678, -32705, -32727, -32744, -32757, -32764, -32767, -32764, -32757, -32744, -32727, -32705, -32678, -32646, -32609, -32567, -32520, -32468, -32412, -32350, -32284, -32213, -32137, -32056, -31970, -31880, -31785, -31684, -31580, -31470, -31356, -31236, -31113, -30984, -30851, -30713, -30571, -30424, -30272, -30116, -29955, -29790, -29621, -29446, -29268, -29085, -28897, -28706, -28510, -28309, -28105, -27896, -27683, -27466, -27244, -27019, -26789, -26556, -26318, -26077, -25831, -25582, -25329, -25072, -24811, -24546, -24278, -24006, -23731, -23452, -23169, -22883, -22594, -22301, -22004, -21705, -21402, -21096, -20787, -20474, -20159, -19840, -19519, -19194, -18867, -18537, -18204, -17868, -17530, -17189, -16845, -16499, -16150, -15799, -15446, -15090, -14732, -14372, -14009, -13645, -13278, -12909, -12539, -12166, -11792, -11416, -11038, -10659, -10278, -9895, -9511, -9126, -8739, -8351, -7961, -7571, -7179, -6786, -6392, -5997, -5601, -5205, -4807, -4409, -4011, -3611, -3211, -2811, -2410, -2009, -1607, -1206, -804, -402, 0, 402, 804, 1206, 1607, 2009, 2410, 2811, 3211, 3611, 4011, 4409, 4807, 5205, 5601, 5997, 6392, 6786, 7179, 7571, 7961, 8351, 8739, 9126, 9511, 9895, 10278, 10659, 11038, 11416, 11792, 12166, 12539, 12909, 13278, 13645, 14009, 14372, 14732, 15090, 15446, 15799, 16150, 16499, 16845, 17189, 17530, 17868, 18204, 18537, 18867, 19194, 19519, 19840, 20159, 20474, 20787, 21096, 21402, 21705, 22004, 22301, 22594, 22883, 23169, 23452, 23731, 24006, 24278, 24546, 24811, 25072, 25329, 25582, 25831, 26077, 26318, 26556, 26789, 27019, 27244, 27466, 27683, 27896, 28105, 28309, 28510, 28706, 28897, 29085, 29268, 29446, 29621, 29790, 29955, 30116, 30272, 30424, 30571, 30713, 30851, 30984, 31113, 31236, 31356, 31470, 31580, 31684, 31785, 31880, 31970, 32056, 32137, 32213, 32284, 32350, 32412, 32468, 32520, 32567, 32609, 32646, 32678, 32705, 32727, 32744, 32757, 32764 }; baycomepp-0.10.orig/eppfm2/src/audio.c0100644000175100017510000002367106743660012015645 0ustar abaaba/*****************************************************************************/ /* * audio.c -- Audio processing for "virtual transceiver". * * Copyright (C) 1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "eppfm.h" /* ---------------------------------------------------------------------- */ #define PWRINTERVAL 4096 /* must be even */ #define PWRINTERVAL2 64 /* must be even */ #define PWRNOISECALIB 4096 /* ---------------------------------------------------------------------- */ struct { /* samling rates */ unsigned int srateepp, sratedsp; /* sampling rate converter */ unsigned int ph, phinc; /* power meter */ unsigned int pwrcnt; unsigned int pwracc; /* freqency generators */ unsigned int ph0, ph1, freq0, freq1; } istate; struct { /* samling rates */ unsigned int srateepp, sratedsp; /* sampling rate converter */ unsigned int ph, phinc; /* power meter */ unsigned int pwrcnt, pwrcnt2; unsigned int pwracc1; int pwracc2, pwracc3; float pwracc4; /* carrier detect state */ unsigned int dcdparam, dcd; } ostate; /* ---------------------------------------------------------------------- */ static const int16_t rxfilter[16][16] = { { 139, -57, -451, 612, 1263, -2887, -2021, 13678, 24449, 12513, -2539, -2588, 1360, 498, -450, -31 }, { 138, -85, -445, 728, 1141, -3169, -1432, 14824, 24343, 11337, -2984, -2276, 1432, 385, -443, -6 }, { 137, -115, -432, 842, 993, -3427, -772, 15942, 24131, 10160, -3358, -1956, 1480, 277, -430, 16 }, { 134, -146, -410, 954, 820, -3657, -42, 17022, 23817, 8989, -3661, -1632, 1504, 173, -412, 36 }, { 130, -177, -380, 1061, 623, -3854, 753, 18058, 23401, 7832, -3895, -1309, 1507, 76, -390, 54 }, { 124, -210, -341, 1161, 402, -4012, 1613, 19040, 22888, 6698, -4062, -991, 1490, -15, -365, 71 }, { 117, -243, -294, 1253, 159, -4127, 2531, 19961, 22282, 5594, -4165, -682, 1454, -97, -337, 85 }, { 108, -275, -237, 1333, -105, -4194, 3505, 20813, 21589, 4528, -4208, -386, 1401, -172, -307, 97 }, { 97, -307, -172, 1401, -386, -4208, 4528, 21589, 20813, 3505, -4194, -105, 1333, -237, -275, 108 }, { 85, -337, -97, 1454, -682, -4165, 5594, 22282, 19961, 2531, -4127, 159, 1253, -294, -243, 117 }, { 71, -365, -15, 1490, -991, -4062, 6698, 22888, 19040, 1613, -4012, 402, 1161, -341, -210, 124 }, { 54, -390, 76, 1507, -1309, -3895, 7832, 23401, 18058, 753, -3854, 623, 1061, -380, -177, 130 }, { 36, -412, 173, 1504, -1632, -3661, 8989, 23817, 17022, -42, -3657, 820, 954, -410, -146, 134 }, { 16, -430, 277, 1480, -1956, -3358, 10160, 24131, 15942, -772, -3427, 993, 842, -432, -115, 137 }, { -6, -443, 385, 1432, -2276, -2984, 11337, 24343, 14824, -1432, -3169, 1141, 728, -445, -85, 138 }, { -31, -450, 498, 1360, -2588, -2539, 12513, 24449, 13678, -2021, -2887, 1263, 612, -451, -57, 139 } }; #define RXFPH(x) (((x)>>(PHASEFRAC-4))&15) #define RXFLEN 16 /* ---------------------------------------------------------------------- */ void audio_1750(int on) { if (on && istate.srateepp > 0) istate.freq0 = (1750*65536 + istate.srateepp/2) / istate.srateepp; else istate.freq0 = 0; istate.freq1 = 0; istate.ph0 = 0; istate.ph1 = 0; } /* * * DTMF frequencies * * 1209 1336 1477 1633 * 697 1 2 3 A * 770 4 5 6 B * 852 7 8 9 C * 941 * 0 # D * */ void audio_dtmf(int ch) { static const unsigned char dtmftransl[0x10] = { 0x13, 0x00, 0x10, 0x20, 0x01, 0x11, 0x21, 0x02, 0x12, 0x22, 0x30, 0x31, 0x32, 0x33, 0x03, 0x23 }; static const unsigned int freqlogrp[4] = { 697, 770, 852, 941 }; static const unsigned int freqhigrp[4] = { 1209, 1336, 1477, 1633 }; unsigned int tr; if (ch & 16 && istate.sratedsp > 0) { tr = dtmftransl[ch & 15]; istate.freq0 = (freqlogrp[tr & 15]*65536+istate.srateepp/2)/istate.srateepp; istate.freq1 = (freqhigrp[tr >> 4]*65536+istate.srateepp/2)/istate.srateepp; } else { istate.freq0 = 0; istate.freq1 = 0; } istate.ph0 = 0; istate.ph1 = 0; } /* ---------------------------------------------------------------------- */ void audio_setsquelch(int sq) { ostate.dcdparam = !!sq; } int audio_getsquelch(void) { return ostate.dcd; } /* ---------------------------------------------------------------------- */ extern inline int calcfilter(const int16_t *coeff, const int8_t *data) { unsigned cnt; int sum = 0; for (cnt = 0; cnt < RXFLEN; cnt++) sum += (*coeff++) * (*data--); return sum >> 8; } /* ---------------------------------------------------------------------- */ void audio_initinput(unsigned int srateepp, unsigned int sratedsp) { memset(&istate, 0, sizeof(istate)); istate.srateepp = srateepp; istate.sratedsp = sratedsp; istate.phinc = ((1 << PHASEFRAC) * sratedsp + srateepp / 2) / srateepp; lprintf(2, "rec phase inc: 0x%05x\n", istate.phinc); } unsigned int audio_convertinput(unsigned int num, const int16_t *ibuf, signed char *obuf) { unsigned int cnt = 0; unsigned int i; float pw; int s; for (i = 0; i < num; i++) { istate.pwracc += ibuf[i] * ibuf[i]; if ((++istate.pwrcnt) >= PWRINTERVAL) { pw = istate.pwracc; istate.pwracc = 0; istate.pwrcnt = 0; pw *= (1.0 / PWRINTERVAL); if (pw < 1.6384) pw = -40; else pw = (10.0 / M_LN10) * log(pw) - 42.144; gui_updatevu(pw, -40); } } istate.ph &= PHASEMASK; while (istate.ph < (num << PHASEFRAC)) { s = ibuf[istate.ph >> PHASEFRAC] >> 8; s += SIN(istate.ph0) >> 9; s += SIN(istate.ph1) >> 9; if (s > 127) s = 127; if (s < -128) s = -128; obuf[cnt] = s; istate.ph += istate.phinc; cnt++; istate.ph0 += istate.freq0; istate.ph1 += istate.freq1; } gui_addsamples(num, ibuf); return cnt; } int audio_adjustinput(int eppcnt, int dspcnt, int eppdelay) { lprintf(4, "eppcnt %d dspcnt %d eppdelay %d\n", eppcnt, dspcnt, eppdelay); if (eppdelay > SNDLATENCY) { istate.phinc++; istate.ph += PHASEMASK >> 2; if (istate.ph > PHASEMASK) istate.ph = PHASEMASK; } else if (eppdelay < SNDLATENCY) { istate.phinc--; istate.ph -= PHASEMASK >> 2; if (istate.ph > PHASEMASK) istate.ph = 0; } if (istate.phinc < (0x9 << (PHASEFRAC-4)) || istate.phinc > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phinc (0x%05x) out of range\n", istate.phinc); return -1; } lprintf(3, "phase increment: 0x%05x\n", istate.phinc); return 0; } void audio_initoutput(unsigned int srateepp, unsigned int sratedsp) { memset(&ostate, 0, sizeof(ostate)); ostate.srateepp = srateepp; ostate.sratedsp = sratedsp; ostate.phinc = ((1 << PHASEFRAC) * srateepp + sratedsp / 2) / sratedsp; lprintf(2, "play phase inc: 0x%05x\n", ostate.phinc); } unsigned int audio_convertoutput(unsigned int num, const signed char *ibuf, int16_t *obuf) { unsigned int cnt = 0; unsigned int i; float pw1, pw2; for (i = 0; i < num; i++) { ostate.pwracc1 += ibuf[i] * ibuf[i]; switch (ostate.pwrcnt2 & 3) { case 0: ostate.pwracc2 -= ibuf[i]; break; case 1: ostate.pwracc3 -= ibuf[i]; break; case 2: ostate.pwracc2 += ibuf[i]; break; default: ostate.pwracc3 += ibuf[i]; break; } if ((++ostate.pwrcnt2) >= PWRINTERVAL2) { ostate.pwracc4 += ostate.pwracc2 * ostate.pwracc2 + ostate.pwracc3 * ostate.pwracc3; ostate.pwracc2 = 0; ostate.pwracc3 = 0; ostate.pwrcnt2 = 0; } if ((++ostate.pwrcnt) >= PWRINTERVAL) { pw1 = ostate.pwracc1; pw2 = ostate.pwracc4; ostate.pwracc1 = 0; ostate.pwracc4 = 0; ostate.pwrcnt = 0; pw1 *= (1.0 / PWRINTERVAL); pw2 *= (1.0 / PWRINTERVAL / PWRINTERVAL) * PWRNOISECALIB; if (pw1 < 1.6384) pw1 = -40; else pw1 = (10.0 / M_LN10) * log(pw1) - 42.144; if (pw2 < 1.6384) pw2 = -40; else pw2 = (10.0 / M_LN10) * log(pw2) - 42.144; if (pw2 > 0) pw2 = 0; gui_updatevu(pw1, pw2); ostate.dcd = (pw1 > -30) && (pw2 < (pw1 / 2 - 20)); } } ostate.ph &= PHASEMASK; while (ostate.ph < (num << PHASEFRAC)) { #if 0 obuf[cnt] = ibuf[ostate.ph >> PHASEFRAC] << 8; #else obuf[cnt] = calcfilter(rxfilter[RXFPH(ostate.ph)], ibuf+(ostate.ph >> PHASEFRAC)); #endif ostate.ph += ostate.phinc; cnt++; } gui_addsamples(cnt, obuf); if (!ostate.dcd && ostate.dcdparam) memset(obuf, 0, 2*cnt); return cnt; } int audio_adjustoutput(int dspcnt, int eppcnt, int dspdelay) { lprintf(4, "dspcnt %d eppcnt %d dspdelay %d\n", dspcnt, eppcnt, dspdelay); ostate.ph &= PHASEMASK; if (dspdelay > SNDLATENCY) { ostate.phinc++; ostate.ph += PHASEMASK >> 2; if (ostate.ph > PHASEMASK) ostate.ph = PHASEMASK; } else if (dspdelay < SNDLATENCY) { ostate.phinc--; ostate.ph -= PHASEMASK >> 2; if (ostate.ph > PHASEMASK) ostate.ph = 0; } if (ostate.phinc < (0x9 << (PHASEFRAC-4)) || ostate.phinc > (0x1f << (PHASEFRAC-4))) { lprintf(0, "phinc (0x%05x) out of range\n", ostate.phinc); return -1; } lprintf(3, "phase increment: 0x%05x\n", ostate.phinc); return 0; } /* ---------------------------------------------------------------------- */ baycomepp-0.10.orig/eppfm2/src/audiolinux.c0100644000175100017510000003136306743651300016722 0ustar abaaba/*****************************************************************************/ /* * audio.c -- Audio processing for "virtual transceiver", Linux IO. * * Copyright (C) 1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_LINUX_SOUNDCARD_H #include #include #include #include #include #include #include #include #include #include "eppfm.h" #include #include /* ---------------------------------------------------------------------- */ #define BUFSIZE 8192 /* must be significantly bigger than SNDLATENCY! */ #define OVERLAP 32 /* ---------------------------------------------------------------------- */ struct { enum { st_mdmerr, st_off, st_play, st_rec } state; /* gtk timeout handle */ gint tmotag; /* sampling rate conversion state */ int16_t sample[OVERLAP]; /* control register */ unsigned char ctrlreg; /* led blink counter */ unsigned ledcnt; /* low level driver specific data */ int fddsp; } state = { st_mdmerr, }; /* ---------------------------------------------------------------------- */ static gint periodic_play(gpointer data) { union { unsigned char u[BUFSIZE]; signed char s[BUFSIZE]; } buf; int16_t sbuf[BUFSIZE]; int apar, i, icnt, cnt; /* epp->dsp direction */ /* get FIFO count */ buf.u[0] = state.ctrlreg | 1; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; icnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; icnt &= 0x7fff; if (icnt > 0) { if (icnt > BUFSIZE/2) icnt = BUFSIZE/2; memcpy(buf.s, state.sample, OVERLAP); if (parport_epp_read_data(buf.s+OVERLAP, icnt) != icnt) goto err; memcpy(state.sample, buf.s+icnt, OVERLAP); cnt = audio_convertoutput(icnt, buf.s+OVERLAP, sbuf); if ((i = write(state.fddsp, sbuf, 2*cnt)) != 2*cnt) { lprintf(0, "write(%d) failed %i (%s)\n", 2*cnt, i, strerror(errno)); goto err; } if (ioctl(state.fddsp, SNDCTL_DSP_GETODELAY, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETODELAY failed (%s)\n", strerror(errno)); goto err; } apar >>= 1; /* adjust speed */ if (audio_adjustoutput(cnt, icnt, apar)) goto err; /* play games with the LEDS */ state.ledcnt += icnt; if (state.ledcnt >= 4000) { state.ledcnt %= 4000; state.ctrlreg += 0x40; } /* DCD led */ if (audio_getsquelch()) state.ctrlreg |= 0x10; else state.ctrlreg &= ~0x10; } return TRUE; err: reset_modem(); lprintf(0, "EPP timeout\n"); state.state = st_mdmerr; close(state.fddsp); return FALSE; } static gint periodic_rec(gpointer data) { union { unsigned char u[BUFSIZE]; signed char s[BUFSIZE]; } buf; int16_t sbuf[BUFSIZE]; int ocnt, cnt, ocnts, omax; /* dsp->epp direction */ /* read sound */ memcpy(sbuf, state.sample, OVERLAP*2); ocnts = read(state.fddsp, sbuf+OVERLAP, 2*BUFSIZE/2); if (ocnts == -1 && errno == EAGAIN) ocnts = 0; if (ocnts < 0) { lprintf(0, "read(%d) failed %i (%s)\n", 2*BUFSIZE/2, ocnts, strerror(errno)); goto err; } ocnts >>= 1; memcpy(state.sample, sbuf+ocnts, OVERLAP*2); /* get FIFO count */ buf.u[0] = state.ctrlreg | 2; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; ocnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; ocnt &= 0x7fff; omax = 16384 - ocnt; cnt = 0; if (ocnts > 0) { cnt = audio_convertinput(ocnts, sbuf+OVERLAP, buf.s); if (cnt > omax) { lprintf(0, "epp adapter output overrun (%d, %d)\n", cnt, omax); goto err; } if (parport_epp_write_data(buf.s, cnt) != cnt) goto err; /* reget the FIFO count */ buf.u[0] = state.ctrlreg | 2; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; ocnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; ocnt &= 0x7fff; } /* adjust speed */ if (audio_adjustinput(cnt, ocnts, ocnt)) goto err; return TRUE; err: reset_modem(); lprintf(0, "EPP timeout\n"); state.state = st_mdmerr; close(state.fddsp); return FALSE; } /* ---------------------------------------------------------------------- */ static void playstop(void) { unsigned char buf; if (state.state != st_play) return; gtk_timeout_remove(state.tmotag); close(state.fddsp); /* reset the EPP adapter */ buf = 7; if (parport_epp_write_addr(&buf, 1) != 1) { state.state = st_mdmerr; reset_modem(); } else state.state = st_off; } static void recstop(void) { unsigned char buf; if (state.state != st_rec) return; gtk_timeout_remove(state.tmotag); close(state.fddsp); /* reset the EPP adapter */ buf = 7; if (parport_epp_write_addr(&buf, 1) != 1) { state.state = st_mdmerr; reset_modem(); } else state.state = st_off; } static void playstart(void) { unsigned char buf[2]; int16_t sbuf[SNDLATENCY]; audio_buf_info abinfo; int apar; unsigned srate; int i; if (state.state == st_play) playstop(); if (state.state == st_rec) recstop(); state.ctrlreg = 0; state.ledcnt = 0; memset(state.sample, 0, sizeof(state.sample)); /* start modem if mdmerr */ if (state.state == st_mdmerr) { cfg.bitrate = SAMPLINGRATE; if ((i = adapter_start_eppsamp(&cfg))) { lprintf(0, "Cannot initialize the modem\n"); return; } } state.state = st_off; if ((state.fddsp = open("/dev/dsp", O_WRONLY | O_NONBLOCK)) == -1) { lprintf(0, "cannot open /dev/dsp (%s)\n", strerror(errno)); return; } fcntl(state.fddsp, F_SETFL, fcntl(state.fddsp, F_GETFL, 0) | O_NONBLOCK); if (ioctl(state.fddsp, SNDCTL_DSP_NONBLOCK, 0) == -1) { lprintf(0, "ioctl SNDCTL_DSP_NONBLOCK failed (%s)\n", strerror(errno)); goto errsnd; } if (ioctl(state.fddsp, SNDCTL_DSP_GETCAPS, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETCAPS failed (%s)\n", strerror(errno)); goto errsnd; } if (!(apar & DSP_CAP_TRIGGER)) { lprintf(0, "soundcard does not support trigger\n"); goto errsnd; } apar = AFMT_S16_LE; if (ioctl(state.fddsp, SNDCTL_DSP_SETFMT, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETFMT failed (%s), S16_LE not supported??\n", strerror(errno)); goto errsnd; } apar = 0; if (ioctl(state.fddsp, SNDCTL_DSP_STEREO, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_STEREO failed (%s), mono not supported??\n", strerror(errno)); goto errsnd; } srate = cfg.bitrate; if (ioctl(state.fddsp, SNDCTL_DSP_SPEED, &srate) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SPEED failed (%s), samplingrate %u not supported??\n", strerror(errno), cfg.bitrate); goto errsnd; } lprintf(2, "epp adapter sampling rate %u, soundcard sampling rate %u\n", cfg.bitrate, srate); if (abs(cfg.bitrate - srate) > cfg.bitrate / 2) { lprintf(0, "sampling rates (%u,%u) too different\n", cfg.bitrate, srate); goto errsnd; } if (ioctl(state.fddsp, SNDCTL_DSP_GETOSPACE, &abinfo) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETOSPACE failed (%s)\n", strerror(errno)); goto errsnd; } if (abinfo.fragstotal * abinfo.fragsize < 2*SNDLATENCY*2) { lprintf(0, "soundcard buffers too small (%u)\n", abinfo.fragstotal * abinfo.fragsize); goto errsnd; } audio_initoutput(cfg.bitrate, srate); lprintf(0, "Audio Output to Linux Soundcard\n"); /* reset the EPP adapter */ buf[0] = 7; buf[1] = state.ctrlreg; if (parport_epp_write_addr(buf, 2) != 2) goto errret; /* prefill to nominal queue size and start soundcard */ memset(sbuf, 0, sizeof(sbuf)); if ((i = write(state.fddsp, sbuf, 2*SNDLATENCY)) != 2*SNDLATENCY) { lprintf(0, "write(%d) failed %i (%s)\n", 2*SNDLATENCY, i, strerror(errno)); goto errsnd; } apar = PCM_ENABLE_OUTPUT; if (ioctl(state.fddsp, SNDCTL_DSP_SETTRIGGER, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETTRIGGER failed (%s)\n", strerror(errno)); goto errsnd; } state.tmotag = gtk_timeout_add(100, periodic_play, NULL); state.state = st_play; return; errsnd: buf[0] = 7; if (parport_epp_write_addr(buf, 1) != 1) goto errret; state.state = st_off; goto errclose; errret: lprintf(0, "EPP timeout\n"); state.state = st_mdmerr; reset_modem(); errclose: close(state.fddsp); } static void recstart(void) { unsigned char buf[SNDLATENCY]; audio_buf_info abinfo; int apar; unsigned srate; int i; if (state.state == st_play) playstop(); if (state.state == st_rec) recstop(); state.ctrlreg = 0x20; state.ledcnt = 0; memset(state.sample, 0, sizeof(state.sample)); /* start modem if mdmerr */ if (state.state == st_mdmerr) { cfg.bitrate = SAMPLINGRATE; if ((i = adapter_start_eppsamp(&cfg))) { lprintf(0, "Cannot initialize the modem\n"); return; } } state.state = st_off; if ((state.fddsp = open("/dev/dsp", O_RDONLY | O_NONBLOCK)) == -1) { lprintf(0, "cannot open /dev/dsp (%s)\n", strerror(errno)); return; } fcntl(state.fddsp, F_SETFL, fcntl(state.fddsp, F_GETFL, 0) | O_NONBLOCK); if (ioctl(state.fddsp, SNDCTL_DSP_NONBLOCK, 0) == -1) { lprintf(0, "ioctl SNDCTL_DSP_NONBLOCK failed (%s)\n", strerror(errno)); goto errsnd; } if (ioctl(state.fddsp, SNDCTL_DSP_GETCAPS, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETCAPS failed (%s)\n", strerror(errno)); goto errsnd; } if (!(apar & DSP_CAP_TRIGGER)) { lprintf(0, "soundcard does not support trigger\n"); goto errsnd; } apar = AFMT_S16_LE; if (ioctl(state.fddsp, SNDCTL_DSP_SETFMT, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETFMT failed (%s), S16_LE not supported??\n", strerror(errno)); goto errsnd; } apar = 0; if (ioctl(state.fddsp, SNDCTL_DSP_STEREO, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_STEREO failed (%s), mono not supported??\n", strerror(errno)); goto errsnd; } srate = cfg.bitrate; if (ioctl(state.fddsp, SNDCTL_DSP_SPEED, &srate) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SPEED failed (%s), samplingrate %u not supported??\n", strerror(errno), cfg.bitrate); goto errsnd; } lprintf(2, "epp adapter sampling rate %u, soundcard sampling rate %u\n", cfg.bitrate, srate); if (abs(cfg.bitrate - srate) > cfg.bitrate / 2) { lprintf(0, "sampling rates (%u,%u) too different\n", cfg.bitrate, srate); goto errsnd; } if (ioctl(state.fddsp, SNDCTL_DSP_GETISPACE, &abinfo) == -1) { lprintf(0, "ioctl SNDCTL_DSP_GETISPACE failed (%s)\n", strerror(errno)); goto errsnd; } if (abinfo.fragstotal * abinfo.fragsize < 2*SNDLATENCY*2) { lprintf(0, "soundcard buffers too small (%u)\n", abinfo.fragstotal * abinfo.fragsize); goto errsnd; } audio_initinput(cfg.bitrate, srate); lprintf(0, "Audio Input from Linux Soundcard\n"); /* reset the EPP adapter */ buf[0] = 7; buf[1] = state.ctrlreg; if (parport_epp_write_addr(buf, 2) != 2) goto errret; /* prefill EPP adapter start soundcard */ memset(buf, 0, sizeof(buf)); if (parport_epp_write_data(buf, SNDLATENCY) != SNDLATENCY) goto errret; apar = PCM_ENABLE_INPUT; if (ioctl(state.fddsp, SNDCTL_DSP_SETTRIGGER, &apar) == -1) { lprintf(0, "ioctl SNDCTL_DSP_SETTRIGGER failed (%s)\n", strerror(errno)); goto errsnd; } state.tmotag = gtk_timeout_add(100, periodic_rec, NULL); state.state = st_rec; return; errsnd: buf[0] = 7; if (parport_epp_write_addr(buf, 1) != 1) goto errret; state.state = st_off; goto errclose; errret: lprintf(0, "EPP timeout\n"); state.state = st_mdmerr; reset_modem(); errclose: close(state.fddsp); } /* ---------------------------------------------------------------------- */ void audio_ptt(int ptt) { if (ptt && state.state != st_rec) recstart(); else if (!ptt && state.state != st_play) playstart(); } int audio_drvinit(const char *config) { return 0; } /* ---------------------------------------------------------------------- */ #endif /* HAVE_LINUX_SOUNDCARD_H */ baycomepp-0.10.orig/eppfm2/src/support.c0100644000175100017510000001057206743566010016257 0ustar abaaba/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "support.h" /* This is an internally used function to check if a pixmap file exists. */ static gchar* check_file_exists (const gchar *directory, const gchar *filename); /* This is an internally used function to create pixmaps. */ static GtkWidget* create_dummy_pixmap (GtkWidget *widget); GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = widget->parent; if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } /* This is a dummy pixmap we use when a pixmap can't be found. */ static char *dummy_pixmap_xpm[] = { /* columns rows colors chars-per-pixel */ "1 1 1 1", " c None", /* pixels */ " " }; /* This is an internally used function to create pixmaps. */ static GtkWidget* create_dummy_pixmap (GtkWidget *widget) { GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; colormap = gtk_widget_get_colormap (widget); gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask, NULL, dummy_pixmap_xpm); if (gdkpixmap == NULL) g_error ("Couldn't create replacement pixmap."); pixmap = gtk_pixmap_new (gdkpixmap, mask); gdk_pixmap_unref (gdkpixmap); gdk_bitmap_unref (mask); return pixmap; } static GList *pixmaps_directories = NULL; /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory) { pixmaps_directories = g_list_prepend (pixmaps_directories, g_strdup (directory)); } /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename) { gchar *found_filename = NULL; GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; GList *elem; /* We first try any pixmaps directories set by the application. */ elem = pixmaps_directories; while (elem) { found_filename = check_file_exists ((gchar*)elem->data, filename); if (found_filename) break; elem = elem->next; } /* If we haven't found the pixmap, try the source directory. */ if (!found_filename) { found_filename = check_file_exists ("../pixmaps", filename); } if (!found_filename) { g_warning (_("Couldn't find pixmap file: %s"), filename); return create_dummy_pixmap (widget); } colormap = gtk_widget_get_colormap (widget); gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, &mask, NULL, found_filename); if (gdkpixmap == NULL) { g_warning (_("Error loading pixmap file: %s"), found_filename); g_free (found_filename); return create_dummy_pixmap (widget); } g_free (found_filename); pixmap = gtk_pixmap_new (gdkpixmap, mask); gdk_pixmap_unref (gdkpixmap); gdk_bitmap_unref (mask); return pixmap; } /* This is an internally used function to check if a pixmap file exists. */ gchar* check_file_exists (const gchar *directory, const gchar *filename) { gchar *full_filename; struct stat s; gint status; full_filename = (gchar*) g_malloc (strlen (directory) + 1 + strlen (filename) + 1); strcpy (full_filename, directory); strcat (full_filename, G_DIR_SEPARATOR_S); strcat (full_filename, filename); status = stat (full_filename, &s); if (status == 0 && S_ISREG (s.st_mode)) return full_filename; g_free (full_filename); return NULL; } baycomepp-0.10.orig/eppfm2/src/support.h0100644000175100017510000000274306743566010016265 0ustar abaaba/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #include /* * Standard gettext macros. */ #ifdef ENABLE_NLS # include # undef _ # define _(String) dgettext (PACKAGE, String) # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,Message) (Message) # define dcgettext(Domain,Message,Type) (Message) # define bindtextdomain(Domain,Directory) (Domain) # define _(String) (String) # define N_(String) (String) #endif /* * Public Functions. */ /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name); /* get_widget() is deprecated. Use lookup_widget instead. */ #define get_widget lookup_widget /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory); /* * Private Functions. */ /* This is used to create the pixmaps in the interface. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename); baycomepp-0.10.orig/eppfm2/src/interface.c0100644000175100017510000014566706743566010016521 0ustar abaaba/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "callbacks.h" #include "interface.h" #include "support.h" GtkWidget* create_ioconfiglinux () { GtkWidget *ioconfiglinux; GtkWidget *vbox1; GtkWidget *frame3; GtkWidget *table3; GtkWidget *sndrecord; GList *sndrecord_items = NULL; GtkWidget *sndplayback; GList *sndplayback_items = NULL; GtkWidget *label5; GtkWidget *label6; GtkWidget *frame1; GtkWidget *table2; GtkWidget *ioaddr; GList *ioaddr_items = NULL; GtkWidget *devfile; GList *devfile_items = NULL; GtkWidget *label2; GtkWidget *label3; GtkWidget *label1; GSList *drivergroup_group = NULL; GtkWidget *drvdirect; GtkWidget *drvppdev; GtkWidget *frame2; GtkWidget *table1; GtkWidget *fpgaclk; GList *fpgaclk_items = NULL; GtkWidget *label4; GtkWidget *hbuttonbox1; GtkWidget *buttonok; GtkWidget *buttonquit; GtkTooltips *tooltips; tooltips = gtk_tooltips_new (); ioconfiglinux = gtk_window_new (GTK_WINDOW_DIALOG); gtk_widget_set_name (ioconfiglinux, "ioconfiglinux"); gtk_widget_ref (ioconfiglinux); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "ioconfiglinux", ioconfiglinux, (GtkDestroyNotify) gtk_widget_unref); gtk_window_set_title (GTK_WINDOW (ioconfiglinux), _("EPPFM Input/Output Configuration")); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox1, "vbox1"); gtk_widget_ref (vbox1); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (ioconfiglinux), vbox1); frame3 = gtk_frame_new (_("Soundcard Settings")); gtk_widget_set_name (frame3, "frame3"); gtk_widget_ref (frame3); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "frame3", frame3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (frame3); gtk_box_pack_start (GTK_BOX (vbox1), frame3, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame3), 5); table3 = gtk_table_new (2, 2, FALSE); gtk_widget_set_name (table3, "table3"); gtk_widget_ref (table3); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "table3", table3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (table3); gtk_container_add (GTK_CONTAINER (frame3), table3); sndrecord = gtk_combo_new (); gtk_widget_set_name (sndrecord, "sndrecord"); gtk_widget_ref (sndrecord); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "sndrecord", sndrecord, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (sndrecord); gtk_table_attach (GTK_TABLE (table3), sndrecord, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (sndrecord), 3); gtk_combo_set_case_sensitive (GTK_COMBO (sndrecord), TRUE); sndrecord_items = g_list_append (sndrecord_items, _("/dev/dsp")); sndrecord_items = g_list_append (sndrecord_items, _("/dev/dsp1")); gtk_combo_set_popdown_strings (GTK_COMBO (sndrecord), sndrecord_items); g_list_free (sndrecord_items); sndplayback = gtk_combo_new (); gtk_widget_set_name (sndplayback, "sndplayback"); gtk_widget_ref (sndplayback); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "sndplayback", sndplayback, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (sndplayback); gtk_table_attach (GTK_TABLE (table3), sndplayback, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (sndplayback), 3); gtk_combo_set_case_sensitive (GTK_COMBO (sndplayback), TRUE); sndplayback_items = g_list_append (sndplayback_items, _("/dev/dsp")); sndplayback_items = g_list_append (sndplayback_items, _("/dev/dsp1")); gtk_combo_set_popdown_strings (GTK_COMBO (sndplayback), sndplayback_items); g_list_free (sndplayback_items); label5 = gtk_label_new (_("Soundcard for Recording")); gtk_widget_set_name (label5, "label5"); gtk_widget_ref (label5); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "label5", label5, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label5); gtk_table_attach (GTK_TABLE (table3), label5, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_justify (GTK_LABEL (label5), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label5), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label5), 10, 0); label6 = gtk_label_new (_("Soundcard for Playback")); gtk_widget_set_name (label6, "label6"); gtk_widget_ref (label6); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "label6", label6, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label6); gtk_table_attach (GTK_TABLE (table3), label6, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_justify (GTK_LABEL (label6), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label6), 10, 0); frame1 = gtk_frame_new (_("Parallel Port Driver Settings")); gtk_widget_set_name (frame1, "frame1"); gtk_widget_ref (frame1); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "frame1", frame1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (frame1); gtk_box_pack_start (GTK_BOX (vbox1), frame1, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame1), 5); table2 = gtk_table_new (2, 4, FALSE); gtk_widget_set_name (table2, "table2"); gtk_widget_ref (table2); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "table2", table2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (table2); gtk_container_add (GTK_CONTAINER (frame1), table2); ioaddr = gtk_combo_new (); gtk_widget_set_name (ioaddr, "ioaddr"); gtk_widget_ref (ioaddr); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "ioaddr", ioaddr, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (ioaddr); gtk_table_attach (GTK_TABLE (table2), ioaddr, 3, 4, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_widget_set_usize (GTK_COMBO (ioaddr)->entry, 104, -2); gtk_widget_set_usize (ioaddr, 120, -2); gtk_container_set_border_width (GTK_CONTAINER (ioaddr), 3); ioaddr_items = g_list_append (ioaddr_items, _("0x378")); ioaddr_items = g_list_append (ioaddr_items, _("0x278")); gtk_combo_set_popdown_strings (GTK_COMBO (ioaddr), ioaddr_items); g_list_free (ioaddr_items); devfile = gtk_combo_new (); gtk_widget_set_name (devfile, "devfile"); gtk_widget_ref (devfile); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "devfile", devfile, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (devfile); gtk_table_attach (GTK_TABLE (table2), devfile, 3, 4, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_widget_set_usize (GTK_COMBO (devfile)->entry, 104, -2); gtk_widget_set_usize (devfile, 120, -2); gtk_container_set_border_width (GTK_CONTAINER (devfile), 3); gtk_combo_set_case_sensitive (GTK_COMBO (devfile), TRUE); devfile_items = g_list_append (devfile_items, _("/dev/ppuser0")); devfile_items = g_list_append (devfile_items, _("/dev/ppuser1")); gtk_combo_set_popdown_strings (GTK_COMBO (devfile), devfile_items); g_list_free (devfile_items); label2 = gtk_label_new (_("IO Address")); gtk_widget_set_name (label2, "label2"); gtk_widget_ref (label2); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "label2", label2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label2); gtk_table_attach (GTK_TABLE (table2), label2, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_misc_set_alignment (GTK_MISC (label2), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label2), 4, 0); label3 = gtk_label_new (_("File")); gtk_widget_set_name (label3, "label3"); gtk_widget_ref (label3); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "label3", label3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label3); gtk_table_attach (GTK_TABLE (table2), label3, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_misc_set_alignment (GTK_MISC (label3), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label3), 4, 0); label1 = gtk_label_new (_("Driver Selection")); gtk_widget_set_name (label1, "label1"); gtk_widget_ref (label1); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "label1", label1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label1); gtk_table_attach (GTK_TABLE (table2), label1, 0, 1, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_label_set_justify (GTK_LABEL (label1), GTK_JUSTIFY_LEFT); gtk_misc_set_padding (GTK_MISC (label1), 9, 0); drvdirect = gtk_radio_button_new_with_label (drivergroup_group, _("Direct Parport Access")); drivergroup_group = gtk_radio_button_group (GTK_RADIO_BUTTON (drvdirect)); gtk_widget_set_name (drvdirect, "drvdirect"); gtk_widget_ref (drvdirect); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "drvdirect", drvdirect, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (drvdirect); gtk_table_attach (GTK_TABLE (table2), drvdirect, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); drvppdev = gtk_radio_button_new_with_label (drivergroup_group, _("ppdev Kernel Driver")); drivergroup_group = gtk_radio_button_group (GTK_RADIO_BUTTON (drvppdev)); gtk_widget_set_name (drvppdev, "drvppdev"); gtk_widget_ref (drvppdev); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "drvppdev", drvppdev, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (drvppdev); gtk_table_attach (GTK_TABLE (table2), drvppdev, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); frame2 = gtk_frame_new (_("Modem Settings")); gtk_widget_set_name (frame2, "frame2"); gtk_widget_ref (frame2); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "frame2", frame2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (frame2); gtk_box_pack_start (GTK_BOX (vbox1), frame2, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame2), 5); table1 = gtk_table_new (1, 2, FALSE); gtk_widget_set_name (table1, "table1"); gtk_widget_ref (table1); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "table1", table1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (table1); gtk_container_add (GTK_CONTAINER (frame2), table1); fpgaclk = gtk_combo_new (); gtk_widget_set_name (fpgaclk, "fpgaclk"); gtk_widget_ref (fpgaclk); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "fpgaclk", fpgaclk, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (fpgaclk); gtk_table_attach (GTK_TABLE (table1), fpgaclk, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (fpgaclk), 3); fpgaclk_items = g_list_append (fpgaclk_items, _("19666600")); fpgaclk_items = g_list_append (fpgaclk_items, _("9830400")); gtk_combo_set_popdown_strings (GTK_COMBO (fpgaclk), fpgaclk_items); g_list_free (fpgaclk_items); label4 = gtk_label_new (_("FPGA clock frequency")); gtk_widget_set_name (label4, "label4"); gtk_widget_ref (label4); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "label4", label4, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label4); gtk_table_attach (GTK_TABLE (table1), label4, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_label_set_justify (GTK_LABEL (label4), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label4), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label4), 10, 0); hbuttonbox1 = gtk_hbutton_box_new (); gtk_widget_set_name (hbuttonbox1, "hbuttonbox1"); gtk_widget_ref (hbuttonbox1); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "hbuttonbox1", hbuttonbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbuttonbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbuttonbox1, TRUE, TRUE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_SPREAD); buttonok = gtk_button_new_with_label (_("Ok")); gtk_widget_set_name (buttonok, "buttonok"); gtk_widget_ref (buttonok); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "buttonok", buttonok, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttonok); gtk_container_add (GTK_CONTAINER (hbuttonbox1), buttonok); GTK_WIDGET_SET_FLAGS (buttonok, GTK_CAN_DEFAULT); gtk_tooltips_set_tip (tooltips, buttonok, _("Continue"), NULL); buttonquit = gtk_button_new_with_label (_("Quit")); gtk_widget_set_name (buttonquit, "buttonquit"); gtk_widget_ref (buttonquit); gtk_object_set_data_full (GTK_OBJECT (ioconfiglinux), "buttonquit", buttonquit, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttonquit); gtk_container_add (GTK_CONTAINER (hbuttonbox1), buttonquit); GTK_WIDGET_SET_FLAGS (buttonquit, GTK_CAN_DEFAULT); gtk_tooltips_set_tip (tooltips, buttonquit, _("Quit the application"), NULL); gtk_signal_connect (GTK_OBJECT (buttonok), "clicked", GTK_SIGNAL_FUNC (on_configok_clicked), NULL); gtk_signal_connect (GTK_OBJECT (buttonquit), "clicked", GTK_SIGNAL_FUNC (on_configquit_clicked), NULL); gtk_object_set_data (GTK_OBJECT (ioconfiglinux), "tooltips", tooltips); return ioconfiglinux; } GtkWidget* create_mainwindow () { GtkWidget *mainwindow; GtkWidget *vbox2; GtkWidget *handlebox1; GtkWidget *menubar1; guint tmp_key; GtkWidget *file; GtkWidget *file_menu; GtkAccelGroup *file_menu_accels; GtkWidget *dtmf; GtkWidget *oscilloscope; GtkWidget *spectrum; GtkWidget *separator1; GtkWidget *quit; GtkWidget *help; GtkWidget *help_menu; GtkAccelGroup *help_menu_accels; GtkWidget *about; GtkWidget *vbox3; GtkWidget *progressbar1; GtkWidget *progressbar2; GtkWidget *handlebox2; GtkWidget *hbox1; GtkWidget *buttonptt; GtkWidget *button1750; GtkWidget *buttonsquelch; GtkWidget *buttondtmf; GtkWidget *buttonscope; GtkWidget *buttonspectrum; GtkAccelGroup *accel_group; GtkTooltips *tooltips; tooltips = gtk_tooltips_new (); accel_group = gtk_accel_group_new (); mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_name (mainwindow, "mainwindow"); gtk_widget_ref (mainwindow); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "mainwindow", mainwindow, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_set_events (mainwindow, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); gtk_window_set_title (GTK_WINDOW (mainwindow), _("EPPFM")); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox2, "vbox2"); gtk_widget_ref (vbox2); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "vbox2", vbox2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox2); gtk_container_add (GTK_CONTAINER (mainwindow), vbox2); handlebox1 = gtk_handle_box_new (); gtk_widget_set_name (handlebox1, "handlebox1"); gtk_widget_ref (handlebox1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "handlebox1", handlebox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (handlebox1); gtk_box_pack_start (GTK_BOX (vbox2), handlebox1, FALSE, TRUE, 0); menubar1 = gtk_menu_bar_new (); gtk_widget_set_name (menubar1, "menubar1"); gtk_widget_ref (menubar1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "menubar1", menubar1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (menubar1); gtk_container_add (GTK_CONTAINER (handlebox1), menubar1); file = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (file)->child), _("_File")); gtk_widget_add_accelerator (file, "activate_item", accel_group, tmp_key, GDK_MOD1_MASK, 0); gtk_widget_set_name (file, "file"); gtk_widget_ref (file); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "file", file, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (file); gtk_container_add (GTK_CONTAINER (menubar1), file); gtk_tooltips_set_tip (tooltips, file, _("File Menu"), NULL); file_menu = gtk_menu_new (); gtk_widget_set_name (file_menu, "file_menu"); gtk_widget_ref (file_menu); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "file_menu", file_menu, (GtkDestroyNotify) gtk_widget_unref); gtk_menu_item_set_submenu (GTK_MENU_ITEM (file), file_menu); file_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (file_menu)); dtmf = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (dtmf)->child), _("_DTMF keypad...")); gtk_widget_add_accelerator (dtmf, "activate_item", file_menu_accels, tmp_key, 0, 0); gtk_widget_set_name (dtmf, "dtmf"); gtk_widget_ref (dtmf); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "dtmf", dtmf, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf); gtk_container_add (GTK_CONTAINER (file_menu), dtmf); oscilloscope = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (oscilloscope)->child), _("_Oscilloscope display...")); gtk_widget_add_accelerator (oscilloscope, "activate_item", file_menu_accels, tmp_key, 0, 0); gtk_widget_set_name (oscilloscope, "oscilloscope"); gtk_widget_ref (oscilloscope); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "oscilloscope", oscilloscope, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (oscilloscope); gtk_container_add (GTK_CONTAINER (file_menu), oscilloscope); spectrum = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (spectrum)->child), _("_Spectrum Display...")); gtk_widget_add_accelerator (spectrum, "activate_item", file_menu_accels, tmp_key, 0, 0); gtk_widget_set_name (spectrum, "spectrum"); gtk_widget_ref (spectrum); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "spectrum", spectrum, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (spectrum); gtk_container_add (GTK_CONTAINER (file_menu), spectrum); separator1 = gtk_menu_item_new (); gtk_widget_set_name (separator1, "separator1"); gtk_widget_ref (separator1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "separator1", separator1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (separator1); gtk_container_add (GTK_CONTAINER (file_menu), separator1); gtk_widget_set_sensitive (separator1, FALSE); quit = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (quit)->child), _("_Quit")); gtk_widget_add_accelerator (quit, "activate_item", file_menu_accels, tmp_key, 0, 0); gtk_widget_set_name (quit, "quit"); gtk_widget_ref (quit); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "quit", quit, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (quit); gtk_container_add (GTK_CONTAINER (file_menu), quit); help = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (help)->child), _("_Help")); gtk_widget_add_accelerator (help, "activate_item", accel_group, tmp_key, GDK_MOD1_MASK, 0); gtk_widget_set_name (help, "help"); gtk_widget_ref (help); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "help", help, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (help); gtk_container_add (GTK_CONTAINER (menubar1), help); gtk_menu_item_right_justify (GTK_MENU_ITEM (help)); help_menu = gtk_menu_new (); gtk_widget_set_name (help_menu, "help_menu"); gtk_widget_ref (help_menu); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "help_menu", help_menu, (GtkDestroyNotify) gtk_widget_unref); gtk_menu_item_set_submenu (GTK_MENU_ITEM (help), help_menu); help_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (help_menu)); about = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (about)->child), _("_About")); gtk_widget_add_accelerator (about, "activate_item", help_menu_accels, tmp_key, 0, 0); gtk_widget_set_name (about, "about"); gtk_widget_ref (about); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "about", about, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (about); gtk_container_add (GTK_CONTAINER (help_menu), about); vbox3 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox3, "vbox3"); gtk_widget_ref (vbox3); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "vbox3", vbox3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox3); gtk_box_pack_start (GTK_BOX (vbox2), vbox3, TRUE, TRUE, 0); progressbar1 = gtk_progress_bar_new (); gtk_widget_set_name (progressbar1, "progressbar1"); gtk_widget_ref (progressbar1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "progressbar1", progressbar1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (progressbar1); gtk_box_pack_start (GTK_BOX (vbox3), progressbar1, TRUE, TRUE, 0); gtk_progress_configure (GTK_PROGRESS (progressbar1), -40, -40, 0); gtk_progress_set_show_text (GTK_PROGRESS (progressbar1), TRUE); progressbar2 = gtk_progress_bar_new (); gtk_widget_set_name (progressbar2, "progressbar2"); gtk_widget_ref (progressbar2); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "progressbar2", progressbar2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (progressbar2); gtk_box_pack_start (GTK_BOX (vbox3), progressbar2, TRUE, TRUE, 0); gtk_progress_configure (GTK_PROGRESS (progressbar2), -40, -40, 0); gtk_progress_set_show_text (GTK_PROGRESS (progressbar2), TRUE); handlebox2 = gtk_handle_box_new (); gtk_widget_set_name (handlebox2, "handlebox2"); gtk_widget_ref (handlebox2); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "handlebox2", handlebox2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (handlebox2); gtk_box_pack_start (GTK_BOX (vbox2), handlebox2, FALSE, TRUE, 0); hbox1 = gtk_hbox_new (TRUE, 0); gtk_widget_set_name (hbox1, "hbox1"); gtk_widget_ref (hbox1); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "hbox1", hbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox1); gtk_container_add (GTK_CONTAINER (handlebox2), hbox1); buttonptt = gtk_toggle_button_new_with_label (_("PTT")); gtk_widget_set_name (buttonptt, "buttonptt"); gtk_widget_ref (buttonptt); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttonptt", buttonptt, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttonptt); gtk_box_pack_start (GTK_BOX (hbox1), buttonptt, TRUE, TRUE, 0); gtk_widget_set_usize (buttonptt, 70, -2); button1750 = gtk_button_new_with_label (_("1750")); gtk_widget_set_name (button1750, "button1750"); gtk_widget_ref (button1750); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "button1750", button1750, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (button1750); gtk_box_pack_start (GTK_BOX (hbox1), button1750, TRUE, TRUE, 0); buttonsquelch = gtk_button_new_with_label (_("Squelch off")); gtk_widget_set_name (buttonsquelch, "buttonsquelch"); gtk_widget_ref (buttonsquelch); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttonsquelch", buttonsquelch, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttonsquelch); gtk_box_pack_start (GTK_BOX (hbox1), buttonsquelch, TRUE, TRUE, 0); buttondtmf = gtk_button_new_with_label (_("DTMF")); gtk_widget_set_name (buttondtmf, "buttondtmf"); gtk_widget_ref (buttondtmf); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttondtmf", buttondtmf, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttondtmf); gtk_box_pack_start (GTK_BOX (hbox1), buttondtmf, TRUE, TRUE, 0); buttonscope = gtk_button_new_with_label (_("Scope")); gtk_widget_set_name (buttonscope, "buttonscope"); gtk_widget_ref (buttonscope); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttonscope", buttonscope, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttonscope); gtk_box_pack_start (GTK_BOX (hbox1), buttonscope, TRUE, TRUE, 0); buttonspectrum = gtk_button_new_with_label (_("Spectrum")); gtk_widget_set_name (buttonspectrum, "buttonspectrum"); gtk_widget_ref (buttonspectrum); gtk_object_set_data_full (GTK_OBJECT (mainwindow), "buttonspectrum", buttonspectrum, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttonspectrum); gtk_box_pack_start (GTK_BOX (hbox1), buttonspectrum, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (mainwindow), "delete_event", GTK_SIGNAL_FUNC (on_mainwindow_delete_event), NULL); gtk_signal_connect (GTK_OBJECT (mainwindow), "destroy", GTK_SIGNAL_FUNC (on_mainwindow_destroy), NULL); gtk_signal_connect (GTK_OBJECT (mainwindow), "key_press_event", GTK_SIGNAL_FUNC (on_mainwindow_key_event), NULL); gtk_signal_connect (GTK_OBJECT (mainwindow), "key_release_event", GTK_SIGNAL_FUNC (on_mainwindow_key_event), NULL); gtk_signal_connect (GTK_OBJECT (dtmf), "activate", GTK_SIGNAL_FUNC (on_dtmf_activate), NULL); gtk_signal_connect (GTK_OBJECT (oscilloscope), "activate", GTK_SIGNAL_FUNC (on_oscilloscope_activate), NULL); gtk_signal_connect (GTK_OBJECT (spectrum), "activate", GTK_SIGNAL_FUNC (on_spectrum_activate), NULL); gtk_signal_connect (GTK_OBJECT (quit), "activate", GTK_SIGNAL_FUNC (on_quit_activate), NULL); gtk_signal_connect (GTK_OBJECT (about), "activate", GTK_SIGNAL_FUNC (on_about_activate), NULL); gtk_signal_connect (GTK_OBJECT (buttonptt), "toggled", GTK_SIGNAL_FUNC (on_mainptt_toggled), NULL); gtk_signal_connect (GTK_OBJECT (button1750), "pressed", GTK_SIGNAL_FUNC (on_button1750_pressed), NULL); gtk_signal_connect (GTK_OBJECT (button1750), "released", GTK_SIGNAL_FUNC (on_button1750_released), NULL); gtk_signal_connect (GTK_OBJECT (buttonsquelch), "clicked", GTK_SIGNAL_FUNC (on_buttonsquelch_clicked), NULL); gtk_signal_connect (GTK_OBJECT (buttondtmf), "clicked", GTK_SIGNAL_FUNC (on_maindtmf_clicked), NULL); gtk_signal_connect (GTK_OBJECT (buttonscope), "clicked", GTK_SIGNAL_FUNC (on_mainscope_clicked), NULL); gtk_signal_connect (GTK_OBJECT (buttonspectrum), "clicked", GTK_SIGNAL_FUNC (on_mainspectrum_clicked), NULL); gtk_object_set_data (GTK_OBJECT (mainwindow), "tooltips", tooltips); gtk_window_add_accel_group (GTK_WINDOW (mainwindow), accel_group); return mainwindow; } GtkWidget* create_aboutdialog () { GtkWidget *aboutdialog; GtkWidget *dialog_vbox1; GtkWidget *vbox5; GtkWidget *label7; GtkWidget *label8; GtkWidget *label9; GtkWidget *dialog_action_area1; GtkWidget *buttonok; aboutdialog = gtk_dialog_new (); gtk_widget_set_name (aboutdialog, "aboutdialog"); gtk_widget_ref (aboutdialog); gtk_object_set_data_full (GTK_OBJECT (aboutdialog), "aboutdialog", aboutdialog, (GtkDestroyNotify) gtk_widget_unref); gtk_window_set_title (GTK_WINDOW (aboutdialog), _("About")); gtk_window_set_policy (GTK_WINDOW (aboutdialog), TRUE, TRUE, FALSE); dialog_vbox1 = GTK_DIALOG (aboutdialog)->vbox; gtk_widget_set_name (dialog_vbox1, "dialog_vbox1"); gtk_widget_ref (dialog_vbox1); gtk_object_set_data_full (GTK_OBJECT (aboutdialog), "dialog_vbox1", dialog_vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dialog_vbox1); vbox5 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox5, "vbox5"); gtk_widget_ref (vbox5); gtk_object_set_data_full (GTK_OBJECT (aboutdialog), "vbox5", vbox5, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox5); gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox5, TRUE, TRUE, 0); label7 = gtk_label_new (_("written by:")); gtk_widget_set_name (label7, "label7"); gtk_widget_ref (label7); gtk_object_set_data_full (GTK_OBJECT (aboutdialog), "label7", label7, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label7); gtk_box_pack_start (GTK_BOX (vbox5), label7, FALSE, FALSE, 0); gtk_misc_set_alignment (GTK_MISC (label7), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label7), 4, 3); label8 = gtk_label_new (_("Thomas Sailer")); gtk_widget_set_name (label8, "label8"); gtk_widget_ref (label8); gtk_object_set_data_full (GTK_OBJECT (aboutdialog), "label8", label8, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label8); gtk_box_pack_start (GTK_BOX (vbox5), label8, FALSE, FALSE, 0); gtk_misc_set_padding (GTK_MISC (label8), 4, 4); label9 = gtk_label_new (_("HB9JNX/AE4WA")); gtk_widget_set_name (label9, "label9"); gtk_widget_ref (label9); gtk_object_set_data_full (GTK_OBJECT (aboutdialog), "label9", label9, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label9); gtk_box_pack_start (GTK_BOX (vbox5), label9, FALSE, FALSE, 0); gtk_misc_set_padding (GTK_MISC (label9), 4, 4); dialog_action_area1 = GTK_DIALOG (aboutdialog)->action_area; gtk_widget_set_name (dialog_action_area1, "dialog_action_area1"); gtk_widget_ref (dialog_action_area1); gtk_object_set_data_full (GTK_OBJECT (aboutdialog), "dialog_action_area1", dialog_action_area1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dialog_action_area1); gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area1), 10); buttonok = gtk_button_new_with_label (_("Ok")); gtk_widget_set_name (buttonok, "buttonok"); gtk_widget_ref (buttonok); gtk_object_set_data_full (GTK_OBJECT (aboutdialog), "buttonok", buttonok, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttonok); gtk_box_pack_start (GTK_BOX (dialog_action_area1), buttonok, FALSE, FALSE, 0); gtk_widget_set_usize (buttonok, 80, 27); gtk_signal_connect (GTK_OBJECT (aboutdialog), "delete_event", GTK_SIGNAL_FUNC (on_aboutdialog_delete_event), NULL); gtk_signal_connect (GTK_OBJECT (buttonok), "clicked", GTK_SIGNAL_FUNC (on_aboutok_clicked), NULL); return aboutdialog; } GtkWidget* create_dtmfwindow () { GtkWidget *dtmfwindow; GtkWidget *vbox4; GtkWidget *frame4; GtkWidget *hbox2; GtkWidget *dtmfentry; GtkWidget *buttoncleardtmf; GtkWidget *frame5; GtkWidget *table4; GtkWidget *dtmf8; GtkWidget *dtmf9; GtkWidget *dtmfa; GtkWidget *dtmf4; GtkWidget *dtmf5; GtkWidget *dtmf6; GtkWidget *dtmfb; GtkWidget *dtmf1; GtkWidget *dtmf2; GtkWidget *dtmf3; GtkWidget *dtmfc; GtkWidget *dtmfe; GtkWidget *dtmf0; GtkWidget *dtmff; GtkWidget *dtmfd; GtkWidget *dtmf7; dtmfwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_name (dtmfwindow, "dtmfwindow"); gtk_widget_ref (dtmfwindow); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmfwindow", dtmfwindow, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_set_events (dtmfwindow, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); gtk_window_set_title (GTK_WINDOW (dtmfwindow), _("DTMF Keypad")); vbox4 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox4, "vbox4"); gtk_widget_ref (vbox4); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "vbox4", vbox4, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox4); gtk_container_add (GTK_CONTAINER (dtmfwindow), vbox4); frame4 = gtk_frame_new (_("Keys transmitted")); gtk_widget_set_name (frame4, "frame4"); gtk_widget_ref (frame4); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "frame4", frame4, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (frame4); gtk_box_pack_start (GTK_BOX (vbox4), frame4, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame4), 5); gtk_frame_set_label_align (GTK_FRAME (frame4), 0.01, 0.5); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox2, "hbox2"); gtk_widget_ref (hbox2); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "hbox2", hbox2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox2); gtk_container_add (GTK_CONTAINER (frame4), hbox2); dtmfentry = gtk_entry_new (); gtk_widget_set_name (dtmfentry, "dtmfentry"); gtk_widget_ref (dtmfentry); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmfentry", dtmfentry, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmfentry); gtk_box_pack_start (GTK_BOX (hbox2), dtmfentry, TRUE, TRUE, 0); gtk_entry_set_editable (GTK_ENTRY (dtmfentry), FALSE); buttoncleardtmf = gtk_button_new_with_label (_("Clear")); gtk_widget_set_name (buttoncleardtmf, "buttoncleardtmf"); gtk_widget_ref (buttoncleardtmf); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "buttoncleardtmf", buttoncleardtmf, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (buttoncleardtmf); gtk_box_pack_start (GTK_BOX (hbox2), buttoncleardtmf, FALSE, FALSE, 0); gtk_widget_set_usize (buttoncleardtmf, 50, -2); frame5 = gtk_frame_new (_("Keypad")); gtk_widget_set_name (frame5, "frame5"); gtk_widget_ref (frame5); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "frame5", frame5, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (frame5); gtk_box_pack_start (GTK_BOX (vbox4), frame5, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame5), 5); gtk_frame_set_label_align (GTK_FRAME (frame5), 0.01, 0.5); table4 = gtk_table_new (4, 4, FALSE); gtk_widget_set_name (table4, "table4"); gtk_widget_ref (table4); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "table4", table4, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (table4); gtk_container_add (GTK_CONTAINER (frame5), table4); dtmf8 = gtk_button_new_with_label (_("8")); gtk_widget_set_name (dtmf8, "dtmf8"); gtk_widget_ref (dtmf8); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf8", dtmf8, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf8); gtk_table_attach (GTK_TABLE (table4), dtmf8, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmf9 = gtk_button_new_with_label (_("9")); gtk_widget_set_name (dtmf9, "dtmf9"); gtk_widget_ref (dtmf9); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf9", dtmf9, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf9); gtk_table_attach (GTK_TABLE (table4), dtmf9, 2, 3, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmfa = gtk_button_new_with_label (_("A")); gtk_widget_set_name (dtmfa, "dtmfa"); gtk_widget_ref (dtmfa); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmfa", dtmfa, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmfa); gtk_table_attach (GTK_TABLE (table4), dtmfa, 3, 4, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmf4 = gtk_button_new_with_label (_("4")); gtk_widget_set_name (dtmf4, "dtmf4"); gtk_widget_ref (dtmf4); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf4", dtmf4, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf4); gtk_table_attach (GTK_TABLE (table4), dtmf4, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmf5 = gtk_button_new_with_label (_("5")); gtk_widget_set_name (dtmf5, "dtmf5"); gtk_widget_ref (dtmf5); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf5", dtmf5, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf5); gtk_table_attach (GTK_TABLE (table4), dtmf5, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmf6 = gtk_button_new_with_label (_("6")); gtk_widget_set_name (dtmf6, "dtmf6"); gtk_widget_ref (dtmf6); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf6", dtmf6, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf6); gtk_table_attach (GTK_TABLE (table4), dtmf6, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmfb = gtk_button_new_with_label (_("B")); gtk_widget_set_name (dtmfb, "dtmfb"); gtk_widget_ref (dtmfb); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmfb", dtmfb, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmfb); gtk_table_attach (GTK_TABLE (table4), dtmfb, 3, 4, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmf1 = gtk_button_new_with_label (_("1")); gtk_widget_set_name (dtmf1, "dtmf1"); gtk_widget_ref (dtmf1); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf1", dtmf1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf1); gtk_table_attach (GTK_TABLE (table4), dtmf1, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmf2 = gtk_button_new_with_label (_("2")); gtk_widget_set_name (dtmf2, "dtmf2"); gtk_widget_ref (dtmf2); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf2", dtmf2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf2); gtk_table_attach (GTK_TABLE (table4), dtmf2, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmf3 = gtk_button_new_with_label (_("3")); gtk_widget_set_name (dtmf3, "dtmf3"); gtk_widget_ref (dtmf3); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf3", dtmf3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf3); gtk_table_attach (GTK_TABLE (table4), dtmf3, 2, 3, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmfc = gtk_button_new_with_label (_("C")); gtk_widget_set_name (dtmfc, "dtmfc"); gtk_widget_ref (dtmfc); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmfc", dtmfc, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmfc); gtk_table_attach (GTK_TABLE (table4), dtmfc, 3, 4, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmfe = gtk_button_new_with_label (_("*")); gtk_widget_set_name (dtmfe, "dtmfe"); gtk_widget_ref (dtmfe); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmfe", dtmfe, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmfe); gtk_table_attach (GTK_TABLE (table4), dtmfe, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmf0 = gtk_button_new_with_label (_("0")); gtk_widget_set_name (dtmf0, "dtmf0"); gtk_widget_ref (dtmf0); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf0", dtmf0, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf0); gtk_table_attach (GTK_TABLE (table4), dtmf0, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmff = gtk_button_new_with_label (_("#")); gtk_widget_set_name (dtmff, "dtmff"); gtk_widget_ref (dtmff); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmff", dtmff, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmff); gtk_table_attach (GTK_TABLE (table4), dtmff, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmfd = gtk_button_new_with_label (_("D")); gtk_widget_set_name (dtmfd, "dtmfd"); gtk_widget_ref (dtmfd); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmfd", dtmfd, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmfd); gtk_table_attach (GTK_TABLE (table4), dtmfd, 3, 4, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); dtmf7 = gtk_button_new_with_label (_("7")); gtk_widget_set_name (dtmf7, "dtmf7"); gtk_widget_ref (dtmf7); gtk_object_set_data_full (GTK_OBJECT (dtmfwindow), "dtmf7", dtmf7, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (dtmf7); gtk_table_attach (GTK_TABLE (table4), dtmf7, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); gtk_signal_connect (GTK_OBJECT (dtmfwindow), "key_press_event", GTK_SIGNAL_FUNC (on_dtmfwindow_key_event), NULL); gtk_signal_connect (GTK_OBJECT (dtmfwindow), "key_release_event", GTK_SIGNAL_FUNC (on_dtmfwindow_key_event), NULL); gtk_signal_connect (GTK_OBJECT (dtmfwindow), "delete_event", GTK_SIGNAL_FUNC (on_dtmfwindow_delete_event), NULL); gtk_signal_connect (GTK_OBJECT (buttoncleardtmf), "clicked", GTK_SIGNAL_FUNC (on_dtmfclear_clicked), NULL); gtk_signal_connect (GTK_OBJECT (dtmf8), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x18); gtk_signal_connect (GTK_OBJECT (dtmf8), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x08); gtk_signal_connect (GTK_OBJECT (dtmf9), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x19); gtk_signal_connect (GTK_OBJECT (dtmf9), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x09); gtk_signal_connect (GTK_OBJECT (dtmfa), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x1a); gtk_signal_connect (GTK_OBJECT (dtmfa), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x0a); gtk_signal_connect (GTK_OBJECT (dtmf4), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x14); gtk_signal_connect (GTK_OBJECT (dtmf4), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x04); gtk_signal_connect (GTK_OBJECT (dtmf5), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x15); gtk_signal_connect (GTK_OBJECT (dtmf5), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x05); gtk_signal_connect (GTK_OBJECT (dtmf6), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x16); gtk_signal_connect (GTK_OBJECT (dtmf6), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x06); gtk_signal_connect (GTK_OBJECT (dtmfb), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x1b); gtk_signal_connect (GTK_OBJECT (dtmfb), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x0b); gtk_signal_connect (GTK_OBJECT (dtmf1), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x11); gtk_signal_connect (GTK_OBJECT (dtmf1), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x01); gtk_signal_connect (GTK_OBJECT (dtmf2), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x12); gtk_signal_connect (GTK_OBJECT (dtmf2), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x02); gtk_signal_connect (GTK_OBJECT (dtmf3), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x13); gtk_signal_connect (GTK_OBJECT (dtmf3), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x03); gtk_signal_connect (GTK_OBJECT (dtmfc), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x1c); gtk_signal_connect (GTK_OBJECT (dtmfc), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x0c); gtk_signal_connect (GTK_OBJECT (dtmfe), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x1e); gtk_signal_connect (GTK_OBJECT (dtmfe), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x0e); gtk_signal_connect (GTK_OBJECT (dtmf0), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x10); gtk_signal_connect (GTK_OBJECT (dtmf0), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x00); gtk_signal_connect (GTK_OBJECT (dtmff), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x1f); gtk_signal_connect (GTK_OBJECT (dtmff), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x0f); gtk_signal_connect (GTK_OBJECT (dtmfd), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x1d); gtk_signal_connect (GTK_OBJECT (dtmfd), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x0d); gtk_signal_connect (GTK_OBJECT (dtmf7), "pressed", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x17); gtk_signal_connect (GTK_OBJECT (dtmf7), "released", GTK_SIGNAL_FUNC (on_dtmf_key), (gpointer)0x07); return dtmfwindow; } GtkWidget* create_scopewindow () { GtkWidget *scopewindow; GtkWidget *scope; scopewindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_name (scopewindow, "scopewindow"); gtk_widget_ref (scopewindow); gtk_object_set_data_full (GTK_OBJECT (scopewindow), "scopewindow", scopewindow, (GtkDestroyNotify) gtk_widget_unref); gtk_window_set_title (GTK_WINDOW (scopewindow), _("Scope")); scope = scope_new ("scope", NULL, NULL, 128, 0); gtk_widget_set_name (scope, "scope"); gtk_widget_ref (scope); gtk_object_set_data_full (GTK_OBJECT (scopewindow), "scope", scope, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (scope); gtk_container_add (GTK_CONTAINER (scopewindow), scope); gtk_widget_set_usize (scope, 512, 256); GTK_WIDGET_UNSET_FLAGS (scope, GTK_CAN_FOCUS); GTK_WIDGET_UNSET_FLAGS (scope, GTK_CAN_DEFAULT); gtk_signal_connect (GTK_OBJECT (scopewindow), "delete_event", GTK_SIGNAL_FUNC (on_scopewindow_delete_event), NULL); return scopewindow; } GtkWidget* create_spectrumwindow () { GtkWidget *spectrumwindow; GtkWidget *spec; spectrumwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_name (spectrumwindow, "spectrumwindow"); gtk_widget_ref (spectrumwindow); gtk_object_set_data_full (GTK_OBJECT (spectrumwindow), "spectrumwindow", spectrumwindow, (GtkDestroyNotify) gtk_widget_unref); gtk_window_set_title (GTK_WINDOW (spectrumwindow), _("Spectrum")); spec = spectrum_new ("spec", NULL, NULL, 256, 0); gtk_widget_set_name (spec, "spec"); gtk_widget_ref (spec); gtk_object_set_data_full (GTK_OBJECT (spectrumwindow), "spec", spec, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (spec); gtk_container_add (GTK_CONTAINER (spectrumwindow), spec); gtk_widget_set_usize (spec, 512, 256); GTK_WIDGET_UNSET_FLAGS (spec, GTK_CAN_FOCUS); GTK_WIDGET_UNSET_FLAGS (spec, GTK_CAN_DEFAULT); gtk_signal_connect (GTK_OBJECT (spectrumwindow), "delete_event", GTK_SIGNAL_FUNC (on_spectrumwindow_delete_event), NULL); return spectrumwindow; } baycomepp-0.10.orig/eppfm2/src/interface.h0100644000175100017510000000044406743566010016505 0ustar abaaba/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ GtkWidget* create_ioconfiglinux (void); GtkWidget* create_mainwindow (void); GtkWidget* create_aboutdialog (void); GtkWidget* create_dtmfwindow (void); GtkWidget* create_scopewindow (void); GtkWidget* create_spectrumwindow (void); baycomepp-0.10.orig/eppfm2/src/callbacks.h0100644000175100017510000001326206743566010016466 0ustar abaaba#include void on_file_activate (GtkMenuItem *menuitem, gpointer user_data); void on_dtmf_activate (GtkMenuItem *menuitem, gpointer user_data); void on_oscilloscope_activate (GtkMenuItem *menuitem, gpointer user_data); void on_spectrum_activate (GtkMenuItem *menuitem, gpointer user_data); void on_quit_activate (GtkMenuItem *menuitem, gpointer user_data); void on_about_activate (GtkMenuItem *menuitem, gpointer user_data); gboolean on_dtmfwindow_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean on_dtmfwindow_key_release_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); void on_dtmf_key (GtkButton *button, gpointer user_data); GtkWidget* eppfm_scope_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2); GtkWidget* eppfm_spectrum_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2); void on_configok_clicked (GtkButton *button, gpointer user_data); void on_configquit_clicked (GtkButton *button, gpointer user_data); gboolean on_mainwindow_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_mainwindow_destroy (GtkObject *object, gpointer user_data); void on_mainptt_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_maindtmf_clicked (GtkButton *button, gpointer user_data); void on_mainscope_clicked (GtkButton *button, gpointer user_data); void on_mainspectrum_clicked (GtkButton *button, gpointer user_data); gboolean on_mainwindow_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean on_mainwindow_key_release_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean on_aboutdialog_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); gboolean on_dtmfwindow_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); gboolean on_scopewindow_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); gboolean on_spectrumwindow_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_aboutok_clicked (GtkButton *button, gpointer user_data); GtkWidget* scope_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2); GtkWidget* spectrum_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2); void on_dtmfclear_clicked (GtkButton *button, gpointer user_data); gboolean on_mainwindow_key_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean on_dtmfwindow_key_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean on_mainwindow_key_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); void on_button1750_clicked (GtkButton *button, gpointer user_data); void on_buttonsquelch_clicked (GtkButton *button, gpointer user_data); void on_button1750_pressed (GtkButton *button, gpointer user_data); void on_button1750_released (GtkButton *button, gpointer user_data); baycomepp-0.10.orig/eppfm2/src/widgets.c0100644000175100017510000004442606743555634016230 0ustar abaaba/* * Custom Widgets * Copyright (C) 1999 Thomas Sailer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "widgets.h" #include #include #define SCOPEMAXPOINTS 512 #define PRIO G_PRIORITY_LOW struct _ScopePoint { guint16 dx; guint16 y; }; static void scope_class_init(ScopeClass *klass); static void scope_init(Scope *trace); static void scope_finalize(GtkObject *object); static gint scope_expose(GtkWidget *widget, GdkEventExpose *event); static void scope_size_request(GtkWidget *widget, GtkRequisition *requisition); static gint scope_idle_callback(gpointer data); static GtkWidgetClass *scope_parent_class = NULL; static ScopeClass *scope_class = NULL; guint scope_get_type(void) { static guint trace_type = 0; if (!trace_type) { static const GtkTypeInfo trace_info = { "Scope", sizeof(Scope), sizeof(ScopeClass), (GtkClassInitFunc) scope_class_init, (GtkObjectInitFunc) scope_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; trace_type = gtk_type_unique(gtk_widget_get_type(), &trace_info); } return trace_type; } static void scope_class_init(ScopeClass *klass) { GtkObjectClass *object_class; GtkWidgetClass *widget_class; object_class = (GtkObjectClass*)klass; widget_class = (GtkWidgetClass*)klass; scope_parent_class = gtk_type_class(gtk_widget_get_type()); scope_class = klass; object_class->finalize = scope_finalize; widget_class->size_request = scope_size_request; widget_class->expose_event = scope_expose; } static void scope_init(Scope *trace) { GTK_WIDGET_SET_FLAGS(trace, GTK_NO_WINDOW); trace->idlefunc = 0; /* initialize the colors */ trace->zerolinecol.red = 65535; trace->zerolinecol.green = 13107; trace->zerolinecol.blue = 0; trace->samplingcol.red = 13763; trace->samplingcol.green = 42598; trace->samplingcol.blue = 5243; trace->zeroline_gc = trace->sampling_gc = NULL; /* initialize the trace history */ trace->ptnum = trace->ptptr = 0; trace->pt = NULL; } static void scope_size_request(GtkWidget *widget, GtkRequisition *requisition) { Scope *trace; g_return_if_fail(widget != NULL); g_return_if_fail(IS_SCOPE(widget)); g_return_if_fail(requisition != NULL); trace = SCOPE(widget); requisition->width = MIN(trace->ptnum * 4, 512); requisition->height = 256; } GtkWidget* scope_new(char *name, char *str1, char *str2, gint int1, gint int2) { Scope *trace; trace = gtk_type_new(scope_get_type()); trace->ptnum = CLAMP(int1, 2, SCOPEMAXPOINTS);; trace->pt = g_malloc0(trace->ptnum * sizeof(struct _ScopePoint)); return GTK_WIDGET(trace); } static void scope_finalize(GtkObject *object) { Scope *trace; g_return_if_fail(object != NULL); g_return_if_fail(IS_SCOPE(object)); trace = SCOPE(object); if (trace->idlefunc) gtk_idle_remove(trace->idlefunc); if (trace->zeroline_gc) gtk_gc_release(trace->zeroline_gc); if (trace->sampling_gc) gtk_gc_release(trace->sampling_gc); if (trace->pt) g_free(trace->pt); (*GTK_OBJECT_CLASS(scope_parent_class)->finalize)(object); } static gint scope_expose(GtkWidget *widget, GdkEventExpose *event) { Scope *trace; g_return_val_if_fail(widget != NULL, FALSE); g_return_val_if_fail(IS_SCOPE(widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (GTK_WIDGET_DRAWABLE(widget)) { trace = SCOPE(widget); if (!trace->idlefunc) trace->idlefunc = gtk_idle_add_priority(PRIO, scope_idle_callback, trace); } return FALSE; } static void scope_draw(Scope *trace) { GdkGCValues gc_values; guint totx, idx, i, si; guint32 mulx, muly, zeroy, x; GdkPoint p[SCOPEMAXPOINTS+1]; GdkSegment s[SCOPEMAXPOINTS]; /* init gc's if necessary */ if (!trace->zeroline_gc) { if (!gdk_color_alloc(trace->widget.style->colormap, &trace->zerolinecol)) g_warning("unable to allocate color: ( %d %d %d )", trace->zerolinecol.red, trace->zerolinecol.green, trace->zerolinecol.blue); gc_values.foreground = trace->zerolinecol; trace->zeroline_gc = gtk_gc_get(trace->widget.style->depth, trace->widget.style->colormap, &gc_values, GDK_GC_FOREGROUND); } if (!trace->sampling_gc) { if (!gdk_color_alloc(trace->widget.style->colormap, &trace->samplingcol)) g_warning("unable to allocate color: ( %d %d %d )", trace->samplingcol.red, trace->samplingcol.green, trace->samplingcol.blue); gc_values.foreground = trace->samplingcol; trace->sampling_gc = gtk_gc_get(trace->widget.style->depth, trace->widget.style->colormap, &gc_values, GDK_GC_FOREGROUND); } /* first determine the total x size and calculate multiplication factors */ for (totx = 0, idx = trace->ptptr, i = 1; i < trace->ptnum; i++) { idx++; if (idx >= trace->ptnum) idx = 0; totx += trace->pt[idx].dx & 0x7fff; } mulx = (((guint32)trace->widget.allocation.width) << 16) / MAX(totx, 1); muly = trace->widget.allocation.height; zeroy = (0x8000 * muly) >> 16; /* prepare sampling ticks and lines */ for (si = x = i = 0, idx = trace->ptptr; i < trace->ptnum; i++) { p[i].x = trace->widget.allocation.x + ((x * mulx) >> 16); p[i].y = trace->widget.allocation.y + ((trace->pt[idx].y * muly) >> 16); if (trace->pt[idx].dx & 0x8000) { s[si].x1 = s[si].x2 = p[i].x; s[si].y1 = trace->widget.allocation.y + zeroy - 4; s[si].y2 = trace->widget.allocation.y + zeroy + 4; si++; } idx++; if (idx >= trace->ptnum) idx = 0; x += trace->pt[idx].dx & 0x7fff; } /* now draw everything */ gdk_draw_rectangle(trace->widget.window, trace->widget.style->base_gc[trace->widget.state], TRUE, trace->widget.allocation.x, trace->widget.allocation.y, trace->widget.allocation.x+trace->widget.allocation.width, trace->widget.allocation.y+trace->widget.allocation.height); gdk_draw_line(trace->widget.window, trace->zeroline_gc, trace->widget.allocation.x, trace->widget.allocation.y+zeroy, trace->widget.allocation.x+trace->widget.allocation.width-1, trace->widget.allocation.y+zeroy); gdk_draw_segments(trace->widget.window, trace->sampling_gc, s, si); gdk_draw_lines(trace->widget.window, trace->widget.style->fg_gc[trace->widget.state], p, trace->ptnum); } static gint scope_idle_callback(gpointer data) { g_return_val_if_fail(data != NULL, FALSE); g_return_val_if_fail(IS_SCOPE(data), FALSE); SCOPE(data)->idlefunc = 0; if (!GTK_WIDGET_DRAWABLE(GTK_WIDGET(data))) return FALSE; if (!SCOPE(data)->pt || !SCOPE(data)->ptnum) return FALSE; scope_draw(SCOPE(data)); return FALSE; /* don't call this callback again */ } void scope_addvalue(Scope *trace, guint16 deltax, gint16 y, guint flags) { g_return_if_fail(trace != NULL); g_return_if_fail(IS_SCOPE(trace)); trace->pt[trace->ptptr].y = 32767-y; trace->pt[trace->ptptr].dx = deltax & 0x7fff; if (flags) trace->pt[trace->ptptr].dx |= 0x8000; trace->ptptr++; if (trace->ptptr >= trace->ptnum) trace->ptptr = 0; if (GTK_WIDGET_DRAWABLE(GTK_WIDGET(trace))) { if (!trace->idlefunc) trace->idlefunc = gtk_idle_add_priority(PRIO, scope_idle_callback, trace); } } void scope_addvalues(Scope *trace, guint num, guint16 *deltax, gint16 *y) { guint i; g_return_if_fail(trace != NULL); g_return_if_fail(IS_SCOPE(trace)); g_return_if_fail(y != NULL); for (i = 0; i < num; i++) { trace->pt[trace->ptptr].y = 32767-y[i]; trace->pt[trace->ptptr].dx = deltax ? (deltax[i] & 0x7fff) : 1; trace->ptptr++; if (trace->ptptr >= trace->ptnum) trace->ptptr = 0; } if (GTK_WIDGET_DRAWABLE(GTK_WIDGET(trace))) { if (!trace->idlefunc) trace->idlefunc = gtk_idle_add_priority(PRIO, scope_idle_callback, trace); } } /* ---------------------------------------------------------------------- */ /* * This fft routine is from ~gabriel/src/filters/fft/fft.c; * I am unsure of the original source. The file contains no * copyright notice or description. * The declaration is changed to the prototype form but the * function body is unchanged. (J. T. Buck) */ #define SWAP(a, b) tempr=(a); (a)=(b); (b)=tempr /* * Replace data by its discrete Fourier transform, if isign is * input as 1, or by its inverse discrete Fourier transform, if * "isign" is input as -1. "data'"is a complex array of length "nn", * input as a real array data[0..2*nn-1]. "nn" MUST be an integer * power of 2 (this is not checked for!?) */ static void fft_rif(float *data, int nn, int isign) { int n; int mmax; int m, j, istep, i; float wtemp, wr, wpr, wpi, wi, theta; float tempr, tempi; data--; n = nn << 1; j = 1; for (i = 1; i < n; i += 2) { if(j > i) { SWAP(data[j], data[i]); SWAP(data[j+1], data[i+1]); } m= n >> 1; while (m >= 2 && j >m) { j -= m; m >>= 1; } j += m; } mmax = 2; while (n > mmax) { istep = 2*mmax; theta = -6.28318530717959/(isign*mmax); wtemp = sin(0.5*theta); wpr = -2.0*wtemp*wtemp; wpi = sin(theta); wr = 1.0; wi = 0.0; for (m = 1; m < mmax; m += 2) { for (i = m; i < n; i += istep) { j = i + mmax; tempr = wr*data[j] - wi*data[j+1]; tempi = wr*data[j+1] + wi*data[j]; data[j] = data[i] - tempr; data[j+1] = data[i+1] - tempi; data[i] += tempr; data[i+1] += tempi; } wr = (wtemp=wr)*wpr - wi*wpi+wr; wi = wi*wpr + wtemp*wpi + wi; } mmax = istep; } } #undef SWAP static inline float hamming(float x) { return 0.54-0.46*cos(2*M_PI*x); } /* ---------------------------------------------------------------------- */ #define SPECTRUMMAXPOINTS 1024 static void spectrum_class_init(SpectrumClass *klass); static void spectrum_init(Spectrum *trace); static void spectrum_finalize(GtkObject *object); static gint spectrum_expose(GtkWidget *widget, GdkEventExpose *event); static void spectrum_size_request(GtkWidget *widget, GtkRequisition *requisition); static gint spectrum_idle_callback(gpointer data); static GtkWidgetClass *spectrum_parent_class = NULL; static SpectrumClass *spectrum_class = NULL; guint spectrum_get_type(void) { static guint trace_type = 0; if (!trace_type) { static const GtkTypeInfo trace_info = { "Spectrum", sizeof(Spectrum), sizeof(SpectrumClass), (GtkClassInitFunc) spectrum_class_init, (GtkObjectInitFunc) spectrum_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; trace_type = gtk_type_unique(gtk_widget_get_type(), &trace_info); } return trace_type; } static void spectrum_class_init(SpectrumClass *klass) { GtkObjectClass *object_class; GtkWidgetClass *widget_class; object_class = (GtkObjectClass*)klass; widget_class = (GtkWidgetClass*)klass; spectrum_parent_class = gtk_type_class(gtk_widget_get_type()); spectrum_class = klass; object_class->finalize = spectrum_finalize; widget_class->size_request = spectrum_size_request; widget_class->expose_event = spectrum_expose; } static void spectrum_init(Spectrum *trace) { GTK_WIDGET_SET_FLAGS(trace, GTK_NO_WINDOW); trace->idlefunc = 0; /* initialize the colors */ trace->gridcol.red = 65535; trace->gridcol.green = 13107; trace->gridcol.blue = 0; trace->samplingcol.red = 13763; trace->samplingcol.green = 42598; trace->samplingcol.blue = 5243; trace->grid_gc = trace->sampling_gc = NULL; /* initialize the trace history */ trace->ptnum = trace->ptptr = 0; trace->pt = NULL; } static void spectrum_size_request(GtkWidget *widget, GtkRequisition *requisition) { Spectrum *trace; g_return_if_fail(widget != NULL); g_return_if_fail(IS_SPECTRUM(widget)); g_return_if_fail(requisition != NULL); trace = SPECTRUM(widget); requisition->width = MIN(trace->ptnum * 4, 512); requisition->height = 256; } GtkWidget* spectrum_new(char *name, char *str1, char *str2, gint int1, gint int2) { guint i, j; Spectrum *trace; trace = gtk_type_new(spectrum_get_type()); i = CLAMP(int1, 4, SPECTRUMMAXPOINTS); j = 0; while (i > 1) { i >>= 1; j++; } trace->ptnum = 1 << j; trace->pt = g_malloc0(trace->ptnum * sizeof(gint16)); return GTK_WIDGET(trace); } static void spectrum_finalize(GtkObject *object) { Spectrum *trace; g_return_if_fail(object != NULL); g_return_if_fail(IS_SPECTRUM(object)); trace = SPECTRUM(object); if (trace->idlefunc) gtk_idle_remove(trace->idlefunc); if (trace->grid_gc) gtk_gc_release(trace->grid_gc); if (trace->sampling_gc) gtk_gc_release(trace->sampling_gc); if (trace->pt) g_free(trace->pt); (*GTK_OBJECT_CLASS(spectrum_parent_class)->finalize)(object); } static gint spectrum_expose(GtkWidget *widget, GdkEventExpose *event) { Spectrum *trace; g_return_val_if_fail(widget != NULL, FALSE); g_return_val_if_fail(IS_SPECTRUM(widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (GTK_WIDGET_DRAWABLE(widget)) { trace = SPECTRUM(widget); if (!trace->idlefunc) trace->idlefunc = gtk_idle_add_priority(PRIO, spectrum_idle_callback, trace); } return FALSE; } static void spectrum_draw(Spectrum *trace) { GdkGCValues gc_values; guint idx, i; guint32 mulx; gint y; GdkPoint p[SPECTRUMMAXPOINTS/2+1]; float f[2*SPECTRUMMAXPOINTS]; float ftmp1, ftmp2, ftmp3; /* init gc's if necessary */ if (!trace->grid_gc) { if (!gdk_color_alloc(trace->widget.style->colormap, &trace->gridcol)) g_warning("unable to allocate color: ( %d %d %d )", trace->gridcol.red, trace->gridcol.green, trace->gridcol.blue); gc_values.foreground = trace->gridcol; trace->grid_gc = gtk_gc_get(trace->widget.style->depth, trace->widget.style->colormap, &gc_values, GDK_GC_FOREGROUND); } if (!trace->sampling_gc) { if (!gdk_color_alloc(trace->widget.style->colormap, &trace->samplingcol)) g_warning("unable to allocate color: ( %d %d %d )", trace->samplingcol.red, trace->samplingcol.green, trace->samplingcol.blue); gc_values.foreground = trace->samplingcol; trace->sampling_gc = gtk_gc_get(trace->widget.style->depth, trace->widget.style->colormap, &gc_values, GDK_GC_FOREGROUND); } /* first determine the total x size and calculate multiplication factors */ ftmp1 = 1.0 / (float)trace->ptnum; for (idx = trace->ptptr, i = 0; i < trace->ptnum; i++) { f[2*i] = trace->pt[idx] * hamming((float)i * ftmp1); f[2*i+1] = 0; idx++; if (idx >= trace->ptnum) idx = 0; } fft_rif(f, trace->ptnum, 1); mulx = (((guint32)trace->widget.allocation.width) << 17) / trace->ptnum; /* prepare sampling ticks and lines */ ftmp2 = trace->widget.allocation.height * 0.0723824136504; /* 1/ln(10^6) */ ftmp3 = 21.4875015613 + 4.6; for (i = 0; i < trace->ptnum / 2; i++) { ftmp1 = f[2*i] * f[2*i] + f[2*i+1] * f[2*i+1]; if (ftmp1 < 2168) p[i].y = trace->widget.allocation.y + trace->widget.allocation.height - 1; else { y = ftmp2 * (ftmp3 - log(ftmp1)); y = CLAMP(y, 0, trace->widget.allocation.height-1); p[i].y = trace->widget.allocation.y + y; } p[i].x = trace->widget.allocation.x + ((i * mulx) >> 16); } /* now draw everything */ gdk_draw_rectangle(trace->widget.window, trace->widget.style->base_gc[trace->widget.state], TRUE, trace->widget.allocation.x, trace->widget.allocation.y, trace->widget.allocation.x+trace->widget.allocation.width, trace->widget.allocation.y+trace->widget.allocation.height); for (i = 0; i < 3; i++) gdk_draw_line(trace->widget.window, trace->grid_gc, trace->widget.allocation.x, trace->widget.allocation.y+i*(trace->widget.allocation.height/3), trace->widget.allocation.x+trace->widget.allocation.width-1, trace->widget.allocation.y+i*(trace->widget.allocation.height/3)); gdk_draw_line(trace->widget.window, trace->grid_gc, trace->widget.allocation.x, trace->widget.allocation.y+trace->widget.allocation.height-1, trace->widget.allocation.x+trace->widget.allocation.width-1, trace->widget.allocation.y+trace->widget.allocation.height-1); gdk_draw_lines(trace->widget.window, trace->widget.style->fg_gc[trace->widget.state], p, trace->ptnum / 2); } static gint spectrum_idle_callback(gpointer data) { g_return_val_if_fail(data != NULL, FALSE); g_return_val_if_fail(IS_SPECTRUM(data), FALSE); SPECTRUM(data)->idlefunc = 0; if (!GTK_WIDGET_DRAWABLE(GTK_WIDGET(data))) return FALSE; if (!SPECTRUM(data)->pt || !SPECTRUM(data)->ptnum) return FALSE; spectrum_draw(SPECTRUM(data)); return FALSE; /* don't call this callback again */ } void spectrum_addvalue(Spectrum *trace, gint16 y) { g_return_if_fail(trace != NULL); g_return_if_fail(IS_SPECTRUM(trace)); trace->pt[trace->ptptr] = y; trace->ptptr++; if (trace->ptptr >= trace->ptnum) trace->ptptr = 0; if (GTK_WIDGET_DRAWABLE(GTK_WIDGET(trace))) { if (!trace->idlefunc) trace->idlefunc = gtk_idle_add_priority(PRIO, spectrum_idle_callback, trace); } } void spectrum_addvalues(Spectrum *trace, guint num, gint16 *y) { guint i; g_return_if_fail(trace != NULL); g_return_if_fail(IS_SPECTRUM(trace)); g_return_if_fail(y != NULL); for (i = 0; i < num; i++) { trace->pt[trace->ptptr] = y[i]; trace->ptptr++; if (trace->ptptr >= trace->ptnum) trace->ptptr = 0; } if (GTK_WIDGET_DRAWABLE(GTK_WIDGET(trace))) { if (!trace->idlefunc) trace->idlefunc = gtk_idle_add_priority(PRIO, spectrum_idle_callback, trace); } } baycomepp-0.10.orig/eppfm2/src/widgets.h0100644000175100017510000000520606743365640016222 0ustar abaaba/* * Custom Widgets * Copyright (C) 1999 Thomas Sailer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __WIDGETS_H__ #define __WIDGETS_H__ #include #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define SCOPE(obj) GTK_CHECK_CAST(obj, scope_get_type(), Scope) #define SCOPE_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, scope_get_type(), ScopeClass) #define IS_SCOPE(obj) GTK_CHECK_TYPE(obj, scope_get_type()) typedef struct _Scope Scope; typedef struct _ScopeClass ScopeClass; struct _Scope { GtkWidget widget; guint idlefunc; GdkGC *zeroline_gc; GdkGC *sampling_gc; GdkColor zerolinecol; GdkColor samplingcol; struct _ScopePoint *pt; guint ptnum, ptptr; }; struct _ScopeClass { GtkWidgetClass parent_class; }; guint scope_get_type(void); GtkWidget* scope_new(gchar *widget_name, gchar *str1, gchar *str2, gint int1, gint int2); void scope_addvalue(Scope *trace, guint16 deltax, gint16 y, guint flags); void scope_addvalues(Scope *trace, guint num, guint16 *deltax, gint16 *y); #define SPECTRUM(obj) GTK_CHECK_CAST(obj, spectrum_get_type(), Spectrum) #define SPECTRUM_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, spectrum_get_type(), SpectrumClass) #define IS_SPECTRUM(obj) GTK_CHECK_TYPE(obj, spectrum_get_type()) typedef struct _Spectrum Spectrum; typedef struct _SpectrumClass SpectrumClass; struct _Spectrum { GtkWidget widget; guint idlefunc; GdkGC *grid_gc; GdkGC *sampling_gc; GdkColor gridcol; GdkColor samplingcol; gint16 *pt; guint ptnum, ptptr; }; struct _SpectrumClass { GtkWidgetClass parent_class; }; guint spectrum_get_type(void); GtkWidget* spectrum_new(gchar *widget_name, gchar *str1, gchar *str2, gint int1, gint int2); void spectrum_addvalue(Spectrum *trace, gint16 y); void spectrum_addvalues(Spectrum *trace, guint num, gint16 *y); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __WIDGETS_H__ */ baycomepp-0.10.orig/eppfm2/src/gentbl.c0100644000175100017510000000443606743367200016020 0ustar abaaba/*****************************************************************************/ /* * gentbl.c -- Soundmodem table generator. * * Copyright (C) 1996-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ #include #include #include /* -------------------------------------------------------------------- */ static const char *progname; /* -------------------------------------------------------------------- */ static void gen_costab(unsigned size, const char *fn) { FILE *f; int i; if (!(f = fopen(fn, "w"))) { fprintf(stderr, "cannot open file costab.c\n"); exit(1); } fprintf(f, "#include \n#include \"eppfm.h\"\n\n/*\n * cosine table\n */\n\n" "const int16_t costab[%d] = {", size); for (i = 0; i < size; i++) { if (!(i & 7)) fprintf(f, "\n\t"); fprintf(f, "%6d", (int)(32767.0*cos(i*(2.0*M_PI)/size))); if (i != (size-1)) fprintf(f, ", "); } fprintf(f, "\n};\n\n"); } /* -------------------------------------------------------------------- */ int main(int argc, char *argv[]) { progname = argv[0]; if (argc < 2) { fprintf(stderr, "usage: gentbl \n"); exit(1); } gen_costab(512, argv[1]); exit(0); } /* -------------------------------------------------------------------- */ baycomepp-0.10.orig/eppfm2/src/eppfm.h0100644000175100017510000000564406743564056015673 0ustar abaaba/*****************************************************************************/ /* * eppfm.h -- Function prototypes for "virtual transceiver". * * Copyright (C) 1999 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * Please note that the GPL allows you to use the driver, NOT the radio. * In order to use the radio, you need a license from the communications * authority of your country. * */ /*****************************************************************************/ #ifndef _EPPFM_H #define _EPPFM_H /* ---------------------------------------------------------------------- */ #include "fpga.h" /* ---------------------------------------------------------------------- */ extern const int16_t costab[512]; #define COS(x) costab[((x)>>7)&0x1ff] #define SIN(x) COS((x)+0xc000) /* ---------------------------------------------------------------------- */ extern struct adapter_config cfg; #define SAMPLINGRATE 16000 #define SNDLATENCY 4000 /* approx 1/4 seconds */ #define PHASEFRAC 12 #define PHASEMASK ((1< #include #include /* ---------------------------------------------------------------------- */ #define BUFSIZE 8192 /* must be significantly bigger than SNDLATENCY! */ #define OVERLAP 32 /* ---------------------------------------------------------------------- */ struct { enum { st_mdmerr, st_off, st_play, st_rec } state; /* gtk timeout handle */ gint tmotag; /* sampling rate conversion state */ int16_t sample[OVERLAP]; /* control register */ unsigned char ctrlreg; /* led blink counter */ unsigned ledcnt; /* low level driver specific data */ LPDIRECTSOUND dsplay; LPDIRECTSOUNDCAPTURE dsrec; LPDIRECTSOUNDBUFFER playbuf; LPDIRECTSOUNDCAPTUREBUFFER recbuf; HANDLE hinst; HWND hwnd; DWORD playbufsz, recbufsz, playptr, recptr; } state = { st_mdmerr, }; /* ---------------------------------------------------------------------- */ static BOOL CALLBACK DSEnumProc(LPGUID guid, LPCSTR lpszDesc, LPCSTR lpszDrvName, LPVOID lpcontext) { lprintf(1, "has %sGUID, desc %s drvname %s\n", guid ? "" : "no ", lpszDesc, lpszDrvName); return TRUE; } #if 0 static LRESULT CALLBACK MyWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) { switch(umsg) { /* Add cases such as WM_CREATE, WM_COMMAND, WM_PAINT if you don't want to pass these messages along for default processing. */ case WM_CLOSE: DestroyWindow(hwnd); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, umsg, wParam, lParam); } #endif /* ---------------------------------------------------------------------- */ static gint periodic_play(gpointer data) { union { unsigned char u[BUFSIZE]; signed char s[BUFSIZE]; } buf; int16_t sbuf[BUFSIZE]; HRESULT res; DWORD lockbytes1, lockbytes2, delay; int16_t *sptr1; int16_t *sptr2; int icnt, cnt; /* epp->dsp direction */ /* get FIFO count */ buf.u[0] = state.ctrlreg | 1; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; icnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; icnt &= 0x7fff; if (icnt > 0) { if (icnt > BUFSIZE/2) icnt = BUFSIZE/2; memcpy(buf.s, state.sample, OVERLAP); if (parport_epp_read_data(buf.s+OVERLAP, icnt) != icnt) goto err; memcpy(state.sample, buf.s+icnt, OVERLAP); cnt = audio_convertoutput(icnt, buf.s+OVERLAP, sbuf); if (FAILED(res = IDirectSoundBuffer_Lock(state.playbuf, state.playptr, cnt*2, (LPVOID)&sptr1, &lockbytes1, (LPVOID)&sptr2, &lockbytes2, 0))) { lprintf(0, "IDirectSoundBuffer_Lock error %lu\n", res); goto err; } memcpy(sptr1, sbuf, lockbytes1); if (lockbytes1 < 2*cnt) memcpy(sptr2, sbuf + lockbytes1/2, 2*cnt - lockbytes1); if (FAILED(res = IDirectSoundBuffer_Unlock(state.playbuf, sptr1, lockbytes1, sptr2, lockbytes2))) { lprintf(0, "IDirectSoundBuffer_Unlock error %lu\n", res); goto err; } state.playptr = (state.playptr + 2*cnt) % state.playbufsz; /* get output delay */ if (FAILED(res = IDirectSoundBuffer_GetCurrentPosition(state.playbuf, &delay, NULL))) { lprintf(0, "IDirectSoundBuffer_GetCurrentPosition error %lu\n", res); goto err; } delay = (state.playbufsz + state.playptr - delay) % state.playbufsz; delay >>= 1; /* adjust speed */ if (audio_adjustoutput(cnt, icnt, delay)) goto err; /* play games with the LEDS */ state.ledcnt += icnt; if (state.ledcnt >= 4000) { state.ledcnt %= 4000; state.ctrlreg += 0x40; } /* DCD led */ if (audio_getsquelch()) state.ctrlreg |= 0x10; else state.ctrlreg &= ~0x10; } return TRUE; err: lprintf(0, "EPP timeout\n"); IDirectSoundBuffer_Stop(state.playbuf); IDirectSoundBuffer_Release(state.playbuf); IDirectSound_Release(state.dsplay); #if 0 DestroyWindow(state.hwnd); UnregisterClass("MyClass", state.hinst); #endif state.hwnd = NULL; reset_modem(); state.state = st_mdmerr; return FALSE; } static gint periodic_rec(gpointer data) { union { unsigned char u[BUFSIZE]; signed char s[BUFSIZE]; } buf; int16_t sbuf[BUFSIZE]; HRESULT res; DWORD lockbytes1, lockbytes2, delay; int16_t *sptr1; int16_t *sptr2; int ocnt, cnt, ocnts, omax; /* dsp->epp direction */ /* read sound */ memcpy(sbuf, state.sample, OVERLAP*2); /* read sound */ if (FAILED(res = IDirectSoundCaptureBuffer_GetCurrentPosition(state.recbuf, &delay, NULL))) { lprintf(0, "IDirectSoundCaptureBuffer_GetCurrentPosition error %lu\n", res); goto err; } ocnts = (state.recbufsz + delay - state.recptr) % state.recbufsz; ocnts &= ~1; if (ocnts > 0) { if (FAILED(res = IDirectSoundCaptureBuffer_Lock(state.recbuf, state.recptr, ocnts, (LPVOID)&sptr1, &lockbytes1, (LPVOID)&sptr2, &lockbytes2, 0))) { lprintf(0, "IDirectSoundCaptureBuffer_Lock error %lu\n", res); goto err; } memcpy(sbuf+OVERLAP, sptr1, lockbytes1); if (lockbytes1 < ocnts) memcpy(sbuf+OVERLAP+lockbytes1/2, sptr2, ocnts - lockbytes1); if (FAILED(res = IDirectSoundCaptureBuffer_Unlock(state.recbuf, sptr1, lockbytes1, sptr2, lockbytes2))) { lprintf(0, "IDirectSoundCaptureBuffer_Unlock error %lu\n", res); goto err; } state.recptr = (state.recptr + ocnts) % state.recbufsz; } ocnts >>= 1; memcpy(state.sample, sbuf+ocnts, OVERLAP*2); /* get FIFO count */ buf.u[0] = state.ctrlreg | 2; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; ocnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; ocnt &= 0x7fff; omax = 16384 - ocnt; cnt = 0; if (ocnts > 0) { cnt = audio_convertinput(ocnts, sbuf+OVERLAP, buf.s); if (cnt > omax) { lprintf(0, "epp adapter output overrun (%d, %d)\n", cnt, omax); goto err; } if (parport_epp_write_data(buf.s, cnt) != cnt) goto err; /* reget the FIFO count */ buf.u[0] = state.ctrlreg | 2; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; if (parport_epp_read_addr(buf.u, 2) != 2) goto err; ocnt = buf.u[0] | (((unsigned int)buf.u[1]) << 8); buf.u[0] = state.ctrlreg; if (parport_epp_write_addr(buf.u, 1) != 1) goto err; ocnt &= 0x7fff; } /* adjust speed */ if (audio_adjustinput(cnt, ocnts, ocnt)) goto err; return TRUE; err: lprintf(0, "EPP timeout\n"); IDirectSoundCaptureBuffer_Stop(state.recbuf); IDirectSoundCaptureBuffer_Release(state.recbuf); IDirectSoundCapture_Release(state.dsrec); #if 0 DestroyWindow(state.hwnd); UnregisterClass("MyClass", state.hinst); #endif state.hwnd = NULL; reset_modem(); state.state = st_mdmerr; return FALSE; } /* ---------------------------------------------------------------------- */ static void playstop(void) { unsigned char buf; if (state.state != st_play) return; gtk_timeout_remove(state.tmotag); IDirectSoundBuffer_Stop(state.playbuf); IDirectSoundBuffer_Release(state.playbuf); IDirectSound_Release(state.dsplay); #if 0 DestroyWindow(state.hwnd); UnregisterClass("MyClass", state.hinst); #endif state.hwnd = NULL; /* reset the EPP adapter */ buf = 7; if (parport_epp_write_addr(&buf, 1) != 1) { state.state = st_mdmerr; reset_modem(); } else state.state = st_off; } static void recstop(void) { unsigned char buf; if (state.state != st_rec) return; gtk_timeout_remove(state.tmotag); IDirectSoundCaptureBuffer_Stop(state.recbuf); IDirectSoundCaptureBuffer_Release(state.recbuf); IDirectSoundCapture_Release(state.dsrec); #if 0 DestroyWindow(state.hwnd); UnregisterClass("MyClass", state.hinst); #endif state.hwnd = NULL; /* reset the EPP adapter */ buf = 7; if (parport_epp_write_addr(&buf, 1) != 1) { state.state = st_mdmerr; reset_modem(); } else state.state = st_off; } static void playstart(void) { WNDCLASS wndclass; HRESULT res; WAVEFORMATEX waveformat; DSBUFFERDESC bdesc; unsigned char buf[2]; DWORD lockbytes; int16_t *sptr; unsigned srate; int i; if (state.state == st_play) playstop(); if (state.state == st_rec) recstop(); state.ctrlreg = 0; state.ledcnt = 0; memset(state.sample, 0, sizeof(state.sample)); /* start modem if mdmerr */ if (state.state == st_mdmerr) { cfg.bitrate = SAMPLINGRATE; if ((i = adapter_start_eppsamp(&cfg))) { lprintf(0, "Cannot initialize the modem\n"); return; } } state.state = st_off; state.dsplay = NULL; state.playbuf = NULL; state.playptr = 0; #if 0 wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = (WNDPROC)MyWndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hIcon = NULL; wndclass.hInstance = state.hinst; wndclass.hCursor = NULL; wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "MyClass"; if (!RegisterClass(&wndclass)) { lprintf(0, "RegisterClass error, %d\n", GetLastError()); goto errregcls; } state.hwnd = CreateWindowEx(WS_EX_APPWINDOW, "MyClass", "eppfpga", WS_DISABLED | WS_POPUP, 0, 0, 0, 0, NULL, NULL, state.hinst, NULL); if (!state.hwnd) { lprintf(0, "CreateWindowEx error, %d\n", GetLastError()); goto errwnd; } #else state.hwnd = GetDesktopWindow(); #endif if (FAILED(res = DirectSoundCreate(NULL, &state.dsplay, NULL))) { lprintf(0, "DirectSoundCreate error %lu\n", res); goto errdscreate; } if (FAILED(res = IDirectSound_SetCooperativeLevel(state.dsplay, state.hwnd, DSSCL_NORMAL))) { lprintf(0, "SetCooperativeLevel error %lu\n", res); goto errdsb; } memset(&waveformat, 0, sizeof(waveformat)); waveformat.wFormatTag = WAVE_FORMAT_PCM; waveformat.wBitsPerSample = 16; waveformat.nChannels = 1; waveformat.nSamplesPerSec = cfg.bitrate; waveformat.nBlockAlign = waveformat.nChannels * waveformat.wBitsPerSample / 8; waveformat.nAvgBytesPerSec = waveformat.nSamplesPerSec * waveformat.nBlockAlign; memset(&bdesc, 0, sizeof(bdesc)); bdesc.dwSize = sizeof(bdesc); bdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN; state.playbufsz = bdesc.dwBufferBytes = waveformat.nAvgBytesPerSec; bdesc.lpwfxFormat = &waveformat; if (FAILED(res = IDirectSound_CreateSoundBuffer(state.dsplay, &bdesc, &state.playbuf, NULL))) { lprintf(0, "CreateSoundBuffer error %lu\n", res); goto errdsb; } if (FAILED(res = IDirectSoundBuffer_GetFormat(state.playbuf, &waveformat, sizeof(waveformat), NULL))) { lprintf(0, "GetFormat error %lu\n", res); goto errsnd; } srate = waveformat.nSamplesPerSec; lprintf(2, "epp adapter sampling rate %u, soundcard sampling rate %u\n", cfg.bitrate, srate); if (abs(cfg.bitrate - srate) > cfg.bitrate / 2) { lprintf(0, "sampling rates (%u,%u) too different\n", cfg.bitrate, srate); goto errsnd; } audio_initoutput(cfg.bitrate, srate); lprintf(0, "Audio Output to Linux Soundcard\n"); /* reset the EPP adapter */ buf[0] = 7; buf[1] = state.ctrlreg; if (parport_epp_write_addr(buf, 2) != 2) goto errret; /* prefill to nominal queue size and start soundcard */ if (FAILED(res = IDirectSoundBuffer_Lock(state.playbuf, 0, 2*SNDLATENCY, (LPVOID)&sptr, &lockbytes, NULL, NULL, 0))) { lprintf(0, "IDirectSoundBuffer_Lock error %lu\n", res); goto errsnd; } memset(sptr, 0, 2*SNDLATENCY); if (FAILED(res = IDirectSoundBuffer_Unlock(state.playbuf, sptr, lockbytes, NULL, 0))) { lprintf(0, "IDirectSoundBuffer_Unlock error %lu\n", res); goto errsnd; } state.playptr = 2*SNDLATENCY; if (FAILED(res = IDirectSoundBuffer_Play(state.playbuf, 0, 0, DSBPLAY_LOOPING))) { lprintf(0, "IDirectSoundBuffer_Play error %lu\n", res); goto errsnd; } state.tmotag = gtk_timeout_add(100, periodic_play, NULL); state.state = st_play; return; errdsb: IDirectSound_Release(state.dsplay); errdscreate: #if 0 DestroyWindow(state.hwnd); errwnd: UnregisterClass("MyClass", state.hinst); #endif errregcls: buf[0] = 7; if (parport_epp_write_addr(buf, 1) != 1) { state.state = st_mdmerr; reset_modem(); } else state.state = st_off; return; errsnd: buf[0] = 7; if (parport_epp_write_addr(buf, 1) != 1) goto errret; state.state = st_off; goto errclose; errret: lprintf(0, "EPP timeout\n"); state.state = st_mdmerr; reset_modem(); errclose: IDirectSoundBuffer_Stop(state.playbuf); IDirectSoundBuffer_Release(state.playbuf); IDirectSound_Release(state.dsplay); #if 0 DestroyWindow(state.hwnd); UnregisterClass("MyClass", state.hinst); #endif state.hwnd = NULL; } static void recstart(void) { WNDCLASS wndclass; HRESULT res; WAVEFORMATEX waveformat; DSCBUFFERDESC cbdesc; unsigned char buf[SNDLATENCY]; unsigned srate; int i; if (state.state == st_play) playstop(); if (state.state == st_rec) recstop(); state.ctrlreg = 0x20; state.ledcnt = 0; memset(state.sample, 0, sizeof(state.sample)); /* start modem if mdmerr */ if (state.state == st_mdmerr) { cfg.bitrate = SAMPLINGRATE; if ((i = adapter_start_eppsamp(&cfg))) { lprintf(0, "Cannot initialize the modem\n"); return; } } state.state = st_off; state.dsrec = NULL; state.recbuf = NULL; state.recptr = 0; #if 0 wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = (WNDPROC)MyWndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hIcon = NULL; wndclass.hInstance = state.hinst; wndclass.hCursor = NULL; wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "MyClass"; if (!RegisterClass(&wndclass)) { lprintf(0, "RegisterClass error, %d\n", GetLastError()); goto errregcls; } state.hwnd = CreateWindowEx(WS_EX_APPWINDOW, "MyClass", "eppfpga", WS_DISABLED | WS_POPUP, 0, 0, 0, 0, NULL, NULL, state.hinst, NULL); if (!state.hwnd) { lprintf(0, "CreateWindowEx error, %d\n", GetLastError()); goto errwnd; } #else state.hwnd = GetDesktopWindow(); #endif if (FAILED(res = DirectSoundCaptureCreate(NULL, &state.dsrec, NULL))) { lprintf(0, "DirectSoundCaptureCreate error %lu\n", res); goto errdscreate; } memset(&waveformat, 0, sizeof(waveformat)); waveformat.wFormatTag = WAVE_FORMAT_PCM; waveformat.wBitsPerSample = 16; waveformat.nChannels = 1; waveformat.nSamplesPerSec = cfg.bitrate; waveformat.nBlockAlign = waveformat.nChannels * waveformat.wBitsPerSample / 8; waveformat.nAvgBytesPerSec = waveformat.nSamplesPerSec * waveformat.nBlockAlign; memset(&cbdesc, 0, sizeof(cbdesc)); cbdesc.dwSize = sizeof(cbdesc); cbdesc.dwFlags = /* DSCBCAPS_WAVEMAPPED */ 0; state.recbufsz = cbdesc.dwBufferBytes = waveformat.nAvgBytesPerSec; cbdesc.lpwfxFormat = &waveformat; if (FAILED(res = IDirectSoundCapture_CreateCaptureBuffer(state.dsrec, &cbdesc, &state.recbuf, NULL))) { lprintf(0, "CreateSoundCaptureBuffer error %lu\n", res); goto errdsb; } /* kludge */ srate = cfg.bitrate; if (FAILED(res = IDirectSoundCaptureBuffer_GetFormat(state.recbuf, &waveformat, sizeof(waveformat), NULL))) { lprintf(0, "GetFormat error %lu\n", res); goto errsnd; } srate = waveformat.nSamplesPerSec; lprintf(2, "epp adapter sampling rate %u, soundcard sampling rate %u\n", cfg.bitrate, srate); if (abs(cfg.bitrate - srate) > cfg.bitrate / 2) { lprintf(0, "sampling rates (%u,%u) too different\n", cfg.bitrate, srate); goto errsnd; } audio_initinput(cfg.bitrate, srate); lprintf(0, "Audio Input from Linux Soundcard\n"); /* reset the EPP adapter */ buf[0] = 7; buf[1] = state.ctrlreg; if (parport_epp_write_addr(buf, 2) != 2) goto errret; /* prefill EPP adapter and start soundcard */ memset(buf, 0, sizeof(buf)); if (parport_epp_write_data(buf, SNDLATENCY) != SNDLATENCY) goto errret; if (FAILED(res = IDirectSoundCaptureBuffer_Start(state.recbuf, DSCBSTART_LOOPING))) { lprintf(0, "IDirectSoundCaptureBuffer_Start error %lu\n", res); goto errsnd; } state.tmotag = gtk_timeout_add(100, periodic_rec, NULL); state.state = st_rec; return; errdsb: IDirectSoundCapture_Release(state.dsrec); errdscreate: #if 0 DestroyWindow(state.hwnd); errwnd: UnregisterClass("MyClass", state.hinst); errregcls: #endif buf[0] = 7; if (parport_epp_write_addr(buf, 1) != 1) { state.state = st_mdmerr; reset_modem(); } else state.state = st_off; return; errsnd: buf[0] = 7; if (parport_epp_write_addr(buf, 1) != 1) goto errret; state.state = st_off; goto errclose; errret: lprintf(0, "EPP timeout\n"); state.state = st_mdmerr; reset_modem(); errclose: IDirectSoundCaptureBuffer_Stop(state.recbuf); IDirectSoundCaptureBuffer_Release(state.recbuf); IDirectSoundCapture_Release(state.dsrec); #if 0 DestroyWindow(state.hwnd); UnregisterClass("MyClass", state.hinst); #endif state.hwnd = NULL; } /* ---------------------------------------------------------------------- */ void audio_ptt(int ptt) { if (ptt && state.state != st_rec) recstart(); else if (!ptt && state.state != st_play) playstart(); } int audio_drvinit(const char *config) { state.dsplay = NULL; state.dsrec = NULL; state.playbuf = NULL; state.recbuf = NULL; state.hwnd = NULL; state.hinst = GetModuleHandleA(0); state.playptr = 0; state.recptr = 0; lprintf(1, "DirectSound drivers\n"); DirectSoundEnumerateA(DSEnumProc, NULL); lprintf(1, "DirectSoundCapture drivers\n"); DirectSoundCaptureEnumerateA(DSEnumProc, NULL); return 0; } /* ---------------------------------------------------------------------- */ #endif /* HAVE_DIRECTX */ baycomepp-0.10.orig/eppfm2/src/coeff.m0100644000175100017510000000116706743653774015655 0ustar abaaba% fs=16000; overs=16; fg1=3500; fg2=4500; flen=16; %c=remez(overs*flen-1,[ 0 2*fg1/fs/overs 2*fg2/fs/overs 1 ], [ 1 1 0 0 ]); c=sinc((0.5-overs*flen/2:overs*flen/2-0.5)*(2*fg2/fs/overs)).*hamming(overs*flen)'; for t=1:overs, tt(t) = sum(abs(c(t:16:overs*flen))); end; c=c./max(tt); t1=fft(c); plot((0:overs*flen-1)*fs/flen,20*log10(abs(t1))); fid=fopen('filter.txt','w'); fprintf(fid,'static const int16_t rxfilter[%d][%d] = {\n',overs,flen); for t=1:overs, fprintf(fid,'\t{ '); for tt=0:flen-1, fprintf(fid, '%6d, ', round(c(tt*overs+t) * 65536)); end; fprintf(fid,'},\n'); end; fprintf(fid,'};'); fclose(fid); baycomepp-0.10.orig/flexdrv/0042755000175100017510000000000007511777225014077 5ustar abaababaycomepp-0.10.orig/flexdrv/Makefile.in0100644000175100017510000002220407511777225016137 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ EXTRA_DIST = bayeppflex.c bayeppflex.rc driver.c drv32.h flexdriv.def flexdrv.h resource.h INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir) -I$(top_srcdir)/misc -I$(top_srcdir)/main @WIN32_TRUE@noinst_LIBRARIES = @WIN32_TRUE@libflxdrv.a @WIN32_TRUE@libflxdrv_a_SOURCES = @WIN32_TRUE@driver.c bayeppflex.c @WIN32_TRUE@DLLNAME = @WIN32_TRUE@bayeppflex @WIN32_TRUE@DLLOBJ = @WIN32_TRUE@driver.o bayeppflex.o bayeppflex.res ../main/libinit.a ../main/libresident.a ../main/libresident2.a ../main/libmisc.a @WIN32_TRUE@DLLLDARGS = @WIN32_TRUE@DLLDEF = @WIN32_TRUE@--def $(srcdir)/flexdriv.def @WIN32_TRUE@noinst_SCRIPTS = @WIN32_TRUE@$(DLLNAME).dll mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libflxdrv_a_LIBADD = @WIN32_TRUE@libflxdrv_a_OBJECTS = driver.$(OBJEXT) bayeppflex.$(OBJEXT) SCRIPTS = $(noinst_SCRIPTS) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(libflxdrv_a_SOURCES) OBJECTS = $(libflxdrv_a_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps flexdrv/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 $< # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: libflxdrv.a: $(libflxdrv_a_OBJECTS) $(libflxdrv_a_DEPENDENCIES) -rm -f libflxdrv.a $(AR) cru libflxdrv.a $(libflxdrv_a_OBJECTS) $(libflxdrv_a_LIBADD) $(RANLIB) libflxdrv.a 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 = flexdrv 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-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 $(LIBRARIES) $(SCRIPTS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-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-tags mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \ mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-tags distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile 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 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 @WIN32_TRUE@bayeppflex.res: bayeppflex.rc resource.h @WIN32_TRUE@ $(WINDRES) $< -O coff -o $@ @WIN32_TRUE@$(DLLNAME).dll: $(DLLOBJ) @WIN32_TRUE@ $(CC) -mdll -mno-cygwin -Wl,--base-file,$(DLLNAME).base -o $(DLLNAME).dll $(DLLOBJ) $(DLLLDARGS) @WIN32_TRUE@ $(DLLTOOL) --as=$(AS) --dllname $(DLLNAME).dll $(DLLDEF) --base-file $(DLLNAME).base --output-exp $(DLLNAME).exp $(DLLOBJ) @WIN32_TRUE@ $(CC) -mdll -mno-cygwin -Wl,--base-file,$(DLLNAME).base,$(DLLNAME).exp -o $(DLLNAME).dll $(DLLOBJ) $(DLLLDARGS) @WIN32_TRUE@ $(DLLTOOL) --as=$(AS) --dllname $(DLLNAME).dll $(DLLDEF) --base-file $(DLLNAME).base --output-exp $(DLLNAME).exp $(DLLOBJ) @WIN32_TRUE@ $(CC) -mdll -mno-cygwin -Wl,$(DLLNAME).exp -o $(DLLNAME).dll $(DLLOBJ) $(DLLLDARGS) @WIN32_TRUE@ $(DLLTOOL) --as=$(AS) --dllname $(DLLNAME).dll $(DLLDEF) --output-lib lib$(DLLNAME).a $(DLLOBJ) # 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: baycomepp-0.10.orig/flexdrv/Makefile.am0100644000175100017510000000235307141051536016116 0ustar abaabaEXTRA_DIST = bayeppflex.c bayeppflex.rc driver.c drv32.h flexdriv.def flexdrv.h resource.h INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir) -I$(top_srcdir)/misc -I$(top_srcdir)/main if WIN32 noinst_LIBRARIES = libflxdrv.a libflxdrv_a_SOURCES = driver.c bayeppflex.c bayeppflex.res: bayeppflex.rc resource.h $(WINDRES) $< -O coff -o $@ DLLNAME = bayeppflex DLLOBJ = driver.o bayeppflex.o bayeppflex.res ../main/libinit.a ../main/libresident.a ../main/libresident2.a ../main/libmisc.a DLLLDARGS = DLLDEF = --def $(srcdir)/flexdriv.def noinst_SCRIPTS = $(DLLNAME).dll $(DLLNAME).dll: $(DLLOBJ) $(CC) -mdll -mno-cygwin -Wl,--base-file,$(DLLNAME).base -o $(DLLNAME).dll $(DLLOBJ) $(DLLLDARGS) $(DLLTOOL) --as=$(AS) --dllname $(DLLNAME).dll $(DLLDEF) --base-file $(DLLNAME).base --output-exp $(DLLNAME).exp $(DLLOBJ) $(CC) -mdll -mno-cygwin -Wl,--base-file,$(DLLNAME).base,$(DLLNAME).exp -o $(DLLNAME).dll $(DLLOBJ) $(DLLLDARGS) $(DLLTOOL) --as=$(AS) --dllname $(DLLNAME).dll $(DLLDEF) --base-file $(DLLNAME).base --output-exp $(DLLNAME).exp $(DLLOBJ) $(CC) -mdll -mno-cygwin -Wl,$(DLLNAME).exp -o $(DLLNAME).dll $(DLLOBJ) $(DLLLDARGS) $(DLLTOOL) --as=$(AS) --dllname $(DLLNAME).dll $(DLLDEF) --output-lib lib$(DLLNAME).a $(DLLOBJ) endif baycomepp-0.10.orig/flexdrv/bayeppflex.c0100644000175100017510000013670407245777224016413 0ustar abaaba/*****************************************************************************/ /* * bayeppflex.c -- FlexNet driver for Baycom EPPFLEX modem. * * Copyright (C) 1999-2001 * Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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. * * * History: * 0.1 23.06.1999 Created * 0.2 07.01.2000 Expanded to usbdevfs capabilities * */ /*****************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "flexdrv.h" #include "resource.h" #include "fpga.h" /* --------------------------------------------------------------------- */ #define DRIVER_NAME "Baycom EPPFLEX" #define DRIVER_VERSION "0.2" #define RXBUFFER_SIZE ((MAXFLEN*6U/5U)+8U) #define TXBUFFER_SIZE 8192U /* must be a power of 2 and >= MAXFLEN*6/5+8 */ #define MODE_EPP 0 #define MODE_ECP 1 #define MODE_EPPAFSK 2 #define MODE_EPPCONV 3 /* conventional modem */ #define NRBIOSPORTS 4 #define BIOSLPTADDR 0x408 static struct state { volatile unsigned int active; volatile unsigned int terminate; volatile unsigned int rxactive; unsigned int verblevel; unsigned int mode; unsigned int ioaddr; unsigned int isnt; unsigned int w9xportmode; unsigned int portflags; struct adapter_config config; unsigned int txdelay; unsigned int fullduplex; unsigned int calib; unsigned int leds; byte baud; byte flexmode; byte status; unsigned int scale; HANDLE hdevlife; HANDLE htxmutex; L1FRAME txframe; L1FRAME rxframe; L1_STATISTICS stat; unsigned char rxbuf[512]; unsigned int rxptr, rxlen; struct { unsigned rd, wr; unsigned char buf[TXBUFFER_SIZE]; } htx; struct { unsigned int bitbuf, bitstream, numbits, state; unsigned char *bufptr; int bufcnt; unsigned char buf[RXBUFFER_SIZE]; } hrx; unsigned short biosports[NRBIOSPORTS]; HANDLE hlpt; } state = { 0, }; #define REGISTRYPATH "SOFTWARE\\FlexNet\\BaycomUSB" #define REGHKEY HKEY_LOCAL_MACHINE /* ------------------------------------------------------------------------- */ int lprintf(unsigned vl, const char *format, ...) { va_list ap; char buf[512]; int r; if (vl > state.verblevel) return 0; va_start(ap, format); r = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); OutputDebugString(buf); return r; } extern inline int iopl(unsigned int level) { OSVERSIONINFO info; info.dwOSVersionInfoSize = sizeof(info); if (GetVersionEx(&info) && (info.dwPlatformId == VER_PLATFORM_WIN32s || info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)) return 0; return 1; } /* ---------------------------------------------------------------------- */ /* * the CRC routines are stolen from WAMPES * by Dieter Deyke */ const u_int16_t crc_ccitt_table[0x100] = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; /* ---------------------------------------------------------------------- */ static inline u_int16_t calc_crc_ccitt(const u_int8_t *buffer, int len) { u_int16_t crc = 0xffff; for (;len>0;len--) crc = (crc >> 8) ^ crc_ccitt_table[(crc ^ *buffer++) & 0xff]; crc ^= 0xffff; return crc; } static inline void append_crc_ccitt(u_int8_t *buffer, int len) { u_int16_t crc = calc_crc_ccitt(buffer, len); buffer[len] = crc; buffer[len+1] = crc >> 8; } static inline int check_crc_ccitt(const u_int8_t *buffer, int len) { u_int16_t crc = calc_crc_ccitt(buffer, len); return (crc & 0xffff) == 0x0f47; } /* ---------------------------------------------------------------------- */ /* * high performance HDLC encoder * yes, it's ugly, but generates pretty good code */ #define ENCODEITERA(j) \ ({ \ if (!(notbitstream & (0x1f0 << j))) \ goto stuff##j; \ encodeend##j: \ }) #define ENCODEITERB(j) \ ({ \ stuff##j: \ bitstream &= ~(0x100 << j); \ bitbuf = (bitbuf & (((2 << j) << numbit) - 1)) | \ ((bitbuf & ~(((2 << j) << numbit) - 1)) << 1); \ numbit++; \ notbitstream = ~bitstream; \ goto encodeend##j; \ }) static void hdlc_encode(unsigned char *pkt, unsigned int len) { unsigned bitstream, notbitstream, bitbuf, numbit; unsigned wr = state.htx.wr; append_crc_ccitt(pkt, len); len += 2; bitstream = 0; bitbuf = 0x7e; numbit = 8; /* opening flag */ while (numbit >= 8) { state.htx.buf[wr] = bitbuf; wr = (wr + 1) % TXBUFFER_SIZE; if (wr == state.htx.rd) *(int *)0 = 0; /* must not happen! */ bitbuf >>= 8; numbit -= 8; } for (; len > 0; len--, pkt++) { bitstream >>= 8; bitstream |= ((unsigned int)*pkt) << 8; bitbuf |= ((unsigned int)*pkt) << numbit; notbitstream = ~bitstream; ENCODEITERA(0); ENCODEITERA(1); ENCODEITERA(2); ENCODEITERA(3); ENCODEITERA(4); ENCODEITERA(5); ENCODEITERA(6); ENCODEITERA(7); goto enditer; ENCODEITERB(0); ENCODEITERB(1); ENCODEITERB(2); ENCODEITERB(3); ENCODEITERB(4); ENCODEITERB(5); ENCODEITERB(6); ENCODEITERB(7); enditer: numbit += 8; while (numbit >= 8) { state.htx.buf[wr] = bitbuf; wr = (wr + 1) % TXBUFFER_SIZE; if (wr == state.htx.rd) *(int *)0 = 0; /* must not happen! */ bitbuf >>= 8; numbit -= 8; } } bitbuf |= 0x7e7e << numbit; numbit += 16; while (numbit >= 8) { state.htx.buf[wr] = bitbuf; wr = (wr + 1) % TXBUFFER_SIZE; if (wr == state.htx.rd) *(int *)0 = 0; /* must not happen! */ bitbuf >>= 8; numbit -= 8; } state.htx.wr = wr; } /* ---------------------------------------------------------------------- */ static inline void do_rxpacket(void) { if (state.hrx.bufcnt < 3 || state.hrx.bufcnt > MAXFLEN) return; if (!check_crc_ccitt(state.hrx.buf, state.hrx.bufcnt)) return; memcpy(state.rxframe.frame, state.hrx.buf, state.hrx.bufcnt-2); state.rxframe.len = state.hrx.bufcnt-2; state.rxframe.txdelay = 0; state.rxframe.kanal = 0; state.stat.rx_frames++; } #define DECODEITERA(j) \ ({ \ if (!(notbitstream & (0x0fc << j))) /* flag or abort */ \ goto flgabrt##j; \ if ((bitstream & (0x1f8 << j)) == (0xf8 << j)) /* stuffed bit */ \ goto stuff##j; \ enditer##j: \ }) #define DECODEITERB(j) \ ({ \ flgabrt##j: \ if (!(notbitstream & (0x1fc << j))) { /* abort received */ \ st = 0; \ goto enditer##j; \ } \ if ((bitstream & (0x1fe << j)) != (0x0fc << j)) /* flag received */ \ goto enditer##j; \ if (st) \ do_rxpacket(); \ state.hrx.bufcnt = 0; \ state.hrx.bufptr = state.hrx.buf; \ st = 1; \ numbits = 7-j; \ goto enditer##j; \ stuff##j: \ numbits--; \ bitbuf = (bitbuf & ((~0xff) << j)) | ((bitbuf & ~((~0xff) << j)) << 1); \ goto enditer##j; \ }) static inline void hdlc_receive(void) { unsigned bits, bitbuf, notbitstream, bitstream, numbits, st; /* start of HDLC decoder */ numbits = state.hrx.numbits; st = state.hrx.state; bitstream = state.hrx.bitstream; bitbuf = state.hrx.bitbuf; while (state.rxptr < state.rxlen && !state.rxframe.len) { bits = state.rxbuf[state.rxptr++]; bitstream >>= 8; bitstream |= ((unsigned int)bits) << 8; bitbuf >>= 8; bitbuf |= ((unsigned int)bits) << 8; numbits += 8; notbitstream = ~bitstream; DECODEITERA(0); DECODEITERA(1); DECODEITERA(2); DECODEITERA(3); DECODEITERA(4); DECODEITERA(5); DECODEITERA(6); DECODEITERA(7); goto enddec; DECODEITERB(0); DECODEITERB(1); DECODEITERB(2); DECODEITERB(3); DECODEITERB(4); DECODEITERB(5); DECODEITERB(6); DECODEITERB(7); enddec: while (st && numbits >= 8) { if (state.hrx.bufcnt >= RXBUFFER_SIZE) { st = 0; } else { *(state.hrx.bufptr)++ = bitbuf >> (16-numbits); state.hrx.bufcnt++; numbits -= 8; } } } state.hrx.numbits = numbits; state.hrx.state = st; state.hrx.bitstream = bitstream; state.hrx.bitbuf = bitbuf; } /* ----------------------------------------------------------------------- */ /* * Treiber-Init. Sofern mehrfach aufgerufen, kommt vorher jeweils l1_exit() * Hier also alle Ressourcen allokieren, aber noch nicht starten sofern * dazu die Parameter gebraucht werden. Die kommen spaeter per l1_init_kanal() */ static void saveparams(HKEY hKey) { DWORD val; val = state.verblevel; RegSetValueEx(hKey, "verblevel", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.mode; RegSetValueEx(hKey, "mode", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.ioaddr; RegSetValueEx(hKey, "ioaddr", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.portflags; RegSetValueEx(hKey, "portflags", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.w9xportmode; RegSetValueEx(hKey, "w9xportmode", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.config.fclk; RegSetValueEx(hKey, "fclk", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.config.bitrate; RegSetValueEx(hKey, "bitrate", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.config.intclk; RegSetValueEx(hKey, "intclk", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.config.extmodem; RegSetValueEx(hKey, "extmodem", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.config.loopback; RegSetValueEx(hKey, "loopback", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.config.extstat; RegSetValueEx(hKey, "extstat", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.config.pttmute; RegSetValueEx(hKey, "pttmute", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.config.filtmode; RegSetValueEx(hKey, "filtmode", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.config.gain; RegSetValueEx(hKey, "gain", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.txdelay; RegSetValueEx(hKey, "txdelay", 0, REG_DWORD, (void *)&val, sizeof(val)); val = state.fullduplex; RegSetValueEx(hKey, "fullduplex", 0, REG_DWORD, (void *)&val, sizeof(val)); } int init_device(HKEY hKey) { DWORD regtype, reglen, regval; unsigned int i; unsigned short baddr; /* read params from registry */ reglen = sizeof(regval); if (RegQueryValueEx(hKey, "verblevel", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 10; state.verblevel = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "mode", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = MODE_EPP; state.mode = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "ioaddr", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 0; state.ioaddr = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "portflags", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 0; state.portflags = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "w9xportmode", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 0; state.w9xportmode = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "fclk", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 19666600; state.config.fclk = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "bitrate", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 9600; state.config.bitrate = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "intclk", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 0; state.config.intclk = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "extmodem", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 0; state.config.extmodem = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "loopback", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 0; state.config.loopback = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "extstat", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 1; state.config.extstat = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "pttmute", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 1; state.config.pttmute = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "filtmode", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 0; state.config.filtmode = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "gain", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 1; state.config.gain = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "txdelay", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 0; state.txdelay = regval; reglen = sizeof(regval); if (RegQueryValueEx(hKey, "fullduplex", NULL, ®type, (void *)®val, ®len) != ERROR_SUCCESS || regtype != REG_DWORD) regval = 0; state.fullduplex = regval; /* save params to registry */ saveparams(hKey); /* init hdlc */ memset(&state.htx, 0, sizeof(state.htx)); memset(&state.hrx, 0, sizeof(state.hrx)); state.terminate = state.rxactive = state.active = 0; state.status = CH_DEAD; state.hdevlife = CreateEvent(NULL, FALSE, FALSE, "FlexNet Device State"); state.htxmutex = CreateMutex(NULL, FALSE, NULL); state.isnt = iopl(3); memset(state.biosports, 0, sizeof(state.biosports)); state.hlpt = INVALID_HANDLE_VALUE; if (!state.isnt) { for (i = 0; i < NRBIOSPORTS; i++) { if (!ReadProcessMemory(GetCurrentProcess(), (void *)(BIOSLPTADDR+i*sizeof(baddr)), &baddr, sizeof(baddr), ®len) || reglen != sizeof(baddr)) break; if (!baddr) break; state.biosports[i] = baddr; lprintf(10, "BIOS Port %u: 0x%04x\n", i, baddr); } #if 0 state.hlpt = CreateFile("\\\\.\\LPT1", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); #endif } state.leds = 0; return 1; } /* ------------------------------------------------------------------------- */ void l1_exit(HKEY hKey) { state.terminate = 1; saveparams(hKey); while (state.rxactive) Sleep(10); CloseHandle(state.hdevlife); CloseHandle(state.htxmutex); /* unload sys driver if NT */ if (state.isnt || !state.w9xportmode) parport_stop_win(); if (state.hlpt != INVALID_HANDLE_VALUE) CloseHandle(state.hlpt); } /* ------------------------------------------------------------------------- */ byte *config_info(byte kanal) { if (state.active) { switch (state.mode) { case MODE_EPP: return "EPPFLEX (EPP)"; case MODE_ECP: return "EPPFLEX (ECP)"; case MODE_EPPAFSK: return "EPPFLEX (AFSK)"; case MODE_EPPCONV: return "EPP Conventional"; } } return "EPPFLEX (inactive/error)"; } /* ------------------------------------------------------------------------- */ static BOOL CALLBACK EdParmDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { HWND hcombo; char buf[32]; unsigned int i, j; switch (uMsg) { case WM_INITDIALOG: hcombo = GetDlgItem(hDlg, IDC_PORT); if (state.isnt) { SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)"LPT1"); SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)"LPT2"); SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)"LPT3"); if (state.ioaddr > 3) { snprintf(buf, sizeof(buf), "LPT%u", state.ioaddr); SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)buf); ComboBox_SetCurSel(hcombo, 3); } else ComboBox_SetCurSel(hcombo, state.ioaddr-1); } else { for (j = !!state.ioaddr, i = 0; i < NRBIOSPORTS; i++) { if (!state.biosports[i]) break; snprintf(buf, sizeof(buf), "LPT%u", i+1); SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)buf); if ((state.ioaddr == state.biosports[i] && state.w9xportmode) || (state.ioaddr-1 == i && !state.w9xportmode)) { j = 0; ComboBox_SetCurSel(hcombo, i); } } if (j) { if (state.w9xportmode) snprintf(buf, sizeof(buf), "0x%x", state.ioaddr); else snprintf(buf, sizeof(buf), "LPT%u", state.ioaddr); SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)buf); ComboBox_SetCurSel(hcombo, i); } } hcombo = GetDlgItem(hDlg, IDC_MODE); SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)"EPP"); SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)"ECP"); SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)"EPPAFSK"); SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)"EPP Conventional"); ComboBox_SetCurSel(hcombo, state.mode); snprintf(buf, sizeof(buf), "%d", state.txdelay); SetDlgItemText(hDlg, IDC_TXDELAY, buf); CheckDlgButton(hDlg, IDC_FULLDUPLEX, state.fullduplex ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_EXTMODEM, state.config.extmodem ? BST_CHECKED : BST_UNCHECKED); snprintf(buf, sizeof(buf), "%d", state.config.bitrate); SetDlgItemText(hDlg, IDC_BITRATE, buf); CheckDlgButton(hDlg, IDC_PTTMUTE, state.config.pttmute ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_FORCEHWEPP, (state.portflags & PPFLAG_FORCEHWEPP) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_SWEMULEPP, (state.portflags & PPFLAG_SWEMULEPP) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_SWEMULECP, (state.portflags & PPFLAG_SWEMULECP) ? BST_CHECKED : BST_UNCHECKED); SetWindowText(hDlg, DRIVER_NAME" Configuration"); break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDCANCEL: EndDialog(hDlg, 0); break; case IDOK: GetDlgItemText(hDlg, IDC_PORT, buf, sizeof(buf)); if (state.isnt) { if (strncmp(buf, "LPT", 3)) state.ioaddr = 0; else state.ioaddr = strtoul(buf+3, NULL, 0); } else { if (buf[0] == 'L' && buf[1] == 'P' && buf[2] == 'T' && buf[4] == 0 && buf[3] >= '1' && buf[3] < '1' + NRBIOSPORTS) { if(state.w9xportmode) state.ioaddr = state.biosports[buf[3] - '1']; else state.ioaddr = buf[3] - '0'; } else if (state.w9xportmode) state.ioaddr = strtoul(buf, NULL, 0); else state.ioaddr = 0; } GetDlgItemText(hDlg, IDC_MODE, buf, sizeof(buf)); if (!strcmp(buf, "EPP Conventional")) state.mode = 3; else if (!strcmp(buf, "EPPAFSK")) state.mode = 2; else if (!strcmp(buf, "ECP")) state.mode = 1; else state.mode = 0; GetDlgItemText(hDlg, IDC_TXDELAY, buf, sizeof(buf)); state.txdelay = strtoul(buf, NULL, 0); state.fullduplex = IsDlgButtonChecked(hDlg, IDC_FULLDUPLEX) == BST_CHECKED; state.config.extmodem = IsDlgButtonChecked(hDlg, IDC_EXTMODEM) == BST_CHECKED; GetDlgItemText(hDlg, IDC_BITRATE, buf, sizeof(buf)); state.config.bitrate = strtoul(buf, NULL, 0); state.config.pttmute = IsDlgButtonChecked(hDlg, IDC_PTTMUTE) == BST_CHECKED; if (IsDlgButtonChecked(hDlg, IDC_FORCEHWEPP) == BST_CHECKED) state.portflags |= PPFLAG_FORCEHWEPP; else state.portflags &= ~PPFLAG_FORCEHWEPP; if (IsDlgButtonChecked(hDlg, IDC_SWEMULEPP) == BST_CHECKED) state.portflags |= PPFLAG_SWEMULEPP; else state.portflags &= ~PPFLAG_SWEMULEPP; if (IsDlgButtonChecked(hDlg, IDC_SWEMULECP) == BST_CHECKED) state.portflags |= PPFLAG_SWEMULECP; else state.portflags &= ~PPFLAG_SWEMULECP; EndDialog(hDlg, 1); break; default: break; } break; default: return FALSE; } return TRUE; } /* ------------------------------------------------------------------------- */ int config_device(byte max_channels, HWND hDlg, byte channel) { int restart = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hDlg, EdParmDlgProc, 0); if (restart) state.active = 0; return restart; } /* ------------------------------------------------------------------------- */ u16 l1_get_ch_cnt(void) { return 1; } /* ------------------------------------------------------------------------- */ byte get_txdelay(byte kanal) { return state.txdelay / 10; } void set_txdelay(byte kanal, byte delay) { state.txdelay = 10 * delay; } u16 get_mode(byte kanal) { return (state.flexmode & ~MODE_d) | (state.fullduplex ? MODE_d : 0); } u16 get_baud(byte kanal) { return state.baud; } /* ------------------------------------------------------------------------- */ byte l1_init_kanal(byte kanal, u16 chbaud, u16 chmode) { state.flexmode = chmode; return (state.ioaddr != 0); } /* ------------------------------------------------------------------------- */ byte l1_ch_active(byte kanal) { return (state.ioaddr != 0); } /* ------------------------------------------------------------------------- */ char far *l1_ident(byte kanal) { return DRIVER_NAME; } /* ------------------------------------------------------------------------- */ char far *l1_version(byte kanal) { return DRIVER_VERSION; } /* ------------------------------------------------------------------------- */ L1_STATISTICS far *l1_stat(byte kanal, byte delete) { L1_STATISTICS *p = &state.stat; if (delete) p->tx_error = p->rx_overrun = p->rx_bufferoverflow = p->tx_frames = p->rx_frames = p->io_error = 0; return p; } /* ------------------------------------------------------------------------- */ void set_led(byte kanal, byte ledcode) { state.leds = ledcode; } /* ------------------------------------------------------------------------- */ byte l1_ch_state(byte kanal) { return state.status; } /* ------------------------------------------------------------------------- */ u16 l1_scale(byte kanal) { return state.scale; } /* ------------------------------------------------------------------------- */ void l1_tx_calib(byte kanal, byte minutes) { state.calib = minutes * state.config.bitrate * 60 / 8; } /* ------------------------------------------------------------------------- */ L1FRAME far *l1_get_framebuf(byte kanal) { return &state.txframe; } byte l1_tx_frame(void) { unsigned int i; if (state.txframe.kanal || !state.active) return 1; WaitForSingleObject(state.htxmutex, INFINITE); if (state.htx.rd == state.htx.wr) { /* need tx delay */ i = state.txframe.txdelay * state.config.bitrate / 800; if (!i) i = 1; if (i > TXBUFFER_SIZE-1) i = TXBUFFER_SIZE-1; memset(state.htx.buf, 0x7e, i); state.htx.rd = 0; state.htx.wr = i; } i = (TXBUFFER_SIZE - 1 + state.htx.rd - state.htx.wr) % TXBUFFER_SIZE; if (i < state.txframe.len*6/5+32) { ReleaseMutex(state.htxmutex); return 0; } /* remove tail if possible */ if (i < TXBUFFER_SIZE-8) state.htx.wr = (state.htx.wr + TXBUFFER_SIZE-8) % TXBUFFER_SIZE; hdlc_encode(state.txframe.frame, state.txframe.len); /* add tail */ for (i = 0; i < 8; i++) { state.htx.buf[state.htx.wr] = 0x7e; state.htx.wr = (state.htx.wr + 1) % TXBUFFER_SIZE; } ReleaseMutex(state.htxmutex); state.stat.tx_frames++; return 1; } /* ------------------------------------------------------------------------- */ static int hdlc_transmit(byte *pkt, int cnt) { int totcnt = 0; unsigned int xcnt; WaitForSingleObject(state.htxmutex, INFINITE); while (cnt > 0) { if (state.htx.rd == state.htx.wr) { if (!state.calib) break; xcnt = cnt; if (xcnt > state.calib) xcnt = state.calib; memset(pkt, 0x7e, xcnt); pkt += xcnt; totcnt += xcnt; cnt -= xcnt; state.calib -= xcnt; break; } if (state.htx.wr >= state.htx.rd) xcnt = state.htx.wr - state.htx.rd; else xcnt = TXBUFFER_SIZE - state.htx.rd; if (xcnt > cnt) xcnt = cnt; if (!xcnt) break; memcpy(pkt, &state.htx.buf[state.htx.rd], xcnt); pkt += xcnt; totcnt += xcnt; cnt -= xcnt; state.htx.rd = (state.htx.rd + xcnt) % TXBUFFER_SIZE; } ReleaseMutex(state.htxmutex); return totcnt; } /* * RX-Thread. Wartet auf RX-Bytes, verarbeitet sie und returned wenn * Handle zu oder Paket komplett */ L1FRAME far *l1_rx_frame(void) { unsigned int i; unsigned char eio[2048]; unsigned char ctreg; byte stat; byte statecp[6]; SYSTEMTIME tm1, tm2; unsigned int msec, bitrate, bytecnt; int cnt, icnt, ocnt, icntx, ocntx; state.rxactive = 1; state.rxframe.len = 0; if (state.terminate) { state.rxactive = 0; return NULL; } /* check if startup is needed */ if (!state.active) { if (!state.ioaddr) goto errwait; /* init parport; distinguish between NT and 9x case */ if (state.isnt || !state.w9xportmode) cnt = parport_init_win_flags(state.ioaddr-1, state.portflags); else if (state.w9xportmode == 1) cnt = parport_init_w9xring0_flags(state.ioaddr, state.portflags); else cnt = parport_init_direct_flags(state.ioaddr, state.portflags); if (cnt) { lprintf(10, "Cannot open Parport at address/number 0x%04x\n", state.ioaddr); state.ioaddr = 0; goto errwait; } bytecnt = 0; /* autoprobe bitrate */ switch (state.mode) { case MODE_EPP: if (adapter_start_epp(&state.config)) { lprintf(0, "Error configuring EPP mode\n"); goto errwait; } /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errparport; GetSystemTime(&tm1); for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errparport; /* try to determine the FIFO count if in extended mode */ if (state.config.extstat) { eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE|1; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; if (parport_epp_read_addr(eio, 2) != 2) goto errparport; icnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; icnt &= 0x7fff; } else { /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icnt = 0; break; case EPP_NRAEF: icnt = 1025; break; case 0: icnt = 1793; break; default: icnt = 256; break; } } /* rx */ while (icnt > 0) { cnt = icnt; if (cnt > sizeof(eio)) cnt = sizeof(eio); icnt -= cnt; bytecnt += cnt; if (parport_epp_read_data(eio, cnt) != cnt) goto errparport; } GetSystemTime(&tm2); msec = (60000 + tm2.wSecond * 1000U + tm2.wMilliseconds - tm1.wSecond * 1000U - tm1.wMilliseconds) % 60000; if (msec >= 500) break; Sleep(10); if (state.terminate) { state.rxactive = 0; return NULL; } } /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errparport; break; case MODE_ECP: if (adapter_start_ecp(&state.config)) { lprintf(0, "Error configuring EPP mode\n"); goto errwait; } eio[0] = 0xaf; /* reset register: all reset */ eio[1] = 0xa0; /* reset register: terminate reset */ eio[2] = 0xb0; if (parport_ecp_write_addr(eio, 3) != 3) goto errparport; GetSystemTime(&tm1); for (;;) { eio[0] = 0x81; if (parport_ecp_write_addr(eio, 1) != 1) goto errparport; if (parport_ecp_read_data(statecp, 6) != 6) goto errparport; eio[0] = 0x80; if (parport_ecp_write_addr(eio, 1) != 1) goto errparport; icnt = ((unsigned)statecp[2] << 8) | statecp[1]; /* read */ while (icnt > 0) { cnt = icnt; if (cnt > sizeof(eio)) cnt = sizeof(eio); icnt -= cnt; bytecnt += cnt; eio[0] = 0xc0 | (cnt & 0xf); eio[1] = 0xd0 | ((cnt >> 4) & 0xf); eio[2] = 0xe0 | ((cnt >> 8) & 0xf); if (parport_ecp_write_addr(eio, 3) != 3) goto errparport; if (parport_ecp_read_data(eio, cnt) != cnt) goto errparport; } GetSystemTime(&tm2); msec = (60000 + tm2.wSecond * 1000U + tm2.wMilliseconds - tm1.wSecond * 1000U - tm1.wMilliseconds) % 60000; if (msec >= 500) break; Sleep(10); if (state.terminate) { state.rxactive = 0; return NULL; } } eio[0] = 0xaf; /* reset register: all reset */ eio[1] = 0xa0; /* reset register: terminate reset */ eio[2] = 0xb0; if (parport_ecp_write_addr(eio, 3) != 3) goto errparport; break; case MODE_EPPAFSK: state.config.bitrate = 1200; if (adapter_start_eppafsk(&state.config)) { lprintf(0, "Error configuring EPP mode\n"); goto errwait; } /* reset modem */ eio[0] = 0x00; eio[1] = 0x18; if (parport_epp_write_addr(eio, 2) != 2) goto errparport; GetSystemTime(&tm1); for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errparport; /* determine the FIFO count */ eio[0] = 0x1a; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; if (parport_epp_read_addr(eio, 1) != 1) goto errparport; icnt = eio[0] & 0x1f; eio[0] = 0x18; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; /* rx */ if (icnt > 0) { if (parport_epp_read_data(eio, icnt) != icnt) goto errparport; bytecnt += icnt; } GetSystemTime(&tm2); msec = (60000 + tm2.wSecond * 1000U + tm2.wMilliseconds - tm1.wSecond * 1000U - tm1.wMilliseconds) % 60000; if (msec >= 500) break; Sleep(10); if (state.terminate) { state.rxactive = 0; return NULL; } } /* reset modem */ eio[0] = 0x00; eio[1] = 0x18; if (parport_epp_write_addr(eio, 2) != 2) goto errparport; break; case MODE_EPPCONV: /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errparport; GetSystemTime(&tm1); for (;;) { if (parport_epp_read_addr(&stat, 1) != 1) goto errparport; /* try to determine the FIFO count if in extended mode */ /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icnt = 0; break; case EPP_NRAEF: icnt = 1025; break; case 0: icnt = 1793; break; default: icnt = 256; break; } /* rx */ while (icnt > 0) { cnt = icnt; if (cnt > sizeof(eio)) cnt = sizeof(eio); icnt -= cnt; bytecnt += cnt; if (parport_epp_read_data(eio, cnt) != cnt) goto errparport; } GetSystemTime(&tm2); msec = (60000 + tm2.wSecond * 1000U + tm2.wMilliseconds - tm1.wSecond * 1000U - tm1.wMilliseconds) % 60000; if (msec >= 500) break; Sleep(10); if (state.terminate) { state.rxactive = 0; return NULL; } } for (icnt = 0; icnt < 256; icnt++) { if (parport_epp_read_addr(&stat, 1) != 1) goto errparport; if (!(stat & EPP_NREF)) break; if (parport_epp_read_data(eio, 1) != 1) goto errparport; bytecnt++; } /* reset modem */ eio[0] = 0; eio[1] = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (parport_epp_write_addr(eio, 2) != 2) goto errparport; break; default: lprintf(0, "Invalid mode requested\n"); goto errwait; } bitrate = (bytecnt * 8000U + msec / 2U) / msec; lprintf(0, "Autoprobed bitrate: %u\n", bitrate); /* set variables */ i = state.config.bitrate; if (!i) i = 1; state.scale = 614400 / i; state.baud = i / 100; state.status = 0; state.active = 1; SetEvent(state.hdevlife); } /* actual driver */ for (;;) { /* do IO */ if (state.rxptr >= state.rxlen) { state.rxptr = state.rxlen = 0; switch (state.mode) { case MODE_EPP: if (parport_epp_read_addr(&stat, 1) != 1) goto errparport; /* determine TX fifo size from status bits */ switch (stat & (EPP_NTAEF|EPP_NTHF)) { case EPP_NTHF: ocntx = 2048 - 256; break; case EPP_NTAEF: ocntx = 2048 - 1793; break; case 0: ocntx = 0; break; default: ocntx = 2048 - 1025; break; } /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icntx = 0; break; case EPP_NRAEF: icntx = 1025; break; case 0: icntx = 1793; break; default: icntx = 256; break; } /* try to determine the FIFO count if in extended mode */ ctreg = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (state.leds & LED_CON) ctreg |= 1 << 6; if (state.leds & LED_STA) ctreg |= 1 << 7; if (state.config.extstat) { eio[0] = ctreg|1; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; if (parport_epp_read_addr(eio, 2) != 2) goto errparport; icnt = eio[0] | (((unsigned int)eio[1]) << 8); eio[0] = ctreg|2; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; if (parport_epp_read_addr(eio, 2) != 2) goto errparport; ocnt = eio[0] | (((unsigned int)eio[1]) << 8); ocnt = 16384 - (ocnt & 0x7fff); icnt &= 0x7fff; } else { ocnt = ocntx; icnt = icntx; } eio[0] = ctreg; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; if (stat & EPP_DCDBIT) state.status &= ~CH_DCD; else state.status |= CH_DCD; if (stat & EPP_PTTBIT) state.status |= CH_PTT; else state.status &= ~CH_PTT; /* rx */ if (icnt > 0) { if (icnt > sizeof(state.rxbuf)) icnt = sizeof(state.rxbuf); if (parport_epp_read_data(state.rxbuf, icnt) != icnt) goto errparport; state.rxlen = icnt; } /* tx */ if (ocnt > 0) { if (ocnt > sizeof(eio)) ocnt = sizeof(eio); cnt = hdlc_transmit(eio, ocnt); if (parport_epp_write_data(eio, cnt) != cnt) goto errparport; } break; case MODE_ECP: eio[0] = 0x81; if (parport_ecp_write_addr(eio, 1) != 1) goto errparport; if (parport_ecp_read_data(statecp, 6) != 6) goto errparport; eio[0] = 0x80; if (parport_ecp_write_addr(eio, 1) != 1) goto errparport; eio[0] = 0xb0; if (state.leds & LED_CON) eio[0] |= 1 << 0; if (state.leds & LED_STA) eio[0] |= 1 << 1; if (parport_ecp_write_addr(eio, 1) != 1) goto errparport; icnt = ((unsigned)statecp[2] << 8) | statecp[1]; ocnt = ((unsigned)statecp[4] << 8) | statecp[3]; /* update status */ if (statecp[0] & 0x80) state.status &= ~CH_DCD; else state.status |= CH_DCD; if (statecp[0] & 0x40) state.status &= ~CH_PTT; else state.status |= CH_PTT; /* read */ if (icnt > 0) { cnt = icnt; if (cnt > sizeof(state.rxbuf)) cnt = sizeof(state.rxbuf); icnt -= cnt; eio[0] = 0xc0 | (cnt & 0xf); eio[1] = 0xd0 | ((cnt >> 4) & 0xf); eio[2] = 0xe0 | ((cnt >> 8) & 0xf); if (parport_ecp_write_addr(eio, 3) != 3) goto errparport; if (parport_ecp_read_data(state.rxbuf, cnt) != cnt) goto errparport; state.rxlen = cnt; } /* write */ if (ocnt < 8192) { /* fixme */ cnt = 8192 - ocnt; if (cnt > sizeof(eio)) cnt = sizeof(eio); cnt = hdlc_transmit(eio, cnt); if (parport_ecp_write_data(eio, cnt) != cnt) goto errparport; } break; case MODE_EPPAFSK: if (parport_epp_read_addr(&stat, 1) != 1) goto errparport; /* determine the FIFO count */ ctreg = 0x18; if (state.leds & LED_CON) ctreg |= 1 << 6; if (state.leds & LED_STA) ctreg |= 1 << 7; eio[0] = ctreg | 1; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; if (parport_epp_read_addr(eio, 1) != 1) goto errparport; ocnt = 0x10 - (eio[0] & 0x1f); eio[0] = ctreg | 2; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; if (parport_epp_read_addr(eio, 1) != 1) goto errparport; icnt = eio[0] & 0x1f; eio[0] = ctreg; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; /* update status */ if (stat & 0x80) state.status &= ~CH_DCD; else state.status |= CH_DCD; if (stat & 0x40) state.status &= ~CH_PTT; else state.status |= CH_PTT; /* rx */ if (icnt > 0) { if (parport_epp_read_data(state.rxbuf, icnt) != icnt) goto errparport; state.rxlen = icnt; } /* tx */ if (ocnt > 0) { cnt = hdlc_transmit(eio, ocnt); if (parport_epp_write_data(eio, cnt) != cnt) goto errparport; } break; case MODE_EPPCONV: if (parport_epp_read_addr(&stat, 1) != 1) goto errparport; /* determine TX fifo size from status bits */ switch (stat & (EPP_NTAEF|EPP_NTHF)) { case EPP_NTHF: ocnt = 2048 - 256; break; case EPP_NTAEF: ocnt = 2048 - 1793; break; case 0: ocnt = 0; break; default: ocnt = 2048 - 1025; break; } /* determine RX fifo size from status bits */ switch (stat & (EPP_NRAEF|EPP_NRHF)) { case EPP_NRHF: icnt = 0; break; case EPP_NRAEF: icnt = 1025; break; case 0: icnt = 1793; break; default: icnt = 256; break; } if (stat & EPP_DCDBIT) state.status &= ~CH_DCD; else state.status |= CH_DCD; if (stat & EPP_PTTBIT) state.status |= CH_PTT; else state.status &= ~CH_PTT; /* set LEDs */ ctreg = EPP_TX_FIFO_ENABLE|EPP_RX_FIFO_ENABLE|EPP_MODEM_ENABLE; if (state.leds & LED_CON) ctreg |= 1 << 6; if (state.leds & LED_STA) ctreg |= 1 << 7; eio[0] = ctreg; if (parport_epp_write_addr(eio, 1) != 1) goto errparport; /* rx */ if (icnt == 0 && state.config.bitrate < 100000) { i = (state.config.bitrate < 50000) ? 256 : 128; while (i > 0 && state.rxlen < sizeof(state.rxbuf) && stat & EPP_NREF) { if (parport_epp_read_data(state.rxbuf+state.rxlen, 1) != 1) goto errparport; state.rxlen++; i--; if (parport_epp_read_addr(&stat, 1) != 1) goto errparport; } } else if (icnt > 0) { cnt = icnt; if (cnt > sizeof(state.rxbuf)) cnt = sizeof(state.rxbuf); icnt -= cnt; if (parport_epp_read_data(state.rxbuf, cnt) != cnt) goto errparport; state.rxlen = cnt; } /* tx */ if (ocnt > 0) { if (ocnt > sizeof(eio)) ocnt = sizeof(eio); cnt = hdlc_transmit(eio, ocnt); if (parport_epp_write_data(eio, cnt) != cnt) goto errparport; } break; } } while (state.rxptr < state.rxlen) { hdlc_receive(); if (state.rxframe.len) { state.rxactive = 0; return &state.rxframe; } } if (state.terminate) { state.rxactive = 0; return NULL; } Sleep(10); } errparport: lprintf(0, "Parport timeout\n"); errwait: if (state.isnt || !state.w9xportmode) parport_stop_win(); state.stat.io_error++; state.active = 0; state.status = CH_DEAD; SetEvent(state.hdevlife); for (i = 0; i < 30; i++) { if (state.terminate) break; Sleep(100); } state.rxactive = 0; return NULL; } /* ------------------------------------------------------------------------- */ baycomepp-0.10.orig/flexdrv/bayeppflex.rc0100644000175100017510000000551207142113065016544 0ustar abaaba#include "resource.h" #include "windows.h" IDD_DIALOG1 DIALOGEX 0, 0, 232, 235 STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Dialog" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,175,12,50,14 PUSHBUTTON "Cancel",IDCANCEL,175,37,50,14 RTEXT "Port",IDC_STATIC,50,15,25,8,0,WS_EX_RIGHT COMBOBOX IDC_PORT,77,12,50,145,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_MODE,77,34,50,145,CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP RTEXT "Mode",IDC_STATIC,56,36,19,8 EDITTEXT IDC_TXDELAY,77,56,40,14,ES_AUTOHSCROLL | ES_NUMBER RTEXT "TxDelay",IDC_STATIC,47,58,27,8 LTEXT "ms",IDC_STATIC,120,58,10,8 CONTROL "Full Duplex",IDC_FULLDUPLEX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,77,80,51,10 EDITTEXT IDC_BITRATE,77,100,40,14,ES_AUTOHSCROLL | ES_NUMBER RTEXT "Bitrate",IDC_STATIC,53,103,21,8 CONTROL "External Modem",IDC_EXTMODEM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,77,124,67,10 CONTROL "Mute Audio when not transmitting",IDC_PTTMUTE,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,77,144,121,10 CONTROL "Force use of Hardware EPP",IDC_FORCEHWEPP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,77,164,121,10 CONTROL "Software EPP Emulation",IDC_SWEMULEPP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,77,184,121,10 CONTROL "Software ECP Emulation",IDC_SWEMULECP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,77,204,121,10 CONTROL "Author: Thomas Sailer, HB9JNX/AE4WA",IDC_STATIC,"Static", SS_LEFTNOWORDWRAP | WS_GROUP,3,225,130,8 END LANGUAGE LANG_GERMAN, SUBLANG_GERMAN VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x0L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Baycom Hard- und Software GmbH\0" VALUE "FileDescription", "baycomeppflex\0" VALUE "FileVersion", "1, 0, 0, 1\0" VALUE "InternalName", "Baycom EPPFLEX FlexNet driver\0" VALUE "LegalCopyright", "Copyright 1999-2000\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "bayeppflex.dll\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "EPPFLEX\0" VALUE "ProductVersion", "1.00a\0" VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END baycomepp-0.10.orig/flexdrv/driver.c0100644000175100017510000000543407140471003015516 0ustar abaaba#define STRICT #include #pragma hdrstop #include #include "flexdrv.h" // der offizielle Header #include "drv32.h" HANDLE hInst; //-------------------------------------------------------------------- // Einziger Treiberaufruf u32 flexnet_driver(int func, int kanal, int a, int b) { static byte base_kanal; static byte tx_kanal; static L1FRAME *l1f; L1FRAME *rxf; switch (func) { case drv_interfaceversion: return DRIVER_INTERFACE_VERSION; case drv_ident: return (u32)l1_ident((byte)(kanal-base_kanal)); case drv_version: return (u32)l1_version((byte)(kanal - base_kanal)); case drv_config: return config_device((byte)(kanal), (HWND)a, (byte)(b - base_kanal)); case drv_confinfo: return (u32)config_info((byte)(kanal - base_kanal)); case drv_init_device: base_kanal = kanal; return init_device((HKEY)b); case drv_get_ch_cnt: return l1_get_ch_cnt(); case drv_exit: l1_exit((HKEY)a); break; case drv_ch_active: return l1_ch_active((byte)(kanal - base_kanal)); case drv_init_kanal: return l1_init_kanal((byte)(kanal - base_kanal), (u16)a, (u16)b); case drv_stat: return (u32)l1_stat((byte)(kanal - base_kanal), (byte)a); case drv_ch_state: return l1_ch_state((byte)(kanal - base_kanal)); case drv_scale: return l1_scale((byte)(kanal - base_kanal)); case drv_tx_calib: l1_tx_calib((byte)(kanal - base_kanal), (byte)a); break; case drv_set_led: set_led((byte)(kanal - base_kanal), (byte)a); break; case drv_rx_frame: if (rxf = l1_rx_frame()) rxf->kanal += base_kanal; return (u32)rxf; case drv_get_framebuf: return (u32)(l1f = l1_get_framebuf(tx_kanal = (byte)(kanal - base_kanal))); case drv_tx_frame: if (l1f) l1f->kanal = tx_kanal; return l1_tx_frame(); case drv_get_txdelay: return get_txdelay((byte)(kanal - base_kanal)); case drv_get_mode: return get_mode((byte)(kanal - base_kanal)); case drv_get_baud: return get_baud((byte)(kanal - base_kanal)); case drv_set_txdelay: set_txdelay((byte)(kanal - base_kanal), (byte)a); break; default: return 0; } return 0; } //-------------------------------------------------------------------- BOOL WINAPI DllMain (HANDLE hModule, DWORD dwFunction, LPVOID lpNot) { switch(dwFunction) { case DLL_PROCESS_ATTACH: // hier evtl. noch Test ob mehrfach geladen, dazu brauchts aber Handle (mutex oder sowas) hInst = hModule; // kein break, auch neuer Prozess istn Thread case DLL_THREAD_ATTACH: break; case DLL_PROCESS_DETACH: // vor allem wenn harter Abbruch: Alles deinitialisieren! break; // kein Durchfall, Prozessende gibt eh alles frei und schliesst pipes case DLL_THREAD_DETACH: break; } return 1; // Indicate that the DLL was initialized successfully. } //-------------------------------------------------------------------- baycomepp-0.10.orig/flexdrv/drv32.h0100644000175100017510000000070207140471014015163 0ustar abaaba #define DRIVER_INTERFACE_VERSION 1 enum drvc { drv_interfaceversion=1, drv_ident, drv_version, drv_config, drv_confinfo, drv_init_device, drv_get_ch_cnt, drv_exit, drv_ch_active, drv_init_kanal, drv_stat, drv_ch_state, drv_scale, drv_tx_calib, drv_set_led, drv_rx_frame, drv_get_framebuf, drv_tx_frame, drv_get_txdelay, drv_get_mode, drv_get_baud, drv_set_txdelay }; baycomepp-0.10.orig/flexdrv/flexdriv.def0100644000175100017510000000023007140471003016347 0ustar abaaba;LIBRARY FLEXNET_DRIVER DESCRIPTION "FlexNet Channel Driver" VERSION 1.0 CODE READ SHARED EXECUTE DATA READ WRITE EXPORTS flexnet_driver baycomepp-0.10.orig/flexdrv/flexdrv.h0100644000175100017510000005023507140471010015677 0ustar abaaba/*************************************************************** FlexNet / BayCom Layer 1 Service Interface (C) 7/1994 DK7WJ, DL8MBT Translation by HB9JNX Definitionen und Prototypes fr Aufruf von Layer1-Funktionen Definitions and prototypes for calling Layer1 functions 28.08.94 DK7WJ Erste verteilte Version First distributed version 10.09.94 DK7WJ Modebefehl geaendert Changed the mode command Prototypen neu f. Speichermodell MEDIUM New prototypes for the MEDIUM memory model 25.09.94 DK7WJ FDX an Treiber uebergeben FDX now forwarded to the driver 20.02.95 DK7WJ CH_TBY neu CH_TBY added 31.03.95 DK7WJ Device-Versionkennungen Device version identifier 01.03.96 DK7WJ Windows extensions, comments pending :-) 22.04.96 DK7WJ . 25.03.97 HB9JNX IO trapping changes 10.01.00 DK7WJ WIN32 definitions 19.06.00 DK7WJ CH_DEAD included ***************************************************************/ //#ifndef _FLEXTYPES_DEFINED //#define _FLEXTYPES_DEFINED typedef unsigned char byte; typedef signed char i8; typedef signed short i16; typedef unsigned short u16; typedef unsigned long u32; #ifdef _WIN32 #define far #define near #endif //#endif #ifdef _WIN32 #pragma pack(push, flexdrv) #pragma pack(1) #endif #define MAXFLEN 400 /* Maximale Laenge eines Frames */ /* maximum length of a frame */ /* Struct f. Treiberkommunikation bei TX und RX */ /* struct for communicating RX and TX packets to the driver */ typedef struct { i16 len; /* Laenge des Frames - length of the frame */ byte kanal; /* Kanalnummer - channel number */ byte txdelay; /* RX: Gemessenes TxDelay [*10ms], 0 wenn nicht unterstuetzt TX: Zu sendendes TxDelay */ /* RX: measured transmitter keyup delay (TxDelay) in 10ms units, 0 if not supported TX: transmitter keyup delay (TxDelay) that should be sent */ byte frame[MAXFLEN]; /* L1-Frame (ohne CRC) - L1 frame without CRC */ } L1FRAME; /* Struct f. Kanalstatistik (wird noch erweitert) */ /* struct for channel statistics (still being extended) */ #ifndef _FLEXAPPL typedef struct { u32 tx_error; /* Underrun oder anderes Problem - underrun or some other problem */ u32 rx_overrun; /* Wenn Hardware das unterstuetzt - if supported by the hardware */ u32 rx_bufferoverflow; u32 tx_frames; /* Gesamt gesendete Frames - total number of sent frames */ u32 rx_frames; /* Gesamt empfangene Frames - total number of received frames */ u32 io_error; /* Reset von IO-Device - number of resets of the IO device */ u32 reserve[4]; /* f. Erweiterungen, erstmal 0 lassen! - reserved for extensions, leave 0! */ } L1_STATISTICS; #endif #ifdef _WIN32 extern HANDLE hInst; #pragma pack(pop, flexdrv) #endif /* Masken fr den Mode-Parameter - bitmasks for the mode parameter */ #define MODE_d 0x0080 #define MODE_r 0x0040 #define MODE_t 0x0020 #define MODE_z 0x0010 #define MODE_p 0x0004 /* needs also MODE_d */ #define MODE_c 0x0002 #define MODE_off 0x0001 /* Special: Wenn 1, Kanal abgeschaltet */ /* special: if one, the channel is switched off */ /* Masken fr den L1-Kanalstatus */ /* masks for the L1 channel status */ #define CH_DEAD 0x01 #define CH_RXB 0x40 #define CH_PTT 0x20 #define CH_DCD 0x10 #define CH_FDX 0x08 #define CH_TBY 0x04 #ifdef _WIN32 // Konfiguration. Wenn geaendert, TRUE returnen, dann erfolgt exit() und Re-Init // max_channels: Maximal moegliche Kanalanzahl f. diesen Treiber int config_device(byte max_channels, HWND hParentWindow, byte channel); // Return: Anzahl belegte Kanaele! byte *config_info(byte channel); /* Liefert String der die treiberspezifische Konfiguration beschreibt, z.B. Resourcen-Name Wenn keine treiberspezifische Konfiguration vorhanden (config_device() ist Dummy), Nullpointer liefern */ /* Returns a string describing the channel configuration, i.e. the name of hardware resource If config_device() is a dummy, this call must return a null pointer */ int init_device(HKEY kHey); void far l1_exit(HKEY hKey); void set_txdelay(byte channel, byte txdel); byte get_txdelay(byte channel); u16 get_baud(byte channel); u16 get_mode(byte channel); #else u16 far init_device(int argc, char near *argv[]); /* Treiberinterner Aufruf aus Treiberkopf bei Installation: kann benutzt werden um Command Line Parameter zu parsen Return: 0=OK; sonst Exit mit Returnwert als Exit-Argument ACHTUNG: Wenn Returnwert >0, erfolgt Abbruch, es duerfen dann also keine aktiven oder umgelegten Interrupts verbleiben! */ /* This procedure is called from the driver stub at installation time. It may be used to parse the command line Return value: 0=OK; otherwise installation is cancelled and the value returned as exit argument WARNING: If return value >0 the installation is cancelled, active or patched interrupt vectors must not be left! */ void far l1_exit(void); /* Wird bei Verlassen des Programms aufgerufen und kann zum Aufrumen verwendet werden (Interrupts und Schnittstellen abschalten) */ /* Is called when the driver terminates and may be used to clean up everything (switch off interrupts and interfaces) */ #endif u16 far l1_get_ch_cnt(void); /* Aufruf aus Treiberkopf bei Programmstart; muss Anzahl der im Treiber definierten Kanaele liefern */ /* called from the driver stub at installation time; should return the number of channels defined by the driver */ byte far l1_ch_active(byte kanal); /* Zurueckliefern, ob Kanal im Prinzip funktionstuechtig ist. Also immer, ausser wenn Dummykanal, >0 liefern! */ /* report if the channel could work in principle. Thus always return >0 if not a dummy channel. */ byte far l1_init_kanal(byte kanal, u16 baud, u16 mode); /* Kanalnummer: 0-15 Baud: Baudrate / 100, z.B. 115200 Baud wird als 1152 uebergeben Mode: Kanalmodus, Bitflaggen, derzeit definiert: 0x0080 d Vollduplex 0x0040 r Externer RX-Takt 0x0020 t Externer TX-Takt 0x0010 z NRZ-Kodierung (Anstatt NRZI), nur f. HDLC 0x0002 c Kanal macht immer CRC, nur f. KISS Baycom: Soft-DCD aktivieren 0x0001 - Kanal per Modebefehl deaktiviert Es sind noch weitere Bits definiert, die sind aber im L1-Treiber nicht relevant! Um eventuelle Verklemmungen zu beseitigen, sollte in diesem Modul der Treiber soweit als moeglich (re)initialisiert werden! Return: 1 wenn alles ok; 0 wenn Parameterfehler, dann Anzeige von '---' in der Modeliste Aufruf erfolgt beim Programmstart sowie bei jeder Baud- oder Modenderung, ausserdem wenn der Kanal seit 3 Minuten nichts mehr empfangen hat. */ /* kanal: channel number (0-15) baud: the baud rate / 100, for example 115200 baud is specified as baud = 1152 mode: the channel mode, a bit field, currently the following bits are defined: 0x0080 d Full duplex 0x0040 r External RX clock 0x0020 t External TX clock 0x0010 z NRZ coding (instead of NRZI) (only for HDLC) 0x0002 c KISS: driver forces checksum Baycom: activate software DCD 0x0001 - channel inactivated There are some additional bits defined which are not relevant to the L1 driver. To recover from lockups, this function should (re)initialize as much of the driver and the hardware as possible. Return value: 1 if everything is ok; 0 if a parameter error; '---' is then displayed in the ports list This procedure is called at program start, at every baud rate or mode change, or if the driver has not received anything for 3 minutes. */ L1FRAME far * far l1_rx_frame(void); /* Wird zyklisch aufgerufen Return: *Frame oder 0 wenn nichts empfangen Der Frame mu jeweils bis zum nchsten Aufruf verfgbar bleiben, d.h. jeder Aufruf lscht den zuletzt gemeldeten Frame */ /* Is called periodically Return value: *Frame or null pointer if nothing was received The frame has to be readable until the next call to this function, i.e. every call removes the frame returned by the last call. */ L1FRAME far * far l1_get_framebuf(byte kanal); /* L2 fordert hiermit einen Sendepuffer an. Er mu die Maximallnge aufnehmen knnen. Wenn erfolgreich, folgt vielleicht l1_tx_frame(), es kann aber auch vorkommen dass ein weiterer Aufruf erfolgt! Also nicht dynamisch allokieren, sondern nur einen Pointer liefern! Return: *Frame, der Frame wird hier hineingebaut 0 wenn kein Platz verfuegbar */ /* L2 requests a transmitter buffer. The buffer must be able to store the maximum length. If successful, a l1_tx_frame() probably follows, but it may also happen that another call to l1_get_framebuf() follows! Therefore, do not allocate dynamically, just return a pointer! Return value: *Frame : the frame is stored here 0 : no storage available */ byte far l1_tx_frame(void); /* Aussenden des Frames in vorher mit l1_get_framebuf angefordeten Buffers; Return: 1 wenn ok, sonst 0 Wenn der Sender aus ist, muss jetzt die Entscheidung fallen ob gesendet werden kann!!! ACHTUNG: Wenn die Sendung nicht moeglich ist, darf der Frame auf keinen Fall gespeichert werden! Stattdessen den Frame verwerfen und 0 returnen. DCD darf den Sender auch bei Halbduplex NICHT sperren! Dies ist Bedingung fuer das Funktionieren des FlexNet-OPTIMA-Zugriffsverfahrens. Die DCD- Verriegelung ist bereits in FlexNet enthalten! Wenn der TX bereits an ist (PTT an) und es werden bereits Frames gesendet, sollte der Frame zur Sendung zwischengespeichert werden, sofern der Puffer- platz dafuer ausreicht. Wenn nicht, 0 returnen, dann erfolgt spaeter ein neuer Versuch. In diesem Fall muss jedoch sichergestellt sein, dass der Frame auf jeden Fall noch in DIESEM Durchgang gesendet wird! Das Kanalzugriffstiming findet bereits im FlexNet-Kern statt! */ /* Transmit the frame in the buffer that was returned by the last l1_get_framebuf() Return value: 1 if ok, 0 if not. If the transmitter is off, then the decision must now be made if transmission is possible!!! WARNING: If transmission is not possible now, the frame MUST NOT be stored! The frame should be thrown away and zero should be returned. DCD must not inhibit the transmitter, not even in half duplex mode! This is a necessity for the FlexNet-OPTIMA-Channel access algorithm. The Kernel already contains the DCD transmitter inhibit. If the transmitter is already on (PTT keyed) and frames are being sent, then the frame should be stored if the buffer memory suffices. If not, zero should be returned, the kernel will try again later. If the frame is stored, it is important that it gets transmitted during the same transmission! The channel access timing is already handled by the FlexNet kernel! */ void far l1_tx_calib(byte kanal, byte minutes); /* Sofern die Hardware es erlaubt, Sender in Calibrate-Modus schalten. Minutes=0 stoppt den Calibrate-Mode sofort. */ /* If the hardware allows it, switch the transmitter into the calibrate mode (i.e. start transmitting a calibration pattern) minutes=0 should immediately stop the calibration mode. */ byte far l1_ch_state(byte kanal); /* Gibt verschiedene Kanalzustnde zurck, Bits sind 1 wenn wahr: 0x40 RxB RxBuffer ist nicht leer 0x20 PTT Sender ist an 0x10 DCD Empfnger ist aktiv 0x08 FDX Kanal ist Vollduplex, kann also immer empfangen 0x04 TBY Sender ist nicht bereit, z.B. wegen Calibrate Anmerkung: Die korrekte Bedienung dieser Flags ist essentiell fuer das Funktionieren des FlexNet-Kanalzugriffstimings incl. DAMA-Master und -Slave. Erlaeuterungen zu den Flags: RxB ist 1 wenn gueltige RX-Frames im Puffer liegen. Verriegelt u.a. den Sender bei Halbduplex, da immer erst alle Frames verarbeitet werden sollen. Waehrend des Empfangs muss dieses Flag mit DCD ueberlappend bedient werden, d.h. sobald ein RX-Frame als gueltig erkannt wird, muss RxB spaetestens 1 werden, wenn DCD 0 wird! PTT 1 wenn der TX bereits an ist. Dann setzt FlexNet voraus dass uebergebene Frames in diesem Durchgang noch gesendet werden koennen. Braucht nicht bedient zu werden bei reinen Vollduplextreibern, also wenn FDX 1 ist. DCD 1 wenn der Kanal belegt ist. Darf im Treiber den Sender nicht blockieren, die Entscheidung ob gesendet werden kann faellt stets im FlexNet-Kern! FDX Ist eine typabhaengige Konstante. Stets 0 bei Treibern die einen Halb- duplexkanal bedienen koennen, also die PTT- und DCD-Flags korrekt ansteuern. Treiber die kein Kanalzugriffstiming benoetigen (z.B. Ethernet, SLIP, KISS f. reine Rechnerkopplung usw.), liefern hier 1. TBY Dient nur zur Beschleunigung des Kernels. Wenn 1, wird nichts gesendet. Kann also z.B. waehrend Calibrate oder bei abgeschaltetem Kanal gesetzt werden */ /* return different channel states. The following bits are one if true: 0x40 RxB RxBuffer is not empty 0x20 PTT Transmitter is keyed on 0x10 DCD Receiver is active 0x08 FDX Channel is full duplex, receiver can always receive 0x04 TBY Transmitter not ready, for example because of ongoing calibration Note: It is essential that these flags are services correctly. Otherwise, the channel access timing including DAMA master and slave will not work correctly. Explanation of the flags: RxB is 1 if valid RX frames are available in the buffer. Inhibits for example the transmitter in half duplex mode, because all frames should be processed before transmitting. During receipt this flag should overlap the DCD flag, i.e. RxB should go to one before DCD transitions to zero! PTT 1 if the transmitter is already keyed up. In this case, FlexNet assumes that frames passed are sent during the same transmission. Needs not be serviced by full duplex drivers (i.e. if FDX is one) DCD 1 if the channel is busy. Must not inhibit the transmitter in the driver, since the decision if one should transmit is made by the FlexNet kernel! FDX is a driver dependent constant. Always 0 for drivers that may service a half duplex channel, i.e. that serve the PTT and DCD flags correctly. Drivers that do not need a channel access timing (for example Ethernet, SLIP, KISS for connecting PCs and so on), should return 1. TBY Speeds up the kernel. If 1, it will not try to send. May be set to one for example during calibration or if the channel is switched off. */ u16 far l1_scale(byte kanal); /* Baudratenabhngigen Faktor liefern, wird fr diverse adaptive Parms gebraucht, u.a. T2-Steuerung. Return: 300 Baud: 2048 9600 Baud: 64 oder anders ausgedrckt: Return = 614400/[Baudrate] Sollte die real moegliche Geschwindigkeit des Kanals liefern. Bei Treibern, die die in init_kanal() uebergebene Baudrate verwenden, berechnen. Treiber, die diese nicht verwenden, sollten einen Schaetzwert liefern. Bei sehr schnellen Kanaelen (z.B. Ethernet) immer 0 liefern! */ /* Return a baud rate dependent factor. Is needed to calculate several adaptive parameters, for example T2 control Return value: 300 baud: 2048 9600 baud: 64 or as a formula: Return value = 614400/[baud rate] Should return the real speed of the channel. Drivers that use the baud rate specified in init_kanal() should calculate the return value. Drivers that do not use this parameter should estimate the speed of the channel. Drivers for very fast channels (for example Ethernet) should always return 0! */ char far * far l1_ident(byte kanal); /* Kennung fr Kanalhardware bzw. Treibertyp zurckgeben. Geliefert wird ein far-pointer auf einen null-terminierten String. Der String fr die Kanalhardware ist maximal 8 Zeichen lang, z.B. "SCC0" .. "SCC3", "RS232", "PAR96", "KISS", "IPX", usw. */ /* Return an identifier for the channel hardware or the driver type. The return value must be a far pointer to a zero terminated string. The string should be at most 8 characters long. Examples are "SCC0" .. "SCC3", "RS232", "PAR96", "KISS", "IPX", etc. */ char far * far l1_version(byte kanal); /* Versionsnummernstring liefern. Maximal 5 Zeichen */ /* Return a version number string. At most 5 characters. */ L1_STATISTICS far * far l1_stat(byte kanal, byte delete); /* Statistikwerte liefern Delete = 1: Werte auf 0 zuruecksetzen! Wenn nicht implementiert, Nullpointer liefern! */ /* Return the statistics. Delete = 1: clear the statistics values! If not implemented, return a null pointer! */ void set_led(byte kanal, byte ledcode); /* Falls der Kanal Status-LEDs hat (z.B. TNC), kommen hier die Zustaende bei jeder Aenderung an; kann sicherlich meistens Dummy sein: Bitmasken dazu: */ /* If the channel hardware has status LEDs (for example a TNC), this procedure may be used to drive them; in most cases, this procedure may be a dummy. Bitmasks used: */ #define LED_CON 2 /* Mindestens 1 Connect - at least one connect */ #define LED_STA 4 /* Sendeseitig ausstehende Frames - frames in the transmitter buffer */ /*---------------------------------------------------------------------------*/ #ifndef _WIN32 /* Pointer auf unsigned-Timertic, f. schnellen Zugriff wenn Zeitintervalle geprueft werden muessen. Inkrementiert alle 100ms mit Phasenjitter */ /* Pointer to an unsigned timer_tic, for fast access if timing intervals need to be measured. Increments every 100ms with phase jitter */ extern const volatile far u16 *timer_tic; /* Variable fuer externe Kommunikation zwischen Modulen Koennen bei Bedarf besetzt werden */ /* Variables for intermodule communications May be used if needed */ extern u16 device_type; /* Bitte vor Vergabe DK7WJ konsultieren! */ /* Please consult DK7WJ prior to usage! */ extern u16 device_version; /* Versionskennung - version identifier */ extern void far *device_vector; /* Beliebiger Vektor, wird zurueckgeliefert */ /* arbitrary vector returned by device_vec() */ extern void far (*drv_cb)(void); typedef struct { u16 ds; u16 es; u16 cs; u16 dsize; u16 esize; u16 csize; u16 offset; u16 irq; u16 revision; u16 ioport1; u16 ioextent1; u16 ioport2; u16 ioextent2; } defint; extern defint intsegs; #define DEFINT_REVISION 1 /*---------------------------------------------------------------------------*/ /* Die folgenden Aufrufe werden durch den Treiberkern bereitgestellt */ /* The following procedures are supplied by the driver library */ /*---------------------------------------------------------------------------*/ /* Einige einfache Ausgaberoutinen, die die Verwendung von printf() ersparen */ /* Nur waehrend der Initialisierung in init_device() verwenden!! */ /* Some simple console output routines, that make printf() unnecessary */ /* May only be used during initialisation, inside init_device()!! */ void far pch(byte character); /* Gibt ein Zeichen auf die Konsole aus Print a character onto the console */ void far pstr(byte near *string); /* Gibt einen C-String auf die Konsole aus Print a C string onto the console */ void far pnum(u16 num); /* Gibt einen numerischen Wert dezimal aus Print a decimal numerical value onto the console */ void far phex(u16 hex); /* Gibt einen numerischen Wert hexadezimal aus Print a hexadecimal numerical value onto the console */ #endif // _WIN32 baycomepp-0.10.orig/flexdrv/resource.h0100644000175100017510000000103107142113147016050 0ustar abaaba#define IDD_DIALOG1 101 #define IDC_PORT 1000 #define IDC_MODE 1001 #define IDC_TXDELAY 1002 #define IDC_FULLDUPLEX 1003 #define IDC_EXTMODEM 1004 #define IDC_BITRATE 1005 #define IDC_PTTMUTE 1006 #define IDC_FORCEHWEPP 1007 #define IDC_SWEMULEPP 1008 #define IDC_SWEMULECP 1009 #define IDC_STATIC -1 baycomepp-0.10.orig/ntdrv/0042755000175100017510000000000007511777225013562 5ustar abaababaycomepp-0.10.orig/ntdrv/Makefile.in0100644000175100017510000001755607511777225015640 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ EXTRA_DIST = eppflex.c eppflex.rc eppflex.h eppflex.inf eppflex.sys testload.c sources makefile @WIN32_TRUE@noinst_PROGRAMS = @WIN32_TRUE@testload @WIN32_TRUE@testload_SOURCES = @WIN32_TRUE@testload.c mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = @WIN32_TRUE@noinst_PROGRAMS = testload$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ @WIN32_TRUE@testload_OBJECTS = testload.$(OBJEXT) testload_LDADD = $(LDADD) testload_DEPENDENCIES = testload_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(testload_SOURCES) OBJECTS = $(testload_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps ntdrv/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstPROGRAMS: clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) distclean-noinstPROGRAMS: maintainer-clean-noinstPROGRAMS: .c.o: $(COMPILE) -c $< # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: testload$(EXEEXT): $(testload_OBJECTS) $(testload_DEPENDENCIES) @rm -f testload$(EXEEXT) $(LINK) $(testload_LDFLAGS) $(testload_OBJECTS) $(testload_LDADD) $(LIBS) 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 = ntdrv 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-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 $(PROGRAMS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-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-noinstPROGRAMS mostlyclean-compile \ mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstPROGRAMS clean-compile clean-tags clean-generic \ mostlyclean-am clean: clean-am distclean-am: distclean-noinstPROGRAMS distclean-compile distclean-tags \ distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstPROGRAMS \ maintainer-clean-compile 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-noinstPROGRAMS distclean-noinstPROGRAMS \ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile 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: baycomepp-0.10.orig/ntdrv/Makefile.am0100644000175100017510000000025407141340244015574 0ustar abaabaEXTRA_DIST = eppflex.c eppflex.rc eppflex.h eppflex.inf eppflex.sys testload.c sources makefile if WIN32 noinst_PROGRAMS = testload testload_SOURCES = testload.c endif baycomepp-0.10.orig/ntdrv/eppflex.c0100644000175100017510000003746407245777150015403 0ustar abaaba #include "ntddk.h" #include "string.h" #include "ddk/parallel.h" #include "eppflex.h" #define printk DbgPrint #define kmalloc(size) ExAllocatePool(NonPagedPool,size) #define kfree ExFreePool #if 0 #define VLOG(x) do { x; } while (0) #else #define VLOG(x) do { } while (0) #endif #if 1 #define ELOG(x) do { x; } while (0) #else #define ELOG(x) do { } while (0) #endif struct eppflex { unsigned int dummy; }; struct eppflexfile { PDEVICE_OBJECT pdo; PFILE_OBJECT pdfo; PARALLEL_PORT_INFORMATION info; PARALLEL_PNP_INFORMATION pnpinfo; }; static NTSTATUS parcompletion(PDEVICE_OBJECT devobj, PIRP irp, PKEVENT event) { KeSetEvent(event, 0, FALSE); return STATUS_MORE_PROCESSING_REQUIRED; } static NTSTATUS callparport(struct eppflexfile *fs, unsigned long ioctlcode, void *buffer, unsigned int inlen, unsigned int outlen, LARGE_INTEGER *timeout) { NTSTATUS status; PIRP irp; PIO_STACK_LOCATION irpsp; KEVENT event; irp = IoAllocateIrp((CCHAR)(fs->pdo->StackSize+1), FALSE); if (!irp) return STATUS_INSUFFICIENT_RESOURCES; irpsp = IoGetNextIrpStackLocation(irp); irpsp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; irpsp->Parameters.DeviceIoControl.OutputBufferLength = outlen; irpsp->Parameters.DeviceIoControl.InputBufferLength = inlen; irpsp->Parameters.DeviceIoControl.IoControlCode = ioctlcode; irp->AssociatedIrp.SystemBuffer = buffer; KeInitializeEvent(&event, NotificationEvent, FALSE); IoSetCompletionRoutine(irp, parcompletion, &event, TRUE, TRUE, TRUE); status = IoCallDriver(fs->pdo, irp); if (!NT_SUCCESS(status)) { IoFreeIrp(irp); return status; } status = KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, timeout); if (status == STATUS_TIMEOUT) { IoCancelIrp(irp); status = KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL); } status = irp->IoStatus.Status; IoFreeIrp(irp); return status; } static NTSTATUS read_port(PDEVICE_OBJECT devobj, PIRP irp, PUCHAR port) { NTSTATUS status = STATUS_SUCCESS; PIO_STACK_LOCATION irpsp; PFILE_OBJECT fileobj; struct eppflex *s = devobj->DeviceExtension; struct eppflexfile *fs; struct eppflex_rwdata *rw = (struct eppflex_rwdata *)irp->AssociatedIrp.SystemBuffer; irpsp = IoGetCurrentIrpStackLocation(irp); fileobj = irpsp->FileObject; fs = fileobj->FsContext; irp->IoStatus.Information = 0; if (irpsp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(struct eppflex_rwdata)) status = STATUS_INVALID_PARAMETER; else if ((port < fs->info.Controller || port >= fs->info.Controller+fs->info.SpanOfController) && (port < fs->pnpinfo.EcpController || port >= fs->pnpinfo.EcpController+fs->pnpinfo.SpanOfEcpController)) status = STATUS_ACCESS_VIOLATION; else { rw->data = READ_PORT_UCHAR(port); irp->IoStatus.Information = sizeof(struct eppflex_rwdata); } irp->IoStatus.Status = status; IoCompleteRequest(irp, IO_NO_INCREMENT); return status; } static NTSTATUS write_port(PDEVICE_OBJECT devobj, PIRP irp, PUCHAR port) { NTSTATUS status = STATUS_SUCCESS; PIO_STACK_LOCATION irpsp; PFILE_OBJECT fileobj; struct eppflex *s = devobj->DeviceExtension; struct eppflexfile *fs; struct eppflex_rwdata *rw = (struct eppflex_rwdata *)irp->AssociatedIrp.SystemBuffer; irpsp = IoGetCurrentIrpStackLocation(irp); fileobj = irpsp->FileObject; fs = fileobj->FsContext; irp->IoStatus.Information = 0; if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(struct eppflex_rwdata)) status = STATUS_INVALID_PARAMETER; else if ((port < fs->info.Controller || port >= fs->info.Controller+fs->info.SpanOfController) && (port < fs->pnpinfo.EcpController || port >= fs->pnpinfo.EcpController+fs->pnpinfo.SpanOfEcpController)) status = STATUS_ACCESS_VIOLATION; else { WRITE_PORT_UCHAR(port, rw->data); } irp->IoStatus.Status = status; IoCompleteRequest(irp, IO_NO_INCREMENT); return status; } static NTSTATUS frob_port(PDEVICE_OBJECT devobj, PIRP irp, PUCHAR port) { NTSTATUS status = STATUS_SUCCESS; PIO_STACK_LOCATION irpsp; PFILE_OBJECT fileobj; struct eppflex *s = devobj->DeviceExtension; struct eppflexfile *fs; struct eppflex_rwdata *rw = (struct eppflex_rwdata *)irp->AssociatedIrp.SystemBuffer; UCHAR data; irpsp = IoGetCurrentIrpStackLocation(irp); fileobj = irpsp->FileObject; fs = fileobj->FsContext; irp->IoStatus.Information = 0; if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(struct eppflex_rwdata) || irpsp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(struct eppflex_rwdata)) status = STATUS_INVALID_PARAMETER; else if ((port < fs->info.Controller || port >= fs->info.Controller+fs->info.SpanOfController) && (port < fs->pnpinfo.EcpController || port >= fs->pnpinfo.EcpController+fs->pnpinfo.SpanOfEcpController)) status = STATUS_ACCESS_VIOLATION; else { data = READ_PORT_UCHAR(port); data = (data & ~rw->mask) ^ rw->data; WRITE_PORT_UCHAR(port, data); rw->data = data; irp->IoStatus.Information = sizeof(struct eppflex_rwdata); } irp->IoStatus.Status = status; IoCompleteRequest(irp, IO_NO_INCREMENT); return status; } static NTSTATUS ioctl(PDEVICE_OBJECT devobj, PIRP irp) { NTSTATUS status = STATUS_NOT_IMPLEMENTED; PIO_STACK_LOCATION irpsp; PFILE_OBJECT fileobj; struct eppflex *s = devobj->DeviceExtension; struct eppflexfile *fs; irpsp = IoGetCurrentIrpStackLocation(irp); fileobj = irpsp->FileObject; fs = fileobj->FsContext; VLOG(printk("eppflex: ioctl\n")); if (!fs) { status = irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED; IoCompleteRequest(irp, IO_NO_INCREMENT); return status; } switch (irpsp->Parameters.DeviceIoControl.IoControlCode) { case IOCTL_EPPFLEX_READ_DATA: return read_port(devobj, irp, fs->info.Controller); case IOCTL_EPPFLEX_WRITE_DATA: return write_port(devobj, irp, fs->info.Controller); case IOCTL_EPPFLEX_READ_STATUS: return read_port(devobj, irp, fs->info.Controller + 1); case IOCTL_EPPFLEX_WRITE_STATUS: return write_port(devobj, irp, fs->info.Controller + 1); case IOCTL_EPPFLEX_READ_CONTROL: return read_port(devobj, irp, fs->info.Controller + 2); case IOCTL_EPPFLEX_WRITE_CONTROL: return write_port(devobj, irp, fs->info.Controller + 2); case IOCTL_EPPFLEX_FROB_CONTROL: return frob_port(devobj, irp, fs->info.Controller + 2); case IOCTL_EPPFLEX_READ_ECONTROL: return read_port(devobj, irp, fs->pnpinfo.EcpController + 2); case IOCTL_EPPFLEX_WRITE_ECONTROL: return write_port(devobj, irp, fs->pnpinfo.EcpController + 2); case IOCTL_EPPFLEX_FROB_ECONTROL: return frob_port(devobj, irp, fs->pnpinfo.EcpController + 2); case IOCTL_EPPFLEX_READ_CONFIGA: return read_port(devobj, irp, fs->pnpinfo.EcpController); case IOCTL_EPPFLEX_WRITE_CONFIGA: return write_port(devobj, irp, fs->pnpinfo.EcpController); case IOCTL_EPPFLEX_READ_CONFIGB: return read_port(devobj, irp, fs->pnpinfo.EcpController + 1); case IOCTL_EPPFLEX_WRITE_CONFIGB: return write_port(devobj, irp, fs->pnpinfo.EcpController + 1); case IOCTL_EPPFLEX_READ_EPPADDR: return read_port(devobj, irp, fs->info.Controller + 3); case IOCTL_EPPFLEX_WRITE_EPPADDR: return write_port(devobj, irp, fs->info.Controller + 3); case IOCTL_EPPFLEX_READ_EPPDATA: return read_port(devobj, irp, fs->info.Controller + 4); case IOCTL_EPPFLEX_WRITE_EPPDATA: return write_port(devobj, irp, fs->info.Controller + 4); } irp->IoStatus.Status = status; IoCompleteRequest(irp, IO_NO_INCREMENT); return status; } static NTSTATUS create(PDEVICE_OBJECT devobj, PIRP irp) { NTSTATUS status; PIO_STACK_LOCATION irpsp; PFILE_OBJECT fileobj; WCHAR ppname[22] = L"\\Device\\ParallelPort0"; UNICODE_STRING uppname; struct eppflex *s = devobj->DeviceExtension; struct eppflexfile *fs; ULONG devnr = 0; LARGE_INTEGER timeout; unsigned int i; VLOG(printk("eppflex: create\n")); irpsp = IoGetCurrentIrpStackLocation(irp); fileobj = irpsp->FileObject; status = STATUS_NO_MEMORY; fileobj->FsContext = fs = kmalloc(sizeof(struct eppflexfile)); if (!fs) goto out; VLOG(printk("eppflex: filename length: %u\n", fileobj->FileName.Length)); for (i = 0; i < fileobj->FileName.Length; i++) { VLOG(printk("eppflex: fn[%2u]: %04x\n", i, fileobj->FileName.Buffer[i])); if (fileobj->FileName.Buffer[i] == (WCHAR)'\\') continue; if (fileobj->FileName.Buffer[i] < (WCHAR)'0' || fileobj->FileName.Buffer[i] > (WCHAR)'9') break; devnr = 10 * devnr + fileobj->FileName.Buffer[i] - (WCHAR)'0'; } VLOG(printk("eppflex: Device number %lu\n", devnr)); status = STATUS_INVALID_PARAMETER; if (devnr > 9) goto out; ppname[20] = ((WCHAR)'0') + (WCHAR)devnr; RtlInitUnicodeString(&uppname, ppname); status = IoGetDeviceObjectPointer(&uppname, STANDARD_RIGHTS_ALL, &fs->pdfo, &fs->pdo); if (!NT_SUCCESS(status)) { ELOG(printk("eppflex: cannot open parallel port %u\n", devnr)); goto out; } timeout.QuadPart = -(LONGLONG)10*1000*500; /* 500ms, in 100ns units */ status = callparport(fs, IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO, &fs->info, 0, sizeof(fs->info), &timeout); if (!NT_SUCCESS(status)) { ELOG(printk("eppflex: GET_PARALLEL_PORT_INFO error 0x%lx\n", status)); goto out; } status = callparport(fs, IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO, &fs->pnpinfo, 0, sizeof(fs->pnpinfo), &timeout); if (!NT_SUCCESS(status)) { ELOG(printk("eppflex: warning: GET_PARALLEL_PNP_INFO error 0x%lx\n", status)); fs->pnpinfo.EcpController = fs->info.Controller + 0x400; fs->pnpinfo.SpanOfEcpController = fs->info.SpanOfController; fs->pnpinfo.HardwareCapabilities = 0; fs->pnpinfo.FifoDepth = 0; fs->pnpinfo.FifoWidth = 0; } VLOG(printk("eppflex: ioaddr: 0x%x(%u) ecpioaddr: 0x%x(%u) cap: 0x%x FIFO: %d,%d\n", fs->info.Controller, fs->info.SpanOfController, fs->pnpinfo.EcpController, fs->pnpinfo.SpanOfEcpController, fs->pnpinfo.HardwareCapabilities, fs->pnpinfo.FifoDepth, fs->pnpinfo.FifoWidth)); timeout.QuadPart = -(LONGLONG)10*1000*50; /* 50ms, in 100ns units */ status = callparport(fs, IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE, NULL, 0, 0, &timeout); if (!NT_SUCCESS(status)) { ELOG(printk("eppflex: PARALLEL_PORT_ALLOCATE error 0x%lx\n", status)); goto out; } status = STATUS_SUCCESS; out: if (!NT_SUCCESS(status) && fs) { kfree(fs); fileobj->FsContext = NULL; } irp->IoStatus.Status = status; irp->IoStatus.Information = 0L; IoCompleteRequest(irp, IO_NO_INCREMENT); return status; } static NTSTATUS close(PDEVICE_OBJECT devobj, PIRP irp) { NTSTATUS status; PIO_STACK_LOCATION irpsp; PFILE_OBJECT fileobj; struct eppflex *s = devobj->DeviceExtension; struct eppflexfile *fs; LARGE_INTEGER timeout; irpsp = IoGetCurrentIrpStackLocation(irp); fileobj = irpsp->FileObject; fs = fileobj->FsContext; VLOG(printk("eppflex: close\n")); if (fs) { timeout.QuadPart = -(LONGLONG)10*1000*50; /* 50ms, in 100ns units */ status = callparport(fs, IOCTL_INTERNAL_RELEASE_PARALLEL_PORT_INFO, NULL, 0, 0, &timeout); if (!NT_SUCCESS(status)) ELOG(printk("eppflex: RELEASE_PARALLEL_PORT_INFO error 0x%lx\n", status)); status = callparport(fs, IOCTL_INTERNAL_PARALLEL_PORT_FREE, NULL, 0, 0, &timeout); if (!NT_SUCCESS(status)) ELOG(printk("eppflex: PARALLEL_PORT_FREE error 0x%lx\n", status)); ObDereferenceObject(fs->pdfo); kfree(fs); fileobj->FsContext = NULL; } status = irp->IoStatus.Status = STATUS_SUCCESS; irp->IoStatus.Information = 0L; IoCompleteRequest(irp, IO_NO_INCREMENT); return status; } static void unload(PDRIVER_OBJECT drvobj) { struct eppflex *s = drvobj->DeviceObject->DeviceExtension; UNICODE_STRING nameString, linkString; printk("eppflex: stop\n"); IoDeleteDevice(drvobj->DeviceObject); RtlInitUnicodeString(&linkString, L"\\DosDevices\\EPPFLEX" ); RtlInitUnicodeString(&nameString, L"\\Device\\eppflex" ); IoDeleteSymbolicLink(&linkString); } NTSTATUS DriverEntry(PDRIVER_OBJECT drvobj, PUNICODE_STRING RegistryPath) { UNICODE_STRING nameString, linkString; PDEVICE_OBJECT devobj; NTSTATUS status; struct eppflex *s; /* * Create the device object. */ RtlInitUnicodeString(&nameString, L"\\Device\\eppflex" ); status = IoCreateDevice(drvobj, sizeof(struct eppflex), &nameString, FILE_DEVICE_UNKNOWN, 0, TRUE, &devobj); if (!NT_SUCCESS(status)) return status; /* * Create the symbolic link so the VDD can find us. */ RtlInitUnicodeString( &linkString, L"\\DosDevices\\EPPFLEX" ); status = IoCreateSymbolicLink (&linkString, &nameString); if (!NT_SUCCESS(status)) { IoDeleteDevice(drvobj->DeviceObject); return status; } /* * Initialize the driver object with this device driver's entry points. */ drvobj->DriverUnload = unload; drvobj->MajorFunction[IRP_MJ_CREATE] = create; drvobj->MajorFunction[IRP_MJ_CLOSE] = close; drvobj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ioctl; s = devobj->DeviceExtension; /* * Initialize the device extension. */ printk("eppflex: started "__DATE__" "__TIME__"\n"); return STATUS_SUCCESS; } baycomepp-0.10.orig/ntdrv/eppflex.rc0100644000175100017510000000203107141330427015526 0ustar abaaba#include VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x0L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Baycom Hard- und Software GmbH\0" VALUE "FileDescription", "eppflex\0" VALUE "FileVersion", "1, 0, 0, 1\0" VALUE "InternalName", "Baycom EPPFLEX FlexNet kernel driver\0" VALUE "LegalCopyright", "Copyright 2000\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "eppflex.sys\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "EPPFLEX\0" VALUE "ProductVersion", "1.00a\0" VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END baycomepp-0.10.orig/ntdrv/eppflex.h0100644000175100017510000000542307143577022015367 0ustar abaaba #ifndef CTL_CODE #define CTL_CODE(DeviceType,Function,Method,Access) (((DeviceType)<<16)|((Access)<<14)|((Function)<<2)|(Method)) #endif #ifndef METHOD_BUFFERED #define METHOD_BUFFERED 0 #define METHOD_IN_DIRECT 1 #define METHOD_OUT_DIRECT 2 #define METHOD_NEITHER 3 #endif #ifndef FILE_ANY_ACCESS #define FILE_ANY_ACCESS 0 #define FILE_READ_ACCESS (0x0001) #define FILE_WRITE_ACCESS (0x0002) #endif #define FILE_DEVICE_EPPFLEX 0x80aa struct eppflex_rwdata { unsigned char data; unsigned char mask; }; #define IOCTL_EPPFLEX_READ_DATA CTL_CODE(FILE_DEVICE_EPPFLEX, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_DATA CTL_CODE(FILE_DEVICE_EPPFLEX, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_STATUS CTL_CODE(FILE_DEVICE_EPPFLEX, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_STATUS CTL_CODE(FILE_DEVICE_EPPFLEX, 3, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_CONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_CONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_FROB_CONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_ECONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_ECONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_FROB_ECONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_CONFIGA CTL_CODE(FILE_DEVICE_EPPFLEX, 10, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_CONFIGA CTL_CODE(FILE_DEVICE_EPPFLEX, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_CONFIGB CTL_CODE(FILE_DEVICE_EPPFLEX, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_CONFIGB CTL_CODE(FILE_DEVICE_EPPFLEX, 13, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_EPPADDR CTL_CODE(FILE_DEVICE_EPPFLEX, 14, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_EPPADDR CTL_CODE(FILE_DEVICE_EPPFLEX, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_EPPDATA CTL_CODE(FILE_DEVICE_EPPFLEX, 16, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_EPPDATA CTL_CODE(FILE_DEVICE_EPPFLEX, 17, METHOD_BUFFERED, FILE_ANY_ACCESS) /* only W9x */ #define IOCTL_EPPFLEX_ACQUIREPORT CTL_CODE(FILE_DEVICE_EPPFLEX, 64, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_RELEASEPORT CTL_CODE(FILE_DEVICE_EPPFLEX, 65, METHOD_BUFFERED, FILE_ANY_ACCESS) baycomepp-0.10.orig/ntdrv/eppflex.inf0100644000175100017510000000244407141327167015715 0ustar abaaba[Version] Signature="$CHICAGO$" Class=Ports provider=%MSFT% ;LayoutFile=layout.inf DriverVer=07/21/2000,1.0.0.1 [SourceDisksNames] 1="EPPFLEX Installation Disk",,,"" [SourceDisksFiles] eppflex.sys = 1,, [Manufacturer] %MfgName%=Baycom [Baycom] %EppFlexDev.DeviceDesc%=EPPFLEX_Dev ;[PreCopySection] ;HKR,,NoSetupUI,,1 [DestinationDirs] EPPFLEX.Files.Ext = 10,System32\Drivers [EPPFLEX_Dev.NT] CopyFiles=EPPFLEX.Files.Ext AddReg=EPPFLEX.AddReg [EPPFLEX_Dev.NT.Services] Addservice = EPPFLEX, 0x00000002, EPPFLEX.AddService [EPPFLEX.AddService] DisplayName = %EPPFLEX.SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\System32\Drivers\eppflex.sys LoadOrderGroup = Base [EPPFLEX.AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,eppflex.sys ;HKLM,"System\Currentcontrolset\Services\USBFLEX\Parameters","TotalBuffers",0x10001,256 [EPPFLEX.Files.Ext] eppflex.sys ;---------------------------------------------------------------; [Strings] MSFT="Baycom" MfgName="Baycom Hard- und Software GmbH" EppFlexDev.DeviceDesc="EPPFLEX Radio Modem" EPPFLEX.SvcDesc="eppflex.sys EPPFLEX Modem Driver" baycomepp-0.10.orig/ntdrv/eppflex.sys0100755000175100017510000001271507141330733015755 0ustar abaabaMZ@ !L!This program cannot be run in DOS mode. $O ӊ ӊ ӊ ҊӊRӊ]Պ ӊي ӊRich ӊPELb9  /  w < ` T \.text6 @  h.rdata @H.data @INIT< @ .rsrc  @B.reloc@B\Device\eppflex\DosDevices\EPPFLEXeppflex: started Jul 31 2000 18:59:10 UV5 WEhP֋}EPjjEj"PjW, |UEhP֍EPEP } w( )hG4 G8G@ Gp8Y3_^UM Q`B@ R VD$pjpw@@^@@j@@@Q@@@\@ @0@0@0@@PQu\p0&p03@0뺋@0뻋@@@PQu&@PQu)2A ] "',=BGLQYas     UQVu eWF`~ HI fxs ?QE;r SY;[rQ0;rI4;sP }F2ҋΉ~ _^ UQVu eWF`~ HI fxs 9AU;r SY;[rA0;rI4;sPR }2ҋΉ~ _^ UQSVu eWF`~ HI fxr\xrVQE;r Y;rQ0;r3I4;s*P _"2] u u FEE }2ҋΉ~ _^[ \Device\ParallelPort0eppflex: cannot open parallel port %u eppflex: GET_PARALLEL_PORT_INFO error 0x%lx eppflex: GET_PARALLEL_PNP_INFO error 0x%lx eppflex: PARALLEL_PORT_ALLOCATE error 0x%lx UDE SVW@`ej Y}hDdk jxXj s %{0ev2S4f f\tf0r f9wEɍDAЉEEBB9}rыE 0fEEPEP FVPEhP } uhMEPj FjPh0VE}WhPEPjPF(jPhTV3;}WhH)MMQPPPh,VE^}WhtYY3} V c M 2҃ay _^[.\eppflex.c(1) | (1) | (1) ? (parcompletion) != NULL : TRUEUESV3ۋWS@0P< ;u F`M$SSHMHM H EF EP8 > DžuSj?h& h2 4 F`M$։xH @E0 ;|-u=T ESSSP=uVL SSSESP׋~V$ _^[Ujju@ ] eppflex: RELEASE_PARALLEL_PORT_INFO error 0x%lx eppflex: PARALLEL_PORT_FREE error 0x%lx UQQM SVWA`3ۋxw ;tgMEPSSSh<VE^w;} PhX YYEPSSShVT;} Ph YYND V M _ 2҉YY _^3[eppflex: stop \DosDevices\EPPFLEX\Device\eppflexUVhN 9EYp( 5 Eh^ P֍Eh P֍EPH ^%P  0 br~<x Jb9b9b9=Ux< (     0 br~<x J-DbgPrint%IoDeleteDevice!IoCreateSymbolicLinkIoCreateDevicedRtlInitUnicodeStringIofCompleteRequestGExFreePool=IoGetDeviceObjectPointer:ExAllocatePoolWithTag2IoFreeIrpIoCancelIrpKeWaitForSingleObjectIofCallDriverRtlAssertKeInitializeEventIoAllocateIrpKeSetEventObfDereferenceObject'IoDeleteSymbolicLinkntoskrnl.exeVREAD_PORT_UCHAR\WRITE_PORT_UCHARHAL.dll0 H4VS_VERSION_INFO?StringFileInfo040904b0Comments^CompanyNameBaycom Hard- und Software GmbH8FileDescriptioneppflex6 FileVersion1, 0, 0, 1j%InternalNameBaycom EPPFLEX FlexNet kernel driverFLegalCopyrightCopyright 2000(LegalTrademarks@ OriginalFilenameeppflex.sys PrivateBuild0ProductNameEPPFLEX0ProductVersion1.00a SpecialBuildDVarFileInfo$Translation 83A3^3j3{333333333444444444444444444445566t66677E8Y8g888899|9999999::1:J::;%;,;@;;;;;;;;objchk\i386\eppflex.sys/l.~ Ӭx $ӡ c > е  Ӧ INB10a9G:\nteppflex\eppflex\objchk\i386\eppflex.pdbbaycomepp-0.10.orig/ntdrv/testload.c0100755000175100017510000001131107141327367015535 0ustar abaaba#include #include static void getdir(void) { HKEY key; char buf[256]; DWORD blen, rtype; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\FlexNet", 0, KEY_READ, &key) != ERROR_SUCCESS) { fprintf(stderr, "Cannot open registry key\n"); return; } blen = sizeof(buf); if (RegQueryValueEx(key, "Home", NULL, &rtype, buf, &blen) != ERROR_SUCCESS || rtype != REG_SZ) fprintf(stderr, "Invalid/Nonexisting Registry Key/Type\n"); else printf("FlexNet Directory %s\n", buf); RegCloseKey(key); } #define SERVICENAME "eppflex" #define SERVICEDISPLAYNAME "Baycom EPPFLEX" //#define SERVICEBINARY "\"\\??\\g:\\nteppflex\\eppflex.sys\"" #define SERVICEBINARY "system32\\drivers\\eppflex.sys" static int start_service(void) { int ret = -1; SC_HANDLE hscm, hserv; hscm = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if (!hscm) { fprintf(stderr, "Cannot open SC manager, error 0x%08lx\n", GetLastError()); return -1; } hserv = CreateService(hscm, SERVICENAME, SERVICEDISPLAYNAME, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, SERVICEBINARY, NULL, NULL, NULL, NULL, NULL); if (!hserv) { fprintf(stderr, "Cannot create service, error 0x%08lx\n", GetLastError()); hserv = OpenService(hscm, SERVICENAME, SERVICE_ALL_ACCESS); if (!hserv) { fprintf(stderr, "Cannot open service, error 0x%08lx\n", GetLastError()); goto closescm; } } if (!StartService(hserv, 0, NULL)) { fprintf(stderr, "Cannot start service, error 0x%08lx\n", GetLastError()); goto closeserv; } printf("Service %s started successfully\n", SERVICENAME); ret = 0; closeserv: if (!CloseServiceHandle(hserv)) fprintf(stderr, "Cannot close service handle, error 0x%08lx\n", GetLastError()); closescm: if (!CloseServiceHandle(hscm)) fprintf(stderr, "Cannot close service manager handle, error 0x%08lx\n", GetLastError()); return ret; } static int stop_service(void) { int ret = -1; SC_HANDLE hscm, hserv; SERVICE_STATUS sstat; hscm = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if (!hscm) { fprintf(stderr, "Cannot open SC manager, error 0x%08lx\n", GetLastError()); return -1; } hserv = OpenService(hscm, SERVICENAME, SERVICE_ALL_ACCESS); if (!hserv) { fprintf(stderr, "Cannot open service, error 0x%08lx\n", GetLastError()); goto closescm; } ret = 0; if (!ControlService(hserv, SERVICE_CONTROL_STOP, &sstat)) { fprintf(stderr, "Cannot delete service, error 0x%08lx\n", GetLastError()); ret = -1; } if (!DeleteService(hserv)) { fprintf(stderr, "Cannot delete service, error 0x%08lx\n", GetLastError()); ret = -1; } if (!ret) printf("Service %s stopped successfully\n", SERVICENAME); if (!CloseServiceHandle(hserv)) fprintf(stderr, "Cannot close service handle, error 0x%08lx\n", GetLastError()); closescm: if (!CloseServiceHandle(hscm)) fprintf(stderr, "Cannot close service manager handle, error 0x%08lx\n", GetLastError()); return ret; } static int open_driver(void) { HANDLE hdrv; hdrv = CreateFile("\\\\.\\eppflex\\0", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hdrv == INVALID_HANDLE_VALUE) { fprintf(stderr, "Cannot open driver, error 0x%08lx\n", GetLastError()); return -1; } CloseHandle(hdrv); return 0; } int main(int argc, char *argv[]) { getdir(); if (argc < 2) { fprintf(stderr, "usage: testload [r|s|o]\n"); exit(1); } if (!strcmp(argv[1], "r")) exit(start_service() ? 1 : 0); if (!strcmp(argv[1], "s")) exit(stop_service() ? 1 : 0); if (!strcmp(argv[1], "o")) exit(open_driver() ? 1 : 0); fprintf(stderr, "Invalid command: %s\n", argv[1]); exit(1); } baycomepp-0.10.orig/ntdrv/sources0100755000175100017510000000013507141340212015142 0ustar abaabaTARGETNAME=eppflex TARGETPATH=obj TARGETTYPE=DRIVER SOURCES=eppflex.c \ eppflex.rc baycomepp-0.10.orig/ntdrv/makefile0100755000175100017510000000037407141340210015237 0ustar abaaba# # DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source # file to this component. This file merely indirects to the real make file # that is shared by all the components of Windows NT # !INCLUDE $(NTMAKEENV)\makefile.def baycomepp-0.10.orig/w9xdrv/0042755000175100017510000000000007511777226013671 5ustar abaababaycomepp-0.10.orig/w9xdrv/Makefile.in0100644000175100017510000001247007511777225015734 0ustar abaaba# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 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@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ DRVLIBOBJS = @DRVLIBOBJS@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HAVE_BITTYPES = @HAVE_BITTYPES@ HAVE_DIRECTX = @HAVE_DIRECTX@ HAVE_IFRNEWNAME = @HAVE_IFRNEWNAME@ HAVE_IOFUNCS = @HAVE_IOFUNCS@ HAVE_LIB = @HAVE_LIB@ HAVE_MKISS = @HAVE_MKISS@ HAVE_PPKDRV = @HAVE_PPKDRV@ HAVE_PPUSER = @HAVE_PPUSER@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ M_PI = @M_PI@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ POSUB = @POSUB@ RANLIB = @RANLIB@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ EXTRA_DIST = MAKEFILE SOURCES eppfctrl.asm eppflex.c eppflex.def eppflex.h eppflex.vxd eppflex.rc mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = 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 w9xdrv/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 = w9xdrv 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-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) AM_INSTALL_PROGRAM_FLAGS=-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-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 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: baycomepp-0.10.orig/w9xdrv/Makefile.am0100644000175100017510000000014207144027743015707 0ustar abaabaEXTRA_DIST = MAKEFILE SOURCES eppfctrl.asm eppflex.c eppflex.def eppflex.h eppflex.vxd eppflex.rc baycomepp-0.10.orig/w9xdrv/MAKEFILE0100644000175100017510000000366707144030174014762 0ustar abaabaBUILD_TYPE=base !INCLUDE $(BASEDIR)\inc\master.mk # sample make file for building vxd virtual device for Windows NAME = eppflex # Definitions for the debug level !ifdef DEBUG DDEBUG =-DDEBLEVEL=1 -DDEBUG !else DDEBUG =-DDEBLEVEL=0 !endif # Definitions for MASM 6 Assembler CC = cl ASM = ml ASMENV = ML CFLAGS = -DWIN32 -DCON -Di386 -D_X86_ -D_NTWIN -W3 -Gs -D_DEBUG -Zi -I$(INC32) CVXDFLAGS = -Oi -Zdp -Gs -c -DIS_32 -Zl -DDEBLEVEL=1 -DDEBUG -DWANTVXDWRAPS=1 -I$(INC32) LFLAGS = -machine:i386 -debug:notmapped,full -debugtype:cv -VXD $(BASEDIR)\lib\i386\free\vxdwraps.clb AFLAGS = -coff -DBLD_COFF -DIS_32 -W2 -Zd -c -Cx -DMASM6 -DDEBLEVEL=1 -DDEBUG -I$(INC32) # MASM 6 only inference rules .asm{obj\i386}.obj: set $(ASMENV)=$(AFLAGS) $(ASM) -Fo$*.obj $< .c{obj\i386}.obj: $(CC) $(CVXDFLAGS) -Fo$@ %s .rc{obj\i386}.res: $(RC16B) -r -i $(INC16);$(INC32) -fo$@ %s all : obj\i386\$(NAME).vxd OBJS = obj\i386\eppflex.obj obj\i386\eppfctrl.obj obj\i386\vxdstub.exe: obj\i386\vxdstub.obj !ifndef PASS0ONLY @echo link -OUT:$@ $(LINK16) obj\i386\vxdstub.obj; !endif obj\i386\generic.obj: generic.asm obj\i386\$(NAME).vxd: $(NAME).def $(OBJS) obj\i386\$(NAME).res !ifndef PASS0ONLY @echo link -OUT:$@ link @< Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT, \ _OnSysDynamicDeviceExit, cCall, Control_Dispatch W32_DEVICEIOCONTROL, \ _OnW32DeviceIoControl, cCall, clc ret EndProc ControlProc VxD_LOCKED_CODE_ENDS END baycomepp-0.10.orig/w9xdrv/eppflex.c0100644000175100017510000002644307143674310015473 0ustar abaaba/* * Thomas Sailer, (C) 2000 */ #include #include #include #include #include #include /* must be included before VXDWRAPS.H */ #include #include #include #include "eppflex.h" #pragma VxD_LOCKED_CODE_SEG #pragma VxD_LOCKED_DATA_SEG #define printk(x) Out_Debug_String(x) #define MAXPORTS 4 static struct portconfig { unsigned int addr0, addr0end; unsigned int addr1, addr1end; int irq; int dma; } portconfig[MAXPORTS]; static DWORD porthandle = 0; static PFN conthandler = NULL; static unsigned int portnr; static DWORD StealNotifyHandler( void *RefData, DWORD dwNotification ) { /* steal handler: we do not allow anyone to steal our port */ return FALSE; } static UCHAR inb(WORD port) { _asm { mov dx,[port] in al,dx jmp del1 del1: jmp del2 del2: xor ah,ah } } static void outb(UCHAR data, WORD port) { _asm { mov dx,[port] mov al,byte ptr data out dx,al jmp del1 del1: jmp del2 del2: } } static void releaseport(void) { if (!conthandler) return; (*conthandler)(RELEASE_RESOURCE, porthandle, StealNotifyHandler); porthandle = 0; } static int acquireport(unsigned int port) { char lptname[] = "LPTx"; int ret; if (porthandle) releaseport(); porthandle = 0; if (port >= MAXPORTS) return ERROR_BAD_DEVICE; if (!portconfig[port].addr0) return ERROR_BAD_DEVICE; portnr = port; lptname[3] = '1' + port; conthandler = VCOMM_Get_Contention_Handler(lptname); if (!conthandler) return ERROR_BAD_DEVICE; porthandle = VCOMM_Map_Name_To_Resource(lptname); if (!porthandle) return ERROR_BAD_DEVICE; ret = (*conthandler)(ACQUIRE_RESOURCE, porthandle, StealNotifyHandler, porthandle, TRUE); if (!ret) return ERROR_BAD_DEVICE; return NO_ERROR; } /* * LPT find configuration stuff */ static void printknum(DWORD num) { char buf[16]; char *cp = &buf[16]; *--cp = 0; do { *--cp = '0' + (num % 10); num /= 10; } while (num); printk(cp); } static void printkhex(DWORD num, DWORD digits) { char buf[9]; char *cp = &buf[9]; *--cp = 0; if (digits > 8) digits = 8; if (!digits) return; do { if ((num & 15) >= 10) *--cp = 'A' - 10 + (num & 15); else *--cp = '0' + (num & 15); num >>= 4; digits--; } while (digits); printk(cp); } static void printdevid(DEVNODE dn) { char buf[MAX_DEVICE_ID_LEN]; if (CM_Get_Device_ID(dn, buf, sizeof(buf), 0) != CR_SUCCESS) return; printk("Device ID: "); printk(buf); printk("\n"); } static void nodefoundport(DEVNODE dn, unsigned int portnr) { LOG_CONF lc; RES_DES rd; IO_DES iod; IRQ_DES irqd; DMA_DES dmad; struct portconfig cfg; if (portnr >= MAXPORTS) { printk("Port number overflow\n"); return; } cfg.addr0 = cfg.addr0end = cfg.addr1 = cfg.addr1end = 0; cfg.irq = cfg.dma = -1; if (CM_Get_First_Log_Conf(&lc, dn, ALLOC_LOG_CONF) == CR_SUCCESS) { rd = (RES_DES)lc; while (CM_Get_Next_Res_Des(&rd, rd, ResType_IO, NULL, 0) == CR_SUCCESS) { if (CM_Get_Res_Des_Data(rd, &iod, sizeof(iod), 0) == CR_SUCCESS) { if (iod.IOD_Alloc_Base >= 0x400) { cfg.addr1 = iod.IOD_Alloc_Base; cfg.addr1end = iod.IOD_Alloc_End; } else { cfg.addr0 = iod.IOD_Alloc_Base; cfg.addr0end = iod.IOD_Alloc_End; } } } rd = (RES_DES)lc; while (CM_Get_Next_Res_Des(&rd, rd, ResType_IRQ, NULL, 0) == CR_SUCCESS) { if (CM_Get_Res_Des_Data(rd, &irqd, sizeof(irqd), 0) == CR_SUCCESS) { cfg.irq = irqd.IRQD_Alloc_Num; } } rd = (RES_DES)lc; while (CM_Get_Next_Res_Des(&rd, rd, ResType_DMA, NULL, 0) == CR_SUCCESS) { if (CM_Get_Res_Des_Data(rd, &dmad, sizeof(dmad), 0) == CR_SUCCESS) { cfg.dma = dmad.DD_Alloc_Chan; } } } if (cfg.addr0) portconfig[portnr] = cfg; printk("LPT"); printknum(portnr+1); printk(": IO Ranges: "); printkhex(cfg.addr0, 4); printk("-"); printkhex(cfg.addr0end, 4); printk(" "); printkhex(cfg.addr1, 4); printk("-"); printkhex(cfg.addr1end, 4); if (cfg.irq != -1) { printk(" IRQ "); printknum(cfg.irq); } if (cfg.dma != -1) { printk(" DMA "); printknum(cfg.dma); } printk("\n"); } static void nodeconfig(DEVNODE dn) { char key[MAX_VMM_REG_KEY_LEN]; char portname[64]; ULONG portsz; VMMHKEY hkey; if (CM_Get_DevNode_Key(dn, NULL, &key, sizeof(key), CM_REGISTRY_HARDWARE) == CR_SUCCESS) { portsz = sizeof(portname); if (_RegOpenKey(HKEY_LOCAL_MACHINE, key, &hkey) == ERROR_SUCCESS) { if (_RegQueryValueEx(hkey, "PORTNAME", NULL, NULL, portname, &portsz) == ERROR_SUCCESS) { printdevid(dn); printk("Port name: "); printk(portname); printk("\n"); if (portname[0] = 'L' && portname[1] == 'P' && portname[2] == 'T' && portname[4] == 0) nodefoundport(dn, portname[3] - '1'); } _RegCloseKey(hkey); } } } static void nodesubtree(DEVNODE dn) { DWORD dnch; do { nodeconfig(dn); if (CM_Get_Child(&dnch, dn, 0) == CR_SUCCESS) nodesubtree(dnch); } while (CM_Get_Sibling(&dn, dn, 0) == CR_SUCCESS); } static void retrieveconfig(void) { DEVNODE dn; CONFIGRET ret; ret = CM_Locate_DevNode(&dn, NULL, 0); if (ret != CR_SUCCESS) { printk("Locate_DevNode error: "); printknum(ret); printk("\n"); return; } nodesubtree(dn); } BOOL OnSysDynamicDeviceInit(void) { printk("eppflex: dynamic init\n"); memset(portconfig, 0, sizeof(portconfig)); retrieveconfig(); return TRUE; } BOOL OnSysDynamicDeviceExit(void) { printk("eppflex: dynamic exit\n"); if (porthandle) releaseport(); return TRUE; } static DWORD read_port(PDIOCPARAMETERS p, WORD port) { struct eppflex_rwdata *rwout = (struct eppflex_rwdata *)p->lpvOutBuffer; if (!porthandle) return ERROR_INVALID_PARAMETER; if (p->cbOutBuffer < sizeof(struct eppflex_rwdata)) return ERROR_INVALID_PARAMETER; if (!port) return ERROR_INVALID_PARAMETER; if ((port < portconfig[portnr].addr0 || port > portconfig[portnr].addr0end) && (port < portconfig[portnr].addr1 || port > portconfig[portnr].addr1end)) return ERROR_INVALID_PARAMETER; rwout->data = inb(port); if (p->lpcbBytesReturned) *((DWORD *)p->lpcbBytesReturned) = sizeof(struct eppflex_rwdata); return NO_ERROR; } static DWORD write_port(PDIOCPARAMETERS p, WORD port) { struct eppflex_rwdata *rwin = (struct eppflex_rwdata *)p->lpvInBuffer; if (!porthandle) return ERROR_INVALID_PARAMETER; if (p->cbInBuffer < sizeof(struct eppflex_rwdata)) return ERROR_INVALID_PARAMETER; if (!port) return ERROR_INVALID_PARAMETER; if ((port < portconfig[portnr].addr0 || port > portconfig[portnr].addr0end) && (port < portconfig[portnr].addr1 || port > portconfig[portnr].addr1end)) return ERROR_INVALID_PARAMETER; outb(rwin->data, port); if (p->lpcbBytesReturned) *((DWORD *)p->lpcbBytesReturned) = 0; return NO_ERROR; } static DWORD frob_port(PDIOCPARAMETERS p, WORD port) { struct eppflex_rwdata *rwin = (struct eppflex_rwdata *)p->lpvInBuffer; struct eppflex_rwdata *rwout = (struct eppflex_rwdata *)p->lpvOutBuffer; unsigned char data; if (!porthandle) return ERROR_INVALID_PARAMETER; if (p->cbInBuffer < sizeof(struct eppflex_rwdata) || p->cbOutBuffer < sizeof(struct eppflex_rwdata)) return ERROR_INVALID_PARAMETER; if (!port) return ERROR_INVALID_PARAMETER; if ((port < portconfig[portnr].addr0 || port > portconfig[portnr].addr0end) && (port < portconfig[portnr].addr1 || port > portconfig[portnr].addr1end)) return ERROR_INVALID_PARAMETER; data = inb(port); data = (data & ~rwin->mask) ^ rwin->data; outb(data, port); rwout->data = data; rwout->mask = rwin->mask; if (p->lpcbBytesReturned) *((DWORD *)p->lpcbBytesReturned) = sizeof(struct eppflex_rwdata); return NO_ERROR; } DWORD OnW32DeviceIoControl(PDIOCPARAMETERS p) { if (p->lpcbBytesReturned) *((DWORD *)p->lpcbBytesReturned) = 0; switch (p->dwIoControlCode) { case DIOC_OPEN: return NO_ERROR; case DIOC_CLOSEHANDLE: return NO_ERROR; case IOCTL_EPPFLEX_READ_DATA: return read_port(p, (WORD)(portconfig[portnr].addr0)); case IOCTL_EPPFLEX_WRITE_DATA: return write_port(p, (WORD)(portconfig[portnr].addr0)); case IOCTL_EPPFLEX_READ_STATUS: return read_port(p, (WORD)(portconfig[portnr].addr0 + 1)); case IOCTL_EPPFLEX_WRITE_STATUS: return write_port(p, (WORD)(portconfig[portnr].addr0 + 1)); case IOCTL_EPPFLEX_READ_CONTROL: return read_port(p, (WORD)(portconfig[portnr].addr0 + 2)); case IOCTL_EPPFLEX_WRITE_CONTROL: return write_port(p, (WORD)(portconfig[portnr].addr0 + 2)); case IOCTL_EPPFLEX_FROB_CONTROL: return frob_port(p, (WORD)(portconfig[portnr].addr0 + 2)); case IOCTL_EPPFLEX_READ_ECONTROL: return read_port(p, (WORD)(portconfig[portnr].addr1 + 2)); case IOCTL_EPPFLEX_WRITE_ECONTROL: return write_port(p, (WORD)(portconfig[portnr].addr1 + 2)); case IOCTL_EPPFLEX_FROB_ECONTROL: return frob_port(p, (WORD)(portconfig[portnr].addr1 + 2)); case IOCTL_EPPFLEX_READ_CONFIGA: return read_port(p, (WORD)(portconfig[portnr].addr1)); case IOCTL_EPPFLEX_WRITE_CONFIGA: return write_port(p, (WORD)(portconfig[portnr].addr1)); case IOCTL_EPPFLEX_READ_CONFIGB: return read_port(p, (WORD)(portconfig[portnr].addr1 + 1)); case IOCTL_EPPFLEX_WRITE_CONFIGB: return write_port(p, (WORD)(portconfig[portnr].addr1 + 1)); case IOCTL_EPPFLEX_READ_EPPADDR: return read_port(p, (WORD)(portconfig[portnr].addr0 + 3)); case IOCTL_EPPFLEX_WRITE_EPPADDR: return write_port(p, (WORD)(portconfig[portnr].addr0 + 3)); case IOCTL_EPPFLEX_READ_EPPDATA: return read_port(p, (WORD)(portconfig[portnr].addr0 + 4)); case IOCTL_EPPFLEX_WRITE_EPPDATA: return write_port(p, (WORD)(portconfig[portnr].addr0 + 4)); case IOCTL_EPPFLEX_ACQUIREPORT: if (p->cbInBuffer < sizeof(unsigned int)) return ERROR_INVALID_PARAMETER; return acquireport(*((unsigned int *)p->lpvInBuffer)); case IOCTL_EPPFLEX_RELEASEPORT: releaseport(); return NO_ERROR; default: return ERROR_NOT_SUPPORTED; } } baycomepp-0.10.orig/w9xdrv/eppflex.def0100644000175100017510000000221707143570417016003 0ustar abaabaVXD EPPFLEX DYNAMIC SEGMENTS _LTEXT CLASS 'LCODE' PRELOAD NONDISCARDABLE _LDATA CLASS 'LCODE' PRELOAD NONDISCARDABLE _TEXT CLASS 'LCODE' PRELOAD NONDISCARDABLE _DATA CLASS 'LCODE' PRELOAD NONDISCARDABLE _LPTEXT CLASS 'LCODE' PRELOAD NONDISCARDABLE _CONST CLASS 'LCODE' PRELOAD NONDISCARDABLE _BSS CLASS 'LCODE' PRELOAD NONDISCARDABLE _TLS CLASS 'LCODE' PRELOAD NONDISCARDABLE _ITEXT CLASS 'ICODE' DISCARDABLE _IDATA CLASS 'ICODE' DISCARDABLE _PTEXT CLASS 'PCODE' NONDISCARDABLE _PDATA CLASS 'PCODE' NONDISCARDABLE _STEXT CLASS 'SCODE' RESIDENT _SDATA CLASS 'SCODE' RESIDENT _MSGTABLE CLASS 'MCODE' PRELOAD NONDISCARDABLE IOPL _MSGDATA CLASS 'MCODE' PRELOAD NONDISCARDABLE IOPL _IMSGTABLE CLASS 'MCODE' PRELOAD DISCARDABLE IOPL _IMSGDATA CLASS 'MCODE' PRELOAD DISCARDABLE IOPL _DBOSTART CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING _DBOCODE CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING _DBODATA CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING _16ICODE CLASS '16ICODE' PRELOAD DISCARDABLE _RCODE CLASS 'RCODE' EXPORTS EPPFLEX_DDB @1 baycomepp-0.10.orig/w9xdrv/eppflex.h0100644000175100017510000000542307143577020015473 0ustar abaaba #ifndef CTL_CODE #define CTL_CODE(DeviceType,Function,Method,Access) (((DeviceType)<<16)|((Access)<<14)|((Function)<<2)|(Method)) #endif #ifndef METHOD_BUFFERED #define METHOD_BUFFERED 0 #define METHOD_IN_DIRECT 1 #define METHOD_OUT_DIRECT 2 #define METHOD_NEITHER 3 #endif #ifndef FILE_ANY_ACCESS #define FILE_ANY_ACCESS 0 #define FILE_READ_ACCESS (0x0001) #define FILE_WRITE_ACCESS (0x0002) #endif #define FILE_DEVICE_EPPFLEX 0x80aa struct eppflex_rwdata { unsigned char data; unsigned char mask; }; #define IOCTL_EPPFLEX_READ_DATA CTL_CODE(FILE_DEVICE_EPPFLEX, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_DATA CTL_CODE(FILE_DEVICE_EPPFLEX, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_STATUS CTL_CODE(FILE_DEVICE_EPPFLEX, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_STATUS CTL_CODE(FILE_DEVICE_EPPFLEX, 3, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_CONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_CONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_FROB_CONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_ECONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_ECONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_FROB_ECONTROL CTL_CODE(FILE_DEVICE_EPPFLEX, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_CONFIGA CTL_CODE(FILE_DEVICE_EPPFLEX, 10, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_CONFIGA CTL_CODE(FILE_DEVICE_EPPFLEX, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_CONFIGB CTL_CODE(FILE_DEVICE_EPPFLEX, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_CONFIGB CTL_CODE(FILE_DEVICE_EPPFLEX, 13, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_EPPADDR CTL_CODE(FILE_DEVICE_EPPFLEX, 14, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_EPPADDR CTL_CODE(FILE_DEVICE_EPPFLEX, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_READ_EPPDATA CTL_CODE(FILE_DEVICE_EPPFLEX, 16, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_WRITE_EPPDATA CTL_CODE(FILE_DEVICE_EPPFLEX, 17, METHOD_BUFFERED, FILE_ANY_ACCESS) /* only W9x */ #define IOCTL_EPPFLEX_ACQUIREPORT CTL_CODE(FILE_DEVICE_EPPFLEX, 64, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_EPPFLEX_RELEASEPORT CTL_CODE(FILE_DEVICE_EPPFLEX, 65, METHOD_BUFFERED, FILE_ANY_ACCESS) baycomepp-0.10.orig/w9xdrv/eppflex.vxd0100644000175100017510000002323707161705512016047 0ustar abaabaMZ@ !L!This program cannot be run in DOS mode. $[ vcvcvcVivcvcvcRichvcLE  8CM} $+$Tv$) XE  LCODf PNP ICOD EPPFLEX\#bKMt qU I'(0(@z(HbPbF88''qc<80(a$F + '@a'6X|   { &     ' R .    ' 1Rs'9]'  0Tx(Ijg X'~`'lE^w'WN')7 XT''y' `o'GV'>WpMfUSVW`u a_^[]eppflex: dynamic init Locate_DevNode error: PORTNAMEPort name: Device ID: Port number overflow LPT: IO Ranges: - - IRQ DMA eppflex: dynamic exit LPTx EPPFLEX verPP1vsR2vsR3vsRUWh3_]UjjEP E}t(hkMQ"hR URd]UEEMMUE3ҹ 0EEME3ҹ E}u΋UR]UQEP?jMQUR u EPjMQUR t]ULjhPjMQDž@RPh QRjjhPMQhRhLt/Pu#Tuu Dž Džt1PMQlR]Ujh8PMQt)h!8Rh]U8VW} rh4EEEMMUUEEEjMQUR EЉEjjjMQURu[jj EPMQuAU؁|E%EMځMU؁UE%E닋MЉMjjjUREPu%jjMQURu E%EMЉMjjjUREPu%jjMQURu E%E}t} kuhsM Q'hWjURh<jEPh!jMQohjURT}thEP}thMQ}h_^]UEEMMU} vE } u_E rM7UUEM0UUEMMU U } uEP]Uh=t]U=u hPj ]U3]UQEx t MQ EH M}(}(}w^}}w)}}}v} } !WUUU}AM3$}@w5}@UUU}M3$}w,}}D}}t 33kfPMQkfPMQdkPMQ@kPMQTkPMQ7kPMQ kPMQkPMQkPMQhkPMQwDkfPMQa"kfPMQ8kPMQkPMQkPMQkPMQskPMQRkPMQf1UzsW!EHRi32]U E M=tO}r Uku EM1MUR=uSEP=u2j QhRjE}u3]UQEHM=u WUzs WE %u WM k;rE % k;v:U k;rM k; vW)fE P#MUz t EH 3]USVWfU2_^[]UQEHM=u WUzs WE %u WM k;rE % k;v:U k;rM k; vW*fE PMREx t MQ 3]USVWfU E_^[]U EHMUBE=u W Myr Uzs WE %u WM k;rE % k;v:U k;rM k; vWmfE PEMU3B#ȋU33ȈMfM QUREMUEHJUz t EH 3]Ãu SÃu S"Ã#u Vl 3 3 3 I Q H =3 3 "3 3 3 "+ !+ D_E_B_U_G===>EPPFLEX<=== EPPFLEX_DDBG/9/$NB10G/9G:\w9xpar\obj\i386\eppflex.pdbVS_VERSION_INFO04VS_VERSION_INFO?StringFileInfo040904b0Comments/CompanyNameBaycom Hard- und Software GmbHFileDescriptioneppflex FileVersion1, 0, 0, 19%InternalNameBaycom EPPFLEX FlexNet kernel driver%LegalCopyrightCopyright 2000LegalTrademarks$ OriginalFilenameeppflex.vxdPrivateBuildProductNameEPPFLEXProductVersion1.00aSpecialBuild$VarFileInfoTranslation baycomepp-0.10.orig/w9xdrv/eppflex.rc0100644000175100017510000000203107144030053015627 0ustar abaaba#include VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x0L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Baycom Hard- und Software GmbH\0" VALUE "FileDescription", "eppflex\0" VALUE "FileVersion", "1, 0, 0, 1\0" VALUE "InternalName", "Baycom EPPFLEX FlexNet kernel driver\0" VALUE "LegalCopyright", "Copyright 2000\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "eppflex.vxd\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "EPPFLEX\0" VALUE "ProductVersion", "1.00a\0" VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END