tlf-1.4.0/0000755000175000017500000000000013562576670007323 500000000000000tlf-1.4.0/config.h.in0000644000175000017500000001346513562576652011277 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the `bzero' function. */ #undef HAVE_BZERO /* Define to 1 if a SysV or X/Open compatible Curses library is present */ #undef HAVE_CURSES /* Define to 1 if library supports color (enhanced functions) */ #undef HAVE_CURSES_COLOR /* Define to 1 if library supports X/Open Enhanced functions */ #undef HAVE_CURSES_ENHANCED /* Define to 1 if is present */ #undef HAVE_CURSES_H /* Define to 1 if library supports certain obsolete features */ #undef HAVE_CURSES_OBSOLETE /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the header file. */ #undef HAVE_HAMLIB_RIG_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `hamlib' library (-lhamlib). */ #undef HAVE_LIBHAMLIB /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `xmlrpc' library (-lxmlrpc). */ #undef HAVE_LIBXMLRPC /* Define to 1 if you have the `xmlrpc_client' library (-lxmlrpc_client). */ #undef HAVE_LIBXMLRPC_CLIENT /* Define to 1 if you have the `xmlrpc_util' library (-lxmlrpc_util). */ #undef HAVE_LIBXMLRPC_UTIL /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `mkfifo' function. */ #undef HAVE_MKFIFO /* Define to 1 if the Ncurses library is present */ #undef HAVE_NCURSES /* Define to 1 if the NcursesW library is present */ #undef HAVE_NCURSESW /* Define to 1 if is present */ #undef HAVE_NCURSESW_CURSES_H /* Define to 1 if is present */ #undef HAVE_NCURSESW_H /* Define to 1 if is present */ #undef HAVE_NCURSESW_PANEL_H /* Define to 1 if is present */ #undef HAVE_NCURSES_CURSES_H /* Define to 1 if is present */ #undef HAVE_NCURSES_H /* Define to 1 if is present */ #undef HAVE_NCURSES_PANEL_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if the Curses Panel library is present */ #undef HAVE_PANEL /* Define to 1 if is present */ #undef HAVE_PANEL_H /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strcspn' function. */ #undef HAVE_STRCSPN /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strpbrk' function. */ #undef HAVE_STRPBRK /* Define to 1 if you have the `strspn' function. */ #undef HAVE_STRSPN /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the header file. */ #undef HAVE_SYSLOG_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_TERMIOS_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_XMLRPC_C_BASE_H /* Define to 1 if you have the header file. */ #undef HAVE_XMLRPC_C_CLIENT_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to `int' if does not define. */ #undef mode_t /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t tlf-1.4.0/configure.ac0000644000175000017500000001263113562576621011530 00000000000000# Process this file with autoconf to produce a configure script. AC_INIT([Tlf], [1.4.0], [tlf-devel@nongnu.org], [tlf], [https://github.com/Tlf/tlf]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([src/tlf.h]) AC_CONFIG_MACRO_DIR([macros]) AC_CONFIG_HEADERS([config.h]) dnl Clean compilation output makes compiler warnings more visible m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # Checks for programs. AC_PROG_CC_C99 AC_PROG_INSTALL # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h \ sys/ioctl.h sys/socket.h sys/time.h syslog.h termios.h]) # Checks for typedefs, structures, and compiler characteristics. dnl needed? AC_HEADER_STDBOOL AC_TYPE_MODE_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_SSIZE_T # Checks for library functions. dnl obsolescent AC_PROG_GCC_TRADITIONAL dnl obsolescent AC_FUNC_STRFTIME AC_CHECK_FUNCS([bzero floor ftruncate gethostbyname memset mkfifo putenv \ select socket sqrt strcasecmp strchr strcspn strdup strpbrk strspn \ strstr]) # Checks for libraries. AC_CHECK_LIB([m], [atan], [ AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you have the `m' library (-lm).]) AC_SUBST([LIBM_LIB], [-lm])], [ AC_MSG_ERROR([m library not found...])]) AX_PTHREAD ##----------------------------------## ## Third party library tests follow ## ##----------------------------------## dnl Make certain pkg-config is installed PKG_PROG_PKG_CONFIG([0.16]) AS_IF([test "x$PKG_CONFIG" = x], [AC_MSG_ERROR([pkg-config is required to configure $PACKAGE_NAME])]) dnl From /usr/share/aclocal/glib-2.0.m4 on Debian 8.0. dnl Provides compilation testing of the found glib library for suitability. AM_PATH_GLIB_2_0 dnl check for cmocka test framework and warn if not installed have_cmocka="yes" PKG_CHECK_MODULES([CMOCKA], [cmocka >= 1.0.1],,[have_cmocka="no"]) AC_CHECK_HEADER([setjmp.h]) AC_CHECK_HEADER([cmocka.h],, [have_cmocka="no"], [#include #include #include ]) if test "${have_cmocka}" = "no"; then AC_MSG_WARN([you will need cmocka for running unit tests]) fi # ncurses and panel required, if not found exit with error message. dnl macros/ax_with_curses.m4 AX_WITH_CURSES AS_IF([test "x$ax_cv_curses" != xyes || test "x$ax_cv_curses_color" != xyes], [AC_MSG_ERROR([a Curses library with color support is required])]) dnl macros/ax_with_curses_extra.m4 AX_WITH_CURSES_PANEL AS_IF([test "x$ax_cv_panel" != xyes], [AC_MSG_ERROR([the Curses Panel library is required])]) dnl Check the Hamradio control libraries (hamlib) hamlib_modules="hamlib >= 1.2.8" PKG_CHECK_MODULES([HAMLIB], [$hamlib_modules], [], [AC_MSG_ERROR([Hamradio control libraries 1.2.8 or later not found...])]) tlf_saved_LIBS=$LIBS LIBS="$LIBS $HAMLIB_LIBS" AC_CHECK_LIB([hamlib], [rig_open], [ AC_DEFINE([HAVE_LIBHAMLIB], [1], [Define to 1 if you have the `hamlib' library (-lhamlib).])], [ AC_MSG_ERROR([Hamradio control libraries not found!])]) LIBS=$tlf_saved_LIBS tlf_saved_CFLAGS=$CFLAGS tlf_saved_CPPFLAGS=$CPPFLAGS CFLAGS="$CFLAGS $HAMLIB_CFLAGS" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags-only-I hamlib 2>&1`" AC_CHECK_HEADERS([hamlib/rig.h], [], [ AC_MSG_ERROR([Hamlib headers not found...])]) CPPFLAGS=$tlf_saved_CPPFLAGS CFLAGS=$tlf_saved_CFLAGS dnl Check if we want to use xmlrpc to read carrier from Fldigi AC_MSG_CHECKING([whether to build Fldigi XML RPC support]) AC_ARG_ENABLE([fldigi-xmlrpc], [AS_HELP_STRING([--enable-fldigi-xmlrpc], [Add support for XMLRPC to read Fldigi's carrier (usually in RTTY/DIGIMODE)])], [wantfldigixmlrpc=true], [wantfldigixmlrpc=false]) AS_IF([test "x$wantfldigixmlrpc" = xtrue], [ dnl Look for xmlrpc libraries AC_MSG_RESULT([yes]) AC_CHECK_LIB([xmlrpc], [xmlrpc_read_int], [ AC_DEFINE([HAVE_LIBXMLRPC], [1], [Define to 1 if you have the `xmlrpc' library (-lxmlrpc).]) AC_SUBST([LIBXMLRPC_LIB], [-lxmlrpc])], [ AC_MSG_ERROR([xmlrpc library not found...])]) AC_CHECK_LIB([xmlrpc_client], [xmlrpc_client_cleanup], [ AC_DEFINE([HAVE_LIBXMLRPC_CLIENT], [1], [Define to 1 if you have the `xmlrpc_client' library (-lxmlrpc_client).]) AC_SUBST([LIBXMLRPC_CLIENT_LIB], [-lxmlrpc_client])], [ AC_MSG_ERROR([xmlrpc-client library not found...])]) AC_CHECK_LIB([xmlrpc_util], [xmlrpc_env_init], [ AC_DEFINE([HAVE_LIBXMLRPC_UTIL], [1], [Define to 1 if you have the `xmlrpc_util' library (-lxmlrpc_util).]) AC_SUBST([LIBXMLRPC_UTIL_LIB], [-lxmlrpc_util])], [ AC_MSG_ERROR([xmlrpc-util library not found...])]) AC_CHECK_HEADERS([xmlrpc-c/base.h], [], [ AC_MSG_ERROR([xmlrpc-c/base.h header not found...])]) AC_CHECK_HEADERS([xmlrpc-c/client.h], [], [ AC_MSG_ERROR([xmlrpc-c/client.h header not found...])])], [ dnl else Fldigi XML RPC not wanted AC_MSG_RESULT([no])]) dnl Set warnings for compilation dnl CFLAGS is reserved for user, so set the AM_* counterpart. # macros/ax_cflags_warn_all.m4 AX_CFLAGS_WARN_ALL([AM_CFLAGS]) AC_SUBST([AM_CFLAGS]) m4_syscmd([ cd test; perl generate_defs.pl ]) AC_CONFIG_FILES([Makefile doc/Makefile rules/Makefile scripts/Makefile share/Makefile src/Makefile test/Makefile tlf.1]) AC_OUTPUT echo \ "---------------------------------------------------------------------- ${PACKAGE_NAME} Version ${PACKAGE_VERSION} configuration: Prefix ${prefix} Preprocessor ${CPP} ${CPPFLAGS} C Compiler ${CC} ${CFLAGS} Package features: With XML RPC $wantfldigixmlrpc -----------------------------------------------------------------------" tlf-1.4.0/Makefile.in0000644000175000017500000007066213562576653011324 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ax_append_flag.m4 \ $(top_srcdir)/macros/ax_cflags_warn_all.m4 \ $(top_srcdir)/macros/ax_pthread.m4 \ $(top_srcdir)/macros/ax_require_defined.m4 \ $(top_srcdir)/macros/ax_with_curses.m4 \ $(top_srcdir)/macros/ax_with_curses_extra.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = tlf.1 CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/tlf.1.in AUTHORS COPYING ChangeLog INSTALL NEWS \ README compile config.guess config.sub install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CMOCKA_CFLAGS = @CMOCKA_CFLAGS@ CMOCKA_LIBS = @CMOCKA_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ HAMLIB_CFLAGS = @HAMLIB_CFLAGS@ HAMLIB_LIBS = @HAMLIB_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBM_LIB = @LIBM_LIB@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXMLRPC_CLIENT_LIB = @LIBXMLRPC_CLIENT_LIB@ LIBXMLRPC_LIB = @LIBXMLRPC_LIB@ LIBXMLRPC_UTIL_LIB = @LIBXMLRPC_UTIL_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_LIBS = @PANEL_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I macros SUBDIRS = doc rules src share scripts test CLEANFILES = *~ man_MANS = tlf.1 EXTRA_DIST = README.md all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 tlf.1: $(top_builddir)/config.status $(srcdir)/tlf.1.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) # 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_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 case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --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) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(MANS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am uninstall-man uninstall-man1 .PRECIOUS: Makefile README: README.md grep -v "Build Status" $< > $(srcdir)/$@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: tlf-1.4.0/ChangeLog0000644000175000017500000051000113562576621011006 000000000000002019-10-28 Thomas Beierlein * NEWS, ToDo: Update NEWS and ToDo files 2019-09-30 Thomas Beierlein * src/fldigixmlrpc.c, src/gettxinfo.c, src/globalvars.h, src/main.c, test/data.c: Fix definition of 'rigmode' variable Newest version of hamlib has an extended range of modei definitions and therefore defined it as UInt64. That conflicts with the former definition of 'rigmode' as 32 bit int. 2019-09-29 Thomas Beierlein * INSTALL: Fix dependencies for Debian like distributions Thx to Juajo EA8BGO for reporting. 2019-09-18 zcsahok * src/gettxinfo.c: Fix sideband selection An unnoticed constant caused wrong sideband selection when switching to SSB. Moved SSB and CW settings to functions. 2019-09-20 Thomas Beierlein * src/parse_logcfg.c, src/parse_logcfg.h, src/rules.c: Refactor parsing of config files * src/parse_logcfg.c, src/rules.c: rewording of startup messages 2019-09-18 Thomas Beierlein * src/main.c, src/parse_logcfg.c, src/readqtccalls.c, src/rules.c, src/sendqrg.c: Fix some minor display problems (Tnx HA5CQZ) - unify capitalisation - do not use fixed display positions - show voice keyer messages only in verbose mode 2019-09-16 Thomas Beierlein * src/addmult.c, src/audio.c, src/background_process.c, src/bandmap.c, src/bands.c, src/callinput.c, src/changefreq.c, src/changepars.c, src/clusterinfo.c, src/err_utils.c, src/fldigixmlrpc.c, src/freq_display.c, src/grabspot.c, src/lancode.c, src/main.c, src/parse_logcfg.c, src/rules.c, src/searchlog.c, src/sendbuf.c, src/sendqrg.c, src/showinfo.c, src/splitscreen.c, src/ui_utils.c, src/writecabrillo.c: apply astylerc rules 2019-09-15 Thomas Beierlein * src/main.c, src/startmsg.c, src/startmsg.h: Change handling of verbose startup * Do no longer slow down display of infos. Instead ask for continuation before clearing the screen. That gives time to read the messages. * Message display checks for enough room to display. If screen gets full clear and start enew from above (after a small delay or confirmation). * src/getmessages.c, src/getmessages.h, src/main.c: Refactor check for first run of TLf in new directory * Test it quite early. Show GPL and set 'verbose' mode. 2019-09-13 Thomas Beierlein * src/main.c: Fix color settings for TERM=xterm-256color 2019-09-09 Thomas Beierlein * src/lancode.c: fix missing ntoh conversion 2019-07-15 Thomas Beierlein * src/background_process.c, src/background_process.h, src/changepars.c, src/logit.c: Fix Simulator mode for CQWW contest. - Fix sidetone management (Do not change own frequency during QSO and make random change of sidetone for other station working - Add a little timing space before getting called by other station - Refactor managment of simulation stages - Improve logic to turn on/off of simulator mode 2019-07-19 Thomas Beierlein * src/err_utils.c: Make sure INFO messages can be read at least 1 second 2019-07-12 Thomas Beierlein * src/logit.c, src/recall_exchange.c: Recall old exchange only if exchange field is empty If RECALL_MULTS is set keep the content of the exchange field if not empty. Also do not empty the exchange field if no old exchange could be found. 2019-07-06 zcsahok * src/main.c: improve command line argument handling Switched to Argp as it provides a number of features (usage, version, error messages, long arguments, ...) out of the box. The original issue was that argument option had to be written without space (-fmyfile.dat). Now both this, the "normal' format (-f myfile.dat), and the long format (--config=myfile.dat) are also supported. 2019-06-23 zcsahok * src/changefreq.c, src/freq_display.c, src/freq_display.h: fix frequency adjustment function (Ctrl-F) Replace key_get() with key_poll(). In order to avoid flickering the order of freq_display() and time_update() was reversed. Minor code cleanup was done in freq_display.c. Ctrl-F is now completely live in the sense that it also takes over freq changes from the rig. The cluster display below Ctrl-F is also updated and the displayed values are all in sync. For TRX there is a delay of 1 sec but that's tolerable as it's the normal behavior. 2019-06-17 zcsahok * src/callinput.c: allow CQ<->S&P switch even if call input field is non-empty 2019-06-14 zcsahok * src/cleanup.c: do not highlight exch field on CQ<->S&P 2019-06-02 Thomas Beierlein * src/writecabrillo.c: Fix possible use of NULL pointer 2019-05-28 Thomas Beierlein * src/callinput.c: Allow wider adjustment QRG of grabbed station The reported QRG of spotted stations may not be exact. So after a grab of it from the bandmap list you may want to adjust the QRG a little. On the other side after a grab if you just tune away you would like the call input field to become empty automatically. The patch widens the allowed adjustment to +/-500 Hz. That should hopefully be enough. Problem reported by Fred DH5FS. 2019-05-05 Thomas Beierlein * src/err_utils.c, src/splitscreen.c, src/splitscreen.h, src/ui_utils.c, src/ui_utils.h: Respect screensize for packet interface As panels do not support screen resize we need some additional code to renew the packet window and setup the split display. 2019-04-13 Thomas Beierlein * src/callinput.c, src/changepars.c, src/changepars.h, src/clusterinfo.c, src/muf.c, src/ui_utils.c, test/test_clusterinfo.c: Respect vertical screen size for informational pop up windows - propagation window - cluster info - network info - multiplier info 2019-04-05 Thomas Beierlein * src/bandmap.c: Use full vertical screen size for bandmap display Fix display of bandmap info and menu. Position adapts to size of screen * src/clear_display.c, src/main.c: Respect vertical screen size for main window 2019-03-27 Thomas Beierlein * src/err_utils.c, src/getwwv.c, src/lancode.c, src/lancode.h, src/showinfo.c, src/splitscreen.c: Display of infos and errors always on bottom line of window. Fix the display position for the following items: - error messages - infoline with country informations - new WWV/WCY announcements - talk command input - send cluster command 2019-05-05 Thomas Beierlein * src/callinput.c, src/grabspot.c, src/time_update.c: Fixup display of TRX and MEM info - Remove arbitrary remnants just before the displayed values - Erase fields if not rig control is available. 2019-03-27 Thomas Beierlein * src/ui_utils.c: Handle KEY_RESIZE Pick up new screen size after resize of terminal window and redraw display 2019-05-13 Thomas Beierlein * src/err_utils.c: Simplify wipe of info line 2019-04-13 Thomas Beierlein * src/callinput.c, src/grabspot.c: Fix display of MEM frequency * src/grabspot.c, src/sendqrg.c: Fix wrong prototyp declarations After the switch to use freq_t for all frequency values there was a type mismatch for send_bandswitch parameter. 2019-04-03 zcsahok * src/qrb.c: fix get_qrb return value * src/qrb.c, src/qrb.h, src/showinfo.c, src/showinfo.h: show only valid DX info 2019-03-25 Thomas Beierlein * Refactor handling of warnings, errors and informational messages * Factor out common sequences for better readability * Allows to change place and mode of display in an easy way. That will be needed for resizing the display. 2019-03-28 zcsahok * test/data.c: fix bandfrequency in test/data.c 2019-03-24 zcsahok * src/background_process.c, src/lancode.c: fix FREQMSG * switch to use of freq_t 2019-02-17 Thomas Beierlein * tlf.1.in: Add documentation for Multiplier aliases 2019-02-03 Thomas Beierlein * src/getexchange.c, src/makelogline.c, src/readcalls.c: Fix mult handling for SECTION_MULT and SERIAL+SECTION With the possibility to use aliases for section entries we need to record the original entered comment in log. The recognized section gets recorded in the section column. Tlf now use the recorded section for building the reached multiplier list during read of an existing log file. Respect also alias settings for parsing of QSO sections in getexchange() and checkexchange(). 2019-01-27 Thomas Beierlein * src/addmult.c, src/addmult.h, test/test_addmult.c: Add new function to look for best match in given possible mult The function check if mult name or one of its aliases is a substring of the searchstring and returns the best matching length. If the returned length is equal the searchsting length then we have an exact match. 2019-01-26 Thomas Beierlein * src/addmult.c, test/test_addmult.c: Add parsing of alias list 2019-01-21 Thomas Beierlein * src/addmult.c, src/addmult.h: Change internal representation of possible multipliers The change allows to associate each multiplier with a list of aliases. If the alias is used it will be counted for the according multiplier. * src/addmult.c, src/addmult.h, src/changepars.c, src/getexchange.c, src/globalvars.h, src/searchlog.c, test/test_addmult.c: Make handling of possible mults opaque Concentrate implementation dateils in addmult.c. Introduce getter functions for access to mult number and to mult name. 2018-10-11 Eric Tamme * src/lancode.c, src/parse_logcfg.c, tlf.1.in: Add lan port config directive - Allows to specify on which port number TLF is listening for incoming broadcasts from other instances. - Allows even to run multiple instances of TLF on teh same server. 2019-01-05 Thomas Beierlein * share/help.txt, src/changepars.c, src/main.c, src/parse_logcfg.c, tlf.1.in: Drop SCAN related data - S-METER keyword and variables - clean up man page and help.txt 2019-01-12 Thomas Beierlein * src/parse_logcfg.c, tlf.1.in: Add CALLMASTER= keyword to parser and man page. Allow loading from different callmaster database file 2019-01-05 Thomas Beierlein * ToDo, share/logcfg.dat: Add ToDo list for version 1.4 2019-01-03 Thomas Beierlein * src/searchlog.c, test/test_searchlog.c: Refactor lookup of zonenumber - 2019-01-02 Thomas Beierlein * test/test_searchlog.c: Add tests for USEPARTIAL call suggestions If USEPARTIAL is set and there is only one matching call in already worked stations or in callmaster database use it as suggestion for callinput. 2018-12-30 Thomas Beierlein * src/searchlog.c: Fix zone display for old behaviour If multiplier is WAZ or ITU zone the following algorithmus is used: - First try to pick up the zone from the comment string of the selected QSOs. Use the last one found. - If no QSO with zoneinfo is found use zone_export (set by getctydata() according to the country information. - If there are a zoneinfo field, but it is not readable as zonenumber use either the zone from zone_fix (calculated from the actual exchange field) or again from zone_export. That allows an override of the calculated zone. NOTE: The algorithm has some drawbacks. * If a single station has a different zone number than the normal ones i it is not guaranteed, that we use this number. * If a zonenumber is found during scan of former QSOs it is no longer possible to use the override for searchlog operation. Show that zone number on lower line of search window and use it to check for already worked zones. 2018-12-29 Thomas Beierlein * src/searchlog.c: Factor out display of search results * src/searchlog.c: Factor out display of partials * src/searchlog.c: fix display for WARC bands 2018-12-15 Thomas Beierlein * src/searchlog.c, test/test_searchlog.c: Factor out display related code - Drawing of search window - Display of call info for 'hiscall' fragment - converting bandstring to display line Add testcode for last function * src/searchlog.c, test/test_searchlog.c: Factor out filtering of Log for relevant QSOs * src/searchlog.c, test/test_searchlog.c: Add first testcode for searchlog() function Test basics of filtering relevant QSOs from log file based on 'hiscall'. Factor out preparation of display results for search window. Simplify. * src/searchlog.c: Drop DL1YFK "worked window" patch. The dropped code did not change anything relevant. The lookup for qsos in question before was always exact, so a 'best match' makes no sense. * src/checklogfile.c, test/test_checklogfile.c: extend test_checklogfile() and adapt tested code checklogfile() now guarantees that the logline is terminated by \n 2018-12-14 Thomas Beierlein * src/checklogfile.c, test/test_checklogfile.c: added test_checklogline.c and fix handling of wrong line length Prepares for refactoring and tightens requests to the checking As a first step checklogfile should guarantee a correct linelength of each log line. 2018-12-06 Thomas Beierlein * src/checklogfile.c, src/editlog.c, src/getmessages.c, src/setparameters.c: Refactor logedit() function - Drop use of checklogfile() in not needed places. - Adapt checklogfile() for use with logedit() Do not exit program if file not found. Use ncurses for all text output. - Use existing checklogfile() to check the log after editing Original code was a copy of that funtion with small adaption wrt text output and errror handling. Be aware that the functionality is still broken as before. 2018-12-05 zcsahok * configure.ac: switch to C99 mode Gives us more room for better coding, e.g. 'bool' type, for-loop variables on the fly and other useful things. 2018-11-28 Thomas Beierlein * src/editlog.c: Fix assertion after edit of logfile Stop background processing also during edit of log file 2018-11-20 Thomas Beierlein * test/Makefile.am: Use CMOCKA_LIBS for locating library 2018-11-10 Thomas Beierlein * src/bandmap.c: Fix compiler warning from clang Calculation the difference of two unsigned numbers gives an unsigned result. clang warns that doing an abs() of it makes no sense. Thansk nate N0NB for reporting. 2018-11-03 Nate Bargmann * src/clear_display.c, src/log_to_disk.c: Show blanks instead of '---' in NO_RST mode It looks like this patch only replaces the '---' string seen on the log entry line with ' ' and does not replace those characters in the log file where they are needed for proper Cabrillo generation. Testing is necessary. * rules/arrlss: Correct transposition of check and section rules/arrlss Per http://www.arrl.org/sweepstakes the proper format for the sent exchange is: # A % 83 CT where sending my call is also a required part of the exchange. Added commented ALT macros that were available in CT. Added NO_RST as it is not used in ARRL SS. 2018-11-01 zcsahok * src/sendqrg.c: fix SegV on missing RIGPORT 2018-10-22 Thomas Beierlein * add tests for reading QTC lines - make qtc_line global to ease test 2018-10-20 Thomas Beierlein * configure.ac: Fix requested cmocka version. Check for cmocka test framework and warn if not installed 2018-10-18 zcsahok * fix config.h usage * make hamlib mandatory 2018-10-16 Thomas Beierlein * INSTALL: add build dependencies to install instructions * NEWS: Fix typo 2018-10-13 Thomas Beierlein * src/callinput.c, src/fldigixmlrpc.c, src/fldigixmlrpc.h, src/main.c: move variable to related file 2018-10-12 Eric Tamme * src/parse_logcfg.c: fix missing comma in command array 2018-09-30 Ervin Hegedus * src/callinput.c, src/fldigixmlrpc.c, src/main.c: BMAUTOADD adds callsign to bandmap when Fldigi set it. Show correct CTY info when call comes from Fldigi. Changed RTTY-REV mode freq calc. 2018-09-28 Thomas Beierlein * Makefile.am, test/Makefile.am, test/test_initial_exchange.c: Fix 'make distcheck' 'make distcheck' does an VPATH install where the build directory is not the source directory. That failed for data file used during unit tests. 2018-09-27 Thomas Beierlein * test/Makefile.am: add missing files to test/Makefile.am and src/Makefile.am * src/checkparameters.c, src/writeparas.c, src/writeparas.h, tlf.1.in: Fix assertion if no .paras file exists during start 2018-09-23 Thomas Beierlein * AUTHORS, INSTALL: update INSTALL and AUTHORS file 2018-08-09 Stephen Hurd * src/audio.c, src/background_process.c, src/callinput.c, src/changepars.c, src/checklogfile.c, src/deleteqso.c, src/editlog.c, src/fldigixmlrpc.c, src/freq_display.c, src/getexchange.c, src/getmessages.c, src/gettxinfo.c, src/keyer.c, src/logview.c, src/muf.c, src/parse_logcfg.c, src/qtcwin.c, src/readcalls.c, src/score.c, src/scroll_log.c, src/sendbuf.c, src/sendqrg.c, src/show_help.c, src/splitscreen.c, src/write_keyer.c: Fix warnings. While many of these return codes should be checked, none of them actually are, so having the return codes stored in variables is pointless. Create IGNORE() macro to ignore ignored unused results warnings. 2018-09-23 Thomas Beierlein * src/rules.c: make memory allocation error fatal 2018-08-10 Stephen Hurd * test/data.c, test/test_sendbuf.c: Update the DIGIMODE tests for PrepareSPcall() tests. Add digi_message to data in tests. * tlf.1.in: Add documentation for DKF1..DKF12, ALT_DK1..ALT_DK10, DKCQM, DKSPM, DKSPC * src/autocq.c, src/callinput.c, src/getexchange.c, src/globalvars.h, src/keyer.c, src/listmessages.c, src/logit.c, src/main.c, src/messagechange.c, src/parse_logcfg.c, src/rules.c, src/sendbuf.c, src/sendbuf.h, src/sendspcall.c, src/writeparas.c: Use separate messages for RTTY than CW RTTY contests use a space, not newline at end of messages and should start with a CR. To enable starting with CR, add a | character that is translated to CR Add config keys DKF1..DKF12, ALT_DK1..ALT_DK10, DKCQM, DKSPM, DKSPC Default values are the CW message with | at the start and the trailing newline changed to a space. Note that in callinput.c, in SSB mode, ENTER on a dupe when NOB4 is not set would send F7 message in CW. This now sends the voice F7 message instead since that was likely the intent. New function send_standard_message(int) added which sends the passed message number using the current trxmode (cw, voice, or digi). Also added is send_keyer_message(int) which works as above, but in voice mode will still send CW. This is used by the CW keyer. LIST and MESSAGE will now show/edit the DIGI messages in DIGI mode. In CW and voice modes, the CW messages will be shown/changed. 2018-08-08 Stephen Hurd * src/background_process.c, src/background_process.h, src/edit_last.c, src/editlog.c, src/globalvars.h, src/logit.c, src/main.c, src/setparameters.c, src/writeparas.c: Use condition variables to start/stop the background process. Testing a global in a loop without volatile can cause various issues with optimizers. Further, the sleep(1) granularity made the background task unresponsive. Instead, use condition variables and mutexes to allow waiting for the background thread to be restarted, then running immediately when the condition occurs. 2018-09-16 Stephen Hurd * src/dxcc.c, src/dxcc.h, src/getctydata.c: Use stdbool.h for booleans. 2018-08-08 Stephen Hurd * src/calledit.c, src/callinput.c, src/dxcc.c, src/dxcc.h, src/getctydata.c, src/getctydata.h, src/grabspot.c, src/showinfo.c, src/showinfo.h: Support CT9 cty.dat files This adds three new overrides, lat/lon, continent, and time offset. showinfo() now needs a prefix, so create add a getctydata_pfx() function which returns the prefix rather than the country. If a callsign in cty.dat starts with an '=', it will only use exact matching, not prefix matching. To allow backward compatability, Tlf remembers if it saw any '=' prefixes and if so, find_full_match() will only match those. If there were no '=' prefixes, the behaviour is as before, and it will match any prefix. 2018-09-17 Thomas Beierlein * src/bandmap.c, src/gettxinfo.c, src/sendqrg.c: Fix wrong includes and possible NULL pointer problem. 2018-08-09 Stephen Hurd * src/main.c: There are more than two valid TERM values... Remove the hack which replaced any TERM value that wasn't "xterm" with "rxvt". Forcing rxvt means that if the terminal is not rxvt compatible, all kinds of ncurses things would break. The most common difference is F1 - F4. rxvt uses \E[11~, \E[12~, \E[13~ and \E[14~ while most modern xterm compatibles use \E[OP, \E[OQ, \EOR, and \EOS respectively. xterm-color and xterm-256color for example would suffer from this issue, and F1 to F4 would not work correctly. 2018-09-16 Thomas Beierlein * src/background_process.c, src/fldigixmlrpc.c, src/fldigixmlrpc.h, src/parse_logcfg.c: Rename fldigi_get() to fldigi_isenabled() 2018-08-10 Stephen Hurd * src/background_process.c, src/changepars.c, src/fldigixmlrpc.c, src/fldigixmlrpc.h, src/main.c, src/parse_logcfg.c: Clean up various race conditions in fldigi stuff Furthermore have fldigi_xmlrpc_query() return -1 when use_fldigi is false. Returning success resulted in uninitialized data being used by callers, making it unsafe to ever turn off fldigi from tlf. 2018-08-08 Stephen Hurd * src/fldigixmlrpc.c: Fix text.get_rx. Was using start:end instead of start:length Don't request more characters than we can accept. Copy all the received bytes into the result, rather than one less than was received. * src/readcalls.c: POSIX doesn't define the -w option It seems to be a GNU extension, and doesn't seem to be needed in this use case. The FreeBSD uniq utility doesn't support it. * src/netkeyer.c, src/sockserv.c: Add missing socket headers. These are necessary to build on at least FreeBSD, and likely many more systems. I'm actually surprised Linux builds without them. * src/getctydata.c: malloc() is defined in stdlib.h. stdlib.h has been the correct header for malloc() since C89. 2018-06-05 Thomas Beierlein * src/background_process.c, src/changepars.c, src/fldigixmlrpc.c, src/main.c, src/parse_logcfg.c: Drop unused variable and rename for better readability 2018-05-23 Ervin Hegedus * doc/README.RTTY, src/background_process.c, src/changepars.c, src/fldigixmlrpc.c, src/fldigixmlrpc.h, src/main.c, src/parse_logcfg.c, src/rtty.c, tlf.1.in: Extend Fldigi interface 2018-05-03 Thomas Beierlein * src/callinput.c: Fix bug in BMAUTO_ADD and BMAUTO_GRAB logic. After logging a new contact in S&P mode the next station from bandmap you tune over got falsely the spot frequency of that last logged station. 2018-03-30 Nate Bargmann * doc/Makefile.am, doc/Xresources, tlf.1.in: Update man page for more consistency New keywords, commands, and configuration parameters are now in bold while value descriptions and files and pathnames are in italics. Typed strings are enclosed in double quotes while typed key names are enclosed in single quotes. Tried to ensure that text is more clear and from an objective point of discussion. Added a sample Xresources file for configuring Xterm with Linux console compatible color scheme for use with Tlf. 2018-02-25 Thomas Beierlein * src/readcabrillo.c, test/test_cabrillo.c: Use freq2band() conversion. Adapt test code 2018-02-24 Thomas Beierlein * src/bandmap.c, src/bandmap.h, src/bands.c, src/bands.h: Move bandcorners and freq2band() to bands.c 2018-01-22 Thomas Beierlein * src/bands.c, src/bands.h, src/callinput.c: Move next_band to bands.c * src/bands.h, src/callinput.c, src/tlf.h: Move IsWarcIndex to bands.h 2018-01-21 Thomas Beierlein * src/addcall.c, src/addmult.c, src/addpfx.c, src/bandmap.c, src/bands.c, src/bands.h, src/focm.c, src/globalvars.h, src/paccdx.c, src/readcalls.c, src/showpxmap.c, src/showscore.c, src/showzones.c, src/tlf.h, test/test_addcall.c, test/test_addmult.c, test/test_score.c: Move inxes[] to bands.c and adapt test code * src/Makefile.am, src/bands.c, src/bands.h: Add new files bands.c and bands.h Will concentrate all band and frequency related definitions in one place. 2018-03-28 Nate Bargmann * tlf.1.in: Add documentation for winkeydaemon (#92) The winkeydaemon adds cwdaemon style support for K1EL "Win Keyers" and compatible devices such as the Ham Gadgets Master Keyer 1. 2018-03-01 zcsahok * src/searchlog.c, src/searchlog.h: allow leading spaces in callmaster file 2018-02-23 zcsahok * src/addmult.c: allow space before comment in addmult 2018-02-23 Thomas Beierlein * tools/.astylerc: add astyle formatting rules * Reformat using .astylerc 2018-02-21 zcsahok * src/initial_exchange.c, src/initial_exchange.h: fix initial_exchange: allow DOS line endings and multiple columns 2018-02-19 zcsahok * .gitignore, Makefile.am: create README from README.md * README => README.md: added README.md 2018-02-08 zcsahok * src/callinput.c, src/callinput.h: Fix wrong return value of callinput() This PR fixes the "long CQ bug": when sending a longer series of unanswered CQ's the cursor sometimes jumps to the exchange field. This causes F1 to send your call instead of CQ, so the op has to press either Esc or Tab to get back to CQ'ing. Quite annoying, but keeps op awake. :-) An Easter egg version of this "feature" is: start tlf press F3 14 times CW keyer window pops up. The bug is a result of two issues. In callinput() key codes returned as char although they fit in an int only. E.g. F1 is 0x109 and F3 is 0x10B. On return only the lower 8 bits are kept and thus F1 is transformed into a Tab/Ctrl-I (0x09) and F3 into Ctrl-K (0x0B). callinput() is supposed to return to logit() only when some non-local keypress is to be handled (e.g. Enter). Instead it returns when its internal counter i reaches 14: for (i = strlen(hiscall); i <= 13; i++) { The idea may have been an optimization to avoid excessive calls to strlen and track call length in i. But this doesn't bring anything as this check is done only once per keypress and in the inner loop [while (x < 1)] strlen and other stuff is happening 100 times a second anyway. * src/logit.c, src/logit.h, src/main.c: Fix prototyp of logit() function Old prototype was a remnant from starting 'logit()' as thread in former code. 2018-01-31 zcsahok * .gitignore, .travis.yml, Makefile.am, configure.ac, test/Makefile.am, test/data.c, test/functions.c, test/generate_defs.pl, test/test.h, test/test_locator2longlat.c, test/test_score.c, test/test_zone_nr.c: introduce test framework based on cmocka * test/test_addcall.c, test/test_dxcc.c, test/test_getctydata.c: ported some more tests 2018-01-31 Thomas Beierlein * .travis.yml: Add Travis-CI configuration file 2018-01-15 zcsahok * src/callinput.h, src/gettxinfo.c, src/gettxinfo.h: Factor out band switching logic and change return type of gettxinfo() 2018-01-21 zcsahok * src/gettxinfo.c: limit frequency polling to once per 200ms 2018-01-20 zcsahok * src/gettxinfo.c: use freq2band() for gettxinfo() * src/bandmap.c, src/bandmap.h: Cleanup freq2band() 2018-01-20 Thomas Beierlein * src/callinput.c: Fix band switching After introduction of BANDINDEX_OOB the band up/down key did not work on upper and lower band (10->160 or 160->10) 2017-12-26 Ervin Hegedus * src/logit.c: Removed the cleanup() from the end of the change_mode() In case of SPRINTMODE the TU_MESSAGES was cutted by the cleanup(). That is wrong. 2017-12-26 zcsahok * src/callinput.c: BMAUTOGRAB only in S&P mode 2017-11-17 Ervin Hegedus * src/background_process.c, src/cabrillo_utils.h, src/main.c, src/qtc_log.c, src/qtc_log.h, src/readcabrillo.c: Refactor writing of QTC log file contest and reading in cabrillo files are using the same code now. 2017-10-10 Ervin Hegedus * src/globalvars.h, src/main.c, src/makelogline.c, src/readcabrillo.c: Replaced time_ptr_cabrillo pointer to static struct * src/main.c: Changed '-c' (convert) cli argument to '-i' (import) 2017-10-07 Thomas Beierlein * src/cabrillo_utils.h, src/readcabrillo.c: pick up addition for QTC conversion from HA2OS 2017-07-03 Ervin Hegedus * src/Makefile.am, src/cabrillo_utils.c, src/cabrillo_utils.h, src/getexchange.c, src/getexchange.h, src/globalvars.h, src/main.c, src/makelogline.c, src/readcabrillo.c, src/readcabrillo.h, src/writecabrillo.c: Add readcabrillo feature 2017-12-07 Ervin Hegedus * doc/New_Bandmap.txt, src/parse_logcfg.c, tlf.1.in: Fixed BANDMAP configuration directive (added 'O' option to string), added some documentation 2017-11-23 Thomas Beierlein * src/bandmap.c, src/main.c: cleanup - Rely directly on the initialised list 2017-11-23 Ervin Hegedus * src/bandmap.c: Add CQ zone value to BM spot from INIT_EXCH list, if exists 2017-11-20 Ervin Hegedus * src/bandmap.c, src/bandmap.h: New feature: hide/mark spots on BM if them are multipliers 2017-12-05 tnalpgge * tlf.1.in: Correct documentation on Enter key to match observed behavior 2017-12-02 Thomas Beierlein * src/callinput.c, src/showzones.c, src/time_update.c: move zones display to using panels Old code blinks zone display in 2s intervall. Tnx for reporting Fred DH5FS. 2017-12-01 zcsahok * src/callinput.c: spawn $SHELL instead of sh Use user's setting instead of plain sh when opening a shell using '!' 2017-11-25 zcsahok * src/logview.c: Switch back to normal keypad mode in logview 2017-11-23 Thomas Beierlein * share/callmaster, share/cty.dat: update callmaster database and cty.dat Version are VER20171103 for callmaster VER20171122 for cty.dat 2017-10-09 Thomas Beierlein * src/parse_logcfg.c: fix wrong parsing of QTC= keyword 2017-07-04 Ervin Hegedus * rules/tesla, share/cabrillo.fmt: Added Tesla memorial contest rule and cabrillo format 2017-05-29 Thomas Beierlein * src/addmult.c, src/addpfx.c, src/bandmap.c, src/clear_display.c, src/clusterinfo.c, src/gettxinfo.c, src/globalvars.h, src/main.c, src/paccdx.c, src/score.c, src/searchlog.c, src/showscore.c, src/tlf.h: Add a special OOB out_of_band entry * Tlf normally recognizes the band in use from rigs frequency. If the rig is outside of any band there is a indetermined state resulting in irregular characters on display and possible wrong entries into the contest statistics. Tnx to Zoltan Csahok HA5CQZ for pointing out the problem. 2017-06-14 Thomas Beierlein * src/callinput.c: make skip of WARC-bands during contest more robust In case of multiple neighboured WARC bands skip all until next contest band is reached. 2017-05-29 zcsahok * src/callinput.c, src/gettxinfo.c: Refactor band switching code into a common function. 2017-05-09 Ervin Hegedus * src/genqtclist.c, src/qtc_log.c, src/qtcwin.c, src/writecabrillo.c: Bugfix: when QTC was set up as BOTH (eg. RTTY) the CABRILLO had created as wrong format 2017-05-11 zcsahok * src/keyer.c, src/main.c, src/parse_logcfg.c: added option to use backspace in the keyer window This is for the fast but not perfectly typers: 2017-04-15 Thomas Beierlein * src/addcall.c, src/readcalls.c: struct needs initialization 2017-04-10 Thomas Beierlein * src/getctydata.c: factor out common code getctynr and getctydata uses the same code to prepare the call and look it up in prefix table. 2017-04-10 Thomas Beierlein * src/getctydata.h, src/setcontest.c: switch to getctynr() as we are only interested in the number here 2017-04-09 Thomas Beierlein * src/dxcc.c, src/dxcc.h, src/readctydata.c, src/readctydata.h: move load_ctydata() to dxcc.c 2017-01-12 Thomas Beierlein * src/getctydata.c: Refactor getctydata() code 2017-02-18 Thomas Beierlein * src/addcall.c, src/getctydata.c: fix inconsistent usage of getctydata() in addcall2() 2017-03-18 Thomas Beierlein * src/prevqso.c: resend report and qso nr with at least 3 digits 2017-03-01 Thomas Beierlein * src/addmult.c, src/changepars.c, src/globalvars.h, src/main.c, src/makelogline.c, src/readcalls.c, src/searchlog.c, src/showscore.c, src/tlf.h: add a structure to represent worked multis 2017-02-23 Thomas Beierlein * src/changepars.c, src/main.c, src/parse_logcfg.c, src/sendqrg.c: Allow arbitrary long string for 'RIGPORT' keyword Tnx Ed W3NR for pointing out. 2017-02-09 Thomas Beierlein * src/dxcc.c, src/dxcc.h: make usage of function more secure Only non negativ indices allowed. Check for out of bounds index. Return empty dummy data if no element found. 2017-02-19 Thomas Beierlein * src/addcall.c, src/addpfx.c, src/addpfx.h, src/makelogline.c, src/readcalls.c: change interface to add_pfx() function gets now pfxstr to add and bandindex for worked band. Makes function more independent if called for data coming from LAN 2017-02-06 Thomas Beierlein * doc/FAQ: add hints to correct own CQ zone to FAQ * share/cty.dat: update cty.dat file 2017-02-04 Ervin Hegedus * src/main.c, src/parse_logcfg.c, src/tlf.h: Removed unused UNIQUECALL values 2017-02-04 Thomas Beierlein * src/addmult.c, src/globalvars.h, src/makelogline.c, src/readcalls.c, src/showscore.c: Added UNIQUE_CALL_MULTI handling - unique call signs can now be counted as multis for allband or per band. (Needed e.g. for minitest like contests). * src/main.c, src/parse_logcfg.c, src/tlf.h, tlf.1.in: Accept UNIQUE_CALL_MULTI keyword 2017-01-12 Ervin Hegedus * src/addcall.c, src/main.c, src/parse_logcfg.c, src/readcalls.c, src/searchlog.c, src/tlf.h, tlf.1.in: Added new feature: MINITEST keyword to support the Mini CW test Optional an argument may passed to MINITEST, instean of hardcoded value 2017-01-30 Thomas Beierlein * macros/ax_with_curses_extra.m4: Better regocnition of If ax_with_ncurses finds a ncursesw instance the former code checks only for . If not there the search fails. That lead to problems at least in Arch Linux which has only installed. The patched version here checks first for and if not found also for . Tested for the following distributions: Gentoo, Debian 7..9, Linux Mint 17 and 18.1, Arch Linux, Ubuntu * src/get_time.c: clarify function of get_time() 2017-01-20 Thomas Beierlein * src/getctydata.c, tlf.1.in: Fix recognition of cq zone for 1Axxx stations 2017-01-15 Thomas Beierlein * src/writecabrillo.c: fix warning about redefinition of _GNU_SOURCE 2017-01-05 Thomas Beierlein * src/main.c, src/parse_logcfg.c: drop remnants of old 'keyerport' variable * src/changepars.c, src/keyer.c, src/main.c, src/sendbuf.c, src/speedupndown.c, src/stoptx.c, src/write_keyer.c: switch to new 'cwkeyer' variable * src/background_process.c, src/callinput.c, src/gettxinfo.c, src/keyer.c, src/main.c, src/qtcwin.c, src/rtty.c, src/sendbuf.c, src/sendspcall.c, src/stoptx.c, src/write_keyer.c: switch to new 'digikeyer' variable 2017-01-04 Thomas Beierlein * src/main.c, src/parse_logcfg.c: prepare for separate keyers for CW and digimode 2017-01-14 Thomas Beierlein * src/getpx.c: better implementation of getpx() - handles callsigns with only letters - correct handling of callsigns with long nummbers, e.g. DR2006Q or 9A800VZ 2017-01-06 Ervin Hegedus * src/parse_logcfg.c: Fixed wrong parsing for EXCLUDE_MULTILIST parameters 2017-01-10 Thomas Beierlein * src/readcalls.c: Fix test for countrynr in countrylist As getctydata() has a sideeffect of changing 'countrynr' itself we need to switch to use a local variable 'countrynr_tocheck' for the comparison. 2017-01-05 Thomas Beierlein * src/callinput.c, src/getexchange.c, src/gettxinfo.c, src/qtcwin.c, src/rtty.c: simplify logic to call 'show_rtty' Call 'show_rtty' whenever we are in DIGIMODE. 2016-12-29 Thomas Beierlein * src/sendqrg.c: add message if RIGPTT is not available for that rig 2016-08-14 Nate Bargmann * share/logcfg.dat, src/callinput.c, src/gettxinfo.c, src/main.c, src/parse_logcfg.c, src/sendqrg.c, tlf.1.in: Enable Hamlib CAT PTT if wanted and available Introduce a new keyword for logcfg.dat, RIGPTT, which is a directive to test for a Hamlib radio backend's PTT via CAT capability. If the backend reports it is capable, Hamlib CAT PTT will be used in place of the netkeyer PTT if Tlf is compiled with Hamlib support. 2016-12-22 Thomas Beierlein * src/splitscreen.c: output of cluster message needs a packet screen Each cluster message (external or from internal network between multiple loggers) will be processed in several steps: putting it on cluster screen, looking for a personal conversation, adding to bandmap. The change guarantees that it will only be added to the cluster screen if such an object got initialized. (That would not be the case if we started with the 'nopacket'-option or have no cluster configured). 2016-12-21 Thomas Beierlein * src/splitscreen.c: Migrate packet screen to ncurses panels Old implementation used a separate newterm call to get a separate display for packet screen -- separate from normal logger display. It was quite a hack but worked ok. In new ncurses6 newterm does no longer give us a separate screen. So we had to switch to use ncurses panels for the packet screen. A popup panel covers inow the whole screen when we switch to packet. That window is split into two derived windows for display of cluster messages and a second one for input - as did the old implementation. 2016-12-13 Thomas Beierlein * macros/ax_with_curses.m4, macros/ax_with_curses_extra.m4, src/Makefile.am: Use new AX_WITH_CURSES macro New macro uses pkg-config for detecting libs and cflags for programs using ncurses and falls back to old finding out the parameters 'by hand'. For TLF it fixes: - Using libtinfo if stripped out from libncurses - Added feature_test_macros for correct color handling if needed. 2016-12-29 Thomas Beierlein * doc/README.RTTY: adapt README.RTTY 2016-12-28 Thomas Beierlein * src/fldigixmlrpc.c: Make xmlrpc fldigi interface thread safe 2016-05-07 Thomas Beierlein * src/cleanup.c, src/keyer.c, src/main.c, src/qtcwin.c, src/sendbuf.c, src/write_keyer.c, src/write_keyer.h: refactor handling of send cw or digi data Cleanup code so that all data for cw or digi keying goes through the write_keyer() interface. That means anyone who wants to send code has to use the keyer_append() function which (in an thread safe manner) appends the data to a keybuffer. The actual keying is done by a background thread which regularly has to call the write_keyer() function. 2016-12-04 Thomas Beierlein * src/main.c, src/parse_logcfg.c, tlf.1.in: Set fldigis default URL automatically. * src/fldigixmlrpc.c, src/fldigixmlrpc.h, src/stoptx.c: minor changes - rename to 'fldigi_to_rx()' - do not add to a string of unknown length. Send '^r' on separate call afterwars. 2016-11-23 Thomas Beierlein * src/background_process.c, src/callinput.c, src/fldigixmlrpc.c, src/fldigixmlrpc.h, src/gettxinfo.c, src/main.c, src/rtty.c, src/stoptx.c, src/write_keyer.c, src/main.c, src/parse_logcfg.c, src/tlf.h, tlf.1.in: Allow new keyword FLDIGI to set up fldigi xmlrpc interface 2016-12-02 Thomas Beierlein * src/background_process.c, src/callinput.c, src/edit_last.c, src/get_time.c, src/getmessages.c, src/grabspot.c, src/lancode.c, src/score.c, src/scroll_log.c, src/searchlog.c: Cleanup - fix type mismatches for 64 bit compilers * src/sendbuf.c: cleanup some external declarations 2016-11-28 Thomas Beierlein * src/callinput.c, src/showpxmap.c: Fix bug: autosend did not work as Enter key was wrongly checked 2016-11-17 Thomas Beierlein * src/bandmap.c: fix bandmap display If stations in bandmap are really close to each other (0.1 kcs) after a grab from bandmap tlf showed the call on the frequency below as actual frequency. The above fixes the behaviour and does some minor corrections on comments. 2016-11-16 Thomas Beierlein * src/edit_last.c: Fix bug: Enter did not end editing of last QSOs. fixed. 2016-11-01 Thomas Beierlein * src/callinput.c: Fix bug: grab_next() not working without BMAUTOGRAB set The grab functionality did not work if BMAUTOGRAB was not set. Closer inspection showed that it worked shortly but got overridden by the tune-away functionality. The main reason was the time delay between requesting the change to a new QRG and the read back of the actual QRG. To fix it we introduced a small state machine for grabbing spots with i an intermediate IN_PROGRESS state which changes to REACHED as soon as the actual QRG reaches the spot QRG. And only then the tune-away functionality can do their work. * src/qtcvars.h, src/readqtccalls.c: drop unused variable 2016-08-01 Ervin Hegedus * doc/README_QTC.txt, rules/waedc_eu, src/main.c, src/parse_logcfg.c, src/qtcvars.h, src/qtcwin.c, tlf.1.in: QTC_RECV_LAZY config option to skip the RECV restrictions 2016-08-01 Thomas Beierlein * ChangeLog, NEWS, configure.ac: Prepare for tlf-1.2.4.2 bug fix release 2016-07-28 Thomas Beierlein * src/show_help.c: drop old unused implementation of show_help(), fix segmentation fault if help.txt gets found in local directory 2016-07-18 zcsahok * src/netkeyer.c, src/netkeyer.h: netkeyer: streamlined (part 2) - add synthactic sugar - fix buffer overflow 2016-07-03 zcsahok * src/netkeyer.c: netkeyer: streamlined (part 1) 2016-06-26 Nate Bargmann * configure.ac: Remove unwanted indentation from '--help' output * src/calledit.c, src/callinput.c, src/getexchange.c: Fix and keys for call input and exchange fields * tlf.1.in: Update the man page Many updates to the manual page. Many more corrections and additions likely remain. 2016-05-16 zcsahok * src/sendbuf.c: sendbuf.c: fix replace_n, reworked ExpandMacro 2016-05-11 Colin Tuckley * tlf.1.in: Fix spelling errors. 2016-05-09 Ervin Hegedus * src/gettxinfo.c: Aligned hamlib's passband argument to the new macro: RIG_PASSBAND_NORMAL 2016-05-04 Thomas Beierlein * src/checklogfile.c: fix possible ressource leaks 2016-05-03 Thomas Beierlein * src/dxcc.c: support reloading the cty.dat database Free the g_ptr_arrays for dxcc and prefix data befre reallocation 2016-05-03 Thomas Beierlein * src/readctydata.c, src/readctydata.h: split out loading of cty database from named file That allows a better testability as we can provide a specialised cty.dat file. 2016-05-03 Thomas Beierlein * src/show_help.c: fix memory leak 2016-04-28 Thomas Beierlein * src/addmult.c: fix possible buffer overflows due to strncpy 2016-03-25 Thomas Beierlein * src/bandmap.c: respect 'S'kip not dupes setting for bandmap * src/addpfx.c: fix possible segmentation fault Do only remember MAX_PFX_LEN chars from prefix (atm 5). As prefix regognition is not perfect we get sometimes longer prefix signatures which led to segfaults. 2016-03-06 Thomas Beierlein * Makefile.am: autoconf needs some more hints to find our macros 2016-03-04 Thomas Beierlein * src/callinput.c: allow BMAUTOGRAB also in Run mode * src/callinput.c: update run/s&p mode display after alt/ctrl-g 2016-03-03 Thomas Beierlein * src/bandmap.c, src/bandmap.h, src/callinput.c: Implement BMAUTOGRAB If set callinput field will automatically grab an active spot from teh bandmap if TRX frequency is near spot frequency. Works only in S&P mode. 2016-02-10 Thomas Beierlein * src/callinput.c: change autoadd triggering Former version had difficulties to distinct between callsigns entered by the operator and callsigns grabbed from bandmap. Now 'freqstore' remembers the actual QRG as soon as the operator enters any chars into the call input field. That frequency is used to detect QRG changes (tuning away). In any other case (e.g. callsign grabbed from bandmap) 'freqstore' stays 0. 2016-02-09 Thomas Beierlein * src/background_process.c, src/callinput.c, src/main.c, src/parse_logcfg.c: Move AUTOGRAB function to callinput() 2016-02-08 Thomas Beierlein * src/addspot.c, src/addspot.h: Refactor code to add a spot to bandmap - Split out the code to format a fake DX spot, add it to the own spot list and send it to other stations on the LAN. * tlf.1.in: Add description to man page 2016-02-05 Ervin Hegedus * src/background_process.c, src/main.c, src/parse_logcfg.c: Improve new BMAUTOADD feature 2016-01-26 Thomas Beierlein * src/ui_utils.c, tlf.1.in: Add some warning to lookup_keys() If some special key combinations (Alt/Ctrl-PgUp/PgDown) do not work on the terminal give a message to the user and suggest using ':cqd' Add that to the man page also 2016-01-25 Nate Bargmann * src/bandmap.c: Initialize dupe value when a new spot is created Checking with Valgrind memcheck generated in the report that, "Conditional jump or move depends on uninitialised value(s)" in bmdata_write_file (bandmap.c:134). The result is that various values could be written for the dupe value in .bmdata.dat. Fixed by setting the dupe variable to 0 in bandmap_addspot(). This variable is only used in bandmap_show() and is never stored back into the allspots GList. * src/main.c: Make sure that rig control is closed properly on exit If Hamlib is enabled in the build, close the rig port and release the rig instance on exit. 2016-01-24 Thomas Beierlein * src/callinput.c, src/main.c, src/ui_utils.c, src/ui_utils.h: determine key codes for extended keys during startup 2016-01-23 Nate Bargmann * src/changepars.c: Combine EXIT and QUIT stanzas The case stanzas for EXIT and QUIT were identical so combine them. * src/sockserv.c: Use memmove() for overlapping strings. Checking Tlf with Valgrind showed that memcpy() was assigning a string back onto itself. The Glibc documentation says doing so will result in undefined behavior and recommends using memmove() instead. * doc/keynames.txt, src/callinput.c: Use keyname() to test for Ctrl/Alt PageUp/Down keys Testing has shown that the ordinal values for these extended keys are defined in the terminfo database and vary across systems. Use the ncurses keyname() function along with strcmp() to determine the keys based on their names which appears to be consistent across the systems tested. 2016-01-21 Nate Bargmann * src/callinput.c, tlf.1.in: Add Alt-PageUp/PageDown keys for Auto_CQ delay Some terminals consume the Ctl-PageUp/PageDown keys (Xfce Terminal is one). Add Alt-PageUp/PageDown as alternatives for increasing or decreasing the Auto_CQ pause delay time. 2016-01-20 Nate Bargmann * src/splitscreen.c: Ensure keypad is called when exiting packet screen When the packet screen is opened, keypad(entwin, TRUE) is called on the entwin window. When set_term(mainscreen) was called, the keypad was not being redirected back to stdscr. This should now be fixed and the arrow keys respond as expected in the call input field. * src/main.c: Don't call obsolete crmode() function Ncurses documentation advises that crmode() should not be used. In curses.h it is a macro that calls cbreak(), so call cbreak() instead for clarity. 2016-01-17 Nate Bargmann * src/getexchange.c: Merge F11 processing with other F keys The old code had a skip in the numbering of the F keys jumping from 138 for F10 to 140 for F11. As Ncurses now assigns sequential values using the KEY_F(n) = KEY_F(0) + n macro, this special handling is no longer necessary. 2016-01-12 Nate Bargmann * src/audio.c, src/autocq.c, src/calledit.c, src/callinput.c, src/changefreq.c, src/changepars.c, src/edit_last.c, src/getexchange.c, src/keyer.c, src/main.c, src/messagechange.c, src/qtcwin.c, src/showpxmap.c, src/tlf_curses.h, src/ui_utils.c, tlf.1.in: Process input keystrokes using keypad() Ncurses provides the keypad() function that maps most escaped key codes to named constants found in curses.h. The onechar() function has been reworked to minimize the amount of key escapes that need to be caught. Those that are caught are assigned values to match the Ncurses declared constants. Keys were tested on the Linux console, and the following X11 terminal emulators, Xfce Terminal, Gnome Terminal, Xterm, and Qterm. Update the tested constants to match the Ncurses defined constants in the rest of the sort where key_get() and key_poll() are called. Ncurses will honor the value of the environment variable ESCDELAY but to avoid the users having to set it, use the set_escdelay() function to set the delay to 25 mS (default is 1000 mS when unset) when the environment variable is unset. Should that be too short, users can set it via the usual method, i.e. 'export ESCDELAY=125' would set a delay of 125 mS. 2016-01-08 Nate Bargmann * doc/keynames.txt: Add keynames.txt Document the decimal value and name string as returned by keyname() and accepted by key_defined() for Ncurses by default. Keystrokes are processed from the various codes as shown by 'showkey -a' and escaped sequences are assigned to values corresponding to the values and names in this file. 2016-01-02 Ervin Hegedus * src/fldigixmlrpc.c: Fixed hamlib-related variable compile error 2016-01-02 Thomas Beierlein * src/fldigixmlrpc.c: fix unreachable code sequences * src/fldigixmlrpc.c, src/gettxinfo.c: fix compile errors with --disable-hamlib 2015-12-31 Thomas Beierlein * configure.ac: Use mailing list address in AC_INIT macro ... as suggested by Nate N0NB 2015-12-30 Nate Bargmann * configure.ac: Set temporary CFLAGS, CPPFLAGS, LIBS variables To assist AC_CHECK_LIB and AC_CHECK_HEADERS temporarily set the user variables to the paths found by pkg-config. 2015-12-29 Thomas Beierlein * src/addmult.c: Correct logic for WYSIWYG multis coming in via LAN 2015-12-20 Thomas Beierlein * src/addmult.c: keep the list of possible multis sorted * src/addmult.c: better tests for possible mults for ARRL_SS and DX_&_SECTIONS Old logic failed if some multi was part of a multi coming later in the multi list (e.g. NE and ONE). Then tlf picked up the first one and mised the other one. New logic scans all possible multis and keeps the longest one which matches. Added some syntactic sugar - ALL_BAND or PER_BAND to make clear if a multi counts per band or only once per contest. 2015-12-19 Thomas Beierlein * src/addmult.c, src/addmult.h, src/main.c: cleanup logic init_and_load_multipliers is now responsible for (freeing and new) allocation of the mults_possible array. It now handles empty multplier filenames gracefully by giving back an empty mults_possible array. The former check for naming the file is now the responsibility of the calling function (if needed). 2015-12-14 Thomas Beierlein * src/addmult.c: Tests for empty strings are already handled in remember_multi(). Furthermore for-loops tests themself if endcondition is already fullfilled when entered. So we can drop some needless tests. 2015-12-19 Nate Bargmann * macros/ax_with_curses.m4, src/tlf_curses.h, src/tlf_panel.h: Revert local changes to macros/ax_with_curses.m4 Tom, DL1JBE, reported that on some systems with ncursesw installed, the modification made to macros/ax_with_curses.m4 caused a compilation failure. The patch reverts those changes and returns the macro file to its original format of serial 15. Also updated src/tlf_curses.h and src/tlf_panel.h to extend the header macro tests to the ncursesw headers. * configure.ac, src/Makefile.am: Set LIBM_LIB to preserve the LIBS variable Autoconf documentation states the LIBS is a precious variable reserved for the user. Add macros to define HAVE_LIBM in config.h and LIBM_LIB in src/Makefile. Add LIBM_LIB to tlf_LDADD in src/Makefile.am. * configure.ac, src/Makefile.am, src/addmult.c, src/readctydata.c, src/rules.c, src/searchlog.c, src/show_help.c, src/writecabrillo.c: Define PACKAGE_DATA_DIR in src/Makefile.am Automake provides the predefined 'pkgdatadir' Makefile variable which is the same path as the previously caclulated PACKAGE_DATA_DIR value in configure.ac. Use it to set PACKAGE_DATA_DIR as a -D value to the preprocessor via AM_CPPFLAGS in src/Makefile.am which is passed to the source files during preprocessing. This conforms with current Autotools convention. As PACKAGE_DATA_DIR is longer defined in config.h, remove its include directive from those files that were only including it for the PACKAGE_DATA_DIR definition. 2015-12-18 Nate Bargmann * configure.ac, macros/ax_append_flag.m4, macros/ax_cflags_warn_all.m4, macros/ax_require_defined.m4, src/Makefile.am: Use AX_CFLAGS_WARN_ALL to determine compiler warnings As CFLAGS is a a precious user variable, use the AX_CFLAGS_WARN_ALL macro and have it assign the warning flag(s) to AM_CFLAGS which is then substituted into the Makefile. This macro determines the best warning for various compilers. This macro depends on the AX_APPEND_FLAG and AX_REQUIRE_DEFINED macros (in separate files). * configure.ac, src/Makefile.am: Update Fldigi XML RPC stanza in configure.ac The Autoconf documentation states that LIBS and CFLAGS are reserved for the user. Refactor the Fldigi XML RPC stanza to avoid assigment to those precious variables. Instead assign new LIBXMLRPC_LIB, LIBXMLRPC_CLIENT_LIB, and LIBXMLRPC_UTIL_LIB to tlf_LDDADD in src/Makefile.am. Define the HAVE_LIBXMLRPC, HAVE_LIBXMLRPC_CLIENT, and HAVE_LIBXMLRPC_UTIL macros for config.h Also use standard Autoconf macros instead of raw shell if conditional and complete quoting per current Autoconf convention. * configure.ac, src/Makefile.am: Update Hamlib stanza in configure.ac The Autoconf documentation states that LIBS and CFLAGS are reserved for the user. Refactor the Hamlib stanza to avoid assigment to those precious variables. Instead assign the HAMLIB_CFLAGS and HAMLIB_LIBS generated by the pkg-config macro to AM_CFLAGS and tlf_LDDADD in src/Makefile.am respectively. Also use standard Autoconf macros instead of raw shell if conditional and complete quoting per current Autoconf standards. * acinclude.m4, configure.ac, macros/ax_pthread.m4, src/Makefile.am: Update to AX_PTHREAD macro The newer ax_pthread.m4 macro file from the Autoconf archive provides updated searches for determining the correct pthread compilation flags and linking libraries. This version also adds support for clang which is becoming more important as a supported compiler. As the ACX_PTHREAD macro is now outdated, remove acinclude.m4 from the repository. * configure.ac, src/Makefile.am: Use glib macro to detect glib The glib package includes its own M4 macro that uses pkg-config and also compiles against the library to ensure it is available and suitable for use. Also check that pkg-config is really available and exit configure with an error if it is not. 2015-12-16 Nate Bargmann * macros/ax_with_curses_extra.m4: Fix bug in ax_with_curses_extra.m4 Found a bug where the AX_WITH_CURSES_PANEL macro would incorrectly reset the ax_cv_panel variable to 'no' when checking for the panel.h header a second time even though it had found it as ncurses/panel.h on the previous call. Confirmed working by David, CT1DRB. 2015-12-15 Nate Bargmann * Load ncurses.h via tlf_curses.h Regarding Tlf Issue #51, this patch provides consistency in the form of having the build system determine which ncurses header file is available. The build system will set relevant macros in config.h and boilerplate in tlf_curses.h will select the proper include path based on the tests. This patch confines the boiler plate to one file resulting in minimal editing of the other source files. this patch resolves the problem of distributions putting panel.h in /usr/include/ncurses rather than in /usr/include. Thanks to David, CT1DRB, for reporting this issue with OpenSuSE LEAP 42.1. The build system will set relevant macros in config.h and boilerplate in tlf_panel.h will select the proper include path based on the tests. This patch confines the boiler plate to one file resulting in minimal editing of the other source files. * configure.ac, macros/ax_with_curses.m4, macros/ax_with_curses_extra.m4, src/Makefile.am: Switch Autoconf Archive macros for Curses search Use the AX_WITH_CURSES and AX_WITH_CURSES_PANEL macros to determine the library and header files location for curses. For now the AX_WITH_CURSES macro is edited to only look for ncurses or curses and not ncursesw. Also the configure options have been commented out as ncurses is required. Macros are set in config.h to allow testing for the proper header file location to include. 2015-12-14 Nate Bargmann * configure.ac: Adjust tests in configure.ac Reposition several tests to be run before the tests for third party packages. Temporarily comment out the AC_PROG_GCC_TRADITIONAL and AC_FUNC_STRFTIME macros as the Autoconf documentation states they are obsolescent. Temporarily comment out the AC_HEADER_STDBOOL macro as no source file loads stdbool.h at this time. Remove some header files from AC_CHECK_HEADERS as they are already checked by the AC_HEADER_STDC macro. * .gitignore, config.h.in, configure.ac: Remove generated config.h.in file Have Autoconf check for src/tlf.h to assure the build system is working in the correct project directory. As the AC_CONFIG_HEADERS macro will generate config.h.in upon build system bootstrap, there is no need to carry this file in the repository. Have git ignore generated config.h.in. 2015-12-08 Nate Bargmann * .gitignore: Have Git ignore backup files ( *~ ). 2015-12-12 Ervin Hegedus * doc/README.RTTY, src/fldigixmlrpc.c, src/gettxinfo.c, src/globalvars.h, src/main.c: Added new feature: calculate the QRG in different modulations, as FSK, LSB/USB 2015-12-11 Thomas Beierlein * src/readcalls.c: Fix bug in using multarray_nr for 'SERIAL&SECTION' keyword Back in tlf 0.9.10 there was some inconsistent handling of the index for adding new multis to mults[] array. Sometimes they were counted from 0 sometimes from 1 (depending on the contest). That was fixed some time ago but there was a remnant in 'readcalls()' function left. That got dropped now. * src/addmult.c: Fix bug in multcounting for ARRL-SS 'multarray_nr' is the number of multis in 'mults[]' array. So to add a new mult first copy it into the array and later increment the number of the multis. 2015-12-09 Thomas Beierlein * src/main.c, src/ui_utils.c, src/ui_utils.h: Move refreshp() to ui_utils.c 2015-12-03 Nate Bargmann * src/addmult.c: Test for existence of MULT_LIST in install directory Code only checked for MULT_LIST value in the working directory. Now also check for the file in the installation directory. e.g. /usr/local/share/tlf 2015-12-05 Nate Bargmann * tlf.1.in: Fix typos in tlf.1.in 2015-11-30 Nate Bargmann * share/logcfg.dat, src/editlog.c, src/parse_logcfg.c: Prefer 'mcedit' for logcfg.dat Also make sure that old values of 'mc' and 'MC' are recognized. Enable 'mcedit' as a log file editor. * rules/Makefile.am, rules/arrl160m_usa: Add ARRL 160m USA rules file Ensure the new file is distributed and installed. 2015-11-29 Thomas Beierlein * src/addcall.c: simplify switch logic in addcall() and addcall2() Replace hard coded bandmask and bandindex values by switch variable and finally merge the different switch branches which are now identical together. 2015-11-19 Thomas Beierlein * src/addcall.c, src/globalvars.h, src/main.c, src/paccdx.c, src/readcalls.c, src/showscore.c: extend countryscore[] to full number of bands see * src/addcall.c, src/globalvars.h, src/main.c, src/readcalls.c, src/showscore.c: extend zonescore[] and countryscore[] array to full number of bands Until now there was a distinction between counting things for all bands (WARC and non WARC) and counting zones and countries for contest bands only. The handling can be simplified if we unify the handling and count zones and countries for ALL bands. We can then ignore the non WARC entries for contest scoring. Furthermore it is more easy to add additionla bands later. 2015-11-28 Nate Bargmann * Move includes from headers as much as possible. Only include other header files in header files if absolutely necessary. Source files declare all needed includes. This results in five local headers that still include other headers src/globalvars.h:2:# include "tlf.h" src/globalvars.h:5:#include src/nicebox.h:24:#include src/qtcvars.h:21:#include "globalvars.h" src/searchlog.h:24:#include src/sendqrg.h:25:# include src/sendqrg.h:29:# include This minimizes, but doesn't entirely eliminate depedency chains when including certain header files. All local header files should have include guards so multiple include directives should not cause an error. 2015-11-23 Thomas Beierlein * src/addcall.c: Drop redundant test for 'pfxnummultinr>0' 'pfcnumcntidx > -1' can only be true if 'pfxnummultinr > 0'. 2015-11-22 Thomas Beierlein * src/addcall.c: Fix lookup in pfxnummulti table If getctydata() did not find the country (returns 0) then pfxnumcntidx got set to a wrong number. 2015-11-18 Thomas Beierlein * src/bandmap.c: fix calculation of remaining time during bandmap read Lastly spot->timeout got changed to unsigned. We must take care that we do not get a wrap ariund if the diff between writing und reading the bandmap data ist to big. * src/bandmap.c, src/bandmap.h, src/time_update.c: Fix saving of bandmap data Bandmap data are saved every 10s. It works now even if the bandmap is not shown and even if auto CQ is working. * src/autocq.c: Fix some small bug in auto_cq mode: - Do a time_update() to keep displayed time and bandmap actual (tnx HA2OS for reporting) 2015-11-01 Thomas Beierlein * share/Makefile.am, share/qtcmerge.py: Delete files no longer needed * share/cty.dat: update cty.dat to VER20151027 2015-10-28 Ervin Hegedus * rules/waedc_dx_rtty, rules/waedc_eu_rtty: Modified rule files for WAE RTTY, for EU and DX stations * src/qtcwin.c: Some minor changes to fixup the QTC send method in RTTY * src/genqtclist.c: Fixed gentclist item length bug: if QTC set up as BOTH, then the SEND length wasn't calculated correctly * src/qtcwin.c: Fixed empty record command issue: if qtcrec_command was empty, Tlf drops an error 2015-10-31 Thomas Beierlein * datastructures: update description of datastructures * src/background_process.c, src/main.c, src/searchlog.c, src/searchlog.h: switch callmaster database to growing arrays * src/searchlog.c: Allow comment lines in callmaster data base 2015-10-30 Thomas Beierlein * share/callmaster: update callmaster file * doc/FAQ: extend the FAQ 2015-10-25 Thomas Beierlein * src/clusterinfo.c: drop unused code, initialize spot array 2015-10-27 Ervin Hegedus * src/callinput.c: Fixed immediated auto_cq bug: if Tlf sends CQ in auto mode, and op press the first letter of callsign, that will be lost 2015-10-25 Thomas Beierlein * src/checklogfile.c, src/checkqtclogfile.c: Fix some NULL pointer warnings * doc/FAQ: Add information about refreshing callmaster database and CTY.DAT to FAQ 2015-10-22 Thomas Beierlein * README: drop reference to not longer accessible wikispaces pages 2015-10-13 Thomas Beierlein * src/bandmap.c: Cleanup bmdata_read_file - fix memory leak - close file pointer - restructre parsing loop - simplify * src/writecabrillo.c: Close opened file pointers in case of error 2015-10-11 Ervin Hegedus * src/bandmap.c: Added new feature: save bandmap state when bandmap state changed, and 10 secs elapsed till last write; this file will read by Tlf when starts again 2015-10-06 Thomas Beierlein * src/bandmap.c: Do not show QRG in bandmap when no active rig control in use Show bandmap around center frequency for actual selectzed band and mode. 2015-09-22 Ervin Hegedus * rules/waedc_dx, rules/waedc_dx_rtty, rules/waedc_eu, rules/waedc_eu_rtty, share/qtcmerge.py, src/writecabrillo.c: Full 'QTC' line support in cabrillo output 2015-09-13 Ervin Hegedus * src/qtcwin.c: Fixed fill QTC time bug: after the last fill, the minutes remained in all lines 2015-09-22 Thomas Beierlein * ChangeLog, NEWS: Add missing NEWS and ChangeLog entries for tlf-1.2.2_pre1 2015-09-16 Thomas Beierlein * src/bandmap.c, src/bandmap.h, src/parse_logcfg.c, src/time_update.c: Improve bandmap display code - display actual QRG on bandmap - center bandmap around QRG - update bandmap every second - do not show WARC spots in contest mode 2015-09-13 Ervin Hegedus * src/qtcwin.c: Fixed fill QTC time bug: after the last fill, the minutes remained in all lines 2015-08-30 Ervin Hegedus * src/bandmap.c: New feature: better handling of bandmap for WAE stations - show station as workable on bandmap as long as it has any QTC capable flags left 2015-09-01 Ervin Hegedus * src/qtcwin.c: New feature: Ctrl-R to start and stop QTC recording - show recording state (on/off) 2015-08-31 Ervin Hegedus * src/main.c, src/parse_logcfg.c, src/qtcvars.h, src/qtcwin.c, tlf.1.in: New feature: QTC_AUTO_FILLTIME - CTRL-F shortkey to fill the first two letters of QTC time 2015-08-27 Ervin Hegedus * src/background_process.c, src/lancode.c, src/lancode.h, src/qtcutil.c, src/qtcutil.h, src/qtcvars.h, src/qtcwin.c, src/readqtccalls.c: New feature: new QTC capable flags: - 'L': 'later', 'N': 'NO' for callsigns, - indicates them in bandmap and worked window - send QTC flags through LAN to another nodes * src/bandmap.c, src/main.c, src/parse_logcfg.c, src/qtcutil.c, src/qtcutil.h, src/qtcvars.h, src/readqtccalls.c, src/searchlog.c, tlf.1.in: New feature: initial QTC capable callsigns list, and indicates them in bandmap and worked window 2015-09-05 Ervin Hegedus * src/background_process.c, src/lancode.c, src/lancode.h, src/qtcutil.c, src/qtcutil.h, src/qtcwin.c, src/readqtccalls.c: New feature: QTC flags sending through LAN to another nodes, when user mark a callsign. 2015-08-05 Ervin Hegedus * src/qtcwin.c: Added new feature: move to next field in callsign/serial/qtc nr fields with SPACE or ENTER * src/qtcwin.c rules/waedc_eu: Fix some minor problems as result to last WAEDC SSB 2015-08-14 Thomas Beierlein * Fix handling of ITUMULT and WAZMULT keyword CQ and ITU zones gets scored in the same 'zones[]' array. The commit fixes the following problems: - zones[] array was to small (only for 40 CQ zones) - display of worked zones did not work - rescoring did not recognize the already worked zones. 2015-08-03 Thomas Beierlein * src/splitscreen.c: fix segfault due to possible buffer overrun 2015-04-05 Thomas Beierlein * rules/Makefile.am, rules/aadx_as, rules/aadx_dx: Add All Asian DX contest 2015-07-10 Thomas Beierlein * src/addcall.c, src/makelogline.c: Fix PFX_MULT_MULTIBAND logic * PFX_MULT_MULTIBAND counts prefix as multi, when country/continent is excluded 2015-07-09 Thomas Beierlein * src/initial_exchange.c: Fix potential memory leak 2015-04-30 Thomas Beierlein * src/showscore.c: clean up of display code for PFX_MULT_MULTIBAND 2015-04-06 Thomas Beierlein * src/addpfx.c, src/addpfx.h, src/globalvars.h, src/readcalls.c, src/showscore.c: cleanup PFX_MULT_MULTIBAND logic * src/addcall.c, src/addcall.h, src/main.c, src/parse_logcfg.c, src/readcalls.c, tlf.1.in: Add EXCLUDE_MULTILIST keyword 2015-07-07 Thomas Beierlein * src/addcall.c, src/globalvars.h, src/main.c, src/makelogline.c, src/parse_logcfg.c, src/readcalls.c, src/searchlog.c, src/tlf.h, tlf.1.in: Add PFX_NUM_MULTI keyword 2015-06-20 Thomas Beierlein * src/callinput.c, src/changepars.c, src/main.c, src/printcall.c, tlf.1.in: autosend now supports manual start feature (see issue #12). * Set :char to 'm' for manual mode. Enter key starts sending cw but you can type additional characters to the call sign. As soon as tlf sent all characters it sneds the exchange. * src/log_to_disk.c, src/main.c, src/prevqso.c, src/prevqso.h: resending of last qsonr honors also last report * src/sendbuf.c, src/sendbuf.h: factor out conversion to short cw numbers * src/sendbuf.c, src/setcontest.c: drop contradictionary setting of shortqsonr for ARLL_SS 2015-05-31 dh5fs * src/prevqso.c: update "repeat number" string its better to send "5NN" as prefix before repeating the number then NR, some people react better to that under low S/N conds 2015-04-05 Thomas Beierlein * src/addcall.c, src/addpfx.c, src/globalvars.h, src/main.c, src/makelogline.c, src/parse_logcfg.c, src/readcalls.c, src/showscore.c, tlf.1.in: add multi scoring for prefixes per band - new keyword PFX_MULT_MULTIBAND - adapted counting and display 2014-07-02 Thomas Beierlein * src/main.c, src/parse_logcfg.c, src/readcalls.c, src/readcalls.h, src/score.c, tlf.1.in: add more keywords for CONTINENT handling - CONTINENTLIST continents to score points for - CONTINENT_LIST_POINTS points for the continent from CONTINENTLIST - USE_CONTINENTLIST_ONLY Zero points for other continents 2014-06-21 Thomas Beierlein * src/main.c, src/parse_logcfg.c, src/score.c, src/showscore.c, tlf.1.in: add BANDWEIGHT_MULTIS and BANDWEIGHT_POINTS keywords - allow to give a weight for the multis on different bands e.g. BANDWEIGHT_MULTIS=160:4,80:3,20:2 - Multis for Bands not in list are multiplied by 1 - allows to give a weight for the points on different bands - Points for Bands not in list are multiplied by 1 2015-03-01 Thomas Beierlein * src/score.c: refactored for better test and maintenance The goal was to get a better understanding or the point scoring logic and to allow easy extensions in future. - Split score() into contest specific rules and universal point scoring logic - factored out some common functions - added some comments and made structure more clear 2015-02-27 Thomas Beierlein * src/main.c, src/parse_logcfg.c, src/score.c: cleanup and fix COUNTRYLIST= handling - Fix initialisiation of countrynr 2015-02-22 Nate Bargmann * configure.ac, tlf.1.in: Update manual page to current conventions The man pages project provides guidelines for writing manual pages. This rewrite attempts to bring the Tlf man page up to those standards. It is likely that several errors and omissions still exist. 2015-02-16 Thomas Beierlein * src/Makefile.am, src/onechar.c, src/onechar.h, src/ui_utils.c: Move onechar() routine and make it static We hide the onechar() routine to force the use of the new key_get() and key_poll() routines. That is a first step to switch to a different handling of key input. The next step will be a switch to curses keypad mode where curses decodes the ESC sequences itself. That will allow for: - handling more terminal types - resizing the program window - accepting mouse input 2015-02-13 Thomas Beierlein * src/audio.c, src/bandmap.c, src/calledit.c, src/callinput.c, src/changefreq.c, src/changepars.c, src/checklogfile.c, src/deleteqso.c, src/edit_last.c, src/focm.c, src/getexchange.c, src/keyer.c, src/listmessages.c, src/main.c, src/messagechange.c, src/muf.c, src/setparameters.c, src/show_help.c, src/showpxmap.c: unify key input handling - move usage of 'getchar()' to 'key_get()' getchar() bypassed the curses key input routines. So we drop them and use key_get() instead to ask for the next key from the user. - curses getch() does not handle multi character escape sequences (e.g. function keys) well. So we switch to using the new key_get() function which will give us only one key code per key press. - switch to key_get in all remaining cases where onechar() was used. * src/audio.c, src/autocq.c, src/callinput.c, src/getexchange.c: use new key_poll() function Change all places where we only poll for keypresses without waiting to use the new key_poll() function. * src/ui_utils.c, src/ui_utils.h: add utility functions for non/blocking user input 2015-02-02 Thomas Beierlein * src/audio.c, src/autocq.c, src/callinput.c, src/changepars.c, src/cleanup.c, src/clear_display.c, src/clusterinfo.c, src/freq_display.c, src/log_to_disk.c, src/logit.c, src/muf.c, src/nicebox.c, src/printcall.c, src/rtty.c, src/searchlog.c, src/showinfo.c, src/showpxmap.c, src/splitscreen.c, src/time_update.c, src/writecabrillo.c: Use modify_config() instead checking 'use_rxvt' * src/Makefile.am, src/ui_utils.c, src/ui_utils.h: Add files to provide User Interface utilities - Linux terminal requires A_BOLD to be set for most attributes. Instead of adding the check for use_rxvt to each attribute settings we provide modify_attr() function to do it instead. 2015-02-03 Thomas Beierlein * many files... fixup #include files - add include guards - drop includes already included by tlf.h - sort out otherwise inherited includes and make them explicit 2015-01-24 dh5fs * share/darcmults: darc_mults Multiplier file for DARC contests (Oct/14) 2015-01-18 Thomas Beierlein * src/Makefile.am, src/background_process.c, src/getexchange.c, src/logit.c, src/logit.h, src/main.c, src/parse_logcfg.c, src/set_tone.c, src/set_tone.h, src/write_tone.h: drop unneeded include file (write_tone.h) - function is already exported by set_tone.h - cleanup according includes * src/callinput.c, src/changepars.c: rework display of remaining sections in multiplierinfo 2015-01-17 Thomas Beierlein * src/getctydata.c, src/getctydata.h: backport fixes from waedc-qtc, add include guards * src/calledit.c, src/callinput.c, src/getwwv.c, src/globalvars.h, src/logit.c, src/scroll_log.c, src/searchlog.c, src/showinfo.c: Fix lint reports and cleanup - cleanup old crap from globalvars.h - fix potential truncations in handling of timeoffset - fix conditions never met in callinput.c - fix possible NULL pointers going into file functions (searchlog.c, ) - fix warning about uninitialized call2[] variable - Exit if logfile could not be opened (scroll_log.c) * src/bandmap.c, src/rtty.c, tlf.1.in: backport some fixes from waedc-qtc branch 2014-12-30 Thomas Beierlein * src/listmessages.c, src/logit.c, src/main.c, src/messagechange.c, src/parse_logcfg.c: cleanup * switch to using SP_TU_MSG and CQ_TU_MSG instead of hardcoded value * fix 'parse_logcfg()' * src/listmessages.c, src/listmessages.h, src/tlf.h: adapt :list command * :list now shows also the S&P_CALL_MSG * fix twisted definition of SP_TU_MSG and CQ_TU_MSG * add #include guard * src/parse_logcfg.c, tlf.1.in: Allow to use a custom S&P message instead of the autogenerated one. * extend message[] field by one * add new Keyword S&P_CALL_MSG * Use the new S&P_CALL_MSG if set * src/main.c, src/sendspcall.c, src/tlf.h: Allow to use a custom S&P message instead of the autogenerated one. * extend message[] field by one * Use the new SP_CALL_MSG if set 2014-10-27 Thomas Beierlein * src/callinput.c: Unify sending of call in S&P mode. - Normally the key is handled by using 'sendspcall()' after key. - F1 key in empty call field did also send the own call but by separate code. Now we use 'sendspcall()' in these case too. 2014-12-22 Ervin Hegedus * src/rtty.c: Seek gMFSK.log to end of the file, when Tlf starts 2014-12-20 Reiner Herrmann * scripts/soundlog: Remove bashisms in sh script. * scripts/soundlog: Drop -d /dev/dsp1 in favor of default. Taken from Debian patch by John AC6SL . * scripts/soundlog: Change hardcoded home directory with $HOME. Taken from Debian patch by John AC6SL . 2014-11-03 Thomas Beierlein * src/fldigixmlrpc.c, src/fldigixmlrpc.h: New code from airween to read offset frequency from fldigi via xmlrpc - Added new configure option: --enable-fldigi-xmlrpc - Added fldigixmlrpc.[ch] files to read the carrier value of Fldigi - Modified affected parts of code, when indicated/used the RIG freq: * show frequency at right middle part in main window * store the correct freq when user grabs the spot * restore the correct freq when user loads a station from the bandmap - finally add missing #include and include-guard 2014-10-31 Thomas Beierlein * src/parse_logcfg.c: Convert CALL= from logcfg.dat always to upper case. - Pierre VE3KTB reported that cqww scoring did not work correctly if he enters his own call in mixed or lower case. Thanks for the report. 2014-10-27 Thomas Beierlein * src/callinput.c, src/main.c: Fix use of Alt-0..Alt-9 messages - message[] field had one member to much. Range of input keys was also one too wide. 2014-10-26 Thomas Beierlein * src/main.c: comment usage of cw/digi/phone messages 2014-10-09 Thomas Beierlein * src/keyer.c: put keyer into a popup window - define keyer window size and position - pop up a panel at keyer start and hide when it stops 2014-09-24 Ervin Hegedus * src/main.c, tlf.1.in: Added new startup argument: '-r', which disables radio control 2014-09-24 Ervin Hegedus * src/getexchange.c, src/makelogline.c: Added extra check for exchange field for CQ-WW-RTTY - CQWW RTTY contest requires the two letter province for US and Canada stations in the exchange. * src/logit.c: Modified automatic cq zone nr copy to comment variable, if that's not empty - If the user modified the exchange field, which was filled out by Tlf from cty.dat, then Tlf rewrite the original value if switching bqack forth between call input and comemtn field. * src/getexchange.c, src/makelogline.c: Added extra check for exchange field for CQ-WW-RTTY * src/logit.c: Modified automatic cq zone nr copy to comment variable, if that's not empty * src/main.c: Added new startup argument: '-r', which disables radio control 2014-09-23 Thomas Beierlein * src/main.c: fix initialization of digi modems. - write_tone() works only for NET_KEYER and therefore calling it in the wrong context gave only an error resulting in switching back to SSB mode. 2014-09-07 Thomas Beierlein * src/sendbuf.h: make sendbuf() and buffer[] private - new code should use sendmessage() instead * src/keyer.c, src/main.c: cleanup keyer() - second part - correct logic for sending - do not send control characters to the keyer - drop no longer used logic to buffer input and display it via buffer[] and buloc. That code was not functional for a long time. Even in 0.9.10 it was no longer used correctly. 2014-09-06 Thomas Beierlein * src/keyer.c, src/sendbuf.c, src/sendbuf.h: cleanup keyer() - first part - use sendmessage() instead of sendbuf() - cleanup some unused code 2014-09-02 Thomas Beierlein * src/logit.c, src/speedupndown.c: use sendmessage() instead of sendbuf() * src/speedupndown.c: Refactor speedup() and speeddown() 2014-09-02 Thomas Beierlein * src/Makefile.am, src/callinput.h, src/getexchange.h, src/keyer.h, src/parse_logcfg.c, src/speeddown.c, src/speeddown.h, src/speedup.c, src/speedup.h, src/speedupndown.c, src/speedupndown.h: merge speedup.c and speeddown.c to speedupndown.c - there is a lot of duplicated code which can be factored out 2014-09-01 Thomas Beierlein * src/background_process.c, src/callinput.c, src/changepars.c, src/getexchange.c, src/prevqso.c, src/sendspcall.c: Use sendmessage(msg) instead of sendbuf() 2014-08-31 Thomas Beierlein * src/background_process.c, src/background_process.h, src/callinput.c, src/changepars.c, src/getexchange.c, src/keyer.c, src/logit.c, src/main.c, src/prevqso.c, src/prevqso.h, src/sendspcall.c, src/sendspcall.h, src/speeddown.c, src/speeddown.h, src/speedup.c, src/speedup.h: cleanup - refactor all declarations of 'extern char buffer[]' to sendbuf.h preparing a later drop of sendbuf() function and replacement by sendbuf(char *msg). * src/sendbuf.c: factor out macro expansion from sendbuf() function 2014-08-23 Thomas Beierlein * src/displayit.c, src/displayit.h, src/sendbuf.c, src/sendbuf.h: fix displayit() - functions relied on termbuf temrinated with newline. Dropped last character in display if not present. 2014-06-20 Thomas Beierlein * src/clusterinfo.c, src/clusterinfo.h, src/time_update.c: cleanup clusterinfo() - split out functions not belonging to the cluster display 2014-06-19 Thomas Beierlein * src/clusterinfo.c, src/clusterinfo.h, src/main.c, src/splitscreen.c: cleanup clusterinfo() - drop compiler warnings - simplify - cleanup include files - add include guard - move datastructures to file scope - rename 'ptr' variable to 'nr_of_spots' 2014-06-18 Thomas Beierlein * src/getmessages.c, src/main.c, src/muf.c, src/qrb.c, src/qrb.h, src/showinfo.c, src/showinfo.h: cleanup qrb calculation - change internal representation of station coordinates from string to double numbers - drop usage of global variables and make them local funtion parameters - cleaunp include files - add include guard 2014-06-17 Thomas Beierlein * src/main.c, src/muf.c, src/muf.h, src/sunup.c, src/sunup.h: cleanup call of sunup() function - move global vars to parameters - cleanup includes - add include guard 2014-06-01 Thomas Beierlein * datastructures, src/clusterinfo.c, src/main.c, src/printcall.c, src/sendbuf.c: a little cleanup - make global variable local - fix doxygen syntax - update description of datastructures 2014-05-28 Thomas Beierlein * src/background_process.c, src/main.c: restructure threading logic - background thread gets started as before but main logging function 'logit()' stays in the main thread - add an cleanup function via atexit() to stop background thread 2014-05-24 Thomas Beierlein * src/main.c, src/rtty.c, src/rtty.h: add correct deinitialisation of RTTY controller 2014-05-19 Thomas Beierlein * src/main.c, src/startmsg.c: restructure main() - factor out option parsing and curses initialization - defer color initialisation until logcfg.dat is read - factor out loading of databases - minor fixes to failure handling - factor out initialisation of hamlib, packet and lan connection - factor out initialisation of keyer device 2014-05-16 Thomas Beierlein * src/addcall.c, src/bandmap.c, src/clusterinfo.c, src/focm.c, src/globalvars.h, src/main.c, src/readcalls.c, src/recall_exchange.c, src/searchcallarray.c, src/tlf.h: add a structure to represent worked stations - move single fields containing parts of the information to a common struct ('callarray[]', 'call_band[]', 'call_exchange[]' and 'call_country') - rename 'callarray_nr' to 'nr_worked' 2014-04-27 Ervin Hegedus * tlf.1.in: Adding new config option and macro 2014-04-26 Sebastian Kricner * src/callinput.c: Fragezeichen für Rufzeichen hinzugefügt - Wenn im Eingabefeld ein Fragezeichen eingegeben wird und es kein leeres Feld ist, werden die Buchstaben in CW gesendet, gefolgt von einem Fragezeichen. 2014-05-07 Thomas Beierlein * src/addcall.c, src/searchlog.c: Extend searchlog() to show warc bands - works only in QSO or DXPED mode where you are allowed to work the WARC bands - fix for contest mode if there are some warc qsos in log (will not be shown now) Based on HA2OS initial work on that. Thanks Ervin. 2014-05-04 Thomas Beierlein * src/bandmap.c, src/focm.c, src/showscore.c: use new IsWarcIndex() * src/addcall.c, src/readcalls.c: add statistics info also for warc bands - countryscore and zonescore are evaluated only for non-warc bands * src/addmult.c, src/tlf.h: prepare for display of WARC bands - add entries to tlf.h - complete conversion table 'inxes[]' from band index to band mask - add macros IsWarcMask() and IsWarcIndex() 2014-04-29 Thomas Beierlein * src/splitscreen.c: handle newterm() not being able to allocate a second screen - happens for ncurses 5.8 and 5.9 with --enable-sp-funcs - do not change color settings in that case and do not switch to the packetscreen which is NULL resulting in a segfault 2014-05-01 Ervin Hegedus * src/sendspcall.c, tlf.1.in: add hiscall before send "DE" if SEND_DE is used in DIGIMODE * src/sendbuf.c, tlf.1.in: added new placeholder: ! for exchange of other station 2014-04-29 Thomas Beierlein * tlf.1.in: add documentation for MY_QRA (needed for Stewperry contest) 2014-03-02 Ervin Hegedus * src/gettxinfo.c, src/sendqrg.c: Handle RIG_ENIMPL and RIG_ENAVAIL response from hamlib's rig_get_vfo() call - call rig_get_freq() if rig_get_vfo() is not implemented - error codes are reported as negative numbers 2014-04-21 Thomas Beierlein * config.h.in, configure.ac: Drop test for GNU compatible malloc from configure.ac The test seems to fail sporadically (e.g. reported for OpenSUSE 13.1). That test only checks that malloc does return a valid pointer for an requested memory block of size 0. As we do not use these behaviour we do not need to check for it. 2014-02-15 Thomas Beierlein * src/locator2longlat.c, src/showscore.c: split show_summary for stewperry from other display - ARRL FD uses POWERMULT as an real multiplier, but only as integer value. So round it to nearest integer and use it as multiplier. - for STEWPERRY the POWERMULT may be a fractional number and multiplies the final score by that multiplier. 2014-02-13 Thomas Beierlein * src/locator2longlat.c, src/main.c, src/qrb.c, src/qrb.h, src/score.c, src/showinfo.c: unify QRB calculation - rename old qrb() to qrb_() and change it to use the new qrb() for real work - move calc_qrb() to qrb() - add comments about positive sign for east longitudes to qrb() and locator2longlat() 2013-10-14 airween * src/log_to_disk.c: Modified log_to_disk.c for keep the new logfile format: column 80 contains the '*'. 2014-02-09 Thomas Beierlein * src/focm.c, src/main.c, src/score.c, src/setcontest.c, src/showpxmap.c, src/showscore.c: rename internal contest identifier to 'focm' * src/Makefile.am, src/foc.c, src/foc.h, src/focm.c, src/focm.h, src/score.c, src/setcontest.c, src/showpxmap.c, src/showscore.c: renamed file to focm.[ch] for FOC Marathon 2013-08-06 Thomas Beierlein * src/callinput.c: Fix input of new CW weight factor with Alt-w 2012-05-13 Thomas Beierlein * src/displayit.c, src/keyer.c, src/sendbuf.c: some cleanup for keyer logic - Fix comments - drop unneeded code - leaving keyer switches back to correct mode (RUN/S&P) 2014-02-02 Thomas Beierlein * src/bandmap.c: add missing parentheses 2014-02-08 Thomas Beierlein * src/background_process.c, src/clusterinfo.c, src/gettxinfo.c, src/searchlog.c, src/sendqrg.c: further cleanup of minor problems - make variable static to allow only local access - initialize rigfreq in different files - handle problem if file could not be opened 2014-02-02 Thomas Beierlein * src/readcalls.c: fix some minor problems - make array index unsigned - leave function if logfile could not be opened 2014-02-05 Thomas Beierlein * src/callinput.c: drop unneeded tests of HAVE_LIBHAMLIB and redundant code * src/gettxinfo.c, src/main.c, src/sendqrg.c: make rigfreq local 2014-02-04 Thomas Beierlein * src/sendqrg.c, src/sendqrg.h, src/startmsg.h: cleanup header files and add include guards 2014-02-04 Thomas Beierlein * src/sendqrg.c, src/sendqrg.h: drop all remaining native_rig_ functions * src/gettxinfo.c: drop all calls to native_rig_ functions from gettxinfo() * src/gettxinfo.c, src/sendqrg.c, src/sendqrg.h: drop native_rig_reset_rit() * src/main.c, src/sendqrg.c: drop unneeded native_rig_get_mode() * src/sendqrg.c, src/sendqrg.h: drop init_ and close_ function for native_rig * src/main.c: disabling rig control if no hamlib library compiled in * src/main.c, src/parse_logcfg.c, src/sendqrg.c: Drop old logic which allowed to have only a rigportnumber - RIGPORT expects a whole portname (e.g. /dev/ttyS0") * src/log_to_disk.c: add header file to fix implicit declaration of score2() 2014-01-29 Thomas Beierlein * share/cabrillo.fmt, share/cty.dat: update files (thanks OK1RR) * src/foc.c: score 6banders as 5banders with an additionla bonus 2014-01-28 airween * src/showscore.c, tlf.1.in: Round final score when POWERMULT is float 2014-01-28 Thomas Beierlein * src/foc.c, src/foc.h, src/showpxmap.c: add list of countries to work - scan initial exchange file and build list of countries - display which countries are worked and which are missing - Call with Alt+M 2014-01-27 airween * src/showscore.c, tlf.1.in: Fixed POWERMULT config keyword * src/main.c, src/score.c, src/showscore.c: Handle POWERMULT config variable 2014-01-26 Thomas Beierlein * src/foc.c: changed display of scoring results 2014-01-19 Thomas Beierlein * src/keyer.c, src/parse_logcfg.c, src/sendqrg.c, src/sendqrg.h, src/speeddown.c, src/speedup.c, src/tlf.h, src/write_keyer.c: drop support for ORION_KEYER - A check on the mailing list showed that nobody seems to be interested in that feature. It was also not mentioned in the man page or on Rein's old tlf page. 2014-01-23 airween * src/getexchange.c, src/parse_logcfg.c, src/score.c: Adding POWERMULT keyword, and multiple the calculated points with it (Stewperry rules, #7) 2014-01-23 Thomas Beierlein * src/foc.c, src/foc.h, src/getsummary.c, src/showscore.c, src/showscore.h: writecabrillo uses new function 'get_total_score()' - In case we have complex scoring rules these function can redirect to a contest specific calculation 2014-01-21 Thomas Beierlein * src/readcalls.c: initialize complete call statistics - rescoring works by rereading the logfile and building the whole statistical data from there. Until now band and country data for worked calls got not reinitialized. Therefore we got wrong result when deleting the last call and rescoring. * src/foc.c: fix scoring for FOC marathon 1 point per QSO 2 points per country 5 points per continent 5b qso gets 10 points bonus 6b qso gets 15 points bonus Gx4FOC joker counts double * rules/Makefile.am, rules/foc, rules/focmarathon, share/cabrillo.fmt, src/setcontest.c: renamed contest 'foc' to 'focmarathon', added keydefinitions - Thanks OK1RR. 2014-01-18 Thomas Beierlein * src/globalvars.h, src/main.c, src/makelogline.c: cleanup - move scoring logic to 'makelogline' - refactor padding with spaces and simplify * src/makelogline.c: delimit strcat operations - from time to time we have segfaults from copying to long information fields into the logline. Then we are past the next column. If we later try to fill up the space we get a segfault. - Now we delimit all strcat operations which can have a variable field length. 2014-01-14 Thomas Beierlein * src/makelogline.c: split contest independent and dependent part of log line * src/makelogline.c, src/makelogline.h: start cleanup makelogline function gave segfaults more than once. Needs a serious overhaul. - add include guard - move include files to .c - sort out different tasks - sort order of preparing time and qso number * src/callinput.c: fix bug in autosend start logic - triggered autostart even if only a frequency for band change was entered - new logic checks if inputfield contains a plain number and does not start autosend if true 2014-01-13 Thomas Beierlein * rules/Makefile.am, rules/foc: add foc rules file * src/foc.c: score continents correctly * src/foc.c, src/foc.h, src/showscore.c: implement basic display of contest score 2014-01-11 Thomas Beierlein * src/parse_logcfg.c: fix wrong setting of LAN designator * src/foc.c, src/foc.h: fix declaration syntax 2014-01-10 Thomas Beierlein * src/foc.c, src/foc.h, src/score.c, src/score.h: add basic scoring logic for qsos - report 1 one for normal qso - regex match Gx4FOC/xxx and give him 2 points * src/foc.c, src/foc.h, src/main.c, src/setcontest.c: contest recognition and initialization 2014-01-09 Thomas Beierlein * src/foc.c, src/foc.h: added contest files * src/Makefile.am: start handling of FOC contest * src/parse_logcfg.c: drop unneeded code dupliction 2014-01-05 Thomas Beierlein * src/addcall.c: adapt evaluation of LAN Logline to longer prefixes prepared by makelogline 2013-12-31 Thomas Beierlein * src/gettxinfo.c, src/sendqrg.c: call 'rig_get_vfo' before using RIG_VFO_CURR - allows to switch VFO on the rig without loosing control by tlf. Tnx HA2OS for help. 2013-12-28 airween * src/getexchange.c, src/score.c: Fixed Stewperry QRB calculation error 2013-12-23 airween * rules/stewperry: Added rules/stewperry rule file * src/getexchange.c, src/locator2longlat.c, src/locator2longlat.h, src/parse_logcfg.c: Fixed Stewperry rules: check MYQRA when Tlf starts, and check the station's QRA as exchange 2013-12-15 airween * src/Makefile.am, src/getexchange.c, src/globalvars.h, src/locator2longlat.c, src/locator2longlat.h, src/main.c, src/parse_logcfg.c, 2013-12-27 Thomas Beierlein * src/main.c, src/parse_logcfg.c, tlf.1.in: Drop keyword '2EU3DX_POINTS' - Keyword was not supported for a long time - It got recognized but did nothing. 2013-12-19..12-21 Thomas Beierlein * src/background_process.c, src/background_process.h, src/logit.c, src/logit.h, src/main.c, src/autocq.c, src/main.c, src/sendbuf.c, src/sendbuf.h, src/callinput.c, src/getexchange.c, src/keyer.c, src/listmessages.c, src/messagechange.c, src/parse_logcfg.c, src/writeparas.c, src/bandmap.c, src/bandmap.h, src/checklogfile.c, src/globalvars.h, src/grabspot.c, src/main.c, src/sendbuf.c, src/sendqrg.c, src/showinfo.c, src/splitscreen.c, src/time_update.c: Cleanup a lot of inconsistencies (see log messages for detail) 2013-12-15 Thomas Beierlein * src/showscore.c: fix wrong order of tests for mult counting - DX_&_SECTIONS has precedence over MULT_LIST in UNIVERSAL contest - Thanks Ed W3NR and Fred DH5FS for pointing it out 2013-12-13 Thomas Beierlein * src/autocq.c, src/callinput.c, src/getexchange.c, src/keyer.c, src/logit.c, src/sendbuf.c, src/sendbuf.h: send CW/DIGI messages only if not empty - avoid turning on and off transmitter in CW and Digimodes if message is empty - Thanks Ervin HA2OS for pointing out. 2013-12-12 dh5fs * tlf.1.in, share/help.txt, src/parse_logcfg.c, src/lancode.c: Allow portnumbers for LAN-stations via ADDNODE command 2013-11-28 Thomas Beierlein * help.txt, share/Makefile.am, share/help.txt, src/callinput.c, src/changepars.c, src/show_help.c, src/show_help.h: move 'help.txt' to /share/help.txt - add 'help.txt' to distribution - install 'help.txt' as default hep file - can be overridden by an own 'help.txt' in actual directory - correct description for ':help' command in man page 2013-11-28 dh5fs * src/callinput.c: Update callinput.c modify CFM message to complete QSO * help.txt: Create help.txt online help file 2013-11-27 Thomas Beierlein * src/dxcc.c, src/dxcc.h: add special handling for '*...' prefixes - strip '*' from prefix - remember in describing structure 2013-11-24 Thomas Beierlein * src/makelogline.c: move zone id in logline a char right - make room for 5 letter prefixes (e.g. HK0/a) 2013-11-18..11-20 Thomas Beierlein * src/Makefile.am, src/cw_utils.c, src/callinput.c, src/clear_display, src/cw_utils.h, src/parse_logcfg.c, src/getexchange.c, src/main.c, src/speeddown.c, src/speedup.c, src/tlf.h, src/write_keyer.c, src/autocq.c, src/speed_conversion.h: refactor CW speed logic - add new 'cw_utils' - move speedstr definition to cw_utils - move 'speed_conversion' to cw_utils - add SetCWSpeed and use it in parse_logcfg - add GetCWSpeed and start to use it - drop separate handling of 'keyspeed' variable - move calculation of CW message length to cw_utils 2013-11-19 airween * share/cty.dat: Added new cty.dat, released 2013-11-18 * share/callmaster, share/cty.dat: New databases from Ervin HA2OS 2013-11-15 Thomas Beierlein * src/lancode.c, src/parse_logcfg.c, tlf.1.in: Initialise tlf's node designator (THISNODE=...) to 'A' - Even if you do not use the LAN features and forgot to name your node in logcfg.dat the node designator is used internally for adding a QSO to the bandmap. - Add further check logic to allow only designators 'A'..'H' - document default setting for node designator in man page 2013-11-11..12-09 Thomas Beierlein 2013-12-06 dh5fs * src/callinput.c, src/changepars.c, src/keyer.c: implement reworked autosend feature - starts after 2..5 characters - shorter calls have to be finished with ENTER key - calculates the expected time to send the call from cw speed and switches to sending exchange after that time is reached - Allow autosend feature only in RUN mode - Adapt ':char' command (accept 0 (off) or 2..5 as number of characters before autosend start. Changing input can be dropped with ESC) - SPACE and DOWN no longer starts autosend feature, but jumps to exchange field - A progress indicator shows the characters already sent. 2013-10-28 Thomas Beierlein * src/main.c, src/muf.c, src/muf.h: cleanup use of internal variables - use M_PI from math.h - make some global variables privat 2013-10-27 Thomas Beierlein * rules/cqww, share/cabrillo.fmt: fix cabrillo definition - use TX identifier at end of line only for cqww contest 2013-10-25 Thomas Beierlein * src/writecabrillo.c: Fix handling of non existing cabrillo format file 2013-10-14 Thomas Beierlein * src/log_to_disk.c: Change accepted line length from LAN - Log lines are longer since we added the QRG to its end. The LAN code missed that change until now. - Thanks airween HA2OS for the patch. 2013-08-27 Thomas Beierlein * src/addcall.c, src/addmult.c, src/checklogfile.c, src/editlog.c: close opened files if not needed 2013-08-12 Thomas Beierlein * src/callinput.c, src/changepars.c, src/splitscreen.c: Cleanup screen when leaving TLF with active cluster - If packet cluster was active when you leaved TLF there was an intermix of tlf's screen content and the screen before tlf where started. Reason was the second terminal for the cluster display which must be closed with endwin() before leaving the program. Added the code to cleanup_telnet() and called that routine when leaving tlf. 2013-08-07 Thomas Beierlein * src/changepars.c, src/listmessages.c: Some small fixes - give a short hint to use PgUp or PgDwn for :scv - simplify display of cw messages (:list) 2013-08-06 Thomas Beierlein * src/callinput.c: Fix switching on/off the score window 2013-07-23 Thomas Beierlein * src/clusterinfo.c, src/gettxinfo.c, src/main.c, src/sendqrg.c: Improve handling of problems in rig link - Report any error during startup of hamlib rig link - In case of errors ask if user want to continue without rig control. Otherwise exit tlf. - If get_frequency fails (maybe because rig is switched off) report frequency as 0.0. Do not change band settings from tranceiver. (Show and log the actual frequency as 0, meaning no rig control available at the moment) - writecabrillo() will insert start-of-band frequency in log calculated from band information 2013-07-15 Thomas Beierlein * src/callinput.c, src/keyer.c, src/messagechange.c: CW messages can no longer be edited by Shift+Fx key - The quick recall of an Fx message via Shift+Fx for edit got dropped as the recognition of the keys is not reliable for some terminal emulators. So we do no longer rely on that feature. Use :mes or edit the config file instead. 2013-07-14 Thomas Beierlein * src/showpxmap.c: fix display of worked countries for cqww - uses line 1..5 omitting the line with the contest information - clear the lines before und after use 2013-07-10 Thomas Beierlein * src/main.c, src/showscore.c: Fix display of contest statistics - Q/M calculates now QSOs per multi (was: points per multi) - display Q/M with one digit after decimal point - display Q/M always - show band rate only for bands with more than ten QSOs 2013-07-07 Nate Bargmann * many files...: Correct GPL boilerplate in sources The license boilerplate in the source files incorrectly referenced the Library General Public License. Given that only 'COPYING' (GPL 2.0) is included in the tlf directory, and all other documentation references the GPL, the reference to 'Library' is presumed to be incorrect. With the concurrance of Tom and Rein, this patch set removes the word 'Library' from the boilerplate in all .c and .h files where it occured. Include minor Free Software Foundation mailing address correction with this patch set. 2013-06-29 Thomas Beierlein * src/dxcc.c, src/readctydata.c: make parsing cty.dat more robust - ignore country lines which do not have the needed components 2013-06-18 Thomas Beierlein * src/log_to_disk.c, src/makelogline.c: Move reset of RST to another place - Setting RST to its default value after a QSO is not the job of a routine which prepares the log line for the last QSO. 2013-06-16 Thomas Beierlein * rules/arrlfd, src/callinput.c, src/clear_display.c, src/getexchange.c, src/log_to_disk.c, src/main.c, src/makelogline.c, src/parse_logcfg.c, tlf.1.in: add new configuration switch NO_RST - will be needed for contests which do not record any exchange (e.g. ARRLFD or CW Open) - do not add RST into log and do not show RST if NO_RST is set, just add '---' instead - suppress redisplay of RST after PgUp/PgDwn if NO_RST is set, as it does not make sense to change RST if no RST is used. - document NO_RST in man page and add it to arrlfd rule file 2013-06-14 Thomas Beierlein * share/cabrillo.fmt: ARRL-FD do not use cabrillo. Tnx Nate N0NB 2013-06-10 Thomas Beierlein * src/makelogline.c: Fix for WYSIWYG_ONCE - points were not written for WYSIWYG_ONCE * src/getsummary.c, src/writecabrillo.c: simplify - use get_nr_of_points() and get_nr_of_mults() to calculate claimed score 2013-06-03 Nate Bargmann * rules/arrlfd: rules/arrlfd: Update to current FD rules - The arrlfd rules file was dated so bring it up to date with changes in Fd and TLF. - fix recognition of ARRL Field day rules (rule file asked for 'arrlfd' contest, but parser looked for 'arrl_fd') 2013-05-06 Nate Bargmann * configure.ac: configure.ac: Enable silent make rules Use Autoconf help string formatter for Hamlib option. 2013-05-05 Nate Bargmann * share/arrlsections: arrlsections: Add new Canadian sections Remove invalid sections. 2013-05-30 Thomas Beierlein * src/showscore.c, src/showscore.h: Refactor calculation of total score - factor out calculation of nr of points and mults 2013-06-02 Thomas Beierlein * src/showscore.c: factor out common code into 'display_header()' - gets list of bands to show as parameter * src/showscore.c: simplify display of headerline and setting of active band - rename bandindex_normal and bandindex_warc to bi_normal/warc - show bands in header line according to the list of band indices in bi_normal or bi_warc - simplify highlighting the actual band (do it now on the fly while printing the line in first place.) 2013-05-30 Thomas Beierlein * src/showscore.c: Refactor display algorithm for individual score lines - define the column 'START_COL' where the display of the score should start - use a table for defining the column number where we display the different score points for each band - use two further tables to define which bands should be shown for each column - rollup the display of the 6 columns into one loop using the above mentioned tables 2013-05-30 Thomas Beierlein * src/showscore.c: Change display of score for ARRL SS - Display points and mults (here section) for ARRL SS similar to other contests. 2013-05-29 Thomas Beierlein * src/showscore.c: simplify showscore() - add some comments - drop unneeded variable initialisation - unify display of summary for different contests - factor out display of summary line 2013-05-25 Thomas Beierlein * src/edit_last.c: Fix character input in edit_last() - display only visible part of logline 2013-05-22 Thomas Beierlein * src/writecabrillo.c: Fix frequency output for WARC bands in cabrillo file - Original code missed all cases for QSOs in WARC bands. No frequency information for that bands were written to cabrillo file. - Even if no WARC bands should be used in contests we add the correct frequency output for these bands 2013-05-21 Thomas Beierlein * src/writecabrillo.c: Fix band output for 12m in ADIF file - Original code missed the case for QSOs in 12m band. The ADIF file got no band output for that band. Fixed. 2013-03-17 Thomas Beierlein * src/changepars.c: Reread contest rules file after edit of logcfg.dat with :SET or :CFG * src/changepars.c, src/getsummary.c, src/writecabrillo.c: Refactor - move control of cluster display out to calling context - reuse code to ask for sent exchange - drop unused external variable declarations * src/getsummary.c, src/getsummary.h: Rework to support Cabrillo v3.0 format - refactor code to ask for input - write some entries only to cabrillo file if user provided some input 2013-01-16 Thomas Beierlein * src/getsummary.c, src/getsummary.h, src/writecabrillo.c: Simplify writing cabrillo header - Until now the cabrillo header was written to a separate file by 'getsummary()' and finally copied together with the formatted QSO-lines. Changed it so that we write the header direct to the final file and therefore can drop the copying. 2013-01-12 Thomas Beierlein * rules/arrlss, share/cabrillo.fmt: Add cabrillo definition for ARRL Sweepstake 2013-01-09 Thomas Beierlein * src/parse_logcfg.c: Fix parsing of CALL in logcfg.dat - drop trailing whitespace - for now keep the trailing NL as a lot of code in other parts of tlf rely on that NL cahracter 2013-01-05 Thomas Beierlein * src/parse_logcfg.c: Fix parsing of CONTEST, LOGFILE, KEYER_DEVICE and TELNETHOST - Use g_strchomp to drop NL and trailing whitespaces from keywords - simplify with g_strlcpy * src/parse_logcfg.c: Fix parsing controllerport (ignore trailing whitespace) 2013-01-06 Thomas Beierlein * src/parse_logcfg.c, tlf.1.in: Reduce minimal livetime for bandmap entries to 30s (requested by DH5YM) 2012-12-12 Thomas Beierlein * src/getexchange.c: allow Ctrl-k to start keyer during getexchange() 2012-12-09 Thomas Beierlein * src/getexchange.c: Allow editing of exchange field - starts with 'left' key if exchange field is not empty - supports the following keys: - ctrl-A start of line - ctrl-E end of line - left one char left - right one char right - del delete key under cursor - backspace delete char left from cursor - any non control char insert if string not to long * src/getexchange.c, src/getexchange.h: Move prototypes of internal functions to hide visibility - add comments 2012-12-24 Thomas Beierlein * NEWS, configure.ac: prepare for tlf-1.2.0_pre3 prerelease 2012-12-12 Thomas Beierlein * doc/README.cabrillo: Add description of new cabrillo handling 2012-12-08 Thomas Beierlein * src/writecabrillo.c: Make token parsing reentrant. 2012-10-06 Thomas Beierlein * doc/Makefile.am, doc/README.cab, doc/README.cabrillo, share/cabrillo.fmt, src/writecabrillo.c: Add some more tokens to cabrillo handling - Drop old write_cabrillo code - You can now specify EXC1..EXC4 to address first to fourth space delimited token from exchange field - Rename README.cab file and fix spelling errors in cabrillo.fmt 2012-12-05 Thomas Beierlein * src/autocq.c: Use stoptx() to stop auto_cq message. Old code did overwrite the right screen border in case of ESC key to stop sending. 2012-11-29 Thomas Beierlein * src/callinput.c, src/getexchange.c: enable F-keys for digimode also in exchange field - While in digimode the F-keys only worked in the input field. Changed logic so that they will also be accepted in the exchange field. - Support also F10 and F11 in exchange field. - While using CTCOMPATIBLE 'INS' key always send only a cw message even when in SSB mode. Fixed. 2012-11-25 Thomas Beierlein * src/callinput.c, src/getexchange.c: simplify - drop unneeded cursor positioning - redraw call and comment input field before waiting for a new character - use printcall() and refresh_comment(), but only if needed - unify handling of band up and down - drop unneeded call to time_update() 2012-11-28 Thomas Beierlein * src/getexchange.c, src/searchlog.c: fix display of zone and section in searchlog window 2012-11-27 Thomas Beierlein * src/addmult.c: Fix memory leak 2012-11-25 Thomas Beierlein * src/callinput.c: Drop not needed duplication of code for handling Fx message keys 2012-11-24 Thomas Beierlein * src/changepars.c: Adapt behaviour of :SCVOLUME command. - Can be set even if sidetone device is console speaker. 2012-11-22 Thomas Beierlein * src/main.c, src/parse_logcfg.c, tlf.1.in: Allow setting of SIDETONE_VOLUME even if SOUNDCARD is not set. - To allow to turn off cwdaemons sidetone output it is needed to set the volume of the sidetone to 0. Until now that was only possible if SOUNDCARD was se in logcfg.dat which switches to a soundcard for sidetone output. - Fix for recognition of SIDETONE_VOLUME value (drop trailing \n) - Allow volume setting independent of choosen sidetone device. - Add information to man page. * src/callinput.c: Cleanup old code * src/initial_exchange.c, src/initial_exchange.h, src/main.c: Make errors in initial exchange file more verbose. Thanks Mario DH5YM. - make_ie_list() checks format of initial exchange entries (exactly one call exchange) and complains about errors. It is difficult to find the problematic line for long exchange files. - New code reports the line number and ask for confirmation to continue without initial exchanges in case of error. 2012-10-28 Thomas Beierlein * tlf.1.in: minor correction to man page 2012-10-26 Thomas Beierlein * src/callinput.c: fix tune logic. - adapt to cwdaemons behaviour. It tunes only for a given time and than automatically stop. - So request some tuning time (6s) and allow for an early stop with any key press. - Change TUNE_UP constant if you want a different time. 2012-10-24 Thomas Beierlein * src/callinput.c, src/getexchange.c, src/time_update.c: stop flickering cursor while searchlog is shown - during wait for input in call input or exchange field the searchlog panel is regularly updated. That makes the cursor switch between different places and showing a flickering effect. - New logic dropped the time delay from 'time_update()' (as that function should not determine the speed of the keyboard polling) and added the delay into the polling loop so that the cursor is a long time in the input field. 2012-10-27 Thomas Beierlein * src/callinput.c: convert file back to Unix LF endings 2012-10-26 Thomas Beierlein * src/set_tone.c: work around bugs in cwdaemon versions - cwdaemon < 0.9.6 always set volume to 70% at change of tone freq - cwdaemon >=0.9.6 do not set volume at all after change of freq resulting in no tone output if you have a freq=0 in between - So... to be sure we set the volume back to our chosen value or to 70% (like cwdaemon) if no volume got specified 2012-10-23 Thomas Beierlein * src/sendspcall.c: use '}' and '{' only for MFJ1278 keyer to switch TX on and off 2012-10-13 Thomas Beierlein * src/sendbuf.c: correct parsing of special characters in sendbuf() function - old logic assumes that there is always a trailing newline so it checks only until strlen(text)-1 is reached - new code checks all characters until string end. * src/write_keyer.c: shorten macro output in digimode - old implementation had 5 empty lines for each macro output (1 from message eol, 2 from write_keyer routine, 1 from echo, 1 from fldigi) - dropped 1 of the lines in output string - used '-n' switch to force echo to not append a further newline - simplify command formatting 2012-10-06 Thomas Beierlein * src/getexchange.c, src/rtty.c: update miniterm also while in getexchange() * src/rtty.c: make miniterm output more robust - strncpy may leave non terminated strings, so switch to g_strlcpy i - mvprintw needs a format string to avoid interpretation of '%' signs in the received text. * src/rtty.c: rework digimode receive routine 'rx_rtty()' - fix buffer overrun in rx_addtext - better logic to skip start of line info from GMFSK and FlDigi - do not skip start of line if serial modem (MFJ or similar) 2012-10-18 Thomas Beierlein * src/main.c, src/parse_logcfg.c, src/parse_logcfg.h, src/rules.c: ask for confirmation if errors in logcfg.dat or rule file detected - for some time tlf reports errors in both configuration files but gives user only 2 seconds time to read the problem. The changes records that some problems exists and ask the user after processing the files if we should continue or stop the program and fix the problem. That gives them time to read the problems and think it over. 2012-10-14 Thomas Beierlein * src/parse_logcfg.c, src/set_tone.c: fix control of sidetone output - CWTONE drops trailing newline now (was not recognized by cwdaemon 0.9.2 if there was a trailing newline) - :tone did not initialize box correctly. Old screen contents showed through the frame. 2012-10-09 Thomas Beierlein * src/parse_logcfg.c: Correct wording for some error message * rules/arrl10m_dx: fix typo wrt CQ_TU_MSG 2012-09-19 Thomas Beierlein * src/getsummary.c: cut erase strings which are too long for screen width 2012-09-17 Thomas Beierlein * rules/arrl10m_dx, rules/arrldx_dx, rules/arrldx_usa, rules/contest, rules/cqww, rules/eusprint, rules/lzdx, rules/pacc_dx, rules/pacc_pa, rules/spdx_dx, rules/spdx_sp, rules/template, rules/wpx, share/cabrillo.fmt: add some more cabrillo format specifications - rename wpx cabrillo format into UNIVERSAL - complete rule files with information which format to use - new format for EU-SPRINT contest 2012-09-17 Thomas Beierlein * src/writecabrillo.c: add handling of EXC_S item containing '#' special character - use old 'getsummary' to ask for exchange for now 2012-09-12 Thomas Beierlein * src/writecabrillo.c: add handling of TX entry for cqww.m2 and other contests 2012-09-10 Thomas Beierlein * src/writecabrillo.c: Basic implemention of 'prepare_line' function - format entries according to list of items from QSO: line definition - add entry by entry to linebuffer - !! atm not complete 2012-09-14 Thomas Beierlein * src/searchlog.c: Old code segfaults for really long calls in 'searchlog' - happens for long call signs which fill the call field - strchr return NULL if space is not found, so limit string only if a space is really found 2012-09-10 Thomas Beierlein * share/cabrillo.fmt, src/writecabrillo.c: drop position from cabrillo format definitions - Each field in the QSO line is separated by one space from the next. - So knowing the length of each field we can determine the position from that information if we have the field entries defined in order 2012-09-09 Thomas Beierlein * src/writecabrillo.c: Parse QSO logline into relevant pieces for writecabrillo 2012-09-07 Thomas Beierlein * src/writecabrillo.c: Fill in qso_t structure and start parsing the qso line 2012-09-09 Thomas Beierlein * src/writecabrillo.c: fix possible segfault due to wrong allocation size 2012-09-07 Thomas Beierlein * src/writecabrillo.c: fix memory leak The list of split parts of the entry needs to be freed after being used. 2012-09-04 Thomas Beierlein * src/writecabrillo.c: Parse each item description for QSO: line - convert item name to a enumed tag - parse and convert position and fieldwidth - add all converted items to an array in the format description 2012-08-10 Thomas Beierlein * src/writecabrillo.c: First steps to new 'write_cabrillo' - Complete rewrite of main flow for the function. !Not all functionality implemented. - 'read_cabrillo_format' lookup file with needed cabrillo format description in local dir or datadir and parses some keys (atm only 'QSO:') - QSO: key is splitted into separate items each describing one entry in cabrillos QSO: line. Be aware !! Keywords have to be case sensitive * share/cabrillo.fmt: First simple definition of a cabrillo format file 2012-08-23 Thomas Beierlein * src/parse_logcfg.c: Second part of reworked parsing logic - All keywords which require a parameter after an '=' use the preparsed fields[1] variable now. - To catch wrong syntax in the config file the macro PARAMETER_NEEDED tests if needed that there was such a '=' in the config entry. 2012-08-16 Thomas Beierlein * src/parse_logcfg.c: Fixes nasty problem in parsing of preferences from logcfg.dat and rules file - David N1EA and Martin OK1RR reports not working CLUSTERLOGIN. - Reason was change in parsing logic done between tlf-1.0.5 and tlf-1.1.0. TLF now stopped at keyword CLUSTER mas it was a substring of CLUSTERLOGIN. So CLUSTERLOGIN got never called. Thorough inspection showed that it may affect also other settings. - New logic starts by splitting the inputline at a potential '=' sign. First part: the keyword, second part (if available): the parameters. The keyword gets stripped on both sides, the parameter only from leading spaces. That allows something like ' CALL = DL1JBE'. - All keywords in the keyword list were stripped from a trailing '=' sign. If you need to decide if it got called correctly, than look at the second field in the parsed array. 2012-08-23 Thomas Beierlein * .gitignore, aclocal.m4: remove unneeded 'aclocal.m4' and add it to .gitignore - They will be created automatically if you run 'autoreconf' after an checkout. so there is no need to have it in the repository. 2012-08-13 Thomas Beierlein * src/changepars.c, src/main.c, src/parse_logcfg.c: Add tilde expansion for config file switch (-f) - -f command line switch allows use of an alternate logfile. Until now it does not recognize '~' as abbreviation for the users HOME directory (Thanks David N1EA for reporting). - If logfilename starts with ~/ it gets replaced by users home directory. * src/checklogfile.c: fix uninitialized variable 2012-08-13 Thomas Beierlein * tlf.1.in: comment CWBANDWIDTH= preference switch - Normally in CW mode tlf sets the (hamlib defined) default bandwidth during each switch of bands. - If you need a different bandwidth you can set it with these switch in logcfg.dat 2012-08-10 Thomas Beierlein * config.h.in, configure.ac, configure.in: Prepare for Automake-1.13 which no longer accepts a configure.in - move configure.in to configure.ac - regenerate config.h.in 2012-08-10 Thomas Beierlein * doc/Makefile.am, doc/README.cab, share/Makefile.am, share/cabrillo.fmt, tlf.1.in: add rudimental files with description of new cabrillo mechanism and format specification (needs to be completed). Document new CABRILLO= statement for ruls file. 2012-08-09 Thomas Beierlein * src/main.c, src/parse_logcfg.c: add recognition of new keyword CABRILLO= That keyword has to be used to name the cabrillo format definition to be used when writing cabrillo logs. 2012-06-26 Thomas Beierlein * src/writecabrillo.c: first work for new writecabrillo 2012-07-02 Thomas Beierlein * src/writecabrillo.c: Use g_strstrip instead home made function * src/checklogfile.c, src/checklogfile.h, src/main.c: Implement new logfile check and repair operation. - all line have to be a) a comment line starting with ';' or b) starts with a valid bandnumber - The length of each logline has to be LOGLINELEN (including \n) a) If to long -> cannot handle that file type (possible truncation) b) If some line to short -> maybe old log format, so ask if it should try to repair (fill with needed amount of spaces). 2012-07-01 Thomas Beierlein * src/main.c: Add warning if console window is too small for TLF (needs at least 25x80) 2012-06-26 Thomas Beierlein * src/writecabrillo.c: Write QRG to cabrillo file if available in log file 2012-06-12 Thomas Beierlein * src/writecabrillo.c: Write QRG to ADIF file if available in log file 2012-01-06 Thomas Beierlein * src/writecabrillo.c: renamed adif and cabrillo file according to OK1RR: cabrillo: .cbr adif: .adi 2012-06-06 Thomas Beierlein * src/makelogline.c, src/tlf.h: Record the working QRG in the log i ATTENTION! New log line format in use! At the moment that is incompatible with old log files. Back them up before experimenting. Code to migrate old log to new format will follow in next days. - make logline 7 characters longer to accomodate the QRG with one decimal precision. - record QRG at end of logline if you have the rig online * src/gettxinfo.c: Fix wrong check for lowest band frequency. rig_get_freq() reports frequency in Hz so we have to check against 1800000 Hz for lower border of 160m band. Furthermore simplify switch logic and add an default case if rig is not in ham band. 2012-06-06 Thomas Beierlein * configure.in: Abort configure if ncurses libs not vailable. Tnx Jens DK2AB for pointing it out. 2012-05-19 Thomas Beierlein * src/note.c: fix note input to add it to the internal recorded log lines and to adapt to wider logline length 2012-05-17 Thomas Beierlein * src/deleteqso.c, src/deleteqso.h: Simplify - Make logic independent of 'logline4'. Use 'qsos' instead. - check for filesize >= LOGLINELEN * src/edit_last.c, src/edit_last.h, src/main.c: New implementation of edit_last() to enable longer loglines and thus make room for record of QRG Needs a new mechanism to get and store editbuffer. Former use of logline_edit field, which was shared with some other code for displaying the last 5 qsos, was error prone. Use a separate editbuffer instead and get the content from the qsos[] database every time we start to edit a line. Write content of editbuffer back to qsos[] and file after finishing the edit. Furthermore refactor out common code - highlight and unhighlite line - limit len of displayed output line - make number of lines easier to configure - correct handling of empty log file - fix edit of upper line !! Be aware that edit on ';' notes is broken - better handling of to hop from field to field - move definition of logline_edit fields into main.c 2012-05-14 Thomas Beierlein * src/checklogfile.c, src/deleteqso.c, src/edit_last.c, src/editlog.c, src/getmessages.c, src/globalvars.h, src/last10.c, src/main.c, src/makelogline.c, src/readcalls.c, src/scroll_log.c, src/searchlog.c, src/tlf.h: use LOGLINELEN to specify the size of a logline and the needed checks and buffers 2012-04-20 Thomas Beierlein * src/bandmap.c, src/cleanup.c, src/clear_display.c, src/main.c, src/note.c, src/searchlog.c, src/showscore.c, src/tlf.h: Fix some more color settings i - use C_ names wherever possible - Drop use of 'DUPECOLOR' and use only 'C_DUPE'. - invert color definition for 'C_DUPE' to avoid the STANDOUT attribute. - change 'attron' to 'attrset' as old color definition required always an 'standout' attribute which got not reset by attron 2012-04-18 Thomas Beierlein * rules/Makefile.am, share/Makefile.am: add forgotten files to Makefile.am * ChangeLog, NEWS, configure.in: Prepare TLF-1.1.2 maintenance release (see NEWS for details). * share/usa_canada_states: remove old 'usa_canada_states' file, use arrldx_mults instead * rules/arrldx_dx, share/arrldx_mults: add actual mults file for ARRLDX contest for DX and adapt path (tnx Fred DH5FS) 2012-03-31 Thomas Beierlein * rules/arrl10m_dx, share/arrl10m_mults: add ARRL 10m contest (tnx Fred DH5FS) * src/parse_logcfg.c, src/score.c: correct naming of functions * src/score.c: simplify loop exit logic 2012-03-18 Thomas Beierlein * src/parse_logcfg.c: fix recognition of COUNTRY_LIST= keyword - multiplier_list was uninitialized. If it was not empty COUNTRY_LIST definitions would not be recognized - use glib for better handling of string termination 2012-03-19 Thomas Beierlein * src/main.c, src/parse_logcfg.c, src/score.c: simplify COUNTRYLIST handling - renamed 'multiplier_only' to 'countrylist_only' - renamed 'multiplier_points' to 'countrylist_points' - simplify naming scheme for local variables 2012-03-16 Thomas Beierlein * src/getexchange.c: rework checkexchange handling - fix out of bounds error resulting in a segfault - better maintainability by automatic calculation of loop boundaries for pattern scanning 2012-02-28 Thomas Beierlein * src/parse_logcfg.c: better regognition of unknown keywords in logcfg.dat and rules file 2012-02-27 Thomas Beierlein * rules/arrldx_dx, rules/pacc_dx, rules/spdx_dx: fix wrong keyword: 'RECALL_EXCHANGE' is 'RECALL_MULTS' now 2012-02-19 Thomas Beierlein * src/audio.c: Simplify audio recording by factoring out common code 2012-01-18 Thomas Beierlein * src/main.c: simplify string handling 2012-01-17 Thomas Beierlein * src/Makefile.am, src/printfield.c, src/printfield.h, src/showscore.c, src/showscore.h: Merge printfield() into showscore.c - only used for showscore() - simplify printfield() function. - drop unneeded include file from showscore.c 2012-01-15 Thomas Beierlein * NEWS: Fix spelling error for G4KNO 2012-01-14 Thomas Beierlein * src/calledit.c: simplify calledit() - drop not working keys for 'home' and 'down' - factor out display code - fix display of background for partials when leaving edit mode 2012-01-12 Thomas Beierlein * src/changepars.c, src/main.c: Make sure that no packet related functions get called if started with 'tlf -n' 2012-01-12 Thomas Beierlein * src/makelogline.c, src/makelogline.h: Fix makelogline segfault if not in contest mode Logline gets not cut back to 68 characters. Results in a buffer overflow. Add description of logline format 2012-01-08 Thomas Beierlein * doc/Makefile.am, doc/README.ssb: Added README.ssb from Andy, G4KNO. Thanks for contributing. 2012-01-03 Thomas Beierlein * scripts/play_vk: fix spelling of unmute command. Tnx G4KNO 2011-12-22 Thomas Beierlein * NEWS, doc/README: move tlf's history of changes to NEWS file * tlf.1.in: adapt man page to new features 2011-12-21 Thomas Beierlein * Makefile.am, NEWS, New_Bandmap.txt, doc/Makefile.am, doc/New_Bandmap.txt: Move New_Bandmap.txt to doc/ * NEWS: summarize changes made between tlf-1.0.5 and tlf-1.1.0 * share/cty.dat: new cty.dat from OK1RR. Thanks 2011-12-17 Thomas Beierlein * New_Bandmap.txt, share/logcfg.dat: document configuration of bandmap filtering * src/parse_logcfg.c: fix location of #endif line * src/bandmap.c: leave some headroom for grabbing next frequency * src/bandmap.c, src/checklogfile.h, src/logit.c, src/netkeyer.c, src/printcall.c, src/showscore.c, src/splitscreen.c, src/startmsg.c, src/tlf.h: further cleanup - fix implicit declaration warnings - drop unused variables 2011-12-14 Thomas Beierlein * src/parse_logcfg.c, src/rules.c: cleanup - drop unused variable - fix wrong initialisation of 'buff' 2011-12-14 Thomas Beierlein * tlf.1.in: Fix description of LOWBAND_DOUBLE keyword in man page. 2011-12-13 Thomas Beierlein * src/parse_logcfg.c: divide livetime by 2 as aging is done every two seconds * src/parse_logcfg.c: allow configuration of bandmap filtering in logcfg.dat 2011-12-12 Thomas Beierlein * src/parse_logcfg.c, src/tlf.h: fix recognition of keywords - keywords with parameters did not work if keyword was not in first column 2011-12-10 Thomas Beierlein * src/bandmap.c, src/bandmap.h: dupes will be skipped during ctrl-g - make that feature configurable via bm_config.skipdupes 2011-12-11 Thomas Beierlein * src/parse_logcfg.c, src/parse_logcfg.h: better report of unsupported config keywords 2011-11-24 Thomas Beierlein * src/dxcc.c, src/grabspot.c, src/grabspot.h: fix prototypes - fix missing '#include ' - add missing prototype for 'grab_next' - change prototype of grabspot to return void * src/addmult.c: fix wrong check for empty string in multiplier file * src/callinput.c, src/changepars.c, src/main.c, src/printcall.c, src/rtty.c: Fix use of 'miniterm' variable - clean old code - add comments - save and restore variable if temporary disabled * New_Bandmap.txt: Add some additional informations describing the new bandmap functions. * src/callinput.c, src/grabspot.c: Fix calculation of zone and prefix for grabspot() - Zone and prefix was not calculated correctly during grab of a station from bandmap. It was needed to call 'getctydata()' instead of 'getctynr()' - Drop clear_display after grab. Now the info line is displayed properly. Thanks Fred DM3F for reporting. 2011-11-16 Thomas Beierlein * INSTALL, configure.in: prepare for TLF-1.1pre3 release * scripts/Makefile.am, scripts/play_vk, src/callinput.c: Use external script 'play_vk' for playing of SSB voice key messages * share/Makefile.am: add list of usa_canada_states to installation files - in distribution since 0.9.11 but forgotten in Makefile.am 2011-11-14 Thomas Beierlein * src/getexchange.c: change parsing of section for ARRL SS - trailing spaces in mults_possible[] and cut out section string deleted - compare only pure non-space strings * src/getexchange.c: Fix possible segfaults - old code segfaults if serial number >9999 was entered - simplify reading of check value * src/getexchange.c, src/searchlog.c, src/searchlog.h: Display parsing results for ARRL SS - displayed on lower line of Search panel again * src/searchlog.c: fix display of needed sections - readcalls cuts always 3 char to worked mults[] fro some contests - ignore possible trailing spaces in compare * src/clear_display.c: display contest name on info line 2011-11-10 Thomas Beierlein * rules/Makefile.am: add forgotten general 'contest' rule file to installable files * rules/arrlss: Better defaults for CW messages - exchange has to use serial number instead of a fixed '1' - make check consistent between messages * src/getexchange.c: Fix recognition of 'U' precedent - got introduced late and was not recognized properly - add some comments to the meaning of the searchpatterns * src/searchlog.c: some minor optimization - drop unneeded statement - break out of loop as soon as possible * src/searchlog.c, src/showscore.c, src/showscore.h: Fix display of section in ARRL_SS - moved display code to searchlog.c - use SearchPanel for display - thanks for reporting to Ben NJ8J 2011-11-07 Thomas Beierlein * src/callinput.c, src/getexchange.c, src/logit.c, src/logit.h: make Ctrl-A also work in exchange field - calls addspot() to add the actual call to the bandmap - correct hide of searchlog 2011-11-07 Thomas Beierlein * src/readcalls.c: strip trailing spaces on comments from log file 2011-11-06 Thomas Beierlein * src/changefreq.c, src/changefreq.h: hide cursor during frequnecy change * src/callinput.c: Allow edit of old QSO's only if call field is empty * src/calledit.c, src/callinput.c, src/getexchange.c: correct display of cursor if searchwindow is shown 2011-11-05 Thomas Beierlein * src/main.c, src/searchlog.h: fix display of startup messages 2011-11-06 Thomas Beierlein * src/listmessages.c: correct displayed message name for CQmsg 2011-09-24 Thomas Beierlein * src/parse_logcfg.c, src/tlf.h: Report unsupported config keywords during startup * rules/arrldx_dx, rules/arrldx_usa, rules/arrlfd, rules/arrlss, rules/contest, rules/cqww, rules/dxped, rules/eusprint, rules/lzdx, rules/pacc_dx, rules/pacc_pa, rules/qso, rules/spdx_dx, rules/spdx_sp, rules/ssa_mt, rules/template, rules/wpx, src/parse_logcfg.c: change keywords in parse_logcfg.c to correspond to man page The keywords for CQ_TU_MSG, VKCQM and VKSPM were not recognized correctly. Fixed. Adapt contest rules to changed keywords. 2011-11-03 Thomas Beierlein * src/getexchange.c: Send VKCQM and VKSPM voice messages after end of QSO - Drop a change made by Rein in tlf-0.9.22 to not send these messages if in SSB mode 2011-11-01 Thomas Beierlein * src/getexchange.c: '+' and 'INSERT' respect CTCOMPATIBLE mode also during getexchange() 2011-10-29 Thomas Beierlein * src/callinput.c: '+' and 'INSERT' respect CTCOMPATIBLE mode now - if callfield not empty both keys are working now only if CTCOMPATIBLE is set in logcfg.dat 2011-10-28 Thomas Beierlein * src/gettxinfo.c: Fix upper boundaries for 160 and 40 meters. - Thanks Ben NJ8J for reporting 2011-10-27 Thomas Beierlein * aclocal.m4, configure.in: prepare for prerelease 2 of tlf-1.1 - fix aclocal.m4 * src/clear_display.c, src/printfield.c, src/showscore.c: move score display in upper right corner of display * src/logit.c, src/searchlog.c, src/searchlog.h: Hide searchlog panel at more points 2011-10-23 Thomas Beierlein * src/muf.c: propagation display uses panel code now * src/searchlog.c, src/searchlog.h, src/time_update.c: Use panel code for show and hide of searchlog 2011-01-30 Thomas Beierlein * src/nicebox.c, src/nicebox.h: factorisation to support nicebox for given window 2011-10-20 Thomas Beierlein * src/addmult.c, src/audio.c, src/autocq.c, src/background_process.c, src/bandmap.c, src/calledit.c, src/callinput.c, src/changepars.c, src/checklogfile.c, src/cleanup.c, src/clear_display.c, src/clusterinfo.c, src/deleteqso.c, src/displayit.c, src/edit_last.c, src/editlog.c, src/freq_display.c, src/getexchange.c, src/getmessages.c, src/gettxinfo.c, src/grabspot.c, src/keyer.c, src/lancode.c, src/listmessages.c, src/log_to_disk.c, src/logit.c, src/logview.c, src/main.c, src/messagechange.c, src/muf.c, src/netkeyer.c, src/parse_logcfg.c, src/printcall.c, src/readcalls.c, src/readctydata.c, src/recall_exchange.c, src/rtty.c, src/rules.c, src/searchlog.c, src/sendbuf.c, src/sendqrg.c, src/setparameters.c, src/show_help.c, src/showpxmap.c, src/showscore.c, src/splitscreen.c, src/startmsg.c, src/writeparas.c: switch all refresh() calls for use of curses panels - add a fake refreshp() function which replaces the old refresh() and calls 'update_panels()' followed by 'doupdate'. - serialize refreshp() calls from different threads 2011-10-23 Thomas Beierlein * src/bandmap.c: fix delete of first line in bandmap (was one char to short) 2011-01-28 Thomas Beierlein * config.h.in, configure.in: Prepare usage curses panel library 2011-10-17 Thomas Beierlein * src/clusterinfo.c, src/splitscreen.c: proper locking for spot_ptr[] array 2011-10-16 Thomas Beierlein * share/logcfg.dat, src/callinput.c, src/changepars.c, src/clusterinfo.c, src/main.c, src/parse_logcfg.c, src/setparameters.c, src/tlf.h, tlf.1.in: Drop old SPOTLIST display - ALT-a now switches between Nocluster->Cluster->Bandmap-> - 'cluster == MAP' displays the new bandmap and writes the last 8 spots to Xplanet's marker file. 2011-10-14 Thomas Beierlein * src/Makefile.am, src/cluster_bg.c, src/cluster_bg.h: Delete unneeded cluster_bg.[ch] files - functionality is now in clusterinfo.c * src/background_process.c, src/background_process.h, src/cluster_bg.c, src/clusterinfo.c: Move 'getclusterinfo()' to clusterinfo.c * src/cluster_bg.c, src/cluster_bg.h, src/clusterinfo.c, src/clusterinfo.h: Move 'loadbandmap()' to clusterinfo.c 2011-10-13 Thomas Beierlein * src/cluster_bg.c: change source of data for loadbandmap() 2011-10-11 Thomas Beierlein * src/callinput.c, src/cluster_bg.c, src/main.c: cleanup unneeded code - drop double extern declarations - drop handling of spotinfo filed as nobody uses that information * src/cluster_bg.c, src/main.c, src/splitscreen.c: on the fly recognition of WWV/WCY announcements 2011-10-07 Thomas Beierlein * src/bandmap.c: keep display of frequency memory (#) 2011-10-06 Thomas Beierlein * src/addmult.c, src/addmult.h, src/globalvars.h, src/readcalls.c: refactor registration of worked multiplier and multi initialisation * src/addmult.c, src/addmult.h, src/searchlog.c, src/searchlog.h: move 'load_multipliers()' to addmult.c * src/addmult.c: drop old comment regarding 'wysiwymultsg' variable 2011-10-05 Thomas Beierlein * README: Edited README 2011-10-05 Thomas Beierlein * .gitignore, src/showscore.c: Do not show mults per band in WYSIWYG_ONCE mode. 2011-10-05 Thomas Beierlein * src/addmult.c, src/globalvars.h, src/main.c, src/readcalls.c, src/showscore.c: Remove 'wysiwygmults' variable * src/addmult.c, src/changepars.c, src/getsummary.c, src/globalvars.h, src/readcalls.c, src/showscore.c: Remove 'multcount' variable 2011-10-02 Thomas Beierlein * src/addmult.c: Further simplifications 2011-10-01 Thomas Beierlein * src/addmult.c, src/changepars.c, src/getexchange.c, src/globalvars.h, src/main.c, src/showscore.c: Complete new handling of mults_possible[] length 2011-09-30 Thomas Beierlein * src/addmult.c: Prepare factorization of addmult() and addmult2() Prepare factorization of lookup of possible mults and worked mults 2011-09-24 Thomas Beierlein * src/parse_logcfg.c, src/tlf.h: Report unsupported config keywords during startup * rules/arrldx_dx, rules/arrldx_usa, rules/arrlfd, rules/arrlss, rules/contest, rules/cqww, rules/dxped, rules/eusprint, rules/lzdx, rules/pacc_dx, rules/pacc_pa, rules/qso, rules/spdx_dx, rules/spdx_sp, rules/ssa_mt, rules/template, rules/wpx, src/parse_logcfg.c: change keywords in parse_logcfg.c to correspond to man page The keywords for CQ_TU_MSG, VKCQM and VKSPM were not recognized correctly. Fixed. Adapt contest rules to changed keywords. 2011-10-01 Thomas Beierlein * src/addmult.c, src/changepars.c, src/getexchange.c, src/globalvars.h, src/main.c, src/showscore.c: Complete new handling of mults_possible[] length 2011-09-30 Thomas Beierlein * src/addmult.c: first steps to a rework multi scoring 2011-10-01 Thomas Beierlein * src/main.c, src/parse_logcfg.c, src/searchlog.c, tlf.1.in: Better handling of lines from external multiplier file - Allow comment lines (starting with '#') - strip leading and trailing whitespace - drop empty lines Furthermore drop unneeded string variables and make global ones local. 2011-02-03 Thomas Beierlein * rules/arrldx_dx, rules/arrldx_usa, rules/arrlfd, rules/arrlss, rules/contest, rules/cqww, rules/dxped, rules/eusprint, rules/lzdx, rules/pacc_dx, rules/pacc_pa, rules/qso, rules/spdx_dx, rules/spdx_sp, rules/ssa_mt, rules/template, rules/wpx: fix format and drop false comment in rule files 2011-09-24 Thomas Beierlein * share/logcfg.dat, src/main.c, src/parse_logcfg.c, src/showscore.c, tlf.1.in: drop MANY_CALLS config statement * datastructures: commented use of 'mults_possible' array 2011-09-19 Thomas Beierlein * src/readcalls.c: Correct rescoring for WYSIWYG_* methods * src/addmult.c: strip trailing spaces from comment for WYSIWYG_... handling * src/readcalls.c: Fixed handling of comments for WYSIWYG_ONCE and _MULTI - Old code dropped multi at first space in comment string. Changed to strip only trailing spaces. Was so back before tlf-0.9.21 * src/readcalls.c, src/recall_exchange.c, src/searchcallarray.c: Fix wrong use of callarray_nr 2011-09-22 Thomas Beierlein * src/addmult.c, src/changepars.c, src/getexchange.c, src/globalvars.h, src/main.c, src/searchlog.c, src/showscore.c: Switch mults_possible[] to a growing array. 2011-09-21 Thomas Beierlein * src/main.c, src/searchlog.c: add comments and rearrange variable definitions 2011-09-20 Thomas Beierlein * src/parse_logcfg.c: Logcfg.dat now allows >9 points for scoring Fix possible overflows if there are point declaration above 9 points. 2011-09-15 Thomas Beierlein * README: Add a summary description to README. The summary was copied from the TLF page on Savannah. It gives a short intro which is shown on GitHubs TLF repo page. 2011-07-26 Thomas Beierlein * tlf.1.in: Drop ORION exception from RIGMODEL explanation 2011-06-10 Thomas Beierlein * src/callinput.c, src/clear_display.c, src/getexchange.c, src/keyer.c, src/logit.c, src/main.c, src/sendbuf.c: make curx and cury local variables 2011-06-08 Thomas Beierlein * src/getpx.c, src/showinfo.c: Adding comments, small improvements, cleanup 2011-05-31 Thomas Beierlein * src/log_to_disk.c, src/log_to_disk.h: add spot to bandmap for stations worked in S&P 2011-05-29 Thomas Beierlein * config.h.in, configure.in: some modernisation 2011-05-11 Thomas Beierlein * src/background_process.c, src/log_to_disk.c, src/log_to_disk.h, src/logit.c, src/scroll_log.c: fixed handling of exclusive access to log_to_disk 2011-05-02 Thomas Beierlein * src/addcall.c, src/getctydata.c: simplify * src/set_tone.c: drop unneeded calculation of speedstr 2011-04-29 Thomas Beierlein * src/addcall.c, src/readcalls.c, src/searchcallarray.c: Fixed handling of callarray entries 2011-04-14 Thomas Beierlein * src/addmult.c: use #define instead of fixed value for number of bands * src/addspot.c: spot broadcasts to other stations contains the identifier of the sending station now * src/addcall.c: add_call() remembers worked band now * src/readcalls.c: regroup code fragment 2011-03-03 Thomas Beierlein * src/searchlog.c: correct position of pfx in bottom line of check window 2011-07-21 Thomas Beierlein * Makefile.am, New_Bandmap.txt: add New_Bandmap.txt to EXTRA_DIST File contains description of new bandmap features. 2011-07-23 Thomas Beierlein * src/grabspot.c: fix compilation without hamlib 2011-07-06 Thomas Beierlein * src/callinput.c, src/grabspot.c: implemented scanning up and down in grab_next() switch keys: ctrl-g is for scanning now as Alt-g gets grabbed from the terminal emulator 2011-07-05 Thomas Beierlein * src/callinput.c: change meaning of Alt-G to jump to next spot * src/bandmap.c, src/bandmap.h, src/grabspot.c: extended 'grab' function to switch to next spot up- or downwards 2011-07-04 Thomas Beierlein * src/grabspot.c: Grabspot switches to S&P if in run mode and remembers QRG * src/bandmap.c, src/bandmap.h, src/grabspot.c, src/main.c, src/main.h: started new grabspot implementation 2011-06-28 Thomas Beierlein * src/bandmap.c, src/bandmap.h: First work on grabspot 2011-06-27 Thomas Beierlein * src/bandmap.c, src/bandmap.h: restructure filtering 2011-06-23 Thomas Beierlein * src/bandmap.c: add some comments * src/bandmap.c: - rename 'spots' structure to 'allspots' - add mutex to protect 'allspots' data structure 2011-06-10 Thomas Beierlein * src/cluster_bg.c, src/getctydata.c, src/getctydata.h: implement getctynr which does not change any global strings like pfstr, ituzone, countrynr, continent and so on ... (port from tlf-1.0.5) 2011-05-16 Thomas Beierlein * src/addspot.c, src/bandmap.c: fix display of reporting node 2011-05-02 Thomas Beierlein * src/bandmap.c: Fix bandmap_show crashes 2011-04-29 Thomas Beierlein * src/addcall.c, src/readcalls.c, src/searchcallarray.c: Fixed handling of callarray entries 2011-04-14 Thomas Beierlein * src/bandmap.c: bm_isdupe() respects worked band now * src/bandmap.c: fix display of dupes in bandmap * src/addspot.c: spot broadcasts to other stations contains the identifier of the sending station now * src/callinput.c: '.' calls new bm_menu() now * src/bandmap.c, src/bandmap.h: bm_is_dupe() check implemented * src/readcalls.c: regroup code fragment 2011-03-09 Thomas Beierlein * src/cluster_bg.c: - drop display of old bandmap - call bm_show() to display the new one 2011-03-08 Thomas Beierlein * src/tlf.h: new definition of BANDINDEX_xx 2011-03-07 Thomas Beierlein * src/Makefile.am, src/bandmap.c, src/bandmap.h, src/cluster_bg.c, src/splitscreen.c: First work for new bandmap - add bandmap.[ch] - call according functions - bandmap stores freq in Hz as integers 2011-02-24 Thomas Beierlein * src/showinfo.c: - correct display of 1A stations - simplify 2011-02-25 Thomas Beierlein * src/bandmap.h: First steps to define the behaviour of the new bandmap 2011-02-23 Thomas Beierlein * src/addcall.c, src/cluster_bg.c, src/searchcallarray.c, src/tlf.h: - fix wrong false return value from searchcallarray - simplify 2011-02-22 Thomas Beierlein * src/main.c, src/makelogline.c, src/score.c: simplify handling of score points * configure.in, src/Makefile.am, src/addcall.c, src/addspot.c, src/callinput.c, src/cluster_bg.c, src/dxcc.c, src/dxcc.h, src/getctydata.c, src/getmessages.c, src/getwwv.c, src/globalvars.h, src/main.c, src/makelogline.c, src/muf.c, src/readctydata.c, src/score.c, src/searchlog.c, src/showinfo.c, src/showpxmap.c, src/tlf.h: switch cty data handling to growing arrays needs GLib, so also add a check to configure.in 2011-06-09 thomas beierlein version 1.0.5 * fixes some nasty racing condition between bandmap code and checkwindow. In result prefix in lower line of checkwindow got displayed wrong, but country was right. Thanks Martin OK1RR for reporting. 2011-05-22 thomas beierlein version 1.0.4 * fix for wrong handling of recalled exchange - Thanks Martin OK1RR for reporting. - All calls from initial exchange file will be recognised even if part of a complex call, e.g. DL1CCL in LA/DL1CCL/p - All calls from former QSO's have to be exact including any pre- or postcombination - Now complete exchange will be recalled (not only first word) 2011-02-07 thomas beierlein version 1.0.3 * fix buffer overflow in 'send_lan_message' * fix wrong count of points and qso's for last band entry. Thanks Martin OK1RR for reporting. 2011-01-31 thomas beierlein version 1.0.2 * fix bug in sendto call. cwdaemon needs a zero terminated string. Thanks for reporting Andy G4KNO 2011-01-15 thomas beierlein version 1.0.1 * fix calculation of sun up and down time based on longitude from country description in cty.dat 2011-01-13 thomas beierlein * fix bug in cty.dat and in the routine which reads in the file 2011-01-08 thomas beierlein * fix logfile read error. Last QSO got reead twice. * Optimize searchlog() for speed and also optimize partial call lookup. 2010-12-23 thomas beierlein version 1.0.0 * fix some possible buffer overflow in exchange handling for cqww * fix handling of changing RST, especially resetting the values to 59/599 * make Backspace and Delete-Keys the same 2010-12-19 thomas beierlein * fix some code problems reported by Stephan F8FCE. Thanks. * changed ESC handling in comment and call input field 2010-12-04 thomas beierlein * add new cty.dat provided by OK1RR * fix typos in man page and clarify CQDELAY handling * fix CQDELAY handling in parse_cfg 2010-11-29 thomas beierlein * fix parsing for MARKERDOTS and MARKERCALL keywords * fix buffer overrun during write of markerfile * add new callmaster file provided by OK1RR 2010-10-18 thomas beierlein * fix installation commands for 'make distcheck' 2010-09-11 thomas beierlein * fix calculation of sunrise and sunset times * fix calculation of QSO Rate * some minor fixes of uninitialized variables 2010-01-xx thomas beierlein * better recognition of hamlib install (tnx F8FCE) * fix a lot of buffer overrun for string handling (as glibc and gcc use -D_FORTIFY_SOURCE for stricter checking of buffer overuns) * rewrote handling of initial exchange file. It now allows empty and comment lines (#) and spaces around the callsign. Leading space before comment gets ignored. * Fix input handling of notes. * Fix autocq handling. First characters gets no longer swallowed. * Drop code for old not functional LPT_KEYER and COM1_KEYER. * strip autogenerated files from repository. 2007-12-21 rein couperus * changed searchlog.c ('possible calls') 2007-12-18 rein couperus * changed cluster_bg.c to fix possible buffer overflow * changed searchlog.c -> compare now starts at beginning of callsign. 2003-09-10 dimiter (mitko) kroumov version 0.9.1: * added an autoRXVTdiscovery and a hack XTERM arrows by putting "linux" native driver as TERMinal in the environment. * Introduced WAZMULT (CQWW like) and ITUMULT switches as contest rule multipliers * logcfg.dat has been split up. added a new "rules/" directory for the contest rules file. 2002-11-03 rein couperus version 0.8.6: * bug fixes: various modules * fixed getctydata.c to interpret ctydb properly * fixed bug in callinput.c allowing input of too many characters in call field * added TIME_OFFSET to allow running PC on local time instaead of UTC * added arrl sweepstakes contest with flexible exchange input 2002-10-01 rein couperus version 0.8.1: * various modules: added frequency data, talk data and serialnr data network distribution * added :info and :freq displays 2002-09-07 rein couperus version 0.8.0: * lancode.c, lancode.h: added networking module * various modules: major code changes to interface to the networking module for log data and packet data distribution 2002-08-30 rein couperus version 0.7.3: * background_process.c: added cw simulator mode * changeparams.c: added command :simulator * logit.c, call_input.c: added simulator code * main.c: added various global variables for cw simulator * searchlog.c: fixed bug to enable working more than 20 JA's (now 999) 2002-08-30 rein couperus version 0.7.2: * configure.in : added --enable-hamlib to switch on Hamlib support * sendtxinfo.c, main.c: changed the code to support library switch 2002-08-21 rein couperus version 0.7.1: * parse_logcfg.c: added RIGPORT parameter * clusterinfo.c : added ctrl-g support for spot list 2002-08-21 rein couperus version 0.7.0: * sendqrg.c: added Hamlib support * gettxinfo.c: added Hamlib support * parse_logconfig.c: added Hamlib support * added rig.h 2002-08-12 rein couperus version 0.6.1: * splitscreen.c: telnet client does now display correctly when long buffers come in. * preliminary fix for bandmap display * added FIFO interface to cluster monitor * added command to logcfg.dat: FIFO_INTERFACE this starts a FIFO called clfile in the working directory for added flexibility and backward compatability with previous versions 2002-08-08 rein couperus version 0.6.0: * major rewrite of all routines making disk access. * Removed all system calls. * included telnet client and tnc terminal based on splitscreen by Dave Brown, N2RJT. Now fully integrated with tlf. * Added commands to logcfg.com: TELNETHOST, TELNETPORT TNCPORT (1 or 2) * callinput.c: ESCAPE now erases call + exchange * show_score.c: Color change in header line 2002-07-21 rein couperus * searchlog.c: now keeps logdata in ram to speed up dupe check removed sys calls and reference to /tmp/tlf * store_to disk.c copy logdata into ram array * delete_qso.c remove qso from ram array * edit_last.c change qso in ram array * readcalls.c read qso data into ram array * main.c added global qso array (3000 qso's) 2002-07-21 rein couperus * searchlog.c: changed partials routine to run in RAM added load_partials function * main.c: added load partials from disk * time_update.c removed disk acces to logfile every 5 secs * score.c changed cqww scoring (2 pts within NA) 2002-07-14 Rein Couperus * edit_last.c: added instert and delete * removed call to tlf_deletelogline 2002-07-13 Rein Couperus tlf-0.5.4.3: * main.c: added mixedmode parameter * searchlog.c added mixed mode capability to dupe logic * writecabrillo.c added wysiwyg multiplier format and mixed capability * changeparameters.c added :CWMODE, :SSBMODE and :DIGIMODE commands * show_help.c added new mode switch commands 2002-07-07 Rein Couperus tlf-0.5.4.2: * readcalls.c: fixed logic for wysiwyg multipliers * getexchange.c : added "\" command 2002-06-09 Rein Couperus tlf-0.5.4.1: adjustments for bugs in debian floppy version (delete last qso, write cabrillo) * deleteqso.c: killed the system call to script tlf_deletelogline, wrote inline code to do the job. *writecabrillo.c: removed system call to 'sed' 2002-05-31 Rein Couperus tlf-0.5.4: * tlf.h: added definition of EDITOR_E3 * various: added support for e3 editor (debian floppy ) * clusterinfo.c: read cl3file only if read successful 2002-05-26 Rein Couperus tlf-0.5.3: * getmessages.c: don't initialize call and logfile name if present in logcfg.dat * getctydata.c: bug fix: calculate right cty for /P calls 2002-05-26 Rein Couperus tlf-0.5.3: * score.c: wpx + cqww: added 2 point mode for NA stations * searchlog.c: added red warning signal in case of call lock (check partials) * parse_logcfg.c: added generic parameters 2EU3DX_POINTS, COUNTRY_MULT, PORTABLE_MULT2 , SERIAL_EXCHANGE for use in logcfg.dat (e.g. in Region 1 field day..). * added new parameters and logic to various files to enable "universal" contest * edit_last.c : added new code to edit last qso ("@" command) 2002-05-24 Rein Couperus tlf-0.5.2a: bug fixes: * deleteqso.c: fixed call to tlf_deletelogline * writecabrillo.c: changed version to 0.5.2 New feature: allow CW logging without external keyer.... * tlf.h: added #definition NO_KEYER * write_keyer.c: check explicitly for presence of keyer * parse_logcfg.c: make default NO_KEYER * main.c: initialize keyerport to NO_KEYER * keyer.c: bail out if NO_KEYER * sendbuf.c: bail out if NO_KEYER 2002-05-24 Rein Couperus * tlf-0.5.2: Automatic generation of .paras file in working directory * changed tlf_cleanup to automatically generate clfile and wwvfile at startup * removed .paras, clfile, wwvfile and logfiles from /examples/xxx/ * added parameter MANY_CALLS to logcfg.dat * added parameters POWERMULT to logcfg.dat (for arrlfd) * update of scoring routine for arrlfd * added larger partial call window 2002-05-19 Rein Couperus * tlf-0.5.1: Initial version with automake and autoconf. tlf-1.4.0/depcomp0000755000175000017500000005602013562576653010624 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2018 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, see . # 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. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: tlf-1.4.0/rules/0000755000175000017500000000000013562576670010455 500000000000000tlf-1.4.0/rules/contest0000644000175000017500000000163513562576621012000 00000000000000######################## # General contest mode # ######################## # CONTEST=contest LOGFILE=qso.log CONTEST_MODE CABRILLO=UNIVERSAL # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=TEST DE % K F2=@ DE % F3=@ 5NN# F4=TU F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=TEST % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU UR 5NN # # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # #SEND_DE # ####### END ##################### tlf-1.4.0/rules/Makefile.in0000644000175000017500000005152413562576653012452 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = rules ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ax_append_flag.m4 \ $(top_srcdir)/macros/ax_cflags_warn_all.m4 \ $(top_srcdir)/macros/ax_pthread.m4 \ $(top_srcdir)/macros/ax_require_defined.m4 \ $(top_srcdir)/macros/ax_with_curses.m4 \ $(top_srcdir)/macros/ax_with_curses_extra.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(rulesdir)" DATA = $(rules_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CMOCKA_CFLAGS = @CMOCKA_CFLAGS@ CMOCKA_LIBS = @CMOCKA_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ HAMLIB_CFLAGS = @HAMLIB_CFLAGS@ HAMLIB_LIBS = @HAMLIB_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBM_LIB = @LIBM_LIB@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXMLRPC_CLIENT_LIB = @LIBXMLRPC_CLIENT_LIB@ LIBXMLRPC_LIB = @LIBXMLRPC_LIB@ LIBXMLRPC_UTIL_LIB = @LIBXMLRPC_UTIL_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_LIBS = @PANEL_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ RULES_FILES = arrl10m_dx arrl160m_usa arrldx_dx arrldx_usa arrlfd arrlss contest cqww \ dxped eusprint focmarathon lzdx pacc_pa pacc_dx qso spdx_dx spdx_sp ssa_mt \ stewperry template wpx waedc_dx waedc_eu waedc_dx_rtty waedc_eu_rtty aadx_dx aadx_as SUBDIRS = rulesdir = $(pkgdatadir)/rules rules_DATA = $(RULES_FILES) EXTRA_DIST = $(RULES_FILES) CLEANFILES = *~ all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rules/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu rules/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-rulesDATA: $(rules_DATA) @$(NORMAL_INSTALL) @list='$(rules_DATA)'; test -n "$(rulesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(rulesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(rulesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(rulesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(rulesdir)" || exit $$?; \ done uninstall-rulesDATA: @$(NORMAL_UNINSTALL) @list='$(rules_DATA)'; test -n "$(rulesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(rulesdir)'; $(am__uninstall_files_from_dir) # 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(rulesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-rulesDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-rulesDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-rulesDATA install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-rulesDATA .PRECIOUS: Makefile # 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: tlf-1.4.0/rules/aadx_as0000644000175000017500000000224313562576621011715 00000000000000################################ # AADX contest for AS stations # # HA2OS, 13.06.2014 # ################################ # CONTEST=aadx LOGFILE=aadx.log CONTEST_MODE CABRILLO=UNIVERSAL BANDWEIGHT_POINTS=160:3,80:2,40:1,20:1,15:1,10:2 DX_POINTS=3 MY_CONTINENT_POINTS=1 RECALL_MULTS PFX_MULT_MULTIBAND ################################# #NOB4 # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=+++CQ TEST AA DE ---% ++TEST-- F2=@ DE % F3=CFM UR ++5NN --YOURAGE F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST AA ----% % # CQ_TU_MSG=+++CQ AA DE ---% S&P_TU_MSG=TU 5NN YOURAGE # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ####### END ##################### tlf-1.4.0/rules/stewperry0000644000175000017500000000165013562576621012362 00000000000000######################## # Stew Perry contest # ######################## # CONTEST=stewperry LOGFILE=stewperry.log CONTEST_MODE CABRILLO=UNIVERSAL NO_RST # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=TEST DE % K F2=@ DE % F3=@ JN97 F4=TU F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=TEST % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU JN97 # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # #SEND_DE # ####### END ##################### tlf-1.4.0/rules/arrl160m_usa0000644000175000017500000000176713562576621012543 00000000000000################################# # ARRL 160m CONTEST (Stateside) # ################################# # CONTEST=arrl160m_usa LOGFILE=arrl160m.log CONTEST_MODE CABRILLO=UNIVERSAL # MULT_LIST=arrlsections DX_&_SECTIONS RECALL_MULTS # COUNTRY_LIST_POINTS=5 TWO_POINTS ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % TEST F2=@ DE % F3=@ ++5NN--PA F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN PA # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # tlf-1.4.0/rules/template0000644000175000017500000000415113562576621012130 00000000000000######################################## # TEMPLATE containing most parameters # # for defining rules for a contest # ######################################## # CONTEST=xxxxxxx LOGFILE=xxxxxxx CONTEST_MODE CABRILLO=xxxxxx # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % TEST F2=@ DE % F3=@ ++5NN--# F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN # # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # #SHORT_SERIAL #LONG_SERIAL # #SEND_DE # ################################# # # # CONTEST PARAMETERS # # (roll your own... ) # ################################# # #CALLUPDATE # #MIXED # #------------------------------- # Can exchange be recycled? # e.g. impossible if it is a serial # number... # #RECALL_MULTS # # format serial number: (001) # #SERIAL_EXCHANGE # #------------------------------- # Multiplier type: # #WYSIWYG_MULTIBAND # (makes its own multiplier list # on the go...) # #WYSIWYG_ONCE # (same, but mults do not count # per band..) # # #MULT_LIST=arrlsections #MULT_LIST=us_canada_states #SERIAL_SECTIONS #DX_&_SECTIONS #SECTION_MULT #POWERMULT_5 #POWERMULT_2 # #PORTABLE_MULT_2 # ################################# # # # POINTS LIST # # # ################################# # # How may points per qso? # #ONE_POINT #TWO_POINTS #THREE_POINTS #2EU3DX_POINTS # #USE_COUNTRYLIST_ONLY #COUNTRYLIST=SP_DX:SP,HA #COUNTRY_LIST_POINTS=10 #MY_COUNTRY_POINTS=2 #MY_CONTINENT_POINTS=5 #DX_POINTS=10 # # ####### END #####################tlf-1.4.0/rules/arrl10m_dx0000644000175000017500000000173513562576621012273 00000000000000############################### # ARRL 10m CONTEST (DX side) # ############################### # CONTEST=arrl10m_dx LOGFILE=arrl10m_dx.log CONTEST_MODE CABRILLO=UNIVERSAL SSBPOINTS=2 CWPOINTS=4 MIXED DX_&_SECTIONS MULT_LIST=arrl10m_mults # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ % % TEST F2= % F3=@ +++5NN---# F4=TU F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU +++5NN---# # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # tlf-1.4.0/rules/arrldx_usa0000644000175000017500000000165113562576621012463 00000000000000############################### # ARRL DX CONTEST (Stateside) # ############################### # CONTEST=arrldx_usa LOGFILE=arrltest.log CONTEST_MODE CABRILLO=UNIVERSAL # RECALL_MULTS # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % TEST F2=@ DE % F3=@ ++5NN--PA F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN PA # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # tlf-1.4.0/rules/spdx_sp0000644000175000017500000000216413562576621011777 00000000000000######################################### # SPDX contest for stations outside SP # # PA0R, 3.10.2003 # ######################################### # CONTEST=spdx_sp LOGFILE=spdx.log CONTEST_MODE CABRILLO=UNIVERSAL ################################# MY_COUNTRY_POINTS=0 MY_CONTINENT_POINTS=1 DX_POINTS=3 COUNTRY_MULT SERIAL_EXCHANGE NOB4 # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % TEST F2=@ DE % F3=@ ++5NN--B F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN B # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ####### END ##################### tlf-1.4.0/rules/Makefile.am0000644000175000017500000000056113562576621012427 00000000000000RULES_FILES = arrl10m_dx arrl160m_usa arrldx_dx arrldx_usa arrlfd arrlss contest cqww \ dxped eusprint focmarathon lzdx pacc_pa pacc_dx qso spdx_dx spdx_sp ssa_mt \ stewperry template wpx waedc_dx waedc_eu waedc_dx_rtty waedc_eu_rtty aadx_dx aadx_as SUBDIRS = rulesdir = $(pkgdatadir)/rules rules_DATA = $(RULES_FILES) EXTRA_DIST = $(RULES_FILES) CLEANFILES = *~ tlf-1.4.0/rules/waedc_eu0000644000175000017500000000341413562576621012072 00000000000000######################################### # WAEDC contest for EU and DX stations # # HA2OS, 11.09.2014 # ######################################### # CONTEST=waedc LOGFILE=waedc.log CONTEST_MODE CABRILLO=WAEDC QTC=RECV CONTINENTLIST=SA,NA,AF,AS,OC CONTINENT_LIST_POINTS=1 USE_CONTINENTLIST_ONLY BANDWEIGHT_MULTIS=80:4;40:3;20:2;15:2;10:2 COUNTRY_MULT PFX_NUM_MULTIS=W,VE,VK1,ZL,ZS,JA,PY,UA9 ################################# #NOB4 # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=+++CQ TEST DE--- % ++TEST-- F2=@ DE % F3=CFM UR ++5NN --# F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG= S&P_TU_MSG=TU 5NN # # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # #VKM1=cq.ogg #VKM2=mycall.ogg #VKM3= #VKM4= #VKM5= #VKM6= #VKM7= #VKM8= #VKM9= #VKM10= #VKM11= #VKM12=autocq.wav #VKSPM= #VKCQM= QR_F1=QTC? QR_F2=QRV QR_F3=R QR_F5=TIME? QR_F6=CALL? QR_F7=NR? QR_F8=AGN QR_F10=QSL ALL #QR_VKM1=qtcask.ogg #QR_VKM2=qrv.ogg #QR_VKM3=roger.wav #QR_VKM5=timaegn.wav #QR_VKM6=callagn.wav #QR_VKM7=nragn.wav #QR_VKM8=agnall.wav #QR_VKM10=qslall.wav QTCREC_RECORD # record command, the $ mark is the placeholder, Tlf will replace the # record file: yymmddhhmmss.wav QTCREC_RECORD_COMMAND=rec -r 8000 $ -q # QTC_RECV_LAZY ####### END ##################### tlf-1.4.0/rules/pacc_dx0000644000175000017500000000225313562576621011717 00000000000000######################################### # PACC contest for stations outside PA0 # # PA0R, 3.10.2003 # ######################################### # CONTEST=pacc_dx LOGFILE=paccdx.log CONTEST_MODE CABRILLO=UNIVERSAL ################################# MULT_LIST=paccmults COUNTRYLIST=PA USE_COUNTRYLIST_ONLY COUNTRY_LIST_POINTS=1 SECTION_MULT RECALL_MULTS SERIAL_EXCHANGE SHORT_SERIAL NOB4 # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ PA DE % TEST F2=@ DE % F3=@ ++5NN--# F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN # # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ####### END ##################### tlf-1.4.0/rules/wpx0000644000175000017500000000162513562576621011136 00000000000000################## # CQ WPX Contest # ################## # CONTEST=wpx LOGFILE=wpx.log CONTEST_MODE CABRILLO=UNIVERSAL # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % TEST F2=@ DE % F3=@ ++5NN--# F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN # # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # SHORT_SERIAL # ####### END ##################### tlf-1.4.0/rules/dxped0000644000175000017500000000160213562576621011417 00000000000000################### # DXPEDITION mode # ################### # CONTEST=dxped LOGFILE=qso.log CONTEST_MODE # # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % K F2=@ DE % F3=@ 5NN F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % UP S&P_TU_MSG=TU UR 5NN # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # #SEND_DE # ####### END ##################### tlf-1.4.0/rules/pacc_pa0000644000175000017500000000171313562576621011704 00000000000000# PACC contest for stations inside PA0 # ######################################## CONTEST=pacc_pa logfile=pacc.log CONTEST_MODE CABRILLO=UNIVERSAL # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % TEST F2=@ DE % F3=@ ++5NN--NB F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN NB # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ################################# NOB4 ####### END ##################### tlf-1.4.0/rules/focmarathon0000644000175000017500000000265113562576621012621 00000000000000################################# # FOC Marathon # # DL1JBE, OK1RR 10.1.2014 # ################################# # CONTEST=focmarathon LOGFILE=marathon.log INITIAL_EXCHANGE=focmarathon.txt RECALL_MULTS CABRILLO=FOCMARATHON # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = mycall # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # * = AR # # = = BT # # < = SK # # ( = KN # # ! = SN # # & = AS # # > = BK # # # ################################## # F1=CQ FOC % % FOC F2=@ DE % F3=@ ++5NN-- 1437 F4=TU % FOC F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++CQ FOC-- % % ++FOC-- # CQ_TU_MSG=TU % FOC S&P_TU_MSG=TU 5NN 1437 # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ################################# # # # Voice Keyer Files # # (F1 to F12) # ################################# # # only cw here tlf-1.4.0/rules/waedc_dx_rtty0000644000175000017500000000242113562576621013153 00000000000000######################################### # WAEDC contest for DX stations, RTTY # # HA2OS, 28.10.2015 # ######################################### # CONTEST=waedc LOGFILE=waedc.log CONTEST_MODE CABRILLO=WAEDC QTC=BOTH CONTINENTLIST=SA,NA,AF,AS,OC BANDWEIGHT_MULTIS=80:4;40:3;20:2;15:2;10:2 COUNTRY_MULT EXCLUDE_MULTILIST=CONTINENTLIST ONE_POINT ################################# #NOB4 # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ TEST DE % F2=@ DE % F3=@ 599 # # F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=TEST % % # CQ_TU_MSG=TU ! DE % TEST S&P_TU_MSG=TU ! 599 # # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # QR_F1=QTC? QR_F2=QRV QR_F3= QR_F5= QR_F6= QR_F7= QR_F8=AGN QR_F10=QSL ALL QS_F1=QRV? QS_F2=QTC sr/nr ####### END ##################### tlf-1.4.0/rules/lzdx0000644000175000017500000000176713562576621011310 00000000000000################# # LZ DX CONTEST # # by LZ3NY # ################# # CONTEST=lzdx LOGFILE=lzdx.log CONTEST_MODE CABRILLO=UNIVERSAL # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ LZ DE % % K F2=@ DE % F3=@ ++5NN--SF F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN SF # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # MIXED # COUNTRYLIST=LZ MY_COUNTRY_POINTS=1 MY_CONTINENT_POINTS=1 DX_POINTS=3 COUNTRY_LIST_POINTS=10 ITUMULT WYSIWYG_MULTIBAND tlf-1.4.0/rules/aadx_dx0000644000175000017500000000231313562576621011723 00000000000000#################################### # AADX contest for NON AS stations # # HA2OS, 13.06.2014 # #################################### # CONTEST=aadx LOGFILE=aadx.log CONTEST_MODE CABRILLO=UNIVERSAL BANDWEIGHT_POINTS=160:3,80:2,40:1,20:1,15:1,10:2 CONTINENT_LIST_POINTS=1 CONTINENTLIST=AS USE_CONTINENTLIST_ONLY RECALL_MULTS PFX_MULT_MULTIBAND ################################# #NOB4 # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=+++CQ TEST DE ---%++ TEST -- F2=@ DE % F3=CFM UR ++5NN --43 F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST AA ----% % # CQ_TU_MSG=+++TU TEST AA ---% S&P_TU_MSG=++TU 5NN --43 # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ####### END ##################### tlf-1.4.0/rules/waedc_dx0000644000175000017500000000271413562576621012076 00000000000000######################################### # WAEDC contest for EU and DX stations # # HA2OS, 01.08.2014 # ######################################### # CONTEST=waedc LOGFILE=waedc.log CONTEST_MODE CABRILLO=WAEDC QTC=SEND CONTINENTLIST=EU CONTINENT_LIST_POINTS=1 USE_CONTINENTLIST_ONLY BANDWEIGHT_MULTIS=80:4;40:3;20:2;15:2;10:2 COUNTRY_MULT ################################# #NOB4 # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ TEST DE % % F2=@ DE % % F3=@ QSL - 599 # # DE % F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=TEST % % # CQ_TU_MSG=TU DE % TEST S&P_TU_MSG=TU 599 # 599 # # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # # QTC send window shortkeys QS_F1=QRV? QS_F2=QTC sr/nr #VKM1=cq.ogg #VKM2=mycall.ogg #VKM3= #VKM4= #VKM5= #VKM6= #VKM7= #VKM8= #VKM9= #VKM10= #VKM11= #VKM12=autocq.wav #VKSPM= #VKCQM= #QR_VKM1=qrvask.wav #QR_VKM2= #QR_VKM3= #QR_VKM5= #QR_VKM6= #QR_VKM7= #QR_VKM8= #QR_VKM10= ####### END ##################### tlf-1.4.0/rules/qso0000644000175000017500000000207413562576621011121 00000000000000###################################################### # General qso mode (no contest procedure, no points) # # by PA0R 4.10.2003 # ###################################################### # CONTEST=qso LOGFILE=qso.log # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ CQ DX DE % % K F2=@ DE % F3=@ DE % R OM TU FER CALL = UR 5NN 5NN HW? K F4=TU 73 ES GL F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=CQ CQ DX DE % % K # CQ_TU_MSG=TU ES 73 % S&P_TU_MSG=TU 5NN GL # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ####### END ##################### tlf-1.4.0/rules/eusprint0000644000175000017500000000170213562576621012165 00000000000000########################### # European SPRINT contest # ########################### # CONTEST=sprint LOGFILE=eusprint.log CONTEST_MODE CABRILLO=EUSPRINT # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % TEST F2=@ DE % F3=@ de % # REIN F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=@ DE % TU # REIN # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # SHORT_SERIAL # ####### END ##################### tlf-1.4.0/rules/arrlfd0000644000175000017500000000317713562576621011576 00000000000000########################## # ARRL Field day contest # # PA0R 3.10.2003 # # N0NB 6.5.2013 # ########################## # CONTEST=arrl_fd LOGFILE=fd.log CONTEST_MODE NO_RST ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = mycall # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # * = AR # # = = BT # # < = SK # # ( = KN # # ! = SN # # & = AS # # > = BK # # # ################################## # F1=CQ FD DE % K F2=@ DE % F3=@ 3A CT F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=+FD- % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 3A CT # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ################################# # # # Voice Keyer Files # # (F1 to F12) # ################################# # #VKM1=cq.wav #VKM2= #VKM3= #VKM4= #VKM5= #VKM6= #VKM7= #VKM8= #VKM9= #VKM10= #VKM11= #VKM12= #VKSPM= (S&P return message) #VKCQM= (CQ mode return message) # ################################# # # # Field Day points # ################################# # SSBPOINTS=1 CWPOINTS=2 MIXED tlf-1.4.0/rules/spdx_dx0000644000175000017500000000225113562576621011765 00000000000000######################################### # SPDX contest for stations outside SP # # PA0R, 3.10.2003 # ######################################### # CONTEST=spdx_dx LOGFILE=spdx.log CONTEST_MODE CABRILLO=UNIVERSAL ################################# MULT_LIST=spdxmults COUNTRYLIST=SP USE_COUNTRYLIST_ONLY COUNTRY_LIST_POINTS=3 SECTION_MULT RECALL_MULTS SERIAL_EXCHANGE SHORT_SERIAL NOB4 # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ SP DE % TEST F2=@ DE % F3=@ ++5NN--# F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN # # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ####### END ##################### tlf-1.4.0/rules/waedc_eu_rtty0000644000175000017500000000245213562576621013155 00000000000000######################################## # WAEDC contest for EU stations - RTTY # # HA2OS, 28.10.2015 # ######################################## # CONTEST=waedc LOGFILE=waedc.log CONTEST_MODE CABRILLO=WAEDC QTC=BOTH CONTINENTLIST=EU BANDWEIGHT_MULTIS=80:4;40:3;20:2;15:2;10:2 COUNTRY_MULT EXCLUDE_MULTILIST=CONTINENTLIST PFX_NUM_MULTIS=W,VE,VK1,ZL,ZS,JA,PY,UA9 ONE_POINT ################################# #NOB4 # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ TEST DE % % F2=@ DE % F3=@ 599 # # F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=CQ TEST DE % % # CQ_TU_MSG=@ TU S&P_TU_MSG=TU ! 599 # # # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # QR_F1=QTC? QR_F2=QRV QR_F3= QR_F5= QR_F6= QR_F7= QR_F8=AGN QR_F10=QSL ALL QS_F1=QRV? QS_F2=QTC sr/nr ####### END ##################### tlf-1.4.0/rules/ssa_mt0000644000175000017500000000202113562576621011575 00000000000000################################################ # SSA_MT CONTEST # ################################################ # CONTEST=ssa_mt LOGFILE=ssa.log #MULT_LIST=ssamults SERIAL+GRID4 CONTEST_MODE TWO_POINTS # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ CQ DE % % K F2=@ DE % F3=@ # JO65AA F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU UR # JO65AA # #ALT_0=message alt 0 #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ####### END ##################### tlf-1.4.0/rules/cqww0000644000175000017500000000306413562576621011300 00000000000000################################# # # # CQWW CONTEST # # # ################################# # CONTEST=cqww LOGFILE=cqww.log CONTEST_MODE CABRILLO=CQWW # ################################## # # # CW Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % TEST F2=@ DE % F3=@ ++5NN--14 F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN 14 # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # ################################# # # # Voice Keyer Files # # (F1 to F12) # ################################# # #VKM1=cq.wav (examples...) #VKM2= #VKM3=/home/rein/tlf/rst.wav #VKM4=/home/rein/tlf/qsl.wav #VKM5=/home/rein/tlf/73.wav #VKM6=/home/rein/tlf/call.wav #VKM7= #VKM8= #VKM9=/home/rein/tlf/agn.wav #VKM10=/home/rein/tlf/qrz.wav #VKM11=/home/rein/tlf/spreturn.wav #VKM12=/home/rein/tlf/cq2.wav #VKSPM=/home/rein/tlf/spreturn.wav (S&P return message) #VKCQM=/home/rein/tlf/qsl.wav (CQ mode return message) # ####### END ##################### tlf-1.4.0/rules/arrldx_dx0000644000175000017500000000201213562576621012276 00000000000000############################### # ARRL DX CONTEST (DX side) # ############################### # CONTEST=arrldx_dx LOGFILE=arrltest.log CONTEST_MODE CABRILLO=UNIVERSAL # MULT_LIST=arrldx_mults COUNTRYLIST=W,VE USE_COUNTRYLIST_ONLY COUNTRY_LIST_POINTS=3 SECTION_MULT RECALL_MULTS # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ DE % TEST F2=@ DE % F3=@ ++5NN--1TT F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU 5NN 1TT # #ALT_0= #ALT_1= #ALT_2= #ALT_3= #ALT_4= #ALT_5= #ALT_6= #ALT_7= #ALT_8= #ALT_9= # tlf-1.4.0/rules/arrlss0000644000175000017500000000244013562576621011622 00000000000000################################################ # The ARRL SWEEPSTAKES contest needs a # # multiplier file containing the sections # # which are used as a multiplier in the # # directory you start tlf from (arrlsections). # ################################################ # CONTEST=arrl_ss LOGFILE=ss.log MULT_LIST=arrlsections CONTEST_MODE CABRILLO=ARRL-SS NO_RST # ################################## # # # Messages F1= to F12= # # Message CQ_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # # ################################## # F1=CQ CQ DE % % K F2=@ DE % F3=@ # A % 83 CT F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12=++++TEST---- % % # CQ_TU_MSG=TU % S&P_TU_MSG=TU UR # A % 83 CT # ALT_0=message alt 0 ALT_1=nr is # # ALT_2=prec? ALT_3=ur section? ALT_4=ck is 83 83 ALT_5=sec is CT CT #ALT_6= #ALT_7= #ALT_8= #ALT_9= # # Alternate ALT messages: #ALT_1=# #ALT_2=A #ALT_3=% #ALT_4=83 #ALT_5=CT ####### END ##################### tlf-1.4.0/README0000644000175000017500000000240213562576670010121 00000000000000# Tlf ham radio contest logger ## Summary Tlf is a console (ncurses) mode general purpose CW/VOICE keyer, logging and contest program for hamradio. It supports the CQWW, the WPX, the ARRL-DX , the ARRL-FD, the PACC and the EU SPRINT contests (single operator) as well as a LOT MORE basic contests, general QSO and DXpedition mode. It interfaces with a morse code generator, your sound card, a number of radios, and with a DX Cluster. Tlf can project cluster data into the excellent Xplanet program, written by Hari Nair. Contest operation mimics the popular TR-Log program for DOS, the output file is TR- as well as CABRILLO compatible. The user interface was designed with over 30 years of experience in CW contesting. The program was written for console mode on purpose, to make it run also on smaller machines, or remotely via a modem link. See `man tlf` for detailed documentation. See also doc/README for details, and the INSTALL file for an quick installation guide. ## Contributing * See homepage at https://Tlf.github.io for more information * There is a mailing list at tlf-devel@nongnu.org (see http://lists.nongnu.org/mailman/listinfo/tlf-devel) * If you want to contribute clone the repo, make changes and send us a patch or pull request. tlf-1.4.0/scripts/0000755000175000017500000000000013562576670011012 500000000000000tlf-1.4.0/scripts/Makefile.in0000644000175000017500000003577313562576653013017 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = scripts ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ax_append_flag.m4 \ $(top_srcdir)/macros/ax_cflags_warn_all.m4 \ $(top_srcdir)/macros/ax_pthread.m4 \ $(top_srcdir)/macros/ax_require_defined.m4 \ $(top_srcdir)/macros/ax_with_curses.m4 \ $(top_srcdir)/macros/ax_with_curses_extra.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CMOCKA_CFLAGS = @CMOCKA_CFLAGS@ CMOCKA_LIBS = @CMOCKA_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ HAMLIB_CFLAGS = @HAMLIB_CFLAGS@ HAMLIB_LIBS = @HAMLIB_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBM_LIB = @LIBM_LIB@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXMLRPC_CLIENT_LIB = @LIBXMLRPC_CLIENT_LIB@ LIBXMLRPC_LIB = @LIBXMLRPC_LIB@ LIBXMLRPC_UTIL_LIB = @LIBXMLRPC_UTIL_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_LIBS = @PANEL_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SCRIPT_FILES = soundlog play_vk bin_SCRIPTS = $(SCRIPT_FILES) EXTRA_DIST = $(SCRIPT_FILES) CLEANFILES = *~ all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu scripts/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binSCRIPTS .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-binSCRIPTS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-binSCRIPTS .PRECIOUS: Makefile # 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: tlf-1.4.0/scripts/soundlog0000755000175000017500000000032413562576621012505 00000000000000#!/bin/sh while [ -f $HOME/.VRlock ] do filename="$HOME/tlf/soundlogs/"`eval date +%d%H%M`".au" if test -f $filename then sleep 10 else rec -w -r 8000 $filename > /dev/null 2> /dev/null fi done tlf-1.4.0/scripts/Makefile.am0000644000175000017500000000015713562576621012765 00000000000000SCRIPT_FILES = soundlog play_vk bin_SCRIPTS = $(SCRIPT_FILES) EXTRA_DIST = $(SCRIPT_FILES) CLEANFILES = *~ tlf-1.4.0/scripts/play_vk0000755000175000017500000000206013562576621012317 00000000000000#!/bin/sh # Part of the TLF contest logging program for amateur radio operators # by Rein Coperous PA0R and Thomas Beierlein DL1JBE 2011. # # 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. # These script is responsible for playing voice key message files # on the command of the TLF main program. # It gets called as 'play_vk filename' and plays the content of # the audio file 'filename' on the default sound device. # # You can adapt it to your convenience to # - mute or unmute your microphone # - play different file formats or # - use another output device # # An executable copy of 'play_vk' in your contest directory (containing the # logcfg.dat file) can be adapted and has precedence over the standard install # mute mic #amixer -c 0 set Mic mute -q # play file on the default sound device play $1 -q 2>/dev/null #unmute mic #amixer -c 0 set Mic unmute -q tlf-1.4.0/doc/0000755000175000017500000000000013562576670010070 500000000000000tlf-1.4.0/doc/README.cabrillo0000644000175000017500000001075613562576621012463 00000000000000New cabrillo handling ===================== In last years the cabrillo format became the de facto standard to sent in your contest results. It showed that the cabrillo implementation in TLF before 1.2.x had some severe limitations: - The old code supported only some fixed cabrillo formats for some selected contests. It was not always possible to use that code to support newer contests. - Only cabrillo v2.0 got supported. - There were some bugs in formatting the QSO: line entries (e.g. formatting the qso number). The new cabrillo code (in writecabrillo.c) tries to fix the problems. It is based on a textual description of the cabrillo format to use, which can be easily extended by the user to support newer contests. WORKING PRINCIPLE ================= The format descriptions are contained in a file 'cabrillo.fmt' in the /usr(/local)/share directory. It provides cabrillo format descriptions for common contests. All descriptions are named and you have to specify which one has to be used with a statement in logcfg.dat or (better) in the contest rule file with the following syntax: CABRILLO= You can put your own format file 'cabrillo.fmt' in your actual working directory which gets precedence over the central one. will be searched first in your local format file. If it is not found there the search continues in the central file provided by TLF itself. If it is not found at all TLF will complain with an error message. CABILLO.FMT =========== The format of cabrillo.fmt entries is as follows: * The file contains groups of lines which are interpreted as key-value pairs. * Each group describes a possible cabrillo format and has to be started by a line containing the in square brackets. * At the moment only one keyword (QSO=...) is supported. * Lines beginning with a '#' are interpreted as comments. * The 'QSO=' key has to be followed by a list of string, number pairs separated by semicolons. Each pair specify one item to put into the QSO: line of the cabrillo file. The name of the item has to be followed by a comma ',' and a number specifying the character width of that field in the QSO: line. Items which are to wide will be truncated to that width. The following items names are supported: FREQ The working frequency. MODE Mode of operation ('CW', 'PH',...) DATE Date of the QSO TIME Logged time of the QSO MYCALL Own call HISCALL Other sides call RST_S RST sent RST_R RST received EXC_S Exchange sent (May contain a '#' character, which gets replaced by the QSO number). EXCH The complete received exchange line EXC1 First space separated word of the received exchange EXC2 Second word of the received exchange EXC3 Third word of the received exchange EXC4 Fourth word of the received exchange TX Number of the TX (for cqww or other contests). All items represent one column in the resulting cabrillo log file. All entries are separated by an additional space character. Example ======= The following entry [cwo] QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;EXC_S,14;HISCALL,13;EXC1,4;EXC2,9 will be selected if CABRILLO=cwo is in the rules file for the CW Open contest. All QSO's will then be formatted as in the following example: QSO: 28000 CW 2012-09-23 0815 DL1JBE 0001 Tom HB9XXX 0023 Joe QSO: ..... IMPORT CABRILLO =============== You can import the existing cabrillo file, when you pass the "-i" argument at startup of Tlf. Logfile must be called YOURCALL.cbr, which is the standard name convention of Tlf. In this case, Tlf reads the configuration and rule files, so the scoring and multipliers will be used as your config describes. Your config also describes the CABRILLO format, what Tlf uses to parses the log to handle the fields as correctly. The output file(s) will IMPORT_contest.log, where the contest is the name of contest in your rule/config file. Eg. my cabrillo is HA2OS.cbr, which must be exists in the current directory. After the import, the result is IMPORT_cqww.log (if the contest name is cqww), so the Tlf doesn't write over the existing logfile. If you want to use the new, imported file, you have to move the old one, and rename the imported file. When the contest is WAE, and the rule file contains a valid QTC setup, and cabrillo contains lines with begin of "QTC:", then you will have the IMPORT_QTC_sent.log and IMPORT_QTC_recv.log. In this case, the original files also kept, and you have to archive and rename the files. tlf-1.4.0/doc/Makefile.in0000644000175000017500000003461213562576653012064 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ax_append_flag.m4 \ $(top_srcdir)/macros/ax_cflags_warn_all.m4 \ $(top_srcdir)/macros/ax_pthread.m4 \ $(top_srcdir)/macros/ax_require_defined.m4 \ $(top_srcdir)/macros/ax_with_curses.m4 \ $(top_srcdir)/macros/ax_with_curses_extra.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(doc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CMOCKA_CFLAGS = @CMOCKA_CFLAGS@ CMOCKA_LIBS = @CMOCKA_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ HAMLIB_CFLAGS = @HAMLIB_CFLAGS@ HAMLIB_LIBS = @HAMLIB_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBM_LIB = @LIBM_LIB@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXMLRPC_CLIENT_LIB = @LIBXMLRPC_CLIENT_LIB@ LIBXMLRPC_LIB = @LIBXMLRPC_LIB@ LIBXMLRPC_UTIL_LIB = @LIBXMLRPC_UTIL_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_LIBS = @PANEL_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ DOC_FILES = FAQ New_Bandmap.txt README README.cabrillo README.ssb \ README_QTC.txt README_QTC_RTTY.txt README.RTTY Xresources doc_DATA = $(DOC_FILES) EXTRA_DIST = $(DOC_FILES) CLEANFILES = *~ all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-docDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-docDATA .PRECIOUS: Makefile # 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: tlf-1.4.0/doc/README_QTC_RTTY.txt0000644000175000017500000001403513562576621013076 00000000000000 This is a short intro for Tlf QTC handling in RTTY mode. Ervin Hegedus HA2OS, 2014. airween@gmail.com Introduction ============ The QTC base instructions described in README_QTC.txt, please read it CAREFULLY, before you start to read this readme. There you will find detailed information about how Tlf handles the QTC in CW and SSB mode. In this readme, I just write the differences. General ======= The QTC window(s), fields, navigation is almost the same, like in CW and SSB modes. In CW/SSB modes every QTC line int the full QTC block exchanged by individually (every QTC line sent or received separately), but that method would be too slow in RTTY mode. In this mode, a complete QTC block exchanged in whole. That's the main different, but this divergence involves a few necessary modifications. Another important thing, that in RTTY mode everyone can send or receive QTC's, there isn't any limit (except the number of total QTC's between two stations). So, it happens that you sent 5 QTC's in a block, but to complete to 10, the second 5 QTC's you will receive from same station. That's why there is the third possible value of "QTC" option in logcfg.dat/rule file, which is "BOTH". Receiving QTC ============= Even if you choose the two-way QTC handling, or you just want to receive QTC's, the CTRL-Q combinaton remaining to receive the QTC block. If you open the QTC receive window with CTRL-Q, apparently nothing has changed. The point is same than in another modes: fill the lines. Yes, the speed of RTTY is a little bit fast, and you have to know type as very quickly, if you want to copy from the terminal of your modem software. To help the copy operation, there is a new feature in Tlf: capturing the output of modem. Currently, only the gMFSK modem could be captured. If you want to start the capture, just press CTRL+S, that means "Start capture". To finish the capture process, just press CTRL+E, that means "End capture". If you've started the capture process, the new window will open, which is a "terminal" window - there you can see the gMFSK modem lines. At the top of the double-window, you can see a small HELP window, which contains all shortkeys these windows. If you press ESC (Escape), then terminal window will be hidden, but - this is very important! - the capture process doesn't finished! Now, if you press CTRL+S again, the terminal window will opens again, and you can see the characters in the meantime. You can recognize two types of lines for QTC block: the serial/number line, or a single QTC line. The formula of serial/number line is NNN/NN. This works only if you didn't fill the serial and number fields in QTC window. So, if those lines are empty, and in your terminal window the line is like this: "QTC 32/8 QTC 32/8" and you scroll there, and pressing ENTER, Tlf recognizes this as the serial and number of the QTC block, and will fill those fields. The QTC line formula could be: 1111/W1AW/234 1111-PX2A-345 The "separator" character could be the "/" (slash) or "-" hyphen. If you scroll to a line like one of these, and pressing ENTER, Tlf will fill the next empty QTC line in QTC block. Note, that the line starts with 4 number, and at the end is also a numeric character, and the length of leftover is less than 14, then Tlf also recognizes the QTC line. IMPORTANT! Only the complete received lines can be captured from right side to left side, and only once. You can't move that line, which increments horizontally - that's the current line. If the line has an NL (new-line) character, the you can capture that. If you've pressed the ENTER on a line, then it will be marked with an "*" (asterisk) sign. That mean, you couldn't capture that anymore. STILL IMPORTANT! If you fill the serial and number fields in main QTC window, the first pattern WILL NOT recogized (SERIAL/NR). If you didn't fill the serial AND number fields (with or without the capture process), you CAN'T capture the QTC lines! That mean, you press ENTER on a QTC line at right side vainly, the line will not copied to right side! So, if you can copy one or more lines from right side to left with capture process, the result could be two types: Tlf thinks the line is a good, fail-safe QTC line, or isn't it: the line contains wrong character, eg. the time filed contains non-numeric character. In this case, the end of the line you can see a "?" (question mark) character. If the line doesn't contains wrong character, you can see a "+" (plus) character. IMPORTANT! You NEED to review ALL lines at the left side by press an ENTER. If the line has "+" character, then that will changed to "*" (asterisk), which means "line marked as confirmed". If line has "?" at the end, then Tlf will send an "AGN N AGN N" message, where the N is the number of the line. Then you can change the wrong character, till the status will goes to "+". If all lines has "*" sign, and you press the ENTER at last line, Tlf will send the message "QSL ALL", or what you've configures for QR_F10 macro. You can send the last message by manually, if you press F10 - then Tlf also send that message, and it will save the received QTC block too. If the all QTC lines are right, and Tlf sent "QTC ALL", then the QTC block will be saved automatically. Sending QTC ============= As you can read the QTC=BOTH descriotion above, Tlf can send AND receive QTC's in same contest. To avoid the shortkey collosions, in this case the only one combination can be used: CTRL+S. If you fill the callsign field (or that's filled when you open the QTC send window), then the QTC serial field is fixed - you can't change that, like CW/SSB modes. Only you can change the number of QTC's field, which could be maximum 10, or if you have QTC (received or sent) with the station, then Tlf calculates the possible number. Then if you press the ENTER, Tlf sends the complete QTC block to your modem (eg. gmfsk_autofile), and you can see the characters in the window of your modem (eg. Fldigi). If station asks you to resend one or more QTC line again, just move the asked line, and press ENTER again. If station confirms the QTC block, you have to save that with CTRL+S. tlf-1.4.0/doc/Xresources0000644000175000017500000000206613562576621012075 00000000000000! Sample Xresources for Xterm. ! Copy to your home directory as $HOME/.Xresources and ! run xrdb -merge ~/.Xresources to make these settings visible ! to a running X instance !Xcursor*theme: DMZ-White !xterm*font: *-fixed-*-*-*-20-* !xterm*font: 10x20 ! Adjust the size parameter to your preference xterm*faceName: DejaVu Sans Mono:size=18:antialias=false XTerm*allowBoldFonts: true ! terminal colors ------------------------------------------------------------ ! Linux terminal scheme xterm*background: #000000 xterm*foreground: #c0c0c0 ! Black + DarkGrey xterm*color0: #000000 xterm*color8: #808080 ! DarkRed + Red xterm*color1: #800000 xterm*color9: #ff0000 ! DarkGreen + Green xterm*color2: #008000 xterm*color10: #00ff00 ! Brown + Yellow xterm*color3: #808000 xterm*color11: #ffff00 ! DarkBlue + Blue xterm*color4: #000080 xterm*color12: #0000ff ! DarkMagenta + Magenta xterm*color5: #800080 xterm*color13: #ff00ff !DarkCyan + Cyan xterm*color6: #008080 xterm*color14: #00ffff ! LightGrey + White xterm*color7: #c0c0c0 xterm*color15: #ffffff tlf-1.4.0/doc/README0000644000175000017500000000415613562576621010672 00000000000000Make sure you have user r/w permissions on /tmp/tlf. The rest is read-only. To start a new contest (or a general- of dexpedition log) copy the constest specific file from /share/tlf/examples//, being: logcfg.dat into a working directory. At this moment examples for the wpx, cqww, eu-sprint, qso, dxpedition mode, arrl-fd, arrl-dx, and pacc exist. Meanwhile, as soon as you have understood the logcfg.dat file (which should not be too difficult) you will be able to make your own for the contests covered. Be sure to change the callsign in the logcfg.dat file. You can use any editor, or ":set" or ":cfg" from within the tlf program. INSTALLATION ============ See INSTALL STARTING TLF ============ TLF is started from the working directory with: tlf (or ./tlf or e.g. /usr/local/bin/tlf) Under X, you may have to set the terminal type. Under Suse and RH 7.2 the KDE Konsole works fine, under Slackware 8.0 I have to use TERM=rxvt. Best bet is the linux text console (separate consoles for tlf and packet, see below). PACKET SUPPORT ============== TLF can also run packet in a separate terminal. To link this to the tlf program start a telnet session from the working directory with: telnet | tee -a clfile In case your packet program is on your own machine, use telnet localhost | tee -a clfile Now you have a separate packet terminal where you can e.g. start "call", telnet or or "minicom" and connect to your favorite dx cluster, or telnet to a cluster on the internet. Activate "FIFOINTERFACE". Activate the cluster display in tlf with :cluster, :spot, or :map You can toggle the announcements filter with :filter CW == See the manual... I prefer to use the cwdaemon for the parallel port. MANUAL ======= The manual is tlfdoc.html, available on the website: ftp://sharon.esrac.ele.tue.nl/pub/linux/ham/tlf CONTRIBUTIONS ============= Thanks to Joop, PA4TU for the help with the make files and the cwdaemon.. Thanks to Ivo, 9A3TY for the serial port /dev/cwkeyer device. Thanks to Eric, PA3FKN for the parallel port /dev/cwkeyer device. BUGS & PROBLEMS =============== pa0rct@amsat.org tlf-1.4.0/doc/Makefile.am0000644000175000017500000000030413562576621012035 00000000000000DOC_FILES = FAQ New_Bandmap.txt README README.cabrillo README.ssb \ README_QTC.txt README_QTC_RTTY.txt README.RTTY Xresources doc_DATA = $(DOC_FILES) EXTRA_DIST = $(DOC_FILES) CLEANFILES = *~ tlf-1.4.0/doc/FAQ0000644000175000017500000000303413562576621010336 00000000000000Q: Where can I download the latest callmaster call sign data file. A: You can use the master.scp file from http://www.supercheckpartial.com Save it as 'callmaster' and copy it in the actual contest directory or in TLF's global data directory (/usr/local/share/TLF). The file in the actual contest directory takes precedence. Q: Can I add my own list of call signs to the callmaster file. A: Sure. Just add it to the end of the file - each call (in uppercase) on a line by itself. Be aware that at the moment the file is limited to 50000 entries. Q: Where can I find an actual CTY.DAT file for TLF? A: Try http://www.country-files.com/ Make sure to save it as 'cty.dat' in lower case letters. Be aware that there a two different file formats. Make sure to download the file for TLF. Q: TLF thinks that I am in cq zone 5 but in fact I am in another one. How can I fix that? A: At the moment you have to modify your cty.dat file. Look for the entry for your country, e.g. for Canada look for Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE:0 Below that entry there may be lines with special prefixes and call signs which counts also for Canada. Add yourself (VE3XYZ in the following example) to the list with the correct CQ zone appended in parentheses, e.g. VE2IM(2)[4],VY0PW(4)[3],VE3XYZ(3); That would override the default setting for the CQ zone (5 for VE) with your one (3). See also http://www.country-files.com/cty-dat-format/ for a detailed description. tlf-1.4.0/doc/New_Bandmap.txt0000644000175000017500000000703613562576621012726 00000000000000New Bandmap in TLF-1.1 ====================== One main poblem in old TLF versions is the very narrow space for cluster messages (only 8 entries plus some room in scrolling). Furthermore the code for looking up the messages was very inefficient and does not allow good filtering of the informations we need. The new bandmap tries to fix some of the problems. The following principles were applied: - Use the space below the QSO entry line for displaying the spots in the background. - For each spot display the frequency (with one decimal) and the call of the spotted station. That allows 3 columns with 10 spots each. - There are 3 sources of spots: * dx cluster messages * spots in local LAN (maybe from other stations scanning the band) * finished QSOs while in S&P - The frequency is remembered with a resolution of 1 Hz if available - You can filter the displayed spots by * band (all bands or only own (momentarily active) band) * mode (all or own) * dupe (show dupes or not) - Each spot may have a letter or star between frequency and call denoting the source of the spot * blank - from cluster * '*' - self spotted or worked in S&P * 'a'..'z' -spotted from station 'a' to 'z' in local network - Color of spots signal the age of the spot * bright blue - new spot * blue - older than 45s (at the moment) * brown - older than 5 min - Dupes (already work stations) are show in lower case and grey USAGE ===== Turn on rig support and connect to a cluster (experiment what happens if one or both conditions are not met). Wait some moments until some spots shows up. - Press '.' to show the filter menu. Next letter switches filtering: * b - toggle band filter * m - toggle mode filter * d - toggle display of dupes * o - only shows the multipliers (CQWW only) - Tune in to any interesting station, insert its call into the input field and press 'Ctrl-A'. The heard station gets added to the bandmap and broadcasted to other stations in the local net. See that it gets marked with a '*' as self spotted. - Tune in to any contest station in S&P and work it as normal. After the QSO is finished the station is added to the bandmap and shown as dupe. - Press 'Ctrl-G' to grab the next displayed spot (starting at your frequency upwards). Each further press of 'Ctrl-G' jumps to the next spot. So you can scan the spotted stations, see if you can work them or jump to the next one. If you reach the last station (highest frequency) the scan switches direction and following key presses goes downward (on lower boundary it switches to upwards again...). !!! At the moment Ctrl-G requires a connected tranceiver to work correctly as it reads the actual starting frequency from the rig !!! - If you type some letters of a call in the map you are interested in and then 'Alt-G' afterwards the first call with that letters gets grabbed. - You can narrow the spots to grab by the above mentioned filters. - If you grab a spot while in 'Run' mode, TLF switches to S&P and remembers your 'run' frequency in the memory. You can switch back to your old running frequency by '+' (back to Run mode) and '#' (back to old frequency) You can also configure bandmap filtering and spot livetime from logcfg.dat - BANDMAP -> use default values (no filtering, livetime = 900 s) - BANDMAP=, string parsed for 'B' - only own band 'M' - only own mode 'D' - do not show dupes 'S' - skip dupes during grab_next (ctrl-g) 'O' - only shows the multipliers (CQWW only) livetime for new spots in second (number >=300) tlf-1.4.0/doc/README.RTTY0000644000175000017500000001267213562576621011475 00000000000000Tlf RTTY howto 2016-2018, Ervin Hegedus, HA2OS This is a guide for Tlf, how to use it with Fldigi in RTTY mode, especially in FSK, LSB or USB modulations. Tlf got a new Fldigi interface, here is what you need to know. To work in RTTY, you need to solve two problems: read and demodulate RTTY signals (RX), and send your messages (TX). To demodulate the signals, we use the Fldigi, the most popular software for digital modes. Fldigi also can modulate, but there are several solutions, eg. MFJ 1278, or any other modems, which can be work through serial port. Let's see, how works the TX direction with Fldigi. Important: if you set up your Fldigi instance, don't set up your RIG! Tlf needs to handle the RIG, because it needs to tune the VFO, to use the bandmap. After the version 1.3, Tlf can controlls Fldigi, then it can be show the QRG (frequency of RIG - see later), and mode of RIG (eg: LSB, USB, FSK). Starting with TLF-1.3 there are two ways to comunicate with Fldigi - the old GMFSK interface and the actual XMLRPC one. Note, that after version 1.3 the GMFSK works as standalone interface, but can't work with Fldigi. Note: Using the new interface is recommended. The old GMFSK interface will be no longer maintained and will go away soon. XMLRPC interface ================ The only thing to do is to set the following command into your logcfg.dat FLDIGI That will work as long as your Fldigi is compiled with the XMLRPC interface and you do use the standard port for it. If you run fldigis XMLRPC on a different port (or machine) use FLDIGI=http://:/RPC2 That's it. Tlf will realizes that you have Fldigi, and will communicate through XMLRPC. You can still read of Fldigi RX window (top) in Tlf own terminal, just use ":miniterm" command in callsign field. There is a new command: ":fldigi", which helps to you to turn on and off Fldigi communication. Then you don't need to modifiy the logcfg.dat to change your mode. Note: in old versions of Tlf, you could't use NETKEYER and FLDIGI in same time. Now this restriction is gone, you can use them in same time. The RX mode is a slightly difficult. I don't want to expose that here, I suppose that anybody knows that, if works in RTTY. I had a "big" problem with Tlf: when I've worked in AFSK, and I moved the Fldigi carrier, I could't know exactly, what is the correct QRG of my RIG. And it was the problem, because I could't use the cluster info, moreover the grabbed spots! So, when I grabbed a station, TLF stored it to the currently QRG, but it didn't stored the Fldigi carrier shift! So, now the Tlf follows this philosophy below. The "native" mode is FSK. If you turn on your RIG, and switch to FSK mode, tune the VFO to an RTTY station. If you want to see its signals in Fldigi, you have to move the Fldigi carrier to 2210Hz. Note, that 2210Hz calculated from the space and mark frequency. The space is 2125Hz, the mark is 2295Hz. 2295-2125 = 170, 170/2 = 85, and 2125+85 = 2210. This value is indicated at bottom-middle of Fldigi window. Note, that you have to swith the Fldigi to reverse mode, so you need to push the [Rv] button. From now on if you find a station on the bandmap, and press the CTRL-G (grab the spot), Tlf will tune to VFO that frequency, and you can hear the station. That's it. Almost :). In FSK mode, there isn't too easy to tune the VFO to the correct QRG. But if Tlf can detect, that your RIG is in FSK mode (through CAT system), then if you move the Fldigi carrier to an another station (which exists eg. on 1000Hz), then Tlf calculates the new VFO frequency, tune the RIG to there, and tune Fldigi's carrier to back, 2210Hz. If you're working in AFSK, then the used modulation is LSB (or USB). In this case, you can move the Fldigi's carrier anywhere you want (from 85Hz to 2915Hz), Tlf only catch's the Fldigi carrrier's value, and calculates the accurate QRG, which indicated on left-middle part in Tlf window. If you want to grab a spot (with CTRL-G), then leave the Fldigi carrier's as it exists, and grab the next spot. Tlf will calculates the requested QRG from the different of the spot and Fldigi carrier's frequency, and tune the RIG. That's it. Error handling: if you forgot to start the Fldigi, or you close that till Tlf runs and wants to communicate with it, Tlf tries to connect. After ten (10) continuous unsuccessful attemtp Tlf will show you the error message (at bottom left corner): "Fldigi: lost connection", and turns it off. If you want to turn on again, just type ":fldigi" command in CALLSIGN field. If Fldigi comes back after less, than ten attempt, the error counter cleared. More new feature in Fldigi interface: - when Tlf sends a message throug Fldigi, it switches Fldigi to TX mode. - similar to CW mode, if you press ESC while Fldigi sends the message, Tlf will stop it. - if the connection between Tlf and Fldigi breaks (eg. you close Fldigi, or you start Tlf before Fldigi), then Tlf realizes it, and handles as correctly. You will lost the Fldigi functions (no TX/RX, QRG align), but Tlf runs away. If you start Fldigi again, after a few seconds, Tlf will work with it again New features after 1.3: - Fldigi supports nanoIO software, which is a small Arduino project Homepage: https://github.com/w1hkj/nanoIO whit this, you can work in real FSK mode - Fldigi can catch the different strings as field values, eg: CALLSIGN, EXCHANGE. If you click in RX window to a callsign, Fldigi fills its CALL field, and Tlf will grab it. EXCHANGE field is similar. 73, Ervin HA2OS tlf-1.4.0/doc/README.ssb0000644000175000017500000001407013562576621011454 00000000000000README.ssb TLF provides a voice keyer facility using the PC's sound card. This readme provides additional information to help the user configure SSB operation. ----------------- Radio Interfacing ----------------- For the purposes of CW and PTT control, TLF interfaces to the radio via cwdaemon, not hamlib. Therefore if you want voice keyer facilities cwdaemon must be running before starting TLF. cwdaemon can be invoked for a serial port or a parallel port. The most likely modern scenario is to use a USB<->serial adaptor, in which case an example of starting cwdaemon (as root) might be: cwdaemon -d ttyUSB0 You can figure out which tty the adaptor is on by running 'dmesg' before and after plugging-in the USB. Check 'man cwdaemon' for circuit suggestions on interfacing DTR/RTS to CW/PTT ports on your radio. One option for mic interfacing is to use PTT to control a relay that connects the radio's mic input either to the mic or to the soundcard. An alternative solution, that is recommended by many other contest loggers, is instead to connect the mic to the soundcard's mic input and the soundcard's output to the radio's mic input. Most soundcards will loop-back the mic audio to the output, which is easily checked. The only issue here is that the mic is also live when playing voice keyer messages, but this can be avoided (see next section). Note that some radios (e.g. TenTec Orion) have only one port that becomes PTT in SSB mode and Key in CW mode. Wire-OR-ing the CW and PTT outputs from cwdaemon is not an ideal solution because in CW mode PTT is still asserted and results in key-down for the duration of the message. At present there is no satisfactory solution to this problem. ------------------- Configuration Files ------------------- Normal practice is to create a new directory for each contest. Then a logcfg.dat file in that directory overrides the default. If you are using SSB only in a contest you can force TLF to start in SSB mode by uncommenting the SSBMODE keyword in logcfg.dat. If you have adopted the method that loops back the mic audio and you want to automatically mute the mic when voice keyer messages are played, copy the 'play_vk' shell script found in the 'scripts' directory of your TLF release to the same directory. This will then be used in preference to the default. Uncomment the lines begining with 'amixer'. Since tlf-1.1.0, (un)muting and playing voice messages has been devolved to this external script file, because not all soundcards offer the same interface. 'Mic' could be called something else. One way of finding this out is to run 'amixer' from a terminal whch returns its capabilities. An alternative method is to install your distro's version of the 'alsamixergui' package and simply see what's available on the faders. This is probably a good idea anyway because it's likely sound won't work without some manual intervention. If you have something other than a 'Mic' source you could try replacing 'Mic' with what you think it should be in the local 'play_vk' file. The process of muting and unmuting the mic is displayed in alsamixergui, which is useful for debug purposes. Please share any information you discover with the TLF community. Similarly, a 'rules' sub-directory can contain a contest specific rule file. This rule file must contain the paths to the audio files corresponding to each F-key to be used. An example might be: VKM1=/home/aham/tlf/audio/f1.wav VKM2=/home/aham/tlf/audio/f2.wav VKM3=/home/aham/tlf/audio/f3.wav VKM4=/home/aham/tlf/audio/f4.wav VKM5=/home/aham/tlf/audio/f5.wav VKM6=/home/aham/tlf/audio/f6.wav VKM7=/home/aham/tlf/audio/f7.wav VKM8=/home/aham/tlf/audio/f8.wav VKM9=/home/aham/tlf/audio/f9.wav VKM10=/home/aham/tlf/audio/f10.wav VKM11=/home/aham/tlf/audio/f11.wav VKM12=/home/aham/tlf/audio/f12.wav VKSPM=/home/aham/tlf/audio/vkspm.wav VKCQM=/home/aham/tlf/audio/vkcqm.wav Thus a common set of voice messages can be pointed to from different rule files. The VKCQM message is the auto-repeated CQ message for when the rate is low! The VKSPM and VKCQM messages are sent after a contact is logged, in S+P and CQ modes respectively. Paths that are not defined cannot be recorded to from within TLF. ------------ Distro Notes ------------ TLF uses 'sox' to record and play audio, so you must have it installed. You can use the sox commands 'rec' and 'play' on the command line in case you need to debug any TLF issues. Modern distros often use the 'pulseaudio' sound server, but this can cause unacceptably long delays at the beginning and end of recordings, and at the beginning and end of voice message playback. If you experience these problems try uninstalling just the pulseaudio alsa plugin. You lose the ability for alsa applications to play and record across a network, but for most TLF users this isn't a problem. --------- Recording --------- To record messages from within TLF, enter ':sou' at the call entry field to take you to the TLF Sound Recorder Utility page. Recording starts by hitting the relevant F-key for that message ('s' or 'c' for the VKSPM and VKCQM messages). Recording is terminated by hitting the key. Currently, recording messages does not key PTT. If you want to hear yourself via the radio's monitor function whilst recording, you will need to manually assert PTT, e.g. press your footswitch throughout. Obviously, this means your recording also goes out on-air, so you might want to minimise your transmitted power whilst setting up recordings. It takes a bit of practice to time your speech within the starting and ending key presses. It's also quite easy to set the alsa Mic gain too high and end up with clipped audio. This will show up during playback as some black and white writing appearing over the top of the display colours. It's actually sox reporting warnings. You can fix this by adjusting the mic level using the alsa mixer. If you have the time, you can trim the audio clip and normalise the levels in an audio editor, like audacity. That way you can avoid worrying too much about getting the recording perfect from TLF. Of course, you could initially record the messages using such an editor if preferred. Andy, G4KNO tlf-1.4.0/doc/README_QTC.txt0000644000175000017500000003127013562576621012214 00000000000000 This is a short intro for Tlf QTC handling. Ervin Hegedus HA2OS, 2014. airween@gmail.com Introduction ============ QTC handling was maded for WAEDC contest for Tlf. It doesn't need any external tool, Tlf supports it out of box. To enable that, you only needs to put a "QTC=" option to logcfg.dat. This parameter needs a value, which could be one of these: "RECV", "SEND", or "BOTH". These values means you only want to receive or send QTC's, or you want to send AND receive QTC's (for example, in RTTY mode). Note, that currently only RECV and SEND mode are implemented. BOTH will used for RTTY mode. QTC window ========== When you enabled the QTC handling in logcfg.dat, you can open the QTC window from either field: callsign or exchange, it doesn't matter. To open it, just press CTRL+Q. If you want to close is, just simple press ESC. The window is divided to 2 side: the left side contains the QTC's data, the right side contains the help information. The data side contains the following QTC's fields: * QTC callsign - 14 characters, allowed: alphanums, digits, / * QTC serial - 4 characters, allowed: digits, * number of QSO in current QTC block - 2 characters, allowed: digits * 10 QSO lines in RECV mode: * time - 4 characters, allowed: digits, ? * callsign - 14 characters, allowed: alphanums, digits, /, ? * serial - 4 characters, allowed: digits, ? * 10 QSO lines in SEND mode: * every line generated by the QSO's, all of them are formatted for three fields: time, callsign and serial Note, that if you set up the QTC_RECV_LAZY option in RECV mode (EU station in CW/SSB contest), then Tlf will skip to check the restrictions above. This side contains many "meta" information: * at right of the QTC callsign field, Tlf shows the QTC info of current station: how many QTC has it; if the callsign field in main window is empty, the last callsign will be picked up. When the station has not send or received any QTC yet, there will be: "Received 0 QTC", or "Sent 0 QTC". If you had exchanged any QTC with the station, the message will read "Received 3 QTC" or "Sent 5 QTC". * if you type the number of QSO in the QTC block in RECV mode, Tlf will show its number at the beginning of every line; if the station indicates that it will send to you 6 QSO, and you type it in that field, Tlf will put a digit to the begin of first 6 lines * if you type the number of QSO in the QTC block in SEND mode, Tlf will find the next number QSO, which doesn't contain the current callsign (see contest rules 7.2). Note, that if you don't have eonugh QSO, you can't send the maximum (10), eg. you have only 9 QSO. If you type greater number than available QTC number, the field value will be aligned to maximum number! * in RECV mode, every QSO line has a status, which could be: "invalid", "valid", "confirmed". This status is indicated by a sign at the end of the line. When a line is invalid, you can see a "?", if the line is valid, then there isn't any character, and finally, if the QSO line had been confirmed, you can see a "*" sign * in SEND mode, if you've sent a QTC line (with ENTER), at the end of the line you will see a "*" character, which means, you've sent that QTC Navigation between the fields ============================= You can move to any field as you want and when you want. There isn't a mandatory order, but the navigation keys doesn't works in all cases. Normally, with TAB you can move to the next field, and Shift+TAB goes back. There is an exception: TAB will notleave the current QSO line, untill you confirm the line. Instead it takes you to the time field, if you are in the exchange field, and Shift+TAB does it in reverse order. With UP and DOWN cursor keys you can go to up or down. In RECV mode with SPACE, you can navigate between the fields in one line, for faster move, so that mean the SPACE and TAB are equals in this mode, in QTC line. Navigation in a field ===================== If you press an allowed character in a field, that will be displayed, and the cursor will go right to the next place. If you press a not allowed character, then nothing happens. The BACKSPACE key deletes the next charaters to left, and move the right part to left. DELETE key deletes the current character as you're staying, and shifts the characters to left at the next to right. As I described above, the SPACE move the cursor to the next field (or first, if you are in last field) inside of QTC line, in RECV mode. Storing QTC's ============= Tlf stores QTC's in two files. The received QTC's are stored in QTC_recv.log, sent QTC's are stored in QTC_sent.log. These logfiles will created automatically, when Tlf starts. Receiving QTC ============= If the station asks you, if are you QRV for QTC, you can press CTRL+Q, it doesn't matter in which field are you: callsign or exchange. As another way, you an open the QTC window (CTRL+Q), and press F1 to ask for QTC - it is configured in rule file to send "QTC?". If the callsign fields isn't empty, the content of that field will be copied. Otherwise the callsign of the last QSO will be copied. If the station sent you some QTC previously, you can see the number of QTC QSO's, eg. "Received 3 QTC". You can receive at maximum 10 QTC from every station. If you have 3 QTC from a station, then you can receive 7 QTC more. If you type more than 7, Tlf will replace the number to 7. Afterwards you can fill the QTC serial, and number of QSO's. What you type in as number of QSO's will be used by Tlf to number that many lines, to show you, how many lines remains. If you filled the callsign, serial and number fields (all three fields are required), and then press ENTER, Tlf will send the F2 message, which is "QRV" normally, so you don't need to send it manually. If you start to receive the QTC's, you need to fill 3 fields: time (HHMM, as hour and minutes), callsign and serial. If you only enters part of a line, that line will be marked as "incomplete", which you can see by the "?" at the end of the line. If you fill the time field (4 digits), the cursor will go to the callsign field. Fill that field, and press TAB to move the next one. If you put there at least 1 digit, Tlf recognize that line s complete and the "?" will disappear at the end of the line. If you press SPACE in any field, the cursor will go to the next field (or first, if the current is the exchange number). Important: in any fields you can type "?", eg: "111?" in time field, or "W?" in callsign field. That mean, you couldn't receive that letter. Then you fill all fields vainly, the line remain as incomplete. Otherwise Tlf assumes the line is complete. This is important, because when you press the ENTER, Tlf will send the answer to the station based the status of the line. If the line is incomplete, Tlf sends "AGN" message, but if it's complete, it sends "R". If you could receive the line, and pressed ENTER, and Tlf sent the "R" signal, then you will see a "*" at the end of the line. That means, you received the QTC line from the station. If you want to ask only one field (eg. only callsign), then you need just press F5 (TIME?), F6 (CALL?), or F7 (NR?). If you want to ask the complete QTC line, you can press F8 (AGN). When you received a QTC, the cursor goes to the start of the next line, and you can continue to receive QTC. If you received the last line, and all lines are complete, after teh last ENTER Tlf will close the QTC window, and send "QSL ALL" message to the station. At this time the QTC data will be written to the logfile on disk, fields will be flushed, and if there is configured any other node in logcfg.dat, the QTC lines will be sent to them. On other nodes, Tlf will also write the QTC's to its own logfiles. If you press ESC before you receive the QTC block, the data isn't lost. Tlf flush's the fields only in these cases: * you received all QSO's, and saved to disc * pressed ESC, and changed regular callsign field Note, that Tlf send the "QRV" message only in case the fields are empty. Keep in mind, if you've pressed ESC, and CTRL+Q again, all data remains, and "QRV" message will NOT be send. Sending QTC ============= If the other station asks you for QTC's, you can press CTRL+Q, it doesn't matter in which field are you: callsign or exchange. When the QTC window openes, you can press F2 and Tlf will send the message: "QTC sr/nr" with "sr" and "nr" replaced with the i serial and number of lines in QTC, example: "QTC 3/8". If the callsign fields isn't empty, the content of that field will be copied. Otherwise, the callsign of the last QSO will be used. If the station received QTC's previously, you can see the number of QTC's on the current band, eg. "Sent 3 QTC". You can send maximum 10 QTC to every station. If you sent 3 QTC to a station, you can send maximum 7 QTC in next block. If you type more, than 7, Tlf will replace the number to 7, and of course, only 7 QSO will be shown. If you don't have enough QSO, Tlf also will replace this value to the number of the available QSO. The QTC serial field will be filled automatically, you just need to set up, how many QTC's you want to send. Note, that Tlf looks for the current callsign, and that will be excluded from the QTC list! If you modify the callsign field, Tlf will hide some lines, which matches the actually callsign, but don't afraid: if you finish the modification of field, you can see the available list. If you don't want to send the maximum available QTC lines, just edit the number field, and Tlf will gives only that many QTC lines. Now, you can move to the 1st QTC line with DOWN cursor. If you press ENTER, Tlf will send the current QTC, and will put a "*" char to the end of the line. It shows you, that QTC line had been sent. Now just press DOWN and ENTER, if the station gives "R" sign. If it asks to send the last QTC again, just simple press UP and ENTER again. With the DEL key you can delete the "SENT" flag from the end of the line. If you sent all lines, and ithe station confirms them, you can press the CTRL+S (like in most software), and Tlf will save the block. After 2 seconds the window will be closed, and you can go away. At this time the QTC data will be written to the logfile on the disk, callsign and number fields will be flushed, and if there is any other node configured in logcfg.dat, the QTC lines will be sent to them. On the other nodes, Tlf will also write the QTC's to its own logfiles. If you press ESC before you receive the QTC block, the data isn't lost. Tlf flushre's the fields only in the following case: * you sent all QTC's, and saved them to disc Showing QTC capable stations ============================ After you sent or received a QTC block from or to a station, Tlf writes it to the log, but stores it in memory too. If you meet that station on another bands, and use "Worked window", then you can see, how many QTC's had been exchanged with the station on each band. There is a "Q" letter on the upper border of "Worked window", and in that column there are the number of QTC's. If there is a "0" in a line, that means you sent to or received no QTC from that station. If there is a "Q", that means you sent to or received from the station the maximum number of QTC (10). This information also is visible in the cluster info, if you use that. At the end of the callsign in bandmap, you can see a "0", "Q" or any digit, which means same as above, eg "DL1A Q", or "HA5A 3". Preparing CABRILLO ================== When you finished the contest, just use the ":wri" command to save your log in Cabrillo format. (It's a good idea to exit from Tlf, and start it again - this is only need to recalc correct points, nothing else.) Now leave Tlf, and run the "qtcmerge.py" script, which is part of Tlf, and has been installed to your INSTALLDIR/share/tlf, eg. /usr/local/share/tlf. The normal way to run this script from the Tlf contest directory is: /usr/local/share/tlf/qtcmerge.py YOURCALL.cbr The script reads your saved Cabrillo file and your QTC's and saves them to a new file, in Cabrillo format. The new file name will be YOURCALL_QTC.cbr. Make a backup of the original file, rename the new one to YOURCALL.cbr and send it to the contest organizers. Note: You can find more info about the QTC cabrillo format here: http://dl0tud.tu-dresden.de/~dj1yfk/qtcs/ http://www.kkn.net/~trey/cabrillo/qso-template.html Shortkey summary ================ * CTRL+Q - open QTC window * ESC - close QTC window * TAB - move to the next field * SPACE - move to the next field in QTC line, in RECV mode * Shift+TAB - move to the previous field * UP, DOWN - move up or down * BACKSPACE - delete the next char left * DELETE - delete the current position, shift left the rest of line * ENTER - send "R" or "AGN" to station If you have any question, just send an e-mail to me or the Tlf develop list. 73, Ervin HA2OS tlf-1.4.0/config.sub0000755000175000017500000011011213562576653011223 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-01-01' # 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 3 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, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # 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. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # 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. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; 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 nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) 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 | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -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/'` ;; -sco5v6*) # 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*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -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. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx | dvp \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # 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*86 | x86_64) 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. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # 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 ;; abacus) basic_machine=abacus-unknown ;; 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 ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; 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 | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` os=$os"spe" ;; 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 ;; go32) basic_machine=i386-pc os=-go32 ;; 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*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*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 ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsEE* | ee | ps2) basic_machine=mips64r5900el-scei case $os in -linux*) ;; *) os=-elf ;; esac ;; iop) basic_machine=mipsel-scei os=-irx ;; dvp) basic_machine=dvp-scei os=-elf ;; 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 ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; 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 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; 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 ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-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 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; 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 ;; wasm32) basic_machine=wasm32-unknown ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-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 ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) 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 ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) 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. -auroraux) os=-auroraux ;; -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|'` ;; # Now 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* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -irx* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -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 ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -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[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -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 score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-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 ;; f30[01]-fujitsu | f700-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 ;; -cnk*|-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 ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tlf-1.4.0/README.md0000644000175000017500000000254413562576621010523 00000000000000# Tlf ham radio contest logger [![Build Status](https://travis-ci.org/Tlf/tlf.svg?branch=master)](https://travis-ci.org/Tlf/tlf) ## Summary Tlf is a console (ncurses) mode general purpose CW/VOICE keyer, logging and contest program for hamradio. It supports the CQWW, the WPX, the ARRL-DX , the ARRL-FD, the PACC and the EU SPRINT contests (single operator) as well as a LOT MORE basic contests, general QSO and DXpedition mode. It interfaces with a morse code generator, your sound card, a number of radios, and with a DX Cluster. Tlf can project cluster data into the excellent Xplanet program, written by Hari Nair. Contest operation mimics the popular TR-Log program for DOS, the output file is TR- as well as CABRILLO compatible. The user interface was designed with over 30 years of experience in CW contesting. The program was written for console mode on purpose, to make it run also on smaller machines, or remotely via a modem link. See `man tlf` for detailed documentation. See also doc/README for details, and the INSTALL file for an quick installation guide. ## Contributing * See homepage at https://Tlf.github.io for more information * There is a mailing list at tlf-devel@nongnu.org (see http://lists.nongnu.org/mailman/listinfo/tlf-devel) * If you want to contribute clone the repo, make changes and send us a patch or pull request. tlf-1.4.0/Makefile.am0000644000175000017500000000030013562576621011264 00000000000000ACLOCAL_AMFLAGS = -I macros SUBDIRS = doc rules src share scripts test CLEANFILES = *~ man_MANS = tlf.1 README: README.md grep -v "Build Status" $< > $(srcdir)/$@ EXTRA_DIST = README.md tlf-1.4.0/missing0000755000175000017500000001533613562576653010653 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois 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, see . # 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. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: tlf-1.4.0/test/0000755000175000017500000000000013562576670010302 500000000000000tlf-1.4.0/test/run_bands.c0000644000175000017500000000235113562576653012343 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include void test_IsWarcIndex(void **state); void test_conv_f2b(void ** state); void test_conv_f2b_borders(void ** state); void test_conv_f2b_out_of_band(void ** state); void test_nextBandDown(void **state); void test_nextBandUp(void **state); void test_nextBandWrapDownwards(void **state); void test_nextBandWrapUpwards(void **state); void test_toBandMask(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_toBandMask, NULL, NULL), cmocka_unit_test_setup_teardown(test_IsWarcIndex, NULL, NULL), cmocka_unit_test_setup_teardown(test_nextBandUp, NULL, NULL), cmocka_unit_test_setup_teardown(test_nextBandDown, NULL, NULL), cmocka_unit_test_setup_teardown(test_nextBandWrapUpwards, NULL, NULL), cmocka_unit_test_setup_teardown(test_nextBandWrapDownwards, NULL, NULL), cmocka_unit_test_setup_teardown(test_conv_f2b_out_of_band, NULL, NULL), cmocka_unit_test_setup_teardown(test_conv_f2b_borders, NULL, NULL), cmocka_unit_test_setup_teardown(test_conv_f2b, NULL, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/test.h0000644000175000017500000000130313562576621011343 00000000000000#ifndef _TEST_H #define _TEST_H // // common includes for the test groups // #include #include #include #include #include #include #include extern const char STRING_NOT_SET[]; extern const char *showmsg_spy, *showstring_spy1, *showstring_spy2; typedef int (*int_func_t)(void); // plugin functions for the mocks extern int_func_t key_poll_func; extern int_func_t getch_func; // the real functions extern int __real_key_poll(); // number of mvprintw lines to store #define NLAST 30 // length of a mvprintw line #define LINESZ 100 extern char mvprintw_history[NLAST][LINESZ]; extern void clear_mvprintw_history(); #endif tlf-1.4.0/test/run_recallexchange.c0000644000175000017500000000155013562576653014221 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); void test_empty_call(void **state); void test_from_ielist(void **state); void test_from_worked(void **state); void test_not_found(void **state); void test_respect_nonempty_comment(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_empty_call, setup_default, NULL), cmocka_unit_test_setup_teardown(test_respect_nonempty_comment, setup_default, NULL), cmocka_unit_test_setup_teardown(test_not_found, setup_default, NULL), cmocka_unit_test_setup_teardown(test_from_worked, setup_default, NULL), cmocka_unit_test_setup_teardown(test_from_ielist, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/run_addmult.c0000644000175000017500000001022413562576653012704 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); void test_arrlss(void **state); void test_arrlss_2(void **state); void test_dx_arrlsections(void **state); void test_init_mults(void **state); void test_load_multi(void **state); void test_load_multi_dos(void **state); void test_load_multi_file_not_found(void **state); void test_load_multi_leading_space(void **state); void test_load_multi_no_file(void **state); void test_load_multi_redefined(void **state); void test_load_multi_sorted(void **state); void test_load_multi_with_alias(void **state); void test_load_multi_with_emptyalias(void **state); void test_match_length_match_alias(void **state); void test_match_length_match_alias2(void **state); void test_match_length_match_mult(void **state); void test_match_length_no_match(void **state); void test_remember_mult_empty(void **state); void test_remember_mult_one(void **state); void test_remember_mult_same_2x(void **state); void test_remember_mult_same_2x_newband(void **state); void test_remember_mult_two(void **state); void test_serial_grid4(void **state); void test_serial_grid4_empty(void **state); void test_serial_section_mult(void **state); void test_write_mult(void **state); void test_wysiwyg_multi(void **state); void test_wysiwyg_multi_2(void **state); void test_wysiwyg_multi_empty(void **state); void test_wysiwyg_once(void **state); void test_wysiwyg_once_2(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_init_mults, setup_default, NULL), cmocka_unit_test_setup_teardown(test_remember_mult_empty, setup_default, NULL), cmocka_unit_test_setup_teardown(test_remember_mult_one, setup_default, NULL), cmocka_unit_test_setup_teardown(test_remember_mult_two, setup_default, NULL), cmocka_unit_test_setup_teardown(test_remember_mult_same_2x, setup_default, NULL), cmocka_unit_test_setup_teardown(test_remember_mult_same_2x_newband, setup_default, NULL), cmocka_unit_test_setup_teardown(test_write_mult, setup_default, NULL), cmocka_unit_test_setup_teardown(test_load_multi_no_file, setup_default, NULL), cmocka_unit_test_setup_teardown(test_load_multi_file_not_found, setup_default, NULL), cmocka_unit_test_setup_teardown(test_load_multi, setup_default, NULL), cmocka_unit_test_setup_teardown(test_load_multi_dos, setup_default, NULL), cmocka_unit_test_setup_teardown(test_load_multi_leading_space, setup_default, NULL), cmocka_unit_test_setup_teardown(test_load_multi_sorted, setup_default, NULL), cmocka_unit_test_setup_teardown(test_load_multi_redefined, setup_default, NULL), cmocka_unit_test_setup_teardown(test_load_multi_with_emptyalias, setup_default, NULL), cmocka_unit_test_setup_teardown(test_load_multi_with_alias, setup_default, NULL), cmocka_unit_test_setup_teardown(test_match_length_no_match, setup_default, NULL), cmocka_unit_test_setup_teardown(test_match_length_match_mult, setup_default, NULL), cmocka_unit_test_setup_teardown(test_match_length_match_alias, setup_default, NULL), cmocka_unit_test_setup_teardown(test_match_length_match_alias2, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wysiwyg_once, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wysiwyg_multi, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wysiwyg_multi_empty, setup_default, NULL), cmocka_unit_test_setup_teardown(test_serial_grid4, setup_default, NULL), cmocka_unit_test_setup_teardown(test_serial_grid4_empty, setup_default, NULL), cmocka_unit_test_setup_teardown(test_arrlss, setup_default, NULL), cmocka_unit_test_setup_teardown(test_serial_section_mult, setup_default, NULL), cmocka_unit_test_setup_teardown(test_dx_arrlsections, setup_default, NULL), cmocka_unit_test_setup_teardown(test_arrlss_2, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wysiwyg_once_2, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wysiwyg_multi_2, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/Makefile.in0000644000175000017500000015710613562576653012302 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. @SET_MAKE@ # generated on Tue Nov 12 19:44:59 2019 VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ TESTS = run_addcall$(EXEEXT) run_addmult$(EXEEXT) run_addpfx$(EXEEXT) \ run_bands$(EXEEXT) run_cabrillo$(EXEEXT) \ run_checklogfile$(EXEEXT) run_clusterinfo$(EXEEXT) \ run_cw_utils$(EXEEXT) run_dxcc$(EXEEXT) \ run_getctydata$(EXEEXT) run_initial_exchange$(EXEEXT) \ run_locator2longlat$(EXEEXT) run_prefix$(EXEEXT) \ run_recallexchange$(EXEEXT) run_score$(EXEEXT) \ run_searchlog$(EXEEXT) run_sendbuf$(EXEEXT) \ run_zone_nr$(EXEEXT) check_PROGRAMS = run_addcall$(EXEEXT) run_addmult$(EXEEXT) \ run_addpfx$(EXEEXT) run_bands$(EXEEXT) run_cabrillo$(EXEEXT) \ run_checklogfile$(EXEEXT) run_clusterinfo$(EXEEXT) \ run_cw_utils$(EXEEXT) run_dxcc$(EXEEXT) \ run_getctydata$(EXEEXT) run_initial_exchange$(EXEEXT) \ run_locator2longlat$(EXEEXT) run_prefix$(EXEEXT) \ run_recallexchange$(EXEEXT) run_score$(EXEEXT) \ run_searchlog$(EXEEXT) run_sendbuf$(EXEEXT) \ run_zone_nr$(EXEEXT) subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ax_append_flag.m4 \ $(top_srcdir)/macros/ax_cflags_warn_all.m4 \ $(top_srcdir)/macros/ax_pthread.m4 \ $(top_srcdir)/macros/ax_require_defined.m4 \ $(top_srcdir)/macros/ax_with_curses.m4 \ $(top_srcdir)/macros/ax_with_curses_extra.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_run_addcall_OBJECTS = run_addcall.$(OBJEXT) test_addcall.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_addcall_OBJECTS = $(am_run_addcall_OBJECTS) run_addcall_DEPENDENCIES = ../src/addcall.o ../src/addmult.o \ ../src/bands.o ../src/searchcallarray.o ../src/getctydata.o \ ../src/getpx.o ../src/dxcc.o ../src/get_time.o \ ../src/zone_nr.o am_run_addmult_OBJECTS = run_addmult.$(OBJEXT) test_addmult.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_addmult_OBJECTS = $(am_run_addmult_OBJECTS) run_addmult_DEPENDENCIES = ../src/addmult.o ../src/bands.o am_run_addpfx_OBJECTS = run_addpfx.$(OBJEXT) test_addpfx.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_addpfx_OBJECTS = $(am_run_addpfx_OBJECTS) run_addpfx_DEPENDENCIES = ../src/addpfx.o ../src/bands.o am_run_bands_OBJECTS = run_bands.$(OBJEXT) test_bands.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_bands_OBJECTS = $(am_run_bands_OBJECTS) run_bands_DEPENDENCIES = ../src/bands.o am_run_cabrillo_OBJECTS = run_cabrillo.$(OBJEXT) \ test_cabrillo.$(OBJEXT) data.$(OBJEXT) functions.$(OBJEXT) run_cabrillo_OBJECTS = $(am_run_cabrillo_OBJECTS) run_cabrillo_DEPENDENCIES = ../src/cabrillo_utils.o \ ../src/readcabrillo.o ../src/bands.o am_run_checklogfile_OBJECTS = run_checklogfile.$(OBJEXT) \ test_checklogfile.$(OBJEXT) data.$(OBJEXT) functions.$(OBJEXT) run_checklogfile_OBJECTS = $(am_run_checklogfile_OBJECTS) run_checklogfile_DEPENDENCIES = ../src/checklogfile.o \ ../src/err_utils.o am_run_clusterinfo_OBJECTS = run_clusterinfo.$(OBJEXT) \ test_clusterinfo.$(OBJEXT) data.$(OBJEXT) functions.$(OBJEXT) run_clusterinfo_OBJECTS = $(am_run_clusterinfo_OBJECTS) run_clusterinfo_DEPENDENCIES = ../src/clusterinfo.o ../src/get_time.o \ ../src/err_utils.o am_run_cw_utils_OBJECTS = run_cw_utils.$(OBJEXT) \ test_cw_utils.$(OBJEXT) data.$(OBJEXT) functions.$(OBJEXT) run_cw_utils_OBJECTS = $(am_run_cw_utils_OBJECTS) run_cw_utils_DEPENDENCIES = ../src/cw_utils.o am_run_dxcc_OBJECTS = run_dxcc.$(OBJEXT) test_dxcc.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_dxcc_OBJECTS = $(am_run_dxcc_OBJECTS) run_dxcc_DEPENDENCIES = ../src/dxcc.o am_run_getctydata_OBJECTS = run_getctydata.$(OBJEXT) \ test_getctydata.$(OBJEXT) data.$(OBJEXT) functions.$(OBJEXT) run_getctydata_OBJECTS = $(am_run_getctydata_OBJECTS) run_getctydata_DEPENDENCIES = ../src/dxcc.o ../src/getctydata.o \ ../src/getpx.o am_run_initial_exchange_OBJECTS = run_initial_exchange.$(OBJEXT) \ test_initial_exchange.$(OBJEXT) data.$(OBJEXT) \ functions.$(OBJEXT) run_initial_exchange_OBJECTS = $(am_run_initial_exchange_OBJECTS) run_initial_exchange_DEPENDENCIES = ../src/initial_exchange.o am_run_locator2longlat_OBJECTS = run_locator2longlat.$(OBJEXT) \ test_locator2longlat.$(OBJEXT) data.$(OBJEXT) \ functions.$(OBJEXT) run_locator2longlat_OBJECTS = $(am_run_locator2longlat_OBJECTS) run_locator2longlat_DEPENDENCIES = ../src/locator2longlat.o am_run_prefix_OBJECTS = run_prefix.$(OBJEXT) test_prefix.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_prefix_OBJECTS = $(am_run_prefix_OBJECTS) run_prefix_DEPENDENCIES = ../src/getpx.o am_run_recallexchange_OBJECTS = run_recallexchange.$(OBJEXT) \ test_recallexchange.$(OBJEXT) data.$(OBJEXT) \ functions.$(OBJEXT) run_recallexchange_OBJECTS = $(am_run_recallexchange_OBJECTS) run_recallexchange_DEPENDENCIES = ../src/recall_exchange.o \ ../src/initial_exchange.o am_run_score_OBJECTS = run_score.$(OBJEXT) test_score.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_score_OBJECTS = $(am_run_score_OBJECTS) run_score_DEPENDENCIES = ../src/score.o ../src/addmult.o \ ../src/bands.o ../src/dxcc.o ../src/focm.o ../src/getctydata.o \ ../src/qrb.o ../src/locator2longlat.o ../src/getpx.o am_run_searchlog_OBJECTS = run_searchlog.$(OBJEXT) \ test_searchlog.$(OBJEXT) data.$(OBJEXT) functions.$(OBJEXT) run_searchlog_OBJECTS = $(am_run_searchlog_OBJECTS) run_searchlog_DEPENDENCIES = ../src/addmult.o ../src/bands.o \ ../src/searchlog.o ../src/zone_nr.o ../src/searchcallarray.o \ ../src/nicebox.o ../src/qtcutil.o ../src/printcall.o \ ../src/err_utils.o am_run_sendbuf_OBJECTS = run_sendbuf.$(OBJEXT) test_sendbuf.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_sendbuf_OBJECTS = $(am_run_sendbuf_OBJECTS) run_sendbuf_DEPENDENCIES = ../src/sendbuf.o ../src/sendspcall.o am_run_zone_nr_OBJECTS = run_zone_nr.$(OBJEXT) test_zone_nr.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_zone_nr_OBJECTS = $(am_run_zone_nr_OBJECTS) run_zone_nr_DEPENDENCIES = ../src/zone_nr.o AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/data.Po ./$(DEPDIR)/functions.Po \ ./$(DEPDIR)/run_addcall.Po ./$(DEPDIR)/run_addmult.Po \ ./$(DEPDIR)/run_addpfx.Po ./$(DEPDIR)/run_bands.Po \ ./$(DEPDIR)/run_cabrillo.Po ./$(DEPDIR)/run_checklogfile.Po \ ./$(DEPDIR)/run_clusterinfo.Po ./$(DEPDIR)/run_cw_utils.Po \ ./$(DEPDIR)/run_dxcc.Po ./$(DEPDIR)/run_getctydata.Po \ ./$(DEPDIR)/run_initial_exchange.Po \ ./$(DEPDIR)/run_locator2longlat.Po ./$(DEPDIR)/run_prefix.Po \ ./$(DEPDIR)/run_recallexchange.Po ./$(DEPDIR)/run_score.Po \ ./$(DEPDIR)/run_searchlog.Po ./$(DEPDIR)/run_sendbuf.Po \ ./$(DEPDIR)/run_zone_nr.Po ./$(DEPDIR)/test_addcall.Po \ ./$(DEPDIR)/test_addmult.Po ./$(DEPDIR)/test_addpfx.Po \ ./$(DEPDIR)/test_bands.Po ./$(DEPDIR)/test_cabrillo.Po \ ./$(DEPDIR)/test_checklogfile.Po \ ./$(DEPDIR)/test_clusterinfo.Po ./$(DEPDIR)/test_cw_utils.Po \ ./$(DEPDIR)/test_dxcc.Po ./$(DEPDIR)/test_getctydata.Po \ ./$(DEPDIR)/test_initial_exchange.Po \ ./$(DEPDIR)/test_locator2longlat.Po ./$(DEPDIR)/test_prefix.Po \ ./$(DEPDIR)/test_recallexchange.Po ./$(DEPDIR)/test_score.Po \ ./$(DEPDIR)/test_searchlog.Po ./$(DEPDIR)/test_sendbuf.Po \ ./$(DEPDIR)/test_zone_nr.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(run_addcall_SOURCES) $(run_addmult_SOURCES) \ $(run_addpfx_SOURCES) $(run_bands_SOURCES) \ $(run_cabrillo_SOURCES) $(run_checklogfile_SOURCES) \ $(run_clusterinfo_SOURCES) $(run_cw_utils_SOURCES) \ $(run_dxcc_SOURCES) $(run_getctydata_SOURCES) \ $(run_initial_exchange_SOURCES) $(run_locator2longlat_SOURCES) \ $(run_prefix_SOURCES) $(run_recallexchange_SOURCES) \ $(run_score_SOURCES) $(run_searchlog_SOURCES) \ $(run_sendbuf_SOURCES) $(run_zone_nr_SOURCES) DIST_SOURCES = $(run_addcall_SOURCES) $(run_addmult_SOURCES) \ $(run_addpfx_SOURCES) $(run_bands_SOURCES) \ $(run_cabrillo_SOURCES) $(run_checklogfile_SOURCES) \ $(run_clusterinfo_SOURCES) $(run_cw_utils_SOURCES) \ $(run_dxcc_SOURCES) $(run_getctydata_SOURCES) \ $(run_initial_exchange_SOURCES) $(run_locator2longlat_SOURCES) \ $(run_prefix_SOURCES) $(run_recallexchange_SOURCES) \ $(run_score_SOURCES) $(run_searchlog_SOURCES) \ $(run_sendbuf_SOURCES) $(run_zone_nr_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/defs.am \ $(top_srcdir)/depcomp $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CMOCKA_CFLAGS = @CMOCKA_CFLAGS@ CMOCKA_LIBS = @CMOCKA_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ HAMLIB_CFLAGS = @HAMLIB_CFLAGS@ HAMLIB_LIBS = @HAMLIB_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBM_LIB = @LIBM_LIB@ LIBOBJS = @LIBOBJS@ LIBS = @LIBM_LIB@ @GLIB_LIBS@ @PANEL_LIBS@ @CURSES_LIBS@ @CMOCKA_LIBS@ \ -Wl,-wrap=sleep \ -Wl,-wrap=key_get \ -Wl,-wrap=key_poll \ -Wl,-wrap=wgetch \ -Wl,-wrap=refreshp LIBXMLRPC_CLIENT_LIB = @LIBXMLRPC_CLIENT_LIB@ LIBXMLRPC_LIB = @LIBXMLRPC_LIB@ LIBXMLRPC_UTIL_LIB = @LIBXMLRPC_UTIL_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_LIBS = @PANEL_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ run_addcall_SOURCES = run_addcall.c test_addcall.c data.c functions.c run_addcall_LDADD = ../src/addcall.o ../src/addmult.o ../src/bands.o ../src/searchcallarray.o ../src/getctydata.o ../src/getpx.o ../src/dxcc.o ../src/get_time.o ../src/zone_nr.o run_addmult_SOURCES = run_addmult.c test_addmult.c data.c functions.c run_addmult_LDADD = ../src/addmult.o ../src/bands.o run_addpfx_SOURCES = run_addpfx.c test_addpfx.c data.c functions.c run_addpfx_LDADD = ../src/addpfx.o ../src/bands.o run_bands_SOURCES = run_bands.c test_bands.c data.c functions.c run_bands_LDADD = ../src/bands.o run_cabrillo_SOURCES = run_cabrillo.c test_cabrillo.c data.c functions.c run_cabrillo_LDADD = ../src/cabrillo_utils.o ../src/readcabrillo.o ../src/bands.o run_checklogfile_SOURCES = run_checklogfile.c test_checklogfile.c data.c functions.c run_checklogfile_LDADD = ../src/checklogfile.o ../src/err_utils.o run_clusterinfo_SOURCES = run_clusterinfo.c test_clusterinfo.c data.c functions.c run_clusterinfo_LDADD = ../src/clusterinfo.o ../src/get_time.o ../src/err_utils.o run_cw_utils_SOURCES = run_cw_utils.c test_cw_utils.c data.c functions.c run_cw_utils_LDADD = ../src/cw_utils.o run_dxcc_SOURCES = run_dxcc.c test_dxcc.c data.c functions.c run_dxcc_LDADD = ../src/dxcc.o run_getctydata_SOURCES = run_getctydata.c test_getctydata.c data.c functions.c run_getctydata_LDADD = ../src/dxcc.o ../src/getctydata.o ../src/getpx.o run_initial_exchange_SOURCES = run_initial_exchange.c test_initial_exchange.c data.c functions.c run_initial_exchange_LDADD = ../src/initial_exchange.o run_locator2longlat_SOURCES = run_locator2longlat.c test_locator2longlat.c data.c functions.c run_locator2longlat_LDADD = ../src/locator2longlat.o run_prefix_SOURCES = run_prefix.c test_prefix.c data.c functions.c run_prefix_LDADD = ../src/getpx.o run_recallexchange_SOURCES = run_recallexchange.c test_recallexchange.c data.c functions.c run_recallexchange_LDADD = ../src/recall_exchange.o ../src/initial_exchange.o run_score_SOURCES = run_score.c test_score.c data.c functions.c run_score_LDADD = ../src/score.o ../src/addmult.o ../src/bands.o ../src/dxcc.o ../src/focm.o ../src/getctydata.o ../src/qrb.o ../src/locator2longlat.o ../src/getpx.o run_searchlog_SOURCES = run_searchlog.c test_searchlog.c data.c functions.c run_searchlog_LDADD = ../src/addmult.o ../src/bands.o ../src/searchlog.o ../src/zone_nr.o ../src/searchcallarray.o ../src/nicebox.o ../src/qtcutil.o ../src/printcall.o ../src/err_utils.o run_sendbuf_SOURCES = run_sendbuf.c test_sendbuf.c data.c functions.c run_sendbuf_LDADD = ../src/sendbuf.o ../src/sendspcall.o run_zone_nr_SOURCES = run_zone_nr.c test_zone_nr.c data.c functions.c run_zone_nr_LDADD = ../src/zone_nr.o AM_CPPFLAGS = @GLIB_CFLAGS@ -DTOP_SRCDIR=\"$(top_srcdir)\" \ -DSRCDIR=\"$(abs_srcdir)\" noinst_HEADERS = \ test.h DATA_FILES = data/ie_empty_call.txt data/ie_long_line.txt \ data/ie_no_comma.txt data/ie_ok.txt \ data/ie_ok_dos.txt data/ie_ok_multi_column.txt \ data/ie_ok_tab.txt EXTRA_DIST = $(DATA_FILES) all: all-am .SUFFIXES: .SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/defs.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(srcdir)/defs.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) run_addcall$(EXEEXT): $(run_addcall_OBJECTS) $(run_addcall_DEPENDENCIES) $(EXTRA_run_addcall_DEPENDENCIES) @rm -f run_addcall$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_addcall_OBJECTS) $(run_addcall_LDADD) $(LIBS) run_addmult$(EXEEXT): $(run_addmult_OBJECTS) $(run_addmult_DEPENDENCIES) $(EXTRA_run_addmult_DEPENDENCIES) @rm -f run_addmult$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_addmult_OBJECTS) $(run_addmult_LDADD) $(LIBS) run_addpfx$(EXEEXT): $(run_addpfx_OBJECTS) $(run_addpfx_DEPENDENCIES) $(EXTRA_run_addpfx_DEPENDENCIES) @rm -f run_addpfx$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_addpfx_OBJECTS) $(run_addpfx_LDADD) $(LIBS) run_bands$(EXEEXT): $(run_bands_OBJECTS) $(run_bands_DEPENDENCIES) $(EXTRA_run_bands_DEPENDENCIES) @rm -f run_bands$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_bands_OBJECTS) $(run_bands_LDADD) $(LIBS) run_cabrillo$(EXEEXT): $(run_cabrillo_OBJECTS) $(run_cabrillo_DEPENDENCIES) $(EXTRA_run_cabrillo_DEPENDENCIES) @rm -f run_cabrillo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_cabrillo_OBJECTS) $(run_cabrillo_LDADD) $(LIBS) run_checklogfile$(EXEEXT): $(run_checklogfile_OBJECTS) $(run_checklogfile_DEPENDENCIES) $(EXTRA_run_checklogfile_DEPENDENCIES) @rm -f run_checklogfile$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_checklogfile_OBJECTS) $(run_checklogfile_LDADD) $(LIBS) run_clusterinfo$(EXEEXT): $(run_clusterinfo_OBJECTS) $(run_clusterinfo_DEPENDENCIES) $(EXTRA_run_clusterinfo_DEPENDENCIES) @rm -f run_clusterinfo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_clusterinfo_OBJECTS) $(run_clusterinfo_LDADD) $(LIBS) run_cw_utils$(EXEEXT): $(run_cw_utils_OBJECTS) $(run_cw_utils_DEPENDENCIES) $(EXTRA_run_cw_utils_DEPENDENCIES) @rm -f run_cw_utils$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_cw_utils_OBJECTS) $(run_cw_utils_LDADD) $(LIBS) run_dxcc$(EXEEXT): $(run_dxcc_OBJECTS) $(run_dxcc_DEPENDENCIES) $(EXTRA_run_dxcc_DEPENDENCIES) @rm -f run_dxcc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_dxcc_OBJECTS) $(run_dxcc_LDADD) $(LIBS) run_getctydata$(EXEEXT): $(run_getctydata_OBJECTS) $(run_getctydata_DEPENDENCIES) $(EXTRA_run_getctydata_DEPENDENCIES) @rm -f run_getctydata$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_getctydata_OBJECTS) $(run_getctydata_LDADD) $(LIBS) run_initial_exchange$(EXEEXT): $(run_initial_exchange_OBJECTS) $(run_initial_exchange_DEPENDENCIES) $(EXTRA_run_initial_exchange_DEPENDENCIES) @rm -f run_initial_exchange$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_initial_exchange_OBJECTS) $(run_initial_exchange_LDADD) $(LIBS) run_locator2longlat$(EXEEXT): $(run_locator2longlat_OBJECTS) $(run_locator2longlat_DEPENDENCIES) $(EXTRA_run_locator2longlat_DEPENDENCIES) @rm -f run_locator2longlat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_locator2longlat_OBJECTS) $(run_locator2longlat_LDADD) $(LIBS) run_prefix$(EXEEXT): $(run_prefix_OBJECTS) $(run_prefix_DEPENDENCIES) $(EXTRA_run_prefix_DEPENDENCIES) @rm -f run_prefix$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_prefix_OBJECTS) $(run_prefix_LDADD) $(LIBS) run_recallexchange$(EXEEXT): $(run_recallexchange_OBJECTS) $(run_recallexchange_DEPENDENCIES) $(EXTRA_run_recallexchange_DEPENDENCIES) @rm -f run_recallexchange$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_recallexchange_OBJECTS) $(run_recallexchange_LDADD) $(LIBS) run_score$(EXEEXT): $(run_score_OBJECTS) $(run_score_DEPENDENCIES) $(EXTRA_run_score_DEPENDENCIES) @rm -f run_score$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_score_OBJECTS) $(run_score_LDADD) $(LIBS) run_searchlog$(EXEEXT): $(run_searchlog_OBJECTS) $(run_searchlog_DEPENDENCIES) $(EXTRA_run_searchlog_DEPENDENCIES) @rm -f run_searchlog$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_searchlog_OBJECTS) $(run_searchlog_LDADD) $(LIBS) run_sendbuf$(EXEEXT): $(run_sendbuf_OBJECTS) $(run_sendbuf_DEPENDENCIES) $(EXTRA_run_sendbuf_DEPENDENCIES) @rm -f run_sendbuf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_sendbuf_OBJECTS) $(run_sendbuf_LDADD) $(LIBS) run_zone_nr$(EXEEXT): $(run_zone_nr_OBJECTS) $(run_zone_nr_DEPENDENCIES) $(EXTRA_run_zone_nr_DEPENDENCIES) @rm -f run_zone_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_zone_nr_OBJECTS) $(run_zone_nr_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/data.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/functions.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_addcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_addmult.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_addpfx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_bands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_cabrillo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_checklogfile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_clusterinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_cw_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_dxcc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_getctydata.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_initial_exchange.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_locator2longlat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_prefix.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_recallexchange.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_score.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_searchlog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_sendbuf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_zone_nr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_addcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_addmult.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_addpfx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_bands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cabrillo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_checklogfile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_clusterinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cw_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dxcc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_getctydata.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_initial_exchange.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_locator2longlat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_prefix.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_recallexchange.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_score.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_searchlog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sendbuf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_zone_nr.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? run_addcall.log: run_addcall$(EXEEXT) @p='run_addcall$(EXEEXT)'; \ b='run_addcall'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_addmult.log: run_addmult$(EXEEXT) @p='run_addmult$(EXEEXT)'; \ b='run_addmult'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_addpfx.log: run_addpfx$(EXEEXT) @p='run_addpfx$(EXEEXT)'; \ b='run_addpfx'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_bands.log: run_bands$(EXEEXT) @p='run_bands$(EXEEXT)'; \ b='run_bands'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_cabrillo.log: run_cabrillo$(EXEEXT) @p='run_cabrillo$(EXEEXT)'; \ b='run_cabrillo'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_checklogfile.log: run_checklogfile$(EXEEXT) @p='run_checklogfile$(EXEEXT)'; \ b='run_checklogfile'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_clusterinfo.log: run_clusterinfo$(EXEEXT) @p='run_clusterinfo$(EXEEXT)'; \ b='run_clusterinfo'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_cw_utils.log: run_cw_utils$(EXEEXT) @p='run_cw_utils$(EXEEXT)'; \ b='run_cw_utils'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_dxcc.log: run_dxcc$(EXEEXT) @p='run_dxcc$(EXEEXT)'; \ b='run_dxcc'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_getctydata.log: run_getctydata$(EXEEXT) @p='run_getctydata$(EXEEXT)'; \ b='run_getctydata'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_initial_exchange.log: run_initial_exchange$(EXEEXT) @p='run_initial_exchange$(EXEEXT)'; \ b='run_initial_exchange'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_locator2longlat.log: run_locator2longlat$(EXEEXT) @p='run_locator2longlat$(EXEEXT)'; \ b='run_locator2longlat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_prefix.log: run_prefix$(EXEEXT) @p='run_prefix$(EXEEXT)'; \ b='run_prefix'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_recallexchange.log: run_recallexchange$(EXEEXT) @p='run_recallexchange$(EXEEXT)'; \ b='run_recallexchange'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_score.log: run_score$(EXEEXT) @p='run_score$(EXEEXT)'; \ b='run_score'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_searchlog.log: run_searchlog$(EXEEXT) @p='run_searchlog$(EXEEXT)'; \ b='run_searchlog'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_sendbuf.log: run_sendbuf$(EXEEXT) @p='run_sendbuf$(EXEEXT)'; \ b='run_sendbuf'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_zone_nr.log: run_zone_nr$(EXEEXT) @p='run_zone_nr$(EXEEXT)'; \ b='run_zone_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/data.Po -rm -f ./$(DEPDIR)/functions.Po -rm -f ./$(DEPDIR)/run_addcall.Po -rm -f ./$(DEPDIR)/run_addmult.Po -rm -f ./$(DEPDIR)/run_addpfx.Po -rm -f ./$(DEPDIR)/run_bands.Po -rm -f ./$(DEPDIR)/run_cabrillo.Po -rm -f ./$(DEPDIR)/run_checklogfile.Po -rm -f ./$(DEPDIR)/run_clusterinfo.Po -rm -f ./$(DEPDIR)/run_cw_utils.Po -rm -f ./$(DEPDIR)/run_dxcc.Po -rm -f ./$(DEPDIR)/run_getctydata.Po -rm -f ./$(DEPDIR)/run_initial_exchange.Po -rm -f ./$(DEPDIR)/run_locator2longlat.Po -rm -f ./$(DEPDIR)/run_prefix.Po -rm -f ./$(DEPDIR)/run_recallexchange.Po -rm -f ./$(DEPDIR)/run_score.Po -rm -f ./$(DEPDIR)/run_searchlog.Po -rm -f ./$(DEPDIR)/run_sendbuf.Po -rm -f ./$(DEPDIR)/run_zone_nr.Po -rm -f ./$(DEPDIR)/test_addcall.Po -rm -f ./$(DEPDIR)/test_addmult.Po -rm -f ./$(DEPDIR)/test_addpfx.Po -rm -f ./$(DEPDIR)/test_bands.Po -rm -f ./$(DEPDIR)/test_cabrillo.Po -rm -f ./$(DEPDIR)/test_checklogfile.Po -rm -f ./$(DEPDIR)/test_clusterinfo.Po -rm -f ./$(DEPDIR)/test_cw_utils.Po -rm -f ./$(DEPDIR)/test_dxcc.Po -rm -f ./$(DEPDIR)/test_getctydata.Po -rm -f ./$(DEPDIR)/test_initial_exchange.Po -rm -f ./$(DEPDIR)/test_locator2longlat.Po -rm -f ./$(DEPDIR)/test_prefix.Po -rm -f ./$(DEPDIR)/test_recallexchange.Po -rm -f ./$(DEPDIR)/test_score.Po -rm -f ./$(DEPDIR)/test_searchlog.Po -rm -f ./$(DEPDIR)/test_sendbuf.Po -rm -f ./$(DEPDIR)/test_zone_nr.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/data.Po -rm -f ./$(DEPDIR)/functions.Po -rm -f ./$(DEPDIR)/run_addcall.Po -rm -f ./$(DEPDIR)/run_addmult.Po -rm -f ./$(DEPDIR)/run_addpfx.Po -rm -f ./$(DEPDIR)/run_bands.Po -rm -f ./$(DEPDIR)/run_cabrillo.Po -rm -f ./$(DEPDIR)/run_checklogfile.Po -rm -f ./$(DEPDIR)/run_clusterinfo.Po -rm -f ./$(DEPDIR)/run_cw_utils.Po -rm -f ./$(DEPDIR)/run_dxcc.Po -rm -f ./$(DEPDIR)/run_getctydata.Po -rm -f ./$(DEPDIR)/run_initial_exchange.Po -rm -f ./$(DEPDIR)/run_locator2longlat.Po -rm -f ./$(DEPDIR)/run_prefix.Po -rm -f ./$(DEPDIR)/run_recallexchange.Po -rm -f ./$(DEPDIR)/run_score.Po -rm -f ./$(DEPDIR)/run_searchlog.Po -rm -f ./$(DEPDIR)/run_sendbuf.Po -rm -f ./$(DEPDIR)/run_zone_nr.Po -rm -f ./$(DEPDIR)/test_addcall.Po -rm -f ./$(DEPDIR)/test_addmult.Po -rm -f ./$(DEPDIR)/test_addpfx.Po -rm -f ./$(DEPDIR)/test_bands.Po -rm -f ./$(DEPDIR)/test_cabrillo.Po -rm -f ./$(DEPDIR)/test_checklogfile.Po -rm -f ./$(DEPDIR)/test_clusterinfo.Po -rm -f ./$(DEPDIR)/test_cw_utils.Po -rm -f ./$(DEPDIR)/test_dxcc.Po -rm -f ./$(DEPDIR)/test_getctydata.Po -rm -f ./$(DEPDIR)/test_initial_exchange.Po -rm -f ./$(DEPDIR)/test_locator2longlat.Po -rm -f ./$(DEPDIR)/test_prefix.Po -rm -f ./$(DEPDIR)/test_recallexchange.Po -rm -f ./$(DEPDIR)/test_score.Po -rm -f ./$(DEPDIR)/test_searchlog.Po -rm -f ./$(DEPDIR)/test_sendbuf.Po -rm -f ./$(DEPDIR)/test_zone_nr.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # 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: tlf-1.4.0/test/test_initial_exchange.c0000644000175000017500000000667513562576621014732 00000000000000#include "test.h" #include "../src/initial_exchange.h" // OBJECT ../src/initial_exchange.o struct ie_list *data = NULL; int setup_default(void **state) { int result; showmsg_spy = showstring_spy1 = showstring_spy2 = STRING_NOT_SET; result = chdir(SRCDIR); if (result == -1) perror("chdir"); return 0; } int teardown_default(void **state) { free_ie_list(data); return 0; } void test_no_file(void **state) { struct ie_list *data = make_ie_list("/nosuchfile"); assert_string_equal(showmsg_spy, "Cannot find initial exchange file"); assert_string_equal(showstring_spy1, STRING_NOT_SET); assert_string_equal(showstring_spy2, STRING_NOT_SET); assert_null(data); } static void check_data(struct ie_list *data) { assert_non_null(data); int size = 0; struct ie_list *r[3]; struct ie_list *p = data; while (p) { if (size < 3) { r[size] = p; // save result for later checks } ++size; p = p->next; } assert_int_equal(size, 3); // note: order is reverse as in the file assert_string_equal(r[0]->call, "YU5T"); assert_string_equal(r[0]->exchange, "43N22O"); assert_string_equal(r[1]->call, "2E0AAA"); assert_string_equal(r[1]->exchange, "51N3W"); assert_string_equal(r[2]->call, "2E0BBB"); assert_string_equal(r[2]->exchange, "51N00W"); } void test_ok(void **state) { data = make_ie_list("data/ie_ok.txt"); assert_string_equal(showmsg_spy, STRING_NOT_SET); assert_string_equal(showstring_spy1, "Using initial exchange file"); assert_string_equal(showstring_spy2, "data/ie_ok.txt"); check_data(data); } void test_ok_dos(void **state) { data = make_ie_list("data/ie_ok_dos.txt"); assert_string_equal(showmsg_spy, STRING_NOT_SET); assert_string_equal(showstring_spy1, "Using initial exchange file"); assert_string_equal(showstring_spy2, "data/ie_ok_dos.txt"); check_data(data); } void test_long_line(void **state) { data = make_ie_list("data/ie_long_line.txt"); assert_string_equal(showmsg_spy, "Line 1: too long"); assert_string_equal(showstring_spy1, "Using initial exchange file"); assert_string_equal(showstring_spy2, "data/ie_long_line.txt"); assert_null(data); } void test_no_comma(void **state) { data = make_ie_list("data/ie_no_comma.txt"); assert_string_equal(showmsg_spy, "Line 2: no comma found"); assert_string_equal(showstring_spy1, "Using initial exchange file"); assert_string_equal(showstring_spy2, "data/ie_no_comma.txt"); assert_null(data); } void test_ok_tab(void **state) { data = make_ie_list("data/ie_ok_tab.txt"); assert_string_equal(showmsg_spy, STRING_NOT_SET); assert_string_equal(showstring_spy1, "Using initial exchange file"); assert_string_equal(showstring_spy2, "data/ie_ok_tab.txt"); check_data(data); } void test_empty_call(void **state) { data = make_ie_list("data/ie_empty_call.txt"); assert_string_equal(showmsg_spy, "Line 1: 0 or more than one token before comma"); assert_string_equal(showstring_spy1, "Using initial exchange file"); assert_string_equal(showstring_spy2, "data/ie_empty_call.txt"); assert_null(data); } void test_ok_multi_column(void **state) { data = make_ie_list("data/ie_ok_multi_column.txt"); assert_string_equal(showmsg_spy, STRING_NOT_SET); assert_string_equal(showstring_spy1, "Using initial exchange file"); assert_string_equal(showstring_spy2, "data/ie_ok_multi_column.txt"); check_data(data); } tlf-1.4.0/test/run_checklogfile.c0000644000175000017500000000214513562576653013674 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); int teardown_default(void **state); void test_check_length_ok(void **state); void test_check_no_newline(void **state); void test_check_to_Long(void **state); void test_file_length_long(void **state); void test_file_length_ok(void **state); void test_file_length_short(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_check_length_ok, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_check_to_Long, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_check_no_newline, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_file_length_ok, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_file_length_short, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_file_length_long, setup_default, teardown_default), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/test_zone_nr.c0000644000175000017500000000103513562576621013072 00000000000000#include "test.h" #include "../src/zone_nr.h" // OBJECT ../src/zone_nr.o void test_ok_08(void **state) { assert_int_equal(zone_nr("08"), 8); } void test_ok__8(void **state) { assert_int_equal(zone_nr(" 8"), 8); } void test_ok_14(void **state) { assert_int_equal(zone_nr("14"), 14); } void test_bad_empty(void **state) { assert_int_equal(zone_nr(""), 0); } void test_bad_nan(void **state) { assert_int_equal(zone_nr("foo"), 0); } //void test_bad_short(void **state) { // assert_int_equal(zone_nr("7"), 0); //} tlf-1.4.0/test/run_locator2longlat.c0000644000175000017500000000120413562576653014356 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include void test_qra_ok4(void **state); void test_qra_ok6(void **state); void test_qra_short(void **state); void test_qra_wrong(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_qra_short, NULL, NULL), cmocka_unit_test_setup_teardown(test_qra_wrong, NULL, NULL), cmocka_unit_test_setup_teardown(test_qra_ok4, NULL, NULL), cmocka_unit_test_setup_teardown(test_qra_ok6, NULL, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/run_cabrillo.c0000644000175000017500000000326213562576653013045 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup(void **state); void test_cabToTlf_ParseQSO(void **state); void test_cabToTlf_ParseQTC(void **state); void test_cabToTlf_ParseXQSO(void **state); void test_freeCabfmt(void **state); void test_parseLine(void **state); void test_readCabrilloFileNotFound(void **state); void test_readCabrilloFormatNotFound(void **state); void test_readCabrilloFormatUniversal(void **state); void test_readCabrilloFormatWAE(void **state); void test_starts_with_fails(void **state); void test_starts_with_succeed(void **state); void test_translateItem(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_starts_with_succeed, NULL, NULL), cmocka_unit_test_setup_teardown(test_starts_with_fails, NULL, NULL), cmocka_unit_test_setup_teardown(test_translateItem, NULL, NULL), cmocka_unit_test_setup_teardown(test_freeCabfmt, NULL, NULL), cmocka_unit_test_setup_teardown(test_parseLine, NULL, NULL), cmocka_unit_test_setup_teardown(test_readCabrilloFormatUniversal, NULL, NULL), cmocka_unit_test_setup_teardown(test_readCabrilloFormatWAE, NULL, NULL), cmocka_unit_test_setup_teardown(test_readCabrilloFileNotFound, NULL, NULL), cmocka_unit_test_setup_teardown(test_readCabrilloFormatNotFound, NULL, NULL), cmocka_unit_test_setup_teardown(test_cabToTlf_ParseQSO, NULL, NULL), cmocka_unit_test_setup_teardown(test_cabToTlf_ParseXQSO, NULL, NULL), cmocka_unit_test_setup_teardown(test_cabToTlf_ParseQTC, NULL, NULL), }; return cmocka_run_group_tests(tests, setup, NULL); } tlf-1.4.0/test/test_addpfx.c0000644000175000017500000000510413562576621012667 00000000000000#include "test.h" #include "../src/addpfx.h" #include "../src/tlf.h" // OBJECT ../src/addpfx.o // OBJECT ../src/bands.o int pfxmultab; int setup_default(void **state) { pfxmultab = 0; InitPfx(); return 0; } /* test initialization */ void test_initPfx(void **state) { assert_int_equal(GetNrOfPfx_once(), 0); assert_int_equal(GetNrOfPfx_multiband(), 0); int i, temp = 0; for (i = 0; iname = strdup("hallo"); desc->item_array = g_ptr_array_new(); desc->item_count = 0; free_cabfmt(desc); // // QSO and QTC entries desc = g_new0(struct cabrillo_desc, 1); desc->name = strdup("hallo"); desc->item_array = g_ptr_array_new(); desc->item_count = 0; desc->qtc_item_array = g_ptr_array_new(); desc->qtc_item_count = 0; free_cabfmt(desc); } void test_parseLine(void **state) { struct line_item *line; line = parse_line_entry(""); assert_int_equal(line->tag, NO_ITEM); g_free(line); line = parse_line_entry("hallo"); assert_int_equal(line->tag, NO_ITEM); g_free(line); line = parse_line_entry("DATE,10"); assert_int_equal(line->tag, DATE); assert_int_equal(line->len, 10); g_free(line); } void test_readCabrilloFormatUniversal(void **state) { struct cabrillo_desc *desc; desc = read_cabrillo_format(formatfile, "UNIVERSAL"); assert_non_null(desc); assert_string_equal(desc->name, "UNIVERSAL"); assert_int_equal(desc->item_count, 10); assert_non_null(desc->item_array); assert_int_equal(desc->qtc_item_count, 0); assert_null(desc->qtc_item_array); free_cabfmt(desc); } void test_readCabrilloFormatWAE(void **state) { struct cabrillo_desc *desc; desc = read_cabrillo_format(formatfile, "WAEDC"); assert_non_null(desc); assert_string_equal(desc->name, "WAEDC"); assert_int_equal(desc->item_count, 10); assert_non_null(desc->item_array); assert_int_equal(desc->qtc_item_count, 8); assert_non_null(desc->qtc_item_array); free_cabfmt(desc); } void test_readCabrilloFileNotFound(void **state) { struct cabrillo_desc *desc; char formatfile1[100]; strcpy(formatfile1, TOP_SRCDIR); strcat(formatfile1, "/share/cabrillo1.fmt"); desc = read_cabrillo_format(formatfile1, "WAEDC"); assert_null(desc); } void test_readCabrilloFormatNotFound(void **state) { struct cabrillo_desc *desc; desc = read_cabrillo_format(formatfile, "NOT_IN_FILE"); assert_null(desc); } /* tests for readcabrillo */ void test_cabToTlf_ParseQSO(void **state) { struct cabrillo_desc *desc; desc = read_cabrillo_format(formatfile, "UNIVERSAL"); bandinx_spy = 0; cab_qso_to_tlf("QSO: 7002 RY 2016-08-13 0033 HA2OS 589 0008 K6ND 599 044", desc); assert_int_equal(bandinx_spy, 2); assert_int_equal((int)freq, 7002000); assert_int_equal(trxmode, DIGIMODE); assert_string_equal(hiscall, "K6ND"); assert_string_equal(my_rst, "589"); assert_string_equal(his_rst, "599"); assert_string_equal(comment, "044"); assert_int_equal(time_ptr_cabrillo.tm_hour, 00); assert_int_equal(time_ptr_cabrillo.tm_min, 33); assert_int_equal(time_ptr_cabrillo.tm_year, 2016 - 1900); /* year-1900 */ assert_int_equal(time_ptr_cabrillo.tm_mon, 8 - 1); /* 0-11 */ assert_int_equal(time_ptr_cabrillo.tm_mday, 13); } void test_cabToTlf_ParseXQSO(void **state) { struct cabrillo_desc *desc; desc = read_cabrillo_format(formatfile, "UNIVERSAL"); bandinx_spy = 0; cab_qso_to_tlf("X-QSO: 7002 PH 2016-08-13 0033 HA2OS 589 0008 K6ND 599 044", desc); assert_int_equal(bandinx_spy, 2); assert_int_equal((int)freq, 7002000); assert_int_equal(trxmode, SSBMODE); assert_string_equal(hiscall, "K6ND"); assert_string_equal(my_rst, "589"); assert_string_equal(his_rst, "599"); assert_string_equal(comment, "044"); assert_int_equal(time_ptr_cabrillo.tm_hour, 00); assert_int_equal(time_ptr_cabrillo.tm_min, 33); assert_int_equal(time_ptr_cabrillo.tm_year, 2016 - 1900); /* year-1900 */ assert_int_equal(time_ptr_cabrillo.tm_mon, 8 - 1); /* 0-11 */ assert_int_equal(time_ptr_cabrillo.tm_mday, 13); } void test_cabToTlf_ParseQTC(void **state) { struct cabrillo_desc *desc; desc = read_cabrillo_format(formatfile, "WAEDC"); qtcdirection = SEND; bandinx_spy = 0; cab_qso_to_tlf("QTC: 14084 CW 2016-11-12 1214 HA2OS 13/10 K4GM 0230 DL6UHD 074", desc); assert_int_equal((int)qtc_line.freq, 14084000); assert_string_equal(qtc_line.mode, "CW "); assert_int_equal(time_ptr_cabrillo.tm_hour, 12); assert_int_equal(time_ptr_cabrillo.tm_min, 14); assert_int_equal(time_ptr_cabrillo.tm_year, 2016 - 1900); /* year-1900 */ assert_int_equal(time_ptr_cabrillo.tm_mon, 11 - 1); /* 0-11 */ assert_int_equal(time_ptr_cabrillo.tm_mday, 12); assert_string_equal(qtc_line.call, "K4GM"); assert_int_equal(qtc_line.qtchead_serial, 13); assert_int_equal(qtc_line.qtchead_count, 10); assert_string_equal(qtc_line.qtc_time, "0230"); assert_string_equal(qtc_line.qtc_call, "DL6UHD"); assert_int_equal(qtc_line.qtc_serial, 74); } #if 0 static void test_cabToTlf_KeepUnrelated(void **state) { struct cabrillo_desc *desc; desc = read_cabrillo_format("../share/cabrillo.fmt", "UNIVERSAL"); bandinx = 0; strcpy(qsonrstr, "1234"); qsonum = 1234; cab_qso_to_tlf("QSO: 7002 RY 2016-08-13 0033 HA2OS 589 0008 K6ND 599 044", desc); assert_string_equal(qsonrstr, "1234"); assert_int_equal(qsonum, 1234); assert_int_equal(bandinx, 0); } #endif tlf-1.4.0/test/data/0000755000175000017500000000000013562576670011213 500000000000000tlf-1.4.0/test/data/ie_empty_call.txt0000644000175000017500000000001113562576621014466 00000000000000 ,123 tlf-1.4.0/test/data/ie_long_line.txt0000644000175000017500000000014513562576621014313 00000000000000a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789 tlf-1.4.0/test/data/ie_ok.txt0000644000175000017500000000010713562576621012754 00000000000000 #!!Order!!, Call, Exch1 # 2E0BBB ,51N00W 2E0AAA, 51N3W YU5T,43N22O tlf-1.4.0/test/data/ie_ok_multi_column.txt0000644000175000017500000000011513562576621015542 000000000000002E0BBB, 51N00W,comment1 2E0AAA,51N3W , comment2 YU5T,43N22O,,,comment3, tlf-1.4.0/test/data/ie_no_comma.txt0000644000175000017500000000002213562576621014127 00000000000000A1AA,123 A2BB 456 tlf-1.4.0/test/data/ie_ok_tab.txt0000644000175000017500000000013413562576621013602 00000000000000# leading tab 2E0BBB, 51N00W # tab after call 2E0AAA ,51N3W # tab after comma YU5T, 43N22O tlf-1.4.0/test/data/ie_ok_dos.txt0000644000175000017500000000011713562576621013622 00000000000000 #!!Order!!, Call, Exch1 # 2E0BBB ,51N00W 2E0AAA, 51N3W YU5T,43N22O tlf-1.4.0/test/test_clusterinfo.c0000644000175000017500000001617713562576621013772 00000000000000#include "test.h" #include #include "../src/clusterinfo.h" #include "../src/globalvars.h" #include "../src/bandmap.h" #include "../src/lancode.h" #include "../src/dxcc.h" // OBJECT ../src/clusterinfo.o // OBJECT ../src/get_time.o // OBJECT ../src/err_utils.o int LINES=25; /* test for 25 lines */ long timecorr; int getctynr(char *checkcall) { return 0; } extern char spot_ptr[MAX_SPOTS][82]; extern int nr_of_spots; extern int announcefilter; extern int xplanet; extern int trx_control; extern freq_t freq; char thisnode = 'A'; freq_t node_frequencies[MAXNODES]; char call[20]; int cluster; #include pthread_mutex_t spot_ptr_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t bm_mutex = PTHREAD_MUTEX_INITIALIZER; bm_config_t bm_config = { .livetime = 900 }; GList *allspots = NULL; // not used yet /* mockups */ static char nicebox_boxname[100]; void nicebox(int y, int x, int height, int width, char *boxname) { strcpy(nicebox_boxname, boxname); } static int bandmap_show_called; void bandmap_show() { bandmap_show_called = 1; } static int printcall_called; void printcall() { printcall_called = 1; } int modify_attr(int attr) { return attr; } static dxcc_data dummy_dxcc = { "Noland", 1, 2, "NO", 34, 56, 7, "QQ", false }; dxcc_data *dxcc_by_index(unsigned int index) { return &dummy_dxcc; } /* setup/teardown */ static void put_dx_line(char *p, int index) { sprintf(p, "DX de QQ3QQQ: %2d010.0 AA%dAAA COMMENT 12%02dZ", (index % 2) == 0 ? 7 : 14, index % 10, index % 60); } static void put_anno_line(char *p, int index, char *to) { sprintf(p, "To %s de QQ3QQQ: message 12%02dZ", to, index % 60); } static void put_wwv_line(char *p, int index) { sprintf(p, "WWV de Q0QQ: SFI=68,A=12,K=3,No Storms 12%02dZ", index % 60); } static void put_short_line(char *p, int index) { sprintf(p, "length<20 12%02dZ", index % 60); } int setup_default(void **state) { strcpy(call, "N0CALL\n"); // !!! do not forget trailing \n xplanet = 0; clear_mvprintw_history(); // generate 25 various cluster spots nr_of_spots = 25; for (int i = 0; i < MAX_SPOTS; ++i) { char *spot = spot_ptr[i]; if (i >= nr_of_spots) { spot[0] = 0; continue; } if (i == 17) { put_short_line(spot, i); } else if (i == 19) { put_anno_line(spot, i, "N0CALL"); } else if (i == 21) { put_anno_line(spot, i, "ALL"); } else if (i == 23) { put_wwv_line(spot, i); } else { put_dx_line(spot, i); } } trx_control = 1; freq = 7123800.0; // Hz nicebox_boxname[0] = 0; printcall_called = 0; bandmap_show_called = 0; return 0; } static void check_mvprintw_output(int index, int y, int x, const char *text) { char buffer[7]; sprintf(buffer, "%02d|%02d|", y, x); assert_memory_equal(mvprintw_history[index], buffer, 6); assert_string_equal(mvprintw_history[index] + 6, text); } /* test CLUSTER mode with FILTER_DX setting */ void test_cluster_show_dx(void **state) { cluster = CLUSTER; announcefilter = FILTER_DX; clusterinfo(); // check that only DX spots are shown check_mvprintw_output(7, 15, 1, spot_ptr[13]); check_mvprintw_output(6, 16, 1, spot_ptr[14]); check_mvprintw_output(5, 17, 1, spot_ptr[15]); check_mvprintw_output(4, 18, 1, spot_ptr[16]); // #17 missing (short) check_mvprintw_output(3, 19, 1, spot_ptr[18]); // #19 missing (talk) check_mvprintw_output(2, 20, 1, spot_ptr[20]); // #21 missing (announcement) check_mvprintw_output(1, 21, 1, spot_ptr[22]); // #23 missing (WWV) check_mvprintw_output(0, 22, 1, spot_ptr[24]); assert_string_equal(nicebox_boxname, "Cluster"); assert_true(printcall_called); assert_false(bandmap_show_called); } /* test CLUSTER mode with FILTER_TALK setting */ void test_cluster_show_talk(void **state) { cluster = CLUSTER; announcefilter = FILTER_TALK; clusterinfo(); // check that DX spots + talk message are shown check_mvprintw_output(7, 15, 1, spot_ptr[14]); check_mvprintw_output(6, 16, 1, spot_ptr[15]); check_mvprintw_output(5, 17, 1, spot_ptr[16]); // #17 missing (short) check_mvprintw_output(4, 18, 1, spot_ptr[18]); check_mvprintw_output(3, 19, 1, spot_ptr[19]); check_mvprintw_output(2, 20, 1, spot_ptr[20]); // #21 missing (announcement) check_mvprintw_output(1, 21, 1, spot_ptr[22]); // #23 missing (WWV) check_mvprintw_output(0, 22, 1, spot_ptr[24]); assert_string_equal(nicebox_boxname, "Cluster"); assert_true(printcall_called); } /* test CLUSTER mode with FILTER_ANN setting */ void test_cluster_show_ann(void **state) { cluster = CLUSTER; announcefilter = FILTER_ANN; clusterinfo(); // check that DX spots + announcements are shown check_mvprintw_output(7, 15, 1, spot_ptr[15]); check_mvprintw_output(6, 16, 1, spot_ptr[16]); // #17 missing (short) check_mvprintw_output(5, 17, 1, spot_ptr[18]); check_mvprintw_output(4, 18, 1, spot_ptr[19]); check_mvprintw_output(3, 19, 1, spot_ptr[20]); check_mvprintw_output(2, 20, 1, spot_ptr[21]); check_mvprintw_output(1, 21, 1, spot_ptr[22]); // #23 missing (WWV) check_mvprintw_output(0, 22, 1, spot_ptr[24]); assert_string_equal(nicebox_boxname, "Cluster"); assert_true(printcall_called); } /* test CLUSTER mode with FILTER_ALL setting */ void test_cluster_show_all(void **state) { cluster = CLUSTER; announcefilter = FILTER_ALL; clusterinfo(); // check that all spots are shown except the too short one check_mvprintw_output(7, 15, 1, spot_ptr[16]); // #17 missing (short) check_mvprintw_output(6, 16, 1, spot_ptr[18]); check_mvprintw_output(5, 17, 1, spot_ptr[19]); check_mvprintw_output(4, 18, 1, spot_ptr[20]); check_mvprintw_output(3, 19, 1, spot_ptr[21]); check_mvprintw_output(2, 20, 1, spot_ptr[22]); check_mvprintw_output(1, 21, 1, spot_ptr[23]); check_mvprintw_output(0, 22, 1, spot_ptr[24]); assert_string_equal(nicebox_boxname, "Cluster"); assert_true(printcall_called); } /* test CLUSTER mode with just 6 spots */ void test_cluster_show_all_6(void **state) { cluster = CLUSTER; announcefilter = FILTER_ALL; nr_of_spots = 6; clusterinfo(); // check that all 6 spots are shown check_mvprintw_output(5, 15, 1, spot_ptr[0]); check_mvprintw_output(4, 16, 1, spot_ptr[1]); check_mvprintw_output(3, 17, 1, spot_ptr[2]); check_mvprintw_output(2, 18, 1, spot_ptr[3]); check_mvprintw_output(1, 19, 1, spot_ptr[4]); check_mvprintw_output(0, 20, 1, spot_ptr[5]); // lines 21 and 22 are empty assert_string_equal(nicebox_boxname, "Cluster"); assert_true(printcall_called); } /* test FREQWINDOW mode */ void test_freqwindow(void **state) { cluster = FREQWINDOW; clusterinfo(); // frequency shown rounded to kHz check_mvprintw_output(0, 15, 4, " Stn A : 7124"); assert_string_equal(nicebox_boxname, "Frequencies"); assert_true(printcall_called); assert_false(bandmap_show_called); } tlf-1.4.0/test/run_clusterinfo.c0000644000175000017500000000177313562576653013620 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); void test_cluster_show_all(void **state); void test_cluster_show_all_6(void **state); void test_cluster_show_ann(void **state); void test_cluster_show_dx(void **state); void test_cluster_show_talk(void **state); void test_freqwindow(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_cluster_show_dx, setup_default, NULL), cmocka_unit_test_setup_teardown(test_cluster_show_talk, setup_default, NULL), cmocka_unit_test_setup_teardown(test_cluster_show_ann, setup_default, NULL), cmocka_unit_test_setup_teardown(test_cluster_show_all, setup_default, NULL), cmocka_unit_test_setup_teardown(test_cluster_show_all_6, setup_default, NULL), cmocka_unit_test_setup_teardown(test_freqwindow, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/run_dxcc.c0000644000175000017500000000277213562576653012204 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); void test_add_dxcc_check_count(void **state); void test_add_dxcc_check_parsed(void **state); void test_add_dxcc_check_starred(void **state); void test_add_prefix_check_count(void **state); void test_add_prefix_check_parsed(void **state); void test_dxcc_by_index_out_of_bounds(void **state); void test_dxcc_empty_after_init(void **state); void test_prefix_by_index_out_of_bounds(void **state); void test_prefix_empty_after_init(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_dxcc_empty_after_init, setup_default, NULL), cmocka_unit_test_setup_teardown(test_prefix_empty_after_init, setup_default, NULL), cmocka_unit_test_setup_teardown(test_prefix_by_index_out_of_bounds, setup_default, NULL), cmocka_unit_test_setup_teardown(test_dxcc_by_index_out_of_bounds, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_dxcc_check_count, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_dxcc_check_parsed, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_dxcc_check_starred, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_prefix_check_count, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_prefix_check_parsed, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/test_addcall.c0000644000175000017500000002302113562576621013003 00000000000000#include "test.h" #include "../src/addcall.h" #include "../src/globalvars.h" #include "../src/dxcc.h" #include "../src/getctydata.h" // OBJECT ../src/addcall.o // OBJECT ../src/addmult.o // OBJECT ../src/bands.o // OBJECT ../src/searchcallarray.o // OBJECT ../src/getctydata.o // OBJECT ../src/getpx.o // OBJECT ../src/dxcc.o // OBJECT ../src/get_time.o // OBJECT ../src/zone_nr.o /* these are missing from globalvars */ extern int dupe; extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern char continent_multiplier_list[7][3]; extern char countrylist[][6]; int add_pfx(char *call) { return 0; } int pacc_pa(void) { return 0; } long timecorr = 0; /* setups */ int setup_default(void **state) { char filename[100]; bandinx = BANDINDEX_10; cqww = 1; /* trigger zone evaluation */ wpx = 0; pfxmult = 0; dupe = 0; arrldx_usa = 0; /* it may be a bug that addcall does not initialize addcallarea */ addcallarea = 0; strcpy(countrylist[0], ""); strcpy(continent_multiplier_list[0], ""); pfxnummultinr = 0; memset(pfxnummulti, 0, sizeof(pfxnummulti)); memset(countries, 0, sizeof(countries)); memset(countryscore, 0, sizeof(countryscore)); memset(zones, 0, sizeof(zones)); memset(zonescore, 0, sizeof(zonescore)); strcpy(filename, TOP_SRCDIR); strcat(filename, "/share/cty.dat"); assert_int_equal(load_ctydata(filename), 0); return 0; } int setup_addcall_pfxnum_inList(void **state) { int countrynr = getctynr("LZ1AB"); setup_default(state); pfxnummultinr = 2; pfxnummulti[0].countrynr = countrynr + 3; pfxnummulti[1].countrynr = countrynr; return 0; } int setup_addcall_pfxnum_notinList(void **state) { return setup_addcall_pfxnum_inList(state); } void test_addcall_nopfxnum(void **state) { strcpy(hiscall, "LZ1AB"); addcall(); assert_int_equal(addcallarea, 0); } void test_addcall_pfxnum_inList(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "LZ1AB"); addcall(); assert_int_equal(addcallarea, 1); assert_int_equal(pfxnummulti[1].qsos[1], BAND10); assert_int_equal(countryscore[BANDINDEX_10], 1); assert_int_equal(zonescore[BANDINDEX_10], 1); } void test_addcall_pfxnum_notinList(void **state) { strcpy(hiscall, "HA2BNL"); addcall(); assert_int_equal(addcallarea, 0); } char logline[] = "160CW 08-Feb-11 17:06 0025 LZ1AB 599 599 20 LZ 20 1 "; char logline_2[] = "160CW 08-Feb-11 17:06 0025 HA1AB 599 599 19 LZ 20 1 "; void test_addcall2_nopfxnum(void **state) { strcpy(lan_logline, logline); addcall2(); assert_int_equal(addcallarea, 0); } int setup_addcall2_pfxnum_inList(void **state) { return setup_addcall_pfxnum_inList(state); } int setup_addcall2_pfxnum_notinList(void **state) { return setup_addcall_pfxnum_inList(state); } void test_addcall2_pfxnum_inList(void **state) { strcpy(lan_logline, logline); addcall2(); assert_int_equal(addcallarea, 1); assert_int_equal(pfxnummulti[1].qsos[1], BAND160); assert_int_equal(countryscore[BANDINDEX_160], 1); assert_int_equal(zonescore[BANDINDEX_160], 1); } void test_addcall2_pfxnum_notinList(void **state) { strcpy(lan_logline, logline_2); addcall2(); assert_int_equal(addcallarea, 0); } /* check country handling in addcall() */ void test_add_unknown_country(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "12345"); addcall(); assert_int_equal(countryscore[bandinx], 0); assert_int_equal(countries[getctynr("LZ1AB")], 0); } void test_add_country(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "LZ1AB"); addcall(); assert_int_equal(countryscore[bandinx], 1); assert_int_equal(countries[getctynr("LZ0AA")], BAND10); } void test_add_country_2_band(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "LZ1AB"); addcall(); bandinx = BANDINDEX_15; strcpy(hiscall, "LZ1AB"); addcall(); assert_int_equal(countryscore[BANDINDEX_10], 1); assert_int_equal(countryscore[BANDINDEX_15], 1); assert_int_equal(countries[getctynr("LZ0AA")], BAND10 | BAND15); } void test_add_country_2_stations(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "LZ1AB"); addcall(); strcpy(hiscall, "LZ3CD"); addcall(); assert_int_equal(countryscore[bandinx], 1); assert_int_equal(countries[getctynr("LZ0AA")], BAND10); } void test_add_2_countries(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "LZ1AB"); addcall(); strcpy(hiscall, "DL1YZ"); addcall(); assert_int_equal(countryscore[BANDINDEX_10], 2); assert_int_equal(countries[getctynr("LZ0AA")], BAND10); assert_int_equal(countries[getctynr("DL0ABC")], BAND10); } /* check zone handling in addcall() */ void test_add_unknown_zone(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "12345"); strcpy(comment, "0"); addcall(); assert_int_equal(zonescore[bandinx], 0); assert_int_equal(zones[15], 0); } void test_add_zone(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "LZ1AB"); strcpy(comment, "15"); addcall(); assert_int_equal(zonescore[bandinx], 1); assert_int_equal(zones[15], BAND10); } void test_add_zone_2_band(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "LZ1AB"); strcpy(comment, "15"); addcall(); bandinx = BANDINDEX_15; strcpy(hiscall, "LZ1AB"); addcall(); assert_int_equal(zonescore[BANDINDEX_10], 1); assert_int_equal(zonescore[BANDINDEX_15], 1); assert_int_equal(zones[15], BAND10 | BAND15); } void test_add_zone_2_stations(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "LZ1AB"); strcpy(comment, "15"); addcall(); strcpy(hiscall, "LZ3CD"); addcall(); assert_int_equal(zonescore[bandinx], 1); assert_int_equal(zones[15], BAND10); } void test_add_2_zones(void **state) { bandinx = BANDINDEX_10; strcpy(hiscall, "LZ1AB"); strcpy(comment, "15"); addcall(); strcpy(hiscall, "DL1YZ"); strcpy(comment, "14"); addcall(); assert_int_equal(zonescore[BANDINDEX_10], 2); assert_int_equal(zones[14], BAND10); assert_int_equal(zones[15], BAND10); } /* check country handling in addcall2() */ void test_add2_unknown_country(void **state) { strcpy(lan_logline, logline); lan_logline[29] = '1'; lan_logline[30] = '2'; addcall2(); assert_int_equal(countryscore[bandinx], 0); assert_int_equal(countries[getctynr("LZ1AB")], 0); } void test_add2_country(void **state) { strcpy(lan_logline, logline); addcall2(); assert_int_equal(countryscore[BANDINDEX_160], 1); assert_int_equal(countries[getctynr("LZ0AA")], BAND160); } void test_add2_country_2_band(void **state) { strcpy(lan_logline, logline); addcall2(); memcpy(lan_logline, " 15", 3); /* patch to 15m */ addcall2(); assert_int_equal(countryscore[BANDINDEX_160], 1); assert_int_equal(countryscore[BANDINDEX_15], 1); assert_int_equal(countries[getctynr("LZ0AA")], BAND160 | BAND15); } void test_add2_country_2_stations(void **state) { strcpy(lan_logline, logline); addcall2(); lan_logline[31] = '3'; /* modify to LZ3AB */ addcall2(); assert_int_equal(countryscore[BANDINDEX_160], 1); assert_int_equal(countries[getctynr("LZ0AA")], BAND160); } void test_add2_2_countries(void **state) { strcpy(lan_logline, logline); addcall2(); strcpy(lan_logline, logline_2); addcall2(); assert_int_equal(countryscore[BANDINDEX_160], 2); assert_int_equal(countries[getctynr("LZ0AA")], BAND160); assert_int_equal(countries[getctynr("HA0ABC")], BAND160); } /* check zone handling in addcall2() */ void test_add2_unknown_zone(void **state) { strcpy(lan_logline, logline); lan_logline[29] = '1'; lan_logline[30] = '2'; lan_logline[54] = '0'; /* Zone 0 */ addcall2(); assert_int_equal(zonescore[BANDINDEX_160], 0); assert_int_equal(zones[15], 0); } void test_add2_zone(void **state) { strcpy(lan_logline, logline); addcall2(); assert_int_equal(zonescore[BANDINDEX_160], 1); assert_int_equal(zones[20], BAND160); } void test_add2_zone_2_band(void **state) { strcpy(lan_logline, logline); addcall2(); memcpy(lan_logline, " 15", 3); addcall2(); assert_int_equal(zonescore[BANDINDEX_160], 1); assert_int_equal(zonescore[BANDINDEX_15], 1); assert_int_equal(zones[20], BAND160 | BAND15); } void test_add2_zone_2_stations(void **state) { strcpy(lan_logline, logline); addcall2(); lan_logline[31] = '3'; /* modify to LZ3AB */ addcall2(); assert_int_equal(zonescore[BANDINDEX_160], 1); assert_int_equal(zones[20], BAND160); } void test_add2_2_zones(void **state) { strcpy(lan_logline, logline); addcall2(); strcpy(lan_logline, logline_2); addcall2(); assert_int_equal(zonescore[BANDINDEX_160], 2); assert_int_equal(zones[19], BAND160); assert_int_equal(zones[20], BAND160); } /* special test for WARC bands */ void test_add_warc(void **state) { bandinx = BANDINDEX_12; strcpy(hiscall, "LZ1AB"); strcpy(comment, "15"); addcall(); assert_int_equal(countries[getctynr("LZ0AA")], BAND12); assert_int_equal(addcty, getctynr("LZ1AB")); assert_int_equal(zones[15], BAND12); assert_int_equal(addzone, 15); } void test_add2_warc(void **state) { strcpy(lan_logline, logline); memcpy(lan_logline, " 30", 3); addcall2(); assert_int_equal(countries[getctynr("LZ0AA")], BAND30); assert_int_equal(zones[20], BAND30); } tlf-1.4.0/test/run_cw_utils.c0000644000175000017500000000071413562576653013106 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include void test_GetSpeed(void **state); void test_SetSpeed_success(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_SetSpeed_success, NULL, NULL), cmocka_unit_test_setup_teardown(test_GetSpeed, NULL, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/functions.c0000644000175000017500000000230413562576621012371 00000000000000#include "test.h" #include "curses.h" int __wrap_key_get() { return -1; } // wrap with a plugin function int_func_t key_poll_func = NULL; int __wrap_key_poll() { if (key_poll_func != NULL) { return key_poll_func(); } return -1; } int_func_t getch_func = NULL; int __wrap_wgetch(WINDOW *w) { if (getch_func != NULL) { return getch_func(); } return -1; } void __wrap_refreshp() { } const char STRING_NOT_SET[] = "__NOT_SET__"; const char *showmsg_spy = STRING_NOT_SET; const char *showstring_spy1 = STRING_NOT_SET; const char *showstring_spy2 = STRING_NOT_SET; #define BUFSZ 200 char showmsg_spy_buf[BUFSZ]; char showstring_spy1_buf[BUFSZ]; char showstring_spy2_buf[BUFSZ]; static char *save_string(char *dest, const char *src) { strncpy(dest, src, BUFSZ - 1); dest[BUFSZ - 1] = 0; return dest; } void showmsg(char *message) { showmsg_spy = save_string(showmsg_spy_buf, message); } void showstring(char *message1, char *message2) { showstring_spy1 = save_string(showstring_spy1_buf, message1); showstring_spy2 = save_string(showstring_spy2_buf, message2); } unsigned int __wrap_sleep(unsigned int seconds) { // no sleeping in tests return 0; } tlf-1.4.0/test/test_recallexchange.c0000644000175000017500000000261713562576621014374 00000000000000#include "test.h" #include "../src/recall_exchange.h" #include "../src/initial_exchange.h" #include "../src/tlf.h" // OBJECT ../src/recall_exchange.o // OBJECT ../src/initial_exchange.o extern char comment[]; extern char hiscall[]; extern struct ie_list *main_ie_list; extern struct worked_t worked[]; extern int nr_worked; int setup_default(void **state) { int result; strcpy(hiscall, "N0ONE"); strcpy(comment, ""); strcpy(worked[0].call, "DL1ABC"); strcpy(worked[0].exchange, "51N13E"); nr_worked = 1; result = chdir(SRCDIR); if (result == -1) perror("chdir"); return 0; } void test_empty_call(void **state) { strcpy(hiscall, ""); assert_int_equal(recall_exchange(), 0); assert_string_equal(comment, ""); } void test_respect_nonempty_comment(void **state) { strcpy(comment, "Hi"); assert_int_equal(recall_exchange(), 0); assert_string_equal(comment, "Hi"); } void test_not_found(void **state) { assert_int_equal(recall_exchange(), -1); assert_string_equal(comment, ""); } void test_from_worked(void **state) { strcpy(hiscall, "DL1ABC"); assert_int_equal(recall_exchange(), 1); assert_string_equal(comment, "51N13E"); } void test_from_ielist(void **state) { main_ie_list = make_ie_list("data/ie_ok.txt"); strcpy(hiscall, "2E0AAA"); assert_int_equal(recall_exchange(), 1); assert_string_equal(comment, "51N3W"); } tlf-1.4.0/test/Makefile.am0000644000175000017500000000117413562576621012255 00000000000000 include defs.am # generated by generate_defs.pl called from configure.ac AM_CPPFLAGS = @GLIB_CFLAGS@ -DTOP_SRCDIR=\"$(top_srcdir)\" LIBS = @LIBM_LIB@ @GLIB_LIBS@ @PANEL_LIBS@ @CURSES_LIBS@ @CMOCKA_LIBS@ \ -Wl,-wrap=sleep \ -Wl,-wrap=key_get \ -Wl,-wrap=key_poll \ -Wl,-wrap=wgetch \ -Wl,-wrap=refreshp noinst_HEADERS = \ test.h AM_CPPFLAGS += -DSRCDIR=\"$(abs_srcdir)\" DATA_FILES = data/ie_empty_call.txt data/ie_long_line.txt \ data/ie_no_comma.txt data/ie_ok.txt \ data/ie_ok_dos.txt data/ie_ok_multi_column.txt \ data/ie_ok_tab.txt EXTRA_DIST = $(DATA_FILES) tlf-1.4.0/test/test_dxcc.c0000644000175000017500000000413413562576621012344 00000000000000#include "test.h" #include "../src/tlf.h" #include "../src/dxcc.h" // OBJECT ../src/dxcc.o extern prefix_data dummy_pfx; int setup_default(void **state) { dxcc_init(); prefix_init(); dxcc_add("Rotuma Island: 32: 56: OC: -12.48: -177.08: -12.0: 3D2/r:"); dxcc_add("France: 14: 27: EU: 46.00: -2.00: -1.0: F:"); return 0; } void test_dxcc_empty_after_init(void **state) { dxcc_init(); assert_int_equal(0, dxcc_count()); } void test_prefix_empty_after_init(void **state) { prefix_init(); assert_int_equal(0, prefix_count()); } void test_prefix_by_index_out_of_bounds(void **state) { assert_ptr_equal(&dummy_pfx, prefix_by_index(dxcc_count())); } void test_dxcc_by_index_out_of_bounds(void **state) { assert_ptr_equal(dxcc_by_index(0), dxcc_by_index(dxcc_count())); } void test_add_dxcc_check_count(void **state) { assert_int_equal(2, dxcc_count()); } void test_add_dxcc_check_parsed(void **state) { dxcc_data *mydx; mydx = dxcc_by_index(1); assert_string_equal(mydx->countryname, "France"); assert_int_equal(mydx->cq, 14); assert_int_equal(mydx->itu, 27); assert_true(mydx->lat == 46.); assert_true(mydx->lon == -2.); assert_true(mydx->timezone == -1.0); assert_string_equal(mydx->continent, "EU"); assert_string_equal(mydx->pfx, "F"); assert_false(mydx->starred); } void test_add_dxcc_check_starred(void **state) { dxcc_data *mydx; dxcc_add("France: 14: 27: EU: 46.00: -2.00: -1.0: *F:"); mydx = dxcc_by_index(2); assert_true(mydx->starred); } void test_add_prefix_check_count(void **state) { prefix_add("F"); prefix_add("HW"); assert_int_equal(2, prefix_count()); } void test_add_prefix_check_parsed(void **state) { prefix_data *pfx; prefix_add("HW"); pfx = prefix_by_index(0); assert_string_equal(pfx->pfx, "HW"); assert_int_equal(pfx->dxcc_index, dxcc_count() - 1); assert_int_equal(pfx->cq, dxcc_by_index(dxcc_count() - 1)->cq); assert_int_equal(pfx->itu, dxcc_by_index(dxcc_count() - 1)->itu); } tlf-1.4.0/test/test_cw_utils.c0000644000175000017500000000060613562576621013254 00000000000000#include "test.h" #include "../src/cw_utils.h" // OBJECT ../src/cw_utils.o void test_SetSpeed_success(void **state) { SetCWSpeed(30); assert_int_equal(speed, 10); SetCWSpeed(31); assert_int_equal(speed, 11); } void test_GetSpeed(void **state) { SetCWSpeed(43); assert_int_equal(GetCWSpeed(), 44); SetCWSpeed(60); assert_int_equal(GetCWSpeed(), 50); } tlf-1.4.0/test/test_addmult.c0000644000175000017500000002241413562576621013056 00000000000000#include "test.h" #include "../src/tlf.h" #include "../src/addmult.h" #include "../src/globalvars.h" #include "../src/bands.h" #include #include // OBJECT ../src/addmult.o // OBJECT ../src/bands.o struct mults_t multis[MAX_MULTS]; int nr_multis; extern char multsfile[]; /* name of file with a list of allowed multipliers */ char *testfile = "mults"; /* export internal definition */ GSList *get_aliases(int n); /* helpers for writing a temporary multsfile for testing */ void write_testfile(char *name, char *content) { FILE *fp; fp = fopen(name, "w"); if (fp != NULL) { fputs(content, fp); fclose(fp); } } void setup_multis(char *multstring) { write_testfile(testfile, multstring); strcpy(multsfile, testfile); init_and_load_multipliers(); } int setup_default(void **state) { bandinx = BANDINDEX_80; arrlss = 0; shownewmult = -1; wysiwyg_once = 0; wysiwyg_multi = 0; arrlss = 0; serial_section_mult = 0; sectn_mult = 0; serial_grid4_mult = 0; dx_arrlsections = 0; ve_cty = 77; /* random numbers just for test */ w_cty = 78; strcpy(comment, ""); strcpy(section, ""); strcpy(multsfile, ""); init_mults(); unlink(testfile); return 0; } /* tewst initialization of 'multis' */ void test_init_mults(void **state) { nr_multis = 2; strcpy(multis[0].name, "abc"); strcpy(multis[1].name, "abd"); multis[0].band = inxes[BANDINDEX_160]; multis[1].band = inxes[BANDINDEX_80]; init_mults(); assert_int_equal(nr_multis, 0); assert_string_equal(multis[0].name, ""); assert_int_equal(multis[0].band, 0); } /* tests for remember_multi */ void test_remember_mult_empty(void **state) { assert_int_equal(remember_multi("", BANDINDEX_80, 0), -1); } void test_remember_mult_one(void **state) { assert_int_equal(remember_multi("abc", BANDINDEX_80, 0), 0); assert_int_equal(nr_multis, 1); assert_string_equal(multis[0].name, "abc"); assert_int_equal(multis[0].band, inxes[BANDINDEX_80]); } void test_remember_mult_two(void **state) { assert_int_equal(remember_multi("abc", BANDINDEX_80, 0), 0); assert_int_equal(remember_multi("def", BANDINDEX_80, 0), 1); assert_int_equal(nr_multis, 2); assert_string_equal(multis[0].name, "abc"); assert_string_equal(multis[1].name, "def"); assert_int_equal(multis[0].band, inxes[BANDINDEX_80]); assert_int_equal(multis[1].band, inxes[BANDINDEX_80]); } void test_remember_mult_same_2x(void **state) { assert_int_equal(remember_multi("abc", BANDINDEX_80, 0), 0); assert_int_equal(remember_multi("abc", BANDINDEX_160, 0), -1); assert_int_equal(nr_multis, 1); assert_string_equal(multis[0].name, "abc"); assert_int_equal(multis[0].band, inxes[BANDINDEX_80] | inxes[BANDINDEX_160]); } void test_remember_mult_same_2x_newband(void **state) { assert_int_equal(remember_multi("abc", BANDINDEX_80, 0), 0); assert_int_equal(remember_multi("abc", BANDINDEX_160, 1), 0); assert_int_equal(nr_multis, 1); assert_string_equal(multis[0].name, "abc"); assert_int_equal(multis[0].band, inxes[BANDINDEX_80] | inxes[BANDINDEX_160]); } /* helpers for check of loading of possible mults */ void test_write_mult(void **state) { FILE *fp; char buffer[100]; buffer[0] = '\0'; write_testfile(testfile, "Hallo"); fp = fopen(testfile, "r"); assert_non_null(fp); char *p = fgets(buffer, sizeof(buffer), fp); assert_ptr_equal(p, buffer); assert_string_equal(buffer, "Hallo"); } /* helper for checking content of mults_possible array */ void check_multi(int pos, char * str) { assert_string_equal(get_mult(pos), str); } /* tests for load_multipliers */ void test_load_multi_no_file(void **state) { assert_int_equal(init_and_load_multipliers(), 0); assert_int_equal(get_mult_count(), 0); } /** \todo better would be to return -1 if multsfile could not be found */ void test_load_multi_file_not_found(void **state) { strcpy(multsfile, "nonsense"); assert_int_equal(init_and_load_multipliers(), 0); } void test_load_multi(void **state) { setup_multis("AB\n#LZ is not active\nKL\n \nZH\n"); assert_int_equal(get_mult_count(), 3); check_multi(0, "AB"); check_multi(2, "ZH"); } void test_load_multi_dos(void **state) { setup_multis("AB\r\n#LZ is not active\r\nKL\r\n \r\nZH\r\n"); assert_int_equal(get_mult_count(), 3); check_multi(0, "AB"); check_multi(2, "ZH"); } // leading space both on comment and data lines void test_load_multi_leading_space(void **state) { setup_multis(" AB\n #LZ is not active\nKL\n \nZH\n"); assert_int_equal(get_mult_count(), 3); check_multi(0, "AB"); check_multi(2, "ZH"); } void test_load_multi_sorted(void **state) { setup_multis("AB\n#LZ is not active\nZH\n \nKL\n"); assert_int_equal(get_mult_count(), 3); check_multi(0, "AB"); check_multi(2, "ZH"); } void test_load_multi_redefined(void **state) { setup_multis("AB\nKL\nZH\nKL\n"); assert_int_equal(get_mult_count(), 3); check_multi(0, "AB"); check_multi(2, "ZH"); } void test_load_multi_with_emptyalias(void **state) { setup_multis("AB\nZH :\nZH\nKL\n"); assert_int_equal(get_mult_count(), 3); check_multi(0, "AB"); check_multi(2, "ZH"); assert_int_equal(g_slist_length(get_aliases(2)), 0); } void test_load_multi_with_alias(void **state) { setup_multis("AB\nZH: NH, ZD,AA\nZH\nKL\n"); assert_int_equal(get_mult_count(), 3); check_multi(0, "AB"); check_multi(2, "ZH"); assert_int_equal(g_slist_length(get_aliases(2)), 3); } /* test matching of mults and aliases */ void test_match_length_no_match(void **state) { setup_multis("ZH:NHA,ZDL,AA,AAC\n"); assert_int_equal(get_matching_length("ABC",0), 0); } void test_match_length_match_mult(void **state) { setup_multis("ZH:NHA,ZDL,AA,AAC\n"); assert_int_equal(get_matching_length("12aZHXc",0), 2); } void test_match_length_match_alias(void **state) { setup_multis("ZH:NHA,ZDL,AA,AAC\n"); assert_int_equal(get_matching_length("12aAAX2",0), 2); } void test_match_length_match_alias2(void **state) { setup_multis("ZH:NHA,ZDL,AA,AAC\n"); assert_int_equal(get_matching_length("12aAAC2",0), 3); } /* addmult tests */ void test_wysiwyg_once(void **state) { wysiwyg_once = 1; strcpy(comment, "WAC "); assert_int_equal(addmult(), 0); assert_string_equal(multis[0].name, "WAC"); assert_int_equal(shownewmult, 0); } void test_wysiwyg_multi(void **state) { wysiwyg_multi = 1; strcpy(comment, "WAC "); assert_int_equal(addmult(), 0); assert_string_equal(multis[0].name, "WAC"); assert_int_equal(shownewmult, 0); } void test_wysiwyg_multi_empty(void **state) { wysiwyg_multi = 1; strcpy(comment, " "); addmult(); assert_int_equal(shownewmult, -1); } void test_serial_grid4(void **state) { serial_grid4_mult = 1; strcpy(section, "JO60LX"); assert_int_equal(addmult(), 0); assert_string_equal(multis[0].name, "JO60"); assert_int_equal(shownewmult, 0); } void test_serial_grid4_empty(void **state) { serial_grid4_mult = 1; addmult(); assert_int_equal(shownewmult, -1); } void test_arrlss(void **state) { arrlss = 1; setup_multis("SC\nSCV\n"); strcpy(ssexchange, "SCV"); addmult(); strcpy(ssexchange, "97A23SCV"); addmult(); strcpy(ssexchange, "KL"); addmult(); strcpy(ssexchange, "SC"); addmult(); assert_int_equal(nr_multis, 2); assert_string_equal(multis[0].name, "SCV"); assert_string_equal(multis[1].name, "SC"); } void test_serial_section_mult(void **state) { serial_section_mult = 1; setup_multis("NE\nONE\n"); strcpy(ssexchange, "ONE"); addmult(); strcpy(ssexchange, "023"); addmult(); strcpy(ssexchange, "NE"); addmult(); strcpy(ssexchange, "SC"); addmult(); assert_int_equal(nr_multis, 2); } void test_dx_arrlsections(void **state) { dx_arrlsections = 1; countrynr = w_cty; setup_multis("NE\nONE\n"); strcpy(ssexchange, "ONE"); addmult(); strcpy(ssexchange, "97A23SCV"); addmult(); strcpy(ssexchange, "NE"); addmult(); strcpy(ssexchange, "SC"); addmult(); assert_int_equal(nr_multis, 2); } /* addmult2 tests */ char logline[] = " 20CW 08-Feb-11 17:06 0025 W3ND 599 599 95 A 12 SCV 2 "; char logline_2[] = " 20CW 08-Feb-11 17:06 0025 W3ND 599 599 WAC 2 "; void test_arrlss_2(void **state) { arrlss = 1; setup_multis("SC\nSCV\n"); strcpy(lan_logline, logline); addmult2(); memcpy(lan_logline + 54, " 97 A 23 SCV", 12); addmult2(); memcpy(lan_logline + 63, "KL ", 3); addmult2(); memcpy(lan_logline + 63, "SC ", 3); addmult2(); assert_int_equal(nr_multis, 2); assert_string_equal(multis[0].name, "SCV"); assert_string_equal(multis[1].name, "SC"); } void test_wysiwyg_once_2(void **state) { wysiwyg_once = 1; strcpy(lan_logline, logline_2); assert_int_equal(addmult2(), 0); assert_string_equal(multis[0].name, "WAC"); assert_int_equal(shownewmult, 0); } void test_wysiwyg_multi_2(void **state) { wysiwyg_multi = 1; strcpy(lan_logline, logline_2); assert_int_equal(addmult2(), 0); assert_string_equal(multis[0].name, "WAC"); assert_int_equal(shownewmult, 0); } tlf-1.4.0/test/test_checklogfile.c0000644000175000017500000000516213562576621014044 00000000000000#include "test.h" #include "stdio.h" #include #include #include #include #include "../src/tlf.h" #include "../src/checklogfile.h" // OBJECT ../src/checklogfile.o // OBJECT ../src/err_utils.o // dummy void shownr(char *msg, int x) { } extern char logfile[]; /* setup / teardown */ void append_tofile (char *file, char * msg) { int fd; fd = open(file, O_WRONLY | O_APPEND ); (void)write (fd, msg, strlen(msg)); close(fd); } #define LOGLINE " 20CW 18-Jan-14 16:04 0111 N0CALL 599 599 33 W 3 14025.0\n" #define COMMENT "; Node A, 110 : comment \n" void append_line (int fd, char *msg) { (void)write (fd, msg, strlen(msg)); } void write_log(char * file) { int fd; fd = creat(file, 0644); for (int i = 0; i < 10; i++) { if (i == 8) append_line(fd, COMMENT); else append_line(fd, LOGLINE); } close(fd); } int setup_default(void **state) { strcpy (logfile, "test.log"); write_log(logfile); return 0; } int teardown_default(void **state) { remove(logfile); return 0; } /* verify that all log lines have correct length */ int check_log(char *file) { FILE *fp; char buffer[LOGLINELEN+5]; int result = 0; fp = fopen(file, "r"); while (fgets(buffer, LOGLINELEN + 5, fp)) { if (strlen(buffer) != LOGLINELEN) { result = 1; break; } if (buffer[LOGLINELEN - 1] != '\n') { result = 1; break; } } fclose(fp); return result; } /* verify check_log helper can detect errors */ void test_check_length_ok(void **state) { assert_int_equal(check_log(logfile), 0); } void test_check_to_Long(void **state) { append_tofile(logfile, " "); assert_int_equal(check_log(logfile), 1); } void test_check_no_newline(void **state) { for (int i = 0; i < LOGLINELEN ; i++) { append_tofile(logfile, " "); } assert_int_equal(check_log(logfile), 1); } /* checklogfile() shall check and fix logfile so that it conforms to the * following: * 1. each logfile should have lines with only LOGLINELEN as length */ /* 2. each line should end with an \n */ void test_file_length_ok(void **state) { checklogfile(); assert_int_equal(check_log(logfile), 0); } void test_file_length_short(void **state) { append_tofile(logfile, " "); checklogfile(); assert_int_equal(check_log(logfile), 0); } void test_file_length_long(void **state) { for (int i = 0; i < LOGLINELEN + 5; i++) { append_tofile(logfile, " "); } checklogfile(); assert_int_equal(check_log(logfile), 0); } tlf-1.4.0/test/run_zone_nr.c0000644000175000017500000000132613562576653012727 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include void test_bad_empty(void **state); void test_bad_nan(void **state); void test_ok_08(void **state); void test_ok_14(void **state); void test_ok__8(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_ok_08, NULL, NULL), cmocka_unit_test_setup_teardown(test_ok__8, NULL, NULL), cmocka_unit_test_setup_teardown(test_ok_14, NULL, NULL), cmocka_unit_test_setup_teardown(test_bad_empty, NULL, NULL), cmocka_unit_test_setup_teardown(test_bad_nan, NULL, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/data.c0000644000175000017500000003230013562576621011271 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2010-2014 Thomas Beierlein * 2013-2016 Ervin Hegedus - HA2OS * * 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 "../src/globalvars.h" #include "../src/tlf.h" #include "test.h" int lan_active = 0; char lastqsonr[5]; int prsock = 0; char pr_hostaddress[48] = "111.222.111.222"; char *config_file = NULL; int portnum = 0; int use_rxvt = 0; int use_xterm = 0; int debugflag = 0; int editor = EDITOR_JOE; char rttyoutput[120]; int tune_val = 0; int use_bandoutput = 0; int no_arrows = 0; int bandindexarray[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int cqwwm2 = 0; /* predefined contests */ int cqww = 0; int wpx = 0; int dxped = 0; int sprint = 0; int arrldx_usa = 0; int arrl_fd = 0; int arrlss = 0; int pacc_pa_flg = 0; int stewperry_flg = 0; int focm = 0; int universal = 0; int addcallarea; int pfxmult = 0; int pfxmultab = 0; int exc_cont = 0; int manise80; int other_flg; int one_point = 0; int two_point = 0; int three_point = 0; int ssbpoints; int cwpoints; int lowband_point_mult = 0; int sc_sidetone; char sc_volume[4] = ""; /* LZ3NY mods */ int my_country_points = -1; int my_cont_points = -1; int dx_cont_points = -1; char countrylist[255][6]; int countrylist_only = 0; int countrylist_points = -1; char continent_multiplier_list[7][3]; // SA, NA, EU, AF, AS and OC int continentlist_points = -1; int continentlist_only = 0; int exclude_multilist_type = 0; int mult_side = 0; /* end LZ3NY mods */ int portable_x2 = 0; int recall_mult = 0; int exchange_serial = 0; int wysiwyg_once = 0; int wysiwyg_multi = 0; int country_mult = 0; float fixedmult = 0.0; int sectn_mult = 0; int dx_arrlsections = 0; int serial_section_mult = 0; int serial_or_section = 0; /* exchange is serial OR section, like HA-DX */ int serial_grid4_mult = 0; int qso_once = 0; int addcallarea_once = 0; int noleadingzeros; int ctcomp = 0; int isdupe = 0; // 0 if nodupe -- for auto qso b4 (LZ3NY) int nob4 = 0; // allow auto b4 int ignoredupe = 0; int noautocq = 0; int emptydir = 0; int verbose = 0; int no_rst = 0; /* 1 - do not use RS/RST */ char myqra[7] = ""; int pacc_qsos[10][10]; int ve_cty; int w_cty; int zl_cty; int ja_cty; int py_cty; int ce_cty; int lu_cty; int vk_cty; int zs_cty; int ua9_cty; t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; int pfxnummultinr = 0; char multsfile[80] = ""; /* name of file with a list of allowed multipliers */ char exchange_list[40] = ""; int timeoffset = 0; int multi = 0; /* 0 = SO , 1 = MOST, 2 = MM */ int trxmode = CWMODE; /* RIG_MODE_NONE in hamlib/rig.h, but if hamlib not compiled, then no dependecy */ rmode_t rigmode = 0; int mixedmode = 0; char his_rst[4] = "599"; char my_rst[4] = "599"; char last_rst[4] = "599"; /* Report for last QSO */ int mults_per_band = 1; /* mults count per band */ int shortqsonr = LONGCW; /* 1 = short cw char in exchange */ int cluster = NOCLUSTER; /* 0 = OFF, 1 = FOLLOW, 2 = spots 3 = all */ int clusterlog = 0; /* clusterlog on/off */ int searchflg = 0; /* 1 = display search window */ int show_time = 0; int cqmode = CQ; /* 1 = CQ 0 = S&P */ int demode = 0; /* 1 = send DE before s&p call */ int contest = 0; /* 0 = General, 1 = contest */ int announcefilter = FILTER_ANN; /* filter cluster announcements */ int showscore_flag = 0; /* show score window */ int change_rst = 0; char exchange[40]; char whichcontest[40] = "qso"; int defer_store = 0; char call[20]; char logfile[120] = "general.log"; char *cabrillo = NULL; /*< Name of the cabrillo format definition */ char synclogfile[120]; char markerfile[120] = ""; int xplanet = 0; char sp_return[80] = " \n"; char cq_return[80] = " \n"; char message[25][80] = /**< Array of CW/DigiMode messages * * message[0]..[11] activated by F1..F12 key * message[12] - TU message S&P mode * message[13] - TU message CQ mode * message[14]..[23] activated by Alt-0..9 * message[24] - S&P call message * * special use: * * message[0] (F1) - 'cq message' in CQ mode, * 'de ' in S&P * message[2] (F3) - send rapport * message[4] (F5) - hiscall (used if '?' entered * in call field * message[6] (F7) - 'worked before' message * message[11] (F12) - used for auto-cq * * additional use if in CTCOMP mode * message[1] (F2) - insert pressed */ { "TEST %\n", "@ DE %\n", "@ [\n", "TU 73\n", " @\n", "%\n", "@ SRI QSO B4 GL\n", "AGN\n", " ?\n", " QRZ?\n", " PSE K\n", "TEST % %\n", "@ [\n", "TU %\n", "", "", "", "", "", "", "", "", "", "", "" }; char *digi_message[sizeof(message) / sizeof(message[0])]; char ph_message[14][80] = /**< Array of file names for voice keyer messages * See description of message[] */ { "", "", "", "", "", "", "", "", "", "", "", "", "", "" }; char qtc_recv_msgs[12][80] = {"QTC?\n", "QRV\n", "R\n", "", "TIME?\n", "CALL?\n", "NR?\n", "AGN\n", "", "QSL ALL\n", "", ""}; // QTC receive windowS Fx messages char qtc_send_msgs[12][80] = {"QRV?\n", "QTC sr/nr\n", "", "", "TIME\n", "CALL\n", "NR\n", "", "", "", "", ""}; // QTC send window Fx messages char qtc_phrecv_message[14][80] = { "", "", "", "", "", "", "", "", "", "", "", "" }; // voice keyer file names when receives QTC's char qtc_phsend_message[14][80] = { "", "", "", "", "", "", "", "", "", "", "", "" }; // voice keyer file names when send QTC's int qtcrec_record = 0; char qtcrec_record_command[2][50] = {"rec -q 8000", "-q &"}; char qtcrec_record_command_shutdown[50] = "pkill -SIGINT -n rec"; char qtc_cap_calls[40] = ""; int qtc_auto_filltime = 0; int qtcdirection = 0; int minitest = 0; char hiscall[20]; /**< call of other station */ char hiscall_sent[20] = ""; /**< part which was sent during early start */ int cwstart = 0; /**< number characters after which sending call started automatically, 0 - off, -1 - manual start */ int sending_call = 0; int early_started = 0; /**< 1 if sending call started early, strlen(hiscall)>cwstart or 'space' */ char lastcall[20]; char qsonrstr[5] = "0001"; char band[NBANDS][4] = { "160", " 80", " 40", " 30", " 20", " 17", " 15", " 12", " 10" }; char comment[80]; char mode[20] = "Log "; char cqzone[3] = ""; char mycqzone[3] = ""; char ituzone[3] = ""; char continent[3] = ""; char mycontinent[3] = ""; char pxstr[11] = ""; int bandindex = 0; int totalmults = 0; int totalcountries = 0; int totalzones = 0; int secs = 0; int countrynr; int mycountrynr = 215; int total = 0; /**< total number of qso points */ int band_score[NBANDS]; int dupe = 0; int callfound = 0; int partials = 0; /**< show partial calls */ int use_part = 0; /**< if 1 use automatically found partial call */ int block_part = 0; /**< if 1 block the call autocompletion for these QSO */ char para_word[80] = "LODNCFS:3C\n"; /* longcw, cluster, search, DE, contest, filter, speed, delay */ char lastmsg[1000] = ""; int scale_values[20] = { 40, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2 }; char sc_device[40] = "/dev/dsp"; /*-------------------------------------keyer------------------------------*/ int keyerport = NO_KEYER; int txdelay = 0; int weight = 0; char weightbuf[4]; char tonestr[5] = "600"; int cqdelay = 8; char wkeyerbuffer[400]; int data_ready = 0; char keyer_device[10] = ""; // ttyS0, ttyS1, lp0-2 int k_tune; int k_pin14; int k_ptt; char controllerport[80] = "/dev/ttyS0"; int miniterm = 0; /* is miniterm for digimode active? */ char modem_mode[8]; int commentfield = 0; /* 1 if we are in comment/excahnge input */ /*-------------------------------------packet-------------------------------*/ char spot_ptr[MAX_SPOTS][82]; /* Array of cluster spot lines */ int nr_of_spots; /* Anzahl Lines in spot_ptr array */ char lastwwv[120] = ""; int packetinterface = 0; int fdSertnc = 0; int fdFIFO = 0; int tncport = 1; char tncportname[40]; char rigconf[80]; int in_packetclient; int tnc_serial_rate = 2400; char clusterlogin[80] = ""; int bmautoadd = 0; int bmautograb = 0; /*-------------------------------------rigctl-------------------------------*/ #ifdef HAVE_LIBHAMLIB rig_model_t myrig_model = 351; RIG *my_rig; /* handle to rig (instance) */ freq_t outfreq; /* output to rig */ rmode_t rmode; /* radio mode of operation */ pbwidth_t width; vfo_t vfo; /* vfo selection */ port_t myport; #else int outfreq; /* output to rig */ #endif int ssb_bandwidth = 3000; int cw_bandwidth = 0; int serial_rate = 2400; char rigportname[40]; int rignumber = 0; int rig_comm_error = 0; int rig_comm_success = 0; /*---------------------------------simulator-------------------------------*/ int simulator = 0; int simulator_mode = 0; int simulator_seed = 8327; int system_secs; char tonecpy[5]; char simulator_tone[5]; /*-------------------------------the log lines-----------------------------*/ char qsos[MAX_QSOS][LOGLINELEN + 1]; int nr_qsos = 0; /*------------------------------dupe array---------------------------------*/ int nr_worked = 0; /*< number of calls in worked[] */ struct worked_t worked[MAX_CALLS]; /*< worked stations */ /*----------------------statistic of worked countries,zones ... -----------*/ int countries[MAX_DATALINES]; /* per country bit fieldwith worked bands set */ int zones[MAX_ZONES]; /* same for cq zones or itu zones; using 1 - 40 or 1 - 90 */ char mults[MAX_MULTS][12]; int mult_bands[MAX_MULTS]; int multarray_nr = 0; int multlist = 0; int callareas[20]; int multscore[NBANDS]; struct ie_list *main_ie_list; /* head of initial exchange list */ int zonescore[NBANDS]; int countryscore[NBANDS]; int zonedisplay = 0; char zone_fix[3] = ""; int addzone = 0; /* flag for new zone */ int addcty = 0; /* flag for new country */ int shownewmult = -1; int minute_timer = 0; int bandinx = BANDINDEX_40; /* start with 40m */ int qsonum = 1; /* nr of next QSO */ int ymax, xmax; /* screen size */ char zone_export[3] = " "; pid_t pid; struct tm *time_ptr; freq_t freq; freq_t mem; int logfrequency = 0; int rit; int trx_control = 0; int showfreq = 0; freq_t bandfrequency[9] = { 1830000.0, 3525000.0, 7010000.0, 10105000.0, 14025000.0, 18070000.0, 21025000.0, 24900000.0, 28025000.0 }; char headerline[81] = " 1=CQ 2=DE 3=RST 4=73 5=HIS 6=MY 7=B4 8=AGN 9=? \n"; char backgrnd_str[81] = " "; char logline_edit[5][LOGLINELEN + 1]; char terminal1[88] = ""; char terminal2[88] = ""; char terminal3[88] = ""; char terminal4[88] = ""; char termbuf[88] = ""; int termbufcount = 0; double QTH_Lat = 51.; double QTH_Long = -7.; double DEST_Lat = 51.; double DEST_Long = 1.; double r = 50; int m = 1; char hiscountry[40]; int this_second; int stop_backgrnd_process = 1; /* dont start until we know what we are doing */ int wazmult = 0; /* to add the ability of WAZ zones to be multiplier */ int itumult = 0; /* to add the ability of ITU zones to be multiplier */ char itustr[3]; int nopacket = 0; /* set if tlf is called with '-n' */ int no_trx_control = 0; /* set if tlf is called with '-r' */ int bandweight_points[NBANDS] = {1, 1, 1, 1, 1, 1, 1, 1, 1}; int bandweight_multis[NBANDS] = {1, 1, 1, 1, 1, 1, 1, 1, 1}; struct mults_t multis[MAX_MULTS]; /**< worked multis */ int nr_multis = 0; /**< number of multis in multis[] */ int unique_call_multi = 0; /* do we count calls as multiplier */ ////////////////// char ssexchange[30] = ""; // defined in getexchange.c char section[8] = ""; // defined in getexchange.c char lan_logline[256]; // defined in lancode.c ////////////////// int send_lan_message(int opcode, char *message) { return 0; } #include NCURSES_EXPORT_VAR(WINDOW *) stdscr = NULL; int wattr_on(WINDOW *win, attr_t attrs, void *opts) { return 0; } void displayit() { } int netkeyer(int cw_op, char *cwmessage) { return 0; } char mvprintw_history[NLAST][LINESZ]; void clear_mvprintw_history() { for (int i = 0; i < NLAST; ++i) { mvprintw_history[i][0] = 0; } } int mvprintw(int y, int x, const char *fmt, ...) { // shift history for (int i = NLAST - 1; i >= 1; --i) { strcpy(mvprintw_history[i], mvprintw_history[i - 1]); } va_list args; va_start(args, fmt); sprintf(mvprintw_history[0], "%02d|%02d|", y, x); vsnprintf(mvprintw_history[0] + 6, 100 - 6, fmt, args); va_end(args); return 0; } int mvwprintw(WINDOW *win, int y, int x, const char *fmt, ...) { va_list args; va_start(args, fmt); mvprintw(y, x, fmt, args); va_end(args); return 0; } tlf-1.4.0/test/run_initial_exchange.c0000644000175000017500000000237713562576653014557 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); int teardown_default(void **state); void test_empty_call(void **state); void test_long_line(void **state); void test_no_comma(void **state); void test_no_file(void **state); void test_ok(void **state); void test_ok_dos(void **state); void test_ok_multi_column(void **state); void test_ok_tab(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_no_file, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_ok, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_ok_dos, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_long_line, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_no_comma, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_ok_tab, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_empty_call, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_ok_multi_column, setup_default, teardown_default), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/test_searchlog.c0000644000175000017500000002072013562576621013371 00000000000000#include "test.h" #include "../src/globalvars.h" #include "../src/tlf_curses.h" #include "../src/tlf_panel.h" #include "../src/searchlog.h" #include "../src/dxcc.h" // OBJECT ../src/addmult.o // OBJECT ../src/bands.o // OBJECT ../src/searchlog.o // OBJECT ../src/zone_nr.o // OBJECT ../src/searchcallarray.o // OBJECT ../src/nicebox.o // OBJECT ../src/qtcutil.o // OBJECT ../src/printcall.o // OBJECT ../src/err_utils.o extern WINDOW *search_win; extern PANEL *search_panel; extern int nr_bands; extern int searchflg; extern int use_part; extern int partials; extern int cqww; extern char zone_export[]; extern char zone_fix[]; extern char searchresult[MAX_CALLS][82]; extern char result[MAX_CALLS][82]; void handlePartials(void); void filterLog(); int bandstr2line(char *buffer); int getZone(void); /*********************/ // mocks // stoptx.c int stoptx() { return 0; } // ui_utils.c int modify_attr(int attr) { return attr; } // get_time.c void get_time(void) { } // getpx.c void getpx(char *checkcall) { } // dxcc.c static dxcc_data dummy_dxcc = { "Noland", 1, 2, "NO", 34, 56, 7, "QQ", false }; dxcc_data *dxcc_by_index(unsigned int index) { return &dummy_dxcc; } // getctydata.c int getctydata(char *checkcallptr) { return 0; } /*********************/ #define QSO1 " 40SSB 12-Jan-18 16:34 0006 SP9ABC 599 599 15 1 " #define QSO2 " 40CW 12-Jan-18 11:42 0127 K4DEF 599 599 05 3 7026.1" #define QSO3 " 40CW 12-Jan-18 16:34 0007 OE3UAI 599 599 15 OE 1 " #define QSO4 " 80SSB 12-Jan-18 16:34 0008 UA3JK 599 599 16 UA 16 1 " #define QSO5 " 80CW 12-Jan-18 16:34 0009 UA9LM 599 599 17 UA9 17 3 " #define QSO6 " 80CW 12-Jan-18 16:36 0010 AA3BP 599 599 05 K 05 3 " static void write_qsos() { int i; for (i = 0; i < MAX_QSOS; i++) { strcpy (qsos[i], ""); } strcpy (qsos[0], QSO1); strcpy (qsos[1], QSO2); strcpy (qsos[2], QSO3); strcpy (qsos[3], QSO4); strcpy (qsos[4], QSO5); strcpy (qsos[5], QSO6); } int setup_default(void **state) { showmsg_spy = showstring_spy1 = showstring_spy2 = STRING_NOT_SET; arrlss = 0; dxped = 0; contest = 0; search_win = NULL; searchflg = SEARCHWINDOW; trxmode = CWMODE; callmaster_filename = NULL; partials = 1; use_part = 0; strcpy(zone_export, ""); strcpy(zone_fix, ""); clear_mvprintw_history(); write_qsos(); return 0; } static void check_mvprintw_output(int index, int y, int x, const char *text) { char buffer[7]; sprintf(buffer, "%02d|%02d|", y, x); assert_memory_equal(mvprintw_history[index], buffer, 6); assert_string_equal(mvprintw_history[index] + 6, text); } // callmaster is checked first in current directory, // create it there static void write_callmaster(const char *filename, const char *content) { FILE *f = fopen(filename, "w"); assert_non_null(f); fputs(content, f); fclose(f); } static void remove_callmaster() { unlink("callmaster"); // no need to check if file exists unlink("master.scp"); } int teardown_default(void **state) { remove_callmaster(); return 0; } //void test_callmaster_no_file(void **state) { // remove_callmaster(); // int n = load_callmaster(); // assert_int_equal(n, 0); // assert_string_equal(showmsg_spy, STRING_NOT_SET); // assert_string_equal(showstring_spy1, STRING_NOT_SET); // assert_string_equal(showstring_spy2, STRING_NOT_SET); //} void test_callmaster_ok(void **state) { write_callmaster("callmaster", "# data\nA1AA\nA2BB\n\n"); int n = load_callmaster(); assert_int_equal(n, 2); assert_string_equal(CALLMASTERARRAY(0), "A1AA"); assert_string_equal(CALLMASTERARRAY(1), "A2BB"); } void test_callmaster_ok_dos(void **state) { write_callmaster("callmaster", "# data\r\nA1AA\r\nA2BB\r\n\r\n"); int n = load_callmaster(); assert_int_equal(n, 2); assert_string_equal(CALLMASTERARRAY(0), "A1AA"); assert_string_equal(CALLMASTERARRAY(1), "A2BB"); } void test_callmaster_ok_spaces(void **state) { write_callmaster("callmaster", " # data \n A1AA \n A2BB \n\n"); int n = load_callmaster(); assert_int_equal(n, 2); assert_string_equal(CALLMASTERARRAY(0), "A1AA"); assert_string_equal(CALLMASTERARRAY(1), "A2BB"); } void test_callmaster_ok_arrlss(void **state) { write_callmaster("callmaster", "# data\nA1AA\nG0CC\nN2BB\n\n"); arrlss = 1; int n = load_callmaster(); assert_int_equal(n, 2); assert_string_equal(CALLMASTERARRAY(0), "A1AA"); assert_string_equal(CALLMASTERARRAY(1), "N2BB"); } void test_use_different_callmaster(void **state) { write_callmaster("callmaster", " # data \n A1AA \n A2BB \n\n"); write_callmaster("master.scp", " # data \n A1CC \n A2DD \n\n"); callmaster_filename = "master.scp"; int n = load_callmaster(); assert_int_equal(n, 2); assert_string_equal(CALLMASTERARRAY(0), "A1CC"); } void test_init_search_panel_no_contest(void **state) { InitSearchPanel(); assert_int_equal(nr_bands, 9); } void test_init_search_panel_contest(void **state) { contest = 1; InitSearchPanel(); assert_int_equal(nr_bands, 6); } void test_init_search_panel_dxped(void **state) { dxped = 1; InitSearchPanel(); assert_int_equal(nr_bands, 9); } /* testing searchlog for refactoring */ void test_searchlog_pickup_call(void **state) { strcpy (hiscall, "UA"); filterLog(""); assert_int_equal (strncmp(searchresult[0], QSO3, 80), 0); assert_int_equal (strncmp(searchresult[1], QSO4, 80), 0); assert_int_equal (strncmp(searchresult[2], QSO5, 80), 0); } void test_searchlog_extract_data(void **state) { strcpy (hiscall, "UA"); filterLog(""); assert_string_equal (result[0], " 40CW 0007 OE3UAI 15 "); assert_string_equal (result[1], " 80SSB 0008 UA3JK 16 "); } void test_bandstr2line(void **state) { assert_int_equal( bandstr2line( " 10"), 1); assert_int_equal( bandstr2line( " 15"), 2); assert_int_equal( bandstr2line( " 20"), 3); assert_int_equal( bandstr2line( " 40"), 4); assert_int_equal( bandstr2line( " 80"), 5); assert_int_equal( bandstr2line( "160"), 6); assert_int_equal( bandstr2line( " 12"), 7); assert_int_equal( bandstr2line( " 17"), 8); assert_int_equal( bandstr2line( " 30"), 9); } /* testing pickup call suggestion for USEPARTIAL */ void test_UsePartialFromLog (void **state) { use_part = 1; strcpy(hiscall, "K4DE"); filterLog(); handlePartials(); assert_string_equal( hiscall, "K4DEF"); } void test_UsePartialFromLogNotUnique (void **state) { use_part = 1; strcpy(hiscall, "UA"); filterLog(); handlePartials(); assert_string_equal( hiscall, "UA"); } void test_UsePartialFromCallmaster(void **state) { write_callmaster("callmaster", "# data\nA1AA\nA2BB\n\n"); load_callmaster(); use_part = 1; strcpy(hiscall, "A1"); filterLog(); handlePartials(); assert_string_equal( hiscall, "A1AA"); } void test_UsePartialNotUnique(void **state) { write_callmaster("callmaster", "# data\nA1AA\nA2BB\nA3BB\n"); load_callmaster(); use_part = 1; strcpy(hiscall, "A3"); filterLog(); handlePartials(); assert_string_equal( hiscall, "A3"); } /* test lookup of zone - will be used for display if already worked * - normally determined from countryinformation * - can be picked up from previous qso if we have full match * - or overwritten in exchange field */ void test_ZoneFromCountry(void **state) { cqww = 1; strcpy(zone_export, "15"); strcpy( hiscall, "OH2"); filterLog(); assert_int_equal (getZone(), 15); } void test_ZoneFromExchange(void **state) { cqww = 1; strcpy(zone_fix, "14"); strcpy(zone_export, "15"); strcpy( hiscall, "OH2"); filterLog(); assert_int_equal (getZone(), 14); } void test_ZoneFromLog(void **state) { cqww = 1; strcpy(zone_export, "14"); strcpy( hiscall, "SP9"); filterLog(); assert_int_equal (getZone(), 15); } /* test position of output on lower border of search window */ void test_OnLowerSearchPanel_contest(void **state) { contest = 1; OnLowerSearchPanel(4, "test"); check_mvprintw_output(0, 7, 4, "test"); } void test_OnLowerSearchPanel_AllBand(void **state) { dxped = 1; OnLowerSearchPanel(4, "test"); check_mvprintw_output(0, 10, 4, "test"); } tlf-1.4.0/test/run_sendbuf.c0000644000175000017500000000451613562576653012707 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); int teardown_default(void **state); void test_expandCall(void **state); void test_expandHisNr(void **state); void test_expandHisRST(void **state); void test_expandHisRSTshort(void **state); void test_expandHiscall(void **state); void test_expandQsoNr(void **state); void test_expandQsoNrshort(void **state); void test_noexpand(void **state); void test_prepareSPcallCWDeMode(void **state); void test_prepareSPcallCWnoDeMode(void **state); void test_prepareSPcallDIGIDeMode(void **state); void test_prepareSPcallDIGInoDeMode(void **state); void test_prepareSPcallMFJDeMode(void **state); void test_prepareSPcallMFJnoDeMode(void **state); void test_replace_all(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_replace_all, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_noexpand, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_expandCall, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_expandHiscall, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_expandHisRST, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_expandHisRSTshort, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_expandQsoNr, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_expandQsoNrshort, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_expandHisNr, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_prepareSPcallCWnoDeMode, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_prepareSPcallCWDeMode, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_prepareSPcallDIGInoDeMode, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_prepareSPcallDIGIDeMode, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_prepareSPcallMFJnoDeMode, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_prepareSPcallMFJDeMode, setup_default, teardown_default), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/run_searchlog.c0000644000175000017500000000623113562576653013224 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); int teardown_default(void **state); void test_OnLowerSearchPanel_AllBand(void **state); void test_OnLowerSearchPanel_contest(void **state); void test_UsePartialFromCallmaster(void **state); void test_UsePartialFromLog (void **state); void test_UsePartialFromLogNotUnique (void **state); void test_UsePartialNotUnique(void **state); void test_ZoneFromCountry(void **state); void test_ZoneFromExchange(void **state); void test_ZoneFromLog(void **state); void test_bandstr2line(void **state); void test_callmaster_ok(void **state); void test_callmaster_ok_arrlss(void **state); void test_callmaster_ok_dos(void **state); void test_callmaster_ok_spaces(void **state); void test_init_search_panel_contest(void **state); void test_init_search_panel_dxped(void **state); void test_init_search_panel_no_contest(void **state); void test_searchlog_extract_data(void **state); void test_searchlog_pickup_call(void **state); void test_use_different_callmaster(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_callmaster_ok, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_callmaster_ok_dos, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_callmaster_ok_spaces, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_callmaster_ok_arrlss, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_use_different_callmaster, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_init_search_panel_no_contest, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_init_search_panel_contest, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_init_search_panel_dxped, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_searchlog_pickup_call, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_searchlog_extract_data, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_bandstr2line, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_UsePartialFromLog, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_UsePartialFromLogNotUnique, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_UsePartialFromCallmaster, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_UsePartialNotUnique, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_ZoneFromCountry, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_ZoneFromExchange, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_ZoneFromLog, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_OnLowerSearchPanel_contest, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_OnLowerSearchPanel_AllBand, setup_default, teardown_default), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/run_addpfx.c0000644000175000017500000000263213562576653012524 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); void test_addKnown(void **state); void test_addKnownMultiband(void **state); void test_addOne(void **state); void test_addOneTwoBands(void **state); void test_addOneTwoTimes(void **state); void test_addTwoSameBand(void **state); void test_addTwoTwoBands(void **state); void test_addUnknown(void **state); void test_initPfx(void **state); void test_outOfBand(void ** state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_initPfx, setup_default, NULL), cmocka_unit_test_setup_teardown(test_outOfBand, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addOne, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addOneTwoTimes, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addOneTwoBands, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addTwoSameBand, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addTwoTwoBands, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addKnown, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addUnknown, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addKnownMultiband, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/run_getctydata.c0000644000175000017500000000305013562576653013402 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_default(void **state); void test_abnormal_call(void **state); void test_is_wpx(void **state); void test_location_known(void **state); void test_location_unknown(void **state); void test_location_unknown_used(void **state); void test_no_wpx(void **state); void test_same_result(void **data); void test_someidea(void **data); void test_suffix_empty(void **state); void test_suffix_getctydata(void **state); void test_suffix_getctynr(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_location_known, setup_default, NULL), cmocka_unit_test_setup_teardown(test_location_unknown, setup_default, NULL), cmocka_unit_test_setup_teardown(test_suffix_empty, setup_default, NULL), cmocka_unit_test_setup_teardown(test_location_unknown_used, setup_default, NULL), cmocka_unit_test_setup_teardown(test_suffix_getctynr, setup_default, NULL), cmocka_unit_test_setup_teardown(test_suffix_getctydata, setup_default, NULL), cmocka_unit_test_setup_teardown(test_someidea, setup_default, NULL), cmocka_unit_test_setup_teardown(test_same_result, setup_default, NULL), cmocka_unit_test_setup_teardown(test_no_wpx, setup_default, NULL), cmocka_unit_test_setup_teardown(test_is_wpx, setup_default, NULL), cmocka_unit_test_setup_teardown(test_abnormal_call, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/test_score.c0000644000175000017500000001542713562576621012545 00000000000000#include "test.h" #include "../src/score.h" #include "../src/tlf.h" #include "../src/dxcc.h" #include "../src/globalvars.h" // OBJECT ../src/score.o // OBJECT ../src/addmult.o // OBJECT ../src/bands.o // OBJECT ../src/dxcc.o // OBJECT ../src/focm.o // OBJECT ../src/getctydata.o // OBJECT ../src/qrb.o // OBJECT ../src/locator2longlat.o // OBJECT ../src/getpx.o // =========== // these are missing from globalvars extern int dupe; extern int cwpoints; extern int ssbpoints; extern int mycountrynr; extern int my_country_points; extern int my_cont_points; extern int dx_cont_points; extern int countrylist_only; extern int countrylist_points; extern char countrylist[][6]; extern int continentlist_only; extern int continentlist_points; extern char mycontinent[]; extern char continent_multiplier_list[7][3]; extern int lowband_point_mult; extern int portable_x2; // =========== #define check_points(point) \ do{ assert_int_equal(score(), point); }while(0) #define check_call_points(call,point) \ do{ strcpy(hiscall, call); \ assert_int_equal(score(), point); }while(0) #if 0 void __wrap_qrb(char *x, char *y, char *u, char *v, double *a, double *b) { } int __wrap_foc_score() { return 0; } #endif int setup(void **state) { strcpy(myqra, "jo60lx"); strcpy(mycontinent, "EU"); mycountrynr = 95; /* DL */ w_cty = 184; /* W */ ve_cty = 283; /* VE */ trxmode = CWMODE; return 0; } int setup_default(void **state) { cqww = 0; wpx = 0; pfxmult = 0; arrl_fd = 0; dupe = 0; arrldx_usa = 0; one_point = 0; two_point = 0; three_point = 0; my_country_points = -1; my_cont_points = -1; dx_cont_points = -1; countrylist_only = 0; countrylist_points = -1; strcpy(countrylist[0], ""); continentlist_only = 0; continentlist_points = -1; strcpy(continent_multiplier_list[0], ""); strcpy(mycontinent, "EU"); lowband_point_mult = 0; portable_x2 = 0; return 0; } int setup_ssbcw(void **state) { char filename[100]; setup_default(state); /* TODO */ /* load_ctydata needs means to destroy the database */ strcpy(filename, TOP_SRCDIR); strcat(filename, "/share/cty.dat"); assert_int_equal(load_ctydata(filename), 0); return 0; } void test_dupe(void **state) { dupe = 1; check_points(0); } int teardown_default(void **state) { return 0; } void test_wpx(void **state) { wpx = 1; pfxmult = 0; /* same country */ countrynr = mycountrynr; check_points(1); /* different continents */ countrynr = 2; strcpy(continent, "AF"); bandinx = BANDINDEX_20; check_points(3); bandinx = BANDINDEX_40; check_points(6); /* same continent, not NA */ strcpy(continent, mycontinent); bandinx = BANDINDEX_20; check_points(1); bandinx = BANDINDEX_40; check_points(2); /* same continent, NA */ strcpy(mycontinent, "NA"); strcpy(continent, mycontinent); bandinx = BANDINDEX_20; check_points(2); bandinx = BANDINDEX_40; check_points(4); } void test_cqww(void **state) { cqww = 1; countrynr = mycountrynr; check_points(0); countrynr = 2; strcpy(continent, "EU"); strcpy(mycontinent, "EU"); check_points(1); strcpy(continent, "NA"); strcpy(mycontinent, "NA"); check_points(2); strcpy(continent, "EU"); strcpy(mycontinent, "NA"); check_points(3); } void test_arrl_fd(void **state) { arrl_fd = 1; trxmode = CWMODE; check_points(2); trxmode = SSBMODE; check_points(1); } void test_simple_points(void **state) { one_point = 1; check_points(1); one_point = 0; two_point = 1; check_points(2); two_point = 0; three_point = 1; check_points(3); } void test_arrldx_usa(void **state) { arrldx_usa = 1; countrynr = w_cty; check_points(0); countrynr = ve_cty; check_points(0); countrynr = mycountrynr; check_points(3); } void test_ssbcw(void **state) { check_points(0); ssbpoints = 3; check_points(0); cwpoints = 4; trxmode = CWMODE; check_points(4); trxmode = SSBMODE; check_points(3); lowband_point_mult = 1; bandinx = BANDINDEX_30; check_points(3); bandinx = BANDINDEX_40; check_points(6); portable_x2 = 1; check_call_points("DL3XYZ", 6); check_call_points("DL3XYZ/P", 12); trxmode = DIGIMODE; check_points(0); ssbpoints = 0; check_points(0); } static void init_countrylist() { strcpy(countrylist[0], "OE"); strcpy(countrylist[1], "DL"); strcpy(countrylist[2], "W"); strcpy(countrylist[3], ""); } void test_country_found(void **state) { /* nothing to find in empty list */ strcpy(hiscall, "LZ1AB"); assert_int_equal(country_found(""), 0); strcpy(hiscall, "DL3XYZ"); assert_int_equal(country_found(""), 0); init_countrylist(); strcpy(hiscall, "LZ1AB"); assert_int_equal(country_found(""), 0); strcpy(hiscall, "DL3XYZ"); assert_int_equal(country_found(""), 1); strcpy(hiscall, "K3LA"); assert_int_equal(country_found(""), 1); } void test_scoreByCorC_listOnly(void **state) { countrylist_only = 1; check_call_points("LZ1AB", 0); check_call_points("DL3XYZ", 0); init_countrylist(); check_call_points("LZ1AB", 0); check_call_points("DL3XYZ", 0); countrylist_points = 4; check_call_points("LZ1AB", 0); check_call_points("DL3XYZ", 4); } void test_scoreByCorC_notInList(void **state) { /* my_country/cont_points and dx_cont_points not set */ check_call_points("DL3XYZ", 0); check_call_points("LZ1AB", 0); check_call_points("K3XX", 0); dx_cont_points = 4; check_call_points("DL3XYZ", 0); check_call_points("LZ1AB", 0); check_call_points("K3XX", 4); my_cont_points = 3; check_call_points("DL3XYZ", 3); check_call_points("LZ1AB", 3); check_call_points("K3XX", 4); my_country_points = 1; check_call_points("DL3XYZ", 1); check_call_points("LZ1AB", 3); check_call_points("K3XX", 4); } void test_scoreByCorC_InList(void **state) { init_countrylist(); /* countrylist_points, my_country_points and my_cont_points * not set -> 0 points for all */ check_call_points("OE2BL", 0); check_call_points("DL3XYZ", 0); check_call_points("K3XX", 0); /* only countrylist_points set -> use my_country/cont_points for * my own country , otherwise 0 ??? */ countrylist_points = 3; check_call_points("OE2BL", 3); check_call_points("DL3XYZ", 0); check_call_points("K3XX", 3); my_cont_points = 2; check_call_points("OE2BL", 3); check_call_points("DL3XYZ", 2); check_call_points("K3XX", 3); my_country_points = 1; check_call_points("OE2BL", 3); check_call_points("DL3XYZ", 1); check_call_points("K3XX", 3); } tlf-1.4.0/test/test_getctydata.c0000644000175000017500000000570413562576621013560 00000000000000#include "test.h" #include "../src/tlf.h" #include "../src/dxcc.h" #include "../src/readctydata.h" #include "../src/globalvars.h" #include "../src/getctydata.h" // OBJECT ../src/dxcc.o // OBJECT ../src/getctydata.o // OBJECT ../src/getpx.o /* export internal function */ int location_unknown(char *call); int getpfxindex(char *checkcallptr, char **normalized_call); char countrylist[255][6]; int setup_default(void **state) { char filename[100]; wpx = 0; pfxmult = 0; strcpy(countrylist[0], ""); strcpy(filename, TOP_SRCDIR); strcat(filename, "/share/cty.dat"); assert_int_equal(load_ctydata(filename), 0); return 0; } void test_location_known(void **state) { assert_int_equal(location_unknown("LA3BB"), 0); assert_int_equal(location_unknown("LA3BB/P"), 0); } void test_location_unknown(void **state) { assert_int_equal(location_unknown("LA3BB/MM"), 1); assert_int_equal(location_unknown("LA3BB/AM"), 1); } void test_suffix_empty(void **state) { assert_int_equal(getpfxindex("", NULL), -1); assert_int_equal(getctynr(""), 0); assert_int_equal(getctydata(""), 0); } void test_location_unknown_used(void **state) { assert_int_equal(getpfxindex("LA3BB/AM", NULL), -1); assert_int_equal(getctynr("LA3BB/AM"), 0); assert_int_equal(getctydata("LA3BB/AM"), 0); } /* getctynr */ void test_suffix_getctynr(void **state) { assert_int_not_equal(getctynr("LA3BB"), 0); assert_int_not_equal(getctynr("LA3BB/QRP"), 0); assert_int_equal(getctynr("LA3BB/QRP"), getctynr("LA3BB")); } /* getctydata */ void test_suffix_getctydata(void **state) { assert_int_not_equal(getctydata("LA3BB"), 0); assert_int_not_equal(getctydata("LA3BB/QRP"), 0); } void test_someidea(void **data) { assert_int_not_equal(getpfxindex("DJ0LN/A", NULL), -1); assert_int_not_equal(getpfxindex("PA/DJ0LN/P", NULL), -1); assert_int_not_equal(getpfxindex("DJ0LN/P", NULL), -1); assert_int_not_equal(getpfxindex("DJ0LN/PA/P", NULL), -1); assert_int_not_equal(getpfxindex("K32A/4", NULL), -1); assert_int_not_equal(getpfxindex("R3A/PA", NULL), -1); assert_int_not_equal(getpfxindex("DJ/PA3LM", NULL), -1); } #define check(x) (assert_int_equal(getctynr(x), getctydata(x))) void test_same_result(void **data) { check("DJ0LN/A"); check("PA/DJ0LN/P"); check("DJ0LN/P"); check("DJ0LN/PA/P"); check("K32A/4"); check("R3A/PA"); check("DJ/PA3LM"); check("9A70DP/KA"); } void test_no_wpx(void **state) { int nr; wpx = 0; pxstr[0] = '\0'; nr = getctydata("DJ/PA3LM"); assert_string_equal(pxstr, ""); assert_int_equal(getctydata("DL"), nr); } void test_is_wpx(void **state) { int nr; wpx = 1; pxstr[0] = '\0'; nr = getctydata("DJ/PA3LM"); assert_string_equal(pxstr, "DJ0"); assert_int_equal(getctydata("DL"), nr); } void test_abnormal_call(void **state) { int nr; nr = getctydata("ET3AA/YOTA"); assert_int_equal(getctydata("ET"), nr); } tlf-1.4.0/test/test_prefix.c0000644000175000017500000000275013562576621012722 00000000000000#include "test.h" #include "../src/getpx.h" // OBJECT ../src/getpx.o /* internal function, not exported */ int letters_only(const char *call); #define check(call, pfx) \ do{ getpx(call); assert_string_equal(pxstr, pfx); }while(0) extern char pxstr[]; void test_letters_only_yes(void **state) { assert_int_equal(letters_only("RAEM"), 1); assert_int_equal(letters_only("XEFTJW"), 1); } void test_letters_only_no(void **state) { assert_int_equal(letters_only("DL1JBE"), 0); assert_int_equal(letters_only("XEFTJW/3"), 0); } void test_simple_calls(void **state) { check("DL1JBE", "DL1"); check("K9W", "K9"); check("Z35LA", "Z35"); check("ZS66DW", "ZS66"); check("U3NBL", "U3"); check("3D2AB", "3D2"); check("3D20AB", "3D20"); check("LY1000IARU", "LY1000"); check("DL60CHILD", "DL60"); check("9A800VZ", "9A800"); check("DR2006Q", "DR2006"); check("R3A", "R3"); } void test_other_callarea(void **state) { check("DL1JBE/3", "DL3"); check("WN5N/7", "WN7"); check("KH6XXX/4", "KH4"); } void test_other_country(void **state) { check("PA0/DL1JBE", "PA0"); check("PA/DL1JBE", "PA0"); check("PA2/DL1JBE", "PA2"); check("LX/WN5N", "LX0"); check("J6/DL1JBE", "J6"); check("KH4/KH6XX", "KH4"); check("OE/K5ZD", "OE0"); } void test_nodigit(void **state) { check("RAEM", "RA0"); check("XEFTJW", "XE0"); } void test_reported(void **state) { check("K3A/2", "K2"); // check("KL32A/4", "KL32"); } tlf-1.4.0/test/run_prefix.c0000644000175000017500000000175213562576653012555 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include void test_letters_only_no(void **state); void test_letters_only_yes(void **state); void test_nodigit(void **state); void test_other_callarea(void **state); void test_other_country(void **state); void test_reported(void **state); void test_simple_calls(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_letters_only_yes, NULL, NULL), cmocka_unit_test_setup_teardown(test_letters_only_no, NULL, NULL), cmocka_unit_test_setup_teardown(test_simple_calls, NULL, NULL), cmocka_unit_test_setup_teardown(test_other_callarea, NULL, NULL), cmocka_unit_test_setup_teardown(test_other_country, NULL, NULL), cmocka_unit_test_setup_teardown(test_nodigit, NULL, NULL), cmocka_unit_test_setup_teardown(test_reported, NULL, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/test/run_score.c0000644000175000017500000000333713562576653012374 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup(void **state); int setup_default(void **state); int setup_ssbcw(void **state); int teardown_default(void **state); void test_arrl_fd(void **state); void test_arrldx_usa(void **state); void test_country_found(void **state); void test_cqww(void **state); void test_dupe(void **state); void test_scoreByCorC_InList(void **state); void test_scoreByCorC_listOnly(void **state); void test_scoreByCorC_notInList(void **state); void test_simple_points(void **state); void test_ssbcw(void **state); void test_wpx(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_dupe, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_wpx, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_cqww, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_arrl_fd, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_simple_points, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_arrldx_usa, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_ssbcw, setup_ssbcw, teardown_default), cmocka_unit_test_setup_teardown(test_country_found, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_scoreByCorC_listOnly, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_scoreByCorC_notInList, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_scoreByCorC_InList, setup_default, teardown_default), }; return cmocka_run_group_tests(tests, setup, NULL); } tlf-1.4.0/test/defs.am0000644000175000017500000000632513562576653011471 00000000000000# generated on Tue Nov 12 19:44:59 2019 TESTS = run_addcall run_addmult run_addpfx run_bands run_cabrillo run_checklogfile run_clusterinfo run_cw_utils run_dxcc run_getctydata run_initial_exchange run_locator2longlat run_prefix run_recallexchange run_score run_searchlog run_sendbuf run_zone_nr check_PROGRAMS = run_addcall run_addmult run_addpfx run_bands run_cabrillo run_checklogfile run_clusterinfo run_cw_utils run_dxcc run_getctydata run_initial_exchange run_locator2longlat run_prefix run_recallexchange run_score run_searchlog run_sendbuf run_zone_nr run_addcall_SOURCES = run_addcall.c test_addcall.c data.c functions.c run_addcall_LDADD = ../src/addcall.o ../src/addmult.o ../src/bands.o ../src/searchcallarray.o ../src/getctydata.o ../src/getpx.o ../src/dxcc.o ../src/get_time.o ../src/zone_nr.o run_addmult_SOURCES = run_addmult.c test_addmult.c data.c functions.c run_addmult_LDADD = ../src/addmult.o ../src/bands.o run_addpfx_SOURCES = run_addpfx.c test_addpfx.c data.c functions.c run_addpfx_LDADD = ../src/addpfx.o ../src/bands.o run_bands_SOURCES = run_bands.c test_bands.c data.c functions.c run_bands_LDADD = ../src/bands.o run_cabrillo_SOURCES = run_cabrillo.c test_cabrillo.c data.c functions.c run_cabrillo_LDADD = ../src/cabrillo_utils.o ../src/readcabrillo.o ../src/bands.o run_checklogfile_SOURCES = run_checklogfile.c test_checklogfile.c data.c functions.c run_checklogfile_LDADD = ../src/checklogfile.o ../src/err_utils.o run_clusterinfo_SOURCES = run_clusterinfo.c test_clusterinfo.c data.c functions.c run_clusterinfo_LDADD = ../src/clusterinfo.o ../src/get_time.o ../src/err_utils.o run_cw_utils_SOURCES = run_cw_utils.c test_cw_utils.c data.c functions.c run_cw_utils_LDADD = ../src/cw_utils.o run_dxcc_SOURCES = run_dxcc.c test_dxcc.c data.c functions.c run_dxcc_LDADD = ../src/dxcc.o run_getctydata_SOURCES = run_getctydata.c test_getctydata.c data.c functions.c run_getctydata_LDADD = ../src/dxcc.o ../src/getctydata.o ../src/getpx.o run_initial_exchange_SOURCES = run_initial_exchange.c test_initial_exchange.c data.c functions.c run_initial_exchange_LDADD = ../src/initial_exchange.o run_locator2longlat_SOURCES = run_locator2longlat.c test_locator2longlat.c data.c functions.c run_locator2longlat_LDADD = ../src/locator2longlat.o run_prefix_SOURCES = run_prefix.c test_prefix.c data.c functions.c run_prefix_LDADD = ../src/getpx.o run_recallexchange_SOURCES = run_recallexchange.c test_recallexchange.c data.c functions.c run_recallexchange_LDADD = ../src/recall_exchange.o ../src/initial_exchange.o run_score_SOURCES = run_score.c test_score.c data.c functions.c run_score_LDADD = ../src/score.o ../src/addmult.o ../src/bands.o ../src/dxcc.o ../src/focm.o ../src/getctydata.o ../src/qrb.o ../src/locator2longlat.o ../src/getpx.o run_searchlog_SOURCES = run_searchlog.c test_searchlog.c data.c functions.c run_searchlog_LDADD = ../src/addmult.o ../src/bands.o ../src/searchlog.o ../src/zone_nr.o ../src/searchcallarray.o ../src/nicebox.o ../src/qtcutil.o ../src/printcall.o ../src/err_utils.o run_sendbuf_SOURCES = run_sendbuf.c test_sendbuf.c data.c functions.c run_sendbuf_LDADD = ../src/sendbuf.o ../src/sendspcall.o run_zone_nr_SOURCES = run_zone_nr.c test_zone_nr.c data.c functions.c run_zone_nr_LDADD = ../src/zone_nr.o tlf-1.4.0/test/test_sendbuf.c0000644000175000017500000001362513562576621013056 00000000000000#include "test.h" #include #include "../src/sendbuf.h" #include "../src/sendspcall.h" #include "../src/tlf.h" #include "../src/globalvars.h" // OBJECT ../src/sendbuf.o // OBJECT ../src/sendspcall.o char test_msg[1024]; /* export internal function for test */ void ExpandMacro(); char *PrepareSPcall(); void replace_all(char *buf, int size, const char *what, const char *rep); /* break dependencies */ int digikeyer = NO_KEYER; int cwkeyer = NO_KEYER; char call[20]; char message[25][80]; extern char buffer[]; char wkeyerbuffer[400]; int demode; char *SPcall; int sending_call, simulator, data_ready, shortqsonr; void keyer_append(const char *string) { } int play_file(char *file) { return 0; } /* test helpers */ void check_replace_all(char *input, const char *what, char *rep, char *exp) { char sandbox[30 + 1]; memset(sandbox, 'S', 30); sandbox[30] = 0; char *buf = sandbox + 10; strcpy(buf, input); replace_all(buf, 10, what, rep); // check the result sprintf(test_msg, "for input |%s|\ngot |%s|\nexp |%s|\n", input, buf, exp); assert_string_equal(buf, exp); // check if the rest of sandbox is intact int i; for (i = 0; i < 30; ++i) { if (10 <= i && i < 20) { continue; } sprintf(test_msg, "wrong char at %d: 0x%02x", i, sandbox[i]); assert_int_equal(sandbox[i], 'S'); } } void check_ExpandMacro(const char *input, const char *exp) { strcpy(buffer, input); ExpandMacro(); assert_string_equal(buffer, exp); } /* setup/teardown */ int setup_default(void **state) { wkeyerbuffer[0] = '\0'; data_ready = 0; simulator = 0; sending_call = 0; trxmode = CWMODE; cwkeyer = 1; digikeyer = 1; strcpy(call, "dl1jbe\n"); // !!! do not forget trailing \n strcpy(hiscall, "lz1ab"); strcpy(his_rst, "579"); shortqsonr = LONGCW; strcpy(qsonrstr, "0309"); strcpy(comment, "Alex"); *message[SP_CALL_MSG] = '\0'; return 0; } int teardown_default(void **state) { if (SPcall) g_free(SPcall); return 0; } /* test replace_all */ void test_replace_all(void **state) { // basic replace tests // - 'what' is empty (check_replace_all("1noop", "", "A", "1noop")); // - 'repl' is empty (check_replace_all("2noop", "X", "", "2noop")); (check_replace_all("2noop", "o", "", "2np")); (check_replace_all("onoop", "o", "", "np")); (check_replace_all("0000", "0000", "", "")); // - 'what' not found (check_replace_all("3noop", "X", "Y", "3noop")); // - simple replacement (check_replace_all("012345", "2", "Y", "01Y345")); (check_replace_all("012322", "2", "Y", "01Y3YY")); (check_replace_all("012345678", "8", "Y", "01234567Y")); // - shorter replacement (check_replace_all("001200300", "00", "Y", "Y12Y3Y")); (check_replace_all("000000", "00", "Y", "YYY")); (check_replace_all("0000", "0000", "YW", "YW")); // - longer replacement (check_replace_all("012345", "0", "YW", "YW12345")); (check_replace_all("012305", "0", "YW", "YW123YW5")); (check_replace_all("0123405", "0", "YW", "YW1234YW5")); (check_replace_all("01234505", "0", "YW", "YW12345YW")); (check_replace_all("0120", "0", "YWX", "YWX12YWX")); (check_replace_all("01230", "0", "YWX", "YWX123YWX")); (check_replace_all("012340", "0", "YWX", "YWX1234YW")); (check_replace_all("0123450", "0", "YWX", "YWX12345Y")); (check_replace_all("01234560", "0", "YWX", "YWX123456")); (check_replace_all("01234567", "0", "YWX", "YWX123456")); (check_replace_all("012305", "0", "YWX", "YWX123YWX")); (check_replace_all("012300", "0", "YWX", "YWX123YWX")); (check_replace_all("01200", "0", "YWX", "YWX12YWXY")); (check_replace_all("1200", "0", "YWX", "12YWXYWX")); (check_replace_all("1234567", "7", "YWX", "123456YWX")); (check_replace_all("1234567", "4", "YWX", "123YWX567")); (check_replace_all("12345678", "4", "YWX", "123YWX567")); (check_replace_all("1234567", "7", "YWXZ", "123456YWX")); (check_replace_all("1", "1", "ABCDEFGHIJKL", "ABCDEFGHI")); (check_replace_all("11", "1", "ABCDEFGHIJKL", "ABCDEFGHI")); } /* test ExpandMacro() */ void test_noexpand(void **state) { check_ExpandMacro("test de ab4def", "test de ab4def"); } void test_expandCall(void **state) { check_ExpandMacro("test de %", "test de dl1jbe"); } void test_expandHiscall(void **state) { check_ExpandMacro("@ test de %", "lz1ab test de dl1jbe"); } void test_expandHisRST(void **state) { check_ExpandMacro("ur [", "ur 579"); } void test_expandHisRSTshort(void **state) { shortqsonr = SHORTCW; check_ExpandMacro("ur [", "ur 57N"); } void test_expandQsoNr(void **state) { check_ExpandMacro("nr #", "nr 309"); } void test_expandQsoNrshort(void **state) { shortqsonr = SHORTCW; check_ExpandMacro("nr #", "nr 3TN"); } void test_expandHisNr(void **state) { check_ExpandMacro("was !", "was Alex"); } /* Tests sendSPcall() */ void test_prepareSPcallCWnoDeMode(void **state) { demode = 0; assert_string_equal(SPcall = PrepareSPcall(), "dl1jbe\n"); } void test_prepareSPcallCWDeMode(void **state) { demode = 1; assert_string_equal(SPcall = PrepareSPcall(), "DE dl1jbe\n"); } void test_prepareSPcallDIGInoDeMode(void **state) { trxmode = DIGIMODE; digikeyer = NET_KEYER; demode = 0; assert_string_equal(SPcall = PrepareSPcall(), "|dl1jbe "); } void test_prepareSPcallDIGIDeMode(void **state) { trxmode = DIGIMODE; digikeyer = NET_KEYER; demode = 1; assert_string_equal(SPcall = PrepareSPcall(), "|lz1ab DE dl1jbe "); } void test_prepareSPcallMFJnoDeMode(void **state) { trxmode = DIGIMODE; digikeyer = MFJ1278_KEYER; demode = 0; assert_string_equal(SPcall = PrepareSPcall(), "{ |dl1jbe }"); } void test_prepareSPcallMFJDeMode(void **state) { trxmode = DIGIMODE; digikeyer = MFJ1278_KEYER; demode = 1; assert_string_equal(SPcall = PrepareSPcall(), "{ |lz1ab DE dl1jbe }"); } tlf-1.4.0/test/test_locator2longlat.c0000644000175000017500000000064413562576621014533 00000000000000#include "test.h" #include "../src/locator2longlat.h" // OBJECT ../src/locator2longlat.o void test_qra_short(void **state) { assert_int_equal(check_qra("JN"), 0); } void test_qra_wrong(void **state) { assert_int_equal(check_qra("AB3C"), 0); } void test_qra_ok4(void **state) { assert_int_equal(check_qra("JN97"), 1); } void test_qra_ok6(void **state) { assert_int_equal(check_qra("JN97ab"), 1); } tlf-1.4.0/test/run_addcall.c0000644000175000017500000000773513562576653012653 00000000000000// generated on Tue Nov 12 19:44:59 2019 #include #include #include #include int setup_addcall2_pfxnum_inList(void **state); int setup_addcall2_pfxnum_notinList(void **state); int setup_addcall_pfxnum_inList(void **state); int setup_addcall_pfxnum_notinList(void **state); int setup_default(void **state); void test_add2_2_countries(void **state); void test_add2_2_zones(void **state); void test_add2_country(void **state); void test_add2_country_2_band(void **state); void test_add2_country_2_stations(void **state); void test_add2_unknown_country(void **state); void test_add2_unknown_zone(void **state); void test_add2_warc(void **state); void test_add2_zone(void **state); void test_add2_zone_2_band(void **state); void test_add2_zone_2_stations(void **state); void test_add_2_countries(void **state); void test_add_2_zones(void **state); void test_add_country(void **state); void test_add_country_2_band(void **state); void test_add_country_2_stations(void **state); void test_add_unknown_country(void **state); void test_add_unknown_zone(void **state); void test_add_warc(void **state); void test_add_zone(void **state); void test_add_zone_2_band(void **state); void test_add_zone_2_stations(void **state); void test_addcall2_nopfxnum(void **state); void test_addcall2_pfxnum_inList(void **state); void test_addcall2_pfxnum_notinList(void **state); void test_addcall_nopfxnum(void **state); void test_addcall_pfxnum_inList(void **state); void test_addcall_pfxnum_notinList(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_addcall_nopfxnum, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addcall_pfxnum_inList, setup_addcall_pfxnum_inList, NULL), cmocka_unit_test_setup_teardown(test_addcall_pfxnum_notinList, setup_addcall_pfxnum_notinList, NULL), cmocka_unit_test_setup_teardown(test_addcall2_nopfxnum, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addcall2_pfxnum_inList, setup_addcall2_pfxnum_inList, NULL), cmocka_unit_test_setup_teardown(test_addcall2_pfxnum_notinList, setup_addcall2_pfxnum_notinList, NULL), cmocka_unit_test_setup_teardown(test_add_unknown_country, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_country, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_country_2_band, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_country_2_stations, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_2_countries, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_unknown_zone, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_zone, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_zone_2_band, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_zone_2_stations, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_2_zones, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_unknown_country, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_country, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_country_2_band, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_country_2_stations, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_2_countries, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_unknown_zone, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_zone, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_zone_2_band, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_zone_2_stations, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_2_zones, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add_warc, setup_default, NULL), cmocka_unit_test_setup_teardown(test_add2_warc, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.0/tlf.1.in0000644000175000017500000014623613562576621010527 00000000000000.\" .TH TLF 1 "version @VERSION@" TLF "Ham radio" .SH NAME @PACKAGE_NAME@ - amateur radio contest keyer/logging program for Radiosport .SH SYNOPSIS .SY @PACKAGE@ .OP \-dhnrvV .OP \-f config_file .OP \-s user:password@host/dir/logfilename .YS . .SH DESCRIPTION . .B @PACKAGE_NAME@ is a console (ncurses) mode general purpose .SM CW keyer, logging and contest program for amateur radio operators. It supports the .SM CQWW, .SM WPX, .SM ARRL-DX, .SM ARRL-FD, .SM STEWPERRY, .SM PACC and .SM EU SPRINT contests as well as a lot more basic contests, general QSO and DXpedition mode. From version 1.2.0 onward there is also support for the FOC Marathon. It interfaces with a Morse Code generator, a number of radios via the .B Hamlib library, and with a .B "DX Cluster" via telnet or packet radio. @PACKAGE_NAME@ can project DX cluster data into the excellent Xplanet program, written by Hari Nair. .P Contest operation mimics the popular .B TR-Log program for DOS, the output file is TR-Log compatible. The log can be exported in .SM ADIF or .B Cabrillo format. .P The program was written for console mode on purpose, which allows it to run on smaller machines, or remotely via .SM SSH or a modem link. .P Since @PACKAGE_NAME@ version 0.9.21 the .B cwdaemon 0.9 is fully supported, featuring direct mode for the keyboard and output to parallel and serial ports and speed and weight control from the keyboard, and band info output on the parallel port. .P For users of the K1EL series of \(lqWin Keyers\(rq, the .B winkeydaemon is available from .UR https://github.com/N0NB/winkeydaemon GitHub .UE . Setup is the same as for the cwdaemon. .P For radio control @PACKAGE_NAME@ works with Hamlib (version >= 1.2.8), you can find it at .UR https://www.hamlib.org/ www.hamlib.org .UE . .P @PACKAGE_NAME@ provides full .SM TCP/IP networking between @PACKAGE_NAME@ nodes, syncing/distributing log, packet data, frequency data, local talk, serial numbers, time sync etc. .P . .SH OPTIONS Options given to @PACKAGE_NAME@ on the command line. .TP .B \-h Show summary of options and exit. .TP .BI \-f\ config_file Start with non-default configuration file: . .IP .EX @PACKAGE@ \-f PA0R .EE .IP Defaults to .I logcfg.dat in actual working directory. .TP .BI \-s\ user:password@host/dir/logfilename Synchronize log with other node . .IP .EX @PACKAGE@ \-s user:password@host/dir/logfilename .EE . .TP .B \-V Output version information and exit. .TP .B \-v Verbose startup. .TP .B \-d Debug .B rigctl. .TP .B \-n Start without packet/cluster. .TP .B \-r Start without radio control when user wants to start @PACKAGE_NAME@ without modifying .IR logcfg.dat \. .TP .B \-i Import an existing CABRILLO file. When @PACKAGE_NAME@ starts, looks for the .I YOURCALL.cab log, reads the configuration and rule files, and based on the current setup, generates the log(s). If the contest is WAE, and you have QTC's in cabrillo, then @PACKAGE_NAME@ makes the QTC logfiles too. @PACKAGE_NAME@ doesn't write over the existing log(s). The generated import will be .IR IMPORT_CONTEST.log , where the CONTEST is the name of contest in the config. If QTC exists, then the files .I IMPORT_QTC_sent.log and .I IMPORT_QTC_recv.log will be created. . .SH USAGE . @PACKAGE_NAME@ has been written for .BR "console mode" \. If you want to run @PACKAGE_NAME@ from a terminal in .BR X , you will probably get the best results if you set \fBTERM\fR=\fIlinux\fR and use a Linux console terminal. Both KDE and GNOME terminals have a facility to start a Linux console in an X terminal as does Xfce-terminal. .P By default, .BR xterm (1) may give unreadable colours. If so, you will have to set different colours in .I logcfg.dat or prepare .I $HOME/.Xresources to the preferred colour scheme. One advantage of xterm is that it doesn't consume the .B F11 key which other terminal emulators reserve for full screen mode nor .BR Ctrl\-PgUp / Ctrl\-PgDn which may be used for tab switching in other emulators. .P Recent efforts have resulted in improved keyboard handling. If you find keys that do not work, the developers would like to receive your report of which keys and which terminal have the problem. Please send the report to the mailing list shown in the .B BUGS section below. .P There are excellent results with the latest KDE, GNOME, and Xfce terminal emulators (vi colours are preferred by some). As @PACKAGE_NAME@ uses ncurses to format its display you must use a proper font. (Good choices are the Linux font, Inconsolata, Hack, or any monospace font that dots or slashes the zero character). If you have problems, try the linux text console first and work from there. .P Normally you start or restart @PACKAGE_NAME@ in fast mode with \(lq\fB@PACKAGE@\fR\(rq. During debugging of a .I logcfg.dat file you can start in verbose mode, to have a look at the startup messages. From @PACKAGE_NAME@ version 0.9.3 you can load different config files with: . .IP .EX @PACKAGE@ \-f config_file .EE . .P If you have the packet cluster enabled you will first see the packet screen (if you are using telnet and you have provided your callsign in .IR logcfg.dat \, you will be automatically logged in switched to the main logging screen). Log in with your callsign, if needed, and switch to the main logging screen with the \(oq:\(cq command. You can come back to the packet screen later with the .BR :PAC ket command from the call input field of the main logging screen. .P You can exit and close @PACKAGE_NAME@ with the .BR :EXI t or .BR :QUI t commands or with .BR Ctrl\-C , .BR Alt\-Q \ or .BR Alt\-X \. .P At restart @PACKAGE_NAME@ recalculates the score, which may take some time depending on the number of QSOs in the logfile and the speed of your system. @PACKAGE_NAME@ takes the points as they are in the log, and calculates the multiplier from either callsign or exchange field (depending on the contest). . .SH COMMANDS . These commands are entered in the .B callsign field of the main logging screen. Each command consists of the leading \(oq:\(cq and at minimum the upper case characters of the command name plus any needed parameters separated by \(oqSpace\(cq. . .TP .BR :ADI f Writes the log to an Amateur Data Interchange Format (ADIF) file .IR logfile.adif \. . .TP .BR :CHA r Input the number of characters for CW auto-start or \(oqm\(cq for manual start. Possible values are: \(oq0\(cq (off), \(oq2\(cq...\(oq5\(cq or \(oqm\(cq (manual). After typing as many characters in the input field or after pressing the \(oqEnter\(cq key in manual mode @PACKAGE_NAME@ starts sending the callsign without further keystrokes. You can type in the rest of the call (but quickly). As soon as the sending catches your last typed character @PACKAGE_NAME@ automatically sends the exchange and the cursor jumps to the exchange field. \(oqEscape\(cq stops sending. This works only in CW contests in RUN mode. . .TP .BR :CHE ck .TQ .BR :NOC heck Turn the dupe check window On|Off. . .TP .BR :CQD elay Change Auto_CQ delay (in 1/2 seconds, with Up/Down arrow keys). . .TP .BR :CLO ff No cluster information (non-assisted contest operation). . .TP .BR :CLU ster .TQ .B :MAP Show cluster window or bandmap. . .TP .BR :CON test Toggle contest mode On|Off. . .TP .B :CTY .TQ .BR :ZON e .TQ .BR :MUL t Show needed country multipliers, zones, multipliers per continent (depends on the contest). . .TP .BR :CWM ode .TQ .BR :SSB mode .TQ .BR :DIG imode Switch TRX to CW|SSB|Digimode mode. . .TP .BR :DEB ug_tty Debug routine for rig communication links. . .TP .BR :EDI t Edit the log with your favourite editor (the editor (vi[m]|joe|e3|mcedit) can be set in .IR logcfg.dat ). . .TP .BR :EXI t .TQ .BR :QUI t Exit @PACKAGE_NAME@ (synonym to .BR Ctl\-C , .BR Ctl\-D , .BR Alt\-Q , and .BR Alt\-X ")." . .TP .BR :FIL ter Filter cluster info (announce, dx-spots, all). . .TP .BR :FRE q Show frequency or band/score information of your other stations. . .TP .BR :FLDIGI Turn off/on Fldigi communication. . .TP .BR :HEL p Show online help (displays .I help.txt from working directory or from .I @prefix@/share if no local one exists). . .TP .BR :INF o Show network status. . .TP .BR :MES sage Edit CW (Morse Code) messages. . .TP .BR :MOD e Toggle TRX mode (CW|SSB|DIG). . .TP .BR :PAC ket Switch to the packet terminal. Switch back to the main logging screen with \(oq:\(cq. . .TP .BR :REC onnect Re-opens the connection to the DX cluster in case it was disconnected. . .TP .BR :RES core Recalculates the values in the score window (e.g. after deleting or editing QSOs). . .TP .BR :RIT clear Toggle the RIT reset after QSO On|Off. . .TP .B :SET .TQ .B :CFG Edit various parameters in .I logcfg.dat file and reload it. . .TP .BR :SCA n Enter the SCAN function (return with \(oqEscape\(cq). . .TP .BR :SCO re Toggle the score window On|Off. . .TP .BR :SCV olume Adjust the soundcard volume for the sidetone (Up|Down). Range: 0\(en99. . .TP .BR :SIM ulator Toggle simulator mode. In simulator mode you can work a complete CQWW CW contest in TR-Log mode. Set \fBCONTEST\fR=\fIcqww\fR. . .TP .BR :SOU nd The SOUND recorder is a utility to record the voice keyer messages and enables you to record the complete contest in chunks of 1 hour to the hard drive. It does this in the directory: .IR $HOME/@PACKAGE@/soundlogs . The sound recorder uses a script called .I soundlog which has to be located in .IR $HOME/@PACKAGE@/soundlogs . It can be found in the .I scripts directory. If your soundcard is different from .I /dev/dsp you can use the .B SC_DEVICE parameter in the .I logcfg.dat file. The file extension is .IR .au , the Sun ulaw format. The recorder produces < 60 MB per hour. This means you can record a complete CQWW in less than 3 Giga Bytes. If your disk cannot handle this, FTP the soundfile to a server every hour. .IP .BR "F1 ... F12" ,\ s ,\ c ,\ ... will record the voice keyer message for that key. .IP .BR 1 : Start contest recording to ddhhmm.au. .IP .BR 2 : Stop contest recording. .IP .BR 3 : List contest recordings. .IP .BR 4 : Play back contest recording ddhh[mm][:xx]. .RS .RS .P xx is the offset from the start of the file e.g.: .P 2110 will start from beginning of the day 21 hr 10:00 file. .P 21100013:00 will start from day 21, hh 10, mm 00, + 13 minutes: 0 seconds. .RE .RE .IP To create a new file every hour add a .BR crontab (1) job to run the following command every hour: .RS .RS .P .EX /usr/bin/pkill \-f sox > /dev/null 2> /dev/null .EE .P Running the crontab job at other intervals will create sound recordings of the interval period in length. .RE .RE .IP Once started the recorder will run until the lock file .I $HOME/.VRlock is removed. . .TP .BR :SYN c Synchronize the logfile of this node with the logfile pointed to by the parameter \fBSYNCFILE\fR=\fIuser:password@host/dir/logfile\fR. @PACKAGE_NAME@ will .BR wget (1) the logfile from the relevant node, make a dated backup of your local logfile, and merge the 2 files. The score will be recalculated. . .TP \fB:TON\fRe [\fIdd\fR]\fId\fR Set PC sidetone frequency in Hertz. Range: 300\(en900, 0 = Off. . .TP .BR :TRX control Toggle rig control On|Off. Default is Off unless .B RADIO_CONTROL is given in .I logcfg.dat (only makes sense with rig control capability). . .TP .BR :VIE w View the log with .BR less (1). . .TP .BR :WRI te Write cabrillo file according to specified format (see .B CABRILLO statement in the .B RULES section). . .SH KEYS . Work has been ongoing to unify the key map between the Linux text console and the various X terminals. It may be slightly different on certain X terminals depending on which keys they consume for their own use. Turn off any key recognition by the terminal for its own purposes (menu access, help display, etc.) if possible. Pay special attention to the F1-F12 and Alt- keys. Moreover, on some systems you must set the \fBTERM\fR=\fIlinux\fR or \fBTERM\fR=\fIrxvt\fR environment variables. This also works under VNC. .P Certain key combinations will probably not be useable as the Linux console consumes Alt-F1 through .RI Alt-F x (often F7, but could be greater) for switching its virtual consoles. Likewise, the various desktop environments consume key combinations for their own use. Ctrl-F1 through .RI Ctrl-F x are used to switch desktop workspaces. .RI Alt-F x combinations are used for various desktop features and are unavailable for @PACKAGE_NAME@ use. .P Some desktop terminal emulators are capable of being configured to allow the application running in them to get all of the keys the desktop environment does not consume. In testing good choices seem to be Gnome Terminal, Rox Terminal, or the classic Xterm (although its color representation differs from the Linux console and other terminal emulators). Xfce Terminal is known to consume F11 and Ctrl-PageUp and Ctrl-PageDown. The @PACKAGE_NAME@ developers have implemented Alt-PageUp and Alt-PageDown as a work-around for the Ctrl counterparts. Reports of success with other terminals are welcome. . .SS Call Input and Exchange Fields . The Call Input and Exchange Fields are the two main entry fields of @PACKAGE_NAME@ where the majority of the keyboard entry takes place. The call input field is active when @PACKAGE_NAME@ completes its initialization and presents the main screen. .P Most key sequences are the same in both fields. Differences are noted as necessary. . .TP .BR A-Z ,\ 0-9 ,\ / \fBCall input:\fR ASCII letters, numerals, and the '/' characters that make up an internationally recognized amateur radio callsign plus temporary location identifiers. Spaces are not allowed. .IP \fBExchange:\fR information provided by the other station possibly separated by spaces, e.g., ARRL Field Day and ARRL Sweepstakes. . .TP .B Space Switches from call input to exchange field. Separates exchange field elements when multiple exchange elements must be entered, e.g., ARRL Field Day and ARRL Sweepstakes. . .TP .B Tab Switch between call input and exchange fields (jump back to call input from exchange field). . .TP .B Enter Smart key depending on contest mode. . .IP @PACKAGE_NAME@ follows the TR operating style which has two modes, CQ and S&P. .IP CQ mode is used for \(lqrunning\(rq, i.e., staying on one frequency and having other stations answer your call. .br S&P mode is for tuning up or down the band and answering the calls of other stations. . .IP .B In CQ Mode: .RS 7 .IP \(bu 2 With the call input field empty, \(oqEnter\(cq sends the F12 message (Auto CQ). .IP \(bu 2 With characters in the call input field, \(oqEnter\(cq answers the calling station by sending the F3 message (RST) and moves the cursor to the exchange field. .IP \(bu 2 If the exchange field is empty, \(oqEnter\(cq repeats the F3 message (RST). .IP \(bu 2 After the exchange information received from the other station is entered, \(oqEnter\(cq sends the CQ_TU_MSG message if defined, or \(lqTU\(rq and your call otherwise. Afterwards it logs the QSO, and returns the cursor to the call input field to answer the next call. .RE . .IP .B In S&P Mode: .RS 7 .IP \(bu 2 When the call input field is empty, \(oqEnter\(cq sends the S&P_CALL_MSG if defined, or your call otherwise. .IP \(bu 2 When the exchange field is empty, \(oqEnter\(cq sends the S&P_CALL_MSG if defined, or your call otherwise. .IP \(bu 2 When the call input field has been filled, \(oqEnter\(cq sends the S&P_CALL_MSG if defined, or your call otherwise. Afterwards it moves the cursor to the exchange field. .IP \(bu 2 Once the exchange has been received, \(oqEnter\(cq sends the S&P_TU_MSG if defined, otherwise it sends your call followed by the F3 message (RST). Afterwards it logs the QSO and returns the cursor to the call input field to answer the next call. .RE . .TP .B Backspace Erases the character to the left of the cursor and moves the cursor one position to the left. . .TP .B Escape Stop CW transmission, clears characters, returns to call input field, keyboard off (universal undo). .IP As an example, characters have been entered in both the call input and exchange fields, the cursor is in the exchange field, and the transmission of a CW message is in progress. The first press of \(oqEscape\(cq will stop the CW transmission and clear the exchange field and position the cursor to the leftmost position of the exchange field. The second press of \(oqEscape\(cq will move the cursor to the right of the last character in the call input field. The third press of \(oqEscape\(cq will clear the call input field. . .TP .BR \(<-\ (Left-Arrow) Change to next band lower or wrap to highest band if already on the lowest band when callsign field empty. .IP Enter edit mode if one or more characters are present and move the cursor to the left of the rightmost character. . .TP .BR \(->\ (Right-Arrow) Change to next band higher or wrap to the lowest band if already on the highest band when call input field is empty. . .TP .B F1 In CQ mode, send message F1 (CQ). .br In S&P mode send message F6 (MY). . .TP .B F2-F11 Send CW, RTTY or VOICE messages 2 through 11. . .TP .B F12 Start .B Auto_CQ (only from call input field). Sends F12 message repeatedly pausing for Auto_CQ delay time between messages. Auto_CQ is cancelled with first character entry into the call input field. . .TP .BR +\ (Plus) Toggle between the CQ and S&P modes. . .TP .B PgUp Increase CW (Morse Code) speed (from call and exchange fields). .IP If the cursor is in the call input field and it is not empty and CHANGE_RST is set: increase his S value (the leftmost of the RST pair). .IP If the cursor is in the exchange field and it is not empty and CHANGE_RST is set: increase my S value (the rightmost of the RST pair). . .TP .B PgDown Decrease CW (Morse Code) speed (from call input and exchange fields). .IP If the cursor is in the call input field and it is not empty and CHANGE_RST is set: decrease his S value (the leftmost of the RST pair). .IP If the cursor is in the exchange field and it is not empty and CHANGE_RST is set: decrease my S value (the rightmost of the RST pair). . .TP .B Ctrl-PgUp .TQ .B Alt-PgUp Increase Auto_CQ delay pause length (+1/2 sec). .IP Set Auto_CQ delay to message length + pause length. . .TP .B Ctrl-PgDown .TQ .B Alt-PgDown Decrease Auto_CQ delay pause length (\-1/2 sec). . .IP As some terminals, Xfce Terminal is one such, consume Ctrl-PageUp/Ctrl-PageDown, the Alt-key combinations allow for setting the Auto_CQ delay pause length. . .IP .BR NB : If neither key combination works try .B :CQD instead. . .TP .BR ?\ (Query) In CW or DIGIMODE sends the partial call followed by \(lq ?\(rq. In VOICE mode sends recorded message 5 (F5). . .TP .BR ;\ (Semicolon) Insert note in log. . .TP .BR ,\ (comma) Activate Morse Keyboard. Also Ctrl-K. . .TP .BR \(dq\ "(Double quotation)" Send talk message to other @PACKAGE_NAME@ nodes. . .TP .BR \-\ (Minus) Delete last QSO (Use .BR :RES core to correct scoring afterward). . .TP .BR \[ua]\ (Up-Arrow) Edit last QSO: Insert, overwrite, and delete; + log view. . .TP .BR =\ (Equals) Confirm last call. . .TP .BR _\ (Underscore) Confirm last exchange. . .TP .BR {\ "(Open brace)" In RTTY (DIGIMODE), keyboard mode switch TX on. . .TP .BR }\ "(Close brace)" In RTTY (DIGIMODE), keyboard mode switch TX off (RX). . .TP .BR \e\ (Backslash) Log QSO without CW output. . .IP In RTTY (DIGIMODE), keyboard mode switch controller to command mode (back to operating mode with \(lqK \(oqEnter\(cq\(rq. . .TP .BR #\ (Hash) Transceiver VFO frequency \(-> mem, mem \(-> transceiver VFO frequency. . .TP .BR !\ (Exclamation) Get a new shell. Come back with \(lqexit\(rq. . .TP .B Alt-, .TQ .BR .\ (Period) Change bandmap filter configuration. You can filter to show spots from all or own band only, from all/own mode only and if you want to see dupes or not (see the help (\fBAlt-H\fR) display), only new multiplier or all call (only CQWW). . .TP .B Ctrl-A Add a spot to bandmap and broadcast it on the local network. . .TP .B Ctrl-B Send a spot to the DX Cluster (a connection to a DX cluster must exit). . .TP .B Ctrl-C .TQ .B Ctrl-D Exit @PACKAGE_NAME@ (synonyms to .BR :EXI t, .BR :QUI t, .BR Alt-Q , and .BR Alt-X ")." . .TP .B Ctrl-E Ends modem capture for RTTY mode in QTC window (started with .BR Ctrl-S ). . .IP See .I @prefix@/share/doc/README_QTC_RTTY.txt for more information. . .TP .B Ctrl-F Set frequency. Use Up/Down-Arrow for 100hz steps and Pg-Up/Pg-Down for 500hz steps. Return to logging with \(oqEscape\(cq. . .TP .B Ctrl-G Grab next DX spot from bandmap. . .TP .B Ctrl-K Keyboard (CW and RTTY). . .TP .B Ctrl-L Reset the screen. . .TP .B Ctrl-P Maximum Usable Frequency (MUF) display. . .TP .B Ctrl-Q Open the QTC window for receiving QTCs if \fBQTC\fR=\fIRECV\fR or \fBQTC\fR=\fIBOTH\fR or sending QTCs if \fBQTC\fR=\fISEND\fR is set in .IR logcfg.dat . Same as .B Ctrl-S if \fBQTC\fR=\fISEND\fR. . .IP See .I @prefix@/share/doc/README_QTC.txt and .I @prefix@/share/doc/README_QTC_RTTY.txt for more information. . .TP .B Ctrl-R Toggle .I /dev/lp0 pin 14 (Mic/Soundcard switch | trx1/trx2 switch). . .TP .B Ctrl-S Open the QTC window for sending QTCs if \fBQTC\fR=\fISEND\fR or \fBQTC\fR=\fIBOTH\fR in \fIlogcfg.dat\fR. Saves QTCs while in QTC window. . .IP In RTTY mode starts capture from the modem after the window has been opened with .BR Ctrl-Q . End capture with .BR Ctrl-E . . .IP See .I @prefix@/share/doc/README_QTC.txt and .I @prefix@/share/doc/README_QTC_RTTY.txt for more information. . .TP .B Ctrl-T Show talk messages. In the QTC window shows RTTY lines. . .TP .B Ctrl-Z Stop @PACKAGE_NAME@. . .TP .BR Alt-0 ... Alt-9 Send CW (Morse code) messages. . .TP .B Alt-A Cycle cluster window: NOCLUSTER \(-> CLUSTER \(-> BANDMAP \(-> ... . .TP .B Alt-B Band up in TR-Log mode. . .TP .B Alt-C Toggle display of checkwindow. . .TP .B Alt-E Enter QSO edit mode. . .TP .B Alt-G Grab first spot from bandmap which has the characters in the call input field in its call. Allows the operator to selectively grab a specific call from the bandmap. . .TP .B Alt-H Show help. . .TP .B Alt-I Show talk messages. . .TP .B Alt-J Show other local stations frequencies. . .TP .B Alt-K Keyboard (CW and RTTY). . .TP .B Alt-M Show multipliers. . .TP .B Alt-N Add Note to log. . .TP .B Alt-P Toggle PTT (via cwdaemon). . .TP .B Alt-Q .TQ .B Alt-X Exit @PACKAGE_NAME@ (synonym to .BR :EXI "t ," .BR :QUI "t ," .BR Ctl-C , and .BR Ctl-D ")." . .TP .B Alt-R Toggle score window. . .TP .B Alt-S Toggle score window. . .TP .B Alt-T Tune your transceiver (via cwdaemon). Activates PTT and Key output for 6 seconds. Stop tuning by pressing any key. . .TP .B Alt-V Band down (Change speed in CT compatibility mode). . .TP .B Alt-W Set CW weight. . .TP .B Alt-Z Show zones worked. . .SH PREFERENCES . @PACKAGE_NAME@ can be fully configured by editing the .I logcfg.dat file. Normally you keep one .I logcfg.dat file, setting up your callsign, the log file name, the ports and addresses for packet, the radio, the network etc., and a separate rules file per contest. .P The .I logcfg.dat file can be edited from within @PACKAGE_NAME@ by the .BR :CFG \ or \ :SET commands (or with any other plain text editor before starting @PACKAGE_NAME@). .P You can set your favourite editor (joe | vi[m] | e3 | mcedit) in the .IR logcfg.dat \ file. .P You connect the rules file by using the statement \fBRULES\fR=\fIcontest_rules_file_name\fR in .IR logcfg.dat . .P @PACKAGE_NAME@ will first look in the working directory for a .I logcfg.dat file, and if it cannot find one it will look in .I @prefix@/share/@PACKAGE@ for a default one. Make sure you edit the .I logcfg.dat file at least to hold your call and your preferred system configuration. . .SH LOGCFG.DAT STATEMENTS . Configuration parameters set in .I logcfg.dat located in the working directory (where @PACKAGE_NAME@ is started). . .TP \fBRULES\fR=\fIcontest_rules_filename\fR Name of the rules file to load. It helps if you name the rules file according to the contest you want to describe. . .TP \fBSYNCFILE\fR=\fIuser:password@host/dir/syncfile\fR File on remote host you want to synchronize with (use .BR wget (1) syntax). . .TP .B CTCOMPATIBLE Do not use the TR-Log QSO sequence, but use \(oq+\(cq, \(oqInsert\(cq and \(oqEnter\(cq to log the QSO. . .IP The default mode of operation is the TR-Log sequence which uses \(oq+\(cq to switch between CQ and S&P modes, in which \(oqEnter\(cq is the sole key used to call the other station, send the exchange, and log the QSO. . .TP \fBTLFCOLOR\fIn\fR=\fIFG\fR/\fIBG\fR Defaults: .RS 14 \fBTLFCOLOR1\fR=\fI23\fR (Header and footer) .br \fBTLFCOLOR2\fR=\fI67\fR (Pop up windows) .br \fBTLFCOLOR3\fR=\fI70\fR (Log window) .br \fBTLFCOLOR4\fR=\fI57\fR (Markers/dupe colour) .br \fBTLFCOLOR5\fR=\fI43\fR (Input fields) .br \fBTLFCOLOR6\fR=\fI63\fR (Window frames) .RE . .IP The numbers are given in octal, FG/BG or BG/FG (some experimentation likely required). . .IP You should only specify these if you wish to modify the standard colours of @PACKAGE_NAME@. In some Terminals you can set a special profile for @PACKAGE_NAME@ with your own colours. Another way is to define the colours via the .I $HOME/.Xresources file. . .TP \fBEDITOR\fR=\fIjoe\fR | \fIvi\fR[\fIm\fR] | \fIe3\fR | \fImcedit\fR Editor used to modify the QSO log or logcfg.dat. . .TP \fBCALL\fR=\fIPA0R\fR Your call used in messages and used to determine your country, zone and continent. . .TP \fBTIME_OFFSET\fR=\fI0\fR Used to shift the @PACKAGE_NAME@ time with respect to the computer clock. Normally 0. Range: 0\(en23. . .TP .B TIME_MASTER This node transmits the time over the network (only one master allowed!). . .TP \fBADDNODE\fR=\fINode_address\fR[\fI:Port_number\fR] Adds an IP address (and optionally a port number) to which we broadcast stuff. (WARNING: Only add addresses of other nodes). . .TP \fBTHISNODE\fR=\fIA\fR Node designator (default \(lqA\(rq). If @PACKAGE_NAME@ hears its own node ID on the network it will exit and ask you to pick another one! Range: A\(enH. . .TP \fBLAN_PORT\fR=\fIPortnumber\fR Specifies on which portnumber (default \(lq6788\(rq) @PACKAGE_NAME@ is listening for broadcasts from other instances. . .TP .B LANDEBUG Switches on the debug function. Dumps all @PACKAGE_NAME@ net traffic received on this node into a file named .I debuglog in the working directory. This log can be used as a backup log for the whole network, as it is easy to retrieve QSO data, cluster messages, gab messages etc. after the contest. Some users have this enabled all the time. . .TP .B NETKEYER Switches the CW keyer on. Only the IP networked keyer .B cwdaemon or any other program that emulates cwdaemon such as .B winkeydaemon is supported. You may also need the keyer for PTT control or band info output. . .TP \fBNETKEYERPORT\fR=\fIport_number\fR Default port is 6789. . .TP \fBNETKEYERHOST\fR=\fIhost_address\fR Default host is 127.0.0.1 (localhost). . .TP \fBMFJ1278_KEYER\fR=\fIserial_port\fR Activates support for the MFJ-1278B multi-mode controller. The MFJ-1278 supports CW as well as RTTY contesting. Fixed serial port rate is 9600 bps. . .TP \fBCWSPEED\fR=\fIspeed_in_WPM\fR Range: 4\(en69. . .TP \fBWEIGHT\fR=\fIweight_ratio\fR Set the dot to dash ratio. Only for the NETKEYER. Range: \-45\(en50. . .TP \fBTXDELAY\fR=\fIPTT_delay_in_mS\fR Delay activation of the Push To Talk pin. Range: 0\(en50. . .TP .B KEYER_BACKSPACE Support backspace key in keyer window. . .TP .B SOUNDCARD Use soundcard for sidetone output. . .TP \fBSIDETONE_VOLUME\fR=\fIsoundcard_volume\fR Set soundcard sidetone volume (default is 70). A value of 0 turns off sidetone output (even for the console speaker). Range: 0\(en99. . .TP \fBCQDELAY\fR=\fIAuto_cq\fR Set automatic CQ pause delay in 1/2 seconds increments between message transmissions. Range: 3\(en60. . .TP \fBCWTONE\fR=\fIsidetone\fR Set the PC speaker or soundcard frequency. A value of 0 switches the sidetone off. Range: 0\(en999. . .IP (Due to a bug in cwdaemon it also turns off the .B Alt-T tune function. Use \fBSIDETONE_VOLUME\fR=\fI0\fR instead). . .TP .B BANDOUTPUT Outputs band information to pins 2, 7, 8, 9 on the parallel port. Output is 1 (160m), 2 (80m) ... 9 (10m). This format is compatible with the standard interface for antenna switches, band filters etc. . .TP \fBBANDOUTPUT\fR=\fI124181818\fR Output pin 2 for 160, 30, 17 and 12, pin 7 for 80, pin 8 for 40, and pin 9 for 20, 15 and 10. This comes in handy when you have 3 dipoles and a 3-band beam (...). . .TP .B NO_BANDSWITCH_ARROWKEYS This will prevent unwanted band switching when you are not using rig control. Band up = .BR Alt-B , band down = .B Alt-V (TR-Log compatible). . .TP \fBTELNETHOST\fR=\fIcluster_address\fR Use Telnet to connect to a DX Cluster node using a DNS name or IP address, e.g. claudia.esrac.ele.tue.nl or 131.155.192.179. . .TP \fBTELNETPORT\fR=\fItelnet_port_of_cluster\fR DX Clusters often use a non-standard port for Telnet, e.g. 8000. . .TP \fBTNCPORT\fR=\fIserial_port\fR You can use .IR /dev/ttyS0 , .IR /dev/ttyUSB1 , etc. anything that looks like a tty. . .TP \fBTNCSPEED\fR=\fIserial_rate\fR @PACKAGE_NAME@ supports 1200, 2400, 4800 and 9600 bps. . .TP .B FIFO_INTERFACE The FIFO (First In First Out) interface is used when you want to receive cluster info from the network, or from another source. The FIFO interface uses a special FIFO file in the working directory called .BR clfile . Anything you dump into this FIFO will be displayed by the packet interface. . .TP .B RADIO_CONTROL Switches the radio interface on. The rig interface makes use of the .B Hamlib library which supports a number of different rigs. . .TP \fBRIGMODEL\fR=\fIrig_number\fR Look at the Hamlib documentation for the rig_number. .IP Hint: \fBrigctl \-l\fR and its manual page (\fBrigctl\fR(1)). . .TP \fBRIGSPEED\fR=\fIserial_rate\fR Speed of the serial port for rig control. . .TP \fBRIGPORT\fR=\fIserial_port\fR You can use .IR /dev/ttyS0 , .IR /dev/ttyUSB1 , etc. anything that looks like a tty. .IP RPC rig daemon users should use \fBRIGMODEL\fR=\fI1901\fR and \fBRIGPORT\fR=\fIlocalhost\fR. In this case RIGSPEED is ignored (\fBNB\fR: rig model 1901 is deprecated in Hamlib releases 3.0 and later and is replaced by \fBrigctld\fR(8) which is rig model 2). . .TP \fBRIGCONF\fR=\fIrig_configuration_parameters\fR Send rig configuration parameters to Hamlib. .br e.g. \fBRIGCONF\fR=\fIcivaddr=0x40,retry=3,rig_pathname=/dev/ttyS0\fR . .TP .B RIT_CLEAR Clears the RIT after logging the qso. This only works if the rig, and the Hamlib routine supports it (tested on the OMNI 6+). . .TP .B RIGPTT Declares that Hamlib CAT PTT capability should be checked at startup and if available use it to activate the radio's PTT for sending voice messages instead of the NetKeyer PTT. . .TP \fBCWBANDWIDTH\fR=\fIwidth\fR Sets the CW bandwidth of your rig when changing bands. If unset or 0 the default bandwidth (as determined by Hamlib) is used. (a valid bandwidth for the rig must be used). . .TP \fBSC_DEVICE\fR=\fIdevice\fR Sound card device for scan function. .br e.g. \fBSC_DEVICE\fR=\fI/dev/dsp0\fR . .TP .B SSBMODE Start @PACKAGE_NAME@ in SSB mode (default is CW). . .TP .B RTTYMODE Start @PACKAGE_NAME@ in RTTY mode (defaul is CW) . .TP \fBGMFSK\fR=\fI$HOME/gMFSK.log\fR Tell \fBminiterm\fR(1) where to get the data. . .TP \fBDIGIMODEM\fR=\fI$HOME/gmfsk_autofile\fR Tell @PACKAGE_NAME@ where to send the macros. . .TP .B CLUSTER Show cluster window at startup. . .TP \fBCLUSTERLOGIN\fR=\fIyourcall\fR Automatic login for the telnet client. . .TP .B CLUSTER_LOG Write clusterlog to disk. . .TP .B BANDMAP Shows cluster bandmap on startup. Use \(aq.\(aq to change bandmap filtering. . .TP \fBBANDMAP\fR=\fIxyz,number\fR Show cluster bandmap on startup and set start values for filtering. .br string parsed for: .br \(lqB\(rq - only own band .br \(lqM\(rq - only own mode .br \(lqD\(rq - do not show dupes .br \(lqS\(rq - skip dupes during grab_next (\fBCtrl-G\fR) .br \(lqO\(rq - show only multiplier (CQWW only) .br livetime for new spots in seconds (number >= 30) . .TP .B SCOREWINDOW Show the score window (same as \fBAlt-R\fR). . .TP .B CHECKWINDOW Show the country/call check window. . .TP .B PARTIALS Show a list of possible contest calls. . .TP .B USEPARTIALS Use the auto-complete utility (takes some practice...). @PACKAGE_NAME@ will complete the call as soon as it is unique in the database. This can of course lead to strange effects, but in practice there are far more hits than misses. Sometimes you must edit the call because it has locked on a unique call. Try it, and switch it off when you don't like it. . .TP .B LOGFREQUENCY Put frequency (kHz) into QSO number to enable logging of frequency (only QSO and dxped mode). . .TP .B IGNOREDUPES Enable to allow multiple QSOs in a contest with the same station (considered a good idea these days as contest bots will take care of dupes). . .TP \fBSUNSPOTS\fR=\fISSN\fR Set the sunspots value which is used to do a rough calculation of the MUF. If the cluster interface is used the SSN will be updated by WWV or WCY messages. . .TP \fBSFI\fR=\fISolar_flux_value\fR Set SFI used to calculate SSN. The SSN value is used to do a rough calculation of the MUF. If the packet interface is used the SSN will be updated by WWV or WCY messages. . .TP .B CHANGE_RST If set in logcfg.dat, PgUp and PgDown will change RST instead of CW speed if field is not empty. .br Default is Off. . .TP .B NOB4 Do not send automatic \(lqQSO B4\(rq message. .br Default is On. . .TP .B NOAUTOCQ No automatic CQ when pressing \(oqEnter\(cq or \(oqF12\(cq. . .TP \fBMARKERS\fR=\fIfile_name\fR Generate marker file for Xplanet. Xplanet will show the last 8 spots on an azimuthal map. See the relevant Xplanet documentation. Use azimuthal projection and center the map on your QTH. . .TP \fBPOWERMULT\fR=\fIpower_multiplier\fR Use this value to multiply the final points. If the contest rule allows one to use the power multiplier (e.g. Stewperry, ARRL-FD), you can pass that here. .IP \fBNB\fR: The type of .B POWERMULT is a float, e.g. \fBPOWERMULT\fR=\fI1.5\fR, but the final score will be rounded by the C library \fBfloor\fR(3) function, which gives the largest integer value that is not greater than multiplied score. . .TP .B SEND_DE Sends a \(lqDE\(rq word before your callsign, e.g. \(lqDE W1AW\(rq. There is a special case: if .B SEND_DE is present in logcfg.dat, and @PACKAGE_NAME@ if is in DIGIMODE, then the other station's callsign will be sent before \(lqDE\(rq, e.g. \(lqDL1A DE W1AW\(rq. . .TP \fBDIGI_RIG_MODE\fR=\fImode\fR If set with \fBRADIO_CONTROL\fR option, specifies the mode to change the rig to when :DIG mode is selected. \fImode\fR may be one of \(lqUSB\(rq, \(lqLSB\(rq, \(lqRTTY\(rq, or \(lqRTTYR\(rq. If not set, \(lqUSB\(rq is used if FLDIGI is set and \(lqLSB\(rq is used otherwise. . .SH RULES . The contest rules can be put into separate files. @PACKAGE_NAME@ will first look for a directory called .I rules/ in the working directory, and a file named for the contest, e.g. .IR cqww . If @PACKAGE_NAME@ cannot find such a file, it will look into the directory .IR @prefix@/share/@PACKAGE@/rules . A rules file contains contest specific parameters like multipliers, scoring rules, CW and voice keyer messages, etc. .P .BR NB : The rules file overrides settings from the .I logcfg.dat file! .P .B WARNING! It is your own responsibility to try these rules well BEFORE the contest. The authors of @PACKAGE_NAME@ cannot possibly check all rules for all contests :) and during the contest there is normally no time to fix it. . .TP \fBCONTEST\fR=\fIxxxxx\fR Name of the contest (same as the file name .I contest_name referenced above). Some contests, like CQWW and WPX, are pre-programmed. Look for the relevant rules file in .IR @prefix@/share/tlf/rules . . .TP \fBLOGFILE\fR=\fIlog_file_name\fR Mandatory! . .TP \fBCABRILLO\fR=\fIcabrillo_format\fR Specify the name of the cabrillo format to use (see .IR doc/README.cab ). . .TP .B CONTEST_MODE Sets @PACKAGE_NAME@ into contest mode. Do not use this parameter for normal QSO logging! . .TP .B NO_RST Do not use RST in contest, e.g. for CW Open, ARRL Sweepstakes, or ARRL Field Day. If you want to write a Cabrillo log you must provide a conforming format definition without RST values. . .TP .B CQWW_M2 Put the node ID into the logline (just after the QSO number) to support Multi/2 operation where the station logging the QSO must be in the Cabrillo file. This can also be used for M/1 and M/M, to enable post-contest analysis of the nodes. . .TP .B Macro characters in the messages .B % = mycall, .B @ = hiscall, .B # = serial number, .B [ = RST, .B + = increase cw speed, .B \- = decrease cw speed, .B * = AR, .B = = BT, .B < = SK, .B ( = KN, .B ! = SN, .B & = AS, .B > = BK, .B ! = his serial (e.g. confirm exchange of station in DIGIMODE). . .TP \fBF1\fR=\fI"cw message 1"\fR CQ message, (e.g. CQ de PA0R TEST). . .TP \fBF2\fR=\fI"cw message 2"\fR S&P call message, (e.g. @ de %). . .TP \fBF3\fR=\fI"cw message 3"\fR Exchange message, (e.g. @ ++5NN--#). . .TP \fBF4\fR=\fI"cw message 4"\fR TU message, (e.g. TU 73 %). . .TP \fBF5\fR=\fI"cw message 5"\fR Call of the other station (e.g. @). . .TP \fBF6\fR=\fI"cw message 6"\fR Your call (e.g. %). . .TP \fBF7\fR=\fI"cw message 7"\fR QSO B4 message (e.g. @ sri qso b4 gl). . .TP \fBF8\fR=\fI"cw message 8"\fR Again message (e.g. AGN). . .TP \fBF9\fR=\fI"cw message 9"\fR Query message (e.g. ?). . .TP \fBF10\fR=\fI"cw message 10"\fR QRZ message (e.g. QRZ?). . .TP \fBF11\fR=\fI"cw message 11"\fR Please reply message (e.g. PSE K). . .TP \fBF12\fR=\fI"cw message 12"\fR Auto-CQ message (e.g. +++TEST %---). . .TP \fBCQ_TU_MSG\fR=\fI"cw message 13"\fR Auto Exchange message in CQ mode (TR-Log mode), (e.g. TU %). . .TP \fBS&P_TU_MSG\fR=\fI"cw message 14"\fR Auto Exchange message in S&P mode (TR-Log mode), (e.g. TU 5NN #). . .TP \fBS&P_CALL_MSG\fR=\fI"cw message 25"\fR Custom call message in S&P mode. Allows replacing the auto-generated S&P call message. . .TP \fBAlt_0\fR=\fI<...>\fR ... \fBAlt_9\fR=\fI<...>\fR Up to 10 additional messages. . .TP .B SHORT_SERIAL Uses short form for serial number (599=5NN, 001=TT1). . .TP .B LONG_SERIAL Uses long form for serial number (default). . .TP \fBVKM1\fR=\fIvoice message file name 1\fR ... \fBVKM12\fR=\fIvoice message file name 12\fR Use F1 ... F12 keys to send recorded messages for phone. . .TP \fBVKCQM\fR=\fIvoice_message_file_name\fR Auto Exchange voice message in CQ mode (TR-Log mode) . .TP \fBVKSPM\fR=\fIvoice_message_file_name\fR Auto Exchange voice message in S&P mode (TR-Log mode) . .TP .B ONE_POINT One point per QSO. . .TP .B TWO_POINTS Two points per QSO. . .TP .B THREE_POINTS Three points per QSO . .TP \fBCWPOINTS\fR=\fId\fR Points per CW QSO. . .TP \fBSSBPOINTS\fR=\fId\fR Points per SSB QSO. .br .BR NB : SSBPOINTS and CWPOINTS need to be set for both to work! . .TP \fBMY_COUNTRY_POINTS\fR=\fId\fR Points for working your own DXCC entity (often zero (0)). . .TP \fBMY_CONTINENT_POINTS\fR=\fId\fR Points for working countries in your own continent. . .TP \fBDX_POINTS\fR=\fId\fR Points for working a station in other continents. . .TP .B 2EU3DX_POINTS Deprecated. Use .B MY_CONTINENT_POINTS and .B DX_POINTS instead. . .TP \fBCOUNTRY_LIST_POINTS\fR=\fId\fR Points for countries in country list. . .TP .B USE_COUNTRYLIST_ONLY Score zero points for countries not in the list. . .TP \fBCOUNTRYLIST\fR=\fI"comma separated list of prefixes starting with colon"\fR e.g. Scandinavia:SM,LA,OZ,OH. . .TP \fBCOUNTRYLIST\fR=\fIfile_name\fR File with a list of prefixes. . .TP .B PORTABLE_MULT_2 Multiply points x2 for portable stations (e.g. R1 field day). . .TP .B LOWBAND_DOUBLE Double all points for lowband (40, 80, and 160m) QSOs (can be combined with any other value). (Will be deprecated in future! Use BANDWEIGHT_POINTS instead.) . .TP .B WYSIWYG_MULTIBAND Exchange is multiplier, per band, whatever you enter. @PACKAGE_NAME@ builds its own list of multipliers. . .TP .B WYSIWYG_ONCE Exchange is multiplier, whatever you enter. Counts once for the whole contest (not per band). . .TP .B WAZMULT Multiplier is the CQ zone (per band). . .TP .B ITUMULT Multiplier is the ITU zone (per band). . .TP .B PFX_MULT Multiplier is prefix (PA0, DA2, VE7, etc.). Counted once per contest, not per band. . .TP .B PFX_MULT_MULTIBAND Same as WPX, but the WPX only used CQ-WW-WPX, and there a single prefix multiplier only once, not all band. With this option, the PFX counts as multiplier on all band. This usable on AA-DX. . .TP .B COUNTRY_MULT Multiplier is the DXCC entity (per band). . .TP \fBMULT_LIST\fR=\fIfile_name\fR Name of multipliers file (often sections, provinces, states, counties). May contain comment lines starting with \(lq#\(rq in the first column. Each multiplier resides on a single line by itself. .IP Starting from Tlf-1.4 on you can also use aliases for the multipliers. Define the aliases as .IP \fImultiplier:alias1,alias2,alias3\fR .IP If you log a QSO with one of the aliases it will be counted for as the according multiplier. You can have more than one line for the same multiplier. . .TP .B SECTION_MULT Multiplier is section from multipliers file. . .TP .B SERIAL+SECTION Exchange is serial number and section, multiplier is section from multiplier file. Mults count per band. . .TP .B SERIAL_OR_SECTION Exchange is serial number or section. This option is similar to SERIAL+SECTION, except the exchange could be a serial OR the section. The options was introduced for HA-DX, where HA stations give the shortest form of their county, other stations give serial. . .TP .B SERIAL+GRID4 Exchange is serial number and grid (e.g. JO21QI), multipler is 4-character grid (JO21). Mults count per band. . .TP .B DX_&_SECTIONS Multiplier is DXCC country or section from multiplier file. . .TP .B RECALL_MULTS Exchange can be recycled, will be filled into exchange field when it is known (see also .BR INITIAL_EXCHANGE ). . .TP \fBINITIAL_EXCHANGE\fR=\fIexchanges.txt\fR The file must contain a comma-separated list of exchanges, if e.g. the exchange is the name of the operator: .br PA0R,rein .br PG4I,joop .br OK1RR,martin .IP If RECALL_MULTS is set, @PACKAGE_NAME@ will look in this list for the exchange and fill it in for you. There are various contests which have a standard exchange, like e.g. the FOC Marathon. The module also recognises embedded calls (CT3/PA0R/QRP). . .TP .B CALLMASTER\fR=\fIcallmaster\fR Allow to name a different file used as callmaster database (default is '\fIcallmaster\fR'). See FILES section. . .TP .B CONTINENT_EXCHANGE Exchange is continent (NA, SA, EU, AS, AF, OC). . .TP .B SERIAL_EXCHANGE Exchange is serial number (formats exchange field). . .TP .B MIXED Station can be worked both in SSB and CW. . .TP .B SSBMODE Start @PACKAGE_NAME@ in SSB mode. . .TP .B MYQRA For the \(lqStewperry\(rq contest, this option is used to set the QRA, e.g.: JN97, or the full form: JN97OM. In Stewperry, the points are calculated based on the distance between the stations. . .TP .B QTC If you want to send or receive QTC's on contest (usually on WAEDC), put this option to logcfg.dat. This needs a parameter, which could be one of these: RECV, SEND, BOTH - note, that currently just the RECV works. For more information, please see the README_QTC.txt file. . .TP \fBQTC_CAP_CALLS\fR=\fIlist_of_qtc_capable_callsigns.txt\fR If you want to help yourself to indicate that the station is QTC capable, you can see it on your bandmap or worked window. Put the callsign of stations in a file, one callsign per line, and give it as an argument to this variable. . .TP .B QTC_AUTO_FILLTIME If you use QTC feature, and you are on EU station in CW/SSB modes, then you can only RECEIVE the QTC's. Most sender station send their QTC's as a most short form, example, after the first line it doesn't send the first two characters of time field. If you set this option, then when you fill the first QTC line, then @PACKAGE_NAME@ will fills the other time fields, only the first two characters. Of course, if you change the hour (eg., if there is a time: 2059, and the next one is 2100), then all next time fields will be changed. . .TP .B QTC_RECV_LAZY If you use QTC feature, and you are on EU station in CW/SSB modes, then you can use this feature. In normal case, @PACKAGE_NAME@ checks all received QTC lines: the time field must be 4 characters long, callsign and serial fields must be non-empty. If you set up this option, @PACKAGE_NAME@ will ignore this restrictions. . .TP \fBCONTINENTLIST\fR=\fI"comma separated list of continents"\fR Valid values are: SA, NA, EU, AF, AS and OC. . .TP \fBCONTINENT_LIST_POINTS\fR=\fId\fR Points for stations from continents in CONTINENTLIST . .TP .B USE_CONTINENTLIST_ONLY Score zero points for station from continents not in the list. . .TP .B BANDWEIGHT_POINTS Allow a point weighting factor for different bands. E.g. .br \fBBANDWEIGHT_POINTS\fR=\fI160:3,80:2,40:1,20:1,15:1,10:2\fR .br can be used for AADX contest. It will multiply all QSO points by 3 on 160m, by 2 on 80m and 10m and on all other bands only by 1. .IP Bands not in list are weighted by 1. . .TP .B BANDWEIGHT_MULTIS Allow a weigthing factor for multipliers on different bands. E.g. .br \fBBANDWEIGHT_MULTIS\fR=\fI80:4,40:3,20:2,15:2,10:2\fR .br can be used for WAEDC contest. It will multiply the number of multipliers on 80 by 4, on 40 by 3 and on 20/15/10 by 2. .IP The multiply operation is executed after any other multiplier modification. .IP Bands not in list will be weighted by 1. . .TP .B PFX_NUM_MULTIS On WAEDC (and maybe with other contests too) the multipliers are the different countries, but there are some exceptions where of certain countries a different prefix number is a different multiplier. On WAEDC these countries are: W, VE, VK, ZL, ZS, JA, PY and RA8/RA9 and RAØ. With this option, you can list the affected countries: \fBPFX_NUM_MULTIS\fR=\fIW,VE,VK,ZL,ZS,JA,PY,UA9\fR. @PACKAGE_NAME@ will read these items, make a lookup in a countrylist for a country code, and that code will be used. If you include the UA9 prefix and then make a QSO with a station from Asiatic Russia, the PFX number will evaulated with a new multiplier, but European Russia will not. . .TP .B EXCLUDE_MULTILIST Some contests have a special multipliers list, which is easier to write with by excluding a predefined set. For example, the main set could be .BR COUNTRY_MULT , and you need to exclude from that list just a few countries, e.g. the SAC contest excludes the Scandinavian countries as they are not multipliers). In that case you can use this configuration: .br \fBCOUNTRY_MULT\fR \fBCOUNTRYLIST\fR=\fIsac:JW,JX,LA,OF1,OF0,OJ1,OJ0,OX,OW,OZ,SM,TF\fR \fBEXCLUDE_MULTILIST\fR=\fICOUNTRYLIST\fR .br Another useful example at WAEDC RTTY contest: then all stations can work each other, for EU stations only the non-EU stations are the multi's, and reverse: for non-EU stations only the EU stations are the multipliers. In that case the EU stations can use this config: .br \fBCONTINENTLIST\fR=\fIEU\fR \fBCOUNTRY_MULT\fR \fBEXCLUDE_MULTILIST\fR=\fICONTINENTLIST\fR .br Now all country are multi, except the EU stations. In this contest the non-EU stations can use this config: .br \fBCONTINENTLIST\fR=\fISA,NA,AF,AS,OC\fR \fBCOUNTRY_MULT\fR \fBEXCLUDE_MULTILIST\fR=\fICONTINENTLIST\fR .br In this example all countries are multis, except from SA, NA, AF, OC and AS continent, so only the EU stations left as multipliers. . .TP .B BMAUTOGRAB If set, with \fBRADIO_CONTROL\fR and \fBBANDMAP\fR (mandatory) options, @PACKAGE_NAME@ will grab the callsign from bandmap, if the TRX frequency is equal with bandmap freq. . .TP .B BMAUTOADD If set, with \fBRADIO_CONTROL\fR and \fBBANDMAP\fR (mandatory) options, @PACKAGE_NAME@ will add the callsign from callsign field, if at least 3 character have been entered. Use \(lqS\(rqkip dupes in BANDMAP settings to control if it should also grab dupes. . .TP .B SPRINTMODE If set, @PACKAGE_NAME@ will automatically switch its mode between LOG and S&P after every QSO. . .TP .B FLDIGI If you work RTTY (or any other digital modes), you can communicate with Fldigi through XMLRPC. The FLDIGI keyword will activate the interface. By default it connects to .UR http://localhost:7362/RPC2 http://localhost:7362/RPC2 .UE . If you run Fldigi's xmlrpc server on an different port use \fBFLDIGI\fR=\fIhttp://localhost:port_#/RPC2\fR . .TP \fBMINITEST \fR[=\fINNN\fR] Use this option when the contest is a minitest like contest. In that contests the full contest intervall is divided into shorter sections (e.g. 6 * 10 minute sections in an hour). Any station can be worked once in each of the time sections without counting as dupe. The default length of the sections is 600 seconds (10 minutes), but you can pass another value (in seconds) after the '=' sign. There must be an integral number of time sections per hour! . .TP .B UNIQUE_CALL_MULTI Multiplier is callsign. You have to pass one of these arguments: ALL, BAND. Example: \fBUNIQUE_CALL_MULTI\fR=\fIBAND\fR The argument tells @PACKAGE_NAME@, how to score the callsigns as multipliers: .br .B ALL means the callsign is a multiplier, independet of band. .br .B BAND means the callsign counts as multiplier on different bands. . .TP \fBDKF1\fR=\fIdigi keyer message 1\fR ... \fBDKF12\fR=\fIdigi keyer message 12\fR Use F1 ... F12 keys to send recorded messages for phone. . .TP \fBDKCQM\fR=\fImessage\fR Auto Exchange TU digi message in CQ mode (TR-Log mode) . .TP \fBDKSPM\fR=\fImessage\fR Auto Exchange TU digi message in S&P mode (TR-Log mode) . .TP \fBDKSPC\fR=\fImessage\fR Auto Exchange call digi message in S&P mode (TR-Log mode) . .SH FILES . \fI@prefix@/share/@PACKAGE@/logcfg.dat\fR is a recent example of the configuration file @PACKAGE_NAME@ needs to know what to do. @PACKAGE_NAME@ won't start without one. \fBCopy it into the working directory\fR and edit it before use. You should do your experiments well \fIbefore\fR the contest. It contains, amongst other settings, your call, name of the log file, info about ports for CW keying, packet or rig control, contest rules, points, multipliers etc. . .P \fI@prefix@/share/@PACKAGE@/rules/contestname\fR contains the rules of the various contests. You can easily write one for your favourite contest making use of the various multiplier and points capabilities. Check it before the contest and send a message to .MT tlf-devel@nongnu.org the @PACKAGE_NAME@ development list .ME if anything is wrong (or right!). . .P \fI@prefix@/share/@PACKAGE@/cty.dat\fR contains a flat ASCII database of info about countries. This is the same file as used by CT or TR-Log. Updated versions from Jim, AD1C, are available from: .UR http://www.country-files.com/ Country Files .UE . . .P \fI@prefix@/share/@PACKAGE@/callmaster\fR contains a flat ASCII database of known contest callsigns. Updates are available from .UR http://www.supercheckpartial.com/ Super Check Partial .UE . Save the .I master.scp file as .I callmaster in the working directory (or use \fBCALLMASTER\fR=\fImaster.scp\fR to use that file). It will take precedence over the system installed .IR callmaster . . .P \fISection files\fR contain a flat ASCII database of multpliers like states, sections, provinces, districts, names, ages, etc. They are invoked by including \fBMULT_LIST\fR=\fIsection_file_name\fR in the rules file. . .SH DOCUMENTATION . An operation manual (a little bit outdated) is available in HTML format at .UR http://sharon.esrac.ele.tue.nl/pub/linux/ham/tlf/ the old @PACKAGE_NAME@ project page .UE . . .P An FAQ and other useful tips are installed in the system doc directory under \fI@PACKAGE_TARNAME@\fR. . .SH BUGS Please send bug reports to .MT tlf-devel@nongnu.org the @PACKAGE_NAME@ development list .ME . . .SH AUTHORS .B @PACKAGE_NAME@ was written by .MT "pa0r at eudxf.org" Rein Couperus .ME aka .MT "rein at couperus.com" Rein Couperus .ME but maintained from 2009 onward by .MT "tb at forth-ev.de" Thomas Beierlein .ME . Lots of valuable contributions from PG4I (Joop PA4TU), PA3FWM, LZ3NY, VA3DB, OM4AA, OK1RR, DH5FS, G4KNO and various other contributors. (See the AUTHORS file for more). Thanks to all for improving @PACKAGE_NAME@! . .P Beta testers and feedback are always welcome! tlf-1.4.0/aclocal.m40000644000175000017500000016643113562576652011116 00000000000000# generated automatically by aclocal 1.16.1 -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file 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. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Configure paths for GLIB # Owen Taylor 1997-2001 # Increment this whenever this file is changed. #serial 3 dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject, dnl gthread, or gio is specified in MODULES, pass to pkg-config dnl AC_DEFUN([AM_PATH_GLIB_2_0], [dnl dnl Get the cflags and libraries from pkg-config dnl dnl We can't use PKG_PREREQ because that needs 0.29. m4_ifndef([PKG_PROG_PKG_CONFIG], [pkg.m4 version 0.28 or later is required]) AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program], , enable_glibtest=yes) min_glib_version=ifelse([$1], [], [2.0.0], [$1]) pkg_config_args="glib-2.0 >= $min_glib_version" for module in . $4 do case "$module" in gmodule) pkg_config_args="$pkg_config_args gmodule-2.0" ;; gmodule-no-export) pkg_config_args="$pkg_config_args gmodule-no-export-2.0" ;; gobject) pkg_config_args="$pkg_config_args gobject-2.0" ;; gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; gio*) pkg_config_args="$pkg_config_args $module-2.0" ;; esac done PKG_PROG_PKG_CONFIG([0.16]) no_glib="" if test "x$PKG_CONFIG" = x ; then no_glib=yes PKG_CONFIG=no fi dnl For GLIB_CFLAGS and GLIB_LIBS PKG_CHECK_MODULES([GLIB], [$pkg_config_args], [:], [:]) dnl For the tools PKG_CHECK_VAR([GLIB_GENMARSHAL], [glib-2.0], [glib_genmarshal]) PKG_CHECK_VAR([GOBJECT_QUERY], [glib-2.0], [gobject_query]) PKG_CHECK_VAR([GLIB_MKENUMS], [glib-2.0], [glib_mkenums]) PKG_CHECK_VAR([GLIB_COMPILE_RESOURCES], [gio-2.0], [glib_compile_resources]) AC_MSG_CHECKING(for GLIB - version >= $min_glib_version) if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" enable_glibtest=no fi if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then : else no_glib=yes fi fi if test x"$no_glib" = x ; then glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_glibtest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$GLIB_LIBS $LIBS" dnl dnl Now check if the installed GLIB is sufficiently new. (Also sanity dnl checks the results of pkg-config to some extent) dnl rm -f conf.glibtest AC_TRY_RUN([ #include #include #include int main (void) { unsigned int major, minor, micro; fclose (fopen ("conf.glibtest", "w")); if (sscanf("$min_glib_version", "%u.%u.%u", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_glib_version"); exit(1); } if ((glib_major_version != $glib_config_major_version) || (glib_minor_version != $glib_config_minor_version) || (glib_micro_version != $glib_config_micro_version)) { printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, glib_major_version, glib_minor_version, glib_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GLib. 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 pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((glib_major_version != GLIB_MAJOR_VERSION) || (glib_minor_version != GLIB_MINOR_VERSION) || (glib_micro_version != GLIB_MICRO_VERSION)) { printf("*** GLIB header files (version %d.%d.%d) do not match\n", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", glib_major_version, glib_minor_version, glib_micro_version); } else { if ((glib_major_version > major) || ((glib_major_version == major) && (glib_minor_version > minor)) || ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GLIB (%u.%u.%u) was found.\n", glib_major_version, glib_minor_version, glib_micro_version); printf("*** You need a version of GLIB newer than %u.%u.%u. The latest version of\n", major, minor, micro); printf("*** GLIB 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 pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-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_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_glib" = x ; then AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://www.freedesktop.org/software/pkgconfig/" else if test -f conf.glibtest ; then : else echo "*** Could not run GLIB test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$LIBS $GLIB_LIBS" AC_TRY_LINK([ #include #include ], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GLIB or finding the wrong" echo "*** version of GLIB. If it is not finding GLIB, 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 "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GLIB is incorrectly installed."]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GLIB_CFLAGS="" GLIB_LIBS="" GLIB_GENMARSHAL="" GOBJECT_QUERY="" GLIB_MKENUMS="" GLIB_COMPILE_RESOURCES="" ifelse([$3], , :, [$3]) fi rm -f conf.glibtest ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 12 (pkg-config-0.29.2) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file 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. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file 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. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file 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. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file 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. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file 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. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file 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 macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file 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. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file 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. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file 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. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file 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. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file 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. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file 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. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file 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. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file 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. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $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 if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file 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. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file 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. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file 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. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file 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. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([macros/ax_append_flag.m4]) m4_include([macros/ax_cflags_warn_all.m4]) m4_include([macros/ax_pthread.m4]) m4_include([macros/ax_require_defined.m4]) m4_include([macros/ax_with_curses.m4]) m4_include([macros/ax_with_curses_extra.m4]) tlf-1.4.0/compile0000755000175000017500000001632713562576653010633 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: tlf-1.4.0/AUTHORS0000644000175000017500000000036513562576621010313 00000000000000Rein Couperus Thomas Beierlein contributions by: Joop Stakenborg (PG4I), Dimiter Kroumov (LZ3NY), Martin OK1RR Andy G4KNO Fred DH5FS Nate N0NB Mario DH5YM Ervin HA2OS Zoltan HA5CQZ Stephen W8BSD and others tlf-1.4.0/NEWS0000644000175000017500000020266313562576621007747 00000000000000tlf-1.4.0 ========= Major release Besides some fixed bugs and a lot of internal improvements it provides some new features: Major changes: - Make compiling with hamlib library mandatory and change all internal frequency representation to freq_t type. - Old SCAN functionality got dropped from code, as it was no longer working. - Correct color display for TERM=xterm-256color New features: - Allow using of aliases in multiplier file (Tnx for suggesting to N0NB). See discussion of MULT_FILE in man page for details. - Added CALLMASTER= keywords to allow naming the callmaster database file (default is still 'callmaster') - Repaired old CQWW simulator code (see :sim in man page) - Keep the content of the exchange field if not empty even if RECALL_MULTS is set - actual input gets precedence over stored 'old' data. - Allow vertical resizing of TLF window (before start and/or during use) - Rework the startup code for better readability by users * 'verbose' startup waits for key press before clearing the screen * If started in empty directory (new contest or first start) switch to verbose mode automatically. Bug fixes: - Correct transposition of check and section for arrlss (Tnx N0NB) - Added some more test programs - Fix bug when calling editlog(), - Adapt to new 'rigmode' interface in hamlib library - Correct some problem in sideband selection when switching CW <-> SSB - Fix segfault on missing RIGPORT definition (tnx N0NB) - Fix possible segfaults in readcabrillo() function tlf-1.3.2 ========= Bugfix release. The release mainly fixes a number of bugs, which were discovered since the release of tlf-1.3.1: Minor corrections: - Add build dependencies to INSTALL instructions - check for cmocka testing framework in ./configure and warn if not installed - Minor syntax cleanup in code and documentation Bug fixes: - Fix segement violation if RIGPORT is undefined in logcfg.dat - Fixes some test programs - fix warnigns from clang about taking an abs() from an unsigned number tlf-1.3.1 ========= Maintenance and bugfix release. Besides some fixed bugs and a lot of internal improvements it provides some new features: New features since tlf-1.3.0: - Allow an arbitrary long string for 'RIGPORT' keyword Tnx Ed W3NR. - Added keyword KEYER_BACKSPACE to allow use of backspace in the keyer window. - Added Tesla memorial contest rule and cabrillo format - Use $SHELL environment setting when opening a shell using '!' - Tlf can now reread its own cabrillo files. Tnx HA2OS - Changed BMAUTOGRAB to work only in S&P mode - Most configuration files allow now DOS line endingss. Tnx HA5CQZ - Added documentation for using winkeydaemon. Tnx N0NB - Clarify man page text. Tnx N0NB. - Added a Xressource sample file to set colors for xterm. Tnx N0NB - Using fldigi for DIGI mode allows you to pick up call and exchange from fldigi program - see doc/README.RTTY. Tnx HA2OS - Tlf supports nanoIO interface (https://github.com/w1hkj/nanoIO). Tnx HA2OS - You can now use the CT9 format for cty.dat files. As a main point it supports full callsigns with '=' prefix. For more information see https://www.country-files.com/cty-dat-format/ Tnx Stephen K6BSD New developer features: - Introduce test framework based on cmocka - Add Travis-CI configuration file - reformat code with a astyle. A 'astylerc' file is provided in the tools directory Bug fixes: - Resend report and qso nr with at least 3 digits - WAE: when QTC was set up as BOTH directions the CABRILLO file was created with wrong format - Fix parsing of QTC= keyword - Fix zones display. Old code blinks display in 2s intervalls. Tnx Fred DH5FS. - Fix a bug during sending a longer series of unanswered CQ's. The cursor sometimes jumped to the exchange field. Tnx Zoltan HA5CQZ - Fix bug in BMAUTOGRAB and BMAUTOADD - Do not fallback to 'rxvt' TERM value if tmerinal setting is not recognized. xterm-256color should now work. TnX K6BSD tlf-1.3.0 ========= Major release. Besides some fixed bugs and a lot of internal improvements it provides some new features: Bugfixes: - Fixed wrong parsing of EXCLUDE_MULTILIST keyword. - Fixed recognition of CQ zone for 1Axxx stations. New features: - Allow direct use of fldigis XMLRPC interface for receiving and sending digimode data. See doc/READMA_RTTY.txt and man page for details. Tnx Ervin HA2OS. (The old GMFSK interface to fldigi is still available but will be dropped in next versions). - New keyword MINITEST to support Minitest like contests, where you can operate the same station each time in one of two or more time intervalls. Tnx HA2OS. - New multi keyword UNIQUE_CALL_MULTI for Minitest or CWops CWT contest. Allows to count unique call signs as multi for all band or per band. Tnx HA2OS. - Enable PTT keying via Hamlibs CAT interface (for SSB contests). Tnx Nate N0NB for providing the code. - Updated CTY.DAT to version from January 2017. - Better implementation of WPX prefix recognition. Can now handle call signs with only letters (e.g. RAEM) and long numbers (e.g. DR2006Q). - Add hints to correct own CQ zone to FAQ. - Refactor keying logic to allow having separate keyer devices for CW and DIGI modes at the same time. - Better automatic recognition of ncurses components for different distributions. Adds also support for ncurses versions with split out tinfo database. - Fix color handling and packet screen interface for the new ncurses6. tlf-1.2.4.5 =========== Bugfix release. Bug fixes: - autosend did not work as Enter key was wrongly checked. Tnx Feed DH5FS. tlf-1.2.4.4 =========== Bugfix release. Bug fixes: - Do not change scorewindow state when sending to DX cluster. Tnx HA2OS - Fix Grab function if BMAUTOGRAB not set. - Fix bandmap display if grabbed station is very near to other ones in bandmap. Tnx Fred DH5FS. tlf-1.2.4.3 =========== New feature: - QTC_RECV_LAZY keyword. Setting it skips check of received QTC records for completion. Useful during rx if you record the audio during qso and complete the QTC records later. tlf-1.2.4.2 =========== Bugfix release. Bug fixes: - fix some memory and ressource leaks in seldom used functions Enhancements: - Update and fix spelling errors in man page - Cleanup some code in CW sending logic - Align hamlib's passband argument to new macro: RIG_PASSBAND_NORMAL (provided by the coming hamlib-3.1). That allows to switch frequency without changing the rig passband settings. tlf-1.2.4.1 =========== Bug fixes: - Fix a possible buffer overflow in addmult2 due to strncpy tlf-1.2.4 ========= Maintenance and bugfix release. New features since tlf-1.2.3: - Switch hardcoded keyboard handling which supported only xterm, linux terminal and rxvt to use of ncruses keypad(). That way other terminal settings should be supported as well (Tnx to Nate N0NB for the work). - Extend bandmap functionality. See man page for details (tnx to Ervin HA2OS). * Setting BMAUTOADD in logcfg.dat simplify the adding of heard stations to the bandmap list. Just type in the call and as soon as you turn of to another frequency the call gets added to the bandmap (similar to Ctl-A). * If BMAUTOGRAB is set in logcfg.dat Tlf will automatically grab a call from the bandmap list and put it in the call input field if you tune in next to the station. You can just start working it in S&P by pressing ENTER. Bug fixes: - Cleanup some valgrind warnng about possible memory leaks. - Fix autoconf settings for new lookup of ncurses include files - Fix a segmentation fault if we have unexpected long call sign prefixes tlf-1.2.3 ========= Maintenance and bugfix release. New features since tlf-1.2.2: - Support for ARRL 160m contest (tnx N0NB) - Search MULT_LIST file not only in working direxctory but also in install directory, e.g. /wusr/local/share/tlf (tnx N0NB) - Better calculation of working QRG for RTTY qso's according to the used rig modulations (USB/LSB/FSK) (tnx HA2OS) - Automatic recognition of ncurses install directories (esp. for OpenSUSE) (tnx N0NB) Bug fixes: - Bandmap gets saved even if bandmap is not displayed every 10s. - Fix calculation of remaining spot time for saved badnmap data if tlf is restarted - Fix time update if auto_cq is running. - fixed multi counting for ARRL-SS - Fixed multi counting for SERIAL&SECTION keyword. - Old multi counting code did not correctly differentiate between similar ARRL sections like NE and ONE for DX_&_SECTIONS. Fixed. - Corrected WYSIWYG multi scoring coming in via LAN. tlf-1.2.2 ========= Maintenance and bugfix release. Contains all bugfixes and enhancements from tlf-1.2.2_pre versions (read below) New features since tlf-1.2.2_pre2: - TLF can now write cabrillo files for WAEDC contest - bandmap display * does not show QRG if no active rig control is in use * The actual bandmap list will be saved every 10s. Using this information the last bandmap state will be reconstructed after a restart of TLF. - FAQ * Add instructions about refreshing callmaster database and cty.dat file - update CTY.DAT and callmaster database - Improvements to callmaster database handling * callmaster database can now contain comment lines starting with '#' * Drop size restrictions of the number of calls in the database Bug fixes: * Fix some minor bugs in WAEDC code for RTTY tlf-1.2.2_pre2 ============== New features: - Improved bandmap display * display actual QRG on bandmap * center bandmap around QRG * update bandmap every second * do not show WARC spots in contest mode Improvements to WAEDC QTC handling (by HA2OS) - allow a list of stations known to give QTC's (maybe from last year) QTC_CAP_CALLS=QTC_calls.txt If you use this option, then Tlf will put a "P" flag (means "previous") near known station ifrom the list on bandmap, and in worked window. Eg: 7001.0 * R9AA P - new QTC capable flags: 'L': 'later', 'N': 'NO' You can mark a station on the bandmap for QTC "L"ater or "N"o QTC with Ctrl-L and CTRL-N respective. Flags will automatically deleted as soon as you get at least one QTC from the station. The flags will be stored in a separated file, called QTC_meta.log. If you exit from Tlf, and you start it again later, the marked informations will be available. - stations which can give still more QTC's will not be marked as dupe on the bandmap - Set QTC_AUTO_FILLTIME keyword in logcfg.dat to automatically fill in the the hour for the QTC time (Some stations send only a short time format, e.g. "34 DL3XYZ 9999"). CTRL-F just fills in the last received hour if QTC_AUTO_FILLTIME is not enabled. - You can use ENTER or SPACE to advance between fields in the QTC window. - manually start and stop QTC recording with CTRL-R in QTC window, Bug fixes: - Fix some problems with using LAN mode for WAEDC tlf-1.2.2_pre1 ============== New Features: - Two new contests are supported 'All Asian DX' and 'WAEDC' (both provided by HA2OS) For WAEDC details please see 'doc/README_QTC.txt'. - some new keywords for scoring (by HA2OS) (read man page for details) PFX_MULT_MULTIBAND allows multi scoring for prefixes per ban better continent handling with CONTINENTLIST, CONTINENT_LIST_POINTS and USE_CONTINENTLIST_ONLY. BANDWEIGHT_MULTIS and BANDWEIGHT_POINTS per band weight for points and multis EXCLUDE_MULTILIST and PFX_NUM_MULTI - tlf now send '5nn nr' if you repeat the nr after the QSO (provided by DH5FS) - Update of the manual page to current conventions (by N0NB) - autosend now allows a manual start (see man page). - You can use a custom S&P message instead of the autogenerated one. See S&P_CALL_MSG in man page - tlf reads the audio frequency offset from fldigi via xmlrpc (you have to configure with '--enable-fldigi-xmlrpc' and install XMLRPC-C to use that feature) (by HA2OS). - the CW keyer is now in an popup window - new startup argument: '-r', which disables radio control (HA2OS) Bug fixes - Fix scoring and display of multis from ITUMULT and WAZMULT keyword - Fix some memory leaks - Seek gMFSK.log to the end of file, when Tlf starts - backport some patches from the Debian distribution - Convert the given callsign from logcfg.dat (CALL=...) always to upper case. tlf-1.2.1 ========= Minor maintenance and bugfix release. New features: - New config option SERIAL_OR_SECTION (see man page) - New placeholder '!' for CW ad RTTY macros (received exchange) - Additional display of WARC bands in searchwindow if mode is QSO or DXPED (tnx HA2OS). - Use '?' during call input if call not complete or sure. It now immediately sends the call fragment followed by '?' Bug fixes: - Fix problem with tcvr control for rigs where rig_get_vfo() in hamlibs rig backend is not implemented (tnx HA2OS) - add missing documentation for some configuration parameters to man page - correct segfault in string handling code for RTTY - correct focm.c to allow use of = 2000. - New NO_RST keyword for contests without RS/RST exchange. - Robust AUTOSEND feature - Two new contests: Stewperry and FOC Marathon For details read the NEWS section from 1.2.0_pre1 to 1.2.0_pre4. Thanks to all of you for pointing out bugs, submitting ideas and code and testing. To name a few without any order of ranks or being complete: Martin OK1RR, Fred DM3MF, Andy G4KNO, Nate N0NB and Ervin HA2OS. Bug fixes since 1.2.0_pre4 - false start of autosend when entering a a frequency for band change - setting of the LAN designator character was ignored - initialisation of call sign statistics during ':rescore' was missing tlf-1.2.0_pre4 ============== Prerelease and bugfix version Contains all bug fixes and enhancements from 1.1.4, 1.1.5. and 1.1.6 Thanks for help and input from OK1RR, DH5YM, DH5FS, HA2OS, N0NB and others. New features: - finish new CABRILLO handling (see doc/README.cabrillo for details) * supports CABRILLO v3 * extensible format - Allow editing of exchange field * starts with 'left' key if exchange field is not empty * supports the following keys: + ctrl-A start of line + ctrl-E end of line + left one char left + right one char right + del delete key under cursor + backspace delete char left from cursor + any non control char insert if string not to long - Reworked autosend feature * starts sending call automatically after entereing 2..5 characters of the call in RUN mode * Enable it via ':char' command (accepts 0 (off) or 2..5 as number of characters before autosend start). * shorter calls have to be finished with ENTER key * calculates the expected time to send the call from cw speed and switches to sending exchange after that time is reached * A progress indicator shows the characters already sent. * SPACE and DOWN no longer starts autosend feature, but jumps to exchange field - New cty.dat and new calmaster database. Tnx HA2OS. - Provide a standard 'help.txt' file. Tnx DH5FS. Can be overwritten with your own one in working directory. - Allow to specify portnumbers for LAN-stations via ADDNODE command. Tnx DH5FS. Bug fixes: - Ctrl-k start keyer also in exchange field - Contest rules will be reread after edit of logcfg.dat with :SET or :CFG - Fix display of contest statistics * Q/M now correct and with one digit after decimal point * show band rate only if more than ten QSOs on band - Fix display of worked countries for CQWW - Improved handling of problems with rig link - Initialise tlf's node designator (THISNODE=...) to 'A' even when no LAN is used (needed for bandmap output) - Do not send empty CW or Digimode messages (avoiding turning on and off the transmitter). Tnx HA2OS - Fix wrong order of tests for mult counting (DX_&_SECTIONS has precedence over MULT_LIST in UNIVERSAL contests). Tnx W3NR and DH5FS. - Drop unused keyword '2EU3DX_POINTS' tlf-1.1.6 ========= Minor maintenance and bugfix release. New features: - Reduce minimal livetime for bandmap entries to 30s (requested by DH5YM) - Update ARRL Field Day rules and arrlsections file. Tnx Nate N0NB. - New NO_RST keyword (backported from from tlf-1.2.0 branch). Use it for contests which do not exchange and record RS/RST (e.g. ARRL Field Day or CW Open) * do not add RST into log and do not show RST if NO_RST is set, just add '---' instead Bug fixes: - Correct GPL boilerplate in all source files. Tnx Nate N0NB. - QSO points were not written for WYSIWYG_ONCE multis. - ADIF and cabrillo files missed QSOs for some or all WARC bands. (Even if no WARC bands should be used in contests we add the correct frequency output for these bands now) - fix recognition of ARRL Field day rules (changed rule file to name it 'arrl_fd'). tlf-1.2.0_pre3 ============== Prerelease and test version tlf-1.2.0 will be a major release with some new features and improvements. tlf-1.2.0_pre3 should test some more of them. Contains all bug fixes and enhancements from 1.1.4 and 1.1.5. New features since 1.2.0_pre2: - Major rework how to write of cabrillo logfiles. Old code contained some errors and was not easily extendable to new contests with different cabrillo formats. New routine formats cabrillo log according to a textual description (Which can be modified and extended by the user) in /usr/(local/)share/cabrillo.fmt. See doc/README.cabrillo for details. tlf-1.1.5 ========= Minor maintenance release. New features: - Report line number for badly formatted lines in initial exchange file. That makes it easier to find the problem for files with a lot of entries. Thanks Mario DH5YM for reporting the problem. - Allow to set SIDETONE_VOLUME to 0 independent from choosen sidetone device. Due to a bug in cwdaemon-0.9.4 setting SIDETONE to 0 switches off the sidetone but also the keying. So please... !!! Set SIDETONE_VOLUME = 0 to switch off sidetone output !!! Bug fixes: - Fix display of zone and section in searchlog window - Correct handling of function keys to send messages in digimode. Old code allowed function keys only during call input. New code supports them also in exchange field. tlf-1.1.4 ========= Minor maintenance release. New features: - ask for confirmation about reported problems in config files to give you time to recognize the problems. - Rework of digimode handling together with fldigi. Fix digimode receive routine 'rx_rtty()', make miniterm output more robust and update miniterm also while the cursor is in the exchange field. Drop some unneeded newlines for each function key macro. - Minor corrections and additions to the man page Bug fixes: - Old version segfaults in 'searchlog' function if a really long callsign filled the input field. - Parsing logic for special characters in own exchange (# ...) do not rely anymore on a trailing NL to the exchange macro. - Fix sidetone control. Recognize CWTONE=0 in logcfg.dat, work around a bug in cwdaemon which does not allow to switch tone back on afterwards. - Stop flickering cursor between input or exchange field and dupe searchwindow. - Fix Alt-t (tune) function to switch tuning on for 6 seconds (can be stopped early with any key press). !!Be aware that there are some problems in different cwdaemon versions (no PTT keying, no chance to stop tuning early, ...). Working with the maintainer to fix it. tlf-1.1.3 tlf-1.2.0_pre2 ============== Bugfix release. Old tlf-1.1.2 contained a bug in the parsing logic for logcfg.dat and rules files. It failed to recognize some keywords if there was a similar one with the same beginning (e.g. CLUSTERLOGIN got not recognized as there is also a CLUSTER keyword). i Furthermore it complained about empty lines in that files with: 'Keyword '' not supported'. Thanks to David N1EA and Marting OK1RR for pointing that out. New features: - New keyword CABRILLO= accepted. specifies the cabrillo format to be used (not working yet). Bug fixes: - Implemented new and much more robust parsing logic for keywords. Reworked and rechecked also all parameter handling to allow a better failure handling. - tlf no longer complains about empty lines in config files. - Add support for '~' expansion for '-f' command line switch. (Thanks N1EA). Something like 'tlf -f~/mydir/logcfg.dat' is working now. - Add description of reset of CW bandwidth during band switch and CWBANDWIDTH= keyword to man page. Furthermore some cleanup and internal changes are made to simplify future maintenance, e.g.: - Cleanup of unused variables and comments. - Rename 'configure.in' into 'configure.ac' as former will be no longer accepted by automake-1.13 tlf-1.2.0_pre1 ============== Prerelease for new tlf-1.2.0 tlf-1.2.0 will be a major release with some new features and improvements. The prerelease should test some first main features. New features: - change log file format to make room for recording of actual working frequency (columns 0..79 - old TR-log format, QRG gets added with one decimal after that) - Better check of log file format on startup. Can migrate old logs to new format. - Record actual working QRG in log if a rig is connected - Write QRG into ADIF and Cabrillo export files - Renamed ADIF and Cabrillo files to .adi and .cbr as suggested by Martin OK1RR - Check for size of Terminal (at least 25x80 is needed). Furthermore a lot of cleanup and internal changes are made to simplify future maintenance, e.g.: - A new scheme for color initialisation and naming - Cleanup of unused variables and comments. - Fix configure-script to abort if no ncurses lib is installed. To be done: - Fix generation of cabrillo files (still broken in this prerelease) - Document log file format - make exchange field editable tlf-1.1.2 ========= Minor maintenance release. New features: - Add ARRL 10m Contest rules for DX stations. - Provide more actual multiplier files for arrldx and arrl10m contests. - Add a better recognition of unkown keywords in config file. Bug fixes: - Fix recongnition of COUNTRY_LIST keyword. - fix a segfault problem in exchange handling. tlf-1.1.1 ========= Minor maintenance release. New features: - New doc/README.ssb gives some good hints how to use TLF on SSB contest. Thansk Andy, G4KNO for contributing. Bug fixes: - Fix spelling of unmute command in scripts/play_vk. Tnx G4KNO - Make sure that no packet related functions get called if started with 'tlf -n' - Fix segfault during build of logline if not in contest mode - esp. 'RULES=qso' - Fix display of background for partials when leaving call edit mode tlf-1.1.0 ========= Major release. Besides a lot of fixed bugs it provides some new features and internal improvements. Thanks to all of you for pointing out bugs, submitting ideas and testing. To name some without any order of ranks: Ben NJ8J, Martin OK1RR, Fred DM3MF,i Andy G4KNO, Rob N6ROB and Graham VE3GTC. New features: - move tlf sources to public github repository (http://github.com/TLF/tlf) - implement a new bandmap function (see doc/New_Bandmap.txt for details) * move score display in upper right corner of display to make room for the bandmap * Ctrl-A adds an observed station as spot to the bandmap and broadcasts it to other stations in the LAN * Drop old SPOTLIST display (superseded by new bandmap) - changes in logcfg.dat handling !Fix your contest rules! * allow >9 points for any point scoring * drop old unneeded keywords (MANY_CALLS, SPOTLIST, FILTER) * fixed keywords for CQ_TU_MSG, VKCQM and VKSPM according to manual * BANDMAP=, allows configuration of the new bandmap display (see man page) - Send VKCQM and VKSPM voice messages after end of QSO in SSB. - Use external user adaptable script 'play_vk' for playing of SSB voice key messages - add list of 'usa_canada' states and general 'contest' rules file to installation files - drop special handling for TenTec ORION (correctly handled by hamlib in meantime) - changed handling of comments for WYSIWYG_ONCE and WYSIWYG_MULTI Old code stopped multi recognition at first space in comment string. Changed to use whole string but strip trailing spaces. Was so back before tlf-0.9.21 - Better handling of lines from external multiplier file * Allow comment lines (starting with '#') * strip leading and trailing whitespace * drop empty lines - New actual cty.dat file (December 2011). Thanks Martin OK1RR. Fixed bugs: - segfaults due to a racing condition if heavy load on cluster - '+' and 'INSERT' keys in call and exchange input field respects CTCOMPATIBLE mode now - Allow edit of old QSO's only if call field is empty - Fix display of section in ARRL_SS and recognition of 'U' precedent - Fix upper boundaries for 160 and 40 meters. - Correct rescoring for WYSIWYG_* methods - keywords in logcfg.dat needs to start at column 0 - correction of spelling errors and drop of old infos from man page - a lot of fixes of old problems: * proper locking to prevent racing conditions * fix bad scoring of multis * correct position of pfx display in bottom line of check window * correct display of 1A stations in info line * wrong return value from searchcallarray * wrong handling of corner cases for some internal array scans Reworked internal structure: - did some modernisation of configure.ac - start to use ncurses panel functions for overlapping windows and glib-2 for effective handling of large data collections - switch cty data handling and mults_possible to growing arrays and therefore allowing unlimited number of entries - simplify and drop unneeded code tlf-1.0.5 ========= maintenance release * fixes some nasty racing condition between bandmap code and checkwindow. In result prefix in lower line of checkwindow got displayed wrong, but country was right. Thansk Martin OK1RR for reporting. tlf-1.0.4 ========= maintenance release * fix for wrong handling of recalled exchange (tnx OK1RR). New policy is a s follows - All calls from initial exchange file will be recognised even if part of a complex call, e.g. DL1CCL in LA/DL1CCL/p - All calls from former QSO's have to be exact including any pre- or postcombination - Now complete exchange will be recalled (not only first word) tlf-1.0.3 ========= maintenance release * fix buffer overflow in 'send_lan_message' * fix wrong count of points and qso's for last band entry (tnx OK1RR) tlf-1.0.2 ========= maintenance release * fix bug in sendto call in TLF-1.0.0 and 1.0.1. cwdaemon needs a zero terminated string. tlf-1.0.1 ========= maintenance release * fix logfile read error. Last QSO got read twice. * fix bug in cty.dat and in the routine which reads in the file Some prefixes from BY were not recognised. * fix calculation of sun up and down time in MUF prediction window. It is now based on longitude from country description in cty.dat instead of the former timezone difference. That should be more accurate now. tlf-1.0.0 ========= Major cleanup release. Fixes lot of buffer overruns in string handling, which stopped old version from working with new GCC and GLIBC. * Better recognition of hamlib install (tnx F8FCE) * Rewrote handling of initial exchange file. It now allows empty and comment lines (#) and spaces around the callsign. Leading space before comment gets ignored. * Changed ESC handling in comment and call input field: Does no longer wipe out call and exchange field if you started sending. * New callmaster and cty.dat file (tnx OK1RR). Bugfixes: * Fix input handling of notes. * Fix autocq handling. - First characters gets no longer swallowed. - CQDELAY from logcfg.dat is now handled correct. * fix calculation of sunrise and sunset times * fix calculation of QSO Rate * fix parsing for MARKERDOTS and MARKERCALL keywords in logcfg.dat * make Backspace and Delete-Keys the same to allow some more terminal input encodings tfl-0.9.31-2 ============ 'Possible calls' are now in top left corner, and share the space with the keyer. The 'possible calls' routine first checks the own log and then the callmasterdatabase. Calls can now be up to 12 characters tlf-0.9.31 ========== Fix for buffer overflow. 'Worked' window now searches from start of callsign. tlf-0.9.30 ========== Bug fixes: - exchange needed at least 1 character in dxped mode RTTY miniterm changed to display line feeds (reading formatted texst is easier) RTTY now sends linefeeds before and after the macro. tlf-0.9.29 ========== Bug fixes: - Date display error - Spurious character error - Malloc free error in socket.c I also included Fabian's patch to searchlog.c for testing...I like it. tlf-0.9.28 ========== Bug fixes (country indication did not work, wrong mults file for arrldx_dx). Added interface to gMFSK to enable RTTY contesting. Added new parameters for the logcfg.dat file: GMFSK (use gMFSK as an output device) RTTYMODE (start tlf in RTTY mode) DIGIMODEM=/home/youruser/gmfsk_autofile You need the special version of gMFSK which is used for pskmail (http://pskmail.wikispaces.com). Information on how to install this hacked version of gMFSK-0.6 is on the pskmail wiki. Tlf takes care of all contest related stuff, exactly as you are used to in CW mode... Yyou can use keyboard mode (Alt-K in CW mode) by switching to the gMFSK send field with "Alt-TAB". This toggles between tlf and gMFSK. This will be necessary until I have time to redo the gMFSK interface (a socket interface is on the todo list). tlf-0.9.27 ========== Bug fixes (segfault at startup at some systems) tlf-0.9.26 ========== Bug fix (segfault using the voice keyer). tlf-0.9.25 ========== Bug fix for non-hamlib compilation tlf-0.9.24 ========== - Code adaptation to compile with gcc-4.0 without warnings and segfaults (will compile on UBUNTU-5.10, FC4 etc..). tlf-0.9.23 ========== - New function: start cw before call is complete. In contest mode, you can start sending the call from the call window with 'space' or with 'down-arrow'. - New command: :CHAR asks for number of characters the call must have before sending starts. Default: 0 = OFF. If CHARS is 3, tlf starts sending as soon as you have input the first 3 letters of the call. If you are on slow speed you then have time to complete the call (including backspacing) before sending the first 3 letters is finished. This is of limited use when running above 40 wpm :) - incorporated patch from W9WI fixing a bug in the voice keyer. - changed cw speed control: now default active in call and exchange fields, even if field is not empty - changed qso save logic: RETURN now always logs the qso in SSB and in general qso mode. - New parameter: CHANGE_RST. If set in logcfg.dat, Pg-up and Pg-down will change RST instead of CW speed if field is not empty. Default: off. - fixed nasty bug which caused CQDELAY to start at 0 instead of the default in logcfg.dat - manpage updated for version 0.9.23 tlf-0.9.22 ========== This release fixes a bug to make it compatible with gcc-4.0 / AMD64 - The (local swedish) ssa_mt contest has changed its exchange format into serial number + 4-character grid field. This made it necessary to make a new parameter called SERIAL+GRID4. Tlf extracts the first 4 characters for the multiplier. Input format: e.g. 001 JO21QI, the mult will be JO21. The rules file has also been updated. - Man page updated for version 0.9.22. tlf-0.9.21 ========== This release includes all the patches I received over the last 6 month. Besides making the code more stable, it will enable compilation with gcc 3.4. Further it should be compatible with cwdaemon-0.9 (weighting -50...50). I also got a patch to cure a problem with the qso logic, 2x escape will now reset the qso logic as soon as the call field is empty again. TNX PG4I, VA3DB, OM4AA. Also the anonymous contributions I got through the bugtracker are very welcome!! - Changes: - the cw sidetone setting (TONE) in logcfg.dat has become CWTONE=... - a new parameter LOWBANDS_DOUBLE has been introduced (points x 2 for 40-80-160) - a new parameter CLUSTER_LOG has been introduced. When set the cluster messages are writteni to a 'clusterlog' file... this can be tailed to a terminal window (tail -f clusterlog) - the initial exchange function now also recognises embedded calls (PA/OK1RR/P) - The logcfg.dat template has been updated to version 0.9.21. - The manpage has been updated to version 0.9.21. tlf-0.9.20 ========== - Bug fixed: In cw keyboard, ENTER produced a newline - Bug fixed: In cw keyboard PgUp and PgDwn did not change the cw speed - Bug fixed: The ';' was missing in "note-in-log" if the LAN was not active - Bug fixed: Added to startmsg.c - Bugs fixed: Buffer size handling in various places (tnx for the patch !!) - Added OPEN BSD support to audio.c/h (tnx for the patch!) - Added test version of CWBANDWIDTH=xxx to set bandwidth from Hamlib when mode is switched: A value of 0 to switch off automatic mode switching A value of x for setting the bandwidth If the parameter is not there, PASSBAND_NORMAL is used (default) This test version works for cw only. tlf-0.9.19 ========== - Added INITIAL_EXCHANGE facility. Format: INITIAL_EXCHANGE=names.txt The file must contain a comma-separated list of exchanges, if e.g. the exchange is the name of the operator: PA0R,rein PG4I,joop OK1RR,martin The file can be any length. If RECALL_MULTS is set, tlf will look in this list for the exchange and fill it in for you. There are various contests which have a standard exchange, like e.g. the FOC Marathon. - Doubled the arrays for the cty.dat list, to enable larger-than-standard custom lists. Also set the max. number of mults to 500 per band (these values can be set in tlf.h at compile time). - The "note in log" (';') function will not indicate "Node 'X' , qsonumber" if the LAN is not active. tlf-0.9.18 ========== Version 0.9.18 only adds native support for the ten tec ORION, to bridge the time until Hamlib has an approriate driver. Use RIGMODEL=ORION if you have one. This works with or without Hamlib installed. Set RIGSPEED=57600. The driver uses the internal keyer of the ORION, so you don't need cwdaemon i either (unless you use the tlf voice keyer which uses cwdaemon's PTT output, or an automatic antenna switch controlled by tlf). - I also added a :debug_tty command to test rig links. tlf-0.9.17 ========== - New sound record feature" New command :SOUnd F1 ... F12, s, c will record the voice keyer message for that key 1: Start contest recording to ddhhmm.au 2: Stop contest recording 3: Play back contest recording ddhh[mm][xx] xx is the offset from the start of the file e.g.: 2110 will start from beginning of the day 21 hr 10:00 file. 21100013:00 will start from day 21, hh 10, mm 00, + 13 minutes: 0 seconds To make sure you get a new file every hour make a cron job to run i every hour with: /usr/bin/pkill -f sox > /dev/null 2> /dev/null Once started the recorder will run until the lock file ~/.VRlock is removed. - Bug fixes from the EA RTTY test: Rtty miniterminal improved... wrote to :info, :packet and :help screens S&P mode sent no call with F1 - Added new command :RTTY. This one will switch the MFJ1278B controller into RTTY mode. -- Fixes from the WPX-SSB contest (PI4TUE): Operator got into log view (LESS) and could not get out: tlf will not go from edit into log view anymore (use :VIEW) Operator gives out wrong serial number after the run stn updates the i number: the serial number to be given is now printed prominently below the call field. - Added new parameter: CLUSTERLOGIN=pi4tue-1 if this parameter is present tlf will automatically login a telnet cluster using the call mentioned. This makes it easier for non-linux users to start the program. - :HELP will show a file 'help.txt' instead of the man page. This file can be contest/operator specific. Make your own.... - Autocq: Tlf will stop sending as soon as a call is written into the call field - Tlf will now send LSB or USB to the rig, depending on band. In RTTY mode the rig stays in LSB, no matter which band. tlf-0.9.15 ========== - Added support for MFJ1278B multi-mode controller. You can now use your MFJ1278B as a CW output device with the same controls as for the software keyers (ctrl-k for keyboard mode, escape to leave keyboard mode, pgup for speed-up and pg-down for speed-down). The RTTY mode enables the RTTY contests with the same user interface as with the CW contests, also AMTOR is supported. New parameter for logcfg.dat: MFJ1278_KEYER=, e.g. MFJ1278_KEYER=/dev/ttyS0 New characters for RTTY keyboard mode: '{' TX '}' RX '\' Enter Command Mode 'K' Leave command mode. ',' (comma) or Ctrl-k to go into keyboard mode ESCAPE to leave keyboard mode. The '{' and '}' characters can also be embedded in the Contest messages e.g. F1={RYRY TEST DE % % PSE K} will transmit the message and switch back to RX. New command ':MINiterm' to toggle a 5 x 40 char terminal window on/off. This will only work in DIG mode. - Added experimental :SCAnner function (an idea of OK1RR) The SCAnner funtion combines the Frequency Control function of Hamlib with a rudimentary Audio S-Meter/plotter via the sound card. Just connect the rx output to the soundcard input and you are o.k. Two functions are supported by version 0.9.15: Band Scan Function - can be used as a 'second hand' to scan a band for activity with a separate receiver + computer. You give a Start frequency and a step frequency, and the "S-Meter" values are plotted. SWR scan function - with a simple noise bridge and a computer controlled rx as a frequenzy-stepped detector you can plot antenna swr or filter transfer characteristic. New parameters for logcfg.dat: SC_DEVICE= Sound card device, e.g. SC_DEVICE=/dev/dsp0 S_METER= Calibration curve for the Audio S-Meter. As the audio volume depends on the transfer characteristic of your rx (incl. AGC) you have to calibrate the S-Meter. With this parameter you can create a curve with 20 points e.g.: S_METER=20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 would create a linear curve with a max. value of 20. (Of course you will need something logarithmic). Maximum value = 255 (8 bits). ESCAPE to go back to the previous level. - Bug fixes by PA3FWM tlf-0.9.11 ========== - Added support for Cwdaemon-0.8 New parameters for logcfg.dat: - SOUNDCARD set sidetone output device to soundcard. - SIDETONE_VOLUME=<0 ... 99> set sidetone volume on soundcard - Changed auto-cq delay to 1/2 second increments. - updated cty.dat file (11/15 version) - added usa_canada_states file tlf-0.9.10 ========== - Added SSBPOINTS= to set points per SSB qso - Added CWPOINTS= to set points per CW qso - Extended pr_hostaddress string to hold 47 characters (for long host names) (try TELNETHOST=claudia.esrac.ele.tue.nl TELNETPORT=8000) tlf-0.9.9 ========= - Tlf now uses the original cty.dat file, not necessary to convert to ctydb.dat. - Bug fix: KH2/KK2H and KK2H/KH2 now both in GUAM. - Included the changes Bob N7XY made to cty.dat. Also added TO0O (in Martinique) tlf-0.9.8 ========= - Changed time-to-live default for DX spots to 30 minutes. This can be changed at compile time with the MAXMINUTES constant in cluster_bg.h - Added station ID to log line when logging from differentl nodes in the network. This enables post-contest analysis and log massage after the contest. CQWW_M2 must be set in logcfg.dat for this. - Added qso number and NODE ID to note in log for post contest analysis. - Added code to prevent double node id's in the network. If tlf hears it's own node id on the network, it will ask for another one. - Added :SYNc command, which will resync the logfile and recalculate the score without restarting the program. The automatic resync at program restart has been disabled, as it was generating too many problems. So the only way to resync the log is using the :SYNC command. - Added :REScore command, which will recalculate the score without having to restart the program. - Bug fix: /MM and /AM stations now have no country (no country multiplier value for cqww, only the zone), but do count for points. Tlf tries to calculate the continent from the zone. This is necessary to calculate the points. tlf-0.9.7 ========= - Added new parameter for logcfg.dat: SYNCFILE=user:password@host/dir/syncfile (wget syntax). When you start tlf with this parameter in logcfg.dat tlf will wget the logfile from the relevant node, make a dated backup of your local logfile, and merge the 2 files. WARNING: this contains the password of the remote machine so I also: - Added a new startup option for tlf: -s : tlf -suser:password@host/dir/syncfile will sync the local logfile at startup. - Added parameter to change colors (defaults remain as usual): TLFCOLOR1=23 (Header and footer) TLFCOLOR2=67 (Pop up windows) TLFCOLOR3=70 (Log window) TLFCOLOR4=57 (Markers/dupe colour) TLFCOLOR5=43 (Input fields) TLFCOLOR6=70 (Window frames) The numbers in octal, fg/bg or bg/fg (you have to try it). You should only specify these if you don't agree with the standard colours of tlf. - Call edit mode is now default INSERT mode (log edit remains OVERWRITE mode). - Bug fix: CE0Y/SP9DTP was wrongly located in Poland (also works for VP2E now :-) tlf-0.9.6 ========= - 2 x escape in the exchange field will return to call field and clear it. - Patch for configure.in to enable build under BSD (warning: tlf segfaults under BSD, the cause is being investigated). Tnx Joop PG4I - Changed cabrillo for serial + section multiplier (e.g. ssa mt contest) - Patch from LU4HKN to change version automatically in cabrillo file - Patch from Stephane F8CFE to add new parameter for rig control: RIGCONF=civaddr=0x40,retry=3,rig_pathname=/dev/ttyS0 which will send rig configuration info to Hamlib. - Added new parameter for logcfg.dat: SYNCFILE=user:password@host/dir/syncfile (wget syntax). When you start tlf with this parameter in logcfg.dat tlf will wget the logfile from the relevant node, make a dated backup of your local logfile, and merge the 2 files. WARNING: this contains the password of the remote machine so I also: - Added a new startup option for tlf: -s : tlf -suser:password@host/dir/syncfile will sync the local logfile at startup. - Added parameter to change colors (defaults remain as usual): TLFCOLOR1=23 (Header and footer) TLFCOLOR2=67 (Pop up windows) TLFCOLOR3=70 (Log window) TLFCOLOR4=57 (Markers/dupe colour) TLFCOLOR5=43 (Input fields) TLFCOLOR6=63 (Window frames) The numbers in octal, fg/bg or bg/fg (you have to try it). You should only specify these if you don't agree with the standard colours of tlf. - Call edit mode is now default INSERT mode (log edit remains OVERWRITE mode). - Bug fix: CE0Y/SP9DTP was wrongly located in Poland (also works for VP2E now :-) tlf-0.9.5 ========= - added SSA_MT contest (beta...) - added capital 'Y' to exit check. - added new parameter: NO_BANDSWITCH_ARROWKEYS this will prevent unwanted band switching when you are not using rig control. Band up=alt-b, band down = alt-v (Trlog compatible). - bug fix: qso number was increased on "notes" line - bug fix: zone number was overwritten by the network - bug fix: table overrun in packet modules when too many spots/h came in caused segfault. tlf-0.9.4 ========= - added band output routine for cwdaemon-0.7. New parameter: BANDOUTPUT to switch it on. Cwdaemon-0.7 will output band info on pins 2, 7,8 and 9 of the parallel port. 160m = 1, 80m = 2 .... 10m = 9. This is compatible with commercial band decoders. You can also use different coding: BANDOUTPUT=12484848 will put pin 9 high to switch your 3-bander etc... no need for a decoder, a few relays will do... unless you also want to switch your bandfilters. - known bugs: tlf seg faults when switching from the NEEDED band map to the spot list with very large band maps (the 10m bandmap had 150 entries during cqwwssb sunday afternoon) ce0y/sp9spt shows up as Poland instad of Easter Island... tlf-0.9.3 ========= - Bug fix: Speed setting from logcfg.dat erratic. Changed parameter to CWSPEED=xx (was SPEED=xx). - Bug fix: The auto cq function could not be stopped with ESCAPE - Changed parameter input for TNCPORT and RIGPORT. The parameters now accept direct path entry: e.g. RIGPORT=/dev/ttyS0 or TNCPORT=/dev/ttyUSB1. Tnx ZL2BSJ for the help. This adds USB capability to tlf... - Added parameter NOAUTOCQ which switches off the auto_cq function - Added parameter SSBMODE to start tlf in ssb mode (does not switch the rig). - Added possibility to have several logcfg.dat files: Start tlf with tlf -f. You can now have different configurations per operator. e.g. tlf -fPA0RCT, tlf -fHB9FBL etc... Tlf first looks at the -f parameter, and expects the file in the working directory (e.g. /home/yourcall/contest/2003/cqwwcw/logcfg.dat). The default filename is logcfg.dat. If there is no config file in the working directory tlf opens PACKAGE_DATA_DIR/logcfg.dat, READ ONLY (often needs root privileges). You will need to change the call and other parameters on that one. - :HELp now displays the manpage. - :INFo now also displays the relevant filenames, addresses, and ports. tlf-0.9.2 ========= - Added Adif export capability. The command :ADIf will write the logfile i properly (I hope) formatted to a file with a .adif suffix. - Fixed bug in cqww contest: when a new spot arrived the cq zone would be changed. - Added new method to handle contest rules (by LZ3NY): You can put general parameters, which are the same for all contests (call, keyer speed, window handling etc.) into logcfg.dat. Put CONTEST= into logcfdg.dat. Tlf now first looks if there is a directory "rules/" in the working directory, e.g. /home/yourcall/tlf/2003/cqwwcw. It then loads the file which contains the rules for that contest. If the directory "rules/" is not available there, tlf will look into /usr/local/share/tlf/rules, and try to load the file from there. If not available tlf will set the contest to "qso". This will make it easier to publish the rules files for various contests. If you programmed and tested a new contest, please send the rules file to PA0R@EUDXF.ORG so I can add it to the distribution. - Added support for MC editor (by LZ3NY) - Added QUIT command (by LZ3NY) - Added WAZMULT (by LZ3NY). Uses Cqzone as multiplier. - Added ITUMULT (by LZ5NY). Uses ITUzone as multiplier - Added CQDELAY parameter for setting cqdelay in logcfg.dat (by LZ3NY) - Added PFX_MULT (works like in wpx) - Added Dynamic check for users terminal type (defaults to rxvt) (by LZ3NY). - Added experimental support for xterm. Sometimes xterm starts with the wrong keyboard map. This is the case when the arrow keys don't work. Remedy (workaround) is to first switch into the shell (with "!") and back to tlf (with "exit"). The arrow keys as well as the function keys will now work in most cases. Please report irregularities to PA0R@EUDXF.ORG, I don't expect it to work everywhere. Also the color scheme is the best I could do with the standard colours of xterm. I prefer rxvt! - Changed cw keyer speed control back to pg-up/pg-down. Alt-v will only work in CT compatibility mode. - Changed cqdelay control to ctrl-pgup/ctrl-pgdown. Ctrl-pgup is not possible with TERM=linux, so I had to add a command :CQDelay which will do the same. - Added band switch control with Alt-v and Alt-b (to be compatible with TRLog), right/left arrow will work also - Added Alt-e control to enter edit qso's mode (to be compatible with TRLog), up-arrow will work also. tlf-0.9.1 ========= - Added PFX_MULT, wpx-style multiplier. - Added RXVT parameter (logcfg.dat) which sets the colours for using tlf in an rxvt terminal. tlf-0.9.0 ========== - Added experimental voice keyer support for soundcards, based on the sox package. The voice keyer works as soon as the mode is SSB and you have nominated at least 1 sound file. - added parameters to logcfg.dat for the voice keyer. They are e.g.: ################################# # # # Voice Keyer Files # # (F1 to F12) # ################################# # VKM1=cq.wav VKM2= VKM3=/home/rein/tlf/rst.wav VKM4=/home/rein/tlf/qsl.wav VKM5=/home/rein/tlf/73.wav VKM6=/home/rein/tlf/call.wav VKM7= VKM8= VKM9=/home/rein/tlf/agn.wav VKM10=/home/rein/tlf/qrz.wav VKM11=/home/rein/tlf/spreturn.wav VKM12=/home/rein/tlf/cq.au VKSPR=/home/rein/tlf/spreturn.wav (S&P return message) VKCWR=/home/rein/tlf/qsl.wav (CQ mode return message) # - You have to make your files off line. As tlf uses sox, most audio files can be played. - You can test the voice keyer capability with "play audiofile.xx". If that works you are o.k. I have used sox-12.17 for testing. - The voice keyer uses the same qso logic as TRlog in cw, you only have to say the call and press ENTER twice... (if the exchange is standard, like in the cqww) - If you want to use the PTT line, the cwdaemon must run as well. - You have to invent your own hardware interface to the trx (there are numerous examples floating around the net...) ** comments please ** tlf-0.8.23 ========== - bug fix: zone could not be changed from default in cqww tlf-0.8.22 ========== - Added -x option to use rxvt colours and keys. - Changed sections exchange check routine to accept 1 character mults. - Updated manpage tlf-0.8.21 ========== - Added TXDELAY (Turn On Delay) control for cwdaemon. The value of TOD from logcfg.dat is sent to the keyer at startup. Value range is 0 ... 50 ms (0 switches PTT off completely) - Added Alt-t command for TUNE (stops with any key) - Added Alt-p command for PTT on|off - Added Ctrl-r command to switch lp0-pin 14 on|off (SSB mic|SSS Soundcard) - Some cosmetic changes to the Alt-w (weight) dialogue tlf-0.8.20 ========== - Made tlf compatible wit hamlib-1.1.4 (new rig.h). - Added fast startup (now default). - Verbose startup with -v option - Version output with -V option - Debug mode with -d option (to check rigctl) - Added dialogue window for CW speed and weight setting (Alt-v and Alt-w). - Bug fixes for DX_&_SECTIONS multiplier for ARRL and CQ 160 meter contests (incl. cabrillo output). - Added manpage (tlf.1) tlf-0.8.19 ========== - Added flexible point parameters for logcfg.dat (tnx for contribution Mitko, LZ3NY): COUNTRYLIST=SP_DX:SP List of countries that have exceptional points. Format e.g. NRAUTEST:OH,OH0,OJ0M,SM,OZ,OY,OX etc... You can also give a file name, and put the country information into a file (same format). COUNTRY_LIST_POINTS=5 All countries in the list get 5 points USE_COUNTRYLIST_ONLY Only countries in the list get (5) points, all others 0. MY_COUNTRY_POINTS=1 My own country gets 1 point MY_CONTINENT_POINTS=2 Other countries in my continent get 2 points DX_POINTS=10 DX countries get 10 points The above only takes care of the points, not the multipliers!! You can combine this system with e.g. a WYSIWYG_MULTIBAND or a COUNTRY_MULT, a MULT_LIST or SECTIONS. Please try this well before the contest, so there is still time to make changes if needed!! - Added possibility to give > 9 points (e.g. CQWW-160m) - Added weight control (Alt-w) for netkeyer (-5 ... 5) - Tlf now sends weight from logcfg.dat to netkeyer at startup - Tlf now sends speed from logcfg.dat to netkeyer at startup - Startup works faster at restart tlf-0.8.18 ========== - fixed enter key in CTCOMPATIBLE mode - fixed bug in call entry INSERT mode: tlf would segfault if too many characters were added to a call - fixed bug: backspace would switch off score window tlf-0.8.17 ========== - fixed bug in arrl_usa contest: scoring was broken - fixed bug in arrl_usa contest: network scoring was broken - fixed bug in arrl_usa contest: cabrillo file showed exchange twice - fixed bug in getctydata: country of /QRP stations not recognized tlf-0.8.16 ========== - fixed the colors for the xplanet markerfile - introduced "markers only" possibility for small azimuthal xplanet display - introduced patch from LZ3NY (auto-B4 when hitting ENTER on a dupe). if you don't want it set NOB4 in logcfg.dat. The b4 message must be in F7. - fixed bug in searchlog which made P3A a dupe when you worked YP3A. - changed all pictures in the manual to png format. tlf-0.8.15 ======== - fixed bug leading to SEGFAULT when using shift_F1...F8 - quick fix for bug leading to segfault when tlf is started on a terminal with COLUMNS > 80 - shift_F1...F8 now starts change message for F1...F8 (shift_function key may not work at some terminals!!) - MARKERS= writes a marker file for Xplanet, containing the last 8 entries to the spot list or the bandmap (whichever is active). tlf-0.8.14 ======== - added section mult capability (exchange = mult = section from file) tlf-0.8.13 ======== - reworked bandmap. Goto bandmap with "." or "Alt_," switch between "all" and "needed" with "." scroll with up/down and pg-up/pgdown, leave with ESC. - colour coding for bandmap (only works for contest bands). - grab spot (ctrl-g) with empty call field takes last one in spot list - added "SERIAL+SECTION" multiplier capability for nrau (scandinavian) test - added "MULT_LIST=xxxxxx" capability for nrau test (flat ascii multiplier file (all caps) required in working directory) - fixed "TWO_POINTS" capability for nrau test - fixed ":mult" command to generalize "multipliers worked" display tlf-0.8.10a ========= - fixed bug "tlf does not start without a logfile" tlf-0.8.10 ======== Bug/unwanted feature fixes: - when adding a note ';', it kills the data in the current QSO field - when deleting last QSO '-', and the last QSO was a Note,   QSO's in SCORE window is wrong (QSO's count decremented while it   shouldn't) - when call field is empty, is TAB suposed to give a zone? - when editing last QSO '@', if I go right (with -> key) till end of line,   I'm stuck on next line. Acutally, If you enter "ggggggggggggggggggggggggg"   past the end of line, it will overflow to the next line. And there's no   solution to go back (ESC and :edit to fix it though) But the screen looks   ugly in the mean time. - tlf does not handle very well bogus .log text files. mostly FIXED, needs more work - entering edit last '@', and add an extra 9 to 59 report (I know this is   silly in SSB mode), you can replace the char but you cannot suppr the   extra 9 (either with del or backspace). - when editing call field with left key, it gets green on orange.   but when I do a replace (overwrite a char), the field looses color   back to yellow on blue, but I'm still in edit mode! - disable "ZONEDISPLAY is 1" message on ":zone" cmd - allow ENTER key in exchange field - backspace in edit field mode tlf-0.8.9 Beta for CT adepts..... ======= - after making some 3000 qso's with CT at CT9L in the cqww I added the most important CT commands to tlf. See the new Alt-H command for details... - The up-arrow will now lead into the qso editor as requested by CT freaks... - The CW keyer speed can be adjusted with Alt-V or from within the keyboard routine (Alt-K, ctrl-K or ,), with up/down arrow. - For CT compatibility mode (use Insert and + for running) uncomment the CTCOMPATIBLE command in logcfg.dat. There is NO S&P mode, and Enter will log the qso. (But you asked for it...) tlf-0.8.7 ======= - added time sync protocol for networked nodes. - add TIME_MASTER to logcfg.dat for the master station. - the "@" command now allows to edit the qso's visible (5 qso's). During edit mode LAN receive is stopped. Leave edit mode with enter, tab or esc. - changed insert mode for call edit. tlf-0.8.6 ======= - Bug fixes for CQWW-CW: - W/VE zones default according to all area - Fixed simulator to give right zone for W/VE call areas - Zone input with 1 or 2 characters now possible - Zone correction in exchange field (04 3 ) - Call correction in exchange field (04 W7KJ ) when CALLUPDATE is set in logcfg.dat - D4B, VP2E, VP2M, VP2V, PY0FF, NP2, WP2 now correctly scored - R1ANZ is now CE9 in zone 29 - TA1 is correctly placed in zone 20 (EU) - W2XXX/TI8 now handled correctly - Fixed segmentation fault when too many input chars in input field - Right tlf version in cabrillo file - Edit last qso can now be closed also with enter and tab. tlf-0.8.5 ======= - added parameter TIME_OFFSET= to logcfg.dat. It enables you to use the computer at local time, while tlf logs in utc. Use any value between -23 ... 23. In PA0 the value is -1 for winter time. - in cqww in-country qso's count 0 points also in NA. tlf-0.8.4 beta for arrl sweepstakes ======= - use CONTEST=arrl_ss in logcfg.dat - exchange input like TR, including call correction (needs spaces on both sides) in exchange field - if you want to use this "call update" feature, put CALLUPDATE in logcfg.dat. - put file "arrlsections" file in working directory - scores o.k. for single op and M/S - cabrillo output o.k., answer "A63KS" or whatever you used to "standard exchange" question - :MULt command gives worked multiplier list - 10 extra call memories (alt-0 to alt-9) programmable via logcfg.dat tlf-0.8.3 ======= - Added M2 category for cqww (cabrillo file + logfile) - Added CQWW_M2 command for logcfg.dat - Added LAN_DEBUG command for logcfg.dat (dumps logfile called "debuglog" into working directory, showing all LAN messages received (raw data) - fixed bug allowing "\" command to log blank qso tlf-0.8.2 ======= - Changed SSB log routine now mirrors CW routine with ENTER - fixed bug allowing logging a blank qso in SSB - updated callmaster and ctydb files tlf-0.8.1 ======= - Added serial number handling for e.g. wpx contest tlf-0.8.0 ======= - Added full network support via upd/ip, enabling M/M and M/S operation - Syncs/distributes log data, packet data, frequency data, local spots, local talk between tlf nodes tlf-0.7.4 ======= - fixed bug hiding the WARC bands - Added support for user mode cwdaemon (NETKEYER in logcfg.dat) See new logcfg.dat ( NETKEYER, NETKEYERPORT, NETKEYERHOST) . tlf-0.7.3 ======= - New command: " :simulator" starts a cw simulator for the cqww contest set CONTEST=cqww. - In simulator mode call CQ with F1 to start the run.... - Fixed a nasty bug which showed after working 20 JA stations. You can now go up to MAX_CALLS. tlf-0.7.2 ======= - It is now possible to compile tlf with or without Hamlib. - Use ./configure --enable-hamlib for Hamlib support. tlf-0.7.1 ======= - rig control now on ttyS0 and ttyS1 (logcfg.dat: RIGPORT=0 or RIGPORT=1) - grab spot (ctrl-g) now also works in spot mode tlf-0.7.0 beta test version with hamlib-1.1.3 integration ============================================ - all rig control related functions were changed to work with hamlib-1.1.3 - just compile hamlib-1.1.3 (./configure, make, make install, that's all!!) - this tlf version needs hamlib-1.1.3 library. You may have to do /sbin/ldconfig , so tlf can find the lib at startup !! - tested o.k. for the omni 6 plus. For the rit of the omni and icom rigs you need a patch. - grab spot (ctrl-G) only works in band map - add spot (ctrl-A) adds call in call field to bandmap - frequency conrol (ctrl-F): up/down arrow for 100 Hz, left/right arrow 20 Hz steps. escape goes back to normal mode - mode switch :SSB now gives right side band (USB, LSB) - I need reports on tlf/rig compatability (see Hamlib on source forge for lists) !! tlf-0.6.1 beta test version of telnet / tnc support ==================================================== - fixed bug gobbling up display when long buffers came in - added FIFO clfile - preliminary fix for band map display Use of FIFO input: - comment out the telnet and tnc interfaces in logcfg.dat - uncomment FIFO_INTERFACE - start e.g. call -r | tee /clfile tlf-0.6.0 beta test version of telnet / tnc support ==================================================== bugs: band map not ready (work in progress) - major rewrite to limit disk access in order to speed up various check functions - included telnet client and tnc/modem client for testing - ioctrl for serial port keyer by PA4TU included Telnet operation: ---------------- - provide internet connectivity to DX cluster (e.g. pi4tue) - in logcfg.dat uncomment TELNETHOST=131.155.192.179 - in logcfg.dat uncomment TELNETPORT=8000 - comment out #TNCPORT= - if there is connectivity tlf will connect to the cluster. login with your call. - Leave the telnet client with ":" in first column. - Open cluster window int tlf with ":CLUSTER" - send info to cluster with ctrl-b TNC operation ------------- - #Comment out the telnet options in logcfg.dat - Uncomment either TNCPORT=1 or TNCPORT=2 - Connect a tnc to either ttyS0 or ttyS1 - Set baud rate of tnc to 2400 Bd (fixed, will be made variable) Tlf will now startup into the tnc client. - leave tnc client with ":" in first column - open cluster window in tlf with ":CLU" - send info to tnc with ctrl-b Go back to telnet or tnc client with ":PACKET" you can enter view mode with up-arrow/down-arrow (100 lines max.) Please report bugs to pa0rct@amsat.org tlf-0.5.4.5 =========== - several code changes to speed up dupe check (see ChangeLog) tlf-0.5.4.4 =========== - several code changes to speed up check partials - changed cqww dx scoring for NA stns (2 pts for own cty) tlf-0.5.4.3 ========= - Added MIXED capability - Added :CWMODE, :SSBMODE, and :DIGIMODE commands - Fixed :WRITE command for wysiwig mults (cabrillo output) - Wrote "Howto make your own contest" (in /doc) tlf-0.5.4.2 =========== Bug fix: - fixed wysiwyg_once and wysiwyg_multi - command "\" (log qso without cw) now also works in the exchange field. tlf-0.5.4.1 ======== Bug fixes for debian floppy version: - delete last qso - write cabrillo file (o.k. in original 0.5.4) tlf-0.5.4 ======== Major changes with respect to version tlf-0.5.3 are: - addition of support for e3 editor (for debian mini distro) - bug fix: SEG FAULT when cl3file was not yet present - bug fix: when using /P call continent was not calculated (R1 fd) tlf-0.5.3 ======== Major changes with respect to version tlf-0.5.0 are: - addition of region 1 fieldday contest - complete overhaul of "edit last qso" - auto_complete now gives a warning if the call is locked - added new parameters for "universal" contest - bug fix: 2 point mode for wpx and cqww (NA stns) It is now possible to create your own contest. E.g. for the r1fieldday you can enter the following in logcfg.dat: #dissable all standard contests CONTEST=fieldday COUNTRY_MULT (dxcc countries = multiplier) 2EU3DX_POINTS (2 points for qso's in own continent, 3 for DX) PORTABLE_MULT_2 (4 or 6 points for qso with portable stations) tlf-0.5.2 ======== Major changes with respect to version tlf-0.5.0 are: - Autoconf and automake support - New parameter MANY_CALLS gives you 50 partial calls if you need it - Call edit now includes INSERT and DELETE functions (see the manual..) - New parameters POWERMULT introduced for the arrlfd contest tlf-0.5.0 ========= Major changes with respect to version TLF-0.4.5 are: - Globalisation of the directory structure - Partial call / auto-complete function (optional) - Flush logfile to disk after each qso - Some bug fixes. - Final check on wpx-cw - Added Arrl-fd test version (for hf) - Arrl-fd needed a DIG mode The new directory structure: //.../ separate directory per contest (r/w) /bin binaries and scripts /share/tlf callmaster, ctydb, default templates /share/tlf/doc documentation /share/tlf/examples template config files per contest /share/tlf/src source code /tmp/tlf all temporary files tlf-1.4.0/config.guess0000755000175000017500000012630413562576653011572 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-01-01' # 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 3 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, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) 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 case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} exit ;; *:MidnightBSD:*:*) echo ${UNAME_MACHINE}-unknown-midnightbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; *:Redox:*:*) echo ${UNAME_MACHINE}-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; 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 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; 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 ;; 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 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /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 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # 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 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ 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 -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; 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 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????: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 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi 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 ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #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 -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build 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 -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; mips64el:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) eval $set_cc_for_build X86_64_ABI= # If there is a compiler, see if it is configured for 32-bit objects. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then X86_64_ABI=x32 fi fi echo ${UNAME_MACHINE}-pc-linux-${LIBC}${X86_64_ABI} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # 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. echo i386-sequent-sysv4 exit ;; 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 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*: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 ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; 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|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; 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 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*: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; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' 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; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *: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 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; 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 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "${UNAME_MACHINE}:${UNAME_SYSTEM}" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tlf-1.4.0/COPYING0000644000175000017500000004311013562576621010271 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year 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. tlf-1.4.0/src/0000755000175000017500000000000013562576670010112 500000000000000tlf-1.4.0/src/deleteqso.h0000644000175000017500000000175713562576621012176 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012 Thomas Beierlein * * 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 */ #ifndef DELETEQSO_H #define DELETEQSO_H void delete_qso(void); #endif /* DELETEQSO_H */ tlf-1.4.0/src/qsonr_to_str.c0000644000175000017500000000312713562576621012731 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * i-to-a function for qso number (4 chars) * *--------------------------------------------------------------*/ #include int qsonr_to_str(void) { extern int qsonum; extern char qsonrstr[5]; static int x; static int thousands; static int hundreds; static int tens; static char buffer[5]; x = qsonum; thousands = (x / 1000); x = x - (thousands * 1000); hundreds = (x / 100); x = x - (hundreds * 100); tens = (x / 10); x = x - (tens * 10); buffer[0] = thousands + 48; buffer[1] = hundreds + 48; buffer[2] = tens + 48; buffer[3] = x + 48; buffer[4] = '\0'; strncpy(qsonrstr, buffer, 4); return (0); } tlf-1.4.0/src/getsummary.h0000644000175000017500000000172713562576621012403 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef GETSUMMARY_H #define GETSUMMARY_H int getsummary(FILE *fp); void ask(char *buffer, char *what); #endif /* GETSUMMARY_H */ tlf-1.4.0/src/addcall.c0000644000175000017500000002770713562576621011573 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedüs - HA2OS * * 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 */ /* ------------------------------------------------------------ * add call/band to dupe list * *--------------------------------------------------------------*/ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #define _XOPEN_SOURCE #include #include #include #include #include "addcall.h" #include "addmult.h" #include "addpfx.h" #include "getctydata.h" #include "getpx.h" #include "paccdx.h" #include "searchcallarray.h" #include "tlf.h" #include "zone_nr.h" #include "get_time.h" #include "dxcc.h" #include "bands.h" int excl_add_veto; /* This variable helps to handle in other modules, that station is multiplier or not */ /* In addcall2(), this variable helps to handle the excluded multipliers, which came from lan_logline * the Tlf scoring logic is totally completely different in local and LAN source * the addcall() function doesn't increment the band_score[] array, that maintains the score() * function. Here, the addcall2() is need to separate the points and multipliers. * This variable is used in readcall() too. */ int addcall(void) { extern char hiscall[]; extern int nr_worked; extern struct worked_t worked[]; extern char comment[]; extern int cqww; extern int bandinx; extern int countries[MAX_DATALINES]; extern int zones[]; extern int countryscore[]; extern int addcty; extern int zonescore[]; extern int addzone; extern int countrynr; extern int arrldx_usa; extern int pacc_pa_flg; extern int universal; extern int country_mult; extern int w_cty; extern int ve_cty; extern int dx_arrlsections; extern int wazmult; extern int itumult; extern char pxstr[]; extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern int addcallarea; extern int continentlist_only; extern char continent_multiplier_list[7][3]; extern char continent[]; extern int exclude_multilist_type; extern char countrylist[][6]; extern int trxmode; extern struct tm *time_ptr; static int found = 0; static int i, j, z = 0; static int add_ok; int pfxnumcntidx = -1; int pxnr = 0; excl_add_veto = 0; get_time(); found = searchcallarray(hiscall); if (found == -1) { i = nr_worked; g_strlcpy(worked[i].call, hiscall, 20); nr_worked++; } else i = found; worked[i].qsotime[trxmode][bandinx] = (long)mktime(time_ptr); j = getctydata(hiscall); worked[i].country = j; if (strlen(comment) >= 1) { /* remember last exchange */ strcpy(worked[i].exchange, comment); if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) { /* if (strlen(zone_fix) > 1) { z = zone_nr(zone_fix); } else z = zone_nr(zone_export); */ z = zone_nr(comment); } } add_ok = 1; /* look if certain calls are excluded */ if ((arrldx_usa == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) add_ok = 0; if ((country_mult == 1) && (universal == 1)) add_ok = 1; if ((dx_arrlsections == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) add_ok = 0; if (pacc_pa_flg == 1) add_ok = pacc_pa(); // if pfx number as multiplier if (pfxnummultinr > 0) { getpx(hiscall); pxnr = pxstr[strlen(pxstr) - 1] - 48; int pfxi = 0; while (pfxi < pfxnummultinr) { if (pfxnummulti[pfxi].countrynr == j) { pfxnumcntidx = pfxi; break; } pfxi++; } } if (continentlist_only == 1 || (continentlist_only == 0 && exclude_multilist_type == 1)) { int ci = 0; int cont_in_list = 0; while (strlen(continent_multiplier_list[ci]) != 0) { if (strcmp(continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if ((cont_in_list == 0 && continentlist_only == 1) || (cont_in_list == 1 && continentlist_only == 0 && exclude_multilist_type == 1)) { add_ok = 0; addcty = 0; addcallarea = 0; excl_add_veto = 1; } } if (exclude_multilist_type == 2) { int ci = 0; while (strlen(countrylist[ci]) != 0) { if (getctynr(countrylist[ci]) == j) { add_ok = 0; addcty = 0; addcallarea = 0; excl_add_veto = 1; } ci++; } } if (add_ok == 1) { worked[i].band |= inxes[bandinx]; /* worked on this band */ switch (bandinx) { case BANDINDEX_160: case BANDINDEX_80: case BANDINDEX_40: case BANDINDEX_20: case BANDINDEX_15: case BANDINDEX_10: if (pfxnumcntidx < 0) { if (j != 0 && (countries[j] & inxes[bandinx]) == 0) { countries[j] |= inxes[bandinx]; countryscore[bandinx]++; addcty = j; } if (z != 0 && (zones[z] & inxes[bandinx]) == 0) { zones[z] |= inxes[bandinx]; zonescore[bandinx]++; addzone = z; } } else { if ((pfxnummulti[pfxnumcntidx].qsos[pxnr] & inxes[bandinx]) == 0) { pfxnummulti[pfxnumcntidx].qsos[pxnr] |= inxes[bandinx]; addcallarea = 1; countryscore[bandinx]++; zonescore[bandinx]++; } } break; case BANDINDEX_12: case BANDINDEX_17: case BANDINDEX_30: if (j != 0 && (countries[j] & inxes[bandinx]) == 0) { countries[j] |= inxes[bandinx]; addcty = j; } if (z != 0 && (zones[z] & inxes[bandinx]) == 0) { zones[z] |= inxes[bandinx]; addzone = z; } break; } } addmult(); /* for wysiwyg */ return (j); } /* -------------------------for network qso's-----------------------------------------*/ int addcall2(void) { extern int nr_worked; extern struct worked_t worked[]; extern int cqww; extern int countries[MAX_DATALINES]; extern int zones[]; extern int countryscore[]; extern int zonescore[]; extern int pacc_pa_flg; extern int universal; extern int country_mult; extern char lan_logline[]; extern int band_score[]; extern int wpx; extern int wazmult; extern int itumult; extern char pxstr[]; extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern int addcallarea; extern int countrynr; extern int continentlist_only; extern char continent_multiplier_list[7][3]; extern char continent[]; extern int pfxmultab; extern int exclude_multilist_type; extern char countrylist[][6]; extern int trxmode; int found = 0; int i, j, p, z = 0; int add_ok; char lancopy[6]; char hiscall[20]; char comment[40]; int bandinx; int pfxnumcntidx = -1; int pxnr = 0; excl_add_veto = 0; char date_and_time[16]; struct tm qsotime; time_t qsotimets; g_strlcpy(hiscall, lan_logline + 29, 20); *strchrnul(hiscall, ' ') = '\0'; /* terminate on first blank */ g_strlcpy(comment, lan_logline + 54, 31); *strchrnul(comment, ' ') = '\0'; /* terminate on first blank */ /* FIXME: worked array needs mutex protection */ found = searchcallarray(hiscall); if (found == -1) { i = nr_worked; g_strlcpy(worked[i].call, hiscall, 20); nr_worked++; } else i = found; j = getctynr(hiscall); bandinx = get_band(lan_logline); /* calculate QSO timestamp from lan_logline */ memset(&qsotime, 0, sizeof(struct tm)); strncpy(date_and_time, lan_logline + 7, 15); strptime(date_and_time, "%d-%b-%y %H:%M", &qsotime); qsotimets = mktime(&qsotime); worked[i].qsotime[trxmode][bandinx] = qsotimets; worked[i].country = j; if (strlen(comment) >= 1) { // strcpy(worked[i].exchange,comment); if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) z = zone_nr(comment); } add_ok = 1; /* look if certain calls are excluded */ /* if ((arrldx_usa ==1) && ((j == w_cty) || (j == ve_cty))) add_ok = 0; */ if ((country_mult == 1) && (universal == 1)) add_ok = 1; if (pacc_pa_flg == 1) /* FIXME: Does not work for LAN qso's as pacc_pa uses global variables * set from foreground task */ add_ok = pacc_pa(); // if pfx number as multiplier if (pfxnummultinr > 0) { getpx(hiscall); /* FIXME: uses global 'pxstr' for background job */ pxnr = pxstr[strlen(pxstr) - 1] - 48; int pfxi = 0; while (pfxi < pfxnummultinr) { if (pfxnummulti[pfxi].countrynr == j) { pfxnumcntidx = pfxi; break; } pfxi++; } add_ok = 1; } if (continentlist_only == 1 || (continentlist_only == 0 && exclude_multilist_type == 1)) { int ci = 0; int cont_in_list = 0; while (strlen(continent_multiplier_list[ci]) != 0) { if (strcmp(dxcc_by_index(j)->continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if ((cont_in_list == 0 && continentlist_only == 1) || (cont_in_list == 1 && continentlist_only == 0 && exclude_multilist_type == 1)) { excl_add_veto = 1; } } if (exclude_multilist_type == 2) { int ci = 0; while (strlen(countrylist[ci]) != 0) { if (getctynr(countrylist[ci]) == j) { excl_add_veto = 1; } ci++; } } if (add_ok == 1) { bandinx = get_band(lan_logline); band_score[bandinx]++; worked[i].band |= inxes[bandinx]; /* worked on this band */ if (excl_add_veto == 0) { switch (bandinx) { case BANDINDEX_160: case BANDINDEX_80: case BANDINDEX_40: case BANDINDEX_20: case BANDINDEX_15: case BANDINDEX_10: if (pfxnumcntidx < 0) { if (j != 0 && (countries[j] & inxes[bandinx]) == 0) { countries[j] |= inxes[bandinx]; countryscore[bandinx]++; // addcty = j; } if (z != 0 && (zones[z] & inxes[bandinx]) == 0) { zones[z] |= inxes[bandinx]; zonescore[bandinx]++; // addzone = z; } } else { if ((pfxnummulti[pfxnumcntidx].qsos[pxnr] & BAND10) == 0) { pfxnummulti[pfxnumcntidx].qsos[pxnr] |= inxes[bandinx]; addcallarea = 1; zonescore[bandinx]++; countryscore[bandinx]++; } } break; case BANDINDEX_30: case BANDINDEX_17: case BANDINDEX_12: if (j != 0 && (countries[j] & inxes[bandinx]) == 0) { countries[j] |= inxes[bandinx]; } if (z != 0 && (zones[z] & inxes[bandinx]) == 0) { zones[z] |= inxes[bandinx]; } break; } } } if (wpx == 1 || pfxmultab == 1) { if (lan_logline[68] != ' ') { strcpy(lancopy, " "); /* max 5 char for prefix written in makelogline */ strncpy(lancopy, lan_logline + 68, 5); for (p = 0; p <= 5; p++) { // terminate at first space if (lancopy[p] == ' ') { lancopy[p] = '\0'; break; } } bandinx = get_band(lan_logline); add_pfx(lancopy, bandinx); } } addmult2(); /* for wysiwyg from LAN */ return (j); } int get_band(char *logline) { int j = 0; switch (atoi(logline)) { case 160: j = BANDINDEX_160; break; case 80: j = BANDINDEX_80; break; case 40: j = BANDINDEX_40; break; case 20: j = BANDINDEX_20; break; case 15: j = BANDINDEX_15; break; case 10: j = BANDINDEX_10; break; case 12: j = BANDINDEX_12; break; case 17: j = BANDINDEX_17; break; case 30: j = BANDINDEX_30; break; } return (j); } tlf-1.4.0/src/paccdx.h0000644000175000017500000000212513562576621011441 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef PACCDX_H #define PACCDX_H #define W_CALL 0 #define VE_CALL 1 #define ZL_CALL 2 #define JA_CALL 3 #define PY_CALL 4 #define CE_CALL 5 #define LU_CALL 6 #define VK_CALL 7 #define ZS_CALL 8 #define UA9_CALL 9 int pacc_pa(void); #endif /* PACCDX_H */ tlf-1.4.0/src/recall_exchange.c0000644000175000017500000000571413562576621013305 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * Copyright (C) 201-2011 Thomas Beierlein * * 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:q * 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 "initial_exchange.h" #include "tlf.h" #include "tlf_curses.h" /** \brief Recall former exchange or lookup initial exchange file * * First search 'hiscall' in already worked stations (callarray). If not found * there lookup 'hiscall' in initial exchange file. If found somewhere copy * the according exchange into the 'comment' field. * * \return 1 - found, -1 - not found, 0 - call field was empty */ int recall_exchange(void) { extern int nr_worked; extern struct worked_t worked[]; extern char hiscall[]; extern char comment[]; extern struct ie_list *main_ie_list; int i, l; int found = -1; char *loc, *loc2; struct ie_list *current_ie; if (strlen(hiscall) == 0) return 0; /* respect content which is already in comment field */ if (strlen(comment) != 0) return 0; l = strlen(hiscall); /* search backwards through list of worked stations */ for (i = nr_worked - 1; i >= 0; i--) { /* first search call in already worked stations */ /* call has to be exact -> la/dl1jbe/p must be the same again */ if ((strstr(worked[i].call, hiscall) == worked[i].call) && (*(worked[i].call + l) == '\0' || *(worked[i].call + l) == ' ')) { found = 1; strcpy(comment, worked[i].exchange); break; } } if (found == -1) { /* if no exchange could be recycled and no comment available * search initial exchange list (if available) */ if (strlen(comment) == 0 && main_ie_list != NULL) { current_ie = main_ie_list; while (current_ie) { /* call from IE_List has to be a substring of hiscall * but must be delimited on both sides by '/' or eos */ if ((loc = strstr(hiscall, current_ie->call)) != NULL) { loc2 = loc + strlen(current_ie->call); if (((loc == hiscall) || (*(loc - 1) == '/')) && ((*loc2 == '\0') || (*loc2 == '/'))) { found = 1; strcpy(comment, current_ie->exchange); break; } } current_ie = current_ie->next; } } } if (found) { mvprintw(12, 54, comment); refreshp(); } return found; } tlf-1.4.0/src/logview.h0000644000175000017500000000164313562576621011657 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef LOGVIEW_H #define LOGVIEW_H int logview(void); #endif /* LOGVIEW_H */ tlf-1.4.0/src/getexchange.h0000644000175000017500000000175313562576621012467 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef GETEXCHANGE_H #define GETEXCHANGE_H int checkexchange(int x); char *getgrid(char *comment); int getexchange(void); #endif /* GETEXCHANGE_H */ tlf-1.4.0/src/set_tone.h0000644000175000017500000000172513562576621012024 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SET_TONE_H #define SET_TONE_H int set_tone(void); void write_tone(void); #endif /* end of include guard: SET_TONE_H */ tlf-1.4.0/src/showinfo.c0000644000175000017500000000723113562576621012031 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * * Make info string for lower status line * x - countrynumber *--------------------------------------------------------------*/ /** Show infos for selected country on bottom of screen * * Prepares info string for the selected country and shows it on the * bottom line of the screen. * * /param x Country number */ #include #include #include #include #include "dxcc.h" #include "qrb.h" #include "showinfo.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #define LINELENGTH 80 void showinfo(int x) { extern char cqzone[]; extern char ituzone[]; extern double DEST_Lat; extern double DEST_Long; extern int timeoffset; extern long timecorr; extern char itustr[]; extern int mycountrynr; extern char backgrnd_str[]; int cury, curx; char pxstr[16]; char countrystr[26]; char zonestr[3]; char contstr[3]; double bearing; double range; char timebuff[80]; dxcc_data *dx; prefix_data *pfx; double d; time_t now; struct tm *ptr1; if (x == SHOWINFO_DUMMY) pfx = prefix_by_index(prefix_count()); else pfx = prefix_by_index(x); dx = dxcc_by_index(pfx -> dxcc_index); strcpy(pxstr, dx->pfx); strcpy(countrystr, dx->countryname); /* country */ if (strlen(cqzone) < 2) { sprintf(zonestr, "%02d", dx->cq); /* cqzone */ strcpy(cqzone, zonestr); } else { strncpy(zonestr, cqzone, 2); zonestr[2] = '\0'; } if (strlen(ituzone) < 2) { sprintf(itustr, "%02d", dx->itu); /* itu zone */ } else { strncpy(itustr, ituzone, 2); itustr[2] = '\0'; } if (pfx->timezone != INFINITY) d = pfx->timezone; else d = dx->timezone; /* GMT difference */ now = (time(0) + (long)((timeoffset - d) * 3600) + timecorr); ptr1 = gmtime(&now); strftime(timebuff, 80, "%H:%M", ptr1); if (pfx->lat != INFINITY) DEST_Lat = pfx->lat; else DEST_Lat = dx->lat; /* where is he? */ if (pfx->lon != INFINITY) DEST_Long = pfx->lon; else DEST_Long = dx->lon; if (pfx->continent != NULL) strncpy(contstr, pfx->continent, 2); /* continent */ else strncpy(contstr, dx->continent, 2); /* continent */ contstr[2] = '\0'; getyx(stdscr, cury, curx); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(LINES - 1, 0, backgrnd_str); if (contstr[0] != '-') { mvprintw(LINES - 1, 0, " %s %s", pxstr, countrystr); mvprintw(LINES - 1, 26, " %s %s", contstr, zonestr); if (x != 0 && x != mycountrynr && 0 == get_qrb(&range, &bearing)) { mvprintw(LINES - 1, 35, "%.0f km/%.0f deg ", range, bearing); } mvprintw(LINES - 1, LINELENGTH - 17, " DX time: %s", timebuff); } attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(cury, curx, ""); } tlf-1.4.0/src/zone_nr.c0000644000175000017500000000230213562576621011641 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * get zone number * *--------------------------------------------------------------*/ int zone_nr(char *comment) { int z = 0; if (comment[0] <= 57 && comment[0] >= 48) z = (comment[0] - 48) * 10; if (comment[1] <= 57 && comment[1] >= 48) z = (comment[1] - 48) + z; return (z); } tlf-1.4.0/src/note.c0000644000175000017500000000501413562576621011137 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 note in log * *--------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "nicebox.h" // Includes curses.h #include "scroll_log.h" int include_note(void) { extern char backgrnd_str[]; extern char logfile[]; extern char qsonrstr[]; extern char thisnode; char buffer[80] = ""; char buffer2[LOGLINELEN + 1] = ""; int i; FILE *fp; attron(A_STANDOUT); mvprintw(15, 1, " "); nicebox(14, 0, 1, 78, "Note"); attron(A_STANDOUT); mvprintw(15, 1, ""); echo(); getnstr(buffer, 78); noecho(); buffer2[0] = '\0'; if (lan_active == 1) { sprintf(buffer2, "; Node %c, %d : ", thisnode, atoi(qsonrstr) - 1); } else sprintf(buffer2, "; "); if (strlen(buffer) >= 1) { strncat(buffer2, buffer, (LOGLINELEN - 1) - strlen(buffer2)); memset(buffer2 + strlen(buffer2), ' ', (LOGLINELEN - 1) - strlen(buffer2)); /* fill spaces */ buffer2[LOGLINELEN - 1] = '\0'; if ((fp = fopen(logfile, "a")) == NULL) { endwin(); fprintf(stdout, "\nnote.c: Error opening log file.\n"); exit(1); } fputs(buffer2, fp); fputs("\n", fp); fclose(fp); strncpy(qsos[nr_qsos], buffer2, LOGLINELEN - 1); nr_qsos++; scroll_log(); strncpy(logline4, buffer2, 80); /* max. 80 columns */ clear_display(); } attron(COLOR_PAIR(C_LOG | A_STANDOUT)); for (i = 14; i <= 16; i++) mvprintw(i, 0, backgrnd_str); return (0); } tlf-1.4.0/src/sunup.h0000644000175000017500000000173713562576621011361 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SUNUP_H #define SUNUP_H void sunup(double DEST_Lat, double *sunrise, double *sundown); #endif /* end of include guard: SUNUP_H */ tlf-1.4.0/src/zone_nr.h0000644000175000017500000000165413562576621011657 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef ZONE_NR_H #define ZONE_NR_H int zone_nr(char *comment); #endif /* ZONE_NR_H */ tlf-1.4.0/src/checkqtclogfile.c0000644000175000017500000000463613562576621013332 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Ervin Hegedüs - HA2OS * 2015 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * make sure QTC logfile is present and can be opened for append * - create one if it does not exist * *--------------------------------------------------------------*/ #include #include #include #include "qtcvars.h" // Includes globalvars.h #include "startmsg.h" int checkqtclogfile() { FILE *fp; /* check if logfile exist and can be opened for read */ if (qtcdirection & SEND) { showstring("Checking:", QTC_SENT_LOG); if ((fp = fopen(QTC_SENT_LOG, "r")) == NULL) { if (errno == EACCES) { showmsg("Can not access QTC log file"); return 1; } if (errno == ENOENT) { /* File not found, create new one */ showmsg("Log file not found, creating new one"); sleep(1); if ((fp = fopen(QTC_SENT_LOG, "w")) == NULL) { /* cannot create logfile */ showmsg("Creating QTC logfile not possible"); return 1; } } } if (fp) fclose(fp); } if (qtcdirection & RECV) { showstring("Checking:", QTC_RECV_LOG); if ((fp = fopen(QTC_RECV_LOG, "r")) == NULL) { if (errno == EACCES) { showmsg("Can not access QTC log file"); return 1; } if (errno == ENOENT) { /* File not found, create new one */ showmsg("Log file not found, creating new one"); sleep(1); if ((fp = fopen(QTC_RECV_LOG, "w")) == NULL) { /* cannot create logfile */ showmsg("Creating QTC logfile not possible"); return 1; } } } if (fp) fclose(fp); } return 0; } tlf-1.4.0/src/addpfx.c0000644000175000017500000000527413562576621011450 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedüs - HA2OS * 2015 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * add prefix * *--------------------------------------------------------------*/ #include #include #include "tlf.h" #include "bands.h" #define MAX_PFX_LEN 5 unsigned int nr_of_px = 0; unsigned int nr_of_px_ab = 0; struct { char pfx[MAX_PFX_LEN + 1]; int bands; } prefixes_worked[MAX_CALLS]; unsigned int pfxs_per_band[NBANDS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int add_pfx(char *pxstr, unsigned int bandindex) { extern int pfxmultab; int q = 0, found = 0, bandfound = 0; prefixes_worked[nr_of_px].pfx[0] = '\0'; prefixes_worked[nr_of_px].bands = 0; for (q = 0; q <= nr_of_px; q++) { if (strcmp(pxstr, prefixes_worked[q].pfx) == 0) { /* pfx already worked */ found = 1; if (prefixes_worked[q].bands & inxes[bandindex]) { bandfound = 1; } else { /* pfx new on band */ prefixes_worked[q].bands |= inxes[bandindex]; nr_of_px_ab++; pfxs_per_band[bandindex]++; } break; } } if (found != 1) { /* new pfx */ g_strlcpy(prefixes_worked[nr_of_px].pfx, pxstr, MAX_PFX_LEN + 1); prefixes_worked[nr_of_px].bands |= inxes[bandindex]; nr_of_px++; nr_of_px_ab++; pfxs_per_band[bandindex]++; } if (pfxmultab != 1) { return (found); } else { return (bandfound); } } unsigned int GetNrOfPfx_once() { return nr_of_px; } unsigned int GetNrOfPfx_multiband() { return nr_of_px_ab; } unsigned int GetNrOfPfx_OnBand(unsigned int bandindex) { if (bandindex < NBANDS) return pfxs_per_band[bandindex]; else return 0; } void InitPfx() { int i; nr_of_px = 0; nr_of_px_ab = 0; for (i = 0; i < NBANDS; i++) { pfxs_per_band[i] = 0; } } tlf-1.4.0/src/sunup.c0000644000175000017500000000355413562576621011353 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 "get_time.h" #define RADIAN (180.0 / M_PI) /** Compute sun up and down at given lattitude * * \param lat - Lattitude * \param sunrise - local sunrise in hours * \param sundown - local sundown in hours */ void sunup(double DEST_Lat, double *sunrise, double *sundown) { extern struct tm *time_ptr; double lat; double sun_lat; double total_days; double sunshine; lat = DEST_Lat / RADIAN; get_time(); total_days = time_ptr->tm_yday + 10; /* days after lower culmination of the sun */ if (total_days >= 365.25) total_days -= 365.25; if (total_days <= 0.0) total_days += 365.25; /* calculate todays lattitude of the sun */ sun_lat = asin(sin(23.439 / RADIAN) * sin(((total_days - 90.086) / 365.25) * 360 / RADIAN)) * RADIAN; /* sunshine period today at given lat */ sunshine = (24.0 / 180.0) * RADIAN * acos(-tan(lat) * tan(sun_lat / RADIAN)); *sunrise = 12.0 - sunshine / 2; *sundown = 12.0 + sunshine / 2; } tlf-1.4.0/src/background_process.h0000644000175000017500000000222613562576621014056 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014 Thomas Beierlein * * 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 */ #ifndef BACKGROUND_PROCESS_H #define BACKGROUND_PROCESS_H void *background_process(void *); void stop_background_process(void); void start_background_process(void); void setSimulatorState(int n); #endif /* end of include guard: BACKGROUND_PROCESS_H */ tlf-1.4.0/src/writeparas.h0000644000175000017500000000171213562576621012361 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef WRITEPARAS_H #define WRITEPARAS_H int writeparas_file(void); int writeparas(void); #endif /* WRITEPARAS_H */ tlf-1.4.0/src/rules.h0000644000175000017500000000174213562576621011335 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2003 LZ3NY * 2003-2004 Rein Couperus * 2011-2015 Thomas Beierlein * * 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 */ #ifndef RULES_H #define RULES_H int read_rules(); #endif /* RULES_H */ tlf-1.4.0/src/store_qso.h0000644000175000017500000000166713562576621012227 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef STORE_QSO_H #define STORE_QSO_H int store_qso(char *loglineptr); #endif /* STORE_QSO_H */ tlf-1.4.0/src/addpfx.h0000644000175000017500000000211413562576621011443 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef ADDPFX_H #define ADDPFX_H int add_pfx(char *pxstr, unsigned int bandindex); unsigned int GetNrOfPfx_once(); unsigned int GetNrOfPfx_multiband(); unsigned int GetNrOfPfx_OnBand(unsigned int bandindex); void InitPfx(); #endif /* ADDPFX_H */ tlf-1.4.0/src/gettxinfo.h0000644000175000017500000000214013562576621012203 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free oftware; 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 */ #ifndef GETTXINFO_H #define GETTXINFO_H #define SETCWMODE (-1) #define SETSSBMODE (-2) #define RESETRIT (-3) #define SETDIGIMODE (-4) #include void set_outfreq(freq_t hertz); freq_t get_outfreq(); void gettxinfo(void); #endif /* GETTXINFO_H */ tlf-1.4.0/src/Makefile.in0000644000175000017500000012252713562576653012111 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = tlf$(EXEEXT) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ax_append_flag.m4 \ $(top_srcdir)/macros/ax_cflags_warn_all.m4 \ $(top_srcdir)/macros/ax_pthread.m4 \ $(top_srcdir)/macros/ax_require_defined.m4 \ $(top_srcdir)/macros/ax_with_curses.m4 \ $(top_srcdir)/macros/ax_with_curses_extra.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_tlf_OBJECTS = addarea.$(OBJEXT) addcall.$(OBJEXT) addmult.$(OBJEXT) \ addpfx.$(OBJEXT) addspot.$(OBJEXT) audio.$(OBJEXT) \ autocq.$(OBJEXT) background_process.$(OBJEXT) \ bandmap.$(OBJEXT) bands.$(OBJEXT) cabrillo_utils.$(OBJEXT) \ calledit.$(OBJEXT) callinput.$(OBJEXT) changefreq.$(OBJEXT) \ changepars.$(OBJEXT) checklogfile.$(OBJEXT) \ checkqtclogfile.$(OBJEXT) checkparameters.$(OBJEXT) \ cleanup.$(OBJEXT) clear_display.$(OBJEXT) \ clusterinfo.$(OBJEXT) cw_utils.$(OBJEXT) dxcc.$(OBJEXT) \ deleteqso.$(OBJEXT) displayit.$(OBJEXT) edit_last.$(OBJEXT) \ editlog.$(OBJEXT) err_utils.$(OBJEXT) fldigixmlrpc.$(OBJEXT) \ freq_display.$(OBJEXT) focm.$(OBJEXT) genqtclist.$(OBJEXT) \ get_time.$(OBJEXT) getctydata.$(OBJEXT) getexchange.$(OBJEXT) \ getmessages.$(OBJEXT) getpx.$(OBJEXT) getsummary.$(OBJEXT) \ gettxinfo.$(OBJEXT) getwwv.$(OBJEXT) grabspot.$(OBJEXT) \ initial_exchange.$(OBJEXT) keyer.$(OBJEXT) lancode.$(OBJEXT) \ last10.$(OBJEXT) listmessages.$(OBJEXT) log_to_disk.$(OBJEXT) \ logit.$(OBJEXT) logview.$(OBJEXT) locator2longlat.$(OBJEXT) \ main.$(OBJEXT) makelogline.$(OBJEXT) messagechange.$(OBJEXT) \ muf.$(OBJEXT) nicebox.$(OBJEXT) note.$(OBJEXT) \ netkeyer.$(OBJEXT) paccdx.$(OBJEXT) parse_logcfg.$(OBJEXT) \ prevqso.$(OBJEXT) printcall.$(OBJEXT) qrb.$(OBJEXT) \ qsonr_to_str.$(OBJEXT) qtc_log.$(OBJEXT) qtcwin.$(OBJEXT) \ qtcutil.$(OBJEXT) readcabrillo.$(OBJEXT) readcalls.$(OBJEXT) \ readqtccalls.$(OBJEXT) readctydata.$(OBJEXT) \ recall_exchange.$(OBJEXT) rules.$(OBJEXT) score.$(OBJEXT) \ scroll_log.$(OBJEXT) searchcallarray.$(OBJEXT) \ searchlog.$(OBJEXT) sendbuf.$(OBJEXT) sendqrg.$(OBJEXT) \ sendspcall.$(OBJEXT) set_tone.$(OBJEXT) setcontest.$(OBJEXT) \ setparameters.$(OBJEXT) show_help.$(OBJEXT) showinfo.$(OBJEXT) \ showpxmap.$(OBJEXT) showscore.$(OBJEXT) showzones.$(OBJEXT) \ sockserv.$(OBJEXT) speedupndown.$(OBJEXT) stoptx.$(OBJEXT) \ store_qso.$(OBJEXT) sunup.$(OBJEXT) splitscreen.$(OBJEXT) \ startmsg.$(OBJEXT) rtty.$(OBJEXT) time_update.$(OBJEXT) \ ui_utils.$(OBJEXT) write_keyer.$(OBJEXT) \ writecabrillo.$(OBJEXT) writeparas.$(OBJEXT) zone_nr.$(OBJEXT) tlf_OBJECTS = $(am_tlf_OBJECTS) tlf_DEPENDENCIES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/addarea.Po ./$(DEPDIR)/addcall.Po \ ./$(DEPDIR)/addmult.Po ./$(DEPDIR)/addpfx.Po \ ./$(DEPDIR)/addspot.Po ./$(DEPDIR)/audio.Po \ ./$(DEPDIR)/autocq.Po ./$(DEPDIR)/background_process.Po \ ./$(DEPDIR)/bandmap.Po ./$(DEPDIR)/bands.Po \ ./$(DEPDIR)/cabrillo_utils.Po ./$(DEPDIR)/calledit.Po \ ./$(DEPDIR)/callinput.Po ./$(DEPDIR)/changefreq.Po \ ./$(DEPDIR)/changepars.Po ./$(DEPDIR)/checklogfile.Po \ ./$(DEPDIR)/checkparameters.Po ./$(DEPDIR)/checkqtclogfile.Po \ ./$(DEPDIR)/cleanup.Po ./$(DEPDIR)/clear_display.Po \ ./$(DEPDIR)/clusterinfo.Po ./$(DEPDIR)/cw_utils.Po \ ./$(DEPDIR)/deleteqso.Po ./$(DEPDIR)/displayit.Po \ ./$(DEPDIR)/dxcc.Po ./$(DEPDIR)/edit_last.Po \ ./$(DEPDIR)/editlog.Po ./$(DEPDIR)/err_utils.Po \ ./$(DEPDIR)/fldigixmlrpc.Po ./$(DEPDIR)/focm.Po \ ./$(DEPDIR)/freq_display.Po ./$(DEPDIR)/genqtclist.Po \ ./$(DEPDIR)/get_time.Po ./$(DEPDIR)/getctydata.Po \ ./$(DEPDIR)/getexchange.Po ./$(DEPDIR)/getmessages.Po \ ./$(DEPDIR)/getpx.Po ./$(DEPDIR)/getsummary.Po \ ./$(DEPDIR)/gettxinfo.Po ./$(DEPDIR)/getwwv.Po \ ./$(DEPDIR)/grabspot.Po ./$(DEPDIR)/initial_exchange.Po \ ./$(DEPDIR)/keyer.Po ./$(DEPDIR)/lancode.Po \ ./$(DEPDIR)/last10.Po ./$(DEPDIR)/listmessages.Po \ ./$(DEPDIR)/locator2longlat.Po ./$(DEPDIR)/log_to_disk.Po \ ./$(DEPDIR)/logit.Po ./$(DEPDIR)/logview.Po \ ./$(DEPDIR)/main.Po ./$(DEPDIR)/makelogline.Po \ ./$(DEPDIR)/messagechange.Po ./$(DEPDIR)/muf.Po \ ./$(DEPDIR)/netkeyer.Po ./$(DEPDIR)/nicebox.Po \ ./$(DEPDIR)/note.Po ./$(DEPDIR)/paccdx.Po \ ./$(DEPDIR)/parse_logcfg.Po ./$(DEPDIR)/prevqso.Po \ ./$(DEPDIR)/printcall.Po ./$(DEPDIR)/qrb.Po \ ./$(DEPDIR)/qsonr_to_str.Po ./$(DEPDIR)/qtc_log.Po \ ./$(DEPDIR)/qtcutil.Po ./$(DEPDIR)/qtcwin.Po \ ./$(DEPDIR)/readcabrillo.Po ./$(DEPDIR)/readcalls.Po \ ./$(DEPDIR)/readctydata.Po ./$(DEPDIR)/readqtccalls.Po \ ./$(DEPDIR)/recall_exchange.Po ./$(DEPDIR)/rtty.Po \ ./$(DEPDIR)/rules.Po ./$(DEPDIR)/score.Po \ ./$(DEPDIR)/scroll_log.Po ./$(DEPDIR)/searchcallarray.Po \ ./$(DEPDIR)/searchlog.Po ./$(DEPDIR)/sendbuf.Po \ ./$(DEPDIR)/sendqrg.Po ./$(DEPDIR)/sendspcall.Po \ ./$(DEPDIR)/set_tone.Po ./$(DEPDIR)/setcontest.Po \ ./$(DEPDIR)/setparameters.Po ./$(DEPDIR)/show_help.Po \ ./$(DEPDIR)/showinfo.Po ./$(DEPDIR)/showpxmap.Po \ ./$(DEPDIR)/showscore.Po ./$(DEPDIR)/showzones.Po \ ./$(DEPDIR)/sockserv.Po ./$(DEPDIR)/speedupndown.Po \ ./$(DEPDIR)/splitscreen.Po ./$(DEPDIR)/startmsg.Po \ ./$(DEPDIR)/stoptx.Po ./$(DEPDIR)/store_qso.Po \ ./$(DEPDIR)/sunup.Po ./$(DEPDIR)/time_update.Po \ ./$(DEPDIR)/ui_utils.Po ./$(DEPDIR)/write_keyer.Po \ ./$(DEPDIR)/writecabrillo.Po ./$(DEPDIR)/writeparas.Po \ ./$(DEPDIR)/zone_nr.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(tlf_SOURCES) DIST_SOURCES = $(tlf_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ @PTHREAD_CFLAGS@ @HAMLIB_CFLAGS@ @CURSES_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CMOCKA_CFLAGS = @CMOCKA_CFLAGS@ CMOCKA_LIBS = @CMOCKA_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ HAMLIB_CFLAGS = @HAMLIB_CFLAGS@ HAMLIB_LIBS = @HAMLIB_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBM_LIB = @LIBM_LIB@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXMLRPC_CLIENT_LIB = @LIBXMLRPC_CLIENT_LIB@ LIBXMLRPC_LIB = @LIBXMLRPC_LIB@ LIBXMLRPC_UTIL_LIB = @LIBXMLRPC_UTIL_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_LIBS = @PANEL_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = @GLIB_CFLAGS@ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" tlf_SOURCES = \ addarea.c addcall.c addmult.c addpfx.c addspot.c audio.c autocq.c \ background_process.c bandmap.c bands.c \ cabrillo_utils.c calledit.c callinput.c changefreq.c changepars.c \ checklogfile.c checkqtclogfile.c \ checkparameters.c cleanup.c clear_display.c clusterinfo.c cw_utils.c \ dxcc.c \ deleteqso.c displayit.c \ edit_last.c editlog.c err_utils.c \ fldigixmlrpc.c freq_display.c focm.c \ genqtclist.c \ get_time.c getctydata.c getexchange.c getmessages.c getpx.c \ getsummary.c gettxinfo.c getwwv.c grabspot.c \ initial_exchange.c \ keyer.c \ lancode.c last10.c listmessages.c log_to_disk.c \ logit.c logview.c locator2longlat.c \ main.c makelogline.c messagechange.c muf.c \ nicebox.c note.c netkeyer.c\ paccdx.c parse_logcfg.c prevqso.c printcall.c \ qrb.c qsonr_to_str.c qtc_log.c qtcwin.c qtcutil.c readcabrillo.c \ readcalls.c readqtccalls.c readctydata.c recall_exchange.c rules.c \ score.c scroll_log.c searchcallarray.c searchlog.c sendbuf.c \ sendqrg.c sendspcall.c set_tone.c setcontest.c \ setparameters.c show_help.c showinfo.c showpxmap.c \ showscore.c showzones.c sockserv.c speedupndown.c \ stoptx.c store_qso.c sunup.c splitscreen.c startmsg.c\ rtty.c time_update.c ui_utils.c \ write_keyer.c writecabrillo.c writeparas.c \ zone_nr.c tlf_LDADD = @LIBM_LIB@ @PTHREAD_LIBS@ @GLIB_LIBS@ @PANEL_LIBS@ @CURSES_LIBS@ \ @HAMLIB_LIBS@ @LIBXMLRPC_LIB@ @LIBXMLRPC_CLIENT_LIB@ \ @LIBXMLRPC_UTIL_LIB@ noinst_HEADERS = \ addarea.h addcall.h addmult.h addpfx.h addspot.h audio.h autocq.h \ background_process.h bandmap.h bands.h \ cabrillo_utils.h calledit.h callinput.h changefreq.h changepars.h \ checklogfile.h checkqtclogfile.h \ checkparameters.h cleanup.h clear_display.h clusterinfo.h cwkeyer.h \ cw_utils.h \ dxcc.h \ deleteqso.h displayit.h \ edit_last.h editlog.h err_utils.h \ fldigixmlrpc.h freq_display.h focm.h \ genqtclist.h \ get_time.h getctydata.h getexchange.h getmessages.h getpx.h \ getsummary.h gettxinfo.h getwwv.h globalvars.h grabspot.h \ ignore_unused.h initial_exchange.h \ keyer.h \ lancode.h last10.h listmessages.h \ log_to_disk.h logit.h logview.h locator2longlat.h \ makelogline.h messagechange.h muf.h \ nicebox.h note.h netkeyer.h\ paccdx.h parse_logcfg.h prevqso.h printcall.h \ qrb.h qsonr_to_str.h qtc_log.h qtcvars.h qtcwin.h qtcutil.h \ readcalls.h readqtccalls.h readctydata.h recall_exchange.h \ rules.h readcabrillo.h \ score.h scroll_log.h searchcallarray.h searchlog.h sendbuf.h \ sendqrg.h sendspcall.h set_tone.h setcontest.h \ setparameters.h show_help.h showinfo.h showpxmap.h showscore.h \ showzones.h sockserv.h speedupndown.h \ splitscreen.h startmsg.h stoptx.h store_qso.h sunup.h \ rtty.h time_update.h tlf.h tlf_curses.h tlf_panel.h ui_utils.h \ write_keyer.h writecabrillo.h writeparas.h \ zone_nr.h all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) tlf$(EXEEXT): $(tlf_OBJECTS) $(tlf_DEPENDENCIES) $(EXTRA_tlf_DEPENDENCIES) @rm -f tlf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tlf_OBJECTS) $(tlf_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addarea.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addmult.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addpfx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addspot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/autocq.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/background_process.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bandmap.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cabrillo_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calledit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callinput.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/changefreq.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/changepars.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checklogfile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkparameters.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkqtclogfile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clear_display.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clusterinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cw_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deleteqso.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/displayit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dxcc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit_last.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editlog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fldigixmlrpc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/focm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freq_display.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genqtclist.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getctydata.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getexchange.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getmessages.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getsummary.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettxinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getwwv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grabspot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/initial_exchange.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lancode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/last10.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listmessages.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/locator2longlat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log_to_disk.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makelogline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/messagechange.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/muf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netkeyer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nicebox.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/note.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paccdx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_logcfg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prevqso.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qrb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qsonr_to_str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtc_log.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtcutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtcwin.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readcabrillo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readcalls.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readctydata.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readqtccalls.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recall_exchange.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtty.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rules.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/score.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scroll_log.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/searchcallarray.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/searchlog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendbuf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendqrg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendspcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_tone.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setcontest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setparameters.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show_help.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showpxmap.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showscore.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showzones.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockserv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speedupndown.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splitscreen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/startmsg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stoptx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/store_qso.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sunup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time_update.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write_keyer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writecabrillo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writeparas.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zone_nr.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/addarea.Po -rm -f ./$(DEPDIR)/addcall.Po -rm -f ./$(DEPDIR)/addmult.Po -rm -f ./$(DEPDIR)/addpfx.Po -rm -f ./$(DEPDIR)/addspot.Po -rm -f ./$(DEPDIR)/audio.Po -rm -f ./$(DEPDIR)/autocq.Po -rm -f ./$(DEPDIR)/background_process.Po -rm -f ./$(DEPDIR)/bandmap.Po -rm -f ./$(DEPDIR)/bands.Po -rm -f ./$(DEPDIR)/cabrillo_utils.Po -rm -f ./$(DEPDIR)/calledit.Po -rm -f ./$(DEPDIR)/callinput.Po -rm -f ./$(DEPDIR)/changefreq.Po -rm -f ./$(DEPDIR)/changepars.Po -rm -f ./$(DEPDIR)/checklogfile.Po -rm -f ./$(DEPDIR)/checkparameters.Po -rm -f ./$(DEPDIR)/checkqtclogfile.Po -rm -f ./$(DEPDIR)/cleanup.Po -rm -f ./$(DEPDIR)/clear_display.Po -rm -f ./$(DEPDIR)/clusterinfo.Po -rm -f ./$(DEPDIR)/cw_utils.Po -rm -f ./$(DEPDIR)/deleteqso.Po -rm -f ./$(DEPDIR)/displayit.Po -rm -f ./$(DEPDIR)/dxcc.Po -rm -f ./$(DEPDIR)/edit_last.Po -rm -f ./$(DEPDIR)/editlog.Po -rm -f ./$(DEPDIR)/err_utils.Po -rm -f ./$(DEPDIR)/fldigixmlrpc.Po -rm -f ./$(DEPDIR)/focm.Po -rm -f ./$(DEPDIR)/freq_display.Po -rm -f ./$(DEPDIR)/genqtclist.Po -rm -f ./$(DEPDIR)/get_time.Po -rm -f ./$(DEPDIR)/getctydata.Po -rm -f ./$(DEPDIR)/getexchange.Po -rm -f ./$(DEPDIR)/getmessages.Po -rm -f ./$(DEPDIR)/getpx.Po -rm -f ./$(DEPDIR)/getsummary.Po -rm -f ./$(DEPDIR)/gettxinfo.Po -rm -f ./$(DEPDIR)/getwwv.Po -rm -f ./$(DEPDIR)/grabspot.Po -rm -f ./$(DEPDIR)/initial_exchange.Po -rm -f ./$(DEPDIR)/keyer.Po -rm -f ./$(DEPDIR)/lancode.Po -rm -f ./$(DEPDIR)/last10.Po -rm -f ./$(DEPDIR)/listmessages.Po -rm -f ./$(DEPDIR)/locator2longlat.Po -rm -f ./$(DEPDIR)/log_to_disk.Po -rm -f ./$(DEPDIR)/logit.Po -rm -f ./$(DEPDIR)/logview.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/makelogline.Po -rm -f ./$(DEPDIR)/messagechange.Po -rm -f ./$(DEPDIR)/muf.Po -rm -f ./$(DEPDIR)/netkeyer.Po -rm -f ./$(DEPDIR)/nicebox.Po -rm -f ./$(DEPDIR)/note.Po -rm -f ./$(DEPDIR)/paccdx.Po -rm -f ./$(DEPDIR)/parse_logcfg.Po -rm -f ./$(DEPDIR)/prevqso.Po -rm -f ./$(DEPDIR)/printcall.Po -rm -f ./$(DEPDIR)/qrb.Po -rm -f ./$(DEPDIR)/qsonr_to_str.Po -rm -f ./$(DEPDIR)/qtc_log.Po -rm -f ./$(DEPDIR)/qtcutil.Po -rm -f ./$(DEPDIR)/qtcwin.Po -rm -f ./$(DEPDIR)/readcabrillo.Po -rm -f ./$(DEPDIR)/readcalls.Po -rm -f ./$(DEPDIR)/readctydata.Po -rm -f ./$(DEPDIR)/readqtccalls.Po -rm -f ./$(DEPDIR)/recall_exchange.Po -rm -f ./$(DEPDIR)/rtty.Po -rm -f ./$(DEPDIR)/rules.Po -rm -f ./$(DEPDIR)/score.Po -rm -f ./$(DEPDIR)/scroll_log.Po -rm -f ./$(DEPDIR)/searchcallarray.Po -rm -f ./$(DEPDIR)/searchlog.Po -rm -f ./$(DEPDIR)/sendbuf.Po -rm -f ./$(DEPDIR)/sendqrg.Po -rm -f ./$(DEPDIR)/sendspcall.Po -rm -f ./$(DEPDIR)/set_tone.Po -rm -f ./$(DEPDIR)/setcontest.Po -rm -f ./$(DEPDIR)/setparameters.Po -rm -f ./$(DEPDIR)/show_help.Po -rm -f ./$(DEPDIR)/showinfo.Po -rm -f ./$(DEPDIR)/showpxmap.Po -rm -f ./$(DEPDIR)/showscore.Po -rm -f ./$(DEPDIR)/showzones.Po -rm -f ./$(DEPDIR)/sockserv.Po -rm -f ./$(DEPDIR)/speedupndown.Po -rm -f ./$(DEPDIR)/splitscreen.Po -rm -f ./$(DEPDIR)/startmsg.Po -rm -f ./$(DEPDIR)/stoptx.Po -rm -f ./$(DEPDIR)/store_qso.Po -rm -f ./$(DEPDIR)/sunup.Po -rm -f ./$(DEPDIR)/time_update.Po -rm -f ./$(DEPDIR)/ui_utils.Po -rm -f ./$(DEPDIR)/write_keyer.Po -rm -f ./$(DEPDIR)/writecabrillo.Po -rm -f ./$(DEPDIR)/writeparas.Po -rm -f ./$(DEPDIR)/zone_nr.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/addarea.Po -rm -f ./$(DEPDIR)/addcall.Po -rm -f ./$(DEPDIR)/addmult.Po -rm -f ./$(DEPDIR)/addpfx.Po -rm -f ./$(DEPDIR)/addspot.Po -rm -f ./$(DEPDIR)/audio.Po -rm -f ./$(DEPDIR)/autocq.Po -rm -f ./$(DEPDIR)/background_process.Po -rm -f ./$(DEPDIR)/bandmap.Po -rm -f ./$(DEPDIR)/bands.Po -rm -f ./$(DEPDIR)/cabrillo_utils.Po -rm -f ./$(DEPDIR)/calledit.Po -rm -f ./$(DEPDIR)/callinput.Po -rm -f ./$(DEPDIR)/changefreq.Po -rm -f ./$(DEPDIR)/changepars.Po -rm -f ./$(DEPDIR)/checklogfile.Po -rm -f ./$(DEPDIR)/checkparameters.Po -rm -f ./$(DEPDIR)/checkqtclogfile.Po -rm -f ./$(DEPDIR)/cleanup.Po -rm -f ./$(DEPDIR)/clear_display.Po -rm -f ./$(DEPDIR)/clusterinfo.Po -rm -f ./$(DEPDIR)/cw_utils.Po -rm -f ./$(DEPDIR)/deleteqso.Po -rm -f ./$(DEPDIR)/displayit.Po -rm -f ./$(DEPDIR)/dxcc.Po -rm -f ./$(DEPDIR)/edit_last.Po -rm -f ./$(DEPDIR)/editlog.Po -rm -f ./$(DEPDIR)/err_utils.Po -rm -f ./$(DEPDIR)/fldigixmlrpc.Po -rm -f ./$(DEPDIR)/focm.Po -rm -f ./$(DEPDIR)/freq_display.Po -rm -f ./$(DEPDIR)/genqtclist.Po -rm -f ./$(DEPDIR)/get_time.Po -rm -f ./$(DEPDIR)/getctydata.Po -rm -f ./$(DEPDIR)/getexchange.Po -rm -f ./$(DEPDIR)/getmessages.Po -rm -f ./$(DEPDIR)/getpx.Po -rm -f ./$(DEPDIR)/getsummary.Po -rm -f ./$(DEPDIR)/gettxinfo.Po -rm -f ./$(DEPDIR)/getwwv.Po -rm -f ./$(DEPDIR)/grabspot.Po -rm -f ./$(DEPDIR)/initial_exchange.Po -rm -f ./$(DEPDIR)/keyer.Po -rm -f ./$(DEPDIR)/lancode.Po -rm -f ./$(DEPDIR)/last10.Po -rm -f ./$(DEPDIR)/listmessages.Po -rm -f ./$(DEPDIR)/locator2longlat.Po -rm -f ./$(DEPDIR)/log_to_disk.Po -rm -f ./$(DEPDIR)/logit.Po -rm -f ./$(DEPDIR)/logview.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/makelogline.Po -rm -f ./$(DEPDIR)/messagechange.Po -rm -f ./$(DEPDIR)/muf.Po -rm -f ./$(DEPDIR)/netkeyer.Po -rm -f ./$(DEPDIR)/nicebox.Po -rm -f ./$(DEPDIR)/note.Po -rm -f ./$(DEPDIR)/paccdx.Po -rm -f ./$(DEPDIR)/parse_logcfg.Po -rm -f ./$(DEPDIR)/prevqso.Po -rm -f ./$(DEPDIR)/printcall.Po -rm -f ./$(DEPDIR)/qrb.Po -rm -f ./$(DEPDIR)/qsonr_to_str.Po -rm -f ./$(DEPDIR)/qtc_log.Po -rm -f ./$(DEPDIR)/qtcutil.Po -rm -f ./$(DEPDIR)/qtcwin.Po -rm -f ./$(DEPDIR)/readcabrillo.Po -rm -f ./$(DEPDIR)/readcalls.Po -rm -f ./$(DEPDIR)/readctydata.Po -rm -f ./$(DEPDIR)/readqtccalls.Po -rm -f ./$(DEPDIR)/recall_exchange.Po -rm -f ./$(DEPDIR)/rtty.Po -rm -f ./$(DEPDIR)/rules.Po -rm -f ./$(DEPDIR)/score.Po -rm -f ./$(DEPDIR)/scroll_log.Po -rm -f ./$(DEPDIR)/searchcallarray.Po -rm -f ./$(DEPDIR)/searchlog.Po -rm -f ./$(DEPDIR)/sendbuf.Po -rm -f ./$(DEPDIR)/sendqrg.Po -rm -f ./$(DEPDIR)/sendspcall.Po -rm -f ./$(DEPDIR)/set_tone.Po -rm -f ./$(DEPDIR)/setcontest.Po -rm -f ./$(DEPDIR)/setparameters.Po -rm -f ./$(DEPDIR)/show_help.Po -rm -f ./$(DEPDIR)/showinfo.Po -rm -f ./$(DEPDIR)/showpxmap.Po -rm -f ./$(DEPDIR)/showscore.Po -rm -f ./$(DEPDIR)/showzones.Po -rm -f ./$(DEPDIR)/sockserv.Po -rm -f ./$(DEPDIR)/speedupndown.Po -rm -f ./$(DEPDIR)/splitscreen.Po -rm -f ./$(DEPDIR)/startmsg.Po -rm -f ./$(DEPDIR)/stoptx.Po -rm -f ./$(DEPDIR)/store_qso.Po -rm -f ./$(DEPDIR)/sunup.Po -rm -f ./$(DEPDIR)/time_update.Po -rm -f ./$(DEPDIR)/ui_utils.Po -rm -f ./$(DEPDIR)/write_keyer.Po -rm -f ./$(DEPDIR)/writecabrillo.Po -rm -f ./$(DEPDIR)/writeparas.Po -rm -f ./$(DEPDIR)/zone_nr.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # 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: tlf-1.4.0/src/addspot.h0000644000175000017500000000175013562576621011640 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef ADDSPOT_H #define ADDSPOT_H #include void add_to_spots(char *call, freq_t freq); int addspot(void); #endif /* ADDSPOT_H */ tlf-1.4.0/src/showinfo.h0000644000175000017500000000173213562576621012036 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SHOWINFO_H #define SHOWINFO_H #define SHOWINFO_DUMMY -1 void showinfo(int x); #endif /* end of include guard: SHOWINFO_H */ tlf-1.4.0/src/rtty.c0000644000175000017500000001633413562576621011203 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * 2012 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * rtty mini terminal * *--------------------------------------------------------------*/ #include #include #include #include #include #include #include "err_utils.h" #include "printcall.h" #include "qtcvars.h" // Includes globalvars.h #include "startmsg.h" #include "tlf_curses.h" #include "ui_utils.h" #include "fldigixmlrpc.h" static int fdcont; // global for this file: tty file descriptor static char ry_term[5][50] = { "", "", "", "", "" }; /* ----------------------- initialize controller ------------------------ */ int init_controller() { extern char controllerport[]; extern int digikeyer; struct termios termattribs; if ((fdcont = open(controllerport, O_RDWR | O_NONBLOCK)) < 0) { showstring(controllerport, ": Open failed for controller port!!!\n"); sleep(1); return (-1); } termattribs.c_iflag = IGNBRK | IGNPAR | IMAXBEL | IXOFF; termattribs.c_oflag = 0; termattribs.c_cflag = CS8 | CSTOPB | CREAD | CLOCAL; termattribs.c_lflag = 0; /* Set some term flags */ /* The ensure there are no read timeouts (possibly writes?) */ termattribs.c_cc[VMIN] = 1; termattribs.c_cc[VTIME] = 0; cfsetispeed(&termattribs, B9600); /* Set input speed */ cfsetospeed(&termattribs, B9600); /* Set output speed */ tcsetattr(fdcont, TCSANOW, &termattribs); /* Set the serial port */ if (digikeyer == GMFSK) { lseek(fdcont, 0, SEEK_END); } showstring(controllerport, " opened...\n"); return (fdcont); // return file descriptor } /* ------------------------- deinit controller -------------------------- */ void deinit_controller() { if (fdcont) close(fdcont); } /* ------------------------ add text to terminal ------------------------ */ void ry_addchar(char c) { static int k = 0; int i = 0; FILE *ry_fp; if ((ry_fp = fopen("RTTYlog", "a")) == NULL) { TLF_LOG_INFO("cannot open RTTYlog"); return; } else { fputc(c, ry_fp); fclose(ry_fp); } if ((c & 0x80) != 0) return; /* drop on ascii characters */ if ((c == '\n') || (c == '\r')) { /* start new line */ g_strlcpy(ry_term[0], ry_term[1], 41); g_strlcpy(ry_term[1], ry_term[2], 41); g_strlcpy(ry_term[2], ry_term[3], 41); g_strlcpy(ry_term[3], ry_term[4], 41); ry_term[4][0] = '\0'; k = 0; if (qtc_ry_capture == 1) { if (qtc_ry_currline == (QTC_RY_LINE_NR - 1) && qtc_ry_lines[qtc_ry_currline].content[0] != '\0') { for (i = 0; i < (QTC_RY_LINE_NR - 1); i++) { g_strlcpy(qtc_ry_lines[i].content, qtc_ry_lines[i + 1].content, 41); qtc_ry_lines[i].attr = qtc_ry_lines[i + 1].attr; } } else { if (strlen(qtc_ry_lines[qtc_ry_currline].content) > 0) { qtc_ry_currline++; } } qtc_ry_lines[qtc_ry_currline].content[0] = '\0'; qtc_ry_lines[qtc_ry_currline].attr = 0; } } else { if (iscntrl(c)) { /* replace all other control characters by space */ c = ' '; } if (k >= 40) { // scroll line g_strlcpy(ry_term[0], ry_term[1], 41); g_strlcpy(ry_term[1], ry_term[2], 41); g_strlcpy(ry_term[2], ry_term[3], 41); g_strlcpy(ry_term[3], ry_term[4], 41); ry_term[4][0] = '\0'; k = 0; if (qtc_ry_capture == 1) { if (qtc_ry_currline == (QTC_RY_LINE_NR - 1) && qtc_ry_lines[qtc_ry_currline].content[0] != '\0') { for (i = 0; i < (QTC_RY_LINE_NR - 1); i++) { g_strlcpy(qtc_ry_lines[i].content, qtc_ry_lines[i + 1].content, 41); qtc_ry_lines[i].attr = qtc_ry_lines[i + 1].attr; } } else { qtc_ry_currline++; } qtc_ry_lines[qtc_ry_currline].content[0] = '\0'; qtc_ry_lines[qtc_ry_currline].attr = 0; } } // add char to line if (qtc_ry_capture == 1) { qtc_ry_lines[qtc_ry_currline].content[k] = c; qtc_ry_lines[qtc_ry_currline].content[k + 1] = '\0'; } ry_term[4][k++] = c; ry_term[4][k] = '\0'; } } /* ---------------------- display rtty ---------------------------------- */ int show_rtty(void) { extern int miniterm; extern int commentfield; extern char comment[]; if (miniterm == 0) return (-1); attroff(A_STANDOUT); attron(modify_attr(COLOR_PAIR(C_HEADER))); mvprintw(1, 0, " "); mvprintw(1, 0, "%s", ry_term[0]); mvprintw(2, 0, " "); mvprintw(2, 0, "%s", ry_term[1]); mvprintw(3, 0, " "); mvprintw(3, 0, "%s", ry_term[2]); mvprintw(4, 0, " "); mvprintw(4, 0, "%s", ry_term[3]); mvprintw(5, 0, " "); mvprintw(5, 0, "%s", ry_term[4]); if (commentfield == 0) { printcall(); } else { mvprintw(12, 54, comment); } refreshp(); attron(A_STANDOUT); return (0); } /* --------------------- receive rtty ----------------------------------- */ int rx_rtty() { extern int miniterm; extern int digikeyer; int i; int j; char line[40]; char c; static int miniterm_status = 0; /* for one time initialization */ static int state = 0; /* 0 - line start found 1 - ')' found 2 - ':' found 3 - additional space passed */ if (fdcont > 0) { if (miniterm_status == 0 && miniterm == 1) { miniterm_status = 1; ry_term[0][0] = '\0'; ry_term[1][0] = '\0'; ry_term[2][0] = '\0'; ry_term[3][0] = '\0'; ry_term[4][0] = '\0'; } i = read(fdcont, line, 39); if (i == 0) return 0; if (digikeyer == GMFSK) { /* skip begin of line until '):' if keyer == GMFSK */ /* RX (2006-03-31 14:41Z): */ for (j = 0; j < i; j++) { c = line[j]; switch (state) { case 0: if (c == ')') state++; break; case 1: if (c == ':') state++; else state = 0; break; case 2: if (c == '\n') state = 0; else state++; break; case 3: if (c == '\n') state = 0; ry_addchar(c); break; default: break; } } } else { /* serial modem */ for (j = 0; j < i; j++) { ry_addchar(line[j]); } } } else if (digikeyer == FLDIGI) { i = fldigi_get_rx_text(line, sizeof(line)); for (j = 0; j < i; j++) { ry_addchar(line[j]); } } return (0); } tlf-1.4.0/src/fldigixmlrpc.h0000644000175000017500000000274713562576621012675 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014 Ervin Hegedus * * 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 */ #ifndef FLDIGIXMLRPC_H #define FLDIGIXMLRPC_H #define FLDIGI_TX 1 #define FLDIGI_RX 2 extern int fldigi_set_callfield; int fldigi_xmlrpc_init(); int fldigi_xmlrpc_cleanup(); int fldigi_xmlrpc_get_carrier(void); int fldigi_get_carrier(); int fldigi_get_shift_freq(); int fldigi_get_rx_text(char *line, int len); int fldigi_send_text(char *line); void fldigi_to_rx(); void xmlrpc_showinfo(); int fldigi_get_log_call(); int fldigi_get_log_serial_number(); void fldigi_clear_connerr(); int fldigi_toggle(void); int fldigi_isenabled(void); #endif /* end of include guard: FLDIGIXMLRPC_H */ tlf-1.4.0/src/showzones.h0000644000175000017500000000166313562576621012244 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SHOWZONES_H #define SHOWZONES_H int show_zones(int bandinx); #endif /* SHOWZONES_H */ tlf-1.4.0/src/sockserv.h0000644000175000017500000000553313562576621012044 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SOCKSERV_H #define SOCKSERV_H /* External socket services: supported by sockserv.c */ /* Written by N2RJT */ /* Note that socket numbers are file descriptors, typically small integers */ #define MAX_SERVED_SOCKETS 4 /* Output functions: return number of bytes transmitted, or -1 on error */ extern int usputb(int s, char *buf, int buflen); extern int usputs(int s, char *buf); extern int usprintf(int s, char *fmt, ...); extern int tprintf(char *fmt, ...); /* Close a socket */ extern int close_s(int s); /* ** Startup a server program ** portnum = TCP port to listen to ** loginp = procedure to be called when a new socket is accepted; ** should be declared as: void login(int s); ** where: s is the new socket number ** The logout condition is detected by a -1 returned from recvline(). */ extern int startup(int portnum, void (*loginp)(int)); /* ** Set timeout for recvline call */ void socktimeout(int msec); void nosocktimeout(void); /* ** Set line mode: TRUE - only give me complete lines. ** FALSE- give me any data received, even multiple lines. ** The default is FALSE. */ void setlinemode(int s, int tf); /* ** Receive a line from a socket ** fd = [OUT] the socket data was received on; ** buf = [OUT] character buffer containing socket data; ** if linemode = TRUE, buffer is terminated with null character ** buflen = [IN] length of the character buffer; ** returns the number of bytes read, or -1 indicating EOF on the socket. ** or -2 indicating timeout (if enabled). */ extern int recvline(int *fd, char *buf, int buflen); extern int startcli(void); extern int startcliaddr(int family, unsigned long int addr, unsigned short int portnum); extern long resolve(char *hostname); extern int startup_udp(int portnum); extern void set_udp_peer(long address, int portnum); extern void get_udp_peer(long *address, int *portnum); extern int udp_socket; extern char sockserv_error[]; #endif /* SOCKSERV_H */ tlf-1.4.0/src/cabrillo_utils.h0000644000175000017500000000521513562576621013211 00000000000000 #ifndef CABRILLOUTILS_H #define CABRILLOUTILS_H #include "qtcvars.h" // Includes globalvars.h /* describes the cabrillo format to be used */ struct cabrillo_desc { char *name; /* name of the cabrillo format in use */ int item_count; /* number items in QSO: line */ GPtrArray *item_array; /* array of items in QSO: line * must be from left to right */ int qtc_item_count; /* number items in QTC: line */ GPtrArray *qtc_item_array; /* array of items in QTC: line * must be from left to right */ }; /* represents different parts of a qso logline */ struct qso_t { char *logline; int band; int mode; char day; char month; int year; int hour; int min; int qso_nr; char *call; int rst_s; int rst_r; char *comment; freq_t freq; int tx; int qtc_serial; int qtc_number; char *qtc_qtime; char *qtc_qcall; char *qtc_qserial; int qtcdirection; int qsots; }; /* represents different parts of a qtc logline */ struct read_qtc_t { int direction; // represents the direction of QTC: SEND or RECV char logline[120]; // represents the final log, if require char band[4]; // band, eg "160" char mode[4]; // mode, eg "DIG" int qsonr; // qso number after the QTC maked char date[10]; // date of creation of QTC char time[6]; // time of creation of QTC char call[15]; // callsign char qtchead[10]; // QTC serial and number as string int qtchead_serial; // QTC serial as integer int qtchead_count; // QTC number as integer char qtc_time[5]; // QTC TIME field char qtc_call[16]; // QTC CALL FIELD int qtc_serial; // QTC SERIAL field freq_t freq; // FREQ of QTC int callpos; // in case of SEND direction, the serial of sent callsign char qtcstr[30]; // QTC fields as concatenated }; /* list of different tags for QSO/QTC: line items */ enum tag_t { NO_ITEM, FREQ, MODE, DATE, TIME, MYCALL, HISCALL, RST_S, RST_R, // 0...8 EXC_S, EXCH, EXC1, EXC2, EXC3, EXC4, TX, QTCRCALL, QTCHEAD, QTCSCALL, QTC }; // 9...19 /* type for conversion table between tag name in format file and internal tag */ struct tag_conv { char *item_name; enum tag_t tag; }; /* describes one item for printing the QSO: line in cabrillo */ struct line_item { enum tag_t tag; /* item type */ int len; /* max. item length */ }; enum tag_t translate_item_name(char *name); void free_cabfmt(struct cabrillo_desc *desc); struct line_item *parse_line_entry(char *line_entry); struct cabrillo_desc *read_cabrillo_format(char *filename, char *format); #endif tlf-1.4.0/src/setparameters.c0000644000175000017500000001163213562576621013054 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedüs - HA2OS * * 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 */ /* ------------------------------------------------------------ * List and set parameters * *--------------------------------------------------------------*/ #include #include #include #include "background_process.h" #include "clear_display.h" #include "checklogfile.h" #include "getmessages.h" #include "getwwv.h" #include "readcalls.h" #include "scroll_log.h" #include "setcontest.h" #include "startmsg.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #include "writeparas.h" int setparameters(void) { extern int cluster; extern int shortqsonr; extern int searchflg; extern int contest; extern int announcefilter; extern int showscore_flag; extern char call[]; extern char logfile[]; extern char whichcontest[]; int i = '9'; char callcpy[12] = ""; char logbuffer[20]; stop_background_process(); /* to prevent race condition */ while ((i == '7') || (i == '8') || (i == '9')) { for (i = 14; i <= 22; i++) mvprintw(i, 2, " "); if (cluster == NOCLUSTER) mvprintw(14, 2, "1: Cluster = OFF"); else if (cluster == MAP) mvprintw(14, 2, "1: Cluster = BANDMAP"); else mvprintw(14, 2, "1: Cluster = Full info"); if (shortqsonr == SHORTCW) mvprintw(15, 2, "2: SHORT QSONR"); else mvprintw(15, 2, "2: LONG QSONR"); if (searchflg == SEARCHWINDOW) mvprintw(16, 2, "3: Duping ON"); else mvprintw(16, 2, "3: Duping OFF"); if (contest == CONTEST) mvprintw(17, 2, "4: CONTEST MODE"); else mvprintw(17, 2, "4: QSO MODE"); if (announcefilter == FILTER_ANN) mvprintw(18, 2, "5: FILTER ON"); else mvprintw(18, 2, "5: FILTER OFF"); if (showscore_flag == 0) mvprintw(19, 2, "6: Score window OFF"); else mvprintw(19, 2, "6: Score window ON"); mvprintw(20, 2, "7: Logfile: %s", logfile); strncpy(callcpy, call, strlen(call) - 1); mvprintw(21, 2, "8: Call: %s", callcpy); mvprintw(22, 2, "9: Contest: %s", whichcontest); attroff(A_STANDOUT); mvprintw(23, 25, "Change parameter: 7,8,9, none"); refreshp(); i = key_get(); if (i == '7') { mvprintw(20, 14, " "); mvprintw(20, 14, ""); echo(); getnstr(logbuffer, 20); noecho(); logfile[0] = '\0'; // if (logbuffer[0] != '.') // strcat(logfile, "./"); strcat(logfile, logbuffer); logfile[strlen(logfile) - 1] = '\0'; writeparas(); clear(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); getmessages(); /* read .paras file */ sleep(2); /* make sure logfile is there */ if (checklogfile_new(logfile) != 0) { showmsg("Can not access logfile. Giving up"); return EXIT_FAILURE; } setcontest(); /* set contest parameters */ getwwv(); /* get the latest wwv info from packet */ scroll_log(); /* read the last 5 log lines and set the qso number */ readcalls(); /* read the logfile for score and dupe */ clear_display(); /* tidy up the display */ return (0); } if (i == '8') { mvprintw(21, 14, " "); mvprintw(21, 14, ""); echo(); getnstr(call, 20); noecho(); strcat(call, "\n"); } if (i == '9') { mvprintw(1, 2, "cqww "); mvprintw(2, 2, "wpx "); mvprintw(3, 2, "arrldx_usa"); mvprintw(4, 2, "pacc_pa "); mvprintw(5, 2, "dxped "); mvprintw(6, 2, "qso "); mvprintw(7, 2, "waedc "); mvprintw(1, 12, " other "); mvprintw(2, 12, " "); mvprintw(3, 12, " arrldx_dx "); mvprintw(4, 12, " pacc_dx "); mvprintw(5, 12, " "); mvprintw(6, 12, " "); mvprintw(7, 12, " waedc "); mvprintw(22, 14, " "); mvprintw(22, 14, ""); echo(); getnstr(whichcontest, 20); noecho(); setcontest(); } writeparas(); beep(); } start_background_process(); /* release backgrnd process */ return (0); } tlf-1.4.0/src/setcontest.c0000644000175000017500000001243313562576621012370 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedus * * 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 */ /* ------------------------------------------------------------ * Set contest parameters * *--------------------------------------------------------------*/ #include #include "focm.h" #include "getctydata.h" #include "setcontest.h" #include "tlf.h" int setcontest(void) { extern int focm; extern int wpx; extern int pfxmult; extern int cqww; extern int dxped; extern int sprint; extern int arrldx_usa; extern int dx_arrlsections; extern int arrl_fd; extern int arrlss; extern int multlist; extern int pacc_pa_flg; extern int stewperry_flg; extern int universal; extern int other_flg; extern int exchange_serial; extern int wysiwyg_multi; extern int w_cty; extern int ve_cty; extern int zl_cty; extern int ja_cty; extern int py_cty; extern int ce_cty; extern int lu_cty; extern int vk_cty; extern int zs_cty; extern int ua9_cty; extern int contest; extern int showscore_flag; extern int searchflg; extern char whichcontest[]; extern int one_point; extern int two_point; extern int three_point; extern int qso_once; extern int sectn_mult; extern int recall_mult; extern int noleadingzeros; char wcall[] = "W1AW"; char vecall[] = "VE1AA"; char zlcall[] = "ZL1AA"; char jacall[] = "JA1AA"; char pycall[] = "PY1AA"; char cecall[] = "CE1AA"; char lucall[] = "LU1AA"; char vkcall[] = "VK1AA"; char zscall[] = "ZS6AA"; char ua9call[] = "UA9AA"; if (pfxmult == 0 && wpx == 1) wpx = 0; cqww = 0; dxped = 0; sprint = 0; arrldx_usa = 0; pacc_pa_flg = 0; focm = 0; universal = 0; contest = 0; showscore_flag = 0; searchflg = 0; one_point = 0; two_point = 0; three_point = 0; recall_mult = 0; sectn_mult = 0; noleadingzeros = 0; if (strcmp(whichcontest, "wpx") == 0) { wpx = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "cqww") == 0) { cqww = 1; recall_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; w_cty = getctynr(wcall); ve_cty = getctynr(vecall); } if (strcmp(whichcontest, "dxped") == 0) { dxped = 1; recall_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "sprint") == 0) { sprint = 1; contest = 1; showscore_flag = 1; searchflg = 1; one_point = 1; } if (strcmp(whichcontest, "arrldx_usa") == 0) { arrldx_usa = 1; recall_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "arrldx_dx") == 0) { // other_flg = 1; three_point = 1; recall_mult = 1; sectn_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "arrl_ss") == 0) { arrlss = 1; other_flg = 1; two_point = 1; qso_once = 1; exchange_serial = 1; multlist = 1; recall_mult = 0; // sectn_mult = 1; noleadingzeros = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "arrl_fd") == 0) { // other_flg = 1; recall_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; arrl_fd = 1; } if (strcmp(whichcontest, "pacc_pa") == 0) { pacc_pa_flg = 1; one_point = 1; contest = 1; showscore_flag = 1; searchflg = 1; ve_cty = getctynr(vecall); w_cty = getctynr(wcall); zl_cty = getctynr(zlcall); ja_cty = getctynr(jacall); py_cty = getctynr(pycall); ce_cty = getctynr(cecall); lu_cty = getctynr(lucall); vk_cty = getctynr(vkcall); zs_cty = getctynr(zscall); ua9_cty = getctynr(ua9call); } if (strcmp(whichcontest, "stewperry") == 0) { stewperry_flg = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "focmarathon") == 0) { foc_init(); } if (strcmp(whichcontest, "other") == 0) { other_flg = 1; one_point = 1; recall_mult = 1; wysiwyg_multi = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "universal") == 0) { contest = 1; showscore_flag = 1; searchflg = 1; } if (dx_arrlsections == 1) { contest = 1; // universal = 1; showscore_flag = 1; searchflg = 1; w_cty = getctynr(wcall); ve_cty = getctynr(vecall); } if (strcmp(whichcontest, "qso") == 0) { contest = 0; searchflg = 1; } else { searchflg = 1; //dxpedition contest = 1; showscore_flag = 1; universal = 1; } return (0); } tlf-1.4.0/src/readqtccalls.c0000644000175000017500000000761013562576621012640 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Ervin Hegedüs - HA2OS * * 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 */ /* ------------------------------------------------------------ * Read sent QTC QSO's * *--------------------------------------------------------------*/ #include #include #include #include #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "startmsg.h" #include "tlf_curses.h" int qtcdirection = 0; int next_qtc_qso; int qsoflags_for_qtc[MAX_QSOS]; int nr_qtcsent = 0; int readqtccalls() { int s = 0; char inputbuffer[160]; FILE *fp; char temps[30], callsign[15]; int tempi; int last_qtc = 0; int i; qtc_init(); if (qtcdirection & SEND) { showmsg("Reading QTC sent logfile..."); /* mark all qso lines as not used for QTC */ for (s = 0; s < MAX_QSOS; s++) { qsoflags_for_qtc[s] = 0; } if ((fp = fopen(QTC_SENT_LOG, "r")) == NULL) { showmsg("Error opening QTC sent logfile."); sleep(2); return -1; } while (fgets(inputbuffer, 100, fp) != NULL) { s++; /* find maximum sent QTC block serial */ g_strlcpy(temps, inputbuffer + 50, 5); // get serial of QTC block tempi = atoi(temps); if (tempi > nr_qtcsent) { nr_qtcsent = tempi; } /* mark corresponding qso line as used for QTC */ g_strlcpy(temps, inputbuffer + 12, 5); // qso nr in qso list tempi = atoi(temps) - 1; qsoflags_for_qtc[tempi] = 1; /* remember callsign, build number of sent QTC's */ parse_qtcline(inputbuffer, callsign, SEND); qtc_inc(callsign, SEND); total++; /* add one point per QTC */ /* find first unused QSO number for QTCs */ if (tempi > last_qtc) { last_qtc = tempi; } } next_qtc_qso = last_qtc; /* find first QSO which was not used for QTC yet */ for (i = 0; i < last_qtc; i++) { if (qsoflags_for_qtc[i] == 0) { next_qtc_qso = i; break; } } fclose(fp); } if (qtcdirection & RECV) { showmsg("Reading QTC recv logfile..."); if ((fp = fopen(QTC_RECV_LOG, "r")) == NULL) { showmsg("Error opening QTC received logfile."); sleep(2); return -1; } while (fgets(inputbuffer, 100, fp) != NULL) { /* remember callsign, build number of received QTC's */ parse_qtcline(inputbuffer, callsign, RECV); qtc_inc(callsign, RECV); total++; /* add one point per QTC */ } fclose(fp); } if (strlen(qtc_cap_calls) > 0) { showmsg("Reading QTC callsigns file..."); if ((fp = fopen(qtc_cap_calls, "r")) == NULL) { showmsg("Error opening QTC callsigns file."); sleep(2); return -1; } while (fgets(inputbuffer, 100, fp) != NULL) { /* remember callsign, mark it as QTC capable, based on eg. last years */ qtc_inc(g_strstrip(inputbuffer), QTC_CAP); } fclose(fp); } showmsg("Reading QTC meta logfile..."); if ((fp = fopen(QTC_META_LOG, "r")) == NULL) { showmsg("QTC meta logfile missing, skipping this step."); } else { while (fgets(inputbuffer, 100, fp) != NULL) { /* remember callsign, set marked QTC states */ parse_qtc_flagline(inputbuffer); } fclose(fp); } return s; } tlf-1.4.0/src/readctydata.h0000644000175000017500000000166413562576621012473 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef READCTYDATA_H #define READCTYDATA_H int readctydata(void); #endif /* READCTYDATA_H */ tlf-1.4.0/src/qtcwin.c0000644000175000017500000014230313562576621011502 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013-2015 Ervin Hegedüs - HA2OS * * 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 */ /* ------------------------------------------------------------ * Handle QTC panel, receive and send QTC, write to log * *--------------------------------------------------------------*/ #include #include #include #include #include "callinput.h" #include "cw_utils.h" #include "genqtclist.h" #include "get_time.h" #include "ignore_unused.h" #include "keyer.h" #include "lancode.h" #include "nicebox.h" // Includes curses.h #include "qtc_log.h" #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "rtty.h" #include "sendbuf.h" #include "speedupndown.h" #include "time_update.h" #include "tlf_panel.h" #include "ui_utils.h" #include "write_keyer.h" /* check direction clause macro * direction should be RECV (1) or SEND (2), see tlf.h */ #define DIRCLAUSE (direction == RECV) || (direction == SEND && (activefield == 0 || activefield == 2)) void init_qtc_panel(); void draw_qtc_panel(); void start_qtc_recording(); void stop_qtc_recording(); void clear_help_block(); void show_help_msg(); void showfield(int fidx); void modify_field(int pressed); void delete_from_field(int dir); void shift_left(char *fieldval, int shift); void show_status(int idx); void number_fields(); void put_qtc(); void replace_spaces(char *src, char *tempc); void show_sendto_lines(); void recalc_qtclist(); void show_rtty_lines(); void fill_qtc_times(char *time); extern char hiscall[]; extern char lastcall[]; extern int trxmode; extern int digikeyer; extern int nr_qsos; static int record_run = -1; /* was recording already started? */ t_qtclist qtclist; t_qtcreclist qtcreclist; t_qtc_ry_line qtc_ry_lines[QTC_RY_LINE_NR]; int qtc_ry_currline = 0; int qtc_ry_capture; int qtc_ry_copied; struct t_qtc_store_obj *qtc_temp_obj; /* temp object to help to maintain the QTC hash */ enum { QTCRECVWINBG = 32, QTCRECVLINE, QTCRECVINVLINE, QTCRECVCURRLINE, QTCRECVBG, }; #define LINE_INVERTED (COLOR_PAIR(QTCRECVINVLINE) | A_BOLD) #define LINE_CURRINVERTED (COLOR_PAIR(QTCRECVCURRLINE) | A_BOLD) #define LINE_CURRNORMAL (COLOR_PAIR(QTCRECVCURRLINE) | A_NORMAL) #define LINE_NORMAL (COLOR_PAIR(QTCRECVLINE) | A_NORMAL) WINDOW *qtcwin; PANEL *qtc_panel; WINDOW *ry_win; PANEL *ry_panel; WINDOW *ry_help_win; PANEL *ry_help_panel; int activefield; // array values: hor position, cursor position, field len to fill with spaces int pos[6][3] = {{3, 3, 15}, {3, 6, 4}, {8, 8, 2}, {3, 3, 4}, {8, 8, 14}, {24, 24, 4}}; int curpos = 0; int curfieldlen = 0; static char prevqtccall[15] = ""; char help_rec_msgs[7][26] = { "Enter callsign", "Enter the QTC serial", "Enter the QTC number", "Enter the time", "Enter the CALL", "Enter the SERIAL", "" }; char help_send_msgs[7][26] = { "Enter callsign", "", "Enter the QTC number", "Press ENTER to send QTC", "", "", "Press CTRL+S to SAVE!" }; char *qtccallsign; int *qtccount; int qtccurrdirection; char qtchead[32]; /* Init qtc panels and windows if needed, set used colorpairs */ void init_qtc_panel() { static int qtcpanel_initialized = 0; if (!qtcpanel_initialized) { qtcwin = newwin(14, 75, 9, 2); qtc_panel = new_panel(qtcwin); hide_panel(qtc_panel); ry_win = newwin(14, 40, 9, 37); ry_panel = new_panel(ry_win); hide_panel(ry_panel); ry_help_win = newwin(5, 75, 4, 2); ry_help_panel = new_panel(ry_help_win); hide_panel(ry_help_panel); qtcpanel_initialized = 1; } init_pair(QTCRECVWINBG, COLOR_BLUE, COLOR_GREEN); init_pair(QTCRECVLINE, COLOR_WHITE, COLOR_BLUE); init_pair(QTCRECVINVLINE, COLOR_YELLOW, COLOR_CYAN); init_pair(QTCRECVCURRLINE, COLOR_YELLOW, COLOR_MAGENTA); init_pair(QTCRECVBG, COLOR_BLUE, COLOR_CYAN); } /* draw the panel content */ void draw_qtc_panel(int direction) { int i, j; show_panel(qtc_panel); top_panel(qtc_panel); werase(qtcwin); wnicebox(qtcwin, 0, 0, 12, 33, qtchead); sprintf(qtchead, "HELP"); wnicebox(qtcwin, 0, 35, 12, 38, qtchead); wbkgd(qtcwin, (chtype)(A_NORMAL | COLOR_PAIR(QTCRECVWINBG))); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 1, 1, " "); /* the first visible and used line is the qtc serial and count * it differs in RECV and SEND direction, these two lines sets them */ if (direction == RECV) { mvwprintw(qtcwin, 2, 1, " / "); } if (direction == SEND) { mvwprintw(qtcwin, 2, 1, " %d/%2d ", qtclist.serial, qtclist.count); } showfield(0); // QTC CALL if (direction == RECV) { showfield(1); // QTC serial } showfield(2); // QTC nr of row clear_help_block(); /* if the direction is RECV, set the fields on the opened QTC window */ if (direction == RECV) { for (i = 0; i < QTC_LINES; i++) { wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, i + 3, 1, " "); for (j = 0; j < 3; j++) { showfield((i * 3) + j + 3); // QTC fields... } } number_fields(); } /* same function, but it's a littlebit more complex, therefore that's in an external function */ if (direction == SEND) { show_sendto_lines(); } /* if the direction is RECV, and mode is DIGIMODE, * show the current CAPTURE MODE */ if (qtccurrdirection == RECV) { wattrset(qtcwin, LINE_INVERTED); if (trxmode == DIGIMODE) { if (qtc_ry_capture == 0) { mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); } else { mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); show_rtty_lines(); } } else { if (qtcrec_record == 1) { mvwprintw(qtcwin, 2, 11, "RECORD OFF "); } } wattrset(qtcwin, LINE_NORMAL); } showfield(activefield); curpos = 0; refreshp(); } /* start recording */ void start_qtc_recording() { char reccommand[100] = ""; char tempc[40]; if (record_run < 0 && qtcrec_record == 1 && strlen((char *)qtcrec_record_command) > 0) { strcpy(reccommand, qtcrec_record_command[0]); get_time(); strftime(tempc, 60, "%y%m%d%H%M%S.wav", time_ptr); strcat(reccommand, tempc); strcat(reccommand, qtcrec_record_command[1]); record_run = system(reccommand); if (record_run > -1 && qtcrec_record == 1) { mvwprintw(qtcwin, 2, 11, "RECORD ON "); } } } /* stop recording */ void stop_qtc_recording() { char reccommand[100] = ""; if (qtcrec_record == 1 && strlen((char *)qtcrec_record_command_shutdown) > 0) { strcpy(reccommand, "pkill -SIGINT -n "); strcat(reccommand, qtcrec_record_command_shutdown); IGNORE(system(reccommand));; record_run = -1; if (qtcrec_record == 1) { mvwprintw(qtcwin, 2, 11, "RECORD OFF "); } } } void fill_qtc_callsign(int direction, char *tcall) { if (direction == RECV) { strcpy(qtcreclist.callsign, tcall); } if (direction == SEND) { strcpy(qtclist.callsign, tcall); } } void fill_qtc_times(char *time) { int i; int len; int afield; if (trxmode != DIGIMODE && qtccurrdirection == RECV) { afield = (activefield - 3) / 3; if (strlen(time) >= 2) { len = 2; } else { len = strlen(time); } for (i = afield + 1; i < *qtccount; i++) { strncpy(qtcreclist.qtclines[i].time, time, len); qtcreclist.qtclines[i].time[len] = '\0'; showfield(3 + (i * 3)); } } } void fill_lazy_line(t_qtcrecline *recline) { int i; // fill time field for (i = strlen(recline->time); i < 4; i++) { recline->time[i + 1] = '\0'; recline->time[i] = '?'; } // fill callsign field for (i = strlen(recline->callsign); i < 3; i++) { recline->callsign[i + 1] = '\0'; recline->callsign[i] = '?'; } // fill serial field for (i = strlen(recline->serial); i < 1; i++) { recline->serial[i + 1] = '\0'; recline->serial[i] = '?'; } } /* prepare data for RECV operation */ void prepare_for_recv() { int i; /* if the callsign field is empty, or the callsign field has * been changed in main window, then it needs to clean up * all received QTC info */ if (strcmp(qtcreclist.callsign, prevqtccall) != 0 || strlen(qtcreclist.callsign) == 0) { qtcreclist.count = 0; qtcreclist.serial = 0; qtcreclist.confirmed = 0; qtcreclist.sentcfmall = 0; for (i = 0; i < QTC_LINES; i++) { qtcreclist.qtclines[i].status = 0; qtcreclist.qtclines[i].time[0] = '\0'; qtcreclist.qtclines[i].callsign[0] = '\0'; qtcreclist.qtclines[i].serial[0] = '\0'; qtcreclist.qtclines[i].receivedtime[0] = '\0'; qtcreclist.qtclines[i].confirmed = 0; } activefield = 0; qtc_ry_copied = 0; stop_qtc_recording(); } if (qtcreclist.count == 0) { activefield = 0; } /* save the previous qtc callsign */ strncpy(prevqtccall, qtcreclist.callsign, strlen(qtcreclist.callsign)); prevqtccall[strlen(qtcreclist.callsign)] = '\0'; qtccallsign = qtcreclist.callsign; /* save the address of the counter of receive QTC block */ qtccount = &qtcreclist.count; /* set the QTC win header */ sprintf(qtchead, "QTC receive"); } /* prepare data for SEND operation */ void prepare_for_send() { /* if the callsign field in main window had been changed, it needs * to clean up the qtc structure */ if (strcmp(qtclist.callsign, prevqtccall) != 0 || strlen(qtclist.callsign) == 0 || qtclist.count == 0) { qtc_temp_obj = qtc_get(qtclist.callsign); genqtclist(qtclist.callsign, (10 - (qtc_temp_obj->total))); activefield = 0; } /* save the current callsign to previous call variable */ strncpy(prevqtccall, qtclist.callsign, strlen(qtclist.callsign)); prevqtccall[strlen(qtclist.callsign)] = '\0'; qtccallsign = qtclist.callsign; /* save the address of the counter of SEND qtc structure */ qtccount = &qtclist.count; /* set the QTC win header */ sprintf(qtchead, "QTC send"); } void qtc_main_panel(int direction) { char tempc[40]; int i, x; int tfi, tlen = 0; int currqtc = -1; attr_t attributes; short cpair; /* fill the callsign fields of the current qtc direction structure * with hiscall or the last call if hiscall is empty */ if (strlen(hiscall) > 0) { fill_qtc_callsign(direction, hiscall); } else if (strlen(lastcall) > 0) { fill_qtc_callsign(direction, lastcall); } /* save the value of the direction variable */ qtccurrdirection = direction; /* here are the mandatory steps, if the direction is RECV */ if (direction == RECV) { prepare_for_recv(); } /* here are the mandatory steps, if the direction is SEND */ if (direction == SEND) { prepare_for_send(); } init_qtc_panel(); draw_qtc_panel(direction); i = 1; x = -1; /* main loop */ while (x != 27) { while (x < 1) { usleep(5000); time_update(); if (trxmode == DIGIMODE && digikeyer != NO_KEYER) { show_rtty(); } x = key_poll(); } switch (x) { //case 227: // ALT-c // Ctrl-T (^T) case 20: if (trxmode == DIGIMODE) { show_rtty_lines(); } // Up Arrow case KEY_UP: if (direction == RECV) { if (activefield > 0) { // nr of QTC record field idx if (activefield == 1 || activefield == 2) { activefield = 0; showfield(1); showfield(2); } else if (activefield == 3 || activefield == 4) { activefield -= 2; showfield(activefield + 2); } else { activefield -= 3; showfield(activefield + 3); } } showfield(activefield); curpos = 0; } if (direction == SEND && ((trxmode != DIGIMODE && qtclist.totalsent < *qtccount) || (trxmode == DIGIMODE && qtclist.totalsent == *qtccount))) { switch (activefield) { case 0: activefield = 12; show_help_msg(activefield); showfield(0); wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[9].qtc); break; case 2: activefield = 0; showfield(2); showfield(0); break; case 3: activefield = 2; showfield(2); wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, activefield + 1, 4, "%s", qtclist.qtclines[0].qtc); break; case 4 ... 12: show_help_msg(activefield); wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield - 3)].qtc); activefield--; wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield - 3)].qtc); break; } } break; // Down Arrow case KEY_DOWN: if (direction == RECV) { if (activefield < 30) { // last line serial field idx if (activefield == 0) { activefield = 1; showfield(0); } else if (activefield == 1 || activefield == 2) { activefield += 2; showfield(1); showfield(2); } else { activefield += 3; showfield(activefield - 3); } } showfield(activefield); curpos = 0; } if (direction == SEND && ((trxmode != DIGIMODE && qtclist.totalsent < *qtccount) || (trxmode == DIGIMODE && qtclist.totalsent == *qtccount))) { switch (activefield) { case 0: activefield = 2; showfield(0); showfield(2); break; case 2: activefield = 3; show_help_msg(activefield); showfield(2); wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[0].qtc); break; case 3 ... 11: show_help_msg(activefield); wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield - 3)].qtc); activefield++; wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield - 3)].qtc); break; case 12: activefield = 0; wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, 14, 4, "%s", qtclist.qtclines[9].qtc); showfield(0); break; } } break; // Left Arrow case KEY_LEFT: if (DIRCLAUSE) { if (curpos < curfieldlen) { // curpos is a shift, means lenght - position curpos++; showfield(activefield); } } break; // Right Arrow case KEY_RIGHT: if (DIRCLAUSE) { if (curpos > 0) { curpos--; showfield(activefield); } } break; // case '\n': case KEY_ENTER: if (activefield > 2) { if (direction == RECV) { currqtc = ((activefield - 3) / 3); if ((qtcreclist.qtclines[currqtc].status == 0 && strlen(qtcreclist.qtclines[currqtc].time) == 4 && strlen(qtcreclist.qtclines[currqtc].callsign) > 0 && strlen(qtcreclist.qtclines[currqtc].serial) > 0) || qtc_recv_lazy == 1 ) { if (qtc_recv_lazy == 1) { fill_lazy_line(&qtcreclist.qtclines[currqtc]); showfield(3 * (currqtc + 1)); showfield((3 * (currqtc + 1)) + 1); showfield((3 * (currqtc + 1)) + 2); } get_time(); tempc[0] = '\0'; strftime(tempc, 40, "%d-%b-%y %H:%M", time_ptr); strncpy(qtcreclist.qtclines[currqtc].receivedtime, tempc, 15); qtcreclist.qtclines[currqtc].receivedtime[15] = '\0'; qtcreclist.qtclines[currqtc].status = 2; show_status(currqtc); if (currqtc < *qtccount) { if (trxmode == DIGIMODE) { qtcreclist.qtclines[currqtc].confirmed = 1; // compatibility for other modes qtcreclist.confirmed++; activefield += 3; // go to next line exch field showfield(activefield - 3); } else { if (qtcreclist.qtclines[currqtc].confirmed == 0) { qtcreclist.qtclines[currqtc].confirmed = 1; qtcreclist.confirmed++; if (trxmode == CWMODE) { sendmessage(qtc_recv_msgs[2]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[2]); } } tfi = (activefield - 3) % 3; //activefield++; // go to next line time field activefield += (3 - tfi); showfield(activefield - (3 - tfi)); } showfield(activefield); } } else if (qtcreclist.qtclines[currqtc].status == 1 && qtcreclist.qtclines[currqtc].confirmed != 1) { if (trxmode == CWMODE) { sendmessage(qtc_recv_msgs[7]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[7]); } if (trxmode == DIGIMODE) { char *str = g_strdup_printf("%s %02d %02d\n", g_strchomp(qtc_recv_msgs[7]), currqtc + 1, currqtc + 1); sendmessage(str); g_free(str); } } if (*qtccount > 0 && qtcreclist.confirmed == *qtccount) { if (qtcreclist.sentcfmall == 0) { qtcreclist.sentcfmall = 1; log_recv_qtc_to_disk(nr_qsos); if (record_run > -1) { stop_qtc_recording(); } if (trxmode == DIGIMODE || trxmode == CWMODE) { sendmessage(qtc_recv_msgs[9]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[9]); } } x = 27; // close the window } } if (direction == SEND && trxmode != DIGIMODE) { if (qtclist.qtclines[activefield - 3].sent == 0) { qtclist.qtclines[activefield - 3].sent = 1; get_time(); tempc[0] = '\0'; strftime(tempc, 40, "%d-%b-%y %H:%M", time_ptr); strncpy(qtclist.qtclines[activefield - 3].senttime, tempc, 15); qtclist.qtclines[activefield - 3].senttime[15] = '\0'; qtclist.totalsent++; } tempc[0] = '\0'; replace_spaces(qtclist.qtclines[activefield - 3].qtc, tempc); if (trxmode == CWMODE) { sendmessage(tempc); } mvwprintw(qtcwin, activefield, 30, "*"); qtclist.qtclines[activefield - 3].flag = 1; // scroll down if not at end of qtclist: if (activefield - 3 < *qtccount - 1) { wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield - 3)].qtc); activefield++; wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield - 3)].qtc); } if (*qtccount > 0 && qtclist.totalsent == *qtccount) { wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CTRL+S to SAVE!"); refreshp(); show_help_msg(6); } } } if (activefield == 2) { if (direction == RECV && strlen(qtcreclist.callsign) > 0 && qtcreclist.serial > 0 && qtcreclist.count > 0 && qtcreclist.confirmed == 0 ) { if (trxmode == CWMODE) { sendmessage(qtc_recv_msgs[1]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[1]); } start_qtc_recording(); activefield++; showfield(activefield); } } if (trxmode == DIGIMODE) { if (direction == SEND && (activefield == 0 || activefield == 2) && qtclist.totalsent == 0) { if (qtc_send_msgs[1][strlen(qtc_send_msgs[1]) - 1] == 10) { qtc_send_msgs[1][strlen(qtc_send_msgs[1]) - 1] = '\0'; } tlen = strlen(qtc_send_msgs[1]) - 5; // len("sr/nr") = 5 char tmess[300], timec[40]; int ql; tmess[0] = '\0'; if (tlen > 0 && strncmp(qtc_send_msgs[1] + tlen, "sr/nr", 5) == 0) { tempc[0] = '\0'; strncpy(tempc, qtc_send_msgs[1], tlen - 1); tempc[tlen - 1] = '\0'; sprintf(tmess, "%s %d/%d %s %d/%d\n", tempc, qtclist.serial, *qtccount, tempc, qtclist.serial, *qtccount); } timec[0] = '\0'; get_time(); strftime(timec, 40, "%d-%b-%y %H:%M", time_ptr); for (ql = 0; ql < *qtccount; ql++) { qtclist.qtclines[ql].sent = 1; strncpy(qtclist.qtclines[ql].senttime, timec, 15); qtclist.qtclines[ql].senttime[15] = '\0'; qtclist.totalsent++; tempc[0] = '\0'; replace_spaces(qtclist.qtclines[ql].qtc, tempc); strcat(tmess, tempc); mvwprintw(qtcwin, ql + 3, 30, "*"); qtclist.qtclines[ql].flag = 1; } keyer_append(tmess); write_keyer(); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CTRL+S to SAVE!"); refreshp(); show_help_msg(6); showfield(activefield); } else { if (direction == SEND) { tempc[0] = '\0'; replace_spaces(qtclist.qtclines[activefield - 3].qtc, tempc); sendmessage(tempc); } } } if (activefield == 0) { start_qtc_recording(); } if (activefield < 2) { if (direction == RECV) { activefield++; showfield(activefield - 1); showfield(activefield); } } break; // Ctrl-S (^S), save QTC case 19: if (qtccurrdirection == SEND && *qtccount > 0 && qtclist.totalsent == *qtccount) { log_sent_qtc_to_disk(nr_qsos); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "QTC's have been saved!"); prevqtccall[0] = '\0'; qtccallsign[0] = '\0'; refreshp(); sleep(1); x = 27; // close the window } if (qtccurrdirection == RECV && trxmode == DIGIMODE) { qtc_ry_capture = 1; wattr_get(qtcwin, &attributes, &cpair, NULL); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); wattrset(qtcwin, attributes); showfield(activefield); refreshp(); show_rtty_lines(); } break; // Ctrl-E (^E), end capture case 5: if (qtccurrdirection == RECV && trxmode == DIGIMODE) { qtc_ry_capture = 0; wattr_get(qtcwin, &attributes, &cpair, NULL); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); wattrset(qtcwin, attributes); showfield(activefield); refreshp(); } break; // F1...F10 case KEY_F(1) ... KEY_F(10): if (trxmode == CWMODE || trxmode == DIGIMODE) { if (direction == RECV) { sendmessage(qtc_recv_msgs[x - KEY_F(1)]); /* 0-9 */ /* start recording */ if (trxmode == CWMODE && strncmp(qtc_recv_msgs[x - KEY_F(1)], "QRV", 3) == 0) { start_qtc_recording(); } /* stop recording */ if (trxmode == CWMODE && strncmp(qtc_recv_msgs[x - KEY_F(1)], "QSL ALL", 7) == 0 && record_run > -1) { stop_qtc_recording(); } if (trxmode == DIGIMODE && strncmp(qtc_recv_msgs[x - KEY_F(1)], "QRV", 3) == 0) { qtc_ry_capture = 1; wattr_get(qtcwin, &attributes, &cpair, NULL); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); wattrset(qtcwin, attributes); showfield(activefield); refreshp(); show_rtty_lines(); } } if (direction == SEND && strlen(qtc_send_msgs[x - KEY_F(1)]) > 0) { if (qtc_send_msgs[x - KEY_F(1)][strlen(qtc_send_msgs[x - KEY_F( 1)]) - 1] == '\n') { qtc_send_msgs[x - KEY_F(1)][strlen(qtc_send_msgs[x - KEY_F(1)]) - 1] = 0; } tlen = strlen(qtc_send_msgs[x - KEY_F(1)]) - 5; // len("sr/nr") = 5 char tmess[40]; tmess[0] = '\0'; if (tlen > 0 && strncmp(qtc_send_msgs[x - KEY_F(1)] + tlen, "sr/nr", 5) == 0) { tempc[0] = '\0'; strncpy(tempc, qtc_send_msgs[x - KEY_F(1)], tlen - 1); tempc[tlen - 1] = '\0'; sprintf(tmess, "%s %d/%d ", tempc, qtclist.serial, *qtccount); sendmessage(tmess); } else if ((activefield - 3) >= 0) { if (x - KEY_F(1) == 4) { // F5, TIME strncpy(tmess, qtclist.qtclines[activefield - 3].qtc, 5); tmess[5] = '\0'; sendmessage(tmess); } if (x - KEY_F(1) == 5) { // F6, CALLSIGN strncpy(tmess, qtclist.qtclines[activefield - 3].qtc + 5, 13); for (i = 12; tmess[i] == ' '; i--) ; tmess[i + 1] = ' '; tmess[i + 2] = '\0'; sendmessage(tmess); } if (x - KEY_F(1) == 6) { // F7, SERIAL strncpy(tmess, qtclist.qtclines[activefield - 3].qtc + 20, 4); tmess[4] = ' '; tmess[5] = '\0'; sendmessage(tmess); } } else { sendmessage(qtc_send_msgs[x - KEY_F(1)]); } } } if (trxmode == SSBMODE) { if (direction == RECV) { if (x == KEY_F(2)) { // F2, "QRV" start_qtc_recording(); } if (x == KEY_F(10) && record_run > -1) { // F10, "QSL ALL" stop_qtc_recording(); } play_file(qtc_phrecv_message[x - KEY_F(1)]); } if (direction == SEND) { play_file(qtc_phsend_message[x - KEY_F(1)]); } } break; // , Keypad case KEY_DC: if (DIRCLAUSE) { delete_from_field(0); } if (direction == SEND && activefield > 2 && trxmode != DIGIMODE) { qtclist.qtclines[activefield - 3].sent = 0; qtclist.qtclines[activefield - 3].flag = 0; wattrset(qtcwin, LINE_CURRNORMAL); mvwprintw(qtcwin, activefield, 30, " "); qtclist.totalsent--; } break; // case 9: if (direction == RECV) { if (trxmode == DIGIMODE) { if (activefield == 32) { activefield = 0; showfield(32); } else { activefield++; showfield(activefield - 1); } } else { if ((activefield < 3) || (activefield - 3) % 3 < 2) { activefield++; showfield(activefield - 1); } else { /* (activefield-3)%3 == 2*/ activefield -= 2; showfield(activefield + 2); } } showfield(activefield); } if (direction == SEND) { switch (activefield) { case 0: activefield = 2; showfield(0); showfield(2); break; case 2: activefield = 0; showfield(2); showfield(0); break; default: break; } } curpos = 0; break; // Shift case KEY_BTAB: if (direction == RECV) { if (trxmode == DIGIMODE) { if (activefield == 0) { activefield = 32; showfield(0); } else { activefield--; showfield(activefield + 1); } } else { if ((activefield > 0 && activefield < 3) || ((activefield - 3) % 3 > 0)) { activefield--; showfield(activefield + 1); } else { /* (activefield-3)%3 == 0) */ activefield += 2; showfield(activefield - 2); } } showfield(activefield); } if (direction == SEND) { switch (activefield) { case 0: activefield = 2; showfield(0); showfield(2); break; case 2: activefield = 0; showfield(2); showfield(0); break; default: break; } } curpos = 0; break; // case ' ': if (DIRCLAUSE) { if (direction == RECV) { if (activefield > 2) { if (activefield % 3 == 2) { activefield -= 2; showfield(activefield + 2); } else { activefield++; showfield(activefield - 1); } showfield(activefield); } if (activefield == 2) { if (strlen(qtcreclist.callsign) > 0 && qtcreclist.serial > 0 && qtcreclist.count > 0 && qtcreclist.confirmed == 0 ) { if (trxmode == CWMODE) { sendmessage(qtc_recv_msgs[1]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[1]); } start_qtc_recording(); activefield++; showfield(activefield); } } if (activefield < 2) { if (activefield == 0) { start_qtc_recording(); } activefield++; showfield(activefield - 1); showfield(activefield); } } } break; // Numerals case '0' ... '9': if (DIRCLAUSE) { modify_field(x); } break; /*case 65 ... 90: // letters modify_field(x); break;*/ // Convert lower case to upper case case 'a' ... 'z': if (DIRCLAUSE) { modify_field(x - 32); } break; // Slash case '/': if (DIRCLAUSE) { modify_field(x); } break; // Query case '?': if (DIRCLAUSE) { modify_field(x); } break; // case KEY_BACKSPACE: if (DIRCLAUSE) { delete_from_field(1); } break; // case KEY_PPAGE: speedup(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2u", GetCWSpeed()); break; // case KEY_NPAGE: speeddown(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2u", GetCWSpeed()); break; // Comma or Ctrl-K (^K), keyboard window case ',': case 11: mvprintw(5, 0, ""); keyer(); x = 0; break; // Ctrl-L (^L), mark callsign for late QTC case 12: if (strlen(g_strstrip(qtccallsign)) > 3) { qtc_inc(g_strstrip(qtccallsign), QTC_LATER); sprintf(tempc, "%s;L\n", qtccallsign); send_lan_message(QTCFLAG, tempc); } break; // Ctrl-N (^N), mark callsign for explicit NO QTC case 14: if (strlen(g_strstrip(qtccallsign)) > 3) { qtc_inc(g_strstrip(qtccallsign), QTC_NO); sprintf(tempc, "%s;N\n", qtccallsign); send_lan_message(QTCFLAG, tempc); } break; // Ctrl-F (^F), fill time fields with first 2 chars case 6: if (activefield > 2) { fill_qtc_times(qtcreclist.qtclines[(activefield - 3) / 3].time); showfield(activefield); } break; // Ctrl-R (^R), start/stop recording case 18: if (direction == RECV) { if (record_run < 0) { start_qtc_recording(); showfield(activefield); } else { stop_qtc_recording(); } } } refreshp(); if (x != 27) { x = 0; } } hide_panel(qtc_panel); } void showfield(int fidx) { char fieldval[20], filled[20]; int qtcrow, winrow, fi, posidx, i; fieldval[0] = '\0'; posidx = 0; if (fidx == 0) { sprintf(fieldval, "%s", qtccallsign); winrow = 1; posidx = 0; qtc_temp_obj = qtc_get(qtccallsign); put_qtc(); } else if (fidx == 1) { sprintf(fieldval, "%4d", qtcreclist.serial); winrow = 2; posidx = 1; } else if (fidx == 2) { sprintf(fieldval, "%d", *qtccount); winrow = 2; posidx = 2; } else { fi = fidx - 3; winrow = (fi / 3) + 3; qtcrow = winrow - 3; switch (fi % 3) { case 0: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].time); posidx = 3; break; case 1: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].callsign); posidx = 4; break; case 2: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].serial); posidx = 5; break; } show_status(qtcrow); } curfieldlen = strlen(fieldval); for (i = 0; i < pos[posidx][2]; i++) { filled[i] = ' '; } filled[i] = '\0'; if (fidx == activefield) { wattrset(qtcwin, LINE_CURRINVERTED); } else { wattrset(qtcwin, LINE_NORMAL); } mvwprintw(qtcwin, winrow, pos[posidx][0], filled); mvwprintw(qtcwin, winrow, pos[posidx][0], "%s", fieldval); if (fidx == activefield) { show_help_msg(posidx); if (pos[posidx][0] == pos[posidx][1]) { wmove(qtcwin, winrow, (pos[posidx][1] + strlen(fieldval)) - curpos); } else { wmove(qtcwin, winrow, pos[posidx][1] - curpos); } } } void modify_field(int pressed) { char fieldval[16]; int fi, winrow, qtcrow, posidx, stridx; memset(fieldval, '\0', 15); posidx = 0; if (activefield == 0 && (isalnum(pressed) || pressed == '/') && strlen(qtccallsign) < pos[0][2] - 1) { qtccallsign[strlen(qtccallsign) - curpos] = pressed; if (curpos > 0) { curpos--; } recalc_qtclist(); showfield(0); } else if (activefield == 1 && isdigit(pressed)) { sprintf(fieldval, "%d", (qtcreclist.serial) * 10); fieldval[strlen(fieldval) - (1 + curpos)] = pressed; if (curpos > 0) { curpos--; } if (strlen(fieldval) <= pos[1][2]) { qtcreclist.serial = atoi(fieldval); showfield(1); } } else if (activefield == 2 && isdigit(pressed)) { sprintf(fieldval, "%d", (*qtccount) * 10); fieldval[strlen(fieldval) - (1 + curpos)] = pressed; if (curpos > 0) { curpos--; } if (strlen(fieldval) <= pos[2][2] && atoi(fieldval) <= 10) { qtc_temp_obj = qtc_get(qtccallsign); if (qtccurrdirection == SEND) { if (*qtccount != atoi(fieldval)) { if ((atoi(fieldval) + (qtc_temp_obj->total)) >= 10) { sprintf(fieldval, "%d", (10 - (qtc_temp_obj->total))); } *qtccount = genqtclist(qtccallsign, atoi(fieldval)); show_sendto_lines(); put_qtc(); } } if (qtccurrdirection == RECV) { if ((atoi(fieldval) + (qtc_temp_obj->total)) >= 10) { sprintf(fieldval, "%d", (10 - (qtc_temp_obj->total))); } *qtccount = atoi(fieldval); } number_fields(); showfield(2); } } else if (activefield >= 3 && activefield <= 32) { fi = activefield - 3; winrow = (fi / 3) + 3; qtcrow = winrow - 3; stridx = fi % 3; switch (stridx) { case 0: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].time); posidx = 3; break; case 1: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].callsign); posidx = 4; break; case 2: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].serial); posidx = 5; break; } if (pressed == '?') { qtcreclist.qtclines[qtcrow].status = 1; // set incomplete the qtc status show_status(qtcrow); } if ((((stridx == 0 || stridx == 2) && (isdigit(pressed) || pressed == '?')) || stridx == 1) && strlen(fieldval) < pos[posidx][2]) { fieldval[strlen(fieldval) - curpos] = pressed; switch (stridx) { case 0: strcpy(qtcreclist.qtclines[qtcrow].time, fieldval); if (qtc_auto_filltime == 1) { fill_qtc_times(fieldval); } break; case 1: strcpy(qtcreclist.qtclines[qtcrow].callsign, fieldval); break; case 2: strcpy(qtcreclist.qtclines[qtcrow].serial, fieldval); break; } if (curpos > 0) { curpos--; } showfield(activefield); if (stridx == 0 && strlen(fieldval) == pos[posidx][2] && activefield <= 32) { // auto TAB if curr field is QTC time, and len is 4 curpos = 0; activefield++; showfield(activefield - 1); showfield(activefield); } } } } void delete_from_field(int dir) { char fieldval[16]; int fi, winrow, qtcrow, stridx; fieldval[0] = '\0'; if (activefield == 0) { if (strlen(qtccallsign) > 0) { sprintf(fieldval, "%s", qtccallsign); shift_left(fieldval, dir); strncpy(qtccallsign, fieldval, strlen(fieldval)); qtccallsign[strlen(fieldval)] = '\0'; recalc_qtclist(); showfield(0); } } else if (activefield == 1) { sprintf(fieldval, "%d", qtcreclist.serial); if (strlen(fieldval) > 0) { //sprintf(fieldval, "%d", qtcreclist.serial/10); shift_left(fieldval, dir); qtcreclist.serial = atoi(fieldval); showfield(1); } } else if (activefield == 2) { sprintf(fieldval, "%d", *qtccount); if (strlen(fieldval) > 0) { //sprintf(fieldval, "%d", *qtccount/10); shift_left(fieldval, dir); *qtccount = atoi(fieldval); showfield(2); } } else { fi = activefield - 3; winrow = (fi / 3) + 3; qtcrow = winrow - 3; stridx = fi % 3; switch (stridx) { case 0: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].time); break; case 1: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].callsign); break; case 2: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].serial); break; } if (strlen(fieldval) > 0) { shift_left(fieldval, dir); fieldval[strlen(fieldval)] = '\0'; switch (stridx) { case 0: strcpy(qtcreclist.qtclines[qtcrow].time, fieldval); break; case 1: strcpy(qtcreclist.qtclines[qtcrow].callsign, fieldval); break; case 2: strcpy(qtcreclist.qtclines[qtcrow].serial, fieldval); break; } showfield(activefield); } } } void shift_left(char *fieldval, int shift) { int i; for (i = strlen(fieldval) - (curpos + shift); i < strlen(fieldval); i++) { fieldval[i] = fieldval[i + 1]; } if (shift == 0) { curpos--; } } void show_status(int idx) { char flag = ' '; int i, status = 0; status = 0; if (idx < *qtccount) { if (strlen(qtcreclist.qtclines[idx].time) != 4) { status = 1; } else { for (i = 0; i < strlen(qtcreclist.qtclines[idx].time); i++) { if (qtcreclist.qtclines[idx].time[i] == '?' || ! isdigit(qtcreclist.qtclines[idx].time[i])) { status = 1; break; } } } if (strlen(qtcreclist.qtclines[idx].callsign) < 3) { status = 1; } else { for (i = 0; i < strlen(qtcreclist.qtclines[idx].callsign); i++) { if (qtcreclist.qtclines[idx].callsign[i] == '?') { status = 1; break; } } } if (strlen(qtcreclist.qtclines[idx].serial) == 0) { status = 1; } for (i = 0; i < strlen(qtcreclist.qtclines[idx].serial); i++) { if (qtcreclist.qtclines[idx].serial[i] == '?' || ! isdigit(qtcreclist.qtclines[idx].serial[i])) { status = 1; break; } } if (status == 1) { qtcreclist.qtclines[idx].status = 1; } else if (qtcreclist.qtclines[idx].status != 2) { // unset incomplete mark if not marked as complete qtcreclist.qtclines[idx].status = 0; } switch (qtcreclist.qtclines[idx].status) { case 0: flag = ' '; break; case 1: flag = '?'; break; case 2: flag = '*'; break; } if (trxmode == DIGIMODE && qtcreclist.qtclines[idx].status == 0) { flag = '+'; } wattrset(qtcwin, (chtype)(A_NORMAL | COLOR_PAIR(QTCRECVBG))); mvwprintw(qtcwin, idx + 3, 30, "%c", flag); } } void number_fields() { int i; wattrset(qtcwin, (chtype)(A_NORMAL | COLOR_PAIR(QTCRECVBG))); for (i = 0; i < QTC_LINES; i++) { mvwprintw(qtcwin, i + 3, 1, " "); } for (i = 0; i < *qtccount; i++) { mvwprintw(qtcwin, i + 3, 1, "%2d", i + 1); } } void clear_help_block() { int i; wattrset(qtcwin, LINE_INVERTED); for (i = 1; i < 13; i++) { mvwprintw(qtcwin, i, 36, " "); } } void show_help_msg(int msgidx) { int i = 0, j = 0; char buff[80]; int currqtc; clear_help_block(); wattrset(qtcwin, LINE_CURRINVERTED); if (qtccurrdirection == RECV) { if (trxmode == DIGIMODE && qtccurrdirection == RECV) { currqtc = ((activefield - 3) / 3); if (qtcreclist.qtclines[currqtc].status == 0 && strlen(qtcreclist.qtclines[currqtc].time) == 4 && strlen(qtcreclist.qtclines[currqtc].callsign) > 0 && strlen(qtcreclist.qtclines[currqtc].serial) > 0 ) { mvwprintw(qtcwin, ++j, 36, "Press ENTER to mark as RCVD"); } } else { mvwprintw(qtcwin, ++j, 36, help_rec_msgs[msgidx]); } } if (qtccurrdirection == SEND) { if (msgidx > 2 && msgidx < 6) { msgidx = 3; } mvwprintw(qtcwin, ++j, 36, help_send_msgs[msgidx]); } wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, ++j, 36, "PgUP/PgDW: QRQ/QRS CTRL-N: NO QTC"); if (qtccurrdirection == RECV) { mvwprintw(qtcwin, ++j, 36, "ENTER: R & next OR AGN CTRL-L: LATER "); } if (qtccurrdirection == SEND) { mvwprintw(qtcwin, ++j, 36, "ENTER: send QTC CTRL-L: LATER "); } for (i = 0; i < 12 && j < 12; i++) { if (qtccurrdirection == RECV) { if (strlen(qtc_recv_msgs[i]) > 0) { strncpy(buff, qtc_recv_msgs[i], strlen(qtc_recv_msgs[i]) - 1); buff[strlen(qtc_recv_msgs[i]) - 1] = '\0'; mvwprintw(qtcwin, ++j, 36, "F%-2d: %s", (i + 1), buff); } if (i == 1) { mvwprintw(qtcwin, j - 1, 56, "CTRL-F: FILL TIMES"); } if (i == 2) { mvwprintw(qtcwin, j - 1, 56, "CTRL-R: RECORD"); } } if (qtccurrdirection == SEND) { if (strlen(qtc_send_msgs[i]) > 0) { strncpy(buff, qtc_send_msgs[i], strlen(qtc_send_msgs[i]) - 1); buff[strlen(qtc_send_msgs[i]) - 1] = '\0'; mvwprintw(qtcwin, ++j, 36, "F%-2d: %s", (i + 1), buff); } } } if (trxmode == DIGIMODE && qtccurrdirection == RECV) { mvwprintw(qtcwin, ++j, 36, "CTRL-T: Terminal window"); mvwprintw(qtcwin, ++j, 36, "CTRL-S: Start capture"); mvwprintw(qtcwin, ++j, 36, "CTRL-E: End capture"); } } int parse_ry_line(char *line) { int j, i = 0, t = -1, f; char lline[40], *token, *wtoken, ttoken[50], tokens[5][15] = {"", "", "", "", ""}; // 5 members, cause possible callsign will AB/CD1EF/P, which will use 3 char *saveptr1, *saveptr2; char sep[6] = ""; int tactivefield; static int nr_parsed_line = 0; int serial_nr = 0; int maxlength[] = {4, 14, 4}; if (*qtccount == 0 || qtcreclist.serial == 0) { nr_parsed_line = 0; } if ((*qtccount > 0 || qtcreclist.serial > 0) && nr_parsed_line == 0) { nr_parsed_line = 1; } strncpy(lline, line, strlen(line)); tactivefield = activefield; if (nr_parsed_line == 0) { // 1st line: SERIAL/NR wtoken = strtok_r(lline, " ", &saveptr1); while (wtoken != NULL && nr_parsed_line == 0) { serial_nr = 0; strcpy(ttoken, wtoken); sep[0] = '/'; sep[1] = '\0'; token = strtok_r(ttoken, sep, &saveptr2); t = -1; while (token != NULL && t < 2) { t++; strcpy(tokens[t], token); token = strtok_r(NULL, sep, &saveptr2); } f = 0; for (i = 0; i <= t; i++) { f = 1; for (j = 0; j < strlen(tokens[i]); j++) { if (! isdigit(tokens[i][j])) { f = 0; } } if (f == 1) { tactivefield = activefield; activefield = i + 1; showfield(tactivefield); for (j = 0; j < strlen(tokens[i]); j++) { modify_field(tokens[i][j]); } showfield(activefield); serial_nr++; } } if (serial_nr == 2) { nr_parsed_line++; } wtoken = strtok_r(NULL, " ", &saveptr1); } } else { strcpy(sep, "/;-: "); token = strtok(lline, sep); while (token != NULL && t < 4) { t++; strcpy(tokens[t], token); token = strtok(NULL, sep); } while (t > 2) { strcat(tokens[1], "/"); strcat(tokens[1], tokens[2]); strcpy(tokens[t - 1], tokens[t]); tokens[t][0] = '\0'; t--; } for (i = 0; i <= t; i++) { f = 1; for (j = 0; j < strlen(tokens[i]); j++) { if ((i == 0 || i == 2) && ! isdigit(tokens[i][j])) { tokens[i][j] = '?'; } if (i == 1 && (!isalnum(tokens[i][j]) && tokens[i][j] != '/')) { tokens[i][j] = '?'; } } if (strlen(tokens[i]) > maxlength[i]) { tokens[i][maxlength[i]] = '\0'; } if (f == 1) { tactivefield = activefield; activefield = (nr_parsed_line * 3) + i; showfield(tactivefield); for (j = 0; j < strlen(tokens[i]); j++) { modify_field(tokens[i][j]); } showfield(activefield); } } for (i = ((t > 0) ? t : 0); i < 2; i++) { tactivefield = activefield; activefield = (nr_parsed_line * 3) + i; showfield(tactivefield); modify_field('?'); showfield(activefield); } nr_parsed_line++; qtc_ry_copied++; } tactivefield = activefield; return tactivefield; } /* print one line with its status */ int print_rtty_line(t_qtc_ry_line qtc_ry_line, int row) { char currline[50]; sprintf(currline, "%-38s", qtc_ry_line.content); currline[38] = '\0'; if (qtc_ry_line.attr == 1) { currline[36] = ' '; currline[37] = '*'; } mvwprintw(ry_win, row, 1, "%-38s", currline); return 0; } /* RTTY terminal to helps to capture the RTTY content */ void show_rtty_lines() { extern int miniterm; char boxhead[38]; int prevline; char currline[50] = "", firstline[50] = ""; int x, j; static int actline = 1; int oactivefield, tactivefield; oactivefield = activefield; tactivefield = activefield; show_panel(ry_panel); top_panel(ry_panel); werase(ry_win); show_panel(ry_help_panel); top_panel(ry_help_panel); werase(ry_help_win); sprintf(boxhead, "HELP"); wnicebox(ry_help_win, 0, 0, 3, 73, "HELP"); wbkgd(ry_help_win, (chtype)(A_NORMAL | COLOR_PAIR(QTCRECVWINBG))); wattrset(ry_help_win, LINE_INVERTED); // "1234567890123456789012345678901234567890123456789012345678901234567890123" mvwprintw(ry_help_win, 1, 1, "CTRL-R: Reset lines - CTRL-S: Start capture - CTRL-E: End capture "); mvwprintw(ry_help_win, 2, 1, "ENTER: add current line to QTC - Up/Down: move "); mvwprintw(ry_help_win, 3, 1, "ESC: hide RTTY window "); strcpy(boxhead, "RTTY"); wnicebox(ry_win, 0, 0, 12, 38, boxhead); wattrset(ry_win, LINE_NORMAL); for (j = 1; j < 13; j++) { mvwprintw(ry_win, j, 1, " "); } refreshp(); if (qtc_ry_capture == 1) { mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); } else { mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); } x = -1; j = 1; prevline = -1; curs_set(0); while (x != 27) { while (x < 1) { usleep(1000); time_update(); if (miniterm == 1 && trxmode == DIGIMODE && digikeyer != NO_KEYER) { show_rtty(); } if ((qtc_ry_currline < 11 && prevline != qtc_ry_currline - 1) || qtc_ry_currline == 11) { if (actline > 1 && strcmp(firstline, qtc_ry_lines[0].content) != 0) { actline--; strcpy(firstline, qtc_ry_lines[0].content); } if (actline == 1 && qtc_ry_currline > 0) { strcpy(firstline, qtc_ry_lines[0].content); } for (j = 0; j < qtc_ry_currline; j++) { if (j + 1 == actline) { wattrset(ry_win, LINE_CURRNORMAL); } print_rtty_line(qtc_ry_lines[j], j + 1); wattrset(ry_win, LINE_NORMAL); } prevline = qtc_ry_currline - 1; } strncpy(currline, qtc_ry_lines[qtc_ry_currline].content, 38); currline[39] = '\0'; mvwprintw(ry_win, qtc_ry_currline + 1, 1, "%-38s", currline); refreshp(); x = key_poll(); } switch (x) { // Up arrow case KEY_UP: wattrset(ry_win, LINE_NORMAL); print_rtty_line(qtc_ry_lines[actline - 1], actline); if (actline > 1) { actline--; } else { if (qtc_ry_currline > 0) { actline = qtc_ry_currline; } } wattrset(ry_win, LINE_CURRNORMAL); print_rtty_line(qtc_ry_lines[actline - 1], actline); wattrset(ry_win, LINE_NORMAL); break; // Down arrow case KEY_DOWN: wattrset(ry_win, LINE_NORMAL); print_rtty_line(qtc_ry_lines[actline - 1], actline); if (actline < qtc_ry_currline) { actline++; } else { actline = 1; } wattrset(ry_win, LINE_CURRNORMAL); print_rtty_line(qtc_ry_lines[actline - 1], actline); wattrset(ry_win, LINE_NORMAL); break; // Ctrl-R (^R) case 18: for (j = 0; j < 12; j++) { qtc_ry_lines[j].content[0] = '\0'; qtc_ry_lines[j].attr = 0; mvwprintw(ry_win, (j + 1), 1, " "); } prevline = -1; actline = 1; qtc_ry_currline = 0; qtc_ry_copied = 0; break; // Ctrl-S (^S), start capture case 19: qtc_ry_capture = 1; mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); break; // Ctrl-E (^E), end capture case 5: qtc_ry_capture = 0; mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); break; // , add to qtc case 10: if (qtc_ry_lines[actline - 1].attr == 0) { parse_ry_line(qtc_ry_lines[actline - 1].content); qtc_ry_lines[actline - 1].attr = 1; } wattrset(ry_win, LINE_CURRNORMAL); print_rtty_line(qtc_ry_lines[actline - 1], actline); wattrset(ry_win, LINE_NORMAL); break; } refreshp(); if (x != 27) { x = -1; } if (*qtccount > 0 && qtc_ry_copied == qtcreclist.count) { qtc_ry_capture = 0; mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); } } hide_panel(ry_panel); hide_panel(ry_help_panel); curs_set(1); tactivefield = activefield; activefield = oactivefield; showfield(tactivefield); showfield(oactivefield); } void put_qtc() { char qtcdirstring[3][10] = {"", "Received", "Sent"}; wattrset(qtcwin, LINE_NORMAL); if (qtc_temp_obj->capable == -1 && qtc_temp_obj->total == 0) { mvwprintw(qtcwin, 1, 19, "FLAG: NO QTC"); } else { mvwprintw(qtcwin, 1, 19, "%s %2d QTC", qtcdirstring[qtccurrdirection], qtc_temp_obj->total); } } void replace_spaces(char *src, char *tempc) { int tsp, tdp; tsp = 0; tdp = 0; g_strstrip(src); while (src[tsp] != '\0') { if (src[tsp] != ' ') { tempc[tdp] = src[tsp]; tdp++; } else { if (trxmode == DIGIMODE) { tempc[tdp] = '-'; } else { tempc[tdp] = ' '; } tdp++; while (src[tsp + 1] == ' ' || src[tsp + 1] == '-') { tsp++; } } tsp++; } tempc[tdp] = '\n'; tdp++; tempc[tdp] = '\0'; } void show_sendto_lines() { int i; wattrset(qtcwin, LINE_INVERTED); for (i = 0; i < QTC_LINES; i++) { mvwprintw(qtcwin, i + 3, 1, " "); } wattrset(qtcwin, LINE_NORMAL); for (i = 0; i < qtclist.count; i++) { mvwprintw(qtcwin, i + 3, 4, "%s", qtclist.qtclines[i].qtc); if (qtclist.qtclines[i].sent == 1) { mvwprintw(qtcwin, i + 3, 30, "*"); } } wattrset(qtcwin, LINE_NORMAL); for (i = qtclist.count; i < QTC_LINES; i++) { mvwprintw(qtcwin, i + 3, 4, " "); } number_fields(); } void recalc_qtclist() { if (qtccurrdirection == SEND) { if (strlen(qtccallsign) > 0 && strcmp(qtccallsign, prevqtccall) != 0) { qtc_temp_obj = qtc_get(qtccallsign); *qtccount = genqtclist(qtccallsign, (10 - (qtc_temp_obj->total))); show_sendto_lines(); showfield(2); put_qtc(); } } strncpy(prevqtccall, qtccallsign, strlen(qtccallsign)); prevqtccall[strlen(qtccallsign)] = '\0'; } tlf-1.4.0/src/fldigixmlrpc.c0000644000175000017500000004333413562576621012665 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2014-2002-2003 Rein Couperus * 2011, 2014, 2016 Thomas Beierlein * 2014, 2016 Ervin Hegedus * * 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 "startmsg.h" #include // need for abs() #include #include // need for va_list... #include #include #include #include #include #include "err_utils.h" #include "fldigixmlrpc.h" #include "printcall.h" #include "ui_utils.h" #include "logit.h" #include "tlf_curses.h" #include "getctydata.h" #include "searchlog.h" #ifdef HAVE_LIBXMLRPC # include # include # include #endif #include #define NAME "Tlf" #define XMLRPCVERSION "1.0" int fldigi_set_callfield = 0; typedef struct xmlrpc_res_s { int intval; const char *stringval; const unsigned char *byteval; } xmlrpc_res; #define CENTER_FREQ 2210 /* low: 2125Hz, high: 2295Hz, shift: 170Hz, center: 2125+(170/2) = 2210Hz */ #define MAXSHIFT 20 /* max shift value in Fldigi, when Tlf set it back to RIG carrier */ extern char fldigi_url[50]; static int use_fldigi; int fldigi_var_carrier = 0; int fldigi_var_shift_freq = 0; #ifdef HAVE_LIBXMLRPC static int initialized = 0; #endif static int connerr = 0; char thiscall[20] = ""; char tcomment[20] = ""; pthread_mutex_t xmlrpc_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t xmlrpc_get_rx_mutex = PTHREAD_MUTEX_INITIALIZER; /* * Used XML RPC methods, and its formats of arguments * ================================================== main.rx n:n - RX main.tx n:n - TX main.get_trx_state s:n - get RX/TX state, 's' could be "RX" | "TX" rx.get_data 6:n (bytes:) - get content of RX window since last query text.add_tx n:s - add content to TX window modem.get_carrier i:n - get carrier of modem modem.set_carrier i:i - set carrier of modem log.get_call s:n - Returns the Call field contents log.set_call n:s - Sets the Call field contents log.get_serial_number s:n - Returns the serial number field contents rig.set_frequency d:d - Sets the RF carrier frequency. Returns the old value log.get_exchange s:n - Returns the contest exchange field contents log.set_exchange n:s - Sets the contest exchange field contents rig.set_modes n:A - Sets the list of available rig modes rig.set_mode n:s - Selects a mode previously added by rig.set_modes // other usable functions text.get_rx_length i:n - get length of content of RX window text.get_rx 6:ii - (bytes:int|int) - get part content of RX window [start:length] undocumented functions ====================== tx.get_data 6:n - (bytes:) - get content of TX window since last query */ #ifdef HAVE_LIBXMLRPC xmlrpc_env env; xmlrpc_server_info *serverInfoP = NULL; #endif void fldigi_clear_connerr() { pthread_mutex_lock(&xmlrpc_mutex); connerr = 0; pthread_mutex_unlock(&xmlrpc_mutex); } int fldigi_toggle(void) { int ret; pthread_mutex_lock(&xmlrpc_mutex); use_fldigi = !use_fldigi; ret = use_fldigi; pthread_mutex_unlock(&xmlrpc_mutex); return ret; } int fldigi_isenabled(void) { int ret; pthread_mutex_lock(&xmlrpc_mutex); ret = use_fldigi; pthread_mutex_unlock(&xmlrpc_mutex); return ret; } void xmlrpc_res_init(xmlrpc_res *res) { #ifdef HAVE_LIBXMLRPC res->stringval = NULL; res->byteval = NULL; #endif } int fldigi_xmlrpc_init() { #ifdef HAVE_LIBXMLRPC pthread_mutex_lock(&xmlrpc_mutex); xmlrpc_client_init2(&env, XMLRPC_CLIENT_NO_FLAGS, NAME, XMLRPCVERSION, NULL, 0); serverInfoP = xmlrpc_server_info_new(&env, fldigi_url); if (env.fault_occurred != 0) { serverInfoP = NULL; initialized = 0; pthread_mutex_unlock(&xmlrpc_mutex); return -1; } initialized = 1; pthread_mutex_unlock(&xmlrpc_mutex); #endif return 0; } int fldigi_xmlrpc_cleanup() { #ifdef HAVE_LIBXMLRPC pthread_mutex_lock(&xmlrpc_mutex); if (serverInfoP != NULL) { xmlrpc_server_info_free(serverInfoP); serverInfoP = NULL; initialized = 0; } pthread_mutex_unlock(&xmlrpc_mutex); #endif return 0; } #ifdef HAVE_LIBXMLRPC int fldigi_xmlrpc_query(xmlrpc_res *local_result, xmlrpc_env *local_env, char *methodname, char *format, ...) { static unsigned int connerrcnt = 0; xmlrpc_value *callresult; xmlrpc_value *pcall_array = NULL; xmlrpc_value *va_param = NULL; va_list argptr; int restype; size_t bytesize = 0; int ret; pthread_mutex_lock(&xmlrpc_mutex); if (initialized == 0) { pthread_mutex_unlock(&xmlrpc_mutex); return -1; } /* if connerr had been set up to 1, that means an error occured at last xmlrpc_call() method if that true, then we count the number of calling this function (xmlrpc()), if counter reaches 10, then clear it, and try again this handles the xmlrpc_call() errors, eg. Fldigi is unreacheable, but it will check again and again, not need to restart Tlf, or type ":FLDIGI" to turn on again */ if (connerr == 1 && use_fldigi == 1) { if (connerrcnt == 10) { use_fldigi = 0; TLF_LOG_WARN("Fldigi: lost connection!"); } else { connerrcnt++; } } else { connerrcnt = 0; } local_result->stringval = NULL; local_result->byteval = NULL; if (connerr == 0 && use_fldigi == 1) { va_start(argptr, format); xmlrpc_env_init(local_env); pcall_array = xmlrpc_array_new(local_env); while (*format != '\0') { if (*format == 's') { char *s = va_arg(argptr, char *); va_param = xmlrpc_string_new(local_env, s); if (local_env->fault_occurred) { va_end(argptr); connerr = 1; pthread_mutex_unlock(&xmlrpc_mutex); return -1; } xmlrpc_array_append_item(local_env, pcall_array, va_param); if (local_env->fault_occurred) { va_end(argptr); connerr = 1; pthread_mutex_unlock(&xmlrpc_mutex); return -1; } xmlrpc_DECREF(va_param); } else if (*format == 'd') { int d = va_arg(argptr, int); va_param = xmlrpc_int_new(local_env, d); xmlrpc_array_append_item(local_env, pcall_array, va_param); if (local_env->fault_occurred) { va_end(argptr); connerr = 1; pthread_mutex_unlock(&xmlrpc_mutex); return -1; } xmlrpc_DECREF(va_param); } else if (*format == 'f') { double f = va_arg(argptr, double); va_param = xmlrpc_double_new(local_env, f); xmlrpc_array_append_item(local_env, pcall_array, va_param); if (local_env->fault_occurred) { va_end(argptr); connerr = 1; pthread_mutex_unlock(&xmlrpc_mutex); return -1; } xmlrpc_DECREF(va_param); } format++; } va_end(argptr); callresult = xmlrpc_client_call_server_params(local_env, serverInfoP, methodname, pcall_array); if (local_env->fault_occurred) { // error till xmlrpc_call connerr = 1; xmlrpc_DECREF(pcall_array); xmlrpc_env_clean(local_env); pthread_mutex_unlock(&xmlrpc_mutex); return -1; } else { restype = xmlrpc_value_type(callresult); if (restype == 0xDEAD) { xmlrpc_DECREF(callresult); xmlrpc_DECREF(pcall_array); xmlrpc_env_clean(local_env); pthread_mutex_unlock(&xmlrpc_mutex); return -1; } else { local_result->intval = 0; } switch (restype) { // int case XMLRPC_TYPE_INT: xmlrpc_read_int(local_env, callresult, &local_result->intval); break; // string case XMLRPC_TYPE_STRING: xmlrpc_read_string(local_env, callresult, &local_result->stringval); break; // byte stream case XMLRPC_TYPE_BASE64: xmlrpc_read_base64(local_env, callresult, &bytesize, &local_result->byteval); local_result->intval = (int)bytesize; break; } xmlrpc_DECREF(callresult); } xmlrpc_DECREF(pcall_array); } if (connerr == 0 && use_fldigi) ret = 0; else ret = -1; pthread_mutex_unlock(&xmlrpc_mutex); return ret; } #endif /* command fldigi to RX now */ void fldigi_to_rx() { #ifdef HAVE_LIBXMLRPC xmlrpc_res result; xmlrpc_env env; fldigi_xmlrpc_query(&result, &env, "main.rx", ""); if (result.stringval != NULL) { free((void *)result.stringval); } #endif } /* send message to Fldigi TX window, transmit it */ int fldigi_send_text(char *line) { int rc = 0; #ifdef HAVE_LIBXMLRPC xmlrpc_res result; xmlrpc_env env; // check the RX/TX status rc = fldigi_xmlrpc_query(&result, &env, "main.get_trx_state", ""); if (rc != 0) { return -1; } // if state is TX, stop it // if the RX success, clear the previous message from TX text window if (strcmp(result.stringval, "TX") == 0) { free((void *)result.stringval); result.stringval = NULL; rc = fldigi_xmlrpc_query(&result, &env, "main.rx", ""); if (rc != 0) { return -1; } rc = fldigi_xmlrpc_query(&result, &env, "text.clear_tx", ""); if (rc != 0) { return -1; } sleep(2); } if (result.stringval != NULL) { free((void *)result.stringval); } // add message to rc = fldigi_xmlrpc_query(&result, &env, "text.add_tx", "s", line); if (rc != 0) { return -1; } /* switch to rx afterwards */ rc = fldigi_xmlrpc_query(&result, &env, "text.add_tx", "s", "^r"); if (rc != 0) { return -1; } if (result.stringval != NULL) { free((void *)result.stringval); } /* switch to tx */ rc = fldigi_xmlrpc_query(&result, &env, "main.tx", ""); if (result.stringval != NULL) { free((void *)result.stringval); } #endif return rc; } /* read the text from Fldigi's RX window, from last read position */ /* * Since this uses a static variable, it is not thread-safe and must * use a protective mutex. */ int fldigi_get_rx_text(char *line, int len) { #ifdef HAVE_LIBXMLRPC int rc; xmlrpc_res result; xmlrpc_env env; static int lastpos = 0; int textlen = 0; int retval = 0; int linelen = 0; pthread_mutex_lock(&xmlrpc_get_rx_mutex); rc = fldigi_xmlrpc_query(&result, &env, "text.get_rx_length", ""); if (rc != 0) { pthread_mutex_unlock(&xmlrpc_get_rx_mutex); return -1; } textlen = result.intval; if (lastpos == 0) { lastpos = textlen; } else { if (lastpos < textlen) { rc = fldigi_xmlrpc_query(&result, &env, "text.get_rx", "dd", lastpos, textlen - lastpos >= len ? len - 1 : textlen - lastpos); if (rc != 0) { pthread_mutex_unlock(&xmlrpc_get_rx_mutex); return -1; } if (result.intval > 0 && result.byteval != NULL) { linelen = result.intval; if (result.intval >= len) { linelen = len - 1; } memcpy(line, result.byteval, linelen); line[linelen] = '\0'; retval = linelen; } if (result.byteval != NULL) { free((void *)result.byteval); } } } lastpos = textlen; pthread_mutex_unlock(&xmlrpc_get_rx_mutex); return retval; #else return 0; #endif } /* get the carrier value of Fldigi waterfall window */ int fldigi_xmlrpc_get_carrier() { #ifndef HAVE_LIBXMLRPC return 0; #else int rc; xmlrpc_res result; xmlrpc_env env; extern rmode_t rigmode; extern int trx_control; extern freq_t freq; int signum; int modeshift; char fldigi_mode[6] = ""; rc = fldigi_xmlrpc_query(&result, &env, "modem.get_carrier", ""); if (rc != 0) { return -1; } fldigi_var_carrier = (int)result.intval; /* if mode == RTTY(R), and Hamlib configured, set VFO to new freq where the signal * will placed on 2210 Hz - the FSK center freq */ if (trx_control > 0) { if (rigmode == RIG_MODE_RTTY || rigmode == RIG_MODE_RTTYR) { if (fldigi_var_carrier != CENTER_FREQ && abs(CENTER_FREQ - fldigi_var_carrier) > MAXSHIFT) { if (fldigi_var_shift_freq == 0) { rc = fldigi_xmlrpc_query(&result, &env, "modem.set_carrier", "d", (xmlrpc_int32) CENTER_FREQ); if (rc != 0) { return -1; } fldigi_var_shift_freq = CENTER_FREQ - fldigi_var_carrier; } } } if (rigmode != RIG_MODE_NONE) { switch (rigmode) { case RIG_MODE_USB: signum = 1; modeshift = 85; strcpy(fldigi_mode, "USB"); break; case RIG_MODE_LSB: signum = -1; modeshift = 85; strcpy(fldigi_mode, "LSB"); break; case RIG_MODE_RTTY: signum = 0; modeshift = 0; strcpy(fldigi_mode, "RTTY"); break; case RIG_MODE_RTTYR: signum = 0; // not checked - I don't have RTTY-REV mode on my RIG modeshift = 0; strcpy(fldigi_mode, "RTTYR"); break; case RIG_MODE_CW: signum = 0; modeshift = 0; strcpy(fldigi_mode, "CW"); break; case RIG_MODE_CWR: signum = -1; // not checked - I don't have CW-REV mode on my RIG modeshift = 0; strcpy(fldigi_mode, "CWR"); break; default: signum = 0; // this is the "normal" modeshift = 0; strcpy(fldigi_mode, "CW"); } /* set the mode in Fldigi */ rc = fldigi_xmlrpc_query(&result, &env, "rig.set_mode", "s", fldigi_mode); if (rc != 0) { return -1; } fldigi_var_carrier = ((signum) * fldigi_var_carrier) + modeshift; /* also set the freq value in Fldigi FREQ block */ rc = fldigi_xmlrpc_query(&result, &env, "rig.set_frequency", "f", (xmlrpc_double)(freq - fldigi_var_carrier)); if (rc != 0) { return -1; } } } return 0; #endif } /* give back the crrent carrier value, which stored in variable */ int fldigi_get_carrier() { #ifdef HAVE_LIBXMLRPC return fldigi_var_carrier; #else return 0; #endif } /* read callsign field in Fldigi, and sets the CALL in Tlf */ int fldigi_get_log_call() { #ifdef HAVE_LIBXMLRPC int rc; xmlrpc_res result; xmlrpc_env env; xmlrpc_res_init(&result); extern char hiscall[]; char tempstr[20]; int i, j; rc = fldigi_xmlrpc_query(&result, &env, "log.get_call", ""); if (rc != 0) { return -1; } else { if (result.stringval != NULL) { j = 0; // accept only alphanumeric chars and '/' in callsign // in case of QRM, there are many several metachar for (i = 0; i < 20 && result.stringval[i] != '\0'; i++) { if (isalnum(result.stringval[i]) || result.stringval[i] == '/') { tempstr[j++] = result.stringval[i]; } } tempstr[j] = '\0'; // check the current call in Tlf; if the previous local callsign isn't empty, // that means the OP clean up the callsign field, so it needs to clean in Fldigi too if (hiscall[0] == '\0' && thiscall[0] != '\0') { thiscall[0] = '\0'; rc = fldigi_xmlrpc_query(&result, &env, "log.set_call", "s", ""); if (rc != 0) { return -1; } } // otherways, fill the callsign field in Tlf else { if (strlen(tempstr) >= 3) { if (hiscall[0] == '\0') { strcpy(hiscall, tempstr); hiscall[strlen(tempstr)] = '\0'; strcpy(thiscall, hiscall); printcall(); getctydata_pfx(hiscall); searchlog(hiscall); fldigi_set_callfield = 1; } } } } free((void *)result.stringval); if (result.byteval != NULL) { free((void *)result.byteval); } } #endif return 0; } /* read exchange field in Fldigi, and sets that in Tlf */ int fldigi_get_log_serial_number() { #ifdef HAVE_LIBXMLRPC int rc; xmlrpc_res result; xmlrpc_env env; xmlrpc_res_init(&result); extern char comment[]; char tempstr[20]; int i, j; rc = fldigi_xmlrpc_query(&result, &env, "log.get_exchange", ""); if (rc != 0) { return -1; } else { if (result.stringval != NULL) { j = 0; // accept only alphanumeric chars for (i = 0; i < 20 && result.stringval[i] != '\0'; i++) { if (isalnum(result.stringval[i])) { tempstr[j++] = result.stringval[i]; } } tempstr[j] = '\0'; // if the previous exchange isn't empty, but the current value is it, // that means the OP cleaned up the field, so we need to clean up it in Fldigi if (comment[0] == '\0' && tcomment[0] != '\0') { tcomment[0] = '\0'; rc = fldigi_xmlrpc_query(&result, &env, "log.set_exchange", "s", ""); if (rc != 0) { return -1; } } // otherways we need to fill the Tlf exchange field else { if (strlen(tempstr) > 0 && comment[0] == '\0') { strcpy(comment, tempstr); comment[strlen(tempstr)] = '\0'; strcpy(tcomment, comment); refresh_comment(); } } } free((void *)result.stringval); if (result.stringval != NULL) { free((void *)result.byteval); } } #endif return 0; } int fldigi_get_shift_freq() { #ifdef HAVE_LIBXMLRPC int t; /* temp var to store real variable before cleaning it up */ t = fldigi_var_shift_freq; /* clean is necessary to check that it readed by called this function */ fldigi_var_shift_freq = 0; /* needs to keep in sync with the rig VFO */ return t; #else return 0; #endif } void xmlrpc_showinfo() { #ifdef HAVE_LIBXMLRPC // Show xmlrpc status showmsg("XMLRPC compiled in"); #else showmsg("XMLRPC NOT compiled"); #endif } tlf-1.4.0/src/readqtccalls.h0000644000175000017500000000171213562576621012642 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Ervin Hegedüs - HA2OS * * 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 */ #ifndef READQTCCALLS_H #define READQTCCALLS_H int readqtccalls(); #endif /* end of include guard: READQTCCALLS_H */ tlf-1.4.0/src/readcabrillo.c0000644000175000017500000003262513562576621012625 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2017 Ervin Hegedus * * 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 */ #ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE #endif #include "readcabrillo.h" #include "globalvars.h" #include #include #include #include #include #include "tlf_curses.h" #include "addcall.h" #include "addmult.h" #include "bands.h" #include "cabrillo_utils.h" #include "cleanup.h" #include "getexchange.h" #include "makelogline.h" #include "qtc_log.h" #include "startmsg.h" #include "store_qso.h" #define MAX_CABRILLO_LEN 255 enum { LOGPREF_NONE, LOGPREF_QSO, LOGPREF_XQSO, LOGPREF_QTC }; static int cablinecnt = 0; char qtcsend_logfile_import[] = "IMPORT_QTC_sent.log"; char qtcrecv_logfile_import[] = "IMPORT_QTC_recv.log"; extern char qsos[MAX_QSOS][LOGLINELEN + 1]; // array of log lines of QSOs so far; extern int qsoflags_for_qtc[MAX_QSOS]; // array of flag to log lines of QSOs extern int nr_qsos; void concat_comment(char *exchstr) { if (strlen(comment) > 0) { strcat(comment, " "); } strcat(comment, exchstr); } int qtcs_allowed(struct cabrillo_desc *cabdesc) { return ((qtcdirection > 0) && (cabdesc->qtc_item_count > 0)); } /* check if line starts with 'start' */ int starts_with(char *line, char *start) { return (strncmp(line, start, strlen(start)) == 0); } /* write a new line to the qso log */ void write_log_fm_cabr() { qsonum = cablinecnt; sprintf(qsonrstr, "%04d", cablinecnt); if (serial_grid4_mult == 1) { strcpy(section, getgrid(comment)); } checkexchange(0); addcall(); /* add call to dupe list */ makelogline(); /* format logline */ store_qso(logline4); cleanup_qso(); qsoflags_for_qtc[nr_qsos - 1] = 0; } /* write a new line to the qtc log */ void write_qtclog_fm_cabr(char *qtcrcall, struct read_qtc_t qtc_line) { extern char call[]; static int qtc_curr_call_nr = 0; static int qtc_last_call_nr = 0; static int qtc_last_qtc_serial = 0; static int qtc_last_qtc_count = 0; static char qtc_last_qtc_rcall[15] = ""; char thiscall[15] = "", ttime[5] = ""; int found_call = 0, found_empty = 0; if (strcmp(qtcrcall, call) == 0) { // RECV qtc_line.direction = RECV; qtc_line.qsonr = cablinecnt; make_qtc_logline(qtc_line, qtcrecv_logfile_import); } else { // SENT qtc_line.direction = SEND; // search the sent callsign in list of QSO's found_call = 0; // indicates that the callsign found found_empty = 0;// indicates that there is the "hole" in the list // some reason, eg. own call // if new qtc block comes, go back to last empty if (qtc_last_qtc_count != qtc_line.qtchead_count && qtc_last_qtc_serial != qtc_line.qtchead_serial && strcmp(qtc_last_qtc_rcall, qtcrcall) != 0) { // current nr last stored nr - empty (see above) or after last qtc_curr_call_nr = qtc_last_call_nr; strcpy(qtc_last_qtc_rcall, qtcrcall); qtc_last_qtc_serial = qtc_line.qtchead_serial; qtc_last_qtc_count = qtc_line.qtchead_count; } // look until not found and we're in list while (found_call == 0 && qtc_curr_call_nr < nr_qsos) { strncpy(thiscall, qsos[qtc_curr_call_nr] + 29, 14); g_strchomp(thiscall); strncpy(ttime, qsos[qtc_curr_call_nr] + 17, 2); strncpy(ttime + 2, qsos[qtc_curr_call_nr] + 20, 2); ttime[4] = '\0'; // check the call was't sent, and call and time are equals if (qsoflags_for_qtc[qtc_curr_call_nr] == 0 && (strcmp(thiscall, qtc_line.qtc_call) == 0) && (strcmp(ttime, qtc_line.qtc_time)) == 0) { found_call = qtc_curr_call_nr + 1; qsoflags_for_qtc[qtc_curr_call_nr] = 1; } else { if (found_empty == 0) { found_empty = 1; qtc_last_call_nr = qtc_curr_call_nr; } } // increment list pos. qtc_curr_call_nr++; } // end search if (found_empty == 0 && found_call > 0) { qtc_last_call_nr = qtc_curr_call_nr; } else { // TODO // handling this issue //if (found_call == 0) { //syslog(LOG_DEBUG, "Found invalid QTC time / QTC call: '%s' '%s' - '%s' '%s' at QTC with %s [%d] (%d - %d)", qtc_line.qtc_time, qtc_line.qtc_call, ttime, thiscall, qtcrcall, qtc_curr_call_nr, found_empty, found_call); //} qtc_curr_call_nr = qtc_last_call_nr; } strcpy(qtc_line.call, qtcrcall); qtc_line.callpos = found_call; qtc_line.qsonr = cablinecnt; make_qtc_logline(qtc_line, qtcsend_logfile_import); } } /* cabrillo QSO to Tlf format * * walk through the lines which starts with QSO/X-QSO, and * build a virtual QSO; then it calls the existing functions * to add to the real log, used by the Cabrillo datas (eg. freq, * date, time, band, ...) instead of the real */ struct read_qtc_t qtc_line; /* make global for testability */ void cab_qso_to_tlf(char *line, struct cabrillo_desc *cabdesc) { extern freq_t freq; extern struct tm time_ptr_cabrillo; extern char call[]; int item_count; GPtrArray *item_array; struct line_item *item; int i; int pos = 0; char tempstr[80], *tempstrp, timestr[3]; int linetype = LOGPREF_NONE; char qtcrcall[15], qtcscall[15]; // [UNIVERSAL] // QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;RST_S,3;EXC_S,6;HISCALL,13;RST_R,3;EXCH,6 // [WAEDC] // QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;RST_S,3;EXC_S,6;HISCALL,13;RST_R,3;EXCH,6 // QTC=FREQ,5;MODE,2;DATE,10;TIME,4;QTCRCALL,13;QTCHEAD,10;QTCSCALL,13;QTC,23 // QSO: 14043 CW 2016-08-13 0022 HA2OS 599 0004 KL7SB/VY2 599 025 // QSO: 7002 CW 2016-08-13 0033 HA2OS 599 0008 K6ND 599 044 // // Tlf log: // 20CW 13-Aug-16 00:22 0004 KL7SB/VY2 599 599 025 KL7 1 14043.5 // 40CW 13-Aug-16 00:33 0008 K6ND 599 599 044 K6 1 7002.8 // QSO: 14084 RY 2016-11-12 1210 HA2OS 599 0013 K4GM 599 156 // QTC: 14084 RY 2016-11-12 1214 HA2OS 13/10 K4GM 0230 DL6UHD 074 // // 20DIG 0013 12-Nov-16 12:14 K4GM 0013 0010 0230 DL6UHD 074 14084.0 // BANDM QSO DATE TIME CALL SERIAL/NR TIME QTCCALL QTCSER FREQ // // QSO: 3593 RY 2016-11-12 2020 HA2OS 599 0110 RG9A 599 959 // QTC: 3593 RY 2016-11-12 2021 RG9A 2/10 HA2OS 1208 2M0WEV 018 // // 80DIG 0110 0011 12-Nov-16 20:21 RG9A 0002 0010 1208 2M0WEV 018 3593.8 // BANDM QSO POS DATE TIME CALL SERIAL/NR TIME QTCCALL QTCSER FREQ memset(&time_ptr_cabrillo, 0, sizeof(struct tm)); memset(&qtc_line, 0, sizeof(struct read_qtc_t)); if (starts_with(line, "QSO")) { pos = 5; cablinecnt++; linetype = LOGPREF_QSO; item_count = cabdesc->item_count; item_array = cabdesc->item_array; } else if (starts_with(line, "X-QSO")) { pos = 7; cablinecnt++; linetype = LOGPREF_XQSO; item_count = cabdesc->item_count; item_array = cabdesc->item_array; } else if (qtcs_allowed(cabdesc) && (starts_with(line, "QTC"))) { pos = 5; linetype = LOGPREF_QTC; item_count = cabdesc->qtc_item_count; item_array = cabdesc->qtc_item_array; } else { return; } qtcrcall[0] = '\0'; qtcscall[0] = '\0'; for (i = 0; i < item_count; i++) { item = g_ptr_array_index(item_array, i); g_strlcpy(tempstr, line + pos, item->len + 1); g_strchomp(tempstr); pos += item->len; pos++; // space between fields switch (item->tag) { case FREQ: freq = atof(tempstr) * 1000.0; bandinx = freq2band(freq); strcpy(qtc_line.band, band[bandinx]); qtc_line.freq = freq; break; case MODE: if (strcmp(tempstr, "CW") == 0) { trxmode = CWMODE; strcpy(qtc_line.mode, "CW "); } else if (strcmp(tempstr, "PH") == 0) { trxmode = SSBMODE; strcpy(qtc_line.mode, "PH "); } else { trxmode = DIGIMODE; strcpy(qtc_line.mode, "DIG"); } break; case DATE: strptime(tempstr, "%Y-%m-%d", &time_ptr_cabrillo); strftime(qtc_line.date, 60, "%d-%b-%y", &time_ptr_cabrillo); break; case TIME: timestr[0] = tempstr[0]; timestr[1] = tempstr[1]; timestr[2] = '\0'; time_ptr_cabrillo.tm_hour = atoi(timestr); timestr[0] = tempstr[2]; timestr[1] = tempstr[3]; timestr[2] = '\0'; time_ptr_cabrillo.tm_min = atoi(timestr); sprintf(qtc_line.time, "%02d:%02d", time_ptr_cabrillo.tm_hour, time_ptr_cabrillo.tm_min); break; case MYCALL: break; case HISCALL: strcpy(hiscall, tempstr); break; case RST_S: strcpy(my_rst, tempstr); break; case RST_R: strcpy(his_rst, tempstr); break; case EXCH: strcpy(comment, tempstr); break; case EXC1: strcpy(comment, tempstr); break; case EXC2: concat_comment(tempstr); break; case EXC3: concat_comment(tempstr); break; case EXC4: concat_comment(tempstr); break; case EXC_S: case TX: case QTCRCALL: strcpy(qtcrcall, tempstr); strcpy(qtc_line.call, tempstr); break; case QTCHEAD: strcpy(qtc_line.qtchead, tempstr); qtc_line.qtchead_serial = 0; if ((tempstrp = strtok(qtc_line.qtchead, "/")) != NULL) qtc_line.qtchead_serial = atoi(tempstrp); qtc_line.qtchead_count = 0; if ((tempstrp = strtok(NULL, " ")) != NULL) qtc_line.qtchead_count = atoi(tempstrp); break; case QTCSCALL: strcpy(qtcscall, tempstr); strcpy(qtc_line.call, tempstr); break; case QTC: strcpy(qtc_line.qtcstr, tempstr); if ((tempstrp = strtok(qtc_line.qtcstr, " ")) != NULL) strcpy(qtc_line.qtc_time, tempstrp); if ((tempstrp = strtok(NULL, " ")) != NULL) { g_strchomp(tempstrp); strcpy(qtc_line.qtc_call, tempstrp); } qtc_line.qtc_serial = 0; if ((tempstrp = strtok(NULL, " ")) != NULL) { g_strchomp(tempstrp); qtc_line.qtc_serial = atoi(tempstrp); } case NO_ITEM: default: break; } } if ((linetype == LOGPREF_QSO) || (linetype == LOGPREF_XQSO)) { write_log_fm_cabr(); } else if (linetype == LOGPREF_QTC) { write_qtclog_fm_cabr(qtcrcall, qtc_line); } } void show_readcab_msg(int mode, char *msg) { if (mode == READCAB_MODE_CLI) { showmsg(msg); refreshp(); } } /** readcabrillo * * Main routine to read the cabrillo lines, parses them, and * creates a new Tlf compatible log. * */ int readcabrillo(int mode) { extern char *cabrillo; extern char call[]; char *cab_dfltfile; struct cabrillo_desc *cabdesc; char input_logfile[80]; char output_logfile[80], temp_logfile[80]; char logline[MAX_CABRILLO_LEN]; char tempstr[80]; char t_qsonrstr[5]; int t_qsonum; int t_bandinx; FILE *fp1, *fp2, *fpqtc; do_cabrillo = 1; if (cabrillo == NULL) { show_readcab_msg(mode, "Missing CABRILLO= keyword (see man page)"); sleep(2); do_cabrillo = 0; return (1); } /* Try to read cabrillo format first from local directory. * Try also in default data dir if not found. */ cabdesc = read_cabrillo_format("cabrillo.fmt", cabrillo); if (!cabdesc) { cab_dfltfile = g_strconcat(PACKAGE_DATA_DIR, G_DIR_SEPARATOR_S, "cabrillo.fmt", NULL); cabdesc = read_cabrillo_format(cab_dfltfile, cabrillo); g_free(cab_dfltfile); } if (!cabdesc) { show_readcab_msg(mode, "Cabrillo format specification not found!"); sleep(2); do_cabrillo = 0; return (2); } else { sprintf(tempstr, "CABRILLO format: %s", cabrillo); show_readcab_msg(mode, tempstr); sleep(1); } strcpy(input_logfile, call); g_strchomp(input_logfile); /* drop \n */ strcat(input_logfile, ".cbr"); strcpy(output_logfile, "IMPORT_"); strcat(output_logfile, logfile); strcpy(temp_logfile, logfile); strcpy(logfile, output_logfile); if ((fp2 = fopen(output_logfile, "w")) == NULL) { sprintf(tempstr, "Can't open output logfile: %s.", output_logfile); show_readcab_msg(mode, tempstr); sleep(2); do_cabrillo = 0; free_cabfmt(cabdesc); return (1); } fclose(fp2); if ((fp1 = fopen(input_logfile, "r")) == NULL) { sprintf(tempstr, "Can't open input logfile: %s.", input_logfile); show_readcab_msg(mode, tempstr); sleep(2); do_cabrillo = 0; free_cabfmt(cabdesc); return (1); } if (cabdesc->qtc_item_count > 0) { if (qtcdirection & SEND) { fpqtc = fopen(qtcsend_logfile_import, "w"); if (fpqtc) fclose(fpqtc); } if (qtcdirection & RECV) { fpqtc = fopen(qtcrecv_logfile_import, "w"); if (fpqtc) fclose(fpqtc); } } strcpy(t_qsonrstr, qsonrstr); t_qsonum = qsonum; t_bandinx = bandinx; while (fgets(logline, MAX_CABRILLO_LEN, fp1) != NULL) { cab_qso_to_tlf(logline, cabdesc); } strcpy(qsonrstr, t_qsonrstr); qsonum = t_qsonum; bandinx = t_bandinx; fclose(fp1); free_cabfmt(cabdesc); strcpy(logfile, temp_logfile); do_cabrillo = 0; return 0; } tlf-1.4.0/src/parse_logcfg.c0000644000175000017500000013300513562576621012627 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * 2011-2019 Thomas Beierlein * 2013 Fred DH5FS * 2013-2016 Ervin Hegedus - HA2OS * * 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 #include #include #include "bandmap.h" #include "cw_utils.h" #include "fldigixmlrpc.h" #include "getctydata.h" #include "getpx.h" #include "lancode.h" #include "locator2longlat.h" #include "parse_logcfg.h" #include "qtcvars.h" // Includes globalvars.h #include "setcontest.h" #include "startmsg.h" #include "tlf_curses.h" #include "searchlog.h" #include #include extern int cwkeyer; extern int digikeyer; extern int keyer_backspace; extern char tonestr[]; extern int partials; extern int use_part; extern int contest; extern int portnum; extern int packetinterface; extern int tncport; extern int shortqsonr; extern char *cabrillo; extern rmode_t digi_mode; int exist_in_country_list(); int continent_found(); void KeywordRepeated(char *keyword); void KeywordNotSupported(char *keyword); void ParameterNeeded(char *keyword); void WrongFormat(char *keyword); #define MAX_COMMANDS (sizeof(commands) / sizeof(*commands)) /* commands in list */ int read_logcfg(void) { extern int nodes; extern int node; extern char *config_file; char defltconf[80]; int status; int i; FILE *fp; contest = 0; partials = 0; use_part = 0; cwkeyer = NO_KEYER; digikeyer = NO_KEYER; portnum = 0; packetinterface = 0; tncport = 0; nodes = 0; node = 0; shortqsonr = 0; for (i = 0; i < 25; i++) { if (digi_message[i] != NULL) { free(digi_message[i]); digi_message[i] = NULL; } } if (cabrillo != NULL) { free(cabrillo); cabrillo = NULL; } strcpy(defltconf, PACKAGE_DATA_DIR); strcat(defltconf, "/logcfg.dat"); if (config_file == NULL) config_file = g_strdup("logcfg.dat"); if ((fp = fopen(config_file, "r")) == NULL) { if ((fp = fopen(defltconf, "r")) == NULL) { showmsg("Error opening logcfg.dat file."); showmsg("Exiting..."); sleep(5); endwin(); exit(1); } else { showstring("Using default (Read Only) config file:", defltconf); } } else showstring("Reading config file:", config_file); status = parse_configfile(fp); fclose(fp); return status; } static bool isCommentLine(char *buffer) { if ((buffer[0] != '#') && (buffer[0] != ';') && (strlen(buffer) > 1)) { return false; } else { return true; } } int parse_configfile(FILE *fp) { int status = PARSE_OK; char buffer[160]; while (fgets(buffer, sizeof(buffer), fp) != NULL) { /* skip comments and empty lines */ if (!isCommentLine(buffer)) { status |= parse_logcfg(buffer); } } return status; } /** convert band string into index number (0..NBANDS-1) */ int getidxbybandstr(char *confband) { static char bands_strings[NBANDS][4] = {"160", "80", "40", "30", "20", "17", "15", "12", "10"}; int i; g_strchomp(confband); for (i = 0; i < NBANDS; i++) { if (strcmp(confband, g_strchomp(bands_strings[i])) == 0) { return i; } } return -1; } static int confirmation_needed; #define PARAMETER_NEEDED(x) \ do { \ if (fields[1] == NULL) { \ ParameterNeeded(x); \ g_strfreev( fields ); \ return( confirmation_needed ); \ } \ } while(0) int parse_logcfg(char *inputbuffer) { extern int use_rxvt; extern char message[][80]; extern char ph_message[14][80]; extern char call[]; extern char whichcontest[]; extern char logfile[]; extern int recall_mult; extern int one_point; extern int two_point; extern int three_point; extern int exchange_serial; extern int country_mult; extern int wysiwyg_multi; extern int wysiwyg_once; extern float fixedmult; extern int portable_x2; extern int trx_control; extern int rit; extern int shortqsonr; extern int cluster; extern int clusterlog; extern int showscore_flag; extern int searchflg; extern int demode; extern int contest; extern int weight; extern int txdelay; extern char tonestr[]; extern int showfreq; extern int editor; extern int partials; extern int use_part; extern int mixedmode; extern char pr_hostaddress[]; extern int portnum; extern int packetinterface; extern int tncport; extern int tnc_serial_rate; extern char lastwwv[]; extern int serial_rate; extern rig_model_t myrig_model; extern char *rigportname; extern int rignumber; extern char rigconf[]; extern char exchange_list[40]; extern char tncportname[]; extern int netkeyer_port; extern char netkeyer_hostaddress[]; extern char bc_hostaddress[MAXNODES][16]; extern char bc_hostservice[MAXNODES][16]; extern int lan_active; extern char thisnode; extern int nodes; extern int node; extern int cqwwm2; extern int landebug; extern int call_update; extern int timeoffset; extern int time_master; extern int ctcomp; extern char multsfile[]; extern int multlist; extern int universal; extern int serial_section_mult; extern int serial_grid4_mult; extern int sectn_mult; extern int dx_arrlsections; extern int pfxmult; extern int exc_cont; extern int wpx; extern char markerfile[]; extern int xplanet; extern int nob4; extern int noautocq; extern int show_time; extern char keyer_device[10]; extern int wazmult; extern int itumult; extern int cqdelay; extern int trxmode; extern int use_bandoutput; extern int no_arrows; extern int bandindexarray[]; extern int ssbpoints; extern int cwpoints; extern int lowband_point_mult; extern int sc_sidetone; extern char sc_volume[]; extern char modem_mode[]; extern int no_rst; extern int serial_or_section; /* LZ3NY mods */ extern int mult_side; extern int my_country_points; extern int my_cont_points; extern int dx_cont_points; extern int countrylist_points; extern int countrylist_only; extern int continentlist_points; extern int continentlist_only; char c_temp[11]; extern int my_cont_points; extern int dx_cont_points; extern int mult_side; extern char countrylist[][6]; extern char continent_multiplier_list[7][3]; extern int exclude_multilist_type; /* end LZ3NY mods */ extern int tlfcolors[8][2]; extern char synclogfile[]; extern char sc_device[40]; extern char controllerport[80]; // port for multi-mode controller extern char clusterlogin[]; extern int cw_bandwidth; extern int change_rst; extern char rttyoutput[]; extern int logfrequency; extern int ignoredupe; extern char myqra[7]; extern int bandweight_points[NBANDS]; extern int bandweight_multis[NBANDS]; extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern int pfxmultab; extern int bmautoadd; extern int bmautograb; extern int sprint_mode; #ifdef HAVE_LIBXMLRPC extern char fldigi_url[50]; #endif extern unsigned char rigptt; extern int minitest; extern int unique_call_multi; extern int lan_port; extern int verbose; char *commands[] = { "enable", /* 0 */ /* deprecated */ "disable", /* deprecated */ "F1", "F2", "F3", "F4", /* 5 */ "F5", "F6", "F7", "F8", "F9", /* 10 */ "F10", "F11", "F12", "S&P_TU_MSG", "CQ_TU_MSG", /* 15 */ "CALL", "CONTEST", "LOGFILE", "KEYER_DEVICE", "BANDOUTPUT", /* 20 */ "RECALL_MULTS", "ONE_POINT", "THREE_POINTS", "WYSIWYG_MULTIBAND", "WYSIWYG_ONCE", /* 25 */ "RADIO_CONTROL", "RIT_CLEAR", "SHORT_SERIAL", "LONG_SERIAL", "CONTEST_MODE", /* 30 */ "CLUSTER", "BANDMAP", "SPOTLIST", /* deprecated */ "SCOREWINDOW", "CHECKWINDOW", /* 35 */ "FILTER", /* deprecated */ "SEND_DE", "CWSPEED", "CWTONE", "WEIGHT", /* 40 */ "TXDELAY", "SUNSPOTS", "SFI", "SHOW_FREQUENCY", "EDITOR", /* 45 */ "PARTIALS", "USEPARTIALS", "POWERMULT_5", /* deprecated */ "POWERMULT_2", /* deprecated */ "POWERMULT_1", /* 50 */ /* deprecated */ "MANY_CALLS", /* deprecated */ "SERIAL_EXCHANGE", "COUNTRY_MULT", "2EU3DX_POINTS", "PORTABLE_MULT_2", /* 55 */ "MIXED", "TELNETHOST", "TELNETPORT", "TNCPORT", "FIFO_INTERFACE", /* 60 */ "RIGMODEL", "RIGSPEED", "TNCSPEED", "RIGPORT", "NETKEYER", /* 65 */ "NETKEYERPORT", "NETKEYERHOST", "ADDNODE", "THISNODE", "CQWW_M2", /* 70 */ "LAN_DEBUG", "ALT_0", "ALT_1", "ALT_2", "ALT_3", /* 75 */ "ALT_4", "ALT_5", "ALT_6", "ALT_7", "ALT_8", /* 80 */ "ALT_9", "CALLUPDATE", "TIME_OFFSET", "TIME_MASTER", "CTCOMPATIBLE", /* 85 */ "TWO_POINTS", "MULT_LIST", "SERIAL+SECTION", "SECTION_MULT", "MARKERS", /* 90 */ "DX_&_SECTIONS", "MARKERDOTS", "MARKERCALLS", "NOB4", /*LZ3NY */ "COUNTRYLIST", //by lz3ny /* 95 */ "COUNTRY_LIST_POINTS", //by lz3ny "USE_COUNTRYLIST_ONLY", //by lz3ny "MY_COUNTRY_POINTS", //by lz3ny "MY_CONTINENT_POINTS", //by lz3ny "DX_POINTS", //by lz3ny /* 100 */ "SHOW_TIME", "RXVT", "VKM1", "VKM2", "VKM3", /* 105 */ "VKM4", "VKM5", "VKM6", "VKM7", "VKM8", /* 110 */ "VKM9", "VKM10", "VKM11", "VKM12", "VKSPM", /* 115 */ "VKCQM", "WAZMULT", "ITUMULT", "CQDELAY", "PFX_MULT", /* 120 */ "CONTINENT_EXCHANGE", "RULES", "NOAUTOCQ", "SSBMODE", "NO_BANDSWITCH_ARROWKEYS", /* 125 */ "RIGCONF", "TLFCOLOR1", "TLFCOLOR2", "TLFCOLOR3", "TLFCOLOR4", /* 130 */ "TLFCOLOR5", "TLFCOLOR6", "SYNCFILE", "SSBPOINTS", "CWPOINTS", /* 135 */ "SOUNDCARD", "SIDETONE_VOLUME", "S_METER", /* deprecated */ "SC_DEVICE", "MFJ1278_KEYER", /* 140 */ "CLUSTERLOGIN", "ORION_KEYER", "INITIAL_EXCHANGE", "CWBANDWIDTH", "LOWBAND_DOUBLE", /* 145 */ "CLUSTER_LOG", "SERIAL+GRID4", "CHANGE_RST", "GMFSK", "RTTYMODE", /* 150 */ "DIGIMODEM", "LOGFREQUENCY", "IGNOREDUPE", "CABRILLO", "CW_TU_MSG", /* 155 */ /* deprecated */ "VKCWR", /* deprecated */ "VKSPR", /* deprecated */ "NO_RST", "MYQRA", "POWERMULT", /* 160 */ "SERIAL_OR_SECTION", "QTC", "CONTINENTLIST", "CONTINENT_LIST_POINTS", "USE_CONTINENTLIST_ONLY", /* 165 */ "BANDWEIGHT_POINTS", "BANDWEIGHT_MULTIS", "PFX_NUM_MULTIS", "PFX_MULT_MULTIBAND", "QR_F1", /* 170 */ "QR_F2", "QR_F3", "QR_F4", "QR_F5", "QR_F6", /* 175 */ "QR_F7", "QR_F8", "QR_F9", "QR_F10", "QR_F11", /* 180 */ "QR_F12", "QS_F1", "QS_F2", "QS_F3", "QS_F4", "QS_F5", "QS_F6", "QS_F7", "QS_F8", "QS_F9", /* 190 */ "QS_F10", "QS_F11", "QS_F12", "QR_VKM1", "QR_VKM2", "QR_VKM3", "QR_VKM4", "QR_VKM5", "QR_VKM6", "QR_VKM7", /* 200 */ "QR_VKM8", "QR_VKM9", "QR_VKM10", "QR_VKM11", "QR_VKM12", "QR_VKSPM", "QR_VKCQM", "QS_VKM1", "QS_VKM2", "QS_VKM3", /* 210 */ "QS_VKM4", "QS_VKM5", "QS_VKM6", "QS_VKM7", "QS_VKM8", "QS_VKM9", "QS_VKM10", "QS_VKM11", "QS_VKM12", "QS_VKSPM", /* 220 */ "QS_VKCQM", "QTCREC_RECORD", "QTCREC_RECORD_COMMAND", "EXCLUDE_MULTILIST", "S&P_CALL_MSG", /* 225 */ "QTC_CAP_CALLS", "QTC_AUTO_FILLTIME", "BMAUTOGRAB", "BMAUTOADD", "QTC_RECV_LAZY", /* 230 */ "SPRINTMODE", "FLDIGI", "RIGPTT", "MINITEST", "UNIQUE_CALL_MULTI", /* 235 */ "KEYER_BACKSPACE", "DIGI_RIG_MODE", "DKF1", /* 238 */ "DKF2", "DKF3", "DKF4", "DKF5", "DKF6", "DKF7", "DKF8", "DKF9", "DKF10", "DKF11", "DKF12", "DKCQM", /* 250 */ "DKSPM", "DKSPC", "ALT_DK1", /* 253 */ "ALT_DK2", "ALT_DK3", "ALT_DK4", "ALT_DK5", "ALT_DK6", "ALT_DK7", "ALT_DK8", /* 260 */ "ALT_DK9", "ALT_DK10", "CALLMASTER", "LAN_PORT" /* 264 */ }; char **fields; char teststring[80]; char buff[40]; char outputbuff[80]; int ii; char *j; int jj, hh; char *tk_ptr; /* split the inputline at '=' to max 2 elements * * leave the components in fields[0] (keyword) and * fields[1] for the parameters * * if only 1 component (no '='), it is only a keyword * g_strstrip it and test for keywordlist * * if 2 components (there is a '=' in the line) * g_strstrip first component and test for keywordlist * g_strchug second component -> strip leading space from parameters * * That allows plain keywords and also keywords with parameters (which * follows a '=' sign */ confirmation_needed = PARSE_OK; fields = g_strsplit(inputbuffer, "=", 2); g_strstrip(fields[0]); if (*fields[0] == '\0') { /* only whitespace found? */ g_strfreev(fields); return (PARSE_OK); } if (g_strv_length(fields) == 2) { /* strip leading whitespace */ g_strchug(fields[1]); /* from parameters */ } g_strlcpy(teststring, fields[0], sizeof(teststring)); for (ii = 0; ii < MAX_COMMANDS; ii++) { if (strcmp(teststring, commands[ii]) == 0) { break; } } switch (ii) { case 0: { KeywordNotSupported(teststring); break; } case 1: { KeywordNotSupported(teststring); break; } case 2 ... 10: { /* messages */ PARAMETER_NEEDED(teststring); strcpy(message[ii - 2], fields[1]); break; } case 11 ... 13: { PARAMETER_NEEDED(teststring); strcpy(message[ii - 2], fields[1]); break; } case 14: { PARAMETER_NEEDED(teststring); strcpy(message[SP_TU_MSG], fields[1]); break; } case 15: { PARAMETER_NEEDED(teststring); strcpy(message[CQ_TU_MSG], fields[1]); break; /* end messages */ } case 16: { char *tmpcall; PARAMETER_NEEDED(teststring); if (strlen(fields[1]) > 20) { mvprintw(6, 0, "WARNING: Defined call sign too long! exiting...\n"); refreshp(); exit(1); } if (strlen(fields[1]) == 0) { mvprintw(6, 0, "WARNING: No callsign defined in logcfg.dat! exiting...\n"); refreshp(); exit(1); } /* strip NL and trailing whitespace, convert to upper case */ tmpcall = g_ascii_strup(g_strchomp(fields[1]), -1); g_strlcpy(call, tmpcall, 20); g_free(tmpcall); /* as other code parts rely on a trailing NL on the call * we add back such a NL for now */ strcat(call, "\n"); // check that call sign can be found in cty database !! break; } case 17: case 122: { PARAMETER_NEEDED(teststring); strcpy(whichcontest, g_strchomp(fields[1])); if (strlen(whichcontest) > 40) { showmsg ("WARNING: contest name is too long! exiting..."); exit(1); } setcontest(); break; } case 18: { PARAMETER_NEEDED(teststring); strcpy(logfile, g_strchomp(fields[1])); break; } case 19: { PARAMETER_NEEDED(teststring); g_strlcpy(keyer_device, g_strchomp(fields[1]), sizeof(keyer_device)); break; } case 20: { // Use the bandswitch output on parport0 /* \todo add message if parameter too short */ use_bandoutput = 1; if ((fields[1] != NULL) && (strlen(fields[1]) >= 10)) { for (jj = 0; jj <= 9; jj++) { // 10x hh = ((int)(fields[1][jj])) - 48; if (hh >= 0 && hh <= 9) bandindexarray[jj] = hh; else bandindexarray[jj] = 0; } } break; } case 21: { recall_mult = 1; break; } case 22: { one_point = 1; universal = 1; break; } case 23: { three_point = 1; universal = 1; break; } case 24: { wysiwyg_multi = 1; break; } case 25: { wysiwyg_once = 1; break; } case 26: { trx_control = 1; break; } case 27: { rit = 1; break; } case 28: { shortqsonr = 1; break; } case 29: { shortqsonr = 0; break; } case 30: { contest = 1; break; } case 31: { cluster = CLUSTER; break; } case 32: { cluster = MAP; /* init bandmap filtering */ bm_config.allband = 1; bm_config.allmode = 1; bm_config.showdupes = 1; bm_config.skipdupes = 0; bm_config.livetime = 900; bm_config.onlymults = 0; /* Allow configuration of bandmap display if keyword * is followed by a '=' * Parameter format is BANDMAP=, * - string parsed for the letters B, M, D and S * - spot livetime in seconds (>=30) */ if (fields[1] != NULL) { char **bm_fields; bm_fields = g_strsplit(fields[1], ",", 2); if (bm_fields[0] != NULL) { char *ptr = bm_fields[0]; while (*ptr != '\0') { switch (*ptr++) { case 'B': bm_config.allband = 0; break; case 'M': bm_config.allmode = 0; break; case 'D': bm_config.showdupes = 0; break; case 'S': bm_config.skipdupes = 1; break; case 'O': bm_config.onlymults = 1; break; default: break; } } } if (bm_fields[1] != NULL) { int livetime; g_strstrip(bm_fields[1]); livetime = atoi(bm_fields[1]); if (livetime >= 30) /* aging called each second */ bm_config.livetime = livetime; } g_strfreev(bm_fields); } break; } case 33: { KeywordNotSupported(teststring); break; } case 34: { showscore_flag = 1; break; } case 35: { searchflg = 1; break; } case 36: { KeywordNotSupported(teststring); break; } case 37: { demode = 1; break; } case 38: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncat(buff, fields[1], 2); SetCWSpeed(atoi(buff)); break; } case 39: { int tone; PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); tone = atoi(buff); if ((tone > -1) && (tone < 1000)) { sprintf(tonestr, "%d", tone); } break; } case 40: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); weight = atoi(buff); if (weight < -50) weight = -50; if (weight > 50) weight = 50; break; } case 41: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); txdelay = atoi(buff); if (txdelay > 50) txdelay = 50; if (txdelay < 0) txdelay = 0; break; } case 42: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); outputbuff[0] = '\0'; sprintf(outputbuff, "WWV R=%d\n", atoi(buff)); strcpy(lastwwv, outputbuff); break; } case 43: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); outputbuff[0] = '\0'; sprintf(outputbuff, "WWV SFI=%d\n", atoi(buff)); strcpy(lastwwv, outputbuff); break; } case 44: { showfreq = 1; break; } case 45: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if ((strncmp(buff, "mcedit", 6) == 0) || (strncmp(buff, "mc", 2) == 0) || (strncmp(buff, "MC", 2) == 0)) { editor = EDITOR_MC; break; } j = strstr(fields[1], "joe"); if (j != NULL) { editor = EDITOR_JOE; break; } j = strstr(fields[1], "vi"); if (j != NULL) { editor = EDITOR_VI; break; } else { editor = EDITOR_E3; break; } } case 46: { partials = 1; break; } case 47: { use_part = 1; break; } /*case 48:{ fixedmult = 5; break; } case 49:{ fixedmult = 2; break; } case 50:{ fixedmult = 1; break; } */ case 51: { KeywordNotSupported(teststring); break; } case 52: { exchange_serial = 1; break; } case 53: { country_mult = 1; break; } case 54: { KeywordNotSupported(teststring); break; } case 55: { portable_x2 = 1; break; } case 56: { mixedmode = 1; break; } case 57: { PARAMETER_NEEDED(teststring); g_strlcpy(pr_hostaddress, g_strchomp(fields[1]), 48); break; } case 58: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncat(buff, fields[1], 5); portnum = atoi(buff); packetinterface = TELNET_INTERFACE; break; } case 59: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if (strlen(buff) > 2) { strncpy(tncportname, buff, 39); } else tncport = atoi(buff) + 1; packetinterface = TNC_INTERFACE; break; } case 60: { packetinterface = FIFO_INTERFACE; break; } case 61: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if (strncmp(buff, "ORION", 5) == 0) rignumber = 2000; else rignumber = atoi(buff); myrig_model = (rig_model_t) rignumber; break; } case 62: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); serial_rate = atoi(buff); break; } case 63: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); tnc_serial_rate = atoi(buff); break; } case 64: { PARAMETER_NEEDED(teststring); rigportname = strdup(fields[1]); break; } case 65: { cwkeyer = NET_KEYER; break; } case 66: { PARAMETER_NEEDED(teststring); netkeyer_port = atoi(fields[1]); break; } case 67: { PARAMETER_NEEDED(teststring); g_strlcpy(netkeyer_hostaddress, g_strchomp(fields[1]), 16); break; } case 68: { PARAMETER_NEEDED(teststring); if (node < MAXNODES) { /* split host name and port number, separated by colon */ char **an_fields; an_fields = g_strsplit(fields[1], ":", 2); /* copy host name */ g_strlcpy(bc_hostaddress[node], g_strchomp(an_fields[0]), sizeof(bc_hostaddress[0])); if (an_fields[1] != NULL) { /* copy host port, if found */ g_strlcpy(bc_hostservice[node], g_strchomp(an_fields[1]), sizeof(bc_hostservice[0])); } g_strfreev(an_fields); if (node++ < MAXNODES) nodes++; } lan_active = 1; break; } case 69: { char c; PARAMETER_NEEDED(teststring); c = toupper(fields[1][0]); if (c >= 'A' && c <= 'H') thisnode = c; else WrongFormat(teststring); break; } case 70: { cqwwm2 = 1; break; } case 71: { landebug = 1; break; } case 72 ... 81: { /* messages */ PARAMETER_NEEDED(teststring); strcpy(message[ii - 58], fields[1]); break; } case 82: { call_update = 1; break; } case 83: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncat(buff, fields[1], 3); timeoffset = atoi(buff); if (timeoffset > 23) timeoffset = 23; if (timeoffset < -23) timeoffset = -23; break; } case 84: { time_master = 1; break; } case 85: { ctcomp = 1; break; } case 86: { two_point = 1; universal = 1; break; } case 87: { PARAMETER_NEEDED(teststring); g_strlcpy(multsfile, g_strchomp(fields[1]), 80); multlist = 1; universal = 1; break; } case 88: { serial_section_mult = 1; break; } case 89: { sectn_mult = 1; break; } case 90: { PARAMETER_NEEDED(teststring); strcpy(markerfile, g_strchomp(fields[1])); xplanet = 1; break; } case 91: { dx_arrlsections = 1; setcontest(); break; } case 92: { PARAMETER_NEEDED(teststring); strcpy(markerfile, g_strchomp(fields[1])); xplanet = 2; break; } case 93: { PARAMETER_NEEDED(teststring); strcpy(markerfile, g_strchomp(fields[1])); xplanet = 3; break; } case 94: { nob4 = 1; break; } case 95: { /* COUNTRYLIST (in file or listed in logcfg.dat) LZ3NY */ int counter = 0; static char country_list_raw[50] = ""; /* use only first COUNTRY_LIST definition */ char temp_buffer[255] = ""; char buffer[255] = ""; FILE *fp; PARAMETER_NEEDED(teststring); if (strlen(country_list_raw) == 0) {/* only if first definition */ /* First of all we are checking if the parameter in COUNTRY_LIST= is a file name. If it is we start parsing the file. If we find a line starting with our case insensitive contest name, we copy the countries from that line into country_list_raw. If the input was not a file name we directly copy it into country_list_raw (must not have a preceeding contest name). */ g_strlcpy(temp_buffer, fields[1], sizeof(temp_buffer)); g_strchomp(temp_buffer); /* drop trailing whitespace */ if ((fp = fopen(temp_buffer, "r")) != NULL) { while (fgets(buffer, sizeof(buffer), fp) != NULL) { g_strchomp(buffer); /* no trailing whitespace*/ /* accept only a line starting with the contest name * (CONTEST=) followed by ':' */ if (strncasecmp(buffer, whichcontest, strlen(whichcontest) - 1) == 0) { strncpy(country_list_raw, buffer + strlen(whichcontest) + 1, strlen(buffer) - 1); } } fclose(fp); } else { /* not a file */ if (strlen(temp_buffer) > 0) strcpy(country_list_raw, temp_buffer); } } /* parse the country_list_raw string into an array * (countrylist) for future use. */ tk_ptr = strtok(country_list_raw, ":,.- \t"); counter = 0; if (tk_ptr != NULL) { while (tk_ptr) { strcpy(countrylist[counter], tk_ptr); tk_ptr = strtok(NULL, ":,.-_\t "); counter++; } } /* on which multiplier side of the rules we are */ getpx(call); mult_side = exist_in_country_list(); setcontest(); break; } case 96: { // COUNTRY_LIST_POINTS PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (countrylist_points == -1) countrylist_points = atoi(c_temp); break; } case 97: { // COUNTRY_LIST_ONLY countrylist_only = 1; if (mult_side == 1) countrylist_only = 0; break; } case 98: { //HOW Many points scores my country lz3ny PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (my_country_points == -1) my_country_points = atoi(c_temp); break; } case 99: { //MY_CONTINENT_POINTS lz3ny PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (my_cont_points == -1) my_cont_points = atoi(c_temp); break; } case 100: { //DX_CONTINENT_POINTS lz3ny PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (dx_cont_points == -1) dx_cont_points = atoi(c_temp); break; } /* end LZ3NY mod */ case 101: { // show time in searchlog window show_time = 1; break; } case 102: { // use rxvt colours use_rxvt = 1; break; } case 103 ... 116: { // get phone messages PARAMETER_NEEDED(teststring); g_strlcpy(ph_message[ii - 103], g_strchomp(fields[1]), 71); if (verbose) { gchar *tmp; tmp = g_strdup_printf(" Phone message #%d is %s", ii - 103, ph_message[ii - 103]); // (W9WI) showmsg(tmp); g_free(tmp); } break; } case 117: { // WAZ Zone is a Multiplier wazmult = 1; break; } case 118: { // ITU Zone is a Multiplier itumult = 1; break; } case 119: { // CQ Delay (0.5 sec) PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncpy(buff, fields[1], 3); cqdelay = atoi(buff); if ((cqdelay < 3) || (cqdelay > 60)) cqdelay = 20; break; } case 120: { // wpx style prefixes mult pfxmult = 1; // enable set points wpx = 1; // handle like wpx break; } case 121: { // exchange continent abbrev exc_cont = 1; break; } case 123: { // don't use auto_cq noautocq = 1; break; } case 124: { // start in SSB mode trxmode = SSBMODE; break; } case 125: { // arrow keys don't switch bands... no_arrows = 1; break; } case 126: { // Hamlib rig conf parameters PARAMETER_NEEDED(teststring); if (strlen(fields[1]) >= 80) { showmsg ("WARNING: rigconf parameters too long! exiting..."); sleep(5); exit(1); } g_strlcpy(rigconf, g_strchomp(fields[1]), 80); // RIGCONF= break; } case 127: { // define color GREEN (header) PARAMETER_NEEDED(teststring); if (strlen(fields[1]) >= 2 && isdigit(fields[1][0]) && isdigit(fields[1][1])) { tlfcolors[1][0] = fields[1][0] - 48; tlfcolors[1][1] = fields[1][1] - 48; } else { WrongFormat(teststring); } break; } case 128 ... 132: { // define color CYAN (windows), WHITE (log win) // MAGENTA (Marker / dupes), BLUE (input field) // and YELLOW (Window frames) PARAMETER_NEEDED(teststring); if (strlen(fields[1]) >= 2 && isdigit(fields[1][0]) && isdigit(fields[1][1])) { tlfcolors[ii - 128 + 3][0] = fields[1][0] - 48; tlfcolors[ii - 128 + 3][1] = fields[1][1] - 48; } else { WrongFormat(teststring); } break; } case 133: { // define name of synclogfile PARAMETER_NEEDED(teststring); strcpy(synclogfile, g_strchomp(fields[1])); break; } case 134: { //SSBPOINTS= PARAMETER_NEEDED(teststring); strcpy(buff, fields[1]); ssbpoints = atoi(buff); break; } case 135: { //CWPOINTS= PARAMETER_NEEDED(teststring); strcpy(buff, fields[1]); cwpoints = atoi(buff); break; } case 136: { // SOUNDCARD, use soundcard for cw sidetone sc_sidetone = 1; break; } case 137: { // sound card volume (default = 70) int volume; PARAMETER_NEEDED(teststring); volume = atoi(fields[1]); if (volume > -1 && volume < 101) sprintf(sc_volume, "%d", volume); else strcpy(sc_volume, "70"); break; } case 139: { PARAMETER_NEEDED(teststring); g_strlcpy(sc_device, g_strchomp(fields[1]), sizeof(sc_device)); break; } case 140: { PARAMETER_NEEDED(teststring); cwkeyer = MFJ1278_KEYER; digikeyer = MFJ1278_KEYER; g_strlcpy(controllerport, g_strchomp(fields[1]), sizeof(controllerport)); break; } case 141: { PARAMETER_NEEDED(teststring); strcpy(clusterlogin, fields[1]); break; } case 142: { KeywordNotSupported(teststring); break; } case 143: { PARAMETER_NEEDED(teststring); g_strlcpy(exchange_list, g_strchomp(fields[1]), sizeof(exchange_list)); break; } case 144: { PARAMETER_NEEDED(teststring); cw_bandwidth = atoi(fields[1]); break; } case 145: { lowband_point_mult = 1; break; } case 146: { clusterlog = 1; break; } case 147: { serial_grid4_mult = 1; break; } case 148: { change_rst = 1; break; } case 149: { PARAMETER_NEEDED(teststring); digikeyer = GMFSK; g_strlcpy(controllerport, g_strchomp(fields[1]), sizeof(controllerport)); break; } case 150: { // start in digital mode trxmode = DIGIMODE; strcpy(modem_mode, "RTTY"); break; } case 151: { PARAMETER_NEEDED(teststring); g_strlcpy(rttyoutput, g_strchomp(fields[1]), 111); break; } case 152: { logfrequency = 1; break; } case 153: { ignoredupe = 1; break; } case 154: { /* read name of cabrillo format to use */ if (cabrillo != NULL) { free(cabrillo); /* free old string if already set */ cabrillo = NULL; } cabrillo = strdup(g_strchomp(fields[1])); break; } case 155: case 156: case 157: { KeywordNotSupported(teststring); break; } case 158: { no_rst = 1; break; } case 159: { PARAMETER_NEEDED(teststring); strcpy(myqra, fields[1]); if (check_qra(myqra) == 0) { showmsg ("WARNING: Invalid MYQRA parameters! exiting..."); sleep(5); exit(1); } break; } case 160: { PARAMETER_NEEDED(teststring); if (fixedmult == 0.0 && atof(fields[1]) > 0.0) { fixedmult = atof(fields[1]); } break; } case 161: { serial_or_section = 1; break; } case 162: { PARAMETER_NEEDED(teststring); g_strchomp(fields[1]); if (strncmp(fields[1], "RECV", 4) == 0) { qtcdirection = RECV; } if (strncmp(fields[1], "SEND", 4) == 0) { qtcdirection = SEND; } else if (strcmp(fields[1], "BOTH") == 0) { qtcdirection = RECV | SEND; } if (qtcdirection == 0) { KeywordNotSupported(teststring); } else { int q; for (q = 0; q < QTC_RY_LINE_NR; q++) { qtc_ry_lines[q].content[0] = '\0'; qtc_ry_lines[q].attr = 0; } } break; } case 163: { /* based on LZ3NY code, by HA2OS CONTINENT_LIST (in file or listed in logcfg.dat), First of all we are checking if inserted data in CONTINENT_LIST= is a file name. If it is we start parsing the file. If we got our case insensitive contest name, we copy the multipliers from it into multipliers_list. If the input was not a file name we directly copy it into cont_multiplier_list (must not have a preceeding contest name). The last step is to parse the multipliers_list into an array (continent_multiplier_list) for future use. */ int counter = 0; static char cont_multiplier_list[50] = ""; /* use only first CONTINENT_LIST definition */ char temp_buffer[255] = ""; char buffer[255] = ""; FILE *fp; PARAMETER_NEEDED(teststring); if (strlen(cont_multiplier_list) == 0) { /* if first definition */ g_strlcpy(temp_buffer, fields[1], sizeof(temp_buffer)); g_strchomp(temp_buffer); /* drop trailing whitespace */ if ((fp = fopen(temp_buffer, "r")) != NULL) { while (fgets(buffer, sizeof(buffer), fp) != NULL) { g_strchomp(buffer); /* no trailing whitespace*/ /* accept only a line starting with the contest name * (CONTEST=) followed by ':' */ if (strncasecmp(buffer, whichcontest, strlen(whichcontest) - 1) == 0) { strncpy(cont_multiplier_list, buffer + strlen(whichcontest) + 1, strlen(buffer) - 1); } } fclose(fp); } else { /* not a file */ if (strlen(temp_buffer) > 0) strcpy(cont_multiplier_list, temp_buffer); } } /* creating the array */ tk_ptr = strtok(cont_multiplier_list, ":,.- \t"); counter = 0; if (tk_ptr != NULL) { while (tk_ptr) { strncpy(continent_multiplier_list[counter], tk_ptr, 2); tk_ptr = strtok(NULL, ":,.-_\t "); counter++; } } setcontest(); break; } case 164: { // CONTINENT_LIST_POINTS PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (continentlist_points == -1) { continentlist_points = atoi(c_temp); } break; } case 165: { // CONTINENT_LIST_ONLY continentlist_only = 1; break; } case 166: { // BANDWEIGHT_POINTS PARAMETER_NEEDED(teststring); static char bwp_params_list[50] = ""; int bandindex = -1; if (strlen(bwp_params_list) == 0) { g_strlcpy(bwp_params_list, fields[1], sizeof(bwp_params_list)); g_strchomp(bwp_params_list); } tk_ptr = strtok(bwp_params_list, ";:,"); if (tk_ptr != NULL) { while (tk_ptr) { bandindex = getidxbybandstr(g_strchomp(tk_ptr)); tk_ptr = strtok(NULL, ";:,"); if (tk_ptr != NULL && bandindex >= 0) { bandweight_points[bandindex] = atoi(tk_ptr); } tk_ptr = strtok(NULL, ";:,"); } } break; } case 167: { // BANDWEIGHT_MULTIS PARAMETER_NEEDED(teststring); static char bwm_params_list[50] = ""; int bandindex = -1; if (strlen(bwm_params_list) == 0) { g_strlcpy(bwm_params_list, fields[1], sizeof(bwm_params_list)); g_strchomp(bwm_params_list); } tk_ptr = strtok(bwm_params_list, ";:,"); if (tk_ptr != NULL) { while (tk_ptr) { bandindex = getidxbybandstr(g_strchomp(tk_ptr)); tk_ptr = strtok(NULL, ";:,"); if (tk_ptr != NULL && bandindex >= 0) { bandweight_multis[bandindex] = atoi(tk_ptr); } tk_ptr = strtok(NULL, ";:,"); } } break; } case 168: { /* based on LZ3NY code, by HA2OS PFX_NUM_MULTIS (in file or listed in logcfg.dat), We directly copy it into pfxnummulti_str, then parse the prefixlist and fill the pfxnummulti array. */ int counter = 0; int pfxnum; static char pfxnummulti_str[50] = ""; char parsepfx[15] = ""; PARAMETER_NEEDED(teststring); g_strlcpy(pfxnummulti_str, fields[1], sizeof(pfxnummulti_str)); g_strchomp(pfxnummulti_str); /* creating the array */ tk_ptr = strtok(pfxnummulti_str, ","); counter = 0; if (tk_ptr != NULL) { while (tk_ptr) { parsepfx[0] = '\0'; if (isdigit(tk_ptr[strlen(tk_ptr) - 1])) { sprintf(parsepfx, "%sAA", tk_ptr); } else { sprintf(parsepfx, "%s0AA", tk_ptr); } pfxnummulti[counter].countrynr = getctydata(parsepfx); for (pfxnum = 0; pfxnum < 10; pfxnum++) { pfxnummulti[counter].qsos[pfxnum] = 0; } tk_ptr = strtok(NULL, ","); counter++; } } pfxnummultinr = counter; setcontest(); break; } case 169: { /* wpx style prefixes mult */ pfxmultab = 1; /* enable pfx on all band */ break; } case 170 ... 181: { PARAMETER_NEEDED(teststring); strcpy(qtc_recv_msgs[ii - 170], fields[1]); break; } case 182 ... 193: { PARAMETER_NEEDED(teststring); strcpy(qtc_send_msgs[ii - 182], fields[1]); break; } case 194 ... 207: { // get QTC recv phone messages PARAMETER_NEEDED(teststring); g_strlcpy(qtc_phrecv_message[ii - 194], g_strchomp(fields[1]), 71); if (verbose) { gchar *tmp; tmp = g_strdup_printf(" QTC RECV phone message #%d is %s", ii - 194, qtc_phrecv_message[ii - 194]); showmsg(tmp); g_free(tmp); } break; } case 208 ... 221: { // get QTC send phone messages PARAMETER_NEEDED(teststring); g_strlcpy(qtc_phsend_message[ii - 208], g_strchomp(fields[1]), 71); if (verbose) { gchar *tmp; tmp = g_strdup_printf(" QTC SEND phone message #%d is %s", ii - 208, qtc_phrecv_message[ii - 208]); showmsg(tmp); g_free(tmp); } break; } case 222: { qtcrec_record = 1; break; } case 223: { PARAMETER_NEEDED(teststring); int p, q = 0, i = 0, s = 0; for (p = 0; p < strlen(fields[1]); p++) { if (p > 0 && fields[1][p] == ' ') { s = 1; qtcrec_record_command_shutdown[p] = '\0'; } if (s == 0) { qtcrec_record_command_shutdown[p] = fields[1][p]; } if (fields[1][p] == '$') { qtcrec_record_command[i][q] = '\0'; i = 1; p++; q = 0; } if (fields[1][p] != '\n') { qtcrec_record_command[i][q] = fields[1][p]; } q++; qtcrec_record_command[i][q] = ' '; } if (qtcrec_record_command[i][q - 1] != '&') { qtcrec_record_command[i][q++] = ' '; qtcrec_record_command[i][q++] = '&'; } qtcrec_record_command[i][q] = '\0'; break; } case 224: { PARAMETER_NEEDED(teststring); if (strcmp(g_strchomp(fields[1]), "CONTINENTLIST") == 0) { if (strlen(continent_multiplier_list[0]) == 0) { showmsg ("WARNING: you need to set the CONTINENTLIST parameter..."); sleep(5); exit(1); } exclude_multilist_type = 1; } else if (strcmp(g_strchomp(fields[1]), "COUNTRYLIST") == 0) { if (strlen(countrylist[0]) == 0) { showmsg ("WARNING: you need to set the COUNTRYLIST parameter..."); sleep(5); exit(1); } exclude_multilist_type = 2; } else { showmsg ("WARNING: choose one of these for EXCLUDE_MULTILIST: CONTINENTLIST, COUNTRYLIST"); sleep(5); exit(1); } break; } case 225: { PARAMETER_NEEDED(teststring); strcpy(message[SP_CALL_MSG], fields[1]); break; /* end messages */ } case 226: { PARAMETER_NEEDED(teststring); g_strlcpy(qtc_cap_calls, g_strchomp(fields[1]), sizeof(exchange_list)); break; } case 227: { qtc_auto_filltime = 1; break; } case 228: { bmautograb = 1; break; } case 229: { bmautoadd = 1; break; } case 230: { qtc_recv_lazy = 1; break; } case 231: { sprint_mode = 1; break; } case 232: { #ifndef HAVE_LIBXMLRPC showmsg("WARNING: XMLRPC not compiled - skipping setup."); sleep(2); digikeyer = NO_KEYER; #else if (fields[1] != NULL) { g_strlcpy(fldigi_url, g_strchomp(fields[1]), sizeof(fldigi_url)); } digikeyer = FLDIGI; if (!fldigi_isenabled()) fldigi_toggle(); #endif break; } case 233: { rigptt |= (1 << 0); /* bit 0 set--CAT PTT wanted (RIGPTT) */ break; } case 234: { if (fields[1] != NULL) { int minisec; minisec = atoi(g_strchomp(fields[1])); if ((3600 % minisec) != 0) { showmsg ("WARNING: invalid MINITEST value, must be an integral divider for 3600s!"); sleep(5); exit(1); } else { minitest = minisec; } } else { minitest = MINITEST_DEFAULT_PERIOD; } break; } case 235: { PARAMETER_NEEDED(teststring); if (strcmp(g_strchomp(fields[1]), "ALL") == 0) { unique_call_multi = UNIQUECALL_ALL; } else if (strcmp(g_strchomp(fields[1]), "BAND") == 0) { unique_call_multi = UNIQUECALL_BAND; } else { showmsg ("WARNING: choose one of these for UNIQUE_CALL_MULTI: ALL, BAND"); sleep(5); exit(1); } break; } case 236: { // KEYER_BACKSPACE keyer_backspace = 1; break; } case 237: { PARAMETER_NEEDED(teststring); g_strchomp(fields[1]); if (strcmp(fields[1], "USB") == 0) digi_mode = RIG_MODE_USB; else if (strcmp(fields[1], "LSB") == 0) digi_mode = RIG_MODE_LSB; else if (strcmp(fields[1], "RTTY") == 0) digi_mode = RIG_MODE_RTTY; else if (strcmp(fields[1], "RTTYR") == 0) digi_mode = RIG_MODE_RTTYR; else { showmsg ("WARNING: invalid DIGI_RIG_MODE value, must be \"USB\", \"LSB\", \"RTTY\", or \"RTTYR\""); sleep(5); exit(1); } break; } case 238 ... 249: { PARAMETER_NEEDED(teststring); if (digi_message[ii - 238]) { KeywordRepeated(commands[ii]); free(digi_message[ii - 238]); } digi_message[ii - 238] = strdup(fields[1]); if (digi_message[ii - 238]) { /* Replace trailing newline with a space */ char *nl = strrchr(digi_message[ii - 238], '\n'); if (nl) *nl = ' '; } break; } case 250: PARAMETER_NEEDED(teststring); if (digi_message[CQ_TU_MSG]) { KeywordRepeated(commands[ii]); free(digi_message[CQ_TU_MSG]); } digi_message[CQ_TU_MSG] = strdup(fields[1]); if (digi_message[CQ_TU_MSG]) { /* Replace trailing newline with a space */ char *nl = strrchr(digi_message[CQ_TU_MSG], '\n'); if (nl) *nl = ' '; } break; case 251: PARAMETER_NEEDED(teststring); if (digi_message[SP_TU_MSG]) { KeywordRepeated(commands[ii]); free(digi_message[SP_TU_MSG]); } digi_message[SP_TU_MSG] = strdup(fields[1]); if (digi_message[SP_TU_MSG]) { /* Replace trailing newline with a space */ char *nl = strrchr(digi_message[SP_TU_MSG], '\n'); if (nl) *nl = ' '; } break; case 252: PARAMETER_NEEDED(teststring); if (digi_message[SP_CALL_MSG]) { KeywordRepeated(commands[ii]); free(digi_message[SP_CALL_MSG]); } digi_message[SP_CALL_MSG] = strdup(fields[1]); if (digi_message[SP_CALL_MSG]) { /* Replace trailing newline with a space */ char *nl = strrchr(digi_message[SP_CALL_MSG], '\n'); if (nl) *nl = ' '; } break; case 253 ... 262: { PARAMETER_NEEDED(teststring); if (digi_message[ii - 239]) { KeywordRepeated(commands[ii]); free(digi_message[ii - 239]); } digi_message[ii - 239] = strdup(fields[1]); if (digi_message[ii - 239]) { /* Replace trailing newline with a space */ char *nl = strrchr(digi_message[ii - 239], '\n'); if (nl) *nl = ' '; } break; } case 263: { PARAMETER_NEEDED(teststring); g_strchomp(fields[1]); if (callmaster_filename != NULL) { g_free(callmaster_filename); } callmaster_filename = g_strdup(fields[1]); break; } case 264: { PARAMETER_NEEDED(teststring); lan_port = atoi(fields[1]); break; } default: { KeywordNotSupported(g_strstrip(inputbuffer)); break; } } g_strfreev(fields); return (confirmation_needed); } /** Complain about problems in configuration * * Complains in standout mode about some problem. Beep and wait for * 2 seconds * * \param msg The reason for the problem to be shown */ void Complain(char *msg) { attron(A_STANDOUT); showmsg(msg); attroff(A_STANDOUT); confirmation_needed = PARSE_CONFIRM; beep(); } /** Complain about duplicate keyword */ void KeywordRepeated(char *keyword) { char msgbuffer[100]; sprintf(msgbuffer, "Keyword '%s' repeated more than once.\n", keyword); Complain(msgbuffer); } /** Complain about not supported keyword */ void KeywordNotSupported(char *keyword) { char msgbuffer[100]; sprintf(msgbuffer, "Keyword '%s' not supported. See man page.\n", keyword); Complain(msgbuffer); } /** Complain about missing parameter */ void ParameterNeeded(char *keyword) { char msgbuffer[100]; sprintf(msgbuffer, "Keyword '%s' must be followed by an parameter ('=....'). See man page.\n", keyword); Complain(msgbuffer); } /** Complain about wrong parameter format */ void WrongFormat(char *keyword) { char msgbuffer[100]; sprintf(msgbuffer, "Wrong parameter format for keyword '%s'. See man page.\n", keyword); Complain(msgbuffer); } tlf-1.4.0/src/printcall.c0000644000175000017500000000365213562576621012170 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * printcall * *--------------------------------------------------------------*/ #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" void printcall(void) { extern char hiscall[]; extern int miniterm; extern int cqmode; extern int cwstart; int currentterm; attr_t attrib = modify_attr(A_STANDOUT); currentterm = miniterm; miniterm = 0; attron(COLOR_PAIR(C_INPUT) | attrib); mvprintw(12, 29, " "); mvprintw(12, 29, hiscall); if ((cqmode == CQ) && (cwstart > 0)) mvchgat(12, 29 + cwstart, 12 - cwstart, attrib | A_UNDERLINE, C_INPUT, NULL); refreshp(); miniterm = currentterm; } /** highlight the first n characters of the call input field * * \param n number of characters to highlight */ void highlightCall(unsigned int n) { attr_t attrib = modify_attr(A_NORMAL); /* use NORMAL here as normal display uses STANDOUT */ mvchgat(12, 29, n, attrib, C_INPUT, NULL); } tlf-1.4.0/src/getexchange.c0000644000175000017500000006140313562576621012460 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004-2005 Rein Couperus * 2011-2012 Thomas Beierlein * 2013-2014 Ervin Hegedus - HA2OS * * 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 */ /* ------------------------------------------------------------ * Getexchange handles the comment field * *--------------------------------------------------------------*/ #include #include #include #include "addspot.h" #include "cw_utils.h" #include "keyer.h" #include "lancode.h" #include "locator2longlat.h" #include "logit.h" #include "qtcvars.h" // Includes globalvars.h #include "qtcwin.h" #include "recall_exchange.h" #include "rtty.h" #include "score.h" #include "searchlog.h" // Includes glib.h #include "sendbuf.h" #include "speedupndown.h" #include "stoptx.h" #include "time_update.h" #include "tlf_curses.h" #include "ui_utils.h" #include "addmult.h" #include "getexchange.h" #define LEN(array) (sizeof(array) / sizeof(array[0])) int play_file(char *audiofile); int getlastpattern(char *checkstring); void exchange_edit(void); int getexchange(void) { extern int contest; extern char comment[]; extern char cqzone[]; extern char ituzone[]; extern char my_rst[]; extern int change_rst; extern char ph_message[14][80]; extern char hiscall[]; extern char qsonrstr[]; extern int cqww; extern int wpx; extern int pacc_pa_flg; extern int stewperry_flg; extern int arrldx_usa; extern int arrl_fd; extern int exchange_serial; extern int countrynr; extern int mycountrynr; extern int sprint; extern int trxmode; extern int recall_mult; extern int arrlss; extern int lan_active; extern char lastqsonr[]; extern char qsonrstr[]; extern char call[]; extern char section[]; extern int serial_section_mult; extern int serial_grid4_mult; extern int sectn_mult; extern int dx_arrlsections; extern int ctcomp; extern int wazmult; extern int itumult; extern int pfxmult; extern int exc_cont; extern char continent[]; extern int commentfield; extern int no_rst; extern int serial_or_section; extern int ve_cty; extern int w_cty; int i; int x = 0; char instring[2]; char commentbuf[40] = ""; char *gridmult = ""; instring[1] = '\0'; if ((lan_active == 1) && (exchange_serial == 1)) { strncpy(lastqsonr, qsonrstr, 5); send_lan_message(INCQSONUM, qsonrstr); } if (recall_mult == 1) recall_exchange(); if ((arrldx_usa == 1) && (trxmode != CWMODE)) recall_exchange(); if (arrl_fd == 1) recall_exchange(); if (((cqww == 1) || (wazmult == 1) || (itumult == 1)) && (*comment == '\0') && (strlen(hiscall) != 0)) { if (itumult == 1) strcpy(comment, ituzone); else strcpy(comment, cqzone); } if ((exc_cont == 1) && (*comment == '\0') && (strlen(hiscall) != 0)) { strcpy(comment, continent); } if (stewperry_flg == 1) { recall_exchange(); } /* parse input and modify exchange field accordingly */ commentfield = 1; i = strlen(comment); while (1) { refresh_comment(); /* wait for next char pressed, but update time, cluster and TRX qrg */ /* main loop waiting for input */ x = -1; while (x < 1) { usleep(10000); time_update(); if (trxmode == DIGIMODE) { show_rtty(); } /* make sure that the wrefresh() inside getch() shows the cursor * in the input field */ wmove(stdscr, 12, 54 + strlen(comment)); x = key_poll(); } switch (x) { case 17: { // Ctl-q (^Q)--Open QTC panel for receiving or sending QTCs if (qtcdirection == 1 || qtcdirection == 3) { // in case of QTC=RECV or QTC=BOTH qtc_main_panel(RECV); } if (qtcdirection == 2) { // in case of QTC=SEND qtc_main_panel(SEND); } x = KEY_LEFT; continue; } case 19: { // Ctl+s (^S)--Open QTC panel for sending QTCs if (qtcdirection == 2 || qtcdirection == 3) { // in case of QTC=SEND ot QTC=BOTH qtc_main_panel(SEND); } x = KEY_LEFT; continue; } case 1: { // Ctl-a (^A) addspot(); *comment = '\0'; x = 9; // break; } case KEY_BACKSPACE: { // Erase (^H or ) if (i >= 1) { comment[strlen(comment) - 1] = '\0'; i -= 1; } break; } case 27: { // stoptx(); /* stop sending CW */ if (comment[0] != '\0') { /* if comment not empty */ /* drop exchange so far */ comment[0] = '\0'; i = 0; } else { /* back to callinput */ x = 9; // } break; } case 160: { // For CT compatibility Meta- (M- ) if (ctcomp != 0) { send_standard_message(1); // F2 } break; } case '+': { // for CT compatibility if ((ctcomp != 0) && (strlen(hiscall) > 2)) { send_standard_message(2); /* F3 */ x = 92; // '\' } break; } case KEY_F(1): { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(call); /* F1 */ } else play_file(ph_message[5]); // call break; } case KEY_F(2) ... KEY_F(11): { /* F2...F11 - F1 = 1...10 */ send_standard_message(x - KEY_F(1)); break; } // case KEY_F(11): // { // send_standard_message(10); /* F11 */ // break; // } case 176 ... 185: { /* Alt-0 to Alt-9 */ send_standard_message(x - 162); /* Messages 15-24 */ break; } /* --edit exchange field, position cursor to left end of field. * Fall through to KEY_LEFT stanza if ungetch() is successful. */ case KEY_HOME: { if (ungetch(x) != OK) break; } case KEY_LEFT: { /* Left Arrow--edit exchange field */ if (*comment != '\0') exchange_edit(); break; } case KEY_PPAGE: { /* Page-Up--change MY RST */ if (change_rst == 1) { if (my_rst[1] <= 56) { my_rst[1]++; if (!no_rst) mvprintw(12, 49, my_rst); } } else { /* speed up */ speedup(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2u", GetCWSpeed()); } break; } case KEY_NPAGE: { /* Page-Down--change MY RST */ if (change_rst == 1) { if (my_rst[1] > 49) { my_rst[1]--; if (!no_rst) mvprintw(12, 49, my_rst); } } else { /* speed down */ speeddown(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2u", GetCWSpeed()); } break; } case ',': // Keyboard Morse case 11: { // Ctrl-K mvprintw(5, 0, ""); keyer(); x = 0; break; } case '\n': case KEY_ENTER: { /* log QSO immediately if CT compatible * or not in contest */ if ((ctcomp == 1) || (contest != 1)) x = 92; // '\' // if (dxped == 1) x = 92; break; } } // End switch if (x >= 'a' && x <= 'z') x = x - 32; // Promote to upper case if (i < 25) { /* normal character -> insert if space left */ if (x >= ' ' && x <= 'Z') { instring[0] = x; addch(x); strcat(comment, instring); i++; refreshp(); } } if ((serial_section_mult == 1) || (dx_arrlsections == 1) || (sectn_mult == 1) || (arrlss == 1) || (cqww == 1) || (stewperry_flg == 1)) { x = checkexchange(x); } /* , , Ctl-K, '\' */ if (x == '\n' || x == KEY_ENTER || x == 9 || x == 11 || x == 92) { if ((exchange_serial == 1 && comment[0] >= '0' && comment[0] <= '9')) { /* align serial nr. */ if (strlen(comment) == 1) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "00"); strcat(comment, commentbuf); } if (strlen(comment) == 2) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "0"); strcat(comment, commentbuf); } } if (wpx == 1 && pfxmult == 0) { /* align serial nr. */ if ((strlen(comment) == 1) || (comment[1] == ' ')) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "00"); strcat(comment, commentbuf); } if ((strlen(comment) == 2) || (comment[2] == ' ')) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "0"); strcat(comment, commentbuf); } } if (sprint == 1) { if ((comment[1] == ' ') && (comment[0] != ' ')) { strcpy(commentbuf, "00"); commentbuf[2] = comment[0]; commentbuf[3] = '\0'; strcat(commentbuf, comment + 1); strcpy(comment, commentbuf); } if ((comment[2] == ' ') && (comment[1] != ' ')) { strcpy(commentbuf, "0"); commentbuf[1] = comment[0]; commentbuf[2] = comment[1]; commentbuf[3] = '\0'; strcat(commentbuf, comment + 2); strcpy(comment, commentbuf); } } if ((pacc_pa_flg == 1) && (countrynr != mycountrynr)) { if (strlen(comment) == 1) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "00"); strcat(comment, commentbuf); } if (strlen(comment) == 2) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "0"); strcat(comment, commentbuf); } } if ((arrlss == 1) && (x != 9) && (strlen(section) < 2)) { mvprintw(13, 54, "section?"); mvprintw(12, 54, comment); x = 0; } else if (((serial_section_mult == 1) || (sectn_mult == 1)) && ((x != 9) && (strlen(section) < 1))) { if (serial_or_section == 0 || (serial_or_section == 1 && country_found(hiscall) == 1)) { mvprintw(13, 54, "section?", section); mvprintw(12, 54, comment); refreshp(); } break; } else if (serial_grid4_mult == 1) { // mvprintw(13,54, "section?"); mvprintw(12, 54, comment); refreshp(); gridmult = getgrid(comment); strcpy(section, gridmult); section[4] = '\0'; break; // x = 0; //##debug } else if (stewperry_flg == 1) { if (check_qra(comment) == 0) { mvprintw(13, 54, "locator?"); mvprintw(12, 54, comment); break; } refreshp(); break; } else if (cqww == 1 && trxmode == DIGIMODE && ((countrynr == w_cty) || (countrynr == ve_cty))) { if (strlen(comment) < 5) { mvprintw(13, 54, "state/prov?"); mvprintw(12, 54, comment); if (x == '\n' || x == KEY_ENTER || x == 92) { x = 0; } else { refreshp(); break; } x = 0; } else { refreshp(); break; } } else break; } } refresh_comment(); commentfield = 0; return (x); } /* ------------------------------------------------------------------------ */ char cmpattern[32] = " "; // global char ssexchange[30] = ""; char section[8] = ""; char callupdate[7]; int call_update = 0; char zone_export[3] = " "; char zone_fix[3] = ""; /* ------------------------------------------------------------------------ */ int checkexchange(int x) { extern char comment[]; extern char ssexchange[]; extern int cqww; extern int arrlss; extern int stewperry_flg; extern char section[]; extern char callupdate[]; extern char hiscall[]; extern int call_update; extern char zone_export[]; extern char zone_fix[]; extern int serial_section_mult; extern int sectn_mult; extern int dx_arrlsections; char precedent[] = " "; char serial[5] = " "; char check[3] = " "; char checksection[30]; char zone[4] = ""; /* field of allowed pattern sequences * * The characters have the following meaning: * u - undefined (left or right delimiter) * b - blank character * a - ascii character * f - a figure / digit * * e.g. faf means a character between two digits */ char serpats[8][8] = { "bfb", "afb", "bfa", "bffab", "affab", "bffbffb", "fff", "ffff" }; char precpats[8][4] = { "faf", "fab", "bab", "baf", "fau", "bau", "uaf", "uab" }; char checkpats[6][5] = { "bffb", "bffu", "affu", "affb", "affa", "bffa" }; char secpats[10][6] = { "fab", "faab", "faaab", "bab", "baab", "baaab", "bau", "baau", "baaau", "baafb" }; char callpats[5][9] = { "bafaab", "baafab", "baafaab", "bafaaab", "baafaaab" }; char zonepats[6][6] = { "ufb", "uffb", "bfb", "bffb", "bffu", "bfu" }; char sectionpats[9][6] = { "uab", "uaab", "uaaab", "uau", "uaau", "uaaau", "bab", "baab", "baaab" }; int i, s, hr, ii, pr, jj; /* get the pattern sequence from comment string */ strcpy(cmpattern, "u "); if (strlen(comment) > 0) { for (i = 0; i < strlen(comment); i++) { switch ((int) comment[i]) { case 'A'...'Z': { cmpattern[i + 1] = 'a'; cmpattern[i + 2] = 'u'; break; } case '0'...'9': { cmpattern[i + 1] = 'f'; cmpattern[i + 2] = 'u'; break; } case ' ': { cmpattern[i + 1] = 'b'; break; } default: cmpattern[i + 1] = 'u'; } } } // -----------------------------------cqww----------------------- if (cqww == 1) { s = atoi(comment); snprintf(zone, sizeof(zone), "%02d", s); for (ii = 0; ii < LEN(zonepats); ii++) { hr = getlastpattern(zonepats[ii]); //! \todo logik und Verwendung zone_fix vs zone_export unklar //! Was passiert, falls zonenummer in comment zu groess ist? if ((hr > 1) && (atoi(comment + hr - 1) != 0)) { sprintf(zone, "%02d", atoi(comment + hr - 1)); strncpy(zone_fix, zone, 2); zone_fix[2] = '\0'; } else { strncpy(zone_export, zone, 2); zone_export[2] = '\0'; } } if (strlen(hiscall) >= 2) OnLowerSearchPanel(32, zone_export); for (ii = 0; ii < LEN(callpats); ii++) { hr = getlastpattern(callpats[ii]); // call update ? if (hr > 0) { switch (ii) { case 0 ... 1: strncpy(callupdate, comment + hr, 4); callupdate[4] = '\0'; break; case 2 ... 3: strncpy(callupdate, comment + hr, 5); callupdate[5] = '\0'; break; case 4: strncpy(callupdate, comment + hr, 6); callupdate[6] = '\0'; } if (strlen(callupdate) > 3) { if (call_update == 1) strcpy(hiscall, callupdate); mvprintw(12, 29, " "); mvprintw(12, 29, "%s", hiscall); mvprintw(12, 54, "%s", comment); } } } return (x); } // ---------------------------arrls------------------------------ if (arrlss == 1) { // get serial nr. s = atoi(comment); if (s != 0) snprintf(serial, sizeof(serial), "%4d", s); for (ii = 0; ii < LEN(serpats); ii++) { hr = getlastpattern(serpats[ii]); if (hr > 0) snprintf(serial, sizeof(serial), "%4d", atoi(comment + hr - 1)); if (ii == 5 && hr > 0) { snprintf(serial, sizeof(serial), "%4d", atoi(comment + hr - 1)); snprintf(check, sizeof(check), "%2d", atoi(comment + hr + 2)); } } // get precedent if (((comment[0] == 'A') || (comment[0] == 'B') || (comment[0] == 'M') || (comment[0] == 'Q') || (comment[0] == 'S') || (comment[0] == 'U')) && ((comment[1] == ' ') || (cmpattern[2] == 'f'))) { precedent[0] = comment[0]; } /* look for a single letter */ for (ii = 0; ii < LEN(precpats); ii++) { hr = getlastpattern(precpats[ii]); if (hr > 0) { pr = comment[hr]; if ((pr == 'Q') || (pr == 'A') || (pr == 'B') || (pr == 'U') || (pr == 'M') || (pr == 'S')) { precedent[0] = pr; precedent[1] = '\0'; } } } // get call update for (ii = 0; ii < LEN(callpats); ii++) { hr = getlastpattern(callpats[ii]); if (hr > 0) { if (((comment[hr] == 'A') && (comment[hr + 1] > 59)) || (comment[hr] == 'K') || (comment[hr] == 'N') || (comment[hr] == 'W') || (comment[hr] == 'V') || (comment[hr] == 'C')) { switch (ii) { case 0 ... 1: strncpy(callupdate, comment + hr, 4); callupdate[4] = '\0'; break; case 2 ... 3: strncpy(callupdate, comment + hr, 5); callupdate[5] = '\0'; break; case 4: strncpy(callupdate, comment + hr, 6); callupdate[6] = '\0'; } if (strlen(callupdate) > 3) { if (call_update == 1) strcpy(hiscall, callupdate); mvprintw(12, 29, " "); mvprintw(12, 29, "%s", hiscall); mvprintw(12, 54, "%s", comment); } } } } // get check for (ii = 0; ii < LEN(checkpats); ii++) { hr = getlastpattern(checkpats[ii]); if (hr > 0) { check[0] = comment[hr]; check[1] = comment[hr + 1]; check[2] = '\0'; } } // get section *section = '\0'; for (ii = 0; ii < LEN(secpats); ii++) { hr = getlastpattern(secpats[ii]); if (hr > 0) { g_strlcpy(checksection, comment + hr, 4); g_strchomp(checksection); for (jj = 0; jj < get_mult_count(); jj++) { char *multi = g_strdup(get_mult(jj)); g_strchomp(multi); if ((strlen(multi) >= 1) && (strcmp(checksection, multi) == 0)) { strcpy(section, multi); break; } g_free(multi); } } } { char buf[40]; sprintf(buf, " %4s %1s %2s %2s ", serial, precedent, check, section); OnLowerSearchPanel(8, buf); } /* \todo use sprintf */ ssexchange[0] = '\0'; strcat(ssexchange, serial); strcat(ssexchange, " "); strcat(ssexchange, precedent); strcat(ssexchange, " "); strcat(ssexchange, check); strcat(ssexchange, " "); strcat(ssexchange, section); mvprintw(12, 54, comment); refreshp(); return (x); // end arrlss } // ----------------------serial+section-------------------------- if ((serial_section_mult == 1) || (sectn_mult == 1) || (dx_arrlsections == 1)) { if (serial_section_mult == 1) { // get serial nr. s = atoi(comment); if (s != 0) snprintf(serial, sizeof(serial), "%4d", atoi(comment)); for (ii = 0; ii < LEN(serpats); ii++) { hr = getlastpattern(serpats[ii]); if (hr > 0) snprintf(serial, sizeof(serial), "%4d", atoi(comment + hr - 1)); if (ii == 5 && hr > 0) { snprintf(serial, sizeof(serial), "%4d", atoi(comment + hr - 1)); snprintf(check, sizeof(check), "%2d", atoi(comment + hr + 2)); } } // get section for (ii = 0; ii < LEN(secpats); ii++) { hr = getlastpattern(secpats[ii]); if (hr > 0) { memset(checksection, 0, 29); strncpy(checksection, comment + (hr), 3); if (checksection[strlen(checksection) - 1] == ' ') { checksection[strlen(checksection) - 1] = '\0'; } for (jj = 0; jj < get_mult_count(); jj++) { if (get_matching_length(checksection, jj) == strlen(checksection)) { strcpy(section, get_mult(jj)); break; } } } } } // end serial_section_mult if (sectn_mult == 1) { for (ii = 0; ii < LEN(sectionpats); ii++) { hr = getlastpattern(sectionpats[ii]); strncpy(checksection, comment, 3); checksection[3] = '\0'; int best_len = 0; int idx = -1; for (jj = 0; jj < get_mult_count(); jj++) { int len = get_matching_length(checksection, jj); if (len > best_len) { best_len = len; idx = jj; } } if (idx >= 0) { strcpy(section, get_mult(idx)); } } } // end sectn_mult if (dx_arrlsections == 1) { for (ii = 0; ii < LEN(sectionpats); ii++) { hr = getlastpattern(sectionpats[ii]); strncpy(checksection, comment, 3); checksection[3] = '\0'; for (jj = 0; jj < get_mult_count(); jj++) { if (get_matching_length(checksection, jj) == strlen(checksection)) { strcpy(section, get_mult(jj)); // if (strlen(section) == strlen(mults_possible[jj])) break; } } } } // end dx_arrlsections callupdate[0] = '\0'; } // get call update for (ii = 0; ii < LEN(callpats); ii++) { hr = getlastpattern(callpats[ii]); if (hr > 0) { if (((comment[hr] == 'A') && (comment[hr + 1] > 59)) || (comment[hr] == 'K') || (comment[hr] == 'N') || (comment[hr] == 'W') || (comment[hr] == 'V') || (comment[hr] == 'C')) { switch (ii) { case 0 ... 1: strncpy(callupdate, comment + hr, 4); callupdate[4] = '\0'; break; case 2 ... 3: strncpy(callupdate, comment + hr, 5); callupdate[5] = '\0'; break; case 4: strncpy(callupdate, comment + hr, 6); callupdate[6] = '\0'; } if (strlen(callupdate) > 3) { if (call_update == 1) strcpy(hiscall, callupdate); mvprintw(12, 29, " "); mvprintw(12, 29, "%s", hiscall); mvprintw(12, 54, "%s", comment); } } } } OnLowerSearchPanel(32, " "); OnLowerSearchPanel(32, section); /* show section on lower frame of Worked window */ ssexchange[0] = '\0'; /* if (serial_section_mult == 1) { strcat (ssexchange,serial); strcat (ssexchange, " "); } */ strcat(ssexchange, section); // ---------------------------end mults -------------------------- mvprintw(12, 54, comment); refreshp(); return (x); } /* ------------------------------------------------------------------------ */ /** search checkstring in cmpattern * * find first occurence of checkstring in cmpattern * \parm checkstring - the pattern to be found * \return offset of checkstring in cmpattern (or 0 if not found) */ int getlastpattern(char *checkstring) { extern char comment[]; char newpat[80]; int i, x = 0; if ((strlen(cmpattern) - strlen(checkstring)) > 0) { for (i = 0; i < (strlen(cmpattern) - strlen(checkstring)) - 1; i++) { newpat[0] = '\0'; strncat(newpat, cmpattern + i, strlen(comment)); if (strncmp(newpat, checkstring, strlen(checkstring)) == 0) { x = i; } } if (x > strlen(comment)) x = 0; } return (x); } /* ------------------------------------------------------------------------ * return a pointer to the start of grid locator */ char *getgrid(char *comment) { char *gridmult = ""; int multposition = 0; int i = 0; /* search for first letter, that should be the start of the Grid locator*/ for (i = 0; i < strlen(comment); i++) { if (comment[i] > 64 && comment[i] < 91) { multposition = i; break; } } gridmult = comment + multposition; return (gridmult); } /* ------------------------------------------------------------------------ */ /** Edit exchange field */ void exchange_edit(void) { extern char comment[]; int l, b; int i = 0, j; char comment2[27]; l = strlen(comment); b = l - 1; while ((i != 27) && (b <= strlen(comment))) { attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 54, " "); mvprintw(12, 54, comment); mvprintw(12, 54 + b, ""); i = key_get(); // Ctrl-A (^A) or , move to beginning of comment field. if (i == 1 || i == KEY_HOME) { b = 0; // Ctrl-E (^E) or , move to end of comment field, exit edit mode. } else if (i == 5 || i == KEY_END) { b = strlen(comment); break; // Left arrow, move cursor left one position. } else if (i == KEY_LEFT) { if (b > 0) b--; // Right arrow, move cursor right one position. } else if (i == KEY_RIGHT) { if (b < strlen(comment) - 1) { b++; } else break; /* stop edit */ // , erase character under the cursor, // shift all characters to the right of the cursor left one position. } else if (i == KEY_DC) { l = strlen(comment); for (j = b; j <= l; j++) { comment[j] = comment[j + 1]; /* move to left incl.\0 */ } // , erase character to the left of the cursor, // shift all characters to the right of the cursor left one position. } else if (i == KEY_BACKSPACE) { if (b > 0) { b--; l = strlen(comment); for (j = b; j <= l; j++) { comment[j] = comment[j + 1]; } } // not received. } else if (i != 27) { // Promote lower case to upper case. if ((i >= 'a') && (i <= 'z')) i = i - 32; // Accept printable characters. if ((i >= ' ') && (i <= 'Z')) { if (strlen(comment) <= 24) { /* copy including trailing \0 */ strncpy(comment2, comment + b, strlen(comment) - (b - 1)); comment[b] = i; comment[b + 1] = '\0'; strcat(comment, comment2); b++; } } else if (i != 0) i = 27; } } attron(A_STANDOUT); refresh_comment(); } tlf-1.4.0/src/speedupndown.h0000644000175000017500000000207313562576621012714 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014 Thomas Beierlein * * 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 */ #ifndef SPEEDUPNDOWN_H #define SPEEDUPNDOWN_H int speedup(void); int speeddown(void); int setweight(int weight); #endif /* end of include guard: SPEEDUPNDOWN_H */ tlf-1.4.0/src/sendqrg.h0000644000175000017500000000201313562576621011636 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SENDQRG_H #define SENDQRG_H #include int init_tlf_rig(void); int close_tlf_rig(RIG *my_rig); int sendqrg(void); #endif /* end of include guard: SENDQRG_H */ tlf-1.4.0/src/store_qso.c0000644000175000017500000000310513562576621012207 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Store_qso writes qso to disk * *--------------------------------------------------------------*/ #include #include #include #include "globalvars.h" // Includes glib.h and tlf.h #include "tlf_curses.h" int store_qso(char *loglineptr) { FILE *fp; if ((fp = fopen(logfile, "a")) == NULL) { fprintf(stdout, "store_qso.c: Error opening file.\n"); endwin(); exit(1); } strcpy(qsos[nr_qsos], loglineptr); nr_qsos++; strcat(loglineptr, "\n"); /* pa3fwm, 20040113: this looks suspicious, repeated calls to store_qso() could add multiple \n's */ fputs(loglineptr, fp); fclose(fp); return (0); } tlf-1.4.0/src/makelogline.c0000644000175000017500000002570613562576621012473 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004-2005 Rein Couperus * 2011-2014 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * Makelogline takes care of formatting the log * items *--------------------------------------------------------------*/ #include #include #include #include #include "addpfx.h" #include "dxcc.h" #include "get_time.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "qsonr_to_str.h" #include "score.h" void prepare_fixed_part(void); void prepare_specific_part(void); void fillto(int n); /** Construct a new line to add to the logfile. * * Prepare a logline for storage in log in 'logline4' * * The structure of a logline entry is as follows: * - each logline contains exactly 87 characters followed by a newline. * - it consists of 3 parts * | fixed part (54 chars) | contest dependent part (26 chars) | frequ (8 chars) * * See function definitions below */ void makelogline(void) { extern int trx_control; extern freq_t freq; static int lastbandinx = 0; char freq_buff[10]; int points; /* restart band timer if qso on new band */ if (wpx == 1) { // 10 minute timer if (lastbandinx != bandinx) { lastbandinx = bandinx; minute_timer = 600; // 10 minutes } } /* remember call for resend after qso (see callinput.c) */ strcpy(lastcall, hiscall); /* first fixed (contest independent) part of logline */ prepare_fixed_part(); assert(strlen(logline4) == 54); /* second (contest dependent) part of logline */ prepare_specific_part(); assert(strlen(logline4) == 77); /* score QSO and add to logline * if not DXpedition or QSO mode */ points = score(); /* update qso's per band and score */ total = total + points; if ((contest == 1) && (dxped == 0)) { sprintf(logline4 + 76, "%2d", points); } fillto(80); /* add freq to end of logline */ if (trx_control == 1) { snprintf(freq_buff, 8, "%7.1f", freq / 1000.0); strcat(logline4, freq_buff); } fillto(87); assert(strlen(logline4) == 87); } /** Construct fixed part of logline * * - fixed part:\n * \verbatim * 0 1 2 3 4 5 * 123456789012345678901234567890123456789012345678901234 * bndmod dd-mmm-yy hh:mm qso. call.......... rst rst * nr.. his my.\endverbatim * Alternatively in 'qso' or 'dxped' mode if 'LOGFREQUENCY' is set * there is the khz part of the working frequnecy instead of * the qso number: * \verbatim * 0 1 2 3 4 5 * 123456789012345678901234567890123456789012345678901234 * bndmod dd-mmm-yy hh:mm khz call.......... rst rst * his my.\endverbatim */ void prepare_fixed_part(void) { extern int no_rst; extern char whichcontest[]; extern int logfrequency; extern int trx_control; extern freq_t freq; static char time_buf[80]; strcpy(logline4, band[bandinx]); if (trxmode == CWMODE) strcat(logline4, "CW "); else if (trxmode == SSBMODE) strcat(logline4, "SSB"); else strcat(logline4, "DIG"); if (do_cabrillo == 0) { get_time(); strftime(time_buf, 60, " %d-%b-%y %H:%M ", time_ptr); } else { strftime(time_buf, 60, " %d-%b-%y %H:%M ", &time_ptr_cabrillo); } strcat(logline4, time_buf); qsonr_to_str(); if (logfrequency == 1 && trx_control == 1 && ((strcmp(whichcontest, "qso") == 0) || (strcmp(whichcontest, "dxped") == 0))) { char khz[5]; sprintf(khz, " %3d", ((int)(freq / 1000.0)) % 1000); // show freq. strcat(logline4, khz); } else { if ((lan_active == 1) && (exchange_serial == 1)) { // show qso nr strcat(logline4, lastqsonr); lastqsonr[0] = '\0'; } else strcat(logline4, qsonrstr); } if (lan_active == 1 && cqwwm2 == 1) { logline4[27] = thisnode; // set node ID... logline4[28] = '\0'; strcat(logline4, " "); } else strcat(logline4, " "); strncat(logline4, hiscall, 15); /* 29 */ fillto(44); if (no_rst) { strcat(logline4, "--- --- "); /* instead of RST */ } else { if ((trxmode == CWMODE) || (trxmode == DIGIMODE)) { his_rst[2] = '9'; my_rst[2] = '9'; } else { his_rst[2] = ' '; my_rst[2] = ' '; } strcat(logline4, his_rst); /* till 54 */ strcat(logline4, " "); strcat(logline4, my_rst); strcat(logline4, " "); } } /** Construct contest dependent part of logline * * - contest dependent part (list may not complete):\n * - QSO mode * \verbatim * 5 6 7 8 * 56789012345678901234567890 * comment................\endverbatim * - wpx * \verbatim * 5 6 7 8 * 56789012345678901234567890 * serialnr pfx pp\endverbatim * pfx - new prefix, pp -points * - cqww * \verbatim * 5 6 7 8 * 56789012345678901234567890 * hiszone pfx zn pp\endverbatim * zn - new zone * - normal contest * \verbatim * 5 6 7 8 * 56789012345678901234567890 * exchange mult pp\endverbatim * mult - multi (cty, province, ...) * - arllss * \verbatim * 5 6 7 8 * 56789012345678901234567890 * nr.. p cc sctn pp\endverbatim * nr - serial exchange, p - precedent, cc - check, sctn - ARRL/RAC section * - arrlfd * 5 6 7 8 * 56789012345678901234567890 * class sctn pp\endverbatim * class - TX count + operator class, sctn - ARRL/RAC section */ void prepare_specific_part(void) { extern int pfxnummultinr; extern int excl_add_veto; int new_pfx; int sr_nr = 0; char grid[7] = ""; int i; if (arrlss == 1) { // ----------------------------arrlss---------------- strncat(logline4, ssexchange, 22); section[0] = '\0'; } else if (serial_section_mult == 1) { //-------------------------serial_section--------------- strncat(logline4, comment, 22); section[0] = '\0'; } else if (serial_grid4_mult == 1) { //-------------------------serial_grid 4 characters--------------- sr_nr = atoi(comment); for (i = 0; i < 11; i++) { if (comment[i] > 64 && comment[i] < 91) { break; } } strncpy(grid, comment + i, 6); grid[6] = '\0'; sprintf(logline4 + 54, "%4.0d %s", sr_nr, grid); section[4] = '\0'; } else if (sectn_mult == 1) { //-------------------------section only--------------- strncat(logline4, comment, 22); section[0] = '\0'; } else if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) { //-------------------------cqww---------------- /* if (strlen(zone_fix) > 1) { strcat (logline4, zone_fix); } else strcat (logline4, zone_export); */ if (trxmode == DIGIMODE && cqww == 1 && strlen(comment) < 5) { comment[2] = ' '; comment[3] = 'D'; comment[4] = 'X'; comment[5] = '\0'; } strncat(logline4, comment, 22); } else { //----------------------end cqww --------------- strncat(logline4, comment, 22); } fillto(77); if (contest == 1) /* cut back to make room for mults */ logline4[68] = '\0'; /* If WPX * -> add prefix to prefixes_worked and include new pfx in log line */ new_pfx = 0; if (!(pfxmultab == 1 && excl_add_veto == 1)) { new_pfx = (add_pfx(pxstr, bandinx) == 0); /* add prefix, remember if new */ } if (wpx == 1 || pfxmultab == 1) { /* wpx */ if (new_pfx) { /** \todo FIXME: prefix can be longer than 5 char, e.g. LY1000 */ strncat(logline4, pxstr, 5); } fillto(73); } if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) { /* ------------cqww --------------------- */ logline4[68] = '\0'; if (addcty != 0) { if (dxcc_by_index(addcty)->pfx[0] == '*') strncat(logline4, dxcc_by_index(addcty) -> pfx + 1, 5); else strncat(logline4, dxcc_by_index(addcty) -> pfx, 5); addcty = 0; } fillto(73); if (addzone != 0) { /* if (strlen(zone_fix) > 1) { strncat (logline4, zone_fix, 2); } else strncat (logline4, zone_export, 2); */ if (strlen(comment) < 2) { strcat(logline4, "0"); strncat(logline4, comment, 1); } else strncat(logline4, comment, 2); addzone = 0; } else { zone_fix[0] = '\0'; } fillto(77); //----------------------------------end cqww----------------- } else if (arrldx_usa == 1) { logline4[68] = '\0'; if (addcty != 0) { strncat(logline4, dxcc_by_index(addcty) -> pfx, 9); addcty = 0; } fillto(77); } else if ((dx_arrlsections == 1) && (countrynr != w_cty) && (countrynr != ve_cty)) { logline4[68] = '\0'; if (addcty != 0) { strncat(logline4, dxcc_by_index(addcty) -> pfx, 9); addcty = 0; } fillto(77); } else if ((wysiwyg_multi == 1) || (unique_call_multi != 0) || (serial_section_mult == 1) || (sectn_mult == 1) || (serial_grid4_mult)) { logline4[68] = '\0'; if (shownewmult >= 0) { strncat(logline4, multis[shownewmult].name, 9); shownewmult = -1; } fillto(77); } else if ((dx_arrlsections == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) { logline4[68] = '\0'; if (shownewmult >= 0) { strncat(logline4, multis[shownewmult].name, 9); shownewmult = -1; } fillto(77); } else if (pacc_pa_flg == 1 || pfxnummultinr > 0) { logline4[68] = '\0'; if (addcty != 0) { strncat(logline4, dxcc_by_index(addcty) -> pfx, 9); addcty = 0; } else if (addcallarea == 1) { strncat(logline4, pxstr, 3); addcallarea = 0; } fillto(77); } else if ((universal == 1) && ((country_mult == 1) || (dx_arrlsections == 1))) { logline4[68] = '\0'; if (addcty != 0) { strncat(logline4, dxcc_by_index(addcty) -> pfx, 9); addcty = 0; } fillto(77); } fillto(77); } /** fill logline4 with spaces * * fill logline4 with spaces until column n */ void fillto(int n) { char fillspaces[] = " "; int len = strlen(logline4); if (len < n) strncat(logline4, fillspaces, n - len); } tlf-1.4.0/src/ui_utils.c0000644000175000017500000001507613562576621012040 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2015 Thomas Beierlein * * 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 */ /* User Interface helpers for ncurses based user interface */ #include #include #include "clear_display.h" #include "clusterinfo.h" #include "stoptx.h" #include "tlf_panel.h" #include "startmsg.h" #include "splitscreen.h" extern int use_rxvt; extern int ymax, xmax; int key_kNXT3 = 0; int key_kPRV3 = 0; int key_kNXT5 = 0; int key_kPRV5 = 0; pthread_mutex_t panel_mutex = PTHREAD_MUTEX_INITIALIZER; static int getkey(int wait); static int onechar(void); void resize_layout(void); /** fake refresh code to use update logic for panels */ void refreshp() { pthread_mutex_lock(&panel_mutex); update_panels(); doupdate(); pthread_mutex_unlock(&panel_mutex); } /** add A_BOLD to attributes if 'use_rxvt' is not set */ int modify_attr(int attr) { if (use_rxvt == 0) attr |= A_BOLD; return attr; } /** lookup key code by capability name * * ncurses automatically maps extended capabilities (such as kNXT3 or similar) * to keycodes. But there is no fixed ordering for that. * So we look up the key code by its name on strtup and use that afterwards. * \param capability - capability name * \return keycode or 0 if no associated key found */ int lookup_key(char *capability) { char *esc_sequence = NULL; int keycode = 0; if (*capability == '\0') { return 0; } esc_sequence = tigetstr(capability); if (esc_sequence == NULL || esc_sequence == (char *) - 1) { return 0; } keycode = key_defined(esc_sequence); return keycode; } /** lookup all needed special keys not defined by ncurses */ void lookup_keys() { int not_ok = 0; key_kNXT3 = lookup_key("kNXT3"); key_kPRV3 = lookup_key("kPRV3"); key_kNXT5 = lookup_key("kNXT5"); key_kPRV5 = lookup_key("kPRV5"); if ((key_kNXT3 || key_kPRV3) == 0) { showmsg("Terminal does not support Alt-PgUp/PgDn keys"); not_ok = 1; } if ((key_kNXT5 || key_kPRV5) == 0) { showmsg("Terminal does not support Ctrl-PgUp/PgDn keys"); not_ok = 1; } if (not_ok == 1) { showmsg("See ':CQD' in man page for setting Auto_CQ delay"); showmsg(""); beep(); sleep(2); } } /** key_get wait for next key from terminal * */ int key_get() { return getkey(1); } /** key_poll return next key from terminal if there is one * */ int key_poll() { return getkey(0); } /* helper function to set 'nodelay' mode according to 'wait' * parameter and then ask for the next character * leaves 'nodelay' afterwards always as FALSE (meaning: wait for * character */ static int getkey(int wait) { int x = 0; nodelay(stdscr, wait ? FALSE : TRUE); x = onechar(); if (x == KEY_RESIZE) { resize_layout(); } nodelay(stdscr, FALSE); return x; } /* New onechar() that takes advantage of Ncurses keypad mode and processes * certain escaped keys and assigns them to Ncurses values known by * keyname(). Also catches Escape and processes it immediately as well * as calling stoptx() for minimal delay. */ static int onechar(void) { int x = 0; int trash = 0; x = getch(); /* Replace Ctl-H and Backspace with KEY_BACKSPACE */ if (x == 8 || x == 127) x = KEY_BACKSPACE; if (x == 27) { nodelay(stdscr, TRUE); x = getch(); /* Escape pressed, not an escaped key. */ if (x == ERR) { stoptx(); return x = 27; } else if (x != 91) { switch (x) { case 32 ... 57: // Alt-Space to Alt-9, 160 - 185 case 97 ... 122: // Alt-a to alt-z, 225 - 250 x += 128; break; /* Not all terminals support Ctl-Shift-ch so * treat them as Alt-ch */ case 65 ... 78: // alt-A to alt-N, 225 - 238 case 80 ... 90: // alt-P to alt-Z, 240 - 250 x += 160; break; case 79: { x = getch(); /* Catch Alt-O */ if (x == ERR) { x = 239; break; } /* Key codes for Shift-F1 to Shift-F4 in Xfce terminal. */ if (x == 49) { x = getch(); if (x == 59) { x = getch(); if (x == 50) { x = getch(); switch (x) { case 80: { x = KEY_F(13); break; } case 81: { x = KEY_F(14); break; } case 82: { x = KEY_F(15); break; } case 83: { x = KEY_F(16); break; } } } } } } } nodelay(stdscr, FALSE); } else { nodelay(stdscr, FALSE); x = getch(); /* Get next code after 91 */ switch (x) { /* Key codes for this section: * 27 91 49 126 Home * 27 91 52 126 End */ case 49: { x = getch(); if (x == 126) { x = KEY_HOME; break; } } case 52: { x = KEY_END; trash = getch(); break; } } } } /* It seems Xterm treats Alt-Space through Alt-9 with a prefix * character of 194 followed by 160 through 185. */ if (x == 194) { nodelay(stdscr, TRUE); trash = getch(); if (trash == ERR) return x; x = trash; // Alt-Space to Alt-9 if (x >= 160 && x <= 185) { nodelay(stdscr, FALSE); return x; } } /* It seems Xterm treats Alt-a to Alt-z with a prefix * character of 195 followed by 161-186 (a-z) or * 129-154 (A-Z). */ if (x == 195) { nodelay(stdscr, TRUE); trash = getch(); if (trash == ERR) return x; x = trash; switch (x) { case 161 ... 186: // Alt-a to Alt-z 225 - 250 x += 64; break; case 129 ... 154: // Alt-A to Alt-Z 225 - 250 x += 96; break; } nodelay(stdscr, FALSE); } return x; } /* Handles resizing of windows * As ncurses handles most of it itself, it just redraws the main * display and resizes only the packet panel windows */ void resize_layout(void) { getmaxyx(stdscr, ymax, xmax); clear_display(); clusterinfo(); refresh_splitlayout(); } tlf-1.4.0/src/log_to_disk.h0000644000175000017500000000167413562576621012504 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef LOG_TO_DISK_H #define LOG_TO_DISK_H int log_to_disk(int from_lan); #endif /* LOG_TO_DISK_H */ tlf-1.4.0/src/sendbuf.h0000644000175000017500000000213013562576621011621 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014 Thomas Beierlein * * 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 */ #ifndef SENDBUF_H #define SENDBUF_H char short_number(char c); void sendmessage(const char *msg); void send_standard_message(int msg); void send_keyer_message(int msg); #endif /* SENDBUF_H */ tlf-1.4.0/src/splitscreen.h0000644000175000017500000000355513562576621012542 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SPLITSCREEN_H #define SPLITSCREEN_H int init_packet(void) ; int cleanup_telnet(void); int packet(void); int send_cluster(void); void addtext(char *s); int receive_packet(void); void refresh_splitlayout(); #ifdef SPLITSCREEN_H_PRIVATE #define ENTRYROWS 2 #define BUFFERSIZE 256 #define SCROLLSIZE (LINES/4*3+1) #define DEFAULTTLN_LOGLINES 300 #define NORMAL_ATTR 0 #define MINE_ATTR 1 #define ENTRY_ATTR 2 #define STATE_EDITING 0 #define STATE_VIEWING 1 void addlog(char *s); int logattr(void); char *firstlog(void); char *lastlog(void); char *nextlog(void); char *prevlog(void); void start_editing(void); void delete_prev_char(void); void right_arrow(void); void left_arrow(void); void move_eol(void); void gather_input(char *s); int walkup(void); int walkdn(void); int pageup(int lines); int pagedn(int lines); void viewbottom(void); void viewtop(void); void resume_editing(void); void viewlog(void); int edit_line(int c); void sanitize(char *s); #endif /* SPLITSCREEN_H_PRIVATE */ #endif /* end of include guard: SPLITSCREEN_H */ tlf-1.4.0/src/qtcvars.h0000644000175000017500000001010613562576621011660 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2015 Ervin Hegedus * * 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 */ #ifndef QTCVARS_H #define QTCVARS_H #include "globalvars.h" #define QTC_SENT_LOG "QTC_sent.log" #define QTC_RECV_LOG "QTC_recv.log" #define QTC_META_LOG "QTC_meta.log" #define QTC_LINES 10 #define QTC_RY_LINE_NR 12 #define RECV 1 // QTC RECV direction #define SEND 2 // QTC SEND direction #define QTC_CAP 4 // QTC CAPABLE station #define QTC_LATER 8 // QTC LATER #define QTC_NO 16 // NO QTC for/from this station typedef struct { int qsoline; // qsos[INDEX] int flag; // flag to mark for send int saved; // indicates QTC has saved int sent; // indicates QTC has sent at least once char qtc[25]; // QTC line by concatenated fields char senttime[16]; // sent time: YY-Mon-dd HH:MM\0 } t_qtcline; typedef struct { int serial; // qtc serial int count; // nr of qtc line in block int marked; // nr of marked to send int totalsent; // nr of sent qtc's char callsign[15]; // current callsign; helps to detect if QSO has dropped t_qtcline qtclines[QTC_LINES]; } t_qtclist; typedef struct { int status; // received, failed, nothing char time[5]; // time of qso char callsign[15]; // callsign char serial[5]; // qso serial int confirmed; // qtc had confirmed char receivedtime[16]; // received time: YY-Mon-dd HH:MM\0 } t_qtcrecline; typedef struct { int serial; int count; int confirmed; int sentcfmall; char callsign[15]; t_qtcrecline qtclines[QTC_LINES]; } t_qtcreclist; typedef struct { char content[50]; int attr; // meta attr: 0 => not nopied, 1 => copied } t_qtc_ry_line; extern int next_qtc_qso; // the next non-sent QSO, which can // be send next as QTC extern int qsoflags_for_qtc[MAX_QSOS]; // array of flag to log lines of QSOs // for QTC's; this is an array of // flags, which marks when a QSO // sent as QTC extern int qtcdirection; // 1: RECV, 2: SEND, 3: BOTH extern t_qtclist qtclist; // the QTC list to send extern t_qtcreclist qtcreclist; // the QTC list which received extern int nr_qtcsent; // number of sent QTC blocks; this used // at the QTC header, eg. 23/10 - here the 23 // is the value of this variable extern t_qtc_ry_line qtc_ry_lines[QTC_RY_LINE_NR]; // when QTC is set, // and mode is RTTY, then the modem // lines stored this array extern int qtc_ry_currline; // current line of QTC RTTY modem extern int qtc_ry_capture; // enable or disable QTC RTTY capturing extern int qtc_ry_copied; // stores the number of copied lines i // from QTC RTTY terminal to QTC window extern int qtcrec_record; // do we record the received QTCs extern char qtcrec_record_command[2][50]; // command to start recording extern char qtcrec_record_command_shutdown[50]; // coomand to stop recording /* arras of CW/Digimode messages for QTC receive and send */ extern char qtc_recv_msgs[12][80]; extern char qtc_send_msgs[12][80]; /* arras of SSB fiel names for QTC receive and send */ extern char qtc_phrecv_message[14][80]; extern char qtc_phsend_message[14][80]; extern char qtc_cap_calls[40]; extern int qtc_auto_filltime; // set QTC auto filltime; when DX sent first // QTC line, the first two digits will be copied to others extern int qtc_recv_lazy; // ignore check of received QTC lines #endif /* end of include guard: QTCVARS_H */ tlf-1.4.0/src/recall_exchange.h0000644000175000017500000000170313562576621013304 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef RECALL_EXCHANGE_H #define RECALL_EXCHANGE_H int recall_exchange(void); #endif /* RECALL_EXCHANGE_H */ tlf-1.4.0/src/rtty.h0000644000175000017500000000224113562576621011200 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * rtty.h rtty mini terminal * *--------------------------------------------------------------*/ #ifndef RTTY_H #define RTTY_H int init_controller() ; void deinit_controller(); int rx_rtty() ; int show_rtty(void); #endif /* end of include guard: RTTY_H */ tlf-1.4.0/src/clear_display.h0000644000175000017500000000167413562576621013022 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef CLEAR_DISPLAY_H #define CLEAR_DISPLAY_H void clear_display(void); #endif /* CLEAR_DISPLAY_H */ tlf-1.4.0/src/keyer.c0000644000175000017500000001663113562576621011320 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2003 Rein Couperus * 2012-2014 Thomas Beierlein * * 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 */ /*------------------------------------------------------------------------ CW keyboard routine ------------------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "netkeyer.h" #include "nicebox.h" // Includes curses.h #include "sendbuf.h" #include "speedupndown.h" #include "stoptx.h" #include "tlf.h" #include "tlf_panel.h" #include "ui_utils.h" #include "write_keyer.h" /* size and position of keyer window */ #define KEYER_LINE_WIDTH 60 #define KEYER_WIN_WIDTH (KEYER_LINE_WIDTH+2) #define KEYER_WIN_HEIGHT 3 #define KEYER_X (80-KEYER_WIN_WIDTH)/2 #define KEYER_Y 7 void mfj1278_control(int x); int keyer(void) { extern int cqmode; extern char mode[20]; extern int trxmode; extern int cwkeyer; extern int digikeyer; extern int weight; extern int keyer_backspace; static WINDOW *win = NULL; static PANEL *panel = NULL; int x = 0, j = 0; int cury, curx; char nkbuffer[2]; char keyerstring[KEYER_LINE_WIDTH + 1] = ""; int keyerstringpos = 0; char weightbuf[15]; const char txcontrolstring[2] = { 20, '\0' }; // ^t const char rxcontrolstring[2] = { 18, '\0' }; // ^r const char crcontrolstring[2] = { 13, '\0' }; // cr const char ctl_c_controlstring[2] = { 92, '\0' }; // '\' if ((trxmode == CWMODE && cwkeyer == NO_KEYER) || (trxmode == DIGIMODE && digikeyer == NO_KEYER)) /* no keyer present */ return 1; strcpy(mode, "Keyboard"); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); if (panel == NULL) { win = newwin(KEYER_WIN_HEIGHT, KEYER_WIN_WIDTH, KEYER_Y, KEYER_Y); if (win == NULL) return 1; panel = new_panel(win); if (panel == NULL) { delwin(win); return 1; } } show_panel(panel); werase(win); wnicebox(win, 0, 0, 1, KEYER_LINE_WIDTH, "CW Keyer"); if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { /* switch to tx */ keyer_append(txcontrolstring); } while (1) { wattron(win, COLOR_PAIR(C_LOG) | A_STANDOUT); wmove(win, 1, 1); for (j = 0; j < KEYER_LINE_WIDTH; j++) { waddch(win, ' '); } mvwprintw(win, 1, 1, "%s", keyerstring); refreshp(); x = key_get(); // Send space instead of double quote. if (x == 34) { x = 32; } // Send space instead of newline or return. if (x == '\n' || x == KEY_ENTER) x = 32; // , Ctrl-K (^K), Alt-k (M-k) if (x == 27 || x == 11 || x == 235) { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { /* switch back to rx */ keyer_append(rxcontrolstring); } else { stoptx(); } break; } if (x == KEY_BACKSPACE || x == KEY_DC /* delete-character key */ || x == KEY_LEFT) { x = 0; // default: no operation if (keyer_backspace && keyerstringpos > 0) { // // remove last char // --keyerstringpos; keyerstring[keyerstringpos] = '\0'; x = KEY_BACKSPACE; } } // Promote lower case to upper case. if (x > 96 && x < 123) x = x - 32; if (x > 9 && x < 91) { /* drop all other control char... */ if (x > 31 || x == 10) { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { mfj1278_control(x); } else if (cwkeyer == NET_KEYER) { nkbuffer[0] = x; // 1 char at the time ! nkbuffer[1] = '\0'; keyer_append(nkbuffer); } /* if display field is full move text one left */ if (keyerstringpos == KEYER_LINE_WIDTH - 1) { for (j = 0; j < KEYER_LINE_WIDTH - 1; j++) { keyerstring[j] = keyerstring[j + 1]; } keyerstringpos--; } /* add new character for display */ keyerstring[keyerstringpos++] = x; keyerstring[keyerstringpos] = '\0'; } } else { switch (x) { case '|': case '\n': // Note that '\n', KEY_ENTER, and usually 13 case 13: // Will never happen (converted to space above) case KEY_ENTER: { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(crcontrolstring); } break; } case 123: { /* { */ if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(txcontrolstring); } break; } case 125: { /* } */ if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(rxcontrolstring); } break; } case 92: { /* \ */ if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(ctl_c_controlstring); } break; } case 247: { // Alt-w, set weight mvprintw(1, 0, "Weight= "); mvprintw(1, 7, ""); refreshp(); echo(); getnstr(weightbuf, 2); noecho(); weight = atoi(weightbuf); netkeyer(K_WEIGHT, weightbuf); break; } // , increase CW speed. case KEY_PPAGE: { speedup(); clear_display(); break; } // , decrease CW speed. case KEY_NPAGE: { speeddown(); clear_display(); break; } case KEY_F(1): { getyx(stdscr, cury, curx); mvprintw(5, 0, ""); send_keyer_message(0); /* F1 */ mvprintw(cury, curx, ""); break; } case KEY_F(2): { send_keyer_message(1); /* F2 */ break; } case KEY_F(3): { send_keyer_message(2); /* F3 */ break; } case KEY_F(4): { send_keyer_message(3); /* F4 */ break; } case KEY_F(5): { send_keyer_message(4); /* F5 */ break; } case KEY_F(6): { send_keyer_message(5); /* F6 */ break; } case KEY_F(7): { send_keyer_message(6); /* F7 */ break; } case KEY_F(8): { send_keyer_message(7); /* F8 */ break; } case KEY_F(9): { send_keyer_message(8); /* F9 */ break; } case KEY_F(10): { send_keyer_message(9); /* F10 */ break; } case KEY_F(11): { send_keyer_message(10); /* F11 */ break; } case KEY_F(12): { send_keyer_message(11); /* F12 */ break; } case KEY_BACKSPACE: { sendmessage("\b"); /* ASCII BS */ break; } } } } hide_panel(panel); if (cqmode == CQ) strcpy(mode, "Log "); else strcpy(mode, "S&P "); clear_display(); return 0; /* show end of keyer routine */ } /* ---------------- convert input for 1278 ctrl -----------------------*/ void mfj1278_control(int x) { extern int trxmode; char buffer[2]; if (trxmode == CWMODE || trxmode == DIGIMODE) { if (trxmode == DIGIMODE) { if (x == 10) x = 13; // tnc needs CR instead of LF } buffer[0] = x; // 1 char at the time ! buffer[1] = '\0'; keyer_append(buffer); } } tlf-1.4.0/src/sendbuf.c0000644000175000017500000002143413562576621011624 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004-2005 Rein Couperus * 2014, 2016 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------------------ * send the text buffer to the keyer driver * ---------------------------------------------------------------------------*/ #include #include #include #include #include "callinput.h" #include "displayit.h" #include "globalvars.h" #include "lancode.h" #include "netkeyer.h" #include "tlf.h" #include "tlf_curses.h" #include "write_keyer.h" extern char ph_message[14][80]; #define BUFSIZE 81 char buffer[BUFSIZE]; /** shorten CW numbers */ char short_number(char c) { extern int shortqsonr; if (shortqsonr == SHORTCW) { if (c == '9') return 'N'; if (c == '0') return 'T'; } return c; } /* * Replace occurences of 'what' in 'buf' by 'rep'. * The amount of bytes assigned to 'buf' is 'size'. * This includes the terminating \0, i.e. max length of 'buf' is 'size'-1 * Replacements are done in-place, no other memory area than 'buf' is used. * Maximum 'count' replacements are done. * */ void replace_n(char *buf, int size, const char *what, const char *rep, int count) { int len = strlen(buf); if (len > size - 1) { // input string already too long, don't touch it return; } int len_what = strlen(what); if (len_what == 0) { return; } int len_rep = strlen(rep); int len_overlap = (len_rep < len_what ? len_rep : len_what); buf[size - 1] = 0; // ensure proper termination char *p = buf; char *q; while (count-- > 0 && (q = strstr(p, what)) != NULL) { char *dst; const char *src; int n, overflow = 0; strncpy(q, rep, len_overlap); if (len_rep < len_what) { // // ....WHATabcdef // ....REPTabcdef // q^ || // dst^| // src^ // // ....REPabcdef // // shift rest down dst = q + len_overlap; src = q + len_what; n = buf + len + 1 - src; // include terminating \0 memmove(dst, src, n); // result gets shorter len -= len_what - len_rep; } else if (len_rep > len_what) { // // ....Wabcdef // ....Rabcdef // q^| | // src^ | // dst^ // // ....R__abcdef // ....REPabcdef // // shift rest up dst = q + len_rep; src = q + len_overlap; n = buf + len + 1 - src; // include terminating \0 if (dst + n - 1 >= buf + size - 1) { // would be longer than (size-1), shift only a part n = buf + size - 1 - dst; if (n <= 0) { // even a part wont fit; no operation n = 0; overflow = 1; } } memmove(dst, src, n); // copy tail of rep dst = q + len_overlap; src = rep + len_overlap; n = len_rep - len_what; if (dst + n - 1 >= buf + size - 1) { // only a part of rep fits n = buf + size - 1 - dst; overflow = 1; } memcpy(dst, src, n); if (overflow) { break; } // result gets longer len += len_rep - len_what; } p = q + len_rep; } } void replace_1(char *buf, int size, const char *what, const char *rep) { replace_n(buf, size, what, rep, 1); } void replace_all(char *buf, int size, const char *what, const char *rep) { replace_n(buf, size, what, rep, 999); } void ExpandMacro(void) { extern char call[20]; extern char hiscall[20]; extern char hiscall_sent[]; extern char his_rst[]; extern char qsonrstr[5]; extern char comment[]; extern char lastqsonr[]; extern int early_started; extern int noleadingzeros; extern int lan_active; extern int exchange_serial; int i; static char comstr[BUFSIZE] = ""; static char qsonroutput[5] = ""; static char rst_out[4] = ""; strcpy(comstr, call); comstr[strlen(call) - 1] = '\0'; // skip trailing \n replace_all(buffer, BUFSIZE, "%", comstr); /* mycall */ if (NULL != strstr(buffer, "@")) { char *p = hiscall + strlen(hiscall_sent); if (strlen(hiscall_sent) != 0) { hiscall_sent[0] = '\0'; early_started = 0; // sending_call = 0; } replace_1(buffer, BUFSIZE, "@", p); /* his call, 1st occurence */ replace_all(buffer, BUFSIZE, "@", hiscall); /* his call, further occurrences */ } strncpy(rst_out, his_rst, 4); rst_out[1] = short_number(rst_out[1]); rst_out[2] = short_number(rst_out[2]); rst_out[3] = '\0'; replace_all(buffer, BUFSIZE, "[", rst_out); /* his RST */ if (NULL != strstr(buffer, "#")) { int leading_zeros = 0; int lead = 1; for (i = 0; i <= 4; i++) { if (lead && qsonrstr[i] == '0') { ++leading_zeros; } else { lead = 0; } qsonroutput[i] = short_number(qsonrstr[i]); } qsonroutput[4] = '\0'; if (noleadingzeros != 1 && leading_zeros > 1) { leading_zeros = 1; } replace_all(buffer, BUFSIZE, "#", qsonroutput + leading_zeros); /* serial nr */ if ((lan_active == 1) && (exchange_serial == 1)) { strncpy(lastqsonr, qsonrstr, 5); send_lan_message(INCQSONUM, qsonrstr); } } replace_all(buffer, BUFSIZE, "!", comment); if (trxmode == DIGIMODE) replace_all(buffer, BUFSIZE, "|", "\r"); /* CR */ } void sendbuf(void) { extern int trxmode; extern int searchflg; extern char termbuf[]; extern char backgrnd_str[]; extern int cwkeyer; extern int digikeyer; extern int simulator; extern int simulator_mode; extern int sending_call; static char printlinebuffer[82] = ""; printlinebuffer[0] = '\0'; if ((trxmode == CWMODE && cwkeyer != NO_KEYER) || (trxmode == DIGIMODE && digikeyer != NO_KEYER)) { ExpandMacro(); if ((strlen(buffer) + strlen(termbuf)) < 80) { if (simulator == 0) strcat(termbuf, buffer); // if (sending_call == 1) { // strcat (termbuf, " "); // sending_call = 0; // } } if (simulator == 0) strncat(printlinebuffer, termbuf, strlen(termbuf)); else strncat(printlinebuffer, termbuf, strlen(termbuf)); if (searchflg == 0 && simulator == 0) strncat(printlinebuffer, backgrnd_str, 80 - strlen(printlinebuffer)); else { int len = 40 - (int)strlen(printlinebuffer); if (len > 0) { strncat(printlinebuffer, backgrnd_str, len); } if (strlen(printlinebuffer) > 45) { printlinebuffer[42] = '.'; printlinebuffer[43] = '.'; printlinebuffer[44] = '.'; printlinebuffer[45] = '\0'; } } attron(COLOR_PAIR(C_LOG) | A_STANDOUT); if (simulator_mode == 0) { mvprintw(5, 0, printlinebuffer); refreshp(); } refreshp(); if (trxmode == DIGIMODE) { if (digikeyer == MFJ1278_KEYER) { int i = 0; for (i = 0; i < strlen(buffer); i++) if (buffer[i] == '\n') buffer[i] = 13; for (i = 0; i < strlen(buffer); i++) if (buffer[i] == 123) buffer[i] = 20; /* ctrl-t */ for (i = 0; i < strlen(buffer); i++) if (buffer[i] == 125) buffer[i] = 18; /* ctrl-r */ } keyer_append(buffer); } if (trxmode == CWMODE) { if (cwkeyer == MFJ1278_KEYER) { int i = 0; for (i = 0; i < strlen(buffer); i++) if (buffer[i] == '\n') buffer[i] = 13; } keyer_append(buffer); } if (simulator == 0) { if (sending_call == 0) displayit(); refreshp(); } buffer[0] = '\0'; } } /** \brief send message * * Send the message via CW or DIGI mode, but only if not empty * \param msg message to send */ void sendmessage(const char *msg) { if (strlen(msg) != 0) { g_strlcpy(buffer, msg, sizeof(buffer)); sendbuf(); } } void send_standard_message(int msg) { switch (trxmode) { case CWMODE: sendmessage(message[msg]); break; case DIGIMODE: sendmessage(digi_message[msg]); break; default: if (msg < 14) play_file(ph_message[msg]); break; } } void send_keyer_message(int msg) { switch (trxmode) { case DIGIMODE: sendmessage(digi_message[msg]); break; default: sendmessage(message[msg]); break; } } tlf-1.4.0/src/logit.h0000644000175000017500000000171713562576621011323 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef LOGIT_H #define LOGIT_H void logit(void); void refresh_comment(void); #endif /* end of include guard: LOGIT_H */ tlf-1.4.0/src/write_keyer.c0000644000175000017500000000635413562576621012533 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004-2005 Rein Couperus * * 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 #include #include #include #include "clear_display.h" #include "err_utils.h" #include "ignore_unused.h" #include "netkeyer.h" #include "tlf.h" #include "tlf_curses.h" #include "fldigixmlrpc.h" char wkeyerbuffer[400] = ""; int data_ready = 0; pthread_mutex_t keybuffer_mutex = PTHREAD_MUTEX_INITIALIZER; /** append string to key buffer*/ void keyer_append(const char *string) { pthread_mutex_lock(&keybuffer_mutex); g_strlcat(wkeyerbuffer, string, sizeof(wkeyerbuffer)); data_ready = 1; pthread_mutex_unlock(&keybuffer_mutex); } /** flush key buffer */ void keyer_flush() { pthread_mutex_lock(&keybuffer_mutex); wkeyerbuffer[0] = '\0'; data_ready = 0; pthread_mutex_unlock(&keybuffer_mutex); } /** write key buffer to keying device * * should be called periodically from the background task */ int write_keyer(void) { extern int trxmode; extern int cwkeyer; extern int digikeyer; extern char controllerport[]; extern char rttyoutput[]; FILE *bfp = NULL; char outstring[420] = ""; // this was only 120 char length, but wkeyerbuffer is 400 char *tosend = NULL; if (trxmode != CWMODE && trxmode != DIGIMODE) return 1; pthread_mutex_lock(&keybuffer_mutex); if (data_ready == 1) { /* allocate a copy of the data and free the buffer */ tosend = g_strdup(wkeyerbuffer); wkeyerbuffer[0] = '\0'; data_ready = 0; } pthread_mutex_unlock(&keybuffer_mutex); if (tosend != NULL) { if (digikeyer == FLDIGI && trxmode == DIGIMODE) { fldigi_send_text(tosend); } else if (cwkeyer == NET_KEYER) { netkeyer(K_MESSAGE, tosend); } else if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { if ((bfp = fopen(controllerport, "a")) == NULL) { TLF_LOG_WARN("1278 not active. Switching to SSB mode."); trxmode = SSBMODE; clear_display(); } else { fputs(tosend, bfp); fclose(bfp); } } else if (digikeyer == GMFSK) { if (strlen(rttyoutput) < 2) { TLF_LOG_WARN("No modem file specified!"); } // when GMFSK used (possible Fldigi interface), the trailing \n doesn't need if (tosend[strlen(tosend) - 1] == '\n') { tosend[strlen(tosend) - 1] = '\0'; } sprintf(outstring, "echo -n \"\n%s\" >> %s", tosend, rttyoutput); IGNORE(system(outstring));; } g_free(tosend); } return 0; } tlf-1.4.0/src/callinput.c0000644000175000017500000007033413562576621012174 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2005 Rein Couperus * 2009-2016 Thomas Beierlein * 2013 Ervin Hegedüs - HA2OS * * 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 */ /* ------------------------------------------------------------ * Callinput handles the call input field * *--------------------------------------------------------------*/ #include #include #include #include #include #include "addspot.h" #include "autocq.h" #include "bandmap.h" #include "calledit.h" #include "callinput.h" #include "changefreq.h" #include "changepars.h" #include "clear_display.h" #include "cleanup.h" #include "cw_utils.h" #include "edit_last.h" #include "err_utils.h" #include "deleteqso.h" #include "getctydata.h" #include "gettxinfo.h" #include "grabspot.h" #include "ignore_unused.h" #include "lancode.h" #include "muf.h" #include "netkeyer.h" #include "nicebox.h" // Includes curses.h #include "note.h" #include "prevqso.h" #include "printcall.h" #include "qtcvars.h" // Includes globalvars.h #include "qtcwin.h" #include "rtty.h" #include "searchlog.h" // Includes glib.h #include "sendbuf.h" #include "sendspcall.h" #include "show_help.h" #include "showinfo.h" #include "showpxmap.h" #include "speedupndown.h" #include "splitscreen.h" #include "stoptx.h" #include "time_update.h" #include "ui_utils.h" #include "writeparas.h" #include "showzones.h" #include "bands.h" #include "fldigixmlrpc.h" #include #define TUNE_UP 6 /* tune up for 6 s (no more than 10) */ void send_bandswitch(freq_t freq); int autosend(void); int plain_number(char *str); void handle_bandswitch(int direction); extern int no_arrows; extern char hiscall[]; extern int bandinx; extern char band[NBANDS][4]; extern int contest; extern int dxped; extern freq_t freq; extern int trx_control; extern freq_t bandfrequency[]; /** callsign input loop * * \return code of last typed character */ int callinput(void) { extern int itumult; extern int wazmult; extern int isdupe; // LZ3NY auto-b4 patch extern int cwstart; extern int early_started; extern char hiscall_sent[]; extern char comment[]; extern int cqmode; extern int trxmode; extern char mode[]; extern char lastcall[]; extern int cqdelay; extern char his_rst[]; extern char backgrnd_str[]; extern int cluster; extern int announcefilter; extern char ph_message[14][80]; extern freq_t mem; extern SCREEN *mainscreen; extern int simulator; extern int simulator_mode; extern char talkarray[5][62]; extern int lan_active; extern int zonedisplay; extern int showscore_flag; extern int searchflg; extern int cqww; extern char cqzone[]; extern char ituzone[]; extern int ctcomp; extern int nob4; extern int change_rst; extern int weight; extern int k_pin14; extern int k_ptt; extern int noautocq; extern int miniterm; extern int no_rst; extern int bmautoadd; extern int bmautograb; extern int digikeyer; static freq_t freqstore; /* qrg during last callsign input character, 0 if grabbed, used to decide if a call in input field was entered by hand or grabbed from spot list */ enum grabstate_t { NONE, IN_PROGRESS, REACHED }; struct grab_t { enum grabstate_t state; freq_t spotfreq; char call[15]; }; static struct grab_t grab = { .state = NONE }; int cury, curx; int j, t, x = 0; char instring[2] = { '\0', '\0' }; static int lastwindow; attron(modify_attr(COLOR_PAIR(NORMCOLOR))); printcall(); /* print call input field */ searchlog(hiscall); while (strlen(hiscall) <= 13) { show_zones(bandinx); printcall(); /* wait for next char pressed, but update time, cluster and TRX qrg */ /* main loop waiting for input */ x = -1; while (x < 1) { usleep(10000); time_update(); if (trxmode == DIGIMODE) { show_rtty(); } if (digikeyer == FLDIGI && fldigi_set_callfield == 1 && hiscall[0] != '\0') { freqstore = freq; fldigi_set_callfield = 0; } /* if BMAUTOADD is active and user has input a call sign * (indicated by non-zero freqstore) check if he turns away * from frequency and if so add call to spot list */ if (bmautoadd != 0 && freqstore != 0) { if (strlen(hiscall) >= 3) { if (fabsf(freq - freqstore) > 500) { add_to_spots(hiscall, freqstore); hiscall[0] = '\0'; HideSearchPanel(); freqstore = 0; } } } /* if BMAUTOGRAB is active in S&P mode and input field is empty and a spot has * not already been grabbed here check if a spot is on freq * and pick it up if one found */ if (bmautograb && cqmode == S_P && *hiscall == '\0' && grab.state == NONE) { get_spot_on_qrg(grab.call, freq); if (strlen(grab.call) >= 3) { strncpy(hiscall, grab.call, sizeof(hiscall)); grab.state = REACHED; grab.spotfreq = freq; showinfo(getctydata_pfx(hiscall)); printcall(); searchlog(hiscall); freqstore = 0; } } /* wait till freq of grabbed spot is reported back from rig. * Then go to 'reached' state' */ if (grab.state == IN_PROGRESS && fabs(freq - grab.spotfreq) <= 100) grab.state = REACHED; /* Check if we tune away from old freq before a grabbed spot is * reached. If so stop grab process */ /* if we have grabbed a call from spot list and tune away * then forget about it */ if (fabsf(freq - grab.spotfreq) > 500 && grab.state == REACHED) { grab.state = NONE; hiscall[0] = '\0'; printcall(); HideSearchPanel(); showinfo(SHOWINFO_DUMMY); } /* make sure that the wrefresh() inside getch() shows the cursor * in the input field */ wmove(stdscr, 12, 29 + strlen(hiscall)); x = key_poll(); } /* special handling of some keycodes if call field is empty */ if (*hiscall == '\0') { // , sends CQ message (F1), starts autoCQ, or sends S&P message. if ((x == '\n' || x == KEY_ENTER) && *hiscall == '\0') { if (cqmode == CQ) { if (noautocq != 1) x = auto_cq(); } else { sendspcall(); break; } } // Up Arrow or Alt-e, edit last QSO if (x == KEY_UP || x == 229) { edit_last(); break; } // Equals, confirms last callsign already logged if call field is empty. if (x == '=' && *hiscall == '\0') { char *str = g_strdup_printf("%s TU ", lastcall); sendmessage(str); g_free(str); break; } } switch (x) { // Plus (+) // - in non-CT mode switch to other mode (CQ <-> S&P) // - in CT mode send exchange, log QSO, no message sent. case '+': { if (!ctcomp) { /* switch to other mode */ if (cqmode == CQ) { cqmode = S_P; } else cqmode = CQ; /* and show new mode */ attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); if (cqmode == CQ) { mvprintw(0, 2, "Log "); strcpy(mode, "Log "); } else { mvprintw(0, 2, "S&P "); strcpy(mode, "S&P "); } } else { if (strlen(hiscall) > 2) { send_standard_message(2); if (((cqww == 1) || (wazmult == 1)) && (*comment == '\0')) strcpy(comment, cqzone); if ((itumult == 1) && (*comment == '\0')) strcpy(comment, ituzone); x = '\\'; // key for logging QSO without message } } break; } // Ctrl-Q (^Q), open QTC window for receiving or sending QTCs. case 17: { if (qtcdirection == 1 || qtcdirection == 3) { // in case of QTC=RECV or QTC=BOTH qtc_main_panel(RECV); } if (qtcdirection == 2) { // in case of QTC=SEND qtc_main_panel(SEND); } x = KEY_LEFT; continue; } // Ctrl-S (^S), open QTC window for sending QTCs. case 19: { if (qtcdirection == 2 || qtcdirection == 3) { // in case of QTC=SEND ot QTC=BOTH qtc_main_panel(SEND); } x = KEY_LEFT; continue; } // , enter call edit when call field is not empty. case KEY_HOME: { if ((*hiscall != '\0') && (ungetch(x) == OK)) { calledit(); } break; } // Left Arrow, enter call edit when call field is not empty, or band down. case KEY_LEFT: { if (*hiscall != '\0') { calledit(); } else { handle_bandswitch(BAND_DOWN); } break; } // Right Arrow, band up when call field is empty. case KEY_RIGHT: { handle_bandswitch(BAND_UP); break; } // Alt-w (M-w), set Morse weight. case 247: { char weightbuf[5] = ""; char *end; mvprintw(12, 29, "Wght: -50..50"); nicebox(1, 1, 2, 12, "Cw"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(2, 2, "Speed: %2u ", GetCWSpeed()); mvprintw(3, 2, "Weight: %3d ", weight); refreshp(); usleep(800000); mvprintw(3, 10, " "); echo(); mvgetnstr(3, 10, weightbuf, 3); noecho(); g_strchomp(weightbuf); int tmp = strtol(weightbuf, &end, 10); if ((weightbuf[0] != '\0') && (*end == '\0')) { /* successful conversion */ if (tmp > -51 && tmp < 51) { weight = tmp; netkeyer(K_WEIGHT, weightbuf); } } clear_display(); printcall(); break; } // Alt-v (M-v), change Morse speed in CW mode, else band down. case 246: { if (ctcomp == 1) { while (x != 27) { //escape nicebox(1, 1, 2, 12, "Cw"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(2, 2, "Speed: %2u ", GetCWSpeed()); mvprintw(3, 2, "Weight: %3d ", weight); printcall(); refreshp(); x = key_get(); if (x == KEY_UP) { speedup(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2u", GetCWSpeed()); } else if (x == KEY_DOWN) { speeddown(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2u", GetCWSpeed()); } else x = 27; // clear_display(); } } else { // trlog compatible, band switch handle_bandswitch(BAND_DOWN); } x = -1; break; } // , change RST if call field not empty, else increase CW speed. case KEY_PPAGE: { if ((change_rst == 1) && (strlen(hiscall) != 0)) { // change RST if (his_rst[1] <= 56) { his_rst[1]++; if (!no_rst) mvprintw(12, 44, his_rst); mvprintw(12, 29, hiscall); } } else { // change cw speed speedup(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2u", GetCWSpeed()); } break; } // , change RST if call field not empty, else decrease CW speed. case KEY_NPAGE: { if ((change_rst == 1) && (strlen(hiscall) != 0)) { if (his_rst[1] > 49) { his_rst[1]--; if (!no_rst) mvprintw(12, 44, his_rst); mvprintw(12, 29, hiscall); } } else { speeddown(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2u", GetCWSpeed()); } break; } // , log QSO in CT mode, else test if B4 message should be sent. case '\n': case KEY_ENTER: { if (strlen(hiscall) > 2 && ctcomp == 1) { /* there seems to be a call * means: log it (in CT mode */ x = 92; // '\' log without sending message break; } if (strlen(hiscall) < 3 || nob4 == 1) break; /* check b4 QSO if call is long enough and 'nob4' off */ isdupe = 0; // LZ3NY auto-b4 patch searchlog(hiscall); if (isdupe != 0) { // XXX: Before digi_message, SSB mode sent CW here. - W8BSD send_standard_message(6); /* as with F7 */ cleanup(); clear_display(); } break; } // , send exchange in CT mode case KEY_IC: { if (ctcomp != 0) { send_standard_message(1); // F2 } break; } // Colon, prefix for entering commands or changing parameters. case ':': { changepars(); hiscall[0] = '\0'; x = 0; clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 29, " "); mvprintw(12, 29, ""); refreshp(); break; } // Hash, save xcvr freq to mem or restore mem to xcvr. case '#': { if (mem == 0.0) { mem = freq; mvprintw(14, 67, " MEM: %7.1f", mem / 1000.); } else { freq = mem; set_outfreq(mem); mem = 0.0; mvprintw(14, 67, " "); } mvprintw(29, 12, " "); mvprintw(29, 12, ""); refreshp(); break; } // Minus, delete previous QSO from log. case '-': { delete_qso(); break; } // Semicolon or Alt-n (M-n), insert note in log. case ';': case 238: { include_note(); x = -1; break; } // Alt-0 to Alt-9 (M-0...M-9), send CW/Digimode messages 15-24. case 176 ... 185: { send_standard_message(x - 162); /* alt-0 to alt-9 */ break; } // F1, send CQ or S&P call message. case KEY_F(1): { if (trxmode == CWMODE || trxmode == DIGIMODE) { if (cqmode == 0) { sendspcall(); } else { send_standard_message(0); /* CQ */ } if (simulator != 0) { simulator_mode = 1; } } else { if (cqmode == 0) play_file(ph_message[5]); /* S&P */ else play_file(ph_message[0]); } break; } // F2-F11, send messages 2 through 11. case KEY_F(2) ... KEY_F(11): { send_standard_message(x - KEY_F(1)); // F2...F11 - F1 = 1...10 break; } // F12, activate autocq timing and message. case KEY_F(12): { x = auto_cq(); break; } // Query, send call with " ?" appended or F5 message in voice mode. case '?': { if (*hiscall != '\0') { strcat(hiscall, " ?"); send_standard_message(4); hiscall[strlen(hiscall) - 2] = '\0'; } x = -1; break; } // , remove chracter left of cursor, move cursor left one position. case KEY_BACKSPACE: { if (*hiscall != '\0') { getyx(stdscr, cury, curx); mvprintw(cury, curx - 1, " "); mvprintw(cury, curx - 1, ""); hiscall[strlen(hiscall) - 1] = '\0'; if (atoi(hiscall) < 1800) { /* no frequency */ showinfo(getctydata_pfx(hiscall)); searchlog(hiscall); refreshp(); } x = -1; break; } break; } // Alt-r (M-r) or Alt-s (M-s), toggle score window. case 242: case 243: { if (showscore_flag == 0) showscore_flag = 1; else { showscore_flag = 0; } clear_display(); break; } // Alt-k (M-k), synonym for Ctrl-K (^K). case 235: { x = 11; // Ctrl-K break; } // Alt-a (M-a), cycle cluster window. case 225: { if (cluster == NOCLUSTER) { cluster = CLUSTER; // alt-A announcefilter = FILTER_ALL; } else if (cluster == CLUSTER) { cluster = MAP; } else if (cluster == MAP) { cluster = NOCLUSTER; } break; } // Alt-b (M-b), band-up for TR-Log mode. case 226: { if (ctcomp == 0) { handle_bandswitch(BAND_UP); } break; } // Alt-j (M-j), show station frequencies. case 234: { if (cluster != FREQWINDOW) { lastwindow = cluster; cluster = FREQWINDOW; } else cluster = lastwindow; break; } // Alt-h (M-h), show help. case 232: { show_help(); break; } // Alt-, (M-,) or period, change bandmap filter config. case 172: case '.': { bm_menu(); break; } // Alt-c (M-c), toggle check window. case 227: { if (searchflg != SEARCHWINDOW) searchflg = SEARCHWINDOW; else searchflg = 0; break; } // Alt-m (M-m), show multipliers. case 237: { show_mults(); refreshp(); break; } // Alt-p (M-p), toggle PTT via cwdaemon case 240: { if (k_ptt == 0) { k_ptt = 1; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 2, "PTT on "); mvprintw(12, 29, ""); refreshp(); netkeyer(K_PTT, "1"); // ptt on x = key_get(); // any character to stop tuning if (x == 240) // Alt-P (M-p) netkeyer(K_PTT, "0"); // ptt off k_ptt = 0; mvprintw(0, 2, "%s", mode); refreshp(); } else netkeyer(K_PTT, "0"); // ptt off in any case. break; } // Alt-t (M-t), tune xcvr via cwdaemon. case 244: { int count; gchar *buff; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 2, "Tune "); mvprintw(12, 29, ""); refreshp(); buff = g_strdup_printf("%d", TUNE_UP); netkeyer(K_TUNE, buff); // cw on g_free(buff); count = (int)(TUNE_UP / 0.25); while (count != 0) { usleep(250000); if ((key_poll()) != -1) // any key pressed ? break; count--; } netkeyer(K_ABORT, ""); // cw abort mvprintw(0, 2, "%s", mode); refreshp(); break; } // Alt-z (M-z), show zones worked. case 250: { if (cqww == 1) { if (zonedisplay == 0) zonedisplay = 1; else { zonedisplay = 0; clear_display(); } } else { multiplierinfo(); } break; } // Alt-q (M-q) or Alt-x (M-x), Exit case 241: case 248: { mvprintw(13, 29, "You want to leave tlf? (y/n): "); while (x != 'n' && x != 'N') { x = key_get(); if (x == 'y' || x == 'Y') { writeparas(); cleanup_telnet(); endwin(); puts("\n\nThanks for using TLF.. 73\n"); exit(0); } } x = 27; // break; } // , clear call input or stop sending. case 27: { if (early_started == 0) { /* if CW not started early drop call and start anew */ cleanup(); clear_display(); } else { /* otherwise just stop sending */ stoptx(); *hiscall_sent = '\0'; early_started = 0; } freqstore = 0; break; } // Underscore, confirm last exchange. case '_': { prev_qso(); break; } // Exclamation, open a new shell. case '!': { const char *shell = getenv("SHELL"); if (shell == NULL) { shell = "sh"; } endwin(); IGNORE(system("clear"));; IGNORE(system(shell));; IGNORE(system("clear"));; set_term(mainscreen); clear_display(); break; } // Ctrl-L (^L), resets screen. case 12: { endwin(); set_term(mainscreen); clear_display(); break; } // Ctrl-P (^P), show MUF display. case 16: { int currentterm = miniterm; miniterm = 0; muf(); miniterm = currentterm; clear_display(); break; } // Ctrl-A (^A), add a spot and share on LAN. case 1: { addspot(); HideSearchPanel(); showinfo(SHOWINFO_DUMMY); grab.state = REACHED; grab.spotfreq = freq; break; } // Ctrl-B (^B), send spot to DX cluster. case 2: { announcefilter = 0; cluster = CLUSTER; send_cluster(); break; } // Ctrl-F (^F), change frequency dialog. case 6: { change_freq(); break; } // Ctrl-G (^G), grab next DX spot from bandmap. case 7: { freq_t f = grab_next(); if (f > 0.0) { grab.state = IN_PROGRESS; grab.spotfreq = f; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 2, "%s", mode); freqstore = 0; } break; } // Alt-g (M-g), grab first spot matching call field chars. case 231: { double f = grabspot(); if (f > 0.0) { grab.state = IN_PROGRESS; grab.spotfreq = f; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 2, "%s", mode); freqstore = 0; } break; } // Double quote, send talk message to other nodes. case '\"': { if (lan_active != 0) talk(); break; } // Ctrl-R (^R), toogle trx1, trx2 via lp0 pin 14. case 18: { if (k_pin14 == 0) { k_pin14 = 1; netkeyer(K_SET14, "1"); } else { k_pin14 = 0; netkeyer(K_SET14, "0"); } break; } // Ctrl-T (^T) or Alt-i (M-i), show talk messages. case 20: case 233: { if (lan_active != 0) { for (t = 0; t <= 5; t++) mvprintw(14 + t, 1, " "); for (t = 0; t <= 4; t++) mvprintw(15 + t, 1, talkarray[t]); nicebox(14, 0, 5, 59, "Messages"); refreshp(); key_get(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (t = 0; t <= 6; t++) mvprintw(14 + t, 0, " "); clear_display(); } break; } } /* end switch */ // Ctrl-, increase cqdelay by 1/2 second. // Alt-, same for terminals that consume Ctrl-. if ((key_kPRV3 && x == key_kPRV3) || (key_kPRV5 && x == key_kPRV5)) { if (cqdelay <= 60) { cqdelay++; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 19, " "); mvprintw(0, 19, "%i", cqdelay); } break; } // Ctrl-, decrease cqdelay by 1/2 Second. // Alt-, same for terminals that consume Ctrl-. if ((key_kNXT3 && x == key_kNXT3) || (key_kNXT5 && x == key_kNXT5)) { if (cqdelay >= 4) { cqdelay--; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 19, " "); mvprintw(0, 19, "%i", cqdelay); } break; } /* Convert to upper case */ if (x >= 'a' && x <= 'z') x = x - 32; /* Add character to call input field. */ if (x >= '/' && x <= 'Z') { if (strlen(hiscall) < 13) { instring[0] = x; instring[1] = '\0'; addch(x); strcat(hiscall, instring); if (cqmode == CQ && cwstart > 0 && trxmode == CWMODE && contest == 1) { /* early start keying after 'cwstart' characters but only * if input field contains at least one nondigit */ if (strlen(hiscall) == cwstart && !plain_number(hiscall)) { x = autosend(); } } } if (atoi(hiscall) < 1800) { /* no frequency */ showinfo(getctydata_pfx(hiscall)); searchlog(hiscall); } refreshp(); freqstore = freq; } if (cqmode == CQ && cwstart < 0 && trxmode == CWMODE && contest == 1) { if (x == '\n' || x == KEY_ENTER) { /* early start keying after 'Enter' but only if input field * contains at least two chars, one or more of it nondigit */ if (strlen(hiscall) >= 2 && !plain_number(hiscall)) { x = autosend(); } } } if ((x == '\n' || x == KEY_ENTER) || x == 32 || x == 9 || x == 11 || x == 44 || x == 92) { break; } } return (x); } /** check if string is plain number * * Check if string contains only digits * \param str the string to check * \return true if only digits inside * false at least one none digit */ int plain_number(char *str) { int i; for (i = 0; i < strlen(str); i++) { if (!isdigit(str[i])) { return false; } } return true; } /** autosend function * * autosend allow an operator in RUN mode to just enter the call of the * other station. TLF will start sending the call and switch automatically * to sending the exchange when typing stops. * - starts after 2..5 characters * - shorter calls have to be finished with ENTER key * - as soon as autosend starts only alfanumerical keys are accepted * - no edit after input possible * - calculates expected time to send call from cw speed and * - switches to sending exchange after that time is reached * * \return last typed key, ESC or \n * ESC - transmission has stopped * \n - timeout or CR pressed -> send exchange */ int autosend() { extern int early_started; extern int sending_call; extern char hiscall_sent[]; extern char hiscall[]; GTimer *timer; double timeout, timeout_sent; int x; int char_sent; early_started = 1; sending_call = 1; sendmessage(hiscall); sending_call = 0; strcpy(hiscall_sent, hiscall); char_sent = 0; /* no char sent so far */ timeout_sent = (1.2 / GetCWSpeed()) * getCWdots(hiscall[char_sent]); timer = g_timer_new(); timeout = (1.2 / GetCWSpeed()) * cw_message_length(hiscall); x = -1; while ((x != 27) && (x != '\n' && x != KEY_ENTER)) { x = -1; while ((x == -1) && (g_timer_elapsed(timer, NULL) < timeout)) { highlightCall(char_sent + 1); usleep(10000); if (g_timer_elapsed(timer, NULL) > timeout_sent) { /* one char sent - display and set new timeout */ char_sent ++; timeout_sent += (1.2 / GetCWSpeed()) * getCWdots(hiscall[char_sent]); } /* make sure that the wrefresh() inside getch() shows the cursor * in the input field */ wmove(stdscr, 12, 29 + strlen(hiscall)); x = key_poll(); } if (x == -1) { /* timeout */ x = '\n'; continue; } // if (x == 27) { stoptx(); *hiscall_sent = '\0'; early_started = 0; continue; } /* convert to upper case */ if (x >= 'a' && x <= 'z') x = x - 32; int len = strlen(hiscall); if (len < 13 && x >= '/' && x <= 'Z') { char append[2]; /* insert into hiscall */ hiscall[len] = x; hiscall[len + 1] = '\0'; /* display it */ printcall(); /* send it to cw */ append[0] = x; append[1] = '\0'; sendmessage(append); /* add char length to timeout */ timeout += (1.2 / GetCWSpeed()) * getCWdots((char) x); len = strlen(hiscall_sent); hiscall_sent[len] = x; hiscall_sent[len + 1] = '\0'; } } g_timer_destroy(timer); return x; } int play_file(char *audiofile) { extern int txdelay; extern unsigned char rigptt; int fd; char playcommand[120]; if (*audiofile == '\0') return (0); if ((fd = open(audiofile, O_RDONLY, 0664)) < 0) { TLF_LOG_INFO("cannot open sound file %s!", audiofile); } else { close(fd); if (access("./play_vk", X_OK) == 0) { sprintf(playcommand, "./play_vk %s", audiofile); } else { sprintf(playcommand, "play_vk %s", audiofile); } /* CAT PTT wanted and available, use it. */ if (rigptt == 0x03) { /* Request PTT On */ rigptt |= (1 << 3); /* 0x0b */ } else { /* Fall back to netkeyer interface */ netkeyer(K_PTT, "1"); // ptt on } usleep(txdelay * 1000); IGNORE(system(playcommand));; printcall(); /* CAT PTT wanted, available, and active. */ if (rigptt == 0x07) { /* Request PTT Off */ rigptt |= (1 << 4); /* 0x17 */ } else { /* Fall back to netkeyer interface */ netkeyer(K_PTT, "0"); // ptt off } } return 0; } void send_bandswitch(freq_t freq) { extern int use_bandoutput; extern int bandinx; extern int bandindexarray[]; char outnibble[3]; int bandswitch = 0; if (!use_bandoutput) { return; } const int khz = (int)(freq / 1000.0); if (khz > 15) { // looks like a freq... switch (khz) { case 1800 ... 2000: bandswitch = 1; break; case 3500 ... 4000: bandswitch = 2; break; case 7000 ... 7300: bandswitch = 3; break; case 10100 ... 10150: bandswitch = 4; break; case 14000 ... 14350: bandswitch = 5; break; case 18068 ... 18168: bandswitch = 6; break; case 21000 ... 21450: bandswitch = 7; break; case 24890 ... 24990: bandswitch = 8; break; case 28000 ... 29700: bandswitch = 9; } } else // use the bandinx bandswitch = bandinx + 1; bandswitch = bandindexarray[bandswitch]; sprintf(outnibble, "%d", bandswitch); netkeyer(K_SWITCH, outnibble); } /** handle bandswitch from keyboard * **/ void handle_bandswitch(int direction) { // make sure call field is empty and arrows are enabled if (*hiscall != '\0' || no_arrows) { return; } next_band(direction); if (contest == 1 && dxped == 0) { while (IsWarcIndex(bandinx)) { /* loop till next contest band */ next_band(direction); } } attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); mvprintw(12, 0, band[bandinx]); if (trx_control) { freq = bandfrequency[bandinx]; // TODO: is this needed? set_outfreq(bandfrequency[bandinx]); } send_bandswitch(bandinx); } tlf-1.4.0/src/calledit.c0000644000175000017500000001300313562576621011750 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011 Thomas Beierlein #include "getctydata.h" #include "searchlog.h" // Includes glib.h #include "showinfo.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" void calledit(void) { extern char hiscall[]; extern int block_part; int i = 0, l, b; int j = 0; int x = 0; int cnt = 0, insertflg = 0; char call1[30], call2[10]; l = strlen(hiscall); b = l - 1; while ((i != 27) && (b <= strlen(hiscall))) { attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 29, " "); mvprintw(12, 29, hiscall); mvprintw(12, 29 + b, ""); /* no refreshp() here as getch() calls wrefresh() for the * panel with last output (whre the cursor should go */ i = key_get(); // or if ((i == KEY_DC) || (i == KEY_IC)) cnt++; else { if (i != 27) cnt = 0; } // if (i == 9) block_part = 1; else block_part = 0; // Ctrl-A (^A) or , move to head of callsign field. if (i == 1 || i == KEY_HOME) { b = 0; x = 0; } // Ctrl-E (^E) or , move to end of callsign field, exit edit mode. if (i == 5 || i == KEY_END) { break; /* stop edit */ } // Left arrow if (i == KEY_LEFT) { if (b > 0) b--; // Right arrow } else if (i == KEY_RIGHT) { if (b < strlen(hiscall) - 1) { b++; } else break; /* stop edit */ // } else if (i == KEY_DC) { l = strlen(hiscall); for (j = b; j <= l; j++) { hiscall[j] = hiscall[j + 1]; /* move to left incl. \0 */ } showinfo(getctydata_pfx(hiscall)); if (cnt > 1) searchlog(hiscall); // } else if (i == KEY_BACKSPACE) { if (b > 0) { b--; l = strlen(hiscall); for (j = b; j <= l; j++) { hiscall[j] = hiscall[j + 1]; } showinfo(getctydata_pfx(hiscall)); if (cnt > 1) searchlog(hiscall); } // } else if (i == KEY_IC) { if (insertflg == 0) insertflg = 1; else insertflg = 0; // Any character left other than . } else if (i != 27) { // Promote lower case to upper case. if ((i >= 97) && (i <= 122)) i = i - 32; // Accept A-Z or / and 1-9 if (((i >= 65) && (i <= 90)) || ((i >= 47) && (i <= 57))) { call2[0] = '\0'; if (b <= 12) { strncpy(call1, hiscall, b); strncpy(call2, hiscall + b, strlen(hiscall) - (b - 1)); } if (strlen(hiscall) + 1 == 12) break; // leave insert mode if (((i >= 65) && (i <= 90)) || ((i >= 47) && (i <= 57))) { call1[b] = i; call1[b + 1] = '\0'; if ((strlen(call1) + strlen(call2)) < 12) { strcat(call1, call2); // if (strlen(call1) + strlen(hiscall) >= 12) break; if (strlen(call1) >= 12) break; strcpy(hiscall, call1); } } if ((b < strlen(hiscall) - 1) && (b <= 12)) b++; else break; showinfo(getctydata_pfx(hiscall)); searchlog(hiscall); } else if (x != 0) i = 27; } else i = 27; } attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 29, " "); mvprintw(12, 29, hiscall); refreshp(); attron(A_STANDOUT); searchlog(hiscall); } int insert_char(int curposition) { extern char hiscall[]; char call1[30], call2[10]; int ichr = 0; attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); call1[0] = '\0'; call2[0] = '\0'; while (ichr != 27) { ichr = key_get(); // Leave insert mode if , , or are received. if ((ichr == 9) || (ichr == '\n') || (ichr == KEY_ENTER) || (ichr == 127)) break; // Promote lower case to upper case. if ((ichr >= 97) && (ichr <= 122)) ichr = ichr - 32; if (curposition <= 10) { strncpy(call1, hiscall, curposition); } if (curposition <= 10) { strncpy(call2, hiscall + curposition, strlen(hiscall) - (curposition - 1)); } // Too long! if (strlen(hiscall) + 1 == 13) break; // leave insert mode // Accept A-Z or / and 1-9 if (((ichr >= 65) && (ichr <= 90)) || ((ichr >= 47) && (ichr <= 57))) { call1[curposition] = ichr; call1[curposition + 1] = '\0'; if ((strlen(call1) + strlen(call2)) < 12) { strcat(call1, call2); if (strlen(call1) + strlen(hiscall) >= 12) break; strcpy(hiscall, call1); } } else break; attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 29, hiscall); curposition++; mvprintw(12, 29 + curposition, ""); refreshp(); } ichr = 27; return (ichr); } tlf-1.4.0/src/nicebox.h0000644000175000017500000000207313562576621011630 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef NICEBOX_H #define NICEBOX_H #include "tlf_curses.h" void wnicebox(WINDOW *win, int y, int x, int height, int width, char *boxname); void nicebox(int y, int x, int height, int width, char *boxname); #endif /* NICEBOX_H */ tlf-1.4.0/src/logview.c0000644000175000017500000000306013562576621011645 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * View Log using "less" function * *--------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "ignore_unused.h" #include "tlf.h" #include "tlf_curses.h" int logview(void) { extern char logfile[]; extern char backgrnd_str[]; char comstr[40] = ""; int j; strcat(comstr, "less +G "); strcat(comstr, logfile); endwin(); IGNORE(system(comstr));; refreshp(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13 ; j <= 23 ; j++) { mvprintw(j, 0, backgrnd_str); } refreshp(); return (0); } tlf-1.4.0/src/last10.h0000644000175000017500000000163713562576621011312 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef LAST10_H #define LAST10_H int last10(void); #endif /* LAST10_H */ tlf-1.4.0/src/muf.h0000644000175000017500000000165113562576621010771 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef MUF_H #define MUF_H int muf(void); #endif /* end of include guard: MUF_H */ tlf-1.4.0/src/addarea.c0000644000175000017500000000523213562576621011555 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * add call area to list for one band * *--------------------------------------------------------------*/ #include int add_callarea(void) { extern int callareas[]; extern char hiscall[]; extern int manise80; extern int bandinx; extern int total; extern int multscore[]; int addarea = 0; int found = 0; if (manise80 == 1) { if (strncmp(hiscall, "EA1", 3) == 0) { if (callareas[1] == 0) { callareas[1] = 1; addarea = 1; } } if (strncmp(hiscall, "EA2", 3) == 0) { if (callareas[2] == 0) { callareas[2] = 1; addarea = 1; } } if (strncmp(hiscall, "EA3", 3) == 0) { if (callareas[3] == 0) { callareas[3] = 1; addarea = 1; } } if (strncmp(hiscall, "EA4", 3) == 0) { if (callareas[4] == 0) { callareas[4] = 1; addarea = 1; } } if (strncmp(hiscall, "EA5", 3) == 0) { if (callareas[5] == 0) { callareas[5] = 1; addarea = 1; } if (strncmp(hiscall, "EA5URW", 6) == 0) total = total + 9; } if (strncmp(hiscall, "EA6", 3) == 0) { if (callareas[6] == 0) { callareas[6] = 1; addarea = 1; } } if (strncmp(hiscall, "EA7", 3) == 0) { if (callareas[7] == 0) { callareas[7] = 1; addarea = 1; } } if (strncmp(hiscall, "EA8", 3) == 0) { if (callareas[8] == 0) { callareas[8] = 1; addarea = 1; } } if (strncmp(hiscall, "EA9", 3) == 0) { if (callareas[9] == 0) { callareas[9] = 1; addarea = 1; } } if (strncmp(hiscall, "CT", 2) == 0) { if (callareas[0] == 0) { callareas[0] = 1; addarea = 1; } } if (strncmp(hiscall, "C3", 2) == 0) { if (callareas[10] == 0) { callareas[10] = 1; addarea = 1; } } } if (addarea == 1) { multscore[bandinx]++; } return (found); } tlf-1.4.0/src/write_keyer.h0000644000175000017500000000175613562576621012541 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef WRITE_KEYER_H #define WRITE_KEYER_H void keyer_append(const char *string); void keyer_flush(); int write_keyer(void); #endif /* WRITE_KEYER_H */ tlf-1.4.0/src/stoptx.c0000644000175000017500000000304013562576621011530 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Stop TX * *--------------------------------------------------------------*/ #include "clear_display.h" #include "err_utils.h" #include "netkeyer.h" #include "tlf.h" #include "tlf_curses.h" #include "fldigixmlrpc.h" int stoptx(void) { extern int trxmode; extern int cwkeyer; extern int digikeyer; if (digikeyer == FLDIGI && trxmode == DIGIMODE) { fldigi_to_rx(); } else if (trxmode == CWMODE) { if (cwkeyer == NET_KEYER) { if (netkeyer(K_ABORT, NULL) < 0) { TLF_LOG_WARN("keyer not active; switching to SSB"); trxmode = SSBMODE; clear_display(); } } } else { return (1); } return (0); } tlf-1.4.0/src/ignore_unused.h0000644000175000017500000000017413562576621013047 00000000000000#ifndef IGNORE_UNUSED_H #define IGNORE_UNUSED_H #define IGNORE(x) do { \ if (x) \ (void)0; \ } while(0) #endif tlf-1.4.0/src/displayit.h0000644000175000017500000000200413562576621012175 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014 Thomas Beierlein * * 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 */ #ifndef DISPLAYIT_H #define DISPLAYIT_H void displayit(void); #endif /* end of include guard: DISPLAYIT_H */ tlf-1.4.0/src/audio.c0000644000175000017500000001372213562576621011300 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004-2005 Rein Couperus * 2012 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * audio.c soundcard input routine * *--------------------------------------------------------------*/ #include #include #include #include #include #include "ignore_unused.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" extern char sc_device[]; /* -------------------main test routine ------- */ void recordmenue(void) { int j; attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 0; j <= 24; j++) mvprintw(j, 0, " "); mvprintw(1, 20, "--- TLF SOUND RECORDER UTILITY ---"); mvprintw(6, 20, "F1 ... F12, S, C: Record Messages"); mvprintw(9, 20, "1.: Enable contest recorder"); mvprintw(10, 20, "2.: Disable contest recorder"); mvprintw(11, 20, "3.: Play back file"); mvprintw(13, 20, "ESC: Exit sound recorder function"); refreshp(); } /*--------------------------------------------------------------------------*/ void do_record(int message_nr) { extern char ph_message[14][80]; char commands[80] = ""; mvprintw(15, 20, "recording %s", ph_message[message_nr]); mvprintw(16, 20, "ESC to exit"); mvprintw(17, 20, ""); refreshp(); strcpy(commands, "rec -r 8000 "); //G4KNO strcat(commands, ph_message[message_nr]); strcat(commands, " -q &"); //G4KNO IGNORE(system(commands));; //G4KNO: Loop until keypress while (1) { if (key_get() == 27) { //kill process (SIGINT=Ctrl-C). IGNORE(system("pkill -SIGINT -n rec"));; break; } } } /*--------------------------------------------------------------------------*/ void record(void) { extern char ph_message[14][80]; int runnit = 1, key, i = 0, j = 4; char commands[80] = ""; char playbackfile[40]; char printname[7]; DIR *sounddir; struct dirent *soundfilename; recordmenue(); while (runnit == 1) { key = key_poll(); /* Look for F1-F12, s|S, c|C, 1-4 */ switch (key) { /* Record voice keyer messages, F1-F12, s|S, c|C. */ case KEY_F(1): do_record(0); runnit = 0; break; case KEY_F(2): do_record(1); runnit = 0; break; case KEY_F(3): do_record(2); runnit = 0; break; case KEY_F(4): do_record(3); runnit = 0; break; case KEY_F(5): do_record(4); runnit = 0; break; case KEY_F(6): do_record(5); runnit = 0; break; case KEY_F(7): do_record(6); runnit = 0; break; case KEY_F(8): do_record(7); runnit = 0; break; case KEY_F(9): do_record(8); runnit = 0; break; case KEY_F(10): do_record(9); runnit = 0; break; case KEY_F(11): do_record(10); runnit = 0; break; case KEY_F(12): do_record(11); runnit = 0; break; case 's': case 'S': do_record(12); runnit = 0; break; case 'c': case 'C': do_record(13); runnit = 0; break; /* Contest recording and playback. */ // Start contest recording. case '1': IGNORE(system("echo " " > ~/.VRlock"));; IGNORE(system ("cd ~/tlf/soundlogs; ./soundlog > /dev/null 2> /dev/null &")); mvprintw(15, 20, "Contest recording enabled..."); refreshp(); sleep(1); runnit = 0; break; // Stop contest recording. case '2': mvprintw(15, 20, "Contest recording disabled..."); refreshp(); sleep(1); IGNORE(system("rm ~/.VRlock"));; IGNORE(system("pkill -f soundlogs > /dev/null 2> /dev/null "));; runnit = 0; break; // List contest recordings. case '3': sounddir = opendir("$HOME/tlf/soundlogs/"); // (W9WI) if (sounddir == NULL) break; for (i = 4; i < 15; i++) mvprintw(i, 0, " "); mvprintw(4, 10, ""); for (i = 10; i < 81; i += 10) { soundfilename = readdir(sounddir); if (soundfilename == NULL) break; else { if (strstr(soundfilename->d_name, ".au") != NULL) { if (i > 60) { i = 10; j++; } strncpy(printname, soundfilename->d_name, 6); mvprintw(j, i, "%s", printname); refreshp(); } else if (i >= 10) i -= 10; } } closedir(sounddir); // Play back contest recording. case '4': mvprintw(15, 20, "Play back file (ddhhmmxx): "); refreshp(); echo(); getnstr(playbackfile, 8); noecho(); strcpy(commands, "play -d "); strcat(commands, sc_device); strcat(commands, " ~/tlf/soundlogs/"); if (strlen(playbackfile) > 6) { strncat(commands, playbackfile, 6); strcat(commands, ".au trim "); strcat(commands, playbackfile + 6); } else if (strlen(playbackfile) < 5) { strcat(commands, playbackfile); strcat(commands, "00.au"); } else { strcat(commands, playbackfile); strcat(commands, ".au"); } mvprintw(16, 20, "Use Ctrl-c to stop and return to tlf"); mvprintw(18, 20, ""); refreshp(); IGNORE(system(commands));; runnit = 0; break; case 27: runnit = 0; } } } tlf-1.4.0/src/background_process.c0000644000175000017500000002343413562576621014055 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011, 2014 Thomas Beierlein * * 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 #include #include "err_utils.h" #include "fldigixmlrpc.h" #include "getctydata.h" #include "get_time.h" #include "gettxinfo.h" #include "lancode.h" #include "log_to_disk.h" #include "qsonr_to_str.h" #include "qtc_log.h" #include "qtcutil.h" #include "rtty.h" #include "searchlog.h" // Includes glib.h #include "sendbuf.h" #include "set_tone.h" #include "splitscreen.h" #include "tlf.h" #include "tlf_curses.h" #include "write_keyer.h" #include "qtcvars.h" extern int this_second; extern int cluster; extern int packetinterface; extern int lan_active; extern char lan_message[]; extern char lan_recv_message[]; extern int recv_error; extern char thisnode; extern int lanspotflg; extern char talkarray[5][62]; extern freq_t node_frequencies[MAXNODES]; extern int qsonum; extern char qsonrstr[5]; extern int lanqsos; extern int highqsonr; extern char zone_export[]; extern long lantime; extern long timecorr; extern int timeoffset; extern char call[]; extern int trxmode; extern int digikeyer; extern int trx_control; static int stop_backgrnd_process = 1; /* dont start until we know what we are doing */ static pthread_mutex_t stop_backgrnd_process_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t start_backgrnd_process_cond = PTHREAD_COND_INITIALIZER; static pthread_cond_t backgrnd_process_stopped_cond = PTHREAD_COND_INITIALIZER; int cw_simulator(void); void stop_background_process(void) { pthread_mutex_lock(&stop_backgrnd_process_mutex); assert(stop_backgrnd_process == 0); stop_backgrnd_process = 1; pthread_cond_wait(&backgrnd_process_stopped_cond, &stop_backgrnd_process_mutex); pthread_mutex_unlock(&stop_backgrnd_process_mutex); } void start_background_process(void) { pthread_mutex_lock(&stop_backgrnd_process_mutex); assert(stop_backgrnd_process == 1); stop_backgrnd_process = 0; pthread_cond_broadcast(&start_backgrnd_process_cond); pthread_mutex_unlock(&stop_backgrnd_process_mutex); } static void background_process_wait(void) { pthread_mutex_lock(&stop_backgrnd_process_mutex); if (stop_backgrnd_process) { pthread_cond_broadcast(&backgrnd_process_stopped_cond); pthread_cond_wait(&start_backgrnd_process_cond, &stop_backgrnd_process_mutex); } pthread_mutex_unlock(&stop_backgrnd_process_mutex); } void *background_process(void *ptr) { extern int landebug; extern struct tm *time_ptr; static int i; static char prmessage[256]; static int lantimesync = 0; static int fldigi_rpc_cnt = 0; int n; char debugbuffer[160]; FILE *fp; i = 1; while (i) { background_process_wait(); usleep(10000); if (packetinterface != 0) { receive_packet(); } if (trxmode == DIGIMODE && digikeyer != NO_KEYER) rx_rtty(); /* * calling Fldigi XMLRPC method, which reads the Fldigi's carrier: * fldigi_xmlrpc_get_carrier() * this function helps to show the correct freq of the RIG: reads * the carrier value from Fldigi, and stores in a variable; then * it readable by fldigi_get_carrier() * only need at every 2nd cycle * see fldigixmlrpc.[ch] * * There are two addition routines * fldigi_get_log_call() reads the callsign, if user clicks to a string in Fldigi's RX window * fldigi_get_log_serial_number() reads the exchange */ if (digikeyer == FLDIGI && fldigi_isenabled() && trx_control == 1) { if (fldigi_rpc_cnt == 0) { fldigi_xmlrpc_get_carrier(); fldigi_get_log_call(); fldigi_get_log_serial_number(); } fldigi_rpc_cnt = 1 - fldigi_rpc_cnt; } if (stop_backgrnd_process == 0) { write_keyer(); cw_simulator(); } if (lan_active == 1) { if (lan_message[0] == '\0') { if (lan_recv() < 0) { recv_error++; } else { lan_message[strlen(lan_message) - 1] = '\0'; } } if (landebug == 1) { if ((fp = fopen("debuglog", "a")) == NULL) { fprintf(stdout, "store_qso.c: Error opening debug file.\n"); } else { get_time(); strftime(debugbuffer, 80, "%H:%M:%S-", time_ptr); if (strlen(lan_message) > 2) { strcat(debugbuffer, lan_message); strcat(debugbuffer, "\n"); fputs(debugbuffer, fp); } fclose(fp); } } if ((*lan_message != '\0') && (lan_message[0] == thisnode)) { TLF_LOG_WARN("%s", "Warning: NODE ID CONFLICT ?! You should use another ID! "); } if ((*lan_message != '\0') && (lan_message[0] != thisnode) && (stop_backgrnd_process != 1)) { switch (lan_message[1]) { case LOGENTRY: log_to_disk(true); break; case QTCRENTRY: store_qtc(lan_message + 2, RECV, QTC_RECV_LOG); break; case QTCSENTRY: store_qtc(lan_message + 2, SEND, QTC_SENT_LOG); break; case QTCFLAG: parse_qtc_flagline(lan_message + 2); break; case CLUSTERMSG: strncpy(prmessage, lan_message + 2, 80); if (strstr(prmessage, call) != NULL) { // alert for cluster messages TLF_LOG_INFO(prmessage); } addtext(prmessage); break; case TLFSPOT: strncpy(prmessage, lan_message + 2, 80); lanspotflg = 1; addtext(prmessage); lanspotflg = 0; break; case TLFMSG: for (int t = 0; t < 4; t++) strcpy(talkarray[t], talkarray[t + 1]); talkarray[4][0] = lan_message[0]; talkarray[4][1] = ':'; talkarray[4][2] = '\0'; strncat(talkarray[4], lan_message + 2, 60); TLF_LOG_INFO(" MSG from %s", talkarray[4]); break; case FREQMSG: if ((lan_message[0] >= 'A') && (lan_message[0] <= 'A' + MAXNODES)) { node_frequencies[lan_message[0] - 'A'] = atof(lan_message + 2) * 1000.0; break; } case INCQSONUM: n = atoi(lan_message + 2); if (highqsonr < n) highqsonr = n; if ((qsonum <= n) && (n > 0)) { qsonum = highqsonr + 1; qsonr_to_str(); } lan_message[0] = '\0'; case TIMESYNC: if ((lan_message[0] >= 'A') && (lan_message[0] <= 'A' + MAXNODES)) { lantime = atoi(lan_message + 2); if (lantimesync == 1) timecorr = ((4 * timecorr) + lantime - (time(0) + (timeoffset * 3600L))) / 5; else { timecorr = lantime - (time(0) + (timeoffset * 3600L)); lantimesync = 1; } break; } } lan_message[0] = '\0'; lan_message[1] = '\0'; } } gettxinfo(); /* get freq info from TRX */ } return (NULL); } /* CW Simulator * works only for RUN mode in CQWW */ static void twoSpaces() { sendmessage(" "); write_keyer(); } void setSimulatorState(int n) { extern int simulator; extern int simulator_mode; if (trxmode == CWMODE || trxmode == DIGIMODE) { if (simulator != 0) simulator_mode = n; } } int cw_simulator(void) { extern int simulator; extern int simulator_mode; extern int simulator_seed; extern char simulator_tone[5]; extern char tonestr[5]; extern char tonecpy[5]; extern int system_secs; extern int this_second; static int callnumber; char callcpy[80]; if (simulator == 0) return -1; if (simulator_mode == 1) { attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 3, "Sim"); refreshp(); strcpy(tonecpy, tonestr); switch (this_second % 10) { case 0: strcpy(simulator_tone, "625"); break; case 1: strcpy(simulator_tone, "800"); break; case 2: strcpy(simulator_tone, "650"); break; case 3: strcpy(simulator_tone, "750"); break; case 4: strcpy(simulator_tone, "700"); break; case 5: strcpy(simulator_tone, "725"); break; case 6: strcpy(simulator_tone, "675"); break; case 7: strcpy(simulator_tone, "775"); break; case 8: strcpy(simulator_tone, "600"); break; case 9: strcpy(simulator_tone, "640"); break; default: strcpy(simulator_tone, "750"); break; } strcpy(tonestr, simulator_tone); write_tone(); twoSpaces(); callnumber = callnumber + simulator_seed + system_secs - (60 * (int)(system_secs / 60)); if (callnumber >= 27000) callnumber -= 27000; sendmessage(CALLMASTERARRAY(callnumber)); write_keyer(); simulator_mode = 0; strcpy(tonestr, tonecpy); write_tone(); } if (simulator_mode == 2) { char *str; strcpy(tonecpy, tonestr); strcpy(tonestr, simulator_tone); write_tone(); twoSpaces(); strcpy(callcpy, CALLMASTERARRAY(callnumber)); getctydata(callcpy); str = g_strdup_printf("TU 5NN %2s", zone_export); sendmessage(str); write_keyer(); g_free(str); simulator_mode = 0; strcpy(tonestr, tonecpy); write_tone(); } if (simulator_mode == 3) { char *str; strcpy(tonecpy, tonestr); strcpy(tonestr, simulator_tone); write_tone(); twoSpaces(); strcpy(callcpy, CALLMASTERARRAY(callnumber)); getctydata(callcpy); str = g_strdup_printf("DE %s TU 5NN %s", CALLMASTERARRAY(callnumber), zone_export); sendmessage(str); write_keyer(); g_free(str); simulator_mode = 0; strcpy(tonestr, tonecpy); write_tone(); } return 0; } tlf-1.4.0/src/muf.c0000644000175000017500000001770413562576621010772 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2010-2011 Thomas Beierlein * * 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 #include "dxcc.h" #include "get_time.h" #include "sunup.h" #include "tlf.h" #include "tlf_panel.h" #include "ui_utils.h" #define RADIAN (180.0 / M_PI) extern double r; extern int m; extern struct tm *time_ptr; double yt; double xt; double yr; double xr; int t = 21; double xn, xs, ls, h, ff, x, yn_, q, k, lm, u, a; //FIXME: q should be local variable static double power(man, ex) double man, ex; { return exp(ex * log(man)); } static void interlat() { double yi; /* Intermediate Latitude & Longitude calculations */ q = cos(u / RADIAN) * cos(xt / RADIAN) * sin(k * lm / RADIAN); x = q + sin(xt / RADIAN) * cos(k * lm / RADIAN); xn = atan(x / sqrt(1 - x * x + 1e-12)) * RADIAN; q = cos(k * lm / RADIAN) - sin(xt / RADIAN) * sin(xn / RADIAN); yi = (M_PI_2 - atan(x / sqrt(1 - x * x + 1e-12))) * RADIAN; if (u < 180.0) yi = -yi; yn_ = yt + yi; if (yn_ > 180.0) yn_ -= 360.0; if (yn_ < -180.0) yn_ += 360.0; } static void mini_f2() { double temp, tl, yf, ex, yz, yg, zo, z, mh, xh, wx, sx, ty, fo, sf; yz = yn_; if (yn_ < -160.0) yz = yn_ + 360.0; yg = (20.0 - yz) / 50; temp = 1 - (yg / 7.0); zo = 20.0 * yg / (1 + yg + yg * yg) + 5.0 * (temp * temp); z = xn - zo; tl = t - yn_ / 15.0; if (tl > 24.0) tl -= 24.0; if (tl < 0.0) tl += 24.0; mh = m; if (z <= 0.0) { z = -z; mh += 6; } xh = cos(30.0 * (mh - 6.5) / RADIAN); /* 1 week delay on equinoxes */ sx = (fabs(xh) + xh) / 2.0; /* F-layer local summer variance */ wx = (fabs(xh) - xh) / 2.0; /* F-layer local winter variance */ if (z > 77.5) z = 77.5; ty = tl; if (ty < 5.0) ty = tl + 24.0; yf = (ty - 14.0 - sx * 2.0 + wx * 2.0 - r / 175.0) * (7.0 - sx * 3.0 + wx * 4.0 - r / (150.0 - wx * 75.0)); if (fabs(yf) > 60.0) yf = 60.0; x = 1 + r / (175.0 + sx * 175.0); fo = 6.5 * x * cos(yf / RADIAN) * sqrt(cos((z - sx * 5.0 + wx * 5.0) / RADIAN)); ex = -0.5; temp = cos(a / RADIAN) * 6367.0 / (6367.0 + h); sf = power(1.0 - temp * temp, ex); ff = fo * sf; ff *= 1.15; } static void e_layer() { double temp, fe, se, ex, xz; q = sin(xn / RADIAN) * sin(xs / RADIAN); x = q + cos(xn / RADIAN) * cos(xs / RADIAN) * cos((yn_ - 15.0 * (t - 12.0)) / RADIAN); xz = (M_PI_2 - atan(x / sqrt(1 - x * x + 1e-12))) * RADIAN; if (xz <= 85.0) { ex = 1.0 / 3.0; fe = 3.4 * (1.0 + 0.0016 * r) * power(cos(xz / RADIAN), ex); } else { ex = -0.5; fe = 3.4 * (1.0 + 0.0016 * r) * power(xz - 80.0, ex); } temp = cos(a / RADIAN); se = power(1.0 - (0.965 * temp * temp), ex); //se /= 4; //se += 1; ls = 0.028 * fe * fe * se; // ls *= 15; } int muf(void) { extern double QTH_Lat; extern double QTH_Long; extern double DEST_Lat; extern double DEST_Long; double sunrise; double sundown; extern int mycountrynr; extern int countrynr; extern char lastwwv[]; extern char backgrnd_str[]; dxcc_data *dx; int row; static double la, l, mf, lh; static long ve, ho; char mycountry[40]; char country[40]; int i; char time_buf[25]; int su, sd, su_min, sd_min; double ab; double n; double td; PANEL *pan; WINDOW *win; win = newwin(LINES, 80, 0, 0); pan = new_panel(win); n = 0.0; xt = QTH_Lat; yt = QTH_Long; xr = DEST_Lat; yr = DEST_Long; get_time(); //strftime(time_buf, 60, " %d-%b-%Y %H:%M ", time_ptr); ### bug fix strftime(time_buf, sizeof(time_buf), " %d-%b-%Y %H:%M ", time_ptr); q = sin(xt / RADIAN) * sin(xr / RADIAN); x = q + cos(xt / RADIAN) * cos(xr / RADIAN) * cos(yt / RADIAN - yr / RADIAN); la = (M_PI_2 - atan(x / sqrt(1 - x * x + 1e-12))) * RADIAN; l = 111.1 * la; q = sin(xr / RADIAN) - sin(xt / RADIAN) * cos(la / RADIAN); x = q / cos(xt / RADIAN) / sin(la / RADIAN); u = (M_PI_2 - atan(x / sqrt(1 - x * x + 1e-12))) * RADIAN; if (yt - yr <= 0) u = 360 - u; h = 275 + r / 2; xs = 23.4 * cos(30 * (m - 6.25) / RADIAN); n++; lh = l / n; while (lh > 4000.0) { n++; lh = l / n; } lm = la / n; a = atan((cos(0.5 * lm / RADIAN) - 6367.0 / (h + 6367.0)) / sin(0.5 * lm / RADIAN)) * RADIAN; while (a < 1.5) { n++; lh /= n; while (lh > 4000.0) { n++; lh = l / n; } lm = la / n; a = atan((cos(0.5 * lm / RADIAN) - 6367.0 / (h + 6367.0)) / sin(0.5 * lm / RADIAN)) * RADIAN; } dx = dxcc_by_index(mycountrynr); strncpy(mycountry, dx->countryname, 25); dx = dxcc_by_index(countrynr); strncpy(country, dx->countryname, 25); wclear(win); wattron(win, modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (i = 0; i < LINES; i++) mvwprintw(win, i, 0, backgrnd_str); mvwprintw(win, 1, 40, "%s", country); mvwprintw(win, 1, 0, " SSN: %3.0f ", r); mvwprintw(win, 3, 40, "Dist : %5ld KM", (long) floor(l + 0.5)); mvwprintw(win, 4, 40, "Azim : %3ld degrees.", (long) floor(u + 0.5)); mvwprintw(win, 5, 40, "F-hops: %2.0f", n); sunup(xr, &sunrise, &sundown); /* calculate local sunup and down at destination lattitude */ /* transform to UTC based on longitude from country description */ td = (yr * 4) / 60 ; /* 4 degree/min */ sunrise += td; sundown += td; if (sunrise >= 24.0) sunrise -= 24.0; else if (sunrise <= 0.0) sunrise += 24.0; if (sundown >= 24.0) sundown -= 24.0; else if (sundown <= 0.0) sundown += 24.0; su = (int)(sunrise); sd = (int)(sundown); su_min = (int)((sunrise - su) * 60); sd_min = (int)((sundown - sd) * 60); mvwprintw(win, 3, 0, time_buf); mvwprintw(win, 7, 40, "sun : %02d:%02d-%02d:%02d UTC", su, su_min, sd, sd_min); lastwwv[75] = '\0'; /* cut the bell chars */ if ((strlen(lastwwv) >= 28) && (r != 0)) mvwprintw(win, 10, 40, "Condx: %s", lastwwv + 26); /* print WWV info */ q = 34.0; row = 4; while (q >= 2.0) { if ((row == 7) || (row == 10) || (row == 14) || (row == 17)) { mvwprintw(win, row, 0, "|_________________________|%2.0f", q); } else mvwprintw(win, row, 0, "| |%2.0f", q); /* 25 spaces */ q -= 2.0; row++; } mvwprintw(win, 20, 0, "---------------------------"); /* 27 dashes */ mvwprintw(win, 21, 0, " 0 2 4 6 8 10 14 18 22 H (UTC)"); mvwprintw(win, 4, 30, "MHz"); refreshp(); for (t = 1; t <= 24; t++) { ab = 0.0; k = 0.5; interlat(); mini_f2(); mf = ff; k = n - 0.5; interlat(); mini_f2(); if (ff < mf) mf = ff; ve = 21 - (long) floor(mf / 2.0 + 0.5); ho = t + 1; if (ve < 4) ve = 4; mvwprintw(win, (int) ve, (int) ho, "+"); while (k <= n - 0.25) { interlat(); e_layer(); ab += ls; k += 0.5; } ve = 20 - (long) floor(ab + 0.5); if (ve < 4) ve = 4; if (ve > 20) ve = 20; mvwprintw(win, (int) ve, (int) ho, "-"); } mvwprintw(win, 23, 0, " --- Press a key to continue --- "); refreshp(); (void)key_get(); hide_panel(pan); del_panel(pan); delwin(win); return (0); } tlf-1.4.0/src/initial_exchange.h0000644000175000017500000000320313562576621013470 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 -2004 Rein Couperus * * 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 */ /* ------------------------------------------------------------------------------ * initial exchange.h *-------------------------------------------------------------------------------*/ #ifndef INITIAL_EXCHANGE_H #define INITIAL_EXCHANGE_H #define MAX_CALL_LENGTH 13 #define MAX_IE_LENGTH 30 /** Dataelement for one initial entry item */ struct ie_list { struct ie_list *next; /**< pointer to next element */ char call[MAX_CALL_LENGTH + 1]; /**< call of the station */ char exchange [MAX_IE_LENGTH + 1]; /**< initial exchange field */ }; /** * Make linked list from initial exchange file. * File must be in CALL,EXCHANGE format. * Returns pointer to the top of the list. */ struct ie_list *make_ie_list(char *file); void free_ie_list(struct ie_list *head); #endif /* INITIAL_EXCHANGE_H */ tlf-1.4.0/src/listmessages.h0000644000175000017500000000171613562576621012707 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef LISTMESSAGES_H #define LISTMESSAGES_H void listmessages(void); #endif /* end of include guard: LISTMESSAGES_H */ tlf-1.4.0/src/qtc_log.c0000644000175000017500000001730313562576621011626 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Ervin Hegedüs - HA2OS * * 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 */ /*------------------------------------------------------------------------ Log received or sent QTC lines to disk, clear the qtc list ------------------------------------------------------------------------*/ #include #include #include "lancode.h" #include "qtc_log.h" #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "tlf_curses.h" extern int trx_control; extern freq_t freq; int log_recv_qtc_to_disk(int qsonr) { int i; struct read_qtc_t qtc_line; for (i = 0; i < 10; i++) { if (strlen(qtcreclist.qtclines[i].time) == 4 && strlen(qtcreclist.qtclines[i].callsign) > 0 && strlen(qtcreclist.qtclines[i].serial) > 0) { // all fields are filled qtc_line.direction = RECV; strcpy(qtc_line.band, band[bandinx]); if (trxmode == CWMODE) { strcpy(qtc_line.mode, "CW "); } else if (trxmode == SSBMODE) { strcpy(qtc_line.mode, "PH "); } else { strcpy(qtc_line.mode, "DIG"); } strncpy(qtc_line.date, qtcreclist.qtclines[i].receivedtime, 9); qtc_line.date[9] = '\0'; strncpy(qtc_line.time, qtcreclist.qtclines[i].receivedtime + 10, 5); qtc_line.time[5] = '\0'; qtc_line.qsonr = qsonr; strcpy(qtc_line.call, qtcreclist.callsign); qtc_line.qtchead_serial = qtcreclist.serial; qtc_line.qtchead_count = qtcreclist.count; strcpy(qtc_line.qtc_time, qtcreclist.qtclines[i].time); qtc_line.qtc_time[4] = '\0'; strcpy(qtc_line.qtc_call, qtcreclist.qtclines[i].callsign); qtc_line.qtc_call[strlen(qtcreclist.qtclines[i].callsign)] = '\0'; qtc_line.qtc_serial = atoi(qtcreclist.qtclines[i].serial); if (trx_control == 1) { qtc_line.freq = freq; } else { qtc_line.freq = 0; } qtc_line.callpos = 0; make_qtc_logline(qtc_line, QTC_RECV_LOG); } } /* clear all line infos */ for (i = 0; i < 10; i++) { qtcreclist.qtclines[i].time[0] = '\0'; qtcreclist.qtclines[i].callsign[0] = '\0'; qtcreclist.qtclines[i].serial[0] = '\0'; qtcreclist.qtclines[i].status = 0; qtcreclist.qtclines[i].confirmed = 0; qtcreclist.qtclines[i].receivedtime[0] = '\0'; } for (i = 0; i < QTC_RY_LINE_NR; i++) { qtc_ry_lines[i].content[0] = '\0'; qtc_ry_lines[i].attr = 0; } qtc_ry_currline = 0; qtc_ry_copied = 0; /* clear record list */ qtcreclist.count = 0; qtcreclist.serial = 0; qtcreclist.confirmed = 0; qtcreclist.sentcfmall = 0; qtcreclist.callsign[0] = '\0'; return (0); } int log_sent_qtc_to_disk(int qsonr) { int i; char *tempstrp; struct read_qtc_t qtc_line; for (i = 0; i < 10; i++) { if (qtclist.qtclines[i].saved == 0 && qtclist.qtclines[i].flag == 1 && qtclist.qtclines[i].sent == 1) { // not saved and marked for sent qtc_line.direction = SEND; strcpy(qtc_line.band, band[bandinx]); if (trxmode == CWMODE) { strcpy(qtc_line.mode, "CW "); } else if (trxmode == SSBMODE) { strcpy(qtc_line.mode, "PH "); } else { strcpy(qtc_line.mode, "DIG"); } strncpy(qtc_line.date, qtclist.qtclines[i].senttime, 9); qtc_line.date[9] = '\0'; strncpy(qtc_line.time, qtclist.qtclines[i].senttime + 10, 5); qtc_line.time[5] = '\0'; qtc_line.qsonr = qsonr; strcpy(qtc_line.call, qtclist.callsign); qtc_line.qtchead_serial = qtclist.serial; qtc_line.qtchead_count = qtclist.count; strcpy(qtc_line.qtcstr, qtclist.qtclines[i].qtc); tempstrp = strtok(qtc_line.qtcstr, " "); if (tempstrp != NULL) { strcpy(qtc_line.qtc_time, tempstrp); } else { strcpy(qtc_line.qtc_time, "----"); } tempstrp = strtok(NULL, " "); g_strchomp(tempstrp); if (tempstrp != NULL) { strcpy(qtc_line.qtc_call, tempstrp); } else { strcpy(qtc_line.qtc_call, "-------------"); } tempstrp = strtok(NULL, " "); g_strchomp(tempstrp); if (tempstrp != NULL) { qtc_line.qtc_serial = atoi(tempstrp); } else { qtc_line.qtc_serial = 0; } qtc_line.callpos = qtclist.qtclines[i].qsoline + 1; if (trx_control == 1) { qtc_line.freq = freq; } else { qtc_line.freq = 0; } make_qtc_logline(qtc_line, QTC_SENT_LOG); } } for (i = 0; i < 10; i++) { qtclist.qtclines[i].qtc[0] = '\0'; qtclist.qtclines[i].flag = 0; qtclist.qtclines[i].saved = 0; qtclist.qtclines[i].sent = 0; qtclist.qtclines[i].senttime[0] = '\0'; } qtclist.count = 0; qtclist.marked = 0; qtclist.totalsent = 0; return (0); } /* common code to store sent or received QTC's */ void store_qtc(char *loglineptr, int direction, char *filename) { FILE *fp; char callsign[15]; char temps[15]; int tempi; if ((fp = fopen(filename, "a")) == NULL) { fprintf(stdout, "Error opening file: %s\n", filename); endwin(); exit(1); } fputs(loglineptr, fp); fclose(fp); total++; if (direction == SEND) { /* find maximum sent QTC block serial */ g_strlcpy(temps, loglineptr + 50, 5); // get serial of qtc block tempi = atoi(temps); if (tempi > nr_qtcsent) { nr_qtcsent = tempi; } /* mark corresponding qso line as used for QTC */ g_strlcpy(temps, loglineptr + 12, 5); // qso nr in qso list tempi = atoi(temps) - 1; qsoflags_for_qtc[tempi] = 1; /* find first unused QSO number for QTCs */ if (tempi == next_qtc_qso && tempi < MAX_QSOS) { while (qsoflags_for_qtc[tempi++] == 1) { if (tempi == MAX_QSOS) break; next_qtc_qso = tempi; } } } /* remember callsign, build number of sent or received QTC's */ parse_qtcline(loglineptr, callsign, direction); qtc_inc(callsign, direction); } void make_qtc_logline(struct read_qtc_t qtc_line, char *fname) { char nodemark = ' '; char qtclogline[120]; char padding[2] = " "; if (lan_active == 1) { nodemark = thisnode; } memset(qtclogline, '\0', 120); if (qtc_line.qtc_serial >= 1000) { padding[0] = '\0'; } if (qtc_line.direction == RECV) { sprintf(qtclogline, "%s%s %04d %s %s %c %-14s %04d %04d %s %-15s%s%03d %7.1f\n", qtc_line.band, qtc_line.mode, qtc_line.qsonr, qtc_line.date, qtc_line.time, nodemark, qtc_line.call, qtc_line.qtchead_serial, qtc_line.qtchead_count, qtc_line.qtc_time, qtc_line.qtc_call, padding, qtc_line.qtc_serial, qtc_line.freq / 1000.0); store_qtc(qtclogline, qtc_line.direction, fname); if (lan_active == 1) { send_lan_message(QTCRENTRY, qtclogline); } } if (qtc_line.direction == SEND) { sprintf(qtclogline, "%s%s %04d %04d %s %s %c %-14s %04d %04d %s %-14s%s%03d %7.1f\n", qtc_line.band, qtc_line.mode, qtc_line.qsonr, qtc_line.callpos, qtc_line.date, qtc_line.time, nodemark, qtc_line.call, qtc_line.qtchead_serial, qtc_line.qtchead_count, qtc_line.qtc_time, qtc_line.qtc_call, padding, qtc_line.qtc_serial, qtc_line.freq / 1000.0); store_qtc(qtclogline, qtc_line.direction, fname); if (lan_active == 1) { send_lan_message(QTCSENTRY, qtclogline); } } } tlf-1.4.0/src/genqtclist.c0000644000175000017500000000665413562576621012362 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013-2014 Ervin Hegedüs - HA2OS * * 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 */ /* ------------------------------------------------------------ * Generate QTC list to send * *--------------------------------------------------------------*/ #include #include #include #include "qtcvars.h" // Includes globalvars.h void genqtcline(char *qtc, char *qsoline); /** generate list of QTCs to send * * \param callsign - the call of the station we send the QTCs to * \param nrofqtc - maximum number of lines to send * \return number of actual lines in the qtclist */ int genqtclist(char *callsign, int nrofqtc) { int qtclistlen; int s = 0, i = 0; qtclistlen = QTC_LINES; if (nrofqtc >= 0 && nrofqtc < QTC_LINES) { qtclistlen = nrofqtc; } /* initialize qtclist */ qtclist.serial = nr_qtcsent + 1; qtclist.marked = 0; qtclist.totalsent = 0; qtclist.count = 0; strncpy(qtclist.callsign, callsign, strlen(callsign)); for (s = 0; s < qtclistlen; s++) { qtclist.qtclines[s].qtc[0] = '\0'; qtclist.qtclines[s].flag = 0; qtclist.qtclines[s].saved = 0; qtclist.qtclines[s].sent = 0; qtclist.qtclines[s].senttime[0] = '\0'; } s = next_qtc_qso; while (qtclist.count < qtclistlen && s < nr_qsos) { if (strlen(callsign) == 0 || strncmp(qsos[s] + 29, callsign, strlen(callsign)) != 0) { /* exclude current callsign */ if (qsoflags_for_qtc[s] == 0) { /* qso line not yet used for QTC */ genqtcline(qtclist.qtclines[i].qtc, qsos[s]); if (trxmode == DIGIMODE) { qtclist.qtclines[i].flag = 1; qtclist.marked++; } else { if (i == 0) { qtclist.qtclines[i].flag = 1; qtclist.marked++; } else { qtclist.qtclines[i].flag = 0; } } /* remember number of the corresponding QSO line */ qtclist.qtclines[i].qsoline = s; qtclist.count++; i++; /* next qtcline */ } } s++; /* try next qso */ } return qtclist.count; } void genqtcline(char *qtc, char *qsoline) { int i, qpos, nr; char tstring[5]; /* pick out qso time hhmm */ strncpy(qtc, qsoline + 17, 2); strncpy(qtc + 2, qsoline + 20, 2); qtc[4] = ' '; /* copy callsign */ qpos = 5; for (i = 29; qsoline[i] != ' '; i++) { qtc[qpos] = qsoline[i]; qpos++; } while (qpos < 20) { qtc[qpos] = ' '; qpos++; } /* add finally 3 or 4 digit exchange */ strncpy(tstring, qsoline + 54, 4); nr = atoi(tstring); // 3 digit if (nr < 1000) { sprintf(tstring, "%03d ", nr); } // 4 digit else { sprintf(tstring, "%d", nr); } strncpy(qtc + qpos, tstring, strlen(tstring)); qpos += 4; qtc[qpos] = '\0'; } tlf-1.4.0/src/writeparas.c0000644000175000017500000001045513562576621012360 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Write parameter file to disk * *--------------------------------------------------------------*/ #include #include #include #include #include "background_process.h" #include "cw_utils.h" #include "err_utils.h" #include "globalvars.h" #include "tlf.h" #include "tlf_curses.h" /* write a .paras file */ int writeparas_file(void) { extern char call[]; extern char message[][80]; extern char headerline[]; extern char logfile[]; extern char whichcontest[]; extern int shortqsonr; extern char para_word[]; extern int cluster; extern int searchflg; extern int demode; extern int contest; extern int announcefilter; extern int showscore_flag; extern int cqdelay; extern int trxmode; FILE *fp; int i; if (strlen(call) <= 3) { TLF_LOG_WARN("Cannot write parameters file: data corrupt... "); return (-1); } if ((fp = fopen(".paras", "w")) == NULL) { TLF_LOG_ERR("writeparas.c: Error opening file."); } fputs("# Call ----------------------------------\n", fp); fputs(call, fp); fputs("# Messages F1...F12 ---------------------\n", fp); for (i = 0; i <= 13; i++) { if (i == 12) fputs("# TU message S&P mode---------------------\n", fp); if (i == 13) fputs("# TU message CQ mode---------------------\n", fp); fputs(message[i], fp); } fputs("# Digi Messages F1...F12 ---------------------\n", fp); for (i = 0; i <= 13; i++) { if (i == 12) fputs("# TU message S&P mode---------------------\n", fp); if (i == 13) fputs("# TU message CQ mode---------------------\n", fp); fputs(digi_message[i], fp); } fputs("# Info for top status line----------------\n", fp); fputs(headerline, fp); fputs("# Logfile--------------------\n", fp); fputs(logfile, fp); fputs("\n", fp); fputs("# Contest--------------------\n", fp); fputs(whichcontest, fp); fputs("\n", fp); fputs("# Parameters--don't change----\n", fp); if (shortqsonr == 1) para_word[0] = 'S'; /* short */ else para_word[0] = 'L'; /* long */ if (cluster == 0) para_word[1] = 'O'; /* OFF */ else if (cluster == 1) para_word[1] = 'M'; /* MAP */ else if (cluster == 2) para_word[1] = 'S'; /* SPOTS */ else if (cluster == 3) para_word[1] = 'A'; /* All */ if (searchflg == 1) para_word[2] = 'D'; /* DISPLAY */ else para_word[2] = 'N'; /* NO DISPLAY */ if (demode == 1) para_word[3] = 'D'; /* DE mode on */ else para_word[3] = 'N'; /* DE mode off */ if (contest == 1) para_word[4] = 'C'; /* contest mode */ else para_word[4] = 'G'; /* general qso mode */ if (announcefilter == 1) para_word[5] = 'F'; /* filter on */ else para_word[5] = 'N'; /* off */ if (showscore_flag == 0) para_word[6] = 'N'; /* No score window */ else para_word[6] = 'S'; /* show score window */ para_word[7] = 48 + speed; if (cqdelay > 0 && cqdelay < 23) para_word[8] = 48 + cqdelay; if (trxmode == CWMODE) /* use fifo for cw output */ para_word[9] = 'C'; else para_word[9] = 'P'; para_word[10] = '\n'; para_word[11] = '\0'; fputs(para_word, fp); fclose(fp); return (0); } /* write .paras fiel with background thread stopped */ int writeparas(void) { int result; stop_background_process(); result = writeparas_file(); start_background_process(); return result; } tlf-1.4.0/src/score.c0000644000175000017500000002327113562576621011312 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedus * 2013-2015 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * score * *--------------------------------------------------------------*/ #include #include #include #include "focm.h" #include "getctydata.h" #include "locator2longlat.h" #include "qrb.h" #include "tlf.h" int calc_continent(int zone); /* check if hiscall is in COUNTRY_LIST from logcfg.dat */ int country_found(char prefix[]) { extern int countrynr; extern char hiscall[]; extern char call[]; extern char countrylist[][6]; char tmpcall[15]; int counter = 0; if (strlen(hiscall) == 0) { strcpy(tmpcall, call); } else strcpy(tmpcall, hiscall); countrynr = getctydata(tmpcall); while (strlen(countrylist[counter]) != 0) { if (getctydata(countrylist[counter]) == getctydata(tmpcall)) { return 1; } counter++; } return 0; } int exist_in_country_list() { extern char pxstr[]; char prefix[10]; strcpy(prefix, pxstr); if (country_found(prefix) == 1) { return (1); } else { if ((prefix[strlen(prefix) - 1] < 58) /* last char '0'..'9' */ && (prefix[strlen(prefix) - 1] > 47)) { prefix[strlen(prefix) - 1] = '\0'; /* strip number */ if (country_found(prefix) == 1) { return 1; } else { if ((prefix[strlen(prefix) - 1] < 58) /* see above */ && (prefix[strlen(prefix) - 1] > 47)) { prefix[strlen(prefix) - 1] = '\0'; if (country_found(prefix) == 1) return (1); else return (0); } else return 0; } } else return 0; } } /* HA2OS - check if continent is in CONTINENT_LIST from logcfg.dat */ int continent_found() { extern char continent[]; extern char continent_multiplier_list[7][3]; int mit_fg = 0; while (strlen(continent_multiplier_list[mit_fg]) != 0) { if (strcmp(continent_multiplier_list[mit_fg], continent) == 0) { return 1; } mit_fg++; } return 0; } /* apply bandweigth scoring * * at the moment only LOWBAND_DOUBLES (<30m) can be active */ int apply_bandweigth(int points) { extern int lowband_point_mult; extern int bandinx; extern int bandweight_points[]; if (lowband_point_mult != 0 && (bandinx < BANDINDEX_30)) points *= 2; points *= bandweight_points[bandinx]; return points; } /* portable stations may count double * see PORTABLE_X2 */ int portable_doubles(int points) { extern int portable_x2; extern char hiscall[]; char *loc; if (portable_x2 == 1) { // portable x2 loc = strstr(hiscall, "/P"); if (loc == hiscall + strlen(hiscall) - 2) { points *= 2; } } return points; } /* apply points by mode */ int scoreByMode() { extern int cwpoints; extern int ssbpoints; extern int trxmode; switch (trxmode) { case CWMODE: return cwpoints; case SSBMODE: return ssbpoints; default: return 0; } } int scoreByContinentOrCountry() { extern char hiscall[]; extern int countrylist_points; extern int countrylist_only; extern int continentlist_only; extern int continentlist_points; extern int my_country_points; extern int my_cont_points; extern int dx_cont_points; extern int countrynr; extern int mycountrynr; extern char continent[]; extern char mycontinent[]; int points = 0; int inList = 0; inList = exist_in_country_list(); if (countrylist_only == 1) { if (inList == 1 && countrylist_points != -1) points = countrylist_points; } else { if (inList == 1) { if (countrylist_points != -1) points = countrylist_points; if (countrynr == mycountrynr) { if (my_country_points != -1) points = my_country_points; else if (my_cont_points != -1) points = my_cont_points; else points = 0; } } else if (countrynr == mycountrynr) { if (my_country_points != -1) points = my_country_points; else if (my_cont_points != -1) points = my_cont_points; } else if (strcmp(continent, mycontinent) == 0) { if (my_cont_points != -1) points = my_cont_points; } else if (dx_cont_points != -1) points = dx_cont_points; } /* HA2OS mods */ // only continent list allowed if (continentlist_only == 1) { if (continent_found() == 1) { // if we are on DX continent if (strcmp(continent, mycontinent) == 0) { points = my_cont_points; } else if (continentlist_points != -1) { points = continentlist_points; } } else { points = 0; } } return points; } /** default scoring code * * the default scoring rules will be applied if no contest specific rules * are active * \return points for QSO */ int scoreDefault() { extern int cwpoints; extern int ssbpoints; extern int one_point; extern int two_point; extern int three_point; int points; if (one_point == 1) { points = 1; return points; } if (two_point == 1) { points = 2; return points; } if (three_point == 1) { points = 3; return points; } if (ssbpoints != 0 && cwpoints != 0) // e.g. arrl 10m contest points = scoreByMode(); else points = scoreByContinentOrCountry(); points = apply_bandweigth(points); points = portable_doubles(points); return points; } int score() { extern int dupe; extern int band_score[NBANDS]; extern int bandinx; extern int focm; extern int wpx; extern int pfxmult; extern int countrynr; extern int mycountrynr; extern char continent[]; extern char mycontinent[]; extern char comment[]; extern int cqww; extern int arrl_fd; extern int arrldx_usa; extern int w_cty; extern int ve_cty; extern int trxmode; extern char hiscall[]; extern char myqra[7]; extern int stewperry_flg; int points; int zone; if (dupe == ISDUPE) { points = 0; dupe = NODUPE; return points; } band_score[bandinx]++; /* qso's per band */ if ((arrldx_usa == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) band_score[bandinx]--; if (focm == 1) { points = foc_score(hiscall); return points; } if (wpx == 1 && pfxmult == 0) { if (countrynr == mycountrynr) { points = 1; return points; } if ((strcmp(continent, mycontinent) == 0) && (bandinx > BANDINDEX_30)) { if (strstr(mycontinent, "NA") != NULL) { points = 2; } else { points = 1; } return points; } if ((strcmp(continent, mycontinent) == 0) && (bandinx < BANDINDEX_30)) { if (strstr(mycontinent, "NA") != NULL) { points = 4; } else { points = 2; } return points; } if ((strcmp(continent, mycontinent) != 0) && (bandinx > BANDINDEX_30)) { points = 3; return points; } if ((strcmp(continent, mycontinent) != 0) && (bandinx < BANDINDEX_30)) { points = 6; return points; } } // end wpx if (cqww == 1) { if (countrynr == 0) { zone = atoi(comment); calc_continent(zone); // sets continent } if (countrynr == mycountrynr) { points = 0; return points; } if (strcmp(continent, mycontinent) == 0) { if (strstr(mycontinent, "NA") != NULL) { points = 2; } else { points = 1; } return points; } else { points = 3; return points; } } /* end cqww */ if (arrl_fd == 1) { if (trxmode == SSBMODE) { points = 1; } else { points = 2; } return points; } // end arrl_fd if (arrldx_usa == 1) { if ((countrynr == w_cty) || (countrynr == ve_cty)) { points = 0; } else { points = 3; } return points; } if (stewperry_flg == 1) { double s1long, s1lat, s2long, s2lat, distance, azimuth; points = 0; if (strlen(comment) > 3) { locator2longlat(&s1long, &s1lat, comment); locator2longlat(&s2long, &s2lat, myqra); qrb(s1long, s1lat, s2long, s2lat, &distance, &azimuth); points = (int) ceil(distance / 500.0); } return points; } /* start of the universal scoring code */ return scoreDefault(); } /* -----------------------------------------------------------------*/ int score2(char *line) { return atoi(line + 75); } /* ----------------------------------------------------------------- */ /* calculates continent from zone and sets 'continent' variable */ int calc_continent(int zone) { extern char continent[]; switch (zone) { case 1 ... 8: strncpy(continent, "NA", 3); break; case 9 ... 13: strncpy(continent, "SA", 3); break; case 14 ... 16: strncpy(continent, "EU", 3); break; case 17 ... 26: strncpy(continent, "AS", 3); break; case 27 ... 32: strncpy(continent, "AS", 3); break; case 33 ... 39: strncpy(continent, "AF", 3); break; case 40: strncpy(continent, "EU", 3); break; default: strncpy(continent, "??", 3); } return (0); } tlf-1.4.0/src/rules.c0000644000175000017500000000637013562576621011332 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2003 LZ3NY * 2003-2004 Rein Couperus * 2011-2019 Thomas Beierlein * * 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 */ #ifndef _GNU_SOURCE #define _GNU_SOURCE // For asprintf() #endif #include #include #include #include #include "globalvars.h" #include "parse_logcfg.h" #include "setcontest.h" #include "startmsg.h" #include "tlf.h" extern char whichcontest[]; extern char logfile[]; /* This function overrides the parse_logcfg() details */ /* 10.09.2003 - LZ3NY */ int read_rules() { char contest_conf[80] = ""; /* contest_conf needs room for contest name... (PA0R) */ char basic_contest_conf[75] = PACKAGE_DATA_DIR; FILE *fp; int status = PARSE_OK; /* If no contest is given, whichcontest is set to default "qso" (PA0R, Sep 24 2003)*/ if (strlen(whichcontest) == 0) { showmsg("Contest name is empty! Assuming general qso mode!! "); strcpy(whichcontest, "qso"); return (PARSE_ERROR); } if (strlen(whichcontest) >= 40) { showmsg("Contest name is too long!"); showmsg("Exiting..."); exit(1); } strcat(contest_conf, "rules/"); strcat(contest_conf, whichcontest); /* If rules are not found in local working directory, look in /usr/local/share... (PA0R, Sep 24 2003)*/ strcat(basic_contest_conf, "/rules/"); strcat(basic_contest_conf, whichcontest); if ((fp = fopen(contest_conf, "r")) != NULL) { showstring("Reading contest rules file:", contest_conf); status = parse_configfile(fp); fclose(fp); } else if ((fp = fopen(basic_contest_conf, "r")) != NULL) { showstring("Reading contest rules file:", basic_contest_conf); status = parse_configfile(fp); fclose(fp); } else { showstring("There is no contest rules file:", contest_conf); showmsg("Assuming regular QSO operation. Logfile is qso.log"); strcpy(whichcontest, "qso"); /* default use general qso mode... (PA0R, 24 Sept. 2003) */ setcontest(); strcpy(logfile, "qso.log"); } /* * Now, for unspecified digi messages, copy from the CW message, * putting CRLF at the start, and changing the trailing \n to a * space */ int i; for (i = 0; i < 25; i++) { if (digi_message[i] == NULL) { if (asprintf(&digi_message[i], "|%s", message[i]) == -1) { showmsg("Out of memory: unable to create digi message!"); sleep(2); exit(EXIT_FAILURE); } else { char *c = strrchr(digi_message[i], '\n'); if (c) *c = ' '; } } } return status; } tlf-1.4.0/src/get_time.c0000644000175000017500000000271313562576621011772 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------------------ * First get the local time from the kernel, apply corrections * - TIME_OFFSET setting from logcfg.dat and * - time synchronistation from LAN. * Finally convert time to UTC put it into global buffer (time_ptr) * for use by other routines ---------------------------------------------------------------------------*/ #include void get_time(void) { extern struct tm *time_ptr; extern int timeoffset; extern long timecorr; time_t now; now = (time(0) + (timeoffset * 3600L) + timecorr); time_ptr = gmtime(&now); } tlf-1.4.0/src/tlf_panel.h0000644000175000017500000000251713562576621012150 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2015 Nate Bargmann * * 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 */ /* Collate the macro test boilerplate into this file and then * include this file into the Tlf source files that need panel.h * functions. * * For ncurses including panel.h also includes curses.h. */ #ifndef TLF_PANEL_H #define TLF_PANEL_H #include #if defined HAVE_NCURSESW_PANEL_H # include #elif defined HAVE_NCURSES_PANEL_H # include #elif defined HAVE_PANEL_H # include #else # error "SysV-compatible Curses Panel header file required" #endif #endif tlf-1.4.0/src/err_utils.c0000644000175000017500000000276713562576621012216 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2019 Thomas Beierlein , * * 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 "err_utils.h" #include "tlf_curses.h" #include "ui_utils.h" #include #include #include #include extern char backgrnd_str[]; void handle_logging(enum log_lvl lvl, ...) { char *fmt; char *str; va_list args; va_start(args, lvl); fmt = va_arg(args, char *); str = g_strdup_vprintf(fmt, args); va_end(args); mvprintw(LINES - 1, 0, backgrnd_str); mvprintw(LINES - 1, 0, str); refreshp(); g_free(str); switch (lvl) { case L_INFO: sleep(1); break; case L_WARN: sleep(3); break; case L_ERR: sleep(3); break; default: break; } } tlf-1.4.0/src/netkeyer.h0000644000175000017500000000304413562576621012026 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef NETKEYER_H #define NETKEYER_H #define K_RESET 0 #define K_MESSAGE 1 #define K_SPEED 2 #define K_TONE 3 #define K_ABORT 4 #define K_STOP 5 #define K_WORDMODE 6 #define K_WEIGHT 7 #define K_DEVICE 8 #define K_TOD 9 // set txdelay (turn on delay) //#define K_ADDRESS 10 // set port address of device [obsolete and has no effect] #define K_SET14 11 // set pin 14 on lpt #define K_TUNE 12 // tune #define K_PTT 13 // PTT on/off #define K_SWITCH 14 // set band switch output pins 2,7,8,9 on lpt #define K_SIDETONE 15 // set sidetone to sound card #define K_STVOLUME 16 // set sidetone volume int netkeyer(int cw_op, char *cwmessage); int netkeyer_close(void); int netkeyer_init(void); #endif /* NETKEYER_H */ tlf-1.4.0/src/qtc_log.h0000644000175000017500000000230213562576621011624 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Ervin Hegedüs - HA2OS * * * 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 */ #ifndef LOG_RECV_QTC_TO_DISK_H #define LOG_RECV_QTC_TO_DISK_H #include "cabrillo_utils.h" void store_qtc(char *loglineptr, int direction, char *filename); int log_recv_qtc_to_disk(int qsonr); int log_sent_qtc_to_disk(int qsonr); void make_qtc_logline(struct read_qtc_t qtc_line, char *fname); #endif /* end of include guard: LOG_RECV_QTC_TO_DISK_H */ tlf-1.4.0/src/readcabrillo.h0000644000175000017500000000172013562576621012622 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2017 Ervin Hegedus * * 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 */ #ifndef READ_CABRILLO_H #define READ_CABRILLO_H #define READCAB_MODE_CLI 1 int readcabrillo(int mode); #endif /* READ_CABRILLO_H */ tlf-1.4.0/src/Makefile.am0000644000175000017500000000570713562576621012073 00000000000000AM_CPPFLAGS = @GLIB_CFLAGS@ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" AM_CFLAGS = @AM_CFLAGS@ @PTHREAD_CFLAGS@ @HAMLIB_CFLAGS@ @CURSES_CFLAGS@ bin_PROGRAMS = tlf tlf_SOURCES = \ addarea.c addcall.c addmult.c addpfx.c addspot.c audio.c autocq.c \ background_process.c bandmap.c bands.c \ cabrillo_utils.c calledit.c callinput.c changefreq.c changepars.c \ checklogfile.c checkqtclogfile.c \ checkparameters.c cleanup.c clear_display.c clusterinfo.c cw_utils.c \ dxcc.c \ deleteqso.c displayit.c \ edit_last.c editlog.c err_utils.c \ fldigixmlrpc.c freq_display.c focm.c \ genqtclist.c \ get_time.c getctydata.c getexchange.c getmessages.c getpx.c \ getsummary.c gettxinfo.c getwwv.c grabspot.c \ initial_exchange.c \ keyer.c \ lancode.c last10.c listmessages.c log_to_disk.c \ logit.c logview.c locator2longlat.c \ main.c makelogline.c messagechange.c muf.c \ nicebox.c note.c netkeyer.c\ paccdx.c parse_logcfg.c prevqso.c printcall.c \ qrb.c qsonr_to_str.c qtc_log.c qtcwin.c qtcutil.c readcabrillo.c \ readcalls.c readqtccalls.c readctydata.c recall_exchange.c rules.c \ score.c scroll_log.c searchcallarray.c searchlog.c sendbuf.c \ sendqrg.c sendspcall.c set_tone.c setcontest.c \ setparameters.c show_help.c showinfo.c showpxmap.c \ showscore.c showzones.c sockserv.c speedupndown.c \ stoptx.c store_qso.c sunup.c splitscreen.c startmsg.c\ rtty.c time_update.c ui_utils.c \ write_keyer.c writecabrillo.c writeparas.c \ zone_nr.c tlf_LDADD = @LIBM_LIB@ @PTHREAD_LIBS@ @GLIB_LIBS@ @PANEL_LIBS@ @CURSES_LIBS@ \ @HAMLIB_LIBS@ @LIBXMLRPC_LIB@ @LIBXMLRPC_CLIENT_LIB@ \ @LIBXMLRPC_UTIL_LIB@ noinst_HEADERS = \ addarea.h addcall.h addmult.h addpfx.h addspot.h audio.h autocq.h \ background_process.h bandmap.h bands.h \ cabrillo_utils.h calledit.h callinput.h changefreq.h changepars.h \ checklogfile.h checkqtclogfile.h \ checkparameters.h cleanup.h clear_display.h clusterinfo.h cwkeyer.h \ cw_utils.h \ dxcc.h \ deleteqso.h displayit.h \ edit_last.h editlog.h err_utils.h \ fldigixmlrpc.h freq_display.h focm.h \ genqtclist.h \ get_time.h getctydata.h getexchange.h getmessages.h getpx.h \ getsummary.h gettxinfo.h getwwv.h globalvars.h grabspot.h \ ignore_unused.h initial_exchange.h \ keyer.h \ lancode.h last10.h listmessages.h \ log_to_disk.h logit.h logview.h locator2longlat.h \ makelogline.h messagechange.h muf.h \ nicebox.h note.h netkeyer.h\ paccdx.h parse_logcfg.h prevqso.h printcall.h \ qrb.h qsonr_to_str.h qtc_log.h qtcvars.h qtcwin.h qtcutil.h \ readcalls.h readqtccalls.h readctydata.h recall_exchange.h \ rules.h readcabrillo.h \ score.h scroll_log.h searchcallarray.h searchlog.h sendbuf.h \ sendqrg.h sendspcall.h set_tone.h setcontest.h \ setparameters.h show_help.h showinfo.h showpxmap.h showscore.h \ showzones.h sockserv.h speedupndown.h \ splitscreen.h startmsg.h stoptx.h store_qso.h sunup.h \ rtty.h time_update.h tlf.h tlf_curses.h tlf_panel.h ui_utils.h \ write_keyer.h writecabrillo.h writeparas.h \ zone_nr.h tlf-1.4.0/src/dxcc.h0000644000175000017500000000314113562576621011117 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2011 Thomas Beierlein * * 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 */ #ifndef DXCC_H #define DXCC_H #include typedef struct { char *pfx; short cq; short itu; short dxcc_index; float lat; float lon; char *continent; float timezone; bool exact; } prefix_data; typedef struct { char *countryname; short cq; short itu; char *continent; float lat; float lon; float timezone; char *pfx; bool starred; } dxcc_data; extern bool have_exact_matches; void prefix_init(void); unsigned int prefix_count(void); prefix_data *prefix_by_index(unsigned int index); void prefix_add(char *pfxstr); void dxcc_init(void); unsigned int dxcc_count(void); dxcc_data *dxcc_by_index(unsigned int index); void dxcc_add(char *dxcc_line); int load_ctydata(char *filename); #endif /* DXCC_H */ tlf-1.4.0/src/log_to_disk.c0000644000175000017500000000763313562576621012500 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Thomas Beierlein * 2013 Ervin Hegedüs - HA2OS * * 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 */ /*------------------------------------------------------------------------ Log QSO to disk and do all necessary actions to start a new one ------------------------------------------------------------------------*/ #include #include #include #include "addcall.h" #include "addspot.h" #include "gettxinfo.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "lancode.h" #include "makelogline.h" #include "scroll_log.h" #include "score.h" #include "store_qso.h" #include "tlf_curses.h" #include "ui_utils.h" #include "cleanup.h" pthread_mutex_t disk_mutex = PTHREAD_MUTEX_INITIALIZER; /** \brief logs one record to disk * Logs one record to disk which may come from different sources * (direct from tlf or from other instance via LAN) * * \param from_lan true - Log lanmessage, false - normal message */ int log_to_disk(int from_lan) { extern char my_rst[]; extern char his_rst[]; extern char last_rst[4]; extern char qsonrstr[5]; extern char lan_logline[]; extern int rit; extern int trx_control; extern int cqmode; extern int block_part; extern char lan_message[]; extern char thisnode; extern int lan_mutex; extern int cqwwm2; extern int no_rst; pthread_mutex_lock(&disk_mutex); if (!from_lan) { // qso from this node addcall(); /* add call to dupe list */ makelogline(); store_qso(logline4); // send qso to other nodes...... send_lan_message(LOGENTRY, logline4); if (trx_control && (cqmode == S_P)) addspot(); /* add call to bandmap if in S&P and no need to ask for frequency */ strncpy(last_rst, his_rst, sizeof(last_rst)); /* remember last report */ cleanup_qso(); /* reset qso related parameters */ } else { // qso from lan strncpy(lan_logline, lan_message + 2, 87); strcat(lan_logline, " "); if (cqwwm2 == 1) { if (lan_logline[0] != thisnode) lan_logline[79] = '*'; } lan_logline[87] = '\0'; total = total + score2(lan_logline); addcall2(); store_qso(lan_logline); } if (from_lan) lan_mutex = 2; else lan_mutex = 1; scroll_log(); lan_mutex = 0; attron(modify_attr(COLOR_PAIR(NORMCOLOR))); /* erase comment field */ if (!from_lan) mvprintw(12, 54, " "); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); if (!from_lan) { mvprintw(7, 0, logline0); mvprintw(8, 0, logline1); mvprintw(9, 0, logline2); } mvprintw(10, 0, logline3); mvprintw(11, 0, logline4); refreshp(); attron(COLOR_PAIR(C_WINDOW)); mvprintw(12, 23, qsonrstr); if (no_rst) { mvaddstr(12, 44, " "); mvaddstr(12, 49, " "); } else { mvaddstr(12, 44, his_rst); mvaddstr(12, 49, my_rst); } sync(); if (rit) { set_outfreq(RESETRIT); } block_part = 0; /* unblock use partials */ pthread_mutex_unlock(&disk_mutex); return (0); } tlf-1.4.0/src/changepars.c0000644000175000017500000005657313562576621012325 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011-2013 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * * parameterdialog *--------------------------------------------------------------*/ #include #include #include #include #include #include #include "audio.h" #include "changepars.h" #include "clear_display.h" #include "editlog.h" #include "err_utils.h" #include "fldigixmlrpc.h" #include "gettxinfo.h" #include "ignore_unused.h" #include "lancode.h" #include "listmessages.h" #include "logview.h" #include "messagechange.h" #include "muf.h" #include "netkeyer.h" #include "parse_logcfg.h" #include "qtcvars.h" // Includes globalvars.h #include "readcalls.h" #include "readqtccalls.h" #include "rules.h" #include "scroll_log.h" #include "searchlog.h" #include "sendbuf.h" #include "set_tone.h" #include "show_help.h" #include "showpxmap.h" #include "splitscreen.h" #include "tlf_curses.h" #include "ui_utils.h" #include "writecabrillo.h" #include "writeparas.h" #include "addmult.h" int debug_tty(void); void wipe_display(); int changepars(void) { extern int cluster; extern int shortqsonr; extern int searchflg; extern int demode; extern int contest; extern int announcefilter; extern int showscore_flag; extern int zonedisplay; extern int trxmode; extern char hiscall[]; extern int rit; extern int trx_control; extern int editor; extern int packetinterface; extern int nopacket; extern int cqdelay; extern int ctcomp; extern char *config_file; extern int miniterm; extern int total; extern int simulator; extern int cwkeyer; extern char synclogfile[]; extern char sc_volume[]; extern int cwstart; extern int digikeyer; extern int cqmode; char parameterstring[20] = ""; char parameters[52][19]; char cmdstring[80]; int i, k, x, nopar = 0; int maxpar = 50; int volumebuffer; int currentmode = 0; strcpy(parameters[0], "SPOT"); strcpy(parameters[1], "MAP"); strcpy(parameters[2], "CLOFF"); strcpy(parameters[3], "CLUSTER"); strcpy(parameters[4], "SHORT"); strcpy(parameters[5], "LONG"); strcpy(parameters[6], "MESSAGE"); strcpy(parameters[7], "LIST"); strcpy(parameters[8], "CHECK"); strcpy(parameters[9], "NOCHECK"); strcpy(parameters[10], "TONE"); strcpy(parameters[11], "EDIT"); strcpy(parameters[12], "VIEW"); strcpy(parameters[13], "HELP"); strcpy(parameters[14], "DEMODE"); strcpy(parameters[15], "CONTEST"); strcpy(parameters[16], "FILTER"); strcpy(parameters[17], "SCORE"); strcpy(parameters[18], "WRITE"); strcpy(parameters[19], "EXIT"); strcpy(parameters[20], "TXFILE"); strcpy(parameters[21], "ZONES"); strcpy(parameters[22], "CTY"); strcpy(parameters[23], "MODE"); strcpy(parameters[24], "SET"); strcpy(parameters[25], "MULTI"); strcpy(parameters[26], "PROP"); strcpy(parameters[27], "RITCLEAR"); strcpy(parameters[28], "TRXCONTROL"); strcpy(parameters[29], "CFG"); //strcpy(parameters[30], "CWMODE"); strcpy(parameters[30], "CW"); strcpy(parameters[31], "SSBMODE"); strcpy(parameters[32], "DIGIMODE"); strcpy(parameters[33], "PACKET"); strcpy(parameters[34], "SIMULATOR"); strcpy(parameters[35], "INFO"); strcpy(parameters[36], "FREQ"); strcpy(parameters[37], "RECONNECT"); strcpy(parameters[38], "QUIT"); strcpy(parameters[39], "CQDELAY"); strcpy(parameters[40], "ADIF"); strcpy(parameters[41], "SYNC"); strcpy(parameters[42], "RESCORE"); strcpy(parameters[43], "SCVOLUME"); //strcpy(parameters[44], "SCAN"); /* 05jan18 no longer supported */ strcpy(parameters[44], ""); strcpy(parameters[45], "DEBUG"); strcpy(parameters[46], "MINITERM"); strcpy(parameters[47], "RTTY"); strcpy(parameters[48], "SOUND"); strcpy(parameters[49], "CWMODE"); strcpy(parameters[50], "CHARS"); strcpy(parameters[51], "FLDIGI"); nopar = 0; attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 29, "PARAMETER? "); refreshp(); usleep(400000); mvprintw(12, 29, " "); echo(); mvgetnstr(12, 29, parameterstring, 19); noecho(); for (k = 0; parameterstring[k]; k++) parameterstring[k] = toupper(parameterstring[k]); for (i = 0; i <= maxpar; i++) { if (strncmp(parameterstring, parameters[i], 3) == 0) { break; } } switch (i) { case 0: { /* SPOTS) */ /* SPOTS not supported anymore * - default to MAP*/ cluster = MAP; break; } case 1: { /* BANDMAP */ cluster = MAP; break; } case 2: { /* CLOFF */ cluster = NOCLUSTER; break; } case 3: { /* CLUSTER */ cluster = CLUSTER; announcefilter = FILTER_ALL; break; } case 4: { /* SHORTNR */ shortqsonr = SHORTCW; break; } case 5: { /* LONGNR */ shortqsonr = LONGCW; break; } case 6: { /* MESSAGE */ message_change(i); break; } case 7: { /* LIST */ listmessages(); break; } case 8: { /* CHECK */ searchflg = SEARCHWINDOW; break; } case 9: { /* NOCHECK */ searchflg = 0; break; } case 10: { /* TONE */ set_tone(); break; } case 11: { /* EDIT */ logedit(); break; } case 12: { /* VIEW */ logview(); break; } case 13: { /* HELP */ show_help(); break; } case 14: { /* DEMODE */ if (demode == SEND_DE) demode = 0; else demode = SEND_DE; mvprintw(13, 29, "DE-mode is %d", demode); refreshp(); sleep(1); break; } case 15: { /* CONTEST */ if (contest == CONTEST) contest = 0; else { contest = CONTEST; searchflg = SEARCHWINDOW; } mvprintw(13, 29, "CONTEST-mode is %d", contest); refreshp(); sleep(1); break; } case 16: { /* FILTER */ announcefilter++; if (announcefilter > 3) announcefilter = 0; mvprintw(13, 29, "FILTER-mode is %d", announcefilter); refreshp(); sleep(1); break; } case 17: { /* SCORE */ if (showscore_flag == 0) showscore_flag = 1; else { showscore_flag = 0; } mvprintw(13, 29, "Show score-mode is %d", showscore_flag); refreshp(); sleep(1); break; } case 18: { /* WRITE CABRILLO FILE */ int old_cluster = cluster; cluster = NOCLUSTER; write_cabrillo(); cluster = old_cluster; break; } case 19: /* EXIT */ case 38: { /* QUIT */ writeparas(); clear(); cleanup_telnet(); endwin(); puts("\n\nThanks for using TLF.. 73\n"); exit(0); break; } case 20: { /* TXFILE */ break; } case 21: { /* ZONES */ if (zonedisplay == 0) zonedisplay = 1; else { zonedisplay = 0; } break; } case 22: { /* COUNTRIES */ show_mults(); refreshp(); sleep(1); break; } case 23: { /* MODE */ if (trxmode == CWMODE) trxmode = SSBMODE; else if (trxmode == SSBMODE) trxmode = DIGIMODE; else trxmode = CWMODE; if (trxmode == CWMODE) { mvprintw(13, 29, "TRXMODE = CW"); } else if (trxmode == SSBMODE) mvprintw(13, 29, "TRXMODE = SSB"); else mvprintw(13, 29, "TRXMODE = DIG"); refreshp(); sleep(1); break; } case 24: /* SET PARAMETERS */ case 29: { /* CFG PARAMETERS */ clear(); if (editor == EDITOR_JOE) { strcpy(cmdstring, "joe "); } else if (editor == EDITOR_VI) { strcpy(cmdstring, "vi "); } else if (editor == EDITOR_MC) { strcpy(cmdstring, "mcedit "); } else { strcpy(cmdstring, "e3 "); } strcat(cmdstring, config_file); IGNORE(system(cmdstring));; read_logcfg(); read_rules(); /* also reread rules file */ writeparas(); TLF_LOG_INFO("Logcfg.dat loaded, parameters written."); clear_display(); break; } case 25: { /* MULTI */ multiplierinfo(); break; } case 26: { /* PROPAGATION */ muf(); clear_display(); break; } case 27: { /* RITCLEAR */ if (rit == RITCLEAR) rit = 0; else { rit = RITCLEAR; } if (rit == RITCLEAR) { mvprintw(13, 29, "RIT clear on"); } else { mvprintw(13, 29, "RIT clear off"); } refreshp(); sleep(1); break; } case 28: { /* trx ctl */ if (trx_control == 1) trx_control = 0; else { trx_control = 1; } if (trx_control == 1) { mvprintw(13, 29, "TRX control on"); } else { mvprintw(13, 29, "TRX control off"); } refreshp(); sleep(1); break; } case 30: /* CW */ case 49: { if (cwkeyer == MFJ1278_KEYER) { sendmessage("MODE CW\015K\015"); } trxmode = CWMODE; set_outfreq(SETCWMODE); break; } case 31: { /* SSBMODE */ trxmode = SSBMODE; set_outfreq(SETSSBMODE); break; } case 32: { /* DIGIMODE */ trxmode = DIGIMODE; set_outfreq(SETDIGIMODE); break; } case 33: { /* PACKET */ if ((nopacket == 0) && (packetinterface > 0)) packet(); break; } case 34: { /* SIMULATOR */ if (cqww != 1) { TLF_LOG_INFO( "Simulator mode is only supported for CQWW contest!"); break; } if (callmaster == NULL) { TLF_LOG_INFO( "Simulator mode needs callmaster database"); break; } if (simulator == 0) { simulator = 1; cqmode = CQ; if (ctcomp == 1) { TLF_LOG_INFO( "The simulator only works in TRmode. Switching to TRmode"); ctcomp = 0; } else { mvprintw(13, 29, "Simulator on"); refreshp(); sleep(1); } if (cwkeyer == NET_KEYER) { if (netkeyer(K_WORDMODE, NULL) < 0) { TLF_LOG_INFO("keyer not active; switching to SSB"); trxmode = SSBMODE; clear_display(); } } } else { simulator = 0; mvprintw(13, 29, "Simulator off"); refreshp(); sleep(1); if (cwkeyer == NET_KEYER) { if (netkeyer(K_RESET, NULL) < 0) { TLF_LOG_INFO("keyer not active; switching to SSB"); trxmode = SSBMODE; clear_display(); } } } break; } case 35: { /* INFO */ int currentterm = miniterm; miniterm = 0; networkinfo(); miniterm = currentterm; if (currentmode == DIGIMODE) trxmode = DIGIMODE; break; } case 36: { /* CLOFF */ cluster = FREQWINDOW; break; } case 37: { /* RECONNECT */ if ((nopacket == 0) && (packetinterface > 0)) { cleanup_telnet(); init_packet(); packet(); } break; } case 39: { /* CQDELAY */ mvprintw(12, 29, "CQD: pgup/dwn", cqdelay); refreshp(); x = 1; while (x) { x = key_get(); switch (x) { // , increase autoCQ delay by 1/2 second. case KEY_PPAGE: { if (cqdelay <= 60) { cqdelay++; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 19, " "); mvprintw(0, 19, "%i", cqdelay); break; } } // , decrease autoCQ delay by 1/2 second. case KEY_NPAGE: { if (cqdelay >= 1) { cqdelay--; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 19, " "); mvprintw(0, 19, "%i", cqdelay); break; } default: x = 0; } } } attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 29 + strlen(hiscall), ""); break; } case 40: { /* ADIF */ write_adif(); break; } case 41: { /* SYNC */ if (strlen(synclogfile) > 0) synclog(synclogfile); scroll_log(); /** \todo register return value */ total = 0; readcalls(); if (qtcdirection > 0) { readqtccalls(); } clear_display(); break; } case 42: { /* RESCORE */ /** \todo register return value */ total = 0; readcalls(); if (qtcdirection > 0) { readqtccalls(); } clear_display(); break; } case 43: { /* SCVOLUME - set soundcard volume */ volumebuffer = atoi(sc_volume); mvprintw(12, 29, "Vol: pgup/dwn"); refreshp(); usleep(500000); mvprintw(12, 29, "Vol: "); mvprintw(12, 29, "Vol: %d", volumebuffer); x = 1; while (x) { x = key_get(); switch (x) { // , increase volume by 5%. case KEY_PPAGE: { if (volumebuffer < 95) volumebuffer += 5; break; } // , decrease volume by 5%. case KEY_NPAGE: { if (volumebuffer >= 5) volumebuffer -= 5; break; } default: x = 0; } attron(COLOR_PAIR(COLOR_GREEN) | A_STANDOUT); mvprintw(12, 34, " "); mvprintw(12, 34, "%d", volumebuffer); if (volumebuffer >= 0 && volumebuffer <= 99) sprintf(sc_volume, "%d", volumebuffer); netkeyer(K_STVOLUME, sc_volume); } clear_display(); break; } case 45: { /* DEBUG */ debug_tty(); clear_display(); break; } case 46: { /* MINITERM ON/OFF */ if (miniterm == 1) miniterm = 0; else miniterm = 1; break; } case 47: { /* RTTY Initialize mode (MFJ1278B controller) */ sendmessage("MODE VB\015K\015"); trxmode = DIGIMODE; break; } case 48: { /* SOUND */ clear_display(); record(); clear_display(); break; } case 50: { /* CHARS */ mvprintw(13, 29, "Autosend: (0, 2..5, m)?"); refreshp(); x = 1; /* wait for correct input or ESC */ while ((x != 0) && !((x >= 2) && (x <= 5)) && !(x == 'm' - '0')) { x = key_get(); if (x == 27) break; x = x - '0'; } /* remember new setting */ if (x != 27) { if (x == 0 || (x >= 2 && x <= 5)) cwstart = x; else cwstart = -1; } if (cwstart > 0) mvprintw(13, 29, "Autosend now: %1d ", cwstart); else { if (cwstart < 0) mvprintw(13, 29, "Autosend now: Manual "); else mvprintw(13, 29, "Autosend now: OFF "); } refreshp(); break; } case 51: { /* FLDIGI - turn on/off */ if (digikeyer == FLDIGI) { if (fldigi_toggle()) { fldigi_clear_connerr(); mvprintw(13, 29, "FLDIGI ON"); } else { mvprintw(13, 29, "FLDIGI OFF"); } refreshp(); } break; } default: { nopar = 1; } } if (nopar != 1) { mvprintw(12, 29, "OK ! "); writeparas(); } else { if ((nopacket == 0) && (packetinterface > 0)) packet(); } refreshp(); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 29, " "); mvprintw(12, 29, ""); refreshp(); hiscall[0] = '\0'; return (0); } /* -------------------------------------------------------------- */ void networkinfo(void) { extern int use_bandoutput; extern int recv_packets; extern int recv_error; extern int send_packets[]; extern int send_error[]; extern int lan_active; extern int nodes; extern char bc_hostaddress[MAXNODES][16]; extern char *config_file; extern char whichcontest[]; extern char pr_hostaddress[]; extern char tncportname[]; extern char *rigportname; extern char logfile[]; int inode; wipe_display(); if (lan_active == 1) mvprintw(1, 10, "Network status: on"); else mvprintw(1, 10, "Network status: off"); mvprintw(3, 28, "Packets rcvd: %d | %d", recv_packets, recv_error); for (inode = 0; inode < nodes; inode++) { mvprintw(4 + inode, 10, "%s", bc_hostaddress[inode]); mvprintw(4 + inode, 28, "Packets sent: %d | %d ", send_packets[inode], send_error[inode], nodes); } if (strlen(config_file) > 0) mvprintw(6 + inode, 10, "Config file: %s", config_file); else mvprintw(6 + inode, 10, "Config file: /usr/local/share/tlf/logcfg.dat"); mvprintw(7 + inode, 10, "Contest : %s", whichcontest); mvprintw(8 + inode, 10, "Logfile : %s", logfile); mvprintw(9 + inode, 10, "Cluster : %s", pr_hostaddress); mvprintw(10 + inode, 10, "TNCport : %s", tncportname); mvprintw(11 + inode, 10, "RIGport : %s", rigportname); if (use_bandoutput == 1) mvprintw(12 + inode, 10, "Band output: on"); else mvprintw(12 + inode, 10, "Band output: off"); refreshp(); mvprintw(23, 22, " --- Press a key to continue --- "); refreshp(); (void)key_get(); clear_display(); return; } /* -------------------------------------------------------------- */ void multiplierinfo(void) { extern int arrlss; extern int serial_section_mult; extern int sectn_mult; extern struct mults_t multis[MAX_MULTS]; extern int nr_multis; int j, k, vert, hor, cnt, found; char mprint[50]; wipe_display(); if (arrlss == 1) { int attributes; char chmult[6]; char ch2mult[6]; mvprintw(2, 20, "ARRL SWEEPSTAKES -- REMAINING SECTIONS"); cnt = 0; for (vert = 9; vert < 18; vert++) { if (cnt >= get_mult_count()) break; for (hor = 5; hor < 15; hor++) { if (cnt >= get_mult_count()) break; g_strlcpy(chmult, get_mult(cnt), sizeof(chmult)); /* check if in worked multis */ found = 0; for (j = 0; j < nr_multis; j++) { g_strlcpy(ch2mult, multis[j].name, sizeof(ch2mult)); if (strcmp(g_strchomp(ch2mult), chmult) == 0) found = 1; } if (found == 1) attributes = COLOR_PAIR(C_HEADER) | A_STANDOUT; else attributes = COLOR_PAIR(C_WINDOW) | A_STANDOUT; attron(modify_attr(attributes)); g_strlcpy(mprint, get_mult(cnt), 5); mvprintw(vert, hor * 4, "%s", mprint); cnt++; } } } if (serial_section_mult == 1 || (sectn_mult == 1 && arrlss != 1)) { char *tmp; int worked_at; mvprintw(0, 30, "REMAINING SECTIONS"); cnt = 0; for (vert = 2; vert < 22; vert++) { if (cnt >= get_mult_count()) break; for (hor = 0; hor < 7; hor++) { if (cnt >= get_mult_count()) break; worked_at = 0; /* lookup if already worked */ for (k = 0; k < nr_multis; k++) { if (strstr(multis[k].name, get_mult(cnt)) != NULL) { worked_at = multis[k].band; break; } } tmp = g_strndup(get_mult(cnt), 4); sprintf(mprint, "%-4s", tmp); g_free(tmp); strcat(mprint, (worked_at & BAND160) ? "*" : "-"); strcat(mprint, (worked_at & BAND80) ? "*" : "-"); strcat(mprint, (worked_at & BAND40) ? "*" : "-"); strcat(mprint, (worked_at & BAND20) ? "*" : "-"); strcat(mprint, (worked_at & BAND15) ? "*" : "-"); strcat(mprint, (worked_at & BAND10) ? "*" : "-"); mprint[11] = '\0'; mvprintw(vert, 2 + hor * 11, "%s", mprint); cnt++; } } } attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); mvprintw(23, 22, " --- Press a key to continue --- "); refreshp(); (void)key_get(); clear_display(); return; } /* ------------------------- radio link debug ------------------------------ */ int debug_tty(void) { extern char *rigportname; extern int serial_rate; int fdSertnc; int tncport = 0; int i; struct termios termattribs; char line[20] = "?AF\015"; char inputline[80] = ""; const char eom[2] = { '\015', '\0' }; /* initialize ttyS0*/ for (i = 0; i < 24; i++) mvprintw(i, 0, " "); refreshp(); if (rigportname[strlen(rigportname) - 1] == '\n') rigportname[strlen(rigportname) - 1] = '\0'; // remove \n mvprintw(4, 0, "Trying to open %s ", rigportname); refreshp(); if (tncport == 1) { if ((fdSertnc = open("/dev/ttyS2", O_RDWR | O_NONBLOCK)) < 0) { mvprintw(5, 0, "open of /dev/ttyS2 failed!!!"); refreshp(); sleep(2); return (-1); } } else if (tncport == 2) { if ((fdSertnc = open("/dev/ttyS1", O_RDWR | O_NONBLOCK)) < 0) { mvprintw(5, 0, "open of /dev/ttyS1 failed!!!"); refreshp(); sleep(2); return (-1); } } else { if ((fdSertnc = open(rigportname, O_RDWR | O_NONBLOCK)) < 0) { mvprintw(5, 0, "open of %s failed!!!", rigportname); refreshp(); sleep(2); return (-1); } } termattribs.c_iflag = IGNBRK | IGNPAR | IMAXBEL | IXOFF; termattribs.c_oflag = 0; termattribs.c_cflag = CS8 | CSTOPB | CREAD | CLOCAL; termattribs.c_lflag = 0; /* Set some term flags */ /* The ensure there are no read timeouts (possibly writes?) */ termattribs.c_cc[VMIN] = 1; termattribs.c_cc[VTIME] = 0; switch (serial_rate) { case 1200: { cfsetispeed(&termattribs, B1200); /* Set input speed */ cfsetospeed(&termattribs, B1200); /* Set output speed */ break; } case 2400: { cfsetispeed(&termattribs, B2400); /* Set input speed */ cfsetospeed(&termattribs, B2400); /* Set output speed */ break; } case 4800: { cfsetispeed(&termattribs, B4800); /* Set input speed */ cfsetospeed(&termattribs, B4800); /* Set output speed */ break; } case 9600: { cfsetispeed(&termattribs, B9600); /* Set input speed */ cfsetospeed(&termattribs, B9600); /* Set output speed */ break; } case 57600: { cfsetispeed(&termattribs, B57600); /* Set input speed */ cfsetospeed(&termattribs, B57600); /* Set output speed */ break; } default: { cfsetispeed(&termattribs, B9600); /* Set input speed */ cfsetospeed(&termattribs, B9600); /* Set output speed */ } } tcsetattr(fdSertnc, TCSANOW, &termattribs); /* Set the serial port */ mvprintw(6, 0, "%s opened...", rigportname); refreshp(); mvprintw(13, 0, "Input command: "); refreshp(); echo(); getnstr(line, 12); noecho(); strcat(line, eom); /* send message */ mvprintw(7, 0, "sending message to trx: %s", line); mvprintw(7, 40, "Length = %d characters", strlen(line)); refreshp(); IGNORE(write(fdSertnc, line, strlen(line)));; mvprintw(8, 0, "receiving message from trx"); refreshp(); usleep(30000); if (fdSertnc > 0) { int j = 0; // i = read (fdSertnc, inputline, BUFFERSIZE-1); ### bug fix i = read(fdSertnc, inputline, sizeof(inputline)); if (i > 0) { for (j = 0; j < i; j++) { mvprintw(10, j * 10, "%#x", (char) inputline[j]); mvprintw(11, j, "%c", (char) inputline[j]); mvprintw(12, j * 10, "%d", (char) inputline[j] & 0xff); refreshp(); } } mvprintw(8, 40, "Length = %d characters", i); if (inputline[0] == '@' && inputline[1] == 'A' && inputline[2] != 'F') { mvprintw(20, 0, "Frequency = %d Hz", ((inputline[3] & 0xff) * 65536) + ((inputline[4] & 0xff) * 256) + (inputline[5] & 0xff)); } refreshp(); sleep(1); } mvprintw(23, 0, "done"); refreshp(); (void)key_get(); /* close the tty */ if (fdSertnc > 0) close(fdSertnc); return (0); } void wipe_display() { int j; extern char backgrnd_str[]; attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 0; j < LINES; j++) mvprintw(j, 0, backgrnd_str); } tlf-1.4.0/src/addcall.h0000644000175000017500000000203713562576621011565 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedüs - HA2OS * * 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 */ #ifndef ADDCALL_H #define ADDCALL_H int addcall(void); int addcall2(void); int get_band(char *logline); #endif /* ADDCALL_H */ tlf-1.4.0/src/dxcc.c0000644000175000017500000001266313562576621011123 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2011, 2013 Thomas Beierlein * * 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 #include #include #include "dxcc.h" GPtrArray *dxcc; GPtrArray *prefix; bool have_exact_matches; prefix_data dummy_pfx = { "No Prefix", 0, 0, 0, INFINITY, INFINITY, NULL, INFINITY, false }; void prefix_free(gpointer data) { prefix_data *pfx_data = data; g_free(pfx_data -> pfx); g_free(pfx_data -> continent); g_free(pfx_data); } void prefix_init(void) { if (prefix) { g_ptr_array_free(prefix, TRUE); } prefix = g_ptr_array_new_with_free_func(prefix_free); } /* return number of entries in prefix array */ unsigned int prefix_count(void) { return prefix->len; } /* give pointer to prefix struct at 'index' */ prefix_data *prefix_by_index(unsigned int index) { if (index >= prefix_count()) return &dummy_pfx; return (prefix_data *)g_ptr_array_index(prefix, index); } /* add a new prefix description */ void prefix_add(char *pfxstr) { gchar *loc; gint last_index = dxcc_count() - 1; dxcc_data *last_dx = dxcc_by_index(last_index); prefix_data *new_prefix = g_new(prefix_data, 1); if (*pfxstr == '=') { new_prefix -> exact = true; have_exact_matches = true; pfxstr++; } else new_prefix -> exact = false; loc = strchr(pfxstr, '~'); if (loc != NULL) { new_prefix -> timezone = atof(loc + 1); *loc = '\0'; } else new_prefix -> timezone = INFINITY; loc = strchr(pfxstr, '{'); if (loc != NULL) { new_prefix -> continent = g_strdup(loc + 1); *loc = '\0'; loc = strchr(new_prefix -> continent, '}'); if (loc != NULL) *loc = '\0'; } else new_prefix -> continent = NULL; loc = strchr(pfxstr, '<'); if (loc != NULL) { new_prefix -> lat = atof(loc + 1); *loc = '\0'; if ((loc = strchr(loc, '/')) != NULL) new_prefix -> lon = atof(loc + 1); else new_prefix -> lon = INFINITY; } else new_prefix -> lat = new_prefix -> lon = INFINITY; loc = strchr(pfxstr, '['); if (loc != NULL) { new_prefix -> itu = atoi(loc + 1); *loc = '\0'; } else new_prefix -> itu = last_dx -> itu; loc = strchr(pfxstr, '('); if (loc != NULL) { new_prefix -> cq = atoi(loc + 1); *loc = '\0'; } else new_prefix -> cq = last_dx -> cq; new_prefix -> pfx = g_strdup(pfxstr); new_prefix -> dxcc_index = last_index; g_ptr_array_add(prefix, new_prefix); } void dxcc_free(gpointer data) { dxcc_data *dxcc = data; g_free(dxcc -> countryname); g_free(dxcc -> continent); g_free(dxcc -> pfx); g_free(dxcc); } void dxcc_init(void) { if (dxcc) { g_ptr_array_free(dxcc, TRUE); } dxcc = g_ptr_array_new_with_free_func(dxcc_free); } /* return number of entries in dxcc array */ unsigned int dxcc_count(void) { return dxcc->len; } /* give pointer to dxcc_data struct at 'index' */ dxcc_data *dxcc_by_index(unsigned int index) { if (index >= dxcc_count()) index = 0; return (dxcc_data *)g_ptr_array_index(dxcc, index); } void dxcc_add(char *dxcc_line) { gchar **split; gint item; dxcc_data *new_dxcc = g_new(dxcc_data, 1); /* split up the line */ split = g_strsplit(dxcc_line, ":", 9); if (g_strv_length(split) < 8) { /* wrong syntax, ignore line */ g_strfreev(split); g_free(new_dxcc); return; } for (item = 0; item < 8; item++) g_strstrip(split[item]); new_dxcc -> countryname = g_strdup(split[0]); new_dxcc -> cq = atoi(split[1]); new_dxcc -> itu = atoi(split[2]); new_dxcc -> continent = g_strdup(split[3]); new_dxcc -> lat = atof(split[4]); new_dxcc -> lon = atof(split[5]); new_dxcc -> timezone = atof(split[6]); if (*split[7] == '*') { new_dxcc -> pfx = g_strdup(split[7] + 1); new_dxcc -> starred = true; } else { new_dxcc -> pfx = g_strdup(split[7]); new_dxcc -> starred = false; } g_strfreev(split); g_ptr_array_add(dxcc, new_dxcc); } /** load cty database from filename */ int load_ctydata(char *filename) { FILE *fd; char buf[181] = ""; char *loc; if ((fd = fopen(filename, "r")) == NULL) return -1; dxcc_init(); prefix_init(); // set default for empty country dxcc_add("Not Specified : --: --: --: -00.00: 00.00: 0.0: :"); while (fgets(buf, sizeof(buf), fd) != NULL) { g_strchomp(buf); /* drop CR and/or NL and */ if (*buf == '\0') /* ignore empty lines */ continue; if (buf[0] != ' ') { // data line dxcc_add(buf); } else { // prefix line loc = strtok(buf, " ,;"); while (loc != NULL) { prefix_add(loc); loc = strtok(NULL, " ,;"); } } } fclose(fd); return 0; } tlf-1.4.0/src/set_tone.c0000644000175000017500000000445113562576621012016 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * Set Cw sidetone * *--------------------------------------------------------------*/ #include #include "err_utils.h" #include "netkeyer.h" #include "nicebox.h" // Includes curses.h #include "set_tone.h" #include "tlf.h" int set_tone(void) { extern char tonestr[]; extern int trxmode; if (trxmode != CWMODE) return (1); nicebox(4, 40, 1, 6, "Tone"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(5, 41, " "); mvprintw(5, 42, ""); echo(); getnstr(tonestr, 3); noecho(); tonestr[3] = '\0'; write_tone(); return (0); } void write_tone(void) { extern int trxmode; extern char tonestr[]; extern char sc_volume[]; if (netkeyer(K_TONE, tonestr) < 0) { TLF_LOG_INFO("keyer not active; switching to SSB"); trxmode = SSBMODE; } if (atoi(tonestr) != 0) { /* work around bugs in cwdaemon: * cwdaemon < 0.9.6 always set volume to 70% at change of tone freq * cwdaemon >=0.9.6 do not set volume at all after change of freq, * resulting in no tone output if you have a freq=0 in between * So... to be sure we set the volume back to our chosen value * or to 70% (like cwdaemon) if no volume got specified */ if (*sc_volume != '\0') // set soundcard volume netkeyer(K_STVOLUME, sc_volume); else netkeyer(K_STVOLUME, "70"); } } tlf-1.4.0/src/sockserv.c0000644000175000017500000003223413562576621012035 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* Socket server (and client!) utilities, */ /* intended to simplify the porting of JNOS servers and clients to Unix */ /* Written by N2RJT - Dave Brown */ #include #include #include #include #include #include #include #include #include "sockserv.h" #include "tlf_curses.h" /* This structure holds the buffers for each open socket. It was an */ /* afterthought, so it is not used for anything else. The array is only */ /* allocated when the socket is opened, and freed when the socket is closed. */ struct sockbuffer { char *buf; int buflen; int fragment; int whole_lines; int cr_translation; } sockbuf[FD_SETSIZE]; /* This array holds the SERVED sockets, that can be connected to. */ /* It does not hold CLIENT sockets. */ static int lsock[MAX_SERVED_SOCKETS]; static int initialized = 0; static int nlsock = 0; static struct timeval *socktimeval = NULL; static struct timeval *selecttimeval = NULL; static struct sockaddr_in udp_peer; static int udpport = 0; static unsigned int peerlen = 0; int udp_socket = -1; static fd_set readfds, openfds; static int nfds = 0; static int ifds = -1; #define SOBUF 512 #define NULLCHAR (char *) NULL #define myperror perror void setlinemode(int s, int tf) { sockbuf[s].whole_lines = tf; } int close_s(int s) { FD_CLR(s, &openfds); if (0 != sockbuf[s].buflen) free(sockbuf[s].buf); sockbuf[s].buflen = 0; sockbuf[s].fragment = 0; shutdown(s, 2); return close(s); } void fds_copy(fd_set *tofd, fd_set *fmfd) { memcpy(tofd, fmfd, sizeof(fd_set)); } int usputs(int s, char *buf) { int len, i; len = strlen(buf); if (sockbuf[s].cr_translation) { for (i = 0; i < len; i++) { if (buf[i] == '\n') usputb(s, "\r\n", 2); else usputb(s, buf + i, 1); } return len; } else return usputb(s, buf, len); } int usputb(int s, char *buf, int buflen) { extern WINDOW *sclwin; strcpy(sockserv_error, ""); if (udp_socket == s) { peerlen = sizeof(udp_peer); if (sendto(s, buf, buflen, 0, (struct sockaddr *) &udp_peer, peerlen) < 0) { myperror("usputb:sendto"); return -1; } else return buflen; } else { if (write(s, buf, buflen) < 0) { // myperror("usputb:write"); wprintw(sclwin, "Not connected !!"); wrefresh(sclwin); sleep(2); return -1; } else return buflen; } } int usvprintf(int s, char *fmt, va_list args) { int len, withargs; char *buf; if (strchr(fmt, '%') == NULLCHAR) { /* Common case optimization: no args */ withargs = 0; buf = fmt; len = strlen(fmt); } else { /* Use a default value that is huge */ withargs = 1; buf = (char *) malloc(SOBUF); if (buf == NULL) { /* no memory available -> just ignore the output to the socket */ return 0; } if ((len = vsprintf(buf, fmt, args)) >= SOBUF) { /* It's too late to be sorry. He's dead, Jim */ fprintf(stderr, "usprintf() exceeded %d bytes (%d bytes)\n", SOBUF, len); exit(1); } } len = usputs(s, buf); if (withargs) free(buf); return len; } int usprintf(int s, char *fmt, ...) { va_list args; int len; va_start(args, fmt); len = usvprintf(s, fmt, args); va_end(args); return len; } int tprintf(char *fmt, ...) { va_list args; int len; va_start(args, fmt); len = usvprintf(ifds, fmt, args); va_end(args); return len; } int tputstr(char *buf) { return usputs(ifds, buf); } int tputc(char c) { char ic; ic = c; return usputb(ifds, &ic, 1); } static void (*login[MAX_SERVED_SOCKETS])(int i); char sockserv_error[80]; static int initialize(void) { int i; strcpy(sockserv_error, ""); /* First-time initialization */ if (!initialized) { initialized = 1; for (i = 0; i < FD_SETSIZE; i++) { sockbuf[i].buf = NULL; sockbuf[i].buflen = 0; sockbuf[i].fragment = 0; sockbuf[i].whole_lines = 0; sockbuf[i].cr_translation = 0; } FD_ZERO(&openfds); } return 0; } int startup(int portnum, void (*loginp)(int)) { struct sockaddr_in sin; initialize(); while ((lsock[nlsock] = socket(AF_INET, SOCK_STREAM, 0)) < 0) { if (errno != EINTR) { myperror("startup: socket"); exit(1); } } memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(portnum); setsockopt(lsock[nlsock], SOL_SOCKET, SO_REUSEADDR, (char *) 0, 0); while (bind(lsock[nlsock], (struct sockaddr *) &sin, sizeof(sin)) == -1) { if (errno != EINTR) { myperror("startup: bind"); exit(1); } } while (listen(lsock[nlsock], 5) == -1) { if (errno != EINTR) { myperror("startup: listen"); exit(1); } } login[nlsock] = loginp; FD_SET(lsock[nlsock], &openfds); sockbuf[lsock[nlsock]].buf = (char *) malloc(sizeof(char) * SOBUF); sockbuf[lsock[nlsock]].buflen = 0; sockbuf[lsock[nlsock]].fragment = 0; sockbuf[lsock[nlsock]].whole_lines = 0; sockbuf[lsock[nlsock]].cr_translation = 0; if (nfds <= lsock[nlsock]) nfds = lsock[nlsock] + 1; if (ifds == -1) ifds = nfds - 1; nlsock++; return lsock[nlsock - 1]; } int startup_udp(int portnum) { struct sockaddr_in sin; initialize(); if (udp_socket == -1) { while ((udp_socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { if (errno != EINTR) { myperror("startup_udp: socket"); exit(1); } } } if (portnum && !udpport) { memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(portnum); while (bind(udp_socket, (struct sockaddr *) &sin, sizeof(sin)) == -1) { if (errno != EINTR) { myperror("startup_udp: bind"); exit(1); } } } udpport = portnum; FD_SET(udp_socket, &openfds); sockbuf[udp_socket].buf = (char *) malloc(sizeof(char) * SOBUF); sockbuf[udp_socket].buflen = 0; sockbuf[udp_socket].fragment = 0; sockbuf[udp_socket].whole_lines = 0; sockbuf[udp_socket].cr_translation = 0; if (nfds <= udp_socket) nfds = udp_socket + 1; if (ifds == -1) ifds = nfds - 1; return udp_socket; } int recvline(int *fd, char *buf, int buflen) { unsigned int len; int ns, i; struct sockaddr_in client; char *nl; strcpy(sockserv_error, ""); if (selecttimeval != NULL && socktimeval != NULL) { selecttimeval->tv_sec = socktimeval->tv_sec; selecttimeval->tv_usec = socktimeval->tv_usec; } if (ifds == -1) ifds = nfds - 1; while (1) { if (++ifds == nfds) { fds_copy(&readfds, &openfds); while ((ifds = select(nfds, &readfds, (fd_set *) NULL, (fd_set *) NULL, selecttimeval)) < 0) { if (errno != EINTR) { myperror("recvline: select"); exit(1); } fds_copy(&readfds, &openfds); } if (!ifds) return -2; ifds = 0; } else if (FD_ISSET(ifds, &readfds)) { for (i = 0; i < nlsock; i++) if (lsock[i] == ifds) break; if (i < nlsock) { if (FD_ISSET(lsock[i], &readfds)) { len = sizeof(client); while ((ns = accept(lsock[i], (struct sockaddr *) &client, &len)) == -1) { if (errno != EINTR) { myperror("recvline: accept"); exit(1); } } if (nfds <= ns) nfds = ns + 1; FD_SET(ns, &openfds); sockbuf[ns].buf = (char *) malloc(sizeof(char) * SOBUF); sockbuf[ns].buflen = 0; sockbuf[ns].fragment = 0; sockbuf[ns].whole_lines = sockbuf[lsock[i]].whole_lines; sockbuf[ns].cr_translation = 0; (*login[i])(ns); } FD_CLR(lsock[i], &readfds); } else { if (!sockbuf[ifds].buflen) { if (ifds == udp_socket) { peerlen = sizeof(udp_peer); while ((sockbuf[ifds].buflen = recvfrom(ifds, sockbuf[ifds].buf + sockbuf[ifds].fragment, SOBUF - 1, 0, (struct sockaddr *) &udp_peer, &peerlen)) == -1) { if (errno != EINTR) { break; } peerlen = sizeof(udp_peer); } } else { while ((sockbuf[ifds].buflen = read(ifds, sockbuf[ifds].buf + sockbuf[ifds].fragment, SOBUF - 1)) == -1) { if (errno != EINTR) { break; } } } if (sockbuf[ifds].buflen <= 0) { if (ifds != udp_socket) { FD_CLR(ifds, &openfds); free(sockbuf[ifds].buf); } sockbuf[ifds].buflen = 0; *fd = ifds; buf[0] = '\0'; return -1; } else { sockbuf[ifds].buflen += sockbuf[ifds].fragment; sockbuf[ifds].fragment = 0; sockbuf[ifds].buf[sockbuf[ifds].buflen] = '\0'; } } nl = strchr(sockbuf[ifds].buf, '\n'); if (nl == NULL && sockbuf[ifds].whole_lines) { nl = strchr(sockbuf[ifds].buf, '\r'); if (nl) { sockbuf[ifds].cr_translation = 1; printf("Enabling CR translation for socket %d\n", ifds); } } if (nl == NULL && sockbuf[ifds].whole_lines) { sockbuf[ifds].fragment = sockbuf[ifds].buflen; sockbuf[ifds].buflen = 0; continue; } else { /* nl != NULL || whole_lines == 0 */ if (sockbuf[ifds].whole_lines) { if (nl != NULL) *nl = '\0'; len = strlen(sockbuf[ifds].buf) + 1; } else if (sockbuf[ifds].buflen > buflen) len = buflen; else len = sockbuf[ifds].buflen; memcpy(buf, sockbuf[ifds].buf, len); if (sockbuf[ifds].buflen > len) memmove(sockbuf[ifds].buf, sockbuf[ifds].buf + len, sockbuf[ifds].buflen - len); sockbuf[ifds].buflen -= len; *fd = ifds; if (sockbuf[ifds].buflen) ifds--; } return len; } } } } long resolve(char *hostname) { unsigned long int haddr; unsigned char a[4]; int i; char *s, *d, *c; int valid = 1; if (initialize()) return -1L; s = hostname; for (i = 0; i < 4; i++) { if (s) { d = strchr(s, '.'); if (!d) d = s + strlen(s); for (c = s; c < d; c++) if (*c < '0' || *c > '9') valid = 0; if (!valid) break; a[i] = atoi(s); s = strchr(s, '.'); if (s) s++; } else { valid = 0; break; } } if (valid) { haddr = a[3] + 256u * (a[2] + 256u * (a[1] + 256u * a[0])); haddr = htonl(haddr); } else { struct hostent *hp; if ((hp = gethostbyname(hostname)) == NULL) { herror("resolve: gethostbyname"); return -1L; } memcpy(&haddr, hp->h_addr, hp->h_length); } strcpy(sockserv_error, ""); return (haddr); } int startcliaddr(int family, unsigned long int addr, unsigned short int portnum) { extern WINDOW *sclwin; int s; struct sockaddr_in sin; initialize(); memset(&sin, 0, sizeof(sin)); sin.sin_addr.s_addr = addr; sin.sin_family = family; sin.sin_port = htons(portnum); while ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) { if (errno != EINTR) { wprintw(sclwin, "socket failure"); wrefresh(sclwin); sleep(1); return -1; } } while (connect(s, (struct sockaddr *) &sin, sizeof(sin)) == -1) { if (errno != EINTR) { return (-1); } } if (nfds <= s) nfds = s + 1; if (ifds == -1) ifds = nfds - 1; FD_SET(s, &openfds); wprintw(sclwin, "still here..."); wrefresh(sclwin); sleep(2); sockbuf[s].buf = (char *) malloc(sizeof(char) * SOBUF); // sockbuf[s].buf = (char *)socketbuffer; // debug sockbuf[s].buflen = 0; sockbuf[s].fragment = 0; sockbuf[s].whole_lines = 0; wprintw(sclwin, "not dead..."); wrefresh(sclwin); sleep(1); return s; } int startcli(void) { extern char pr_hostaddress[]; extern int portnum; unsigned long int haddr; int addrtype; haddr = resolve(pr_hostaddress); addrtype = AF_INET; return (startcliaddr(addrtype, haddr, (short) portnum)); } void socktimeout(int msec) { if (!socktimeval) socktimeval = (struct timeval *) malloc(sizeof(struct timeval)); if (!selecttimeval) selecttimeval = (struct timeval *) malloc(sizeof(struct timeval)); socktimeval->tv_sec = msec / 1000L; socktimeval->tv_usec = (msec % 1000L) * 1000L; } void nosocktimeout(void) { free(socktimeval); socktimeval = NULL; free(selecttimeval); selecttimeval = NULL; } void set_udp_peer(long address, int portnum) { memset(&udp_peer, 0, sizeof(udp_peer)); udp_peer.sin_addr.s_addr = address; udp_peer.sin_family = AF_INET; udp_peer.sin_port = htons(portnum); peerlen = sizeof(udp_peer); } void get_udp_peer(long *address, int *portnum) { *address = udp_peer.sin_addr.s_addr; *portnum = 0; *portnum = ntohs(udp_peer.sin_port); } tlf-1.4.0/src/ui_utils.h0000644000175000017500000000230013562576621012027 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2015 Thomas Beierlein * * 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 */ #ifndef UI_UTILS_H #define UI_UTILS_H extern int key_kNXT3; extern int key_kPRV3; extern int key_kNXT5; extern int key_kPRV5; void refreshp(); int modify_attr(int attr); int lookup_key(char *capability); void lookup_keys(); /** convenience macro to name alt-keys */ #define ALT(c) (c + 128) int key_get(); int key_poll(); void resize_layout(); #endif /* UI_UTILS_H */ tlf-1.4.0/src/clear_display.c0000644000175000017500000001030113562576621013000 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Thomas Beierlein #include #include "cw_utils.h" #include "get_time.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "printcall.h" #include "qsonr_to_str.h" #include "searchlog.h" // Includes glib.h #include "showscore.h" #include "tlf_curses.h" #include "ui_utils.h" void clear_display(void) { extern char mode[]; extern int cqdelay; extern char headerline[]; extern char terminal1[]; extern char terminal2[]; extern char terminal3[]; extern char terminal4[]; extern char backgrnd_str[]; extern char band[NBANDS][4]; extern int bandinx; extern int trxmode; extern char my_rst[]; extern char his_rst[]; extern char qsonrstr[]; extern int cqww; extern int arrldx_usa; extern char comment[]; extern char hiscall[]; extern int searchflg; extern int m; extern struct tm *time_ptr; extern char whichcontest[]; extern int no_rst; char time_buf[80]; char speedbuf[4] = " "; int cury, curx; snprintf(speedbuf, 3, "%2u", GetCWSpeed()); getyx(stdscr, cury, curx); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 0, " "); mvprintw(0, 0, " %s S=%s D=%i ", mode, speedbuf, cqdelay); mvprintw(0, 21, headerline); attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); mvaddstr(1, 0, terminal1); mvaddstr(2, 0, terminal2); mvaddstr(3, 0, terminal3); mvaddstr(4, 0, terminal4); mvaddstr(5, 0, backgrnd_str); attron(COLOR_PAIR(C_HEADER)); mvaddstr(6, 0, backgrnd_str); mvprintw(6, (80 - strlen(whichcontest)) / 2 - 4, " == %s == ", whichcontest); showscore(); attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); mvaddstr(7, 0, logline0); mvaddstr(8, 0, logline1); mvaddstr(9, 0, logline2); mvaddstr(10, 0, logline3); mvaddstr(11, 0, logline4); attron(COLOR_PAIR(C_WINDOW)); mvaddstr(12, 0, backgrnd_str); mvaddstr(12, 0, band[bandinx]); get_time(); if (trxmode == CWMODE) strftime(time_buf, 60, "CW %d-%b-%y %H:%M ", time_ptr); else if (trxmode == SSBMODE) strftime(time_buf, 60, "SSB %d-%b-%y %H:%M ", time_ptr); else strftime(time_buf, 60, "DIG %d-%b-%y %H:%M ", time_ptr); m = time_ptr->tm_mon; /* month for muf calc */ mvprintw(12, 3, time_buf); qsonr_to_str(); mvaddstr(12, 23, qsonrstr); if (trxmode != SSBMODE) { my_rst[2] = '9'; his_rst[2] = '9'; } else { my_rst[2] = ' '; his_rst[2] = ' '; } if (no_rst) { mvaddstr(12, 44, " "); mvaddstr(12, 49, " "); } else { mvaddstr(12, 44, his_rst); mvaddstr(12, 49, my_rst); } if (cqww == 1) { attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvaddstr(12, 54, comment); } if (arrldx_usa == 1) { attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvaddstr(12, 54, comment); } if (searchflg == SEARCHWINDOW) searchlog(hiscall); printcall(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(LINES - 1, 0, backgrnd_str); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(cury, curx, ""); refreshp(); } tlf-1.4.0/src/showzones.c0000644000175000017500000000424513562576621012236 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * show zone map * *--------------------------------------------------------------*/ #include "nicebox.h" // Includes curses.h #include "tlf.h" #include "tlf_panel.h" #include "bands.h" int show_zones(int bandinx) { extern int zonedisplay; extern int zones[MAX_ZONES]; static WINDOW *zones_win = NULL; static PANEL *zones_panel = NULL; int i = 0, j = 0; int xloc = 1; int yloc = 1; int zonenr; if (zones_panel == NULL) { zones_win = newwin(10, 18, 14, 22); if (zones_win == NULL) return -1; zones_panel = new_panel(zones_win); if (zones_panel == NULL) { delwin(zones_win); return -1; } } if (zonedisplay != 1) { hide_panel(zones_panel); return (0); } show_panel(zones_panel); top_panel(zones_panel); werase(zones_win); wnicebox(zones_win, 0, 0, 8, 16, "Zones"); wattron(zones_win, COLOR_PAIR(C_INPUT) | A_STANDOUT); for (i = 0; i < 8; i++) { wmove(zones_win, i + yloc, xloc); for (j = 0; j < 5; j++) { zonenr = (i * 5) + j + 1; /* 1.. 40 */ if ((zones[zonenr] & inxes[bandinx]) == 0) { /* still to work */ wprintw(zones_win, " %02d", zonenr); } else { /* already worked */ wprintw(zones_win, " "); } } wprintw(zones_win, " "); } return (0); } tlf-1.4.0/src/qtcwin.h0000644000175000017500000000170713562576621011511 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Ervin Hegedüs - HA2OS * * 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 */ #ifndef QTCWIN_H #define QTCWIN_H void qtc_main_panel(int direction); #endif /* end of include guard: QTCWIN_H */ tlf-1.4.0/src/getpx.h0000644000175000017500000000164713562576621011336 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef GETPX_H #define GETPX_H void getpx(char *checkcall); #endif /* GETPX_H */ tlf-1.4.0/src/lancode.h0000644000175000017500000000262313562576621011607 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef LANCODE_H #define LANCODE_H #define MAXNODES 8 #define LOGENTRY 49 #define CLUSTERMSG 50 #define TLFSPOT 51 #define TLFMSG 52 #define FREQMSG 53 #define INCQSONUM 54 #define TIMESYNC 55 #define QTCRENTRY 56 #define QTCSENTRY 57 #define QTCFLAG 58 #include int lanrecv_init(void); int lan_recv_close(void); int lan_recv(void); int lan_send_init(void); int lan_send_close(void); int lan_send(char *lanbuffer) ; int send_lan_message(int opcode, char *message); void talk(void); int send_freq(freq_t freq); int send_time(void) ; #endif /* LANCODE_H */ tlf-1.4.0/src/searchlog.c0000644000175000017500000005113213562576621012143 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedüs - HA2OS * 2018 Thomas Beierlein - * * 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 */ /* ------------------------------------------------------------ * Search log for calls / bands / countries * *--------------------------------------------------------------*/ #include #include #include #include "dxcc.h" #include "err_utils.h" #include "getctydata.h" #include "getpx.h" #include "nicebox.h" // Includes curses.h #include "printcall.h" #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "searchlog.h" // Includes glib.h #include "tlf_panel.h" #include "ui_utils.h" #include "zone_nr.h" #include "searchcallarray.h" #include "get_time.h" #include "addmult.h" char *callmaster_filename = NULL; GPtrArray *callmaster = NULL; char searchresult[MAX_CALLS][82]; char result[MAX_CALLS][82]; int srch_index = 0; char qtcflags[6] = {' ', ' ', ' ', ' ', ' ', ' '}; static const int xwin = 1; static const int ywin = 1; PANEL *search_panel; WINDOW *search_win; static int initialized = 0; int nr_bands; void show_needed_sections(void); /** Check for all band mode * * Check if we work real contest (only nonWARC bands allowed) * or our mode allows also WARC bands (e.g. dxped or simple QSO mode) * \return - true if also WARC bands */ int IsAllBand() { extern int dxped; extern int contest; return ((dxped != 0) || (contest == 0)); } void InitSearchPanel() { if (IsAllBand()) nr_bands = 9; else nr_bands = 6; search_win = newwin(nr_bands + 2, 39, 1, 41); search_panel = new_panel(search_win); hide_panel(search_panel); } void ShowSearchPanel(void) { if (!initialized) { InitSearchPanel(); initialized = 1; } show_panel(search_panel); top_panel(search_panel); } void HideSearchPanel(void) { hide_panel(search_panel); } void drawSearchWin(void) { int i; wbkgd(search_win, (chtype)(' ' | COLOR_PAIR(C_LOG))); werase(search_win); wnicebox(search_win, 0, 0, nr_bands, 37, "Worked"); if (qtcdirection > 0) { mvwprintw(search_win, 0, 35, "Q"); } wattrset(search_win, COLOR_PAIR(C_LOG) | A_STANDOUT); for (i = 0; i < nr_bands; i++) mvwprintw(search_win, i + 1, 1, " "); mvwprintw(search_win, 1, 1, " 10"); mvwprintw(search_win, 2, 1, " 15"); mvwprintw(search_win, 3, 1, " 20"); mvwprintw(search_win, 4, 1, " 40"); mvwprintw(search_win, 5, 1, " 80"); mvwprintw(search_win, 6, 1, "160"); if (IsAllBand()) { mvwprintw(search_win, 7, 1, " 12"); mvwprintw(search_win, 8, 1, " 17"); mvwprintw(search_win, 9, 1, " 30"); } } void displayCallInfo(dxcc_data *dx, int z, char *pxstr) { int i; wattroff(search_win, A_STANDOUT); wattron(search_win, COLOR_PAIR(C_BORDER)); mvwprintw(search_win, nr_bands + 1, 2, dx->countryname); mvwprintw(search_win, nr_bands + 1, 32, "%02d", dx->cq); if (itumult != 1) mvwprintw(search_win, nr_bands + 1, 32, "%02d", z); else mvwprintw(search_win, nr_bands + 1, 28, "ITU:%02d", z); if (wpx == 1) { i = strlen(dx->countryname); mvwprintw(search_win, nr_bands + 1, 2 + i + 3, pxstr); } } int displayPartials(char *suggested_call) { extern int dupe; int l, j, k; char *loc; char printres[14] = ""; int suggested = 0; l = 0; j = 0; attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); for (k = 1; k <= 5; k++) { mvprintw(k, 0, "%s", " "); } attrset(COLOR_PAIR(C_DUPE)); mvprintw(1, 1, "??"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); /* check what we have worked first */ /** \todo the method below parses through the array of already * looked up search results from the search window. That is quick * but has the drawback, that we have no band information and * therefore print some entries more than once. * Better would be to lookup the partial call in the array of * worked stations 'callarray' - it is there only once and we can * also see from 'call_band' if it is a dupe here. * be aware of the problem of marking it dupe only for a complete * match. */ for (k = 0; k < srch_index; k++) { if (strlen(hiscall) >= 2 && strlen(searchresult[k]) > 2) { if (strstr(searchresult[k], hiscall) != NULL) { printres[0] = '\0'; strncat(printres, searchresult[k] + 29, 12); /* cut string just at first space after call */ loc = strchr(printres, ' '); if (loc) *loc = '\0'; if (dupe == ISDUPE) { attrset(COLOR_PAIR(C_DUPE)); } else { attron(modify_attr(COLOR_PAIR(C_BORDER) | A_STANDOUT)); } mvprintw(xwin + l, ywin + j, "%s ", printres); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); attroff(A_BOLD); j += (strlen(printres) + 1); if (j >= 30) { l++; j = 0; } if (l > 4) break; } } } if (strcmp(hiscall, printres) != 0) { /* and now check callmaster database */ for (k = 0; k < callmaster->len; k++) { if (strstr(CALLMASTERARRAY(k), hiscall) != NULL) { attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); mvprintw(xwin + l, ywin + j, "%s ", CALLMASTERARRAY(k)); if (strlen(suggested_call) == 0) { strcpy(suggested_call, CALLMASTERARRAY(k)); suggested++; } j += strlen(CALLMASTERARRAY(k)) + 1; if (j >= 30) { l++; j = 0; } if (l > 4) break; } } } return suggested; } /* Display list of partials and handle USEPARTIAL auto-completion */ void handlePartials(void) { extern int use_part; extern int block_part; char suggested_call[LOGLINELEN + 1] = ""; int nr_suggested; /* print list of partials in upper left region */ nr_suggested = displayPartials(suggested_call); /* pick call from log if unique there */ if ((nr_suggested == 0) && (srch_index == 1)) { gchar **list = g_strsplit(result[0] + 12, " ", 2); if (list != NULL) { g_strlcpy(suggested_call, list[0], 13); g_strfreev(list); } } nr_suggested += srch_index; /* If only one partial call found and USEPARTIALS set, * use that call for auto-completion. Can be blocked by * pressing tab in calledit() function */ if ((nr_suggested == 1) && (use_part == 1) && (block_part == 0)) { if (strlen(suggested_call) > strlen(hiscall)) { strcpy(hiscall, suggested_call); beep(); } } } /* Parses searchresult and prepare string for searchwindow display from it */ void extractData(int index) { extern int show_time; g_strlcpy(result[index], searchresult[index], 7); /* band + mode */ if (show_time == 1) // show qso time strncat(result[index], searchresult[index] + 17, 5); else // show qso number strncat(result[index], searchresult[index] + 22, 5); strncat(result[index], searchresult[index] + 28, 12); /* call */ strncat(result[index], searchresult[index] + 52, 16); /* exch */ } /* find band from bandstring and choose line 'j' for display */ int bandstr2line(char *buffer) { int j = 0; if (buffer[1] == '1' && buffer[2] == '0') j = 1; if (buffer[1] == '1' && buffer[2] == '5') j = 2; if (buffer[1] == '2') j = 3; if (buffer[1] == '4') j = 4; if (buffer[1] == '8') j = 5; if (buffer[1] == '6') j = 6; if (buffer[1] == '1' && buffer[2] == '2') j = 7; if (buffer[1] == '1' && buffer[2] == '7') j = 8; if (buffer[1] == '3' && buffer[2] == '0') j = 9; return j; } /* search complete Log for 'hiscall' as substring in callsign field and * copy found QSO to 'searchresults'. Extract relevant data to 'result'. * */ void filterLog() { extern int mixedmode; extern int trxmode; extern char qsos[MAX_QSOS][LOGLINELEN + 1]; int qso_index = 0; char s_inputbuffer[LOGLINELEN + 1] = ""; srch_index = 0; while (strlen(qsos[qso_index]) > 4) { if (((qsos[qso_index][3] == 'C' && trxmode == CWMODE) || (qsos[qso_index][3] == 'S' && trxmode == SSBMODE) || (qsos[qso_index][3] == 'D' && trxmode == DIGIMODE)) || mixedmode == 0) { // ist letzterTest korrekt? g_strlcpy(s_inputbuffer, qsos[qso_index] + 29, 13); /* call */ if (strstr(s_inputbuffer, hiscall) != 0) { g_strlcpy(searchresult[srch_index], qsos[qso_index], 81); extractData(srch_index); if (srch_index++ > MAX_CALLS - 1) break; } } qso_index++; } } void displaySearchResults(void) { extern int dupe; extern int ignoredupe; extern int qso_once; extern int mixedmode; extern int ignoredupe; extern int minitest; extern int bandinx; extern char band[NBANDS][4]; int r_index; char s_inputbuffer[LOGLINELEN + 1] = ""; char qtccall[15]; // temp str for qtc search int found, display_dupe, mod; int z, l, j; time_t currtime; struct t_qtc_store_obj *qtc_temp_ptr; dupe = NODUPE; /* print resulting call in line according to band in check window */ for (r_index = 0; r_index < srch_index; r_index++) { wattrset(search_win, COLOR_PAIR(C_WINDOW) | A_STANDOUT); g_strlcpy(s_inputbuffer, result[r_index], 38); if ((hiscall[0] == s_inputbuffer[12]) && (strlen(hiscall) >= 3 && (s_inputbuffer[12 + strlen(hiscall)] == ' '))) { /* full call match */ if ((strncmp(band[bandinx], s_inputbuffer, 3) == 0) || (qso_once == 1)) { /* band matches */ if (ignoredupe == 0) { /* do we ignore dupes? */ display_dupe = 1; if (minitest > 0) { found = searchcallarray(hiscall); if (found > -1) { currtime = mktime(time_ptr); mod = ((long)currtime) % minitest; /* how many secods passed till last period */ if (worked[found].qsotime[trxmode][bandinx] < (((long)currtime) - mod)) { display_dupe = 0; } } } if (display_dupe == 1) { if ((mixedmode == 0) || ((s_inputbuffer[3] == 'C') && (trxmode == CWMODE)) || ((s_inputbuffer[3] == 'S') && (trxmode == SSBMODE))) { wattrset(search_win, COLOR_PAIR(C_DUPE)); dupe = ISDUPE; beep(); } } } // end ignoredupe } } /* display line in search window */ j = bandstr2line(s_inputbuffer); if ((j < 7) || IsAllBand()) { mvwprintw(search_win, j, 1, "%s", s_inputbuffer); } if ((j > 0) && (j < 7)) { /* no WARC band */ if (qtcdirection > 0) { qtccall[0] = '\0'; z = 12; // first pos of callsign l = 0; do { qtccall[l] = s_inputbuffer[z]; z++; l++; } while (s_inputbuffer[z] != ' '); qtccall[l] = '\0'; qtc_temp_ptr = qtc_get(qtccall); qtcflags[j - 1] = qtc_get_value(qtc_temp_ptr); } } s_inputbuffer[0] = '\0'; } } int getZone() { char zonebuffer[3]; int z; static int z1; z = 0; if (strlen(hiscall) == 2) z1 = 0; if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) { for (int i = 0; i < srch_index; i++) { /* get zone nr from previous QSO */ /* \FIXME use nr from last displayed entry * which is the right one if we have a full match */ if (strlen(result[i]) >= 24) { /* convert exchange back to zone nr */ g_strlcpy(zonebuffer, result[i] + 25, 3); z1 = zone_nr(zonebuffer); } } if (z1 != 0) { z = z1; } else { if (strlen(zone_fix) > 1) { g_strlcpy(zonebuffer, zone_fix, 3); } else g_strlcpy(zonebuffer, zone_export, 3); z = zone_nr(zonebuffer); } } return z; } void displayWorkedZonesCountries(int z) { extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern int countries[MAX_DATALINES]; extern int zones[MAX_ZONES]; extern int contest; extern int pacc_qsos[10][10]; extern int w_cty; extern int ve_cty; extern int ja_cty; extern int zl_cty; extern int vk_cty; extern int ua9_cty; extern int lu_cty; extern int py_cty; extern int ce_cty; extern int zs_cty; static int pxnr; int pfxnumcntidx; /* print worked zones and countrys for each band in checkwindow */ wattron(search_win, COLOR_PAIR(C_HEADER) | A_STANDOUT); if (qtcdirection > 0) { for (int l = 0; l < 6; l++) { if (qtcflags[l] != ' ') { mvwprintw(search_win, l + 1, 35, "%c", qtcflags[l]); } } } if (cqww == 1 || contest == 0 || pacc_pa_flg == 1) { if ((countries[countrynr] & BAND10) != 0) { mvwprintw(search_win, 1, 36, "C"); mvwprintw(search_win, 1, 1, " 10"); } if ((countries[countrynr] & BAND15) != 0) { mvwprintw(search_win, 2, 36, "C"); mvwprintw(search_win, 2, 1, " 15"); } if ((countries[countrynr] & BAND20) != 0) { mvwprintw(search_win, 3, 36, "C"); mvwprintw(search_win, 3, 1, " 20"); } if ((countries[countrynr] & BAND40) != 0) { mvwprintw(search_win, 4, 36, "C"); mvwprintw(search_win, 4, 1, " 40"); } if ((countries[countrynr] & BAND80) != 0) { mvwprintw(search_win, 5, 36, "C"); mvwprintw(search_win, 5, 1, " 80"); } if ((countries[countrynr] & BAND160) != 0) { mvwprintw(search_win, 6, 1, "160"); mvwprintw(search_win, 6, 36, "C"); } if (IsAllBand()) { if ((countries[countrynr] & BAND12) != 0) { mvwprintw(search_win, 7, 1, " 12"); mvwprintw(search_win, 7, 36, "C"); } if ((countries[countrynr] & BAND17) != 0) { mvwprintw(search_win, 8, 1, " 17"); mvwprintw(search_win, 8, 36, "C"); } if ((countries[countrynr] & BAND30) != 0) { mvwprintw(search_win, 9, 1, " 30"); mvwprintw(search_win, 9, 36, "C"); } } } if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) { if ((zones[z] & BAND10) != 0) { mvwprintw(search_win, 1, 37, "Z"); } if ((zones[z] & BAND15) != 0) { mvwprintw(search_win, 2, 37, "Z"); } if ((zones[z] & BAND20) != 0) { mvwprintw(search_win, 3, 37, "Z"); } if ((zones[z] & BAND40) != 0) { mvwprintw(search_win, 4, 37, "Z"); } if ((zones[z] & BAND80) != 0) { mvwprintw(search_win, 5, 37, "Z"); } if ((zones[z] & BAND160) != 0) { mvwprintw(search_win, 6, 37, "Z"); } } if (pacc_pa_flg == 1) { getpx(hiscall); pxnr = pxstr[strlen(pxstr) - 1] - 48; if ((countrynr == w_cty) || (countrynr == ve_cty) || (countrynr == ja_cty) || (countrynr == py_cty) || (countrynr == lu_cty) || (countrynr == ua9_cty) || (countrynr == zl_cty) || (countrynr == ce_cty) || (countrynr == zs_cty) || (countrynr == vk_cty)) { if ((pacc_qsos[0][pxnr] & BAND160) == BAND160) mvwprintw(search_win, 6, 37, "M"); if ((pacc_qsos[0][pxnr] & BAND80) == BAND80) mvwprintw(search_win, 5, 37, "M"); if ((pacc_qsos[0][pxnr] & BAND40) == BAND40) mvwprintw(search_win, 4, 37, "M"); if ((pacc_qsos[0][pxnr] & BAND20) == BAND20) mvwprintw(search_win, 3, 37, "M"); if ((pacc_qsos[0][pxnr] & BAND15) == BAND15) mvwprintw(search_win, 2, 37, "M"); if ((pacc_qsos[0][pxnr] & BAND10) == BAND10) mvwprintw(search_win, 1, 37, "M"); } } if ((pfxnummultinr >= 0 || country_mult) && contest == 1) { getpx(hiscall); pxnr = pxstr[strlen(pxstr) - 1] - 48; getctydata(hiscall); pfxnumcntidx = -1; int tbandidx = -1; if (pfxnummultinr >= 0) { int pfxi = 0; while (pfxi < pfxnummultinr) { if (pfxnummulti[pfxi].countrynr == countrynr) { pfxnumcntidx = pfxi; break; } pfxi++; } } if (pfxnumcntidx >= 0) { tbandidx = pfxnummulti[pfxnumcntidx].qsos[pxnr]; } else { tbandidx = countries[countrynr]; } if ((tbandidx & BAND160) == BAND160) { mvwprintw(search_win, 6, 37, "M"); } if ((tbandidx & BAND80) == BAND80) { mvwprintw(search_win, 5, 37, "M"); } if ((tbandidx & BAND40) == BAND40) { mvwprintw(search_win, 4, 37, "M"); } if ((tbandidx & BAND20) == BAND20) { mvwprintw(search_win, 3, 37, "M"); } if ((tbandidx & BAND15) == BAND15) { mvwprintw(search_win, 2, 37, "M"); } if ((tbandidx & BAND10) == BAND10) { mvwprintw(search_win, 1, 37, "M"); } } } void searchlog(char *searchstring) { extern int isdupe; // LZ3NY auto-b4 patch extern int searchflg; extern int dupe; extern int partials; extern int cqww; extern int countrynr; extern int wpx; extern int arrlss; extern char pxstr[]; extern char hiscall[]; extern char zone_export[]; extern char zone_fix[]; extern int wazmult; extern int itumult; dxcc_data *dx; int zone; get_time(); if (!initialized) { InitSearchPanel(); initialized = 1; } /* show checkwindow and partials */ if (strlen(hiscall) > 1 && searchflg == SEARCHWINDOW) { ShowSearchPanel(); drawSearchWin(); filterLog(); displaySearchResults(); /* prepare and print lower line of checkwindow */ dx = dxcc_by_index(countrynr); zone = getZone(); displayCallInfo(dx, zone, pxstr); displayWorkedZonesCountries(zone); refreshp(); if (partials == 1) { handlePartials(); } /* show needed sections for ARRL_Sweep Stake*/ if (dupe == NODUPE && arrlss == 1) show_needed_sections(); if (dupe == ISDUPE) { isdupe = 1; // LZ3NY auto-b4 patch attrset(COLOR_PAIR(C_DUPE)); mvprintw(12, 29, hiscall); refreshp(); usleep(500000); } else isdupe = 0; // LZ3NY auto-b4 patch printcall(); } else { HideSearchPanel(); } } /* loading callmaster database */ static void init_callmaster(void) { if (callmaster) { g_ptr_array_free(callmaster, TRUE); } callmaster = g_ptr_array_new_full(CALLMASTER_SIZE, g_free); } /** loads callmaster database from file * returns number of loaded calls */ int load_callmaster(void) { FILE *cfp; char callmaster_location[80]; char s_inputbuffer[186] = ""; init_callmaster(); if (callmaster_filename == NULL) callmaster_filename = g_strdup("callmaster"); strcpy(callmaster_location, callmaster_filename); if ((cfp = fopen(callmaster_location, "r")) == NULL) { callmaster_location[0] = '\0'; strcpy(callmaster_location, PACKAGE_DATA_DIR); strcat(callmaster_location, "/"); strcat(callmaster_location, callmaster_filename); if ((cfp = fopen(callmaster_location, "r")) == NULL) { g_ptr_array_free(callmaster, TRUE); callmaster = NULL; TLF_LOG_WARN("Error opening callmaster file."); return 0; } } while (fgets(s_inputbuffer, 85, cfp) != NULL) { g_strstrip(s_inputbuffer); /* skip comment lines and calls shorter than 3 chars */ if (s_inputbuffer[0] == '#' || strlen(s_inputbuffer) < 3) { continue; } s_inputbuffer[12] = '\0'; /* terminate line length */ if (arrlss) { /* keep only NA stations */ if (strchr("AKWVCN", s_inputbuffer[0]) == NULL) { continue; } } g_ptr_array_add(callmaster, g_strdup(s_inputbuffer)); } fclose(cfp); return callmaster->len; } /* -------------------------------------------------------------- */ void show_needed_sections(void) { extern int arrlss; extern int nr_multis; extern struct mults_t multis[MAX_MULTS]; int j, vert, hor, cnt, found; char mprint[50]; if (arrlss == 1) { cnt = 0; wattron(search_win, modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 1; j < 7; j++) mvwprintw(search_win, j, 1, " "); for (vert = 1; vert < 7; vert++) { if (cnt >= get_mult_count()) break; for (hor = 0; hor < 9; hor++) { if (cnt >= get_mult_count()) break; strcpy(mprint, get_mult(cnt)); found = 0; for (j = 0; j < nr_multis; j++) { if (strncmp(multis[j].name, mprint, strlen(mprint)) == 0) { found = 1; break; } } if (found != 1) { mprint[3] = '\0'; wattron(search_win, modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); if (strlen(mprint) > 1) mvwprintw(search_win, vert, (hor * 4) + 2, "%s ", mprint); } else hor--; cnt++; } } } wnicebox(search_win, 0, 0, 6, 37, "Needed Sections"); refreshp(); } void OnLowerSearchPanel(int x, char *str) { int y = 1 + (IsAllBand() ? 9 : 6); wattrset(search_win, modify_attr(COLOR_PAIR(C_BORDER))); mvwprintw(search_win, y, x, str); } tlf-1.4.0/src/clusterinfo.h0000644000175000017500000000201513562576621012532 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011-2014 Thomas Beierlein * * 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 */ #ifndef CLUSTERINFO_H #define CLUSTERINFO_H void clusterinfo(void); #endif /* end of include guard: CLUSTERINFO_H */ tlf-1.4.0/src/focm.c0000644000175000017500000001526113562576621011123 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2014 Thomas Beierlein * * 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 "displayit.h" #include "dxcc.h" #include "getctydata.h" #include "initial_exchange.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #include "bands.h" extern int focm; extern int contest; extern int showscore_flag; extern int searchflg; extern int total; extern int countries[]; struct pos { int column; int line; }; int g4foc_index; /* index of Gx4FOC in callarray */ int g4foc_count; /* how often did we work him */ int five_banders; int six_banders; int cntry; int cont; /** Initialize settings for FOC contest */ void foc_init(void) { focm = 1; contest = 1; showscore_flag = 1; searchflg = 1; } /** calculate score for last QSO * * Calculate the point score for the last qso. Each qso counts one * point on every band. Only exception are qsos with Gx4FOC/xxx which * counts two points. * \param call call of the other station * \return number of points given */ int foc_score(char *call) { if (g_regex_match_simple("^G(|[A-Z])4FOC(|/.*)", call, G_REGEX_CASELESS, (GRegexMatchFlags)0)) { return 2; } else { return 1; } } /* display scoring */ /* count worked contest bands */ static int nr_of_bands(int x) { int i; int nr = 0; for (i = 0; i < NBANDS; i++) { /* if worked on band and band is not WARC band */ if ((x & inxes[i]) && !IsWarcIndex(i)) nr++; } return nr; } /** count 5/6banders * * count the number of stations worked on 5 or 6 band (including G4FOC) */ static void count_56_banders() { int i, nr; extern struct worked_t worked[]; extern int nr_worked; five_banders = 0; six_banders = 0; for (i = 0; i < nr_worked; i++) { nr = nr_of_bands(worked[i].band); if (nr >= 5) /* sixbanders are also fivebanders */ five_banders++; if (nr == 6) six_banders++; } } static int search_g4foc_in_callarray(void) { extern int nr_worked; extern struct worked_t worked[]; int found = -1; int i; for (i = 0; i < nr_worked; i++) { if (g_regex_match_simple("^G(|[A-Z])4FOC(|/.*)", worked[i].call, G_REGEX_CASELESS, (GRegexMatchFlags)0)) { found = i; break; } } return (found); } /* count nr of countries worked on all bands */ static int get_nr_cntry() { int cnt = 0; int i; for (i = 0; i < dxcc_count(); i++) { if (countries[i] != 0) cnt++; } return cnt; } /* count number of continents worked on all bands */ static int get_nr_cont() { extern struct worked_t worked[]; extern int nr_worked; GHashTable *cont; dxcc_data *data; int nr, i; cont = g_hash_table_new(g_str_hash, g_str_equal); for (i = 0; i < nr_worked; i++) { data = dxcc_by_index(worked[i].country); g_hash_table_replace(cont, data->continent, data->continent); } nr = g_hash_table_size(cont); g_hash_table_destroy(cont); return nr; } /** calculate total score for FOC marathon * * \return number of points */ int foc_total_score() { extern struct worked_t worked[]; int points; /* first find Gx4FOC in call array and see how often we worked him */ g4foc_index = search_g4foc_in_callarray(); if (g4foc_index != -1) g4foc_count = nr_of_bands(worked[g4foc_index].band); else g4foc_count = 0; /* count countries and continents */ cntry = get_nr_cntry(); cont = get_nr_cont(); /* count 5 and 6 banders and eventually correct for G4FOC */ count_56_banders(); if (g4foc_count >= 5) five_banders++; if (g4foc_count == 6) six_banders++; points = total + /* total contains FOC qsos twice */ five_banders * 10 + six_banders * 5 + cntry * 2 + cont * 5; return points; } /** display scoring for FOC marathon */ void foc_show_scoring(int start_column) { int points = foc_total_score(); mvprintw(4, start_column, "%s", " QSO Cty Cont 5b 6b Score"); mvprintw(5, start_column, "%4d %3d %2d %4d %4d %4d", total, cntry * 2, cont * 5, five_banders * 10, six_banders * 5, points); } /* show needed countries */ /** build list of ´possible countries * * Scan initial exchange list and build a list of all countries * in that list. For each country check if we did already work that * country. Remember Cty and worked status in a GTree which * makes the entries unique and sorts it * \return pointer to the new GTree */ static GTree *build_country_list(struct ie_list *main_ie_list) { GTree *tree; int j; struct ie_list *list_head = main_ie_list; tree = g_tree_new_full((GCompareDataFunc)g_ascii_strcasecmp, NULL, g_free, NULL); while (list_head) { j = getctydata(list_head->call); g_tree_insert(tree, g_strdup(dxcc_by_index(j)->pfx), GINT_TO_POINTER(countries[j])); list_head = list_head->next; } return tree; } static gboolean show_it(gpointer key, gpointer val, gpointer data) { struct pos *pos = (struct pos *)data; if (GPOINTER_TO_INT(val) == 0) { standout(); attron(COLOR_PAIR(C_INPUT)); } else { standend(); attron(COLOR_PAIR(C_HEADER)); } mvprintw(pos->line, pos->column, "%-3s ", key); pos->column += 4; if (pos->column > 76) { pos->column = 0; pos->line ++; if (pos->line == 7) /* display full */ return TRUE; /* stop iterator */ } return FALSE; /* do not stop until end of tree */ } void foc_show_cty() { extern struct ie_list *main_ie_list; GTree *tree; struct pos pos; int l; tree = build_country_list(main_ie_list); attron(COLOR_PAIR(C_INPUT) | A_STANDOUT); for (l = 1; l < 6; l++) mvprintw(l, 0, " "); pos.line = 1; pos.column = 0; g_tree_foreach(tree, (GTraverseFunc)show_it, &pos); mvprintw(12, 29, "press a key..."); refreshp(); key_get(); displayit(); g_tree_destroy(tree); } tlf-1.4.0/src/showscore.c0000644000175000017500000002333313562576621012212 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2010 - 2015 Thomas Beierlein * 2013 Ervin Hegedüs - HA2OS * * 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 */ /* ------------------------------------------------------------ * showscore * *-------------------------------------------------------------*/ #include #include "addpfx.h" #include "focm.h" #include "globalvars.h" // Includes tlf.h #include "last10.h" #include "nicebox.h" // Includes curses.h #include "printcall.h" #include "bands.h" #define START_COL 45 /* start display in these column */ /* list of columns to display score for each band */ static int band_cols[6] = { 50, 55, 60, 65, 70, 75 }; /* list of BANDINDEX entries to show in each column * first - for normal contest bands * second - if in warc band */ static int bi_normal[6] = { BANDINDEX_160, BANDINDEX_80, BANDINDEX_40, BANDINDEX_20, BANDINDEX_15, BANDINDEX_10 }; static int bi_warc[6] = { BANDINDEX_160, BANDINDEX_80, BANDINDEX_40, BANDINDEX_30, BANDINDEX_17, BANDINDEX_12 }; /* bands as numbers */ static int bandnr[NBANDS] = { 160, 80, 40, 30, 20, 17, 15, 12, 10, 0 }; void printfield(int y, int x, int number); void stewperry_show_summary(int points, float fixedmult); /* show summary line for stewperry */ void stewperry_show_summary(int points, float fixedmult) { float mult; mvprintw(5, START_COL, " "); /* TODO: respect field boundaries for large numbers */ mult = (fixedmult == 0.0) ? 1.0 : fixedmult; mvprintw(5, START_COL, "Pts: %d Score: %d", points, (int)floor(points * mult)); } /* show summary line */ void show_summary(int points, int multi) { mvprintw(5, START_COL, " "); /* TODO: respect field boundaries for large numbers */ mvprintw(5, START_COL, "Pts: %d Mul: %d Score: %d", points, multi, points * multi); } /** show scoring header * * show header with active band and number of QSOs. * Use the list of bandindices in 'bi' for that * * \param bi list of band indices to use */ void display_header(int *bi) { int i; /* prepare header line */ attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); mvprintw(1, START_COL, "Band "); for (i = 0; i < 6; i++) { attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); addstr(" "); if (bandinx == bi[i]) { /* highlight active band */ attrset(COLOR_PAIR(C_DUPE)); } printw("%3d", bandnr[bi[i]]); } /* show number of QSO */ attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(2, START_COL, "QSO's "); for (i = 0; i < 6; i++) { printfield(2, band_cols[i], band_score[bi[i]]); } mvprintw(3, START_COL, " "); mvprintw(4, START_COL, " "); mvprintw(5, START_COL, " "); } extern int focm; extern int foc_get_nr_of_points(); /* get total number of points */ int get_nr_of_points() { return total; } /* get total number of multis */ int get_nr_of_mults() { extern float fixedmult; extern int sprint; extern int multlist; extern int multscore[]; extern int bandweight_multis[NBANDS]; extern int pfxmultab; int n; int totalzones; int totalcountries; int totalmults; /* precalculate summaries */ totalzones = 0; totalcountries = 0; totalmults = 0; for (n = 0; n < 6; n++) { totalzones += (zonescore[bi_normal[n]] * bandweight_multis[bi_normal[n]]); totalcountries += (countryscore[bi_normal[n]] * bandweight_multis[bi_normal[n]]); totalmults += (multscore[bi_normal[n]] * bandweight_multis[bi_normal[n]]); } if (sprint == 1) { /* no multis used */ return 1; } else if (arrlss == 1) { return nr_multis; } else if (cqww == 1) { return totalcountries + totalzones; } else if (arrldx_usa == 1) { return totalcountries; } else if (arrl_fd == 1) { /* arrl mults are always integers */ int mult = (int)floor(fixedmult + 0.5); /* round to nearest integer */ if (mult > 0) { return mult; } else { return 1; } } else if (dx_arrlsections == 1) { return totalmults + totalcountries; } else if (universal == 1 && country_mult == 1) { return totalcountries; } else if (universal == 1 && multlist == 1 && arrlss != 1) { return totalmults ; } else if (pacc_pa_flg == 1) { return totalcountries; } else if ((wysiwyg_once == 1) || (unique_call_multi == UNIQUECALL_ALL)) { return nr_multis; } else if ((wysiwyg_multi == 1) || (unique_call_multi == UNIQUECALL_BAND) || (serial_section_mult == 1) || (serial_grid4_mult == 1) || (sectn_mult == 1)) { return totalmults; } else if (wpx == 1) { return GetNrOfPfx_once(); } else if (pfxmultab == 1) { return GetNrOfPfx_multiband(); } else if ((itumult == 1) || (wazmult == 1)) { return totalzones; } else /* should never reach that point * * \TODO: so we need some instrument of warning here */ return 1; } /* calculate total score */ int get_total_score() { if (focm == 1) return foc_total_score(); else return get_nr_of_points() * get_nr_of_mults(); } /** show contest score * * display scoring results of contest if activated by 'showscore_flag' */ int showscore(void) { extern int showscore_flag; extern int cqww; extern int arrldx_usa; extern int arrl_fd; extern int arrlss; extern int pacc_pa_flg; extern int universal; extern int country_mult; extern int wysiwyg_once; extern int wysiwyg_multi; extern int totalmults; extern int qsonum; extern int total; extern int wpx; extern int sprint; extern int bandinx; extern int multscore[]; extern int serial_section_mult; extern int sectn_mult; extern int dx_arrlsections; extern float fixedmult; int i, l10; float p; if (showscore_flag == 1) { /* show header with active band and number of QSOs */ if (!IsWarcIndex(bandinx)) { display_header(bi_normal); } else { display_header(bi_warc); } /* show score per band */ if ((wysiwyg_multi == 1) || (serial_section_mult == 1) || (serial_grid4_mult == 1) || (sectn_mult == 1)) { mvprintw(3, START_COL, "Mult "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], multscore[bi_normal[i]]); } } if ((itumult == 1) || (wazmult == 1)) { mvprintw(3, START_COL, "Mult "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], zonescore[bi_normal[i]]); } } if (pfxmultab == 1) { mvprintw(3, START_COL, "Mult "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], GetNrOfPfx_OnBand(bi_normal[i])); } } if (dx_arrlsections == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } mvprintw(4, START_COL, "Sect"); for (i = 0; i < 6; i++) { printfield(4, band_cols[i], multscore[bi_normal[i]]); } } if (cqww == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } mvprintw(4, START_COL, "Zone "); for (i = 0; i < 6; i++) { printfield(4, band_cols[i], zonescore[bi_normal[i]]); } } if (arrldx_usa == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } } if (universal == 1 && country_mult == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } } if (pacc_pa_flg == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } } /* show score summary */ if (sprint == 1) { mvprintw(5, START_COL, "Score: %d", get_nr_of_points()); } else if (focm == 1) { foc_show_scoring(START_COL); } else if (stewperry_flg == 1) { /* no normal multis, but may have POWERMULT set (fixedmult != 0.) */ stewperry_show_summary(get_nr_of_points(), fixedmult); } else { show_summary(get_nr_of_points(), get_nr_of_mults()); } /* show statistics */ attron(COLOR_PAIR(C_HEADER)); mvprintw(6, 55, " "); if ((cqww == 1) || (wpx == 1) || (arrldx_usa == 1) || (pacc_pa_flg == 1) || (wysiwyg_once == 1) || (universal == 1)) { /* cqww or wpx */ totalmults = get_nr_of_mults(); totalmults = totalmults ? totalmults : 1; /* at least one */ p = ((qsonum - 1) / (float)totalmults); if ((l10 = last10()) >= 1) mvprintw(6, 55, "Q/M %.1f Rate %d ", p, (60 * 10) / l10); else mvprintw(6, 55, "Q/M %.1f ", p); } if (wpx == 1) { if (minute_timer > 0) mvprintw(6, 75, "%d", minute_timer); } printcall(); } return (0); } /** formated print of integer number 0..9999 */ void printfield(int y, int x, int number) { attron(COLOR_PAIR(C_LOG)); mvprintw(y, x, " %4d", number); } tlf-1.4.0/src/changepars.h0000644000175000017500000000201513562576621012310 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef CHANGEPARS_H #define CHANGEPARS_H #define RITCLEAR 1 int changepars(void); void networkinfo(void); void multiplierinfo(void); #endif /* end of include guard: CHANGEPARS_H */ tlf-1.4.0/src/logit.c0000644000175000017500000001337213562576621011316 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004-2005 Rein Couperus * 2010-2014 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------------------ * * Log routine * ------------------------------------------------------------------------*/ #include #include "background_process.h" #include "callinput.h" #include "clear_display.h" #include "getexchange.h" #include "keyer.h" #include "log_to_disk.h" #include "printcall.h" #include "recall_exchange.h" #include "searchlog.h" // Includes glib.h #include "sendbuf.h" #include "sendqrg.h" #include "sendspcall.h" #include "set_tone.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #include "cleanup.h" void refresh_comment(void); void change_mode(void); void logit(void) { extern char mode[]; extern int trxmode; extern char hiscall[]; extern int cqmode; extern int contest; extern char ph_message[14][80]; extern char comment[]; extern int cqww; extern char cqzone[]; extern char itustr[]; extern int defer_store; extern int recall_mult; extern int ctcomp; extern int wazmult; extern int itumult; extern int qsonum; extern int exchange_serial; extern int dxped; extern int sprint_mode; int callreturn = 0; int cury, curx; int qrg_out = 0; strcpy(mode, "Log "); clear_display(); defer_store = 0; start_background_process(); /* start it up */ while (1) { printcall(); if ((callreturn == 0) && (defer_store == 2)) callreturn = ' '; else callreturn = callinput(); qrg_out = sendqrg(); if (qrg_out == 0) { /* no frequency entered? */ if ((trxmode == CWMODE || trxmode == DIGIMODE) && (callreturn == '\n') && ctcomp == 1) { callreturn = 92; /* '\' */ strcpy(comment, cqzone); } if ((callreturn == 9 || callreturn == 32)) { callreturn = getexchange(); } if (callreturn == '\n' && strlen(hiscall) >= 3) { if ((*comment == '\0') && contest == CONTEST && !ctcomp && !dxped) defer_store = 0; if ((cqmode == CQ) && (contest == CONTEST) && (defer_store == 0)) { /* CQ mode */ send_standard_message(2); if (trxmode != CWMODE && trxmode != DIGIMODE) { if (exchange_serial == 1) mvprintw(13, 29, "Serial number: %d", qsonum); refreshp(); } if (strstr(hiscall, "?") != NULL) { setSimulatorState(3); } else { setSimulatorState(2); } if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) { if (recall_exchange() == -1) { if (itumult == 1) strcpy(comment, itustr); /* fill in the ITUzone */ else strcpy(comment, cqzone); /* fill in the CQzone */ } refresh_comment(); } if (recall_mult == 1) { recall_exchange(); } defer_store = 1; callreturn = 0; } if ((cqmode == S_P) && (contest == CONTEST) && (defer_store == 0)) { /* S&P mode */ if (cqww == 1) { if (strlen(comment) == 0 && recall_exchange() == -1) strcpy(comment, cqzone); /* fill in the zone */ refresh_comment(); } else if (recall_mult == 1) { recall_exchange(); } if (trxmode == CWMODE || trxmode == DIGIMODE) sendspcall(); else { play_file(ph_message[5]); if (exchange_serial == 1) mvprintw(13, 29, "Serial number: %d", qsonum); refreshp(); } defer_store = 1; callreturn = 0; } if (defer_store == 1) { defer_store++; callreturn = 0; } else if (defer_store > 1) { if ((cqmode == CQ) && (contest == CONTEST)) { send_standard_message(CQ_TU_MSG); /* send cq return */ setSimulatorState(1); defer_store = 0; } if ((cqmode == S_P) && (contest == CONTEST)) { send_standard_message(SP_TU_MSG); /* send S&P return */ defer_store = 0; } log_to_disk(false); if (sprint_mode == 1) { change_mode(); } HideSearchPanel(); } } if ((callreturn == 92) && (*hiscall != '\0')) { defer_store = 0; log_to_disk(false); if (sprint_mode == 1) { change_mode(); } HideSearchPanel(); } if (callreturn == 11 || callreturn == 44) { /* CTRL K */ getyx(stdscr, cury, curx); mvprintw(5, 0, ""); keyer(); mvprintw(cury, curx, ""); } } else { /* user entered frequency -> clear input field */ hiscall[0] = '\0'; HideSearchPanel(); } } } /** reprint comment field */ void refresh_comment(void) { extern char comment[]; attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 54, " "); mvprintw(12, 54, comment); } void change_mode(void) { extern char mode[]; extern int cqmode; /* switch to other mode */ if (cqmode == CQ) { cqmode = S_P; } else { cqmode = CQ; } /* and show new mode */ attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); if (cqmode == CQ) { mvprintw(0, 2, "Log "); strcpy(mode, "Log "); } else { mvprintw(0, 2, "S&P "); strcpy(mode, "S&P "); } } tlf-1.4.0/src/splitscreen.c0000644000175000017500000006405413562576621012536 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2016 Thomas Beierlein * * 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 */ /* Splitscreen telnet client */ /* Uses ncurses, so hopefully compatible with much */ /* dave brown n2rjt (dcb@vectorbd.com) wrote most of this */ /* TLF integration and TNC interface by PA0RCT 07/30/2002 */ /* Adaption to ncurses 6 by DL1JBE 2016 */ #define VERSIONSPLIT "V1.4.1 5/18/96 - N2RJT" #include #include #include #include #include #include #include #define SPLITSCREEN_H_PRIVATE #include "splitscreen.h" #include "bandmap.h" #include "clear_display.h" #include "get_time.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "ignore_unused.h" #include "lancode.h" #include "sockserv.h" #include "tlf_curses.h" #include "tlf_panel.h" #include "ui_utils.h" #include "err_utils.h" extern char backgrnd_str[]; struct tln_logline { struct tln_logline *next; struct tln_logline *prev; char *text; int attr; } ; pthread_mutex_t spot_ptr_mutex = PTHREAD_MUTEX_INITIALIZER; int prsock = 0; int fdFIFO = 0; WINDOW *packet_win; PANEL *packet_panel; WINDOW *sclwin, *entwin; static int initialized = 0; int in_packetclient; int currow; int curcol; int attr[3]; int color[3][2]; int curattr = 0; int insmode = TRUE; char outbuffer[82]; char lanflag; int lanspotflg = 0; int maxtln_loglines = DEFAULTTLN_LOGLINES; int tln_loglines = 0; struct tln_logline *loghead = NULL; struct tln_logline *logtail = NULL; struct tln_logline *viewing = NULL; int view_state = STATE_EDITING; char tln_input_buffer[2 * BUFFERSIZE]; void setup_splitlayout(); void addlog(char *s) { extern char lastwwv[]; extern char spot_ptr[MAX_SPOTS][82]; extern char lastmsg[]; extern int nr_of_spots; extern int clusterlog; int len; FILE *fp; struct tln_logline *temp; pthread_mutex_lock(&spot_ptr_mutex); for (len = 0; len < strlen(s); len += 80) { strncpy(spot_ptr[nr_of_spots], s + len, 82); if (strlen(spot_ptr[nr_of_spots]) > 5) { lastmsg[0] = '\0'; strncat(lastmsg, spot_ptr[nr_of_spots], 82); } if (clusterlog == 1) { if ((fp = fopen("clusterlog", "a")) == NULL) { TLF_LOG_INFO("Opening clusterlog not possible."); } else { if (strlen(lastmsg) > 20) { fputs(lastmsg, fp); fputs("\n", fp); } fclose(fp); } } nr_of_spots++; if (nr_of_spots > MAX_SPOTS - 1) { int idx; for (idx = 10; idx <= MAX_SPOTS - 1; idx++) strncpy(spot_ptr[idx - 10], spot_ptr[idx], 82); for (idx = MAX_SPOTS - 1; idx >= MAX_SPOTS - 11; idx--) spot_ptr[idx][0] = '\0'; nr_of_spots = MAX_SPOTS - 10; } } pthread_mutex_unlock(&spot_ptr_mutex); // \todo drop it later tb mar11 bm_add(s); if ((strncmp(s, "WWV", 3) == 0) || strncmp(s, "WCY", 3) == 0) strncpy(lastwwv, s, 82); if (tln_loglines >= maxtln_loglines) { temp = loghead; loghead = loghead->next; loghead->prev = NULL; if (viewing == temp) { viewing = loghead; } free(temp->text); } else { temp = (struct tln_logline *) malloc(sizeof(struct tln_logline)); if (temp == NULL) return; /* drop line if no line puffer available */ tln_loglines++; } temp->next = NULL; temp->text = strdup(s); temp->attr = curattr; if (loghead) { logtail->next = temp; temp->prev = logtail; } else { loghead = temp; temp->prev = NULL; } logtail = temp; } int logattr(void) { if (!viewing) return 0; else return viewing->attr; } char *firstlog(void) { viewing = loghead; view_state = STATE_VIEWING; return viewing->text; } char *lastlog(void) { viewing = logtail; view_state = STATE_VIEWING; return viewing->text; } char *nextlog(void) { if (view_state == STATE_EDITING) viewing = loghead; else if (viewing) viewing = viewing->next; if (viewing) { view_state = STATE_VIEWING; return viewing->text; } else { viewing = logtail; return NULL; } } char *prevlog(void) { if (view_state == STATE_EDITING) viewing = logtail; else if (viewing) viewing = viewing->prev; if (viewing) { view_state = STATE_VIEWING; return viewing->text; } else { viewing = loghead; return NULL; } } void start_editing(void) { werase(entwin); currow = curcol = 0; viewing = NULL; view_state = STATE_EDITING; } void delete_prev_char(void) { int i, j; chtype c, cc; if (currow != 0 || curcol != 0) { if (curcol-- == 0) { curcol = COLS - 1; currow--; } c = ' '; for (i = ENTRYROWS - 1, j = COLS - 1; i > currow || j >= curcol; j--) { if (j < 0) { j = COLS - 1; i--; } cc = mvwinch(entwin, i, j); waddch(entwin, c); c = cc; } wmove(entwin, currow, curcol); } } void right_arrow(void) { if (++curcol >= COLS) { curcol = 0; if (++currow >= ENTRYROWS) { currow = ENTRYROWS - 1; curcol = COLS - 1; } } wmove(entwin, currow, curcol); } void left_arrow(void) { if (--curcol < 0) { curcol = COLS - 1; if (--currow < 0) { currow = curcol = 0; } } wmove(entwin, currow, curcol); } void move_eol(void) { currow = ENTRYROWS - 1; curcol = COLS - 1; while ((A_CHARTEXT & mvwinch(entwin, currow, curcol)) == ' ') { curcol--; if (curcol < 0) { if (currow > 0) { currow--; curcol = COLS - 1; } else { break; } } } right_arrow(); } void gather_input(char *s) { int l = 0; int i, j; for (i = j = 0; i < ENTRYROWS && j < 81; j++) { if (j >= COLS) { j = 0; i++; } if (i < ENTRYROWS) s[l++] = A_CHARTEXT & mvwinch(entwin, i, j); } while (--l >= 0) { if (s[l] != ' ') break; else s[l] = '\0'; } /*s[++l] = '\n'; */ } int attop = 0; int walkup(void) { int i; if (attop) return 0; attop = TRUE; for (i = 0; i < LINES - ENTRYROWS - 1; i++) { if (prevlog() == NULL) { /* Not enough to view .. you already see it all */ beep(); return 1; } } return 0; } int walkdn(void) { int i; if (!attop) return 0; attop = FALSE; for (i = 0; i < LINES - ENTRYROWS - 1; i++) { if (nextlog() == NULL) { /* Not enough to view */ beep(); return 1; } } return 0; } int pageup(int lines) { int i; char *s = NULL; walkup(); for (i = 0; i < lines; i++) { wmove(sclwin, 0, 0); s = prevlog(); if (s == NULL) { beep(); break; } winsertln(sclwin); wattrset(sclwin, logattr()); mvwaddstr(sclwin, 0, 0, s); } wrefresh(sclwin); return (s != NULL); } int pagedn(int lines) { int i; char *s = NULL; walkdn(); for (i = 0; i < lines; i++) { s = nextlog(); if (s == NULL) { beep(); break; } scroll(sclwin); wattrset(sclwin, logattr()); mvwprintw(sclwin, LINES - ENTRYROWS - 1, 0, "%s", s); } wrefresh(sclwin); return (s != NULL); } char entry_text[BUFFERSIZE]; void viewbottom(void) { int i; char *s; for (i = 0; i < LINES - ENTRYROWS; i++) { if (i == 0) s = lastlog(); else s = prevlog(); if (s == NULL) break; } werase(sclwin); while (1) { s = nextlog(); if (s == NULL) break; wattrset(sclwin, logattr()); wprintw(sclwin, "%s\n", s); } if (strlen(tln_input_buffer) > 0) { wprintw(sclwin, "%s", tln_input_buffer); } wrefresh(sclwin); attop = FALSE; } void viewtop(void) { int i; char *s; werase(sclwin); for (i = 0; i < LINES - ENTRYROWS; i++) { if (i == 0) s = firstlog(); else s = nextlog(); if (s == NULL) break; wattrset(sclwin, logattr()); wprintw(sclwin, "%s\n", s); } wrefresh(sclwin); attop = FALSE; } void resume_editing(void) { viewbottom(); wattrset(sclwin, curattr); werase(entwin); mvwprintw(entwin, 0, 0, entry_text); wmove(entwin, currow, curcol); viewing = NULL; view_state = STATE_EDITING; wrefresh(entwin); } void viewlog(void) { attop = FALSE; if (walkup()) { view_state = STATE_EDITING; viewing = NULL; return; } gather_input(entry_text); werase(entwin); mvwprintw(entwin, 0, 0, "Viewing data... hit ENTER to return\n"); pageup(SCROLLSIZE); } int litflag = FALSE; int edit_line(int c) { if (c == KEY_RESIZE) { resize_layout(); resume_editing(); return 0; } if (view_state != STATE_EDITING) { if (c == '\n') resume_editing(); else if (c == KEY_PPAGE) pageup(SCROLLSIZE); else if (c == KEY_NPAGE) pagedn(SCROLLSIZE); else if (c == KEY_UP) pageup(1); else if (c == KEY_DOWN) pagedn(1); else if (c == KEY_HOME) viewtop(); else if (c == KEY_END) viewbottom(); } else { if (litflag) { wprintw(sclwin, "Keycode = %o octal\n", c); wrefresh(sclwin); litflag = FALSE; return 0; } if (c == erasechar() || c == KEY_BACKSPACE) delete_prev_char(); else if (c == killchar() || c == KEY_CLEAR) start_editing(); else if (c == '\n') return 1; else if (c == KEY_IC) insmode = TRUE; else if (c == KEY_EIC) insmode = FALSE; else if (c == KEY_F(10)) insmode = !insmode; else if (c == KEY_DOWN) { if (currow < ENTRYROWS) currow++; wmove(entwin, currow, curcol); } else if (c == KEY_UP) { if (currow > 0) currow--; wmove(entwin, currow, curcol); } else if (c == KEY_PPAGE) { viewlog(); } else if (c == KEY_LEFT) { left_arrow(); } else if (c == KEY_RIGHT) { right_arrow(); } else if (c == KEY_HOME || c == '\001') { currow = curcol = 0; wmove(entwin, currow, curcol); } else if (c == KEY_END || c == '\005') { move_eol(); } else if (c == KEY_DC) { right_arrow(); delete_prev_char(); } else if (c == KEY_EOS) { wclrtobot(entwin); } else if (c == KEY_EOL) { wclrtoeol(entwin); } else if (c == KEY_F(9)) { litflag = TRUE; } else if (c == (c & A_CHARTEXT)) { if (insmode) { if (currow < ENTRYROWS - 1) { int i; i = A_CHARTEXT & mvwinch(entwin, currow, COLS - 1); mvwinsch(entwin, currow + 1, 0, i); } mvwinsch(entwin, currow, curcol, c); } else { waddch(entwin, c); } curcol++; if (curcol == COLS && currow < ENTRYROWS - 1) { curcol = 0; currow++; } wmove(entwin, currow, curcol); } } return 0; } void sanitize(char *s) { char *t = s; for (; *s != '\0'; s++) { if (*s == '\007') beep(); else if (*s == '\015'); else if (*s < 0) *t++ = *s - 128; else *t++ = *s; } *t = '\0'; } void setup_splitlayout() { sclwin = derwin(packet_win, LINES - ENTRYROWS, COLS, 0, 0); entwin = derwin(packet_win, ENTRYROWS, COLS, LINES - ENTRYROWS, 0); scrollok(sclwin, TRUE); scrollok(entwin, FALSE); keypad(entwin, TRUE); intrflush(entwin, FALSE); wattrset(sclwin, attr[NORMAL_ATTR]); wattrset(entwin, attr[ENTRY_ATTR]); wtimeout(entwin, 30); curattr = attr[NORMAL_ATTR]; } void refresh_splitlayout() { if (!initialized) { return; } WINDOW *oldwin = packet_win; packet_win = newwin(LINES, COLS, 0, 0); replace_panel(packet_panel, packet_win); delwin(entwin); delwin(sclwin); delwin(oldwin); setup_splitlayout(); } void addtext(char *s) { extern int lan_active; extern char call[]; extern char hiscall[]; extern struct tm *time_ptr; extern char talkarray[5][62]; char lan_out[256]; static char convers_calls[50][6]; static int ci, cl = 0, cc; static char spotline[160]; static int m = 0, t = 0; static char dxtext[160]; static char spottime[40]; static char *spotpointer; int i, l; l = strlen(tln_input_buffer); if (initialized != 0 && view_state == STATE_EDITING) { if (s[0] == '<' && s[1] != '<') { // must be convers for (ci = 0; ci <= cl; ci++) { if (strncmp(convers_calls[ci], s, 5) == 0) break; } if (ci <= cl) { // found cc = ci; while (cc > 5) cc -= 5; } else { if (cl < 48) cl++; strncpy(convers_calls[cl], s, 5); cc = cl; while (cc > 5) cc -= 5; } cc += 1; wattron(sclwin, modify_attr(COLOR_PAIR(cc))); } if (strncmp(s, "***", 3) == 0) { cc = 1; wattron(sclwin, COLOR_PAIR(cc)); cc = 0; } // end convers wprintw(sclwin, "%s", s); wattroff(sclwin, A_BOLD); if (in_packetclient == 1) wrefresh(sclwin); } // Cluster private spotting interface if (strncmp(s, call, strlen(call) - 1) == 0 && strlen(s) < 81 && strchr(s, '>') == NULL) { mvprintw(LINES - 1, 0, backgrnd_str); if ((strlen(s) + strlen(call) + 3) < 80) { strcpy(dxtext, s + strlen(call) + 3); if (dxtext[strlen(dxtext) - 1] == '\n') dxtext[strlen(dxtext) - 1] = '\0'; // remove the newline mvprintw(LINES - 1, 0, dxtext); mvprintw(12, 29, hiscall); } refreshp(); spotpointer = strchr(dxtext, ':'); if (spotpointer != NULL && strncmp(spotpointer, ": DX ", 5) == 0) { spotline[0] = '\0'; s[0] = '\0'; strcat(spotline, "DX de "); strncat(spotline, dxtext, spotpointer - dxtext); strcat(spotline, ": "); const double khz = atof(spotpointer + 5); if (khz > 1800.0 && khz < 30000.0) { if (khz >= 100000.0) { sprintf(spotline + 16, "%5.1f ", khz); sprintf(spotline + 26, "%s", spotpointer + 14); } else if (khz >= 10000.0) { sprintf(spotline + 17, "%5.1f ", khz); sprintf(spotline + 26, "%s", spotpointer + 13); } else if (khz >= 1000.0) { sprintf(spotline + 18, "%5.1f ", khz); sprintf(spotline + 26, "%s", spotpointer + 12); } else { sprintf(spotline + 19, "%5.1f ", khz); sprintf(spotline + 26, "%s", spotpointer + 11); } for (m = 25; m < 38; m++) { if (spotline[m] > 96) spotline[m] -= 32; } strcat(spotline, " "); get_time(); // strftime(spottime, 80, "%H%MZ", time_ptr); ### bug fix strftime(spottime, sizeof(spottime), "%H%MZ", time_ptr); strcpy(spotline + 70, spottime); spotline[75] = '\0'; strcat(spotline, " <<\n"); strcpy(s, spotline); } } else { for (t = 0; t < 4; t++) strcpy(talkarray[t], talkarray[t + 1]); if (s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = '\0'; // remove the newline talkarray[4][0] = '\0'; strncat(talkarray[4], s + 8, 60); if (s[strlen(s) - 1] != '\n') strcat(s, "\n"); // we need to restore newline here... } } // end cluster private spotting interface for (i = 0; i < strlen(s); i++) { if (s[i] == '\n' || i + l + 1 >= COLS) { addlog(tln_input_buffer); if (lan_active == 1 && lanspotflg == 0) { if ((strlen(tln_input_buffer) > 0) && (tln_input_buffer[0] > 32) && (tln_input_buffer[0] < 126)) { strncpy(lan_out, tln_input_buffer, 78); lan_out[78] = '\0'; strcat(lan_out, "\n"); if (strlen(s) == 0) tln_input_buffer[0] = '\0'; send_lan_message(CLUSTERMSG, lan_out); lan_out[0] = '\0'; } } l = strlen(tln_input_buffer); l = -i - 1; } else { if (s[i] != '\0') tln_input_buffer[i + l] = s[i]; } tln_input_buffer[i + l + 1] = '\0'; } } /* ========================================= = = This initializes the packet windows = ===========================================*/ int init_packet(void) { extern int portnum; extern char pr_hostaddress[]; extern char spot_ptr[MAX_SPOTS][82]; extern int tncport; extern int fdSertnc; extern int packetinterface; extern int tnc_serial_rate; extern int verbose; extern char tncportname[]; struct termios termattribs; int iptr = 0; mode_t mode = 0666; tln_input_buffer[0] = '\0'; attr[NORMAL_ATTR] = A_NORMAL; attr[MINE_ATTR] = modify_attr(A_NORMAL); attr[ENTRY_ATTR] = modify_attr(A_NORMAL); if (initialized == 0) { packet_win = newwin(LINES, COLS, 0, 0); packet_panel = new_panel(packet_win); show_panel(packet_panel); refreshp(); start_color(); /* change color settings only if we got a new screen * (there is a bug in ncurses-5.8 and 5.9 if using --enable-sp-funcs * which results in a NULL pointer ) */ #if 0 if (initialized) { init_pair(0, 0, 0); init_pair(1, 1, 0); init_pair(2, 2, 0); init_pair(3, 3, 0); init_pair(4, 4, 0); init_pair(5, 5, 0); init_pair(6, 6, 0); init_pair(7, 7, 0); } #endif setup_splitlayout(); noecho(); cbreak(); initialized = 1; start_editing(); } if (packetinterface == TELNET_INTERFACE) { wprintw(sclwin, "Trying %s:%d ... \n", pr_hostaddress, portnum); wrefresh(sclwin); if ((prsock = startcli()) < 0) { wprintw(sclwin, "\n\nconnect failed... please check network connectivity !!\n"); wrefresh(sclwin); sleep(2); return (-1); } else { wprintw(sclwin, "connected.\n"); } socktimeout(30); } else if (packetinterface == TNC_INTERFACE) { if (strlen(tncportname) > 2) { tncportname[strlen(tncportname) - 1] = '\0'; // remove '\n' if ((fdSertnc = open(tncportname, O_RDWR | O_NONBLOCK)) < 0) { wprintw(sclwin, "open of %s failed!!!\n", tncportname); wrefresh(sclwin); sleep(2); return (-1); } } else { if (tncport == 1) { if ((fdSertnc = open("/dev/ttyS0", O_RDWR | O_NONBLOCK)) < 0) { wprintw(sclwin, "open of /dev/ttyS0 failed!!!\n"); wrefresh(sclwin); sleep(2); return (-1); } } else if (tncport == 2) { if ((fdSertnc = open("/dev/ttyS1", O_RDWR | O_NONBLOCK)) < 0) { wprintw(sclwin, "open of /dev/ttyS1 failed!!!\n"); wrefresh(sclwin); sleep(2); return (-1); } } } termattribs.c_iflag = IGNBRK | IGNPAR | IMAXBEL | IXOFF; termattribs.c_oflag = 0; termattribs.c_cflag = CS8 | CSTOPB | CREAD | CLOCAL; termattribs.c_lflag = 0; /* Set some term flags */ /* The ensure there are no read timeouts (possibly writes?) */ termattribs.c_cc[VMIN] = 1; termattribs.c_cc[VTIME] = 0; switch (tnc_serial_rate) { case 1200: { cfsetispeed(&termattribs, B1200); /* Set input speed */ cfsetospeed(&termattribs, B1200); /* Set output speed */ break; } case 2400: { cfsetispeed(&termattribs, B2400); /* Set input speed */ cfsetospeed(&termattribs, B2400); /* Set output speed */ break; } case 4800: { cfsetispeed(&termattribs, B4800); /* Set input speed */ cfsetospeed(&termattribs, B4800); /* Set output speed */ break; } case 9600: { cfsetispeed(&termattribs, B9600); /* Set input speed */ cfsetospeed(&termattribs, B9600); /* Set output speed */ break; } default: { cfsetispeed(&termattribs, B9600); /* Set input speed */ cfsetospeed(&termattribs, B9600); /* Set output speed */ } } tcsetattr(fdSertnc, TCSANOW, &termattribs); /* Set the serial port */ wprintw(sclwin, "ttyS%d opened...\n", (tncport - 1)); wrefresh(sclwin); } else if (packetinterface == FIFO_INTERFACE) { wprintw(sclwin, "Trying to open input FIFO \n"); wrefresh(sclwin); if ((mkfifo("clfile", mode)) < 0) { wprintw(sclwin, "FIFO clfile exists...\n"); wrefresh(sclwin); if (verbose == 1) sleep(1); } else { wprintw(sclwin, "FIFO clfile made\n"); wrefresh(sclwin); if (verbose == 1) sleep(1); } if ((fdFIFO = open("clfile", O_RDONLY | O_NONBLOCK)) < 0) { wprintw(sclwin, "Open FIFO failed\n"); wrefresh(sclwin); sleep(1); } else { wprintw(sclwin, "FIFO clfile open\n\n"); wrefresh(sclwin); if (verbose == 1) sleep(1); } } wprintw(sclwin, "\n Use \":\" to go to tlf !! \n"); wrefresh(sclwin); pthread_mutex_lock(&spot_ptr_mutex); for (iptr = 0; iptr < MAX_SPOTS; iptr++) spot_ptr[iptr][0] = '\0'; pthread_mutex_unlock(&spot_ptr_mutex); return (0); } /* ========================================= = = Throw away the sockets and windows ... = = ===========================================*/ int cleanup_telnet(void) { extern int packetinterface; extern int fdSertnc; if (!initialized) { return 0; } if (packetinterface == TELNET_INTERFACE) { if (prsock > 0) close_s(prsock); } else if (packetinterface == TNC_INTERFACE) { if (fdSertnc > 0) close(fdSertnc); } else if (packetinterface == FIFO_INTERFACE) { if (fdFIFO > 0) close(fdFIFO); remove("./clfile"); } hide_panel(packet_panel); delwin(entwin); delwin(sclwin); del_panel(packet_panel); delwin(packet_win); initialized = 0; clear(); clear_display(); keypad(stdscr, TRUE); return (0); } /* ========================================= = = Basic packet loop = = ===========================================*/ int packet() { extern int fdSertnc; extern int packetinterface; extern char clusterlogin[]; char line[BUFFERSIZE]; int i = 0; int c; static int sent_login = 0; if (!initialized) { return 0; } in_packetclient = 1; sleep(1); show_panel(packet_panel); wrefresh(sclwin); wclear(entwin); wrefresh(entwin); if ((tln_loglines == 0) && (packetinterface == TELNET_INTERFACE)) { addtext("Welcome to TLF telnet\n\n"); if ((sent_login == 0) && (strlen(clusterlogin) > 0) && (packetinterface == TELNET_INTERFACE) && (prsock > 0)) { usputs(prsock, clusterlogin); sent_login = 1; addtext("logged into cluster...\n\n"); sleep(1); hide_panel(packet_panel); clear(); clear_display(); keypad(stdscr, TRUE); in_packetclient = 0; return (0); } } if ((tln_loglines == 0) && (packetinterface == TNC_INTERFACE)) addtext("Welcome to TLF tnc terminal\n\n"); resume_editing(); while (1) { wrefresh(entwin); while ((c = wgetch(entwin)) == -1) { if (packetinterface == TELNET_INTERFACE) { if (prsock > 0) { line[0] = '\0'; i = 0; i = recvline(&prsock, line, BUFFERSIZE - 1); } else { wprintw(sclwin, "There is no connection.... going back to tlf !!\n"); wrefresh(sclwin); sleep(2); i = -1; } if (i == -1) { cleanup_telnet(); return (-1); } else if (i != -2) { line[i] = '\0'; sanitize(line); addtext(line); } } else if (packetinterface == TNC_INTERFACE) { if (fdSertnc > 0) { i = read(fdSertnc, line, BUFFERSIZE - 1); if (i > 0) { line[i] = '\0'; sanitize(line); addtext(line); } } } else if (packetinterface == FIFO_INTERFACE) { if (fdFIFO > 0) { i = read(fdFIFO, line, BUFFERSIZE - 1); if (i > 0) { line[i] = '\0'; sanitize(line); addtext(line); } } } } if (edit_line(c)) { gather_input(line); if (strcmp(line, ":exit") == 0) { endwin(); exit(1); } if (strcmp(line, " :exit") == 0) { endwin(); exit(1); } if (strcmp(line, ":") == 0) break; if (strcmp(line, " :") == 0) break; curattr = attr[MINE_ATTR]; wattrset(sclwin, curattr); strcat(line, "\n"); addtext(line); if ((packetinterface == TELNET_INTERFACE) && (prsock > 0)) { usputs(prsock, line); } if (packetinterface == TNC_INTERFACE) { line[strlen(line) - 1] = 13; line[strlen(line)] = '\0'; IGNORE(write(fdSertnc, line, strlen(line)));; } curattr = attr[NORMAL_ATTR]; wattrset(sclwin, curattr); wrefresh(sclwin); start_editing(); } } hide_panel(packet_panel); clear(); clear_display(); keypad(stdscr, TRUE); in_packetclient = 0; return (0); } /* ====================================================== Receive info from cluster ======================================================== */ int receive_packet(void) { extern int packetinterface; extern int fdSertnc; char line[BUFFERSIZE]; int i = 0; if (in_packetclient == 1) return (0); if (packetinterface == TELNET_INTERFACE) { if (prsock > 0) { i = recvline(&prsock, line, BUFFERSIZE - 1); view_state = STATE_EDITING; if (i == -1) { cleanup_telnet(); return (-1); } else if (i != -2) { line[i] = '\0'; sanitize(line); addtext(line); } } } else if (packetinterface == TNC_INTERFACE) { if (fdSertnc > 0) { i = read(fdSertnc, line, BUFFERSIZE - 1); if (i > 0) { line[i] = '\0'; sanitize(line); addtext(line); } } } else if (packetinterface == FIFO_INTERFACE) { if (fdFIFO > 0) { i = read(fdFIFO, line, BUFFERSIZE - 1); if (i > 0) { line[i] = '\0'; sanitize(line); addtext(line); } } } return (0); } /* ====================================================== send command to cluster ======================================================== */ #define MAX_CMD_LEN 60 int send_cluster(void) { extern int fdSertnc; extern int packetinterface; extern int cluster; char line[MAX_CMD_LEN + 2] = ""; cluster = CLUSTER; mvprintw(LINES - 1, 0, backgrnd_str); mvprintw(LINES - 1, 0, ">"); refreshp(); echo(); getnstr(line, MAX_CMD_LEN); noecho(); if (strlen(line) > 0) { strcat(line, "\n"); if (packetinterface == TNC_INTERFACE) { line[strlen(line) - 1] = '\r'; line[strlen(line)] = '\0'; /* not needed */ IGNORE(write(fdSertnc, line, strlen(line)));; } else if ((packetinterface == TELNET_INTERFACE) && (prsock > 0)) usputs(prsock, line); } attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(LINES - 1, 0, backgrnd_str); refreshp(); line[0] = '\0'; /* not needed */ return (0); } tlf-1.4.0/src/cwkeyer.h0000644000175000017500000000415713562576621011657 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef CWKEYER_H #define CWKEYER_H #define MACRO_QSONUMBER '#' #define MACRO_CALL '@' #define MACRO_RST '~' #define MACRO_SPEED_UP '+' #define MACRO_SPEED_DOWN '-' #define CWKEYER_IOC_MAGIC 'k' #define CWKEYER_IOCRESET _IO(CWKEYER_IOC_MAGIC, 0) /* * S means "Set" through a ptr, * T means "Tell" directly with the argument value * G means "Get": reply by setting through a pointer * Q means "Query": response is on the return value * X means "eXchange": G and S atomically * H means "sHift": T and Q atomically */ #define CWKEYER_IOCSSPEED _IOW(CWKEYER_IOC_MAGIC, 1, int) #define CWKEYER_IOCSFREQ _IOW(CWKEYER_IOC_MAGIC, 2, int) #define CWKEYER_IOCSMONI _IOW(CWKEYER_IOC_MAGIC, 3, int) #define CWKEYER_IOCSWEIGTH _IOW(CWKEYER_IOC_MAGIC, 4, int) #define CWKEYER_IOCSTXDELAY _IOW(CWKEYER_IOC_MAGIC, 5, int) #define CWKEYER_IOCSFLUSH _IOW(CWKEYER_IOC_MAGIC, 6, void *) #define CWKEYER_IOCSCALL _IOW(CWKEYER_IOC_MAGIC, 7, char[16]) #define CWKEYER_IOCSQSONUMBER _IOW(CWKEYER_IOC_MAGIC, 8, char[16]) #define CWKEYER_IOCSRST _IOW(CWKEYER_IOC_MAGIC, 9, char[16]) #define CWKEYER_IOCSPOSNEGKEY _IOW(CWKEYER_IOC_MAGIC, 10, int) #define CWKEYER_IOC_MAXNR 9 /* * Serial port keyer */ #define CWTONE 0xCC01 #define CWSPEED 0xCC02 #define CWMUTE 0xCC03 #endif /* CWKEYER_H */ tlf-1.4.0/src/showscore.h0000644000175000017500000000212113562576621012207 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SHOWSCORE_H #define SHOWSCORE_H /* get total number of points */ int get_nr_of_points(); /* get total number of multis */ int get_nr_of_mults(); /* calculate total score */ int get_total_score(); int showscore(void); #endif /* SHOWSCORE_H */ tlf-1.4.0/src/qsonr_to_str.h0000644000175000017500000000166713562576621012745 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef QSONR_TO_STR_H #define QSONR_TO_STR_H int qsonr_to_str(void); #endif /* QSONR_TO_STR_H */ tlf-1.4.0/src/edit_last.c0000644000175000017500000001366113562576621012151 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * edit the 5 latest qsos *--------------------------------------------------------------*/ #include #include #include #include #include "background_process.h" #include "err_utils.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "logview.h" #include "scroll_log.h" #include "tlf_curses.h" #include "ui_utils.h" #define NR_LINES 5 #define NR_COLS 80 /* highlight the edit line and set the cursor */ static void highlight_line(int row, char *line, int column) { char ln[NR_COLS + 1]; g_strlcpy(ln, line, NR_COLS + 1); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(7 + row, 0, ln); mvprintw(7 + row, column, ""); refreshp(); } /* reset the highlight state */ static void unhighlight_line(int row, char *line) { char ln[NR_COLS + 1]; g_strlcpy(ln, line, NR_COLS + 1); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(7 + row, 0, ln); } /* get a copy of selected QSO into the buffer */ void get_qso(int nr, char *buffer) { assert(nr < nr_qsos); strcpy(buffer, qsos[nr]); assert(strlen(buffer) == (LOGLINELEN - 1)); } /* save editbuffer back to log */ void putback_qso(int nr, char *buffer) { FILE *fp; assert(strlen(buffer) == (LOGLINELEN - 1)); assert(nr < nr_qsos); if ((fp = fopen(logfile, "r+")) == NULL) { TLF_LOG_WARN("Can not open logfile..."); } else { fseek(fp, (long)nr * LOGLINELEN, SEEK_SET); fputs(buffer, fp); fputs("\n", fp); fclose(fp); strcpy(qsos[nr], buffer); } } void edit_last(void) { int j = 0, b, k; int editline = NR_LINES - 1; char editbuffer[LOGLINELEN + 1]; if (nr_qsos == 0) return; /* nothing to edit */ stop_background_process(); b = 29; /* start with last QSO */ get_qso(nr_qsos - (NR_LINES - editline), editbuffer); while (j != 27 && j != '\n' && j != KEY_ENTER) { highlight_line(editline, editbuffer, b); j = key_get(); // Ctrl-A (^A) or , beginning of line. if (j == 1 || j == KEY_HOME) { b = 1; // Ctrl-E (^E) or , end of line. } else if (j == 5 || j == KEY_END) { b = 77; // , next field. } else if (j == 9) { if (b < 17) b = 17; else if (b < 29) b = 29; else if (b < 54) b = 54; else if (b < 68) b = 68; else if (b < 77) b = 77; else b = 1; // Up arrow, move to previous line. } else if (j == KEY_UP) { if (editline > (NR_LINES - nr_qsos) && (editline > 0)) { unhighlight_line(editline, editbuffer); putback_qso(nr_qsos - (NR_LINES - editline), editbuffer); editline--; get_qso(nr_qsos - (NR_LINES - editline), editbuffer); } else { logview(); j = 27; } // Down arrow, move to next line. } else if (j == KEY_DOWN) { if (editline < NR_LINES - 1) { unhighlight_line(editline, editbuffer); putback_qso(nr_qsos - (NR_LINES - editline), editbuffer); editline++; get_qso(nr_qsos - (NR_LINES - editline), editbuffer); } else j = 27; /* escape */ // Left arrow, move cursor one position left. } else if (j == KEY_LEFT) { if (b >= 1) b--; // Right arrow, move cursor one position right. } else if (j == KEY_RIGHT) { if (b < 79) b++; // , positions 0 to 27. } else if ((j == KEY_IC) && (b >= 0) && (b < 28)) { for (k = 28; k > b; k--) editbuffer[k] = editbuffer[k - 1]; editbuffer[b] = ' '; // , positions 29 to 38. } else if ((j == KEY_IC) && (b >= 29) && (b < 39)) { for (k = 39; k > b; k--) editbuffer[k] = editbuffer[k - 1]; editbuffer[b] = ' '; // , positions 54 to 63. } else if ((j == KEY_IC) && (b >= 54) && (b < 64)) { for (k = 64; k > b; k--) editbuffer[k] = editbuffer[k - 1]; editbuffer[b] = ' '; // , positions 68 to 75. } else if ((j == KEY_IC) && (b >= 68) && (b < 76)) { for (k = 76; k > b; k--) editbuffer[k] = editbuffer[k - 1]; editbuffer[b] = ' '; // , positions 1 to 27. } else if ((j == KEY_DC) && (b >= 1) && (b < 28)) { for (k = b; k < 28; k++) editbuffer[k] = editbuffer[k + 1]; // , positions 29 to 38. } else if ((j == KEY_DC) && (b >= 29) && (b < 39)) { for (k = b; k < 39; k++) editbuffer[k] = editbuffer[k + 1]; // , positions 68 to 75. } else if ((j == KEY_DC) && (b >= 68) && (b < 76)) { for (k = b; k < 76; k++) editbuffer[k] = editbuffer[k + 1]; // , positions 54 to 63. } else if ((j == KEY_DC) && (b >= 54) && (b < 64)) { for (k = b; k < 64; k++) editbuffer[k] = editbuffer[k + 1]; } else if (j != 27) { // Promote lower case to upper case. if ((j >= 97) && (j <= 122)) j = j - 32; // Accept most all printable characters. if ((j >= 32) && (j < 97)) { editbuffer[b] = j; if ((b < strlen(editbuffer) - 2) && (b < 80)) b++; } } } unhighlight_line(editline, editbuffer); putback_qso(nr_qsos - (NR_LINES - editline), editbuffer); scroll_log(); start_background_process(); } tlf-1.4.0/src/addmult.h0000644000175000017500000000252713562576621011637 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef ADDMULT_H #define ADDMULT_H #include /** possible multi * * name of possible multiplier and * list of belonging aliases */ typedef struct { char *name; GSList *aliases; } possible_mult_t; int addmult(void); int addmult2(void); char *get_mult(int n); int get_mult_count(void); unsigned int get_matching_length(char *str, unsigned int n); int init_and_load_multipliers(void); int remember_multi(char *multiplier, int band, int show_new_band); void init_mults(); #endif /* ADDMULT_H */ tlf-1.4.0/src/displayit.c0000644000175000017500000000343713562576621012203 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------------------ * scroll the loglines of the keyer terminal and show them * ---------------------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "tlf_curses.h" void displayit(void) { extern char termbuf[]; extern char backgrnd_str[]; extern char terminal1[]; extern char terminal2[]; extern char terminal3[]; extern char terminal4[]; char term2buf[81] = ""; g_strlcpy(term2buf, termbuf, sizeof(term2buf)); g_strchomp(term2buf); g_strlcat(term2buf, backgrnd_str, sizeof(term2buf)); /* fill with blanks */ strcpy(terminal1, terminal2); strcpy(terminal2, terminal3); strcpy(terminal3, terminal4); strcpy(terminal4, term2buf); termbuf[0] = '\0'; mvprintw(5, 0, ""); clear_display(); } tlf-1.4.0/src/addmult.c0000644000175000017500000002703413562576621011632 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * add call area to list for one band * *--------------------------------------------------------------*/ #include #include #include #include #include "addmult.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "tlf_curses.h" #include "bands.h" GPtrArray *mults_possible; enum { ALL_BAND, PER_BAND }; int addmult(void) { int found = 0; int i; int matching_len = 0, idx = -1; char *stripped_comment; shownewmult = -1; stripped_comment = strdup(comment); g_strchomp(stripped_comment); // --------------------------- arrlss ------------------------------------ if (arrlss == 1) { /* check all possible mults for match and remember the longest one */ for (i = 0; i < mults_possible->len; i++) { int len = get_matching_length(ssexchange, i); if (len > matching_len) { matching_len = len; idx = i; } } if (idx >= 0) { remember_multi(get_mult(idx), bandinx, ALL_BAND); } } // ---------------------------serial + section --------------------------- if ((serial_section_mult == 1) || (sectn_mult == 1)) { /* is it a possible mult? */ for (i = 0; i < mults_possible->len; i++) { if (get_matching_length(ssexchange, i) == strlen(ssexchange)) { idx = i; break; } } if (idx >= 0) { shownewmult = remember_multi(get_mult(idx), bandinx, PER_BAND); } } // ------------------------------- section ---------------------------- if ((dx_arrlsections == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) { /* check all possible mults for match and remember the longest one */ for (i = 0; i < mults_possible->len; i++) { int len = get_matching_length(ssexchange, i); if (len > matching_len) { matching_len = len; idx = i; } } if (idx >= 0) { shownewmult = remember_multi(get_mult(idx), bandinx, PER_BAND); } } // --------------------wysiwyg---------------- if (wysiwyg_once == 1) { shownewmult = remember_multi(stripped_comment, bandinx, ALL_BAND); } if (wysiwyg_multi == 1) { shownewmult = remember_multi(stripped_comment, bandinx, PER_BAND); } if (serial_grid4_mult == 1) { section[4] = '\0'; shownewmult = remember_multi(section, bandinx, PER_BAND); } /* -------------- unique call multi -------------- */ if (unique_call_multi == UNIQUECALL_ALL) { shownewmult = remember_multi(hiscall, bandinx, ALL_BAND); } if (unique_call_multi == UNIQUECALL_BAND) { shownewmult = remember_multi(hiscall, bandinx, PER_BAND); } free(stripped_comment); return (found); } /* -------------------------------------------------------------------*/ int addmult2(void) { int found = 0; int i; int matching_len = 0, idx = -1; char ssexchange[21]; char stripped_comment[21]; char multi_call[20]; shownewmult = -1; // --------------------------- arrlss ------------------------------------ if (arrlss == 1) { g_strlcpy(ssexchange, lan_logline + 54, 21); /* check all possible mults for match and remember the longest one */ for (i = 0; i < mults_possible->len; i++) { int len = get_matching_length(ssexchange, i); if (len > matching_len) { matching_len = len; idx = i; } } if (idx >= 0) { remember_multi(get_mult(idx), bandinx, ALL_BAND); } } // --------------------wysiwyg---------------- if (wysiwyg_once == 1) { g_strlcpy(stripped_comment, lan_logline + 54, 15); g_strchomp(stripped_comment); shownewmult = remember_multi(stripped_comment, bandinx, ALL_BAND); } if (wysiwyg_multi == 1) { g_strlcpy(stripped_comment, lan_logline + 54, 15); g_strchomp(stripped_comment); shownewmult = remember_multi(stripped_comment, bandinx, PER_BAND); } /* -------------- unique call multi -------------- */ g_strlcpy(multi_call, lan_logline + 68, 10); g_strchomp(multi_call); if (unique_call_multi == UNIQUECALL_ALL) { shownewmult = remember_multi(multi_call, bandinx, ALL_BAND); } if (unique_call_multi == UNIQUECALL_BAND) { shownewmult = remember_multi(multi_call, bandinx, PER_BAND); } return (found); } /* lookup n-th position in list of possible mults and * return pointer to data structure */ possible_mult_t *get_mult_base(int n) { return (possible_mult_t *)g_ptr_array_index(mults_possible, n); } /* look up n-th position in list of possible mults and * return pointer to multname */ char *get_mult(int n) { return get_mult_base(n)->name; } /* return alias list on n-th position of possible mults */ GSList *get_aliases(int n) { return get_mult_base(n)->aliases; } /* return number of possible mults */ int get_mult_count(void) { return mults_possible->len; } /* get best matching lenght of of name or aliaslist of mult 'n' in 'str' */ unsigned int get_matching_length(char *str, unsigned int n) { unsigned len = 0; if (strstr(str, get_mult(n)) != NULL) { len = strlen(get_mult(n)); } for (int i = 0; i < g_slist_length(get_aliases(n)); i++) { char *tmp = g_slist_nth_data(get_aliases(n), i); if (strstr(str, tmp) != NULL) { if (strlen(tmp) >= len) len = strlen(tmp); } } return len; } /* function to free mults_possible entries */ void free_possible_mult(gpointer data) { possible_mult_t *tmp = (possible_mult_t *)data; g_free(tmp -> name); /* free the name of the multi */ g_slist_free_full(tmp -> aliases, g_free); g_free(tmp); } /* compare functions to sort multi by aphabetic order */ gint cmp_size(char **a, char **b) { possible_mult_t *t1 = (possible_mult_t *)*a; possible_mult_t *t2 = (possible_mult_t *)*b; return g_strcmp0(t1->name, t2->name); } /* parse a mult line and add data to databse * * multline consists of either * multiplier * or * multplier:followed,by,comma,separated,list,of,aliases * * There may be more than one alias line for a multi, so add all aliases to * that multi */ void add_mult_line(char *line) { possible_mult_t *multi; gchar **list; char *mult = NULL; int index = -1; list = g_strsplit(line, ":", 2); mult = g_strstrip(list[0]); /* find mult in already defined ones */ for (int i = 0; i < get_mult_count(); i++) { if (strcmp(get_mult(i), mult) == 0) { index = i; break; } } if (index == -1) { /* not found -> prepare new one */ multi = g_new0(possible_mult_t, 1); multi->name = g_strdup(mult); multi->aliases = NULL; g_ptr_array_add(mults_possible, multi); } else /* else use existing one */ multi = get_mult_base(index); if (list[1] != NULL) { /* parse aliases if present */ gchar **aliaslist; aliaslist = g_strsplit(list[1], ",", 0); for (int i = 0; aliaslist[i] != NULL; i++) { multi->aliases = g_slist_append(multi->aliases, g_strdup(g_strstrip(aliaslist[i]))); } g_strfreev(aliaslist); } g_strfreev(list); } /** loads possible multipliers from external file * * Read in the file named by 'multiplierlist' and interpret it as list * of possible multis. * * Lines starting with '#' will be interpreted as comment. * * Each line should contain at max one word. Leading and trailing whitespaces * will be stripped and the remaining string is remembered in 'mults_possible[]' * growing array. Empty lines will be dropped. * * \return number of loaded multipliers (nr of entries in mults_possible) * */ int init_and_load_multipliers(void) { extern char multsfile[]; // Set by parse_logcfg() FILE *cfp; char s_inputbuffer[186] = ""; char mults_location[_POSIX_PATH_MAX * 2]; // 512 chars. Larger? if (mults_possible) { /* free old array if exists */ g_ptr_array_free(mults_possible, TRUE); } mults_possible = g_ptr_array_new_with_free_func(free_possible_mult); if (strlen(multsfile) == 0) { return 0; } // Check for mults file in working directory first if ((cfp = fopen(multsfile, "r")) == NULL) { // Check if multsfile is in installation directory if ((strlen(PACKAGE_DATA_DIR) + strlen(multsfile) + 1) <= (_POSIX_PATH_MAX * 2)) { sprintf(mults_location, "%s%s%s", PACKAGE_DATA_DIR, "/", multsfile); if ((cfp = fopen(mults_location, "r")) == NULL) { mvprintw(9, 0, "Error opening multiplier file %s.\n", multsfile); refreshp(); sleep(5); } } else { mvprintw(9, 0, "Multiplier file path length exceeds buffer size of %d.\n", _POSIX_PATH_MAX * 2); refreshp(); sleep(5); } } if (cfp == NULL) { return 0; // couldn't open file } while (fgets(s_inputbuffer, 85, cfp) != NULL) { /* strip leading and trailing whitespace */ g_strstrip(s_inputbuffer); /* drop comments starting with '#' and empty lines */ if (*s_inputbuffer == '#' || *s_inputbuffer == '\0') { continue; } add_mult_line(s_inputbuffer); } fclose(cfp); /* do not rely on the order in the mult file but sort it here */ g_ptr_array_sort(mults_possible, (GCompareFunc)cmp_size); return get_mult_count(); } /** initialize mults scoring * * empties multis[] array, set the number of multis and multscore per band to 0. */ void init_mults() { int n; for (n = 0; n < MAX_MULTS; n++) { multis[n].name[0] = '\0'; multis[n].band = 0; } nr_multis = 0; for (n = 0; n < NBANDS; n++) multscore[n] = 0; } /** register worked multiplier and check if its new * * Check if multiplier is already registered. If not make a new entry in * multis[] array and increment the total mults count 'nr_multis'. * Mark the mult as worked on the actual band. If it is a new band * increase the bandspecific 'multscore[band]'. * * \param multiplier - the multiplier as a string * \param band - the bandindex we are on * \param show_new_band - 1 -> check also if new band * \return - index in mults[] array if new mult or new on band * (-1 if multiplier is an empty string or not new) */ int remember_multi(char *multiplier, int band, int show_new_band) { /* search multbuffer in mults arry */ int found = 0, i, index = -1; if (*multiplier == '\0') return -1; /* ignore empty string */ for (i = 0; i < nr_multis; i++) { /* already in list? */ if (strcmp(multis[i].name, multiplier) == 0) { found = 1; /* new band? */ if ((multis[i].band & inxes[band]) == 0) { multis[i].band |= inxes[band]; multscore[band]++; /* if wanted, show it as new band */ if (show_new_band == PER_BAND) index = i; } break; } } /* add new multi */ if (found == 0) { index = nr_multis; /* return index of new mult */ strcpy(multis[nr_multis].name, multiplier); multis[nr_multis].band |= inxes[band]; multscore[band]++; nr_multis++; } return index; } tlf-1.4.0/src/getctydata.h0000644000175000017500000000203013562576621012323 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef GETCTYDATA_H #define GETCTYDATA_H int getctynr(char *checkcall); int getctydata(char *checkcall); int getctydata_pfx(char *checkcallptr); #endif /* end of include guard: GETCTYDATA_H */ tlf-1.4.0/src/genqtclist.h0000644000175000017500000000174713562576621012365 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Ervin Hegedüs - HA2OS * * 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 */ #ifndef GENQTCLIST_H #define GENQTCLIST_H int genqtclist(char *callsign, int nrofqtc); #endif /* end of include guard: GENQTCLIST_H */ tlf-1.4.0/src/qtcutil.h0000644000175000017500000000262713562576621011673 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2014 Ervin Hegedüs - HA2OS * * 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 */ #ifndef QTCUTIL_H #define QTCUTIL_H struct t_qtc_store_obj { int total; int received; int sent; int capable; }; void qtc_init(); void qtc_inc(char callsign[15], int direction); void qtc_dec(char callsign[15], int direction); struct t_qtc_store_obj *qtc_get(char callsign[15]); void parse_qtcline(char *logline, char callsign[15], int direction); char qtc_get_value(struct t_qtc_store_obj *qtc_obj); void parse_qtc_flagline(char *lineptr); int parse_qtc_flagstr(char *lineptr, char *callsign, char *flag); #endif /* end of include guard: QTCUTIL_H */ tlf-1.4.0/src/changefreq.h0000644000175000017500000000166113562576621012306 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef CHANGEFREQ_H #define CHANGEFREQ_H void change_freq(void); #endif /* CHANGEFREQ_H */ tlf-1.4.0/src/readcalls.c0000644000175000017500000004124013562576621012125 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedüs - HA2OS * * 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 */ /* ------------------------------------------------------------ * Initialize call array for dupes * *--------------------------------------------------------------*/ #define _XOPEN_SOURCE #include #include #include #include #include #include "addmult.h" #include "addpfx.h" #include "get_time.h" #include "getctydata.h" #include "getpx.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "ignore_unused.h" #include "paccdx.h" #include "startmsg.h" #include "tlf_curses.h" #include "zone_nr.h" #include "bands.h" int readcalls(void) { extern char continent_multiplier_list[7][3]; extern int continentlist_only; extern int pfxnummultinr; extern t_pfxnummulti pfxnummulti[]; extern int exclude_multilist_type; extern char countrylist[][6]; char inputbuffer[160]; char tmpbuf[20]; char bndbuf[20]; char zonebuf[3]; char checkcall[20]; int i = 0, l = 0, n = 0, r = 0, s = 0; unsigned int k; int m = 0; int t; int z = 0; int add_ok; char multbuffer[40]; char presentcall[20]; // copy of call.. char *tmpptr; int points; int pfxnumcntidx; int pxnr; int excl_add_veto; char date_and_time[16]; struct tm qsotime; time_t qsotimets; int qsomode; int linenr = 0; FILE *fp; showmsg("Reading logfile... "); refreshp(); /* reset counter and score anew */ for (s = 0; s < MAX_QSOS; s++) qsos[s][0] = '\0'; for (i = 0; i < MAX_CALLS; i++) { *worked[i].exchange = '\0'; *worked[i].call = '\0'; worked[i].band = 0; worked[i].country = -1; for (l = 0; l < 3; l++) { for (n = 0; n < NBANDS; n++) { worked[i].qsotime[l][n] = 0; } } } for (i = 1; i <= MAX_DATALINES - 1; i++) countries[i] = 0; for (i = 0; i < NBANDS; i++) band_score[i] = 0; for (i = 0; i < NBANDS; i++) countryscore[i] = 0; for (n = 1; n < MAX_ZONES; n++) zones[n] = 0; for (n = 0; n < NBANDS; n++) zonescore[n] = 0; init_mults(); InitPfx(); if (pfxnummultinr > 0) { for (i = 0; i < pfxnummultinr; i++) { for (n = 0; n < NBANDS; n++) { pfxnummulti[i].qsos[n] = 0; } } } if ((fp = fopen(logfile, "r")) == NULL) { showmsg("Error opening logfile "); refreshp(); sleep(2); exit(1); } i = 0; l = 0; s = 0; while (fgets(inputbuffer, 90, fp) != NULL) { pfxnumcntidx = -1; pxnr = 0; excl_add_veto = 0; linenr++; r++; if (r >= 100) { r = 0; printw("*"); refreshp(); } strcat(inputbuffer, " "); /* repair the logfile */ inputbuffer[LOGLINELEN - 1] = '\0'; for (t = 0; t <= strlen(inputbuffer); t++) { if (inputbuffer[t] == '\n') inputbuffer[t] = ' '; } strncpy(qsos[s], inputbuffer, LOGLINELEN); s++; if (inputbuffer[0] == ';') continue; /* note in log */ strncpy(presentcall, inputbuffer + 29, 13); presentcall[13] = '\0'; strncpy(bndbuf, inputbuffer + 1, 2); bndbuf[2] = '\0'; if (bndbuf[0] == '1' && bndbuf[1] == '0') bandinx = BANDINDEX_10; if (bndbuf[0] == '1' && bndbuf[1] == '5') bandinx = BANDINDEX_15; if (bndbuf[0] == '2') bandinx = BANDINDEX_20; if (bndbuf[0] == '4') bandinx = BANDINDEX_40; if (bndbuf[0] == '8') bandinx = BANDINDEX_80; if (bndbuf[0] == '6') bandinx = BANDINDEX_160; if (bndbuf[0] == '1' && bndbuf[1] == '2') bandinx = BANDINDEX_12; if (bndbuf[0] == '1' && bndbuf[1] == '7') bandinx = BANDINDEX_17; if (bndbuf[0] == '3') bandinx = BANDINDEX_30; /* get the country number, not known at this point */ tmpptr = strchr(presentcall, ' '); if (tmpptr) *tmpptr = '\0'; strcpy(tmpbuf, presentcall); countrynr = getctydata(tmpbuf); if (continentlist_only == 1) { int ci = 0; int cont_in_list = 0; while (strlen(continent_multiplier_list[ci]) != 0) { if (strcmp(continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if (cont_in_list == 0) { band_score[bandinx]++; continue; } } if (contest == 1) { strncpy(tmpbuf, inputbuffer + 76, 2); /* get the points */ tmpbuf[2] = '\0'; points = atoi(tmpbuf); total = total + points; if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) { strncpy(zonebuf, inputbuffer + 54, 2); /* get the zone */ zonebuf[2] = '\0'; z = zone_nr(zonebuf); } if (wysiwyg_once == 1 || wysiwyg_multi == 1 || unique_call_multi != 0 || arrlss == 1 || serial_section_mult == 1 || serial_grid4_mult == 1 || sectn_mult == 1 || ((dx_arrlsections == 1) && ((countrynr == w_cty) || (countrynr == ve_cty)))) { multbuffer[0] = '\0'; if (arrlss == 1) { other_flg = 0; if (inputbuffer[63] == ' ') strncpy(multbuffer, inputbuffer + 64, 3); else strncpy(multbuffer, inputbuffer + 63, 3); multbuffer[3] = '\0'; } else if (serial_section_mult == 1) { memset(multbuffer, 0, 39); strncpy(multbuffer, inputbuffer + 68, 3); g_strchomp(multbuffer); } else if (sectn_mult == 1) { memset(multbuffer, 0, 39); strncpy(multbuffer, inputbuffer + 68, 3); g_strchomp(multbuffer); } else if (serial_grid4_mult == 1) { memset(multbuffer, 0, 39); for (t = 0; t < 4; t++) { multbuffer[t] = inputbuffer[t + 59]; } } else if (unique_call_multi != 0) { g_strlcpy(multbuffer, inputbuffer + 68, 10); g_strchomp(multbuffer); } else { strncpy(multbuffer, inputbuffer + 54, 10); // normal case multbuffer[10] = '\0'; g_strchomp(multbuffer); } remember_multi(multbuffer, bandinx, 0); } // end wysiwig if (other_flg == 1) { /* mult = max 3 characters */ strncpy(multbuffer, inputbuffer + 54, 3); multbuffer[3] = '\0'; if (multbuffer[3] == ' ') multbuffer[3] = '\0'; if (multbuffer[2] == ' ') multbuffer[2] = '\0'; if (multbuffer[1] == ' ') multbuffer[1] = '\0'; remember_multi(multbuffer, bandinx, 0); } } /* once per call ! */ for (k = 0; k < i; k++) { // changed k=< i m = strcmp(worked[k].call, presentcall); if (m == 0) { l = k; break; } else l = i; } strncpy(worked[l].call, inputbuffer + 29, 19); worked[l].call[19] = 0; strtok(worked[l].call, " \r"); /* delimit first word */ worked[l].country = countrynr; g_strlcpy(worked[l].exchange, inputbuffer + 54, 12); g_strchomp(worked[l].exchange); /* strip trailing spaces */ if (strncmp("CW ", inputbuffer + 3, 3) == 0) { qsomode = CWMODE; } else if (strncmp("SSB", inputbuffer + 3, 3) == 0) { qsomode = SSBMODE; } else if (strncmp("DIG", inputbuffer + 3, 3) == 0) { qsomode = DIGIMODE; } else { shownr("Invalid line format in line %d.\n", linenr); refreshp(); sleep(2); exit(1); } /* calculate QSO timestamp from logline */ memset(&qsotime, 0, sizeof(struct tm)); strncpy(date_and_time, inputbuffer + 7, 15); strptime(date_and_time, "%d-%b-%y %H:%M", &qsotime); qsotimets = mktime(&qsotime); worked[l].qsotime[qsomode][bandinx] = qsotimets; add_ok = 1; /* look if calls are excluded */ if ((arrldx_usa == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) add_ok = 0; if (pacc_pa_flg == 1) { strcpy(hiscall, presentcall); add_ok = pacc_pa(); if (add_ok == 0) { band_score[bandinx]++; } hiscall[0] = '\0'; } if (pfxmultab == 1) { getpx(presentcall); add_pfx(pxstr, bandinx); } if (pfxnummultinr > 0) { getpx(presentcall); pxnr = pxstr[strlen(pxstr) - 1] - 48; getctydata(presentcall); int pfxi = 0; while (pfxi < pfxnummultinr) { if (pfxnummulti[pfxi].countrynr == countrynr) { pfxnumcntidx = pfxi; break; } pfxi++; } add_ok = 1; } if (continentlist_only == 0 && exclude_multilist_type == 1) { int ci = 0; int cont_in_list = 0; while (strlen(continent_multiplier_list[ci]) != 0) { if (strcmp(continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if (cont_in_list == 1 && continentlist_only == 0 && exclude_multilist_type == 1) { excl_add_veto = 1; } } if (exclude_multilist_type == 2) { int ci = 0; int countrynr_tocheck = countrynr; while (strlen(countrylist[ci]) != 0) { if (getctydata(countrylist[ci]) == countrynr_tocheck) { excl_add_veto = 1; break; } ci++; } } if (add_ok == 1) { worked[l].band |= inxes[bandinx]; /* mark band as worked */ band_score[bandinx]++; /* qso counter per band */ if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) zones[z] |= inxes[bandinx]; if (pfxnumcntidx < 0) { if (excl_add_veto == 0) { countries[countrynr] |= inxes[bandinx]; } } else { pfxnummulti[pfxnumcntidx].qsos[pxnr] |= inxes[bandinx]; } } /* end add_ok */ if (l == i) i++; } fclose(fp); /* remember nuber of callarray entries */ nr_worked = i; if (wpx == 1) { /* build prefixes_worked array from list of worked stations */ InitPfx(); for (n = 0; n < i; n++) { strcpy(checkcall, worked[n].call); getpx(checkcall); add_pfx(pxstr, bandinx); } } if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) { for (n = 1; n < MAX_ZONES; n++) { if ((zones[n] & BAND160) != 0) zonescore[BANDINDEX_160]++; if ((zones[n] & BAND80) != 0) zonescore[BANDINDEX_80]++; if ((zones[n] & BAND40) != 0) zonescore[BANDINDEX_40]++; if ((zones[n] & BAND20) != 0) zonescore[BANDINDEX_20]++; if ((zones[n] & BAND15) != 0) zonescore[BANDINDEX_15]++; if ((zones[n] & BAND10) != 0) zonescore[BANDINDEX_10]++; } } if (cqww == 1) { for (n = 1; n <= MAX_DATALINES - 1; n++) { if ((countries[n] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[n] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[n] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[n] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[n] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[n] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } /* end cqww */ if (dx_arrlsections == 1) { int cntr; for (cntr = 1; cntr < MAX_DATALINES; cntr++) { if (cntr != w_cty && cntr != ve_cty) { // W and VE don't count here... if ((countries[cntr] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[cntr] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[cntr] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[cntr] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[cntr] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[cntr] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } } // end dx_arrlsections if ((arrldx_usa == 1) && (countrynr != w_cty) && (countrynr != ve_cty)) { int cntr; for (cntr = 1; cntr < MAX_DATALINES; cntr++) { if ((countries[cntr] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[cntr] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[cntr] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[cntr] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[cntr] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[cntr] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } /* end arrldx_usa */ if (pacc_pa_flg == 1) { for (n = 1; n < MAX_DATALINES; n++) { if ((countries[n] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[n] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[n] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[n] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[n] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[n] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } if (country_mult == 1 || pfxnummultinr > 0) { for (n = 1; n <= MAX_DATALINES - 1; n++) { // first, check pfxnummultinr array, the country 'n' exists int pfxnumcntnr = -1; // pfxnummultinr is length of pfxnummulti array if (pfxnummultinr > 0) { int pcntnr; // find the current country // n is the country in the external loop // pfxnummulti[I].countrynr contains the country codes, I:=[0..pfxnummultinr] // it depends from the order of prefixes in rules, eg: // PFX_NUM_MULTIS=W,VE,VK,ZL,ZS,JA,PY,UA9 // pfxnummulti[0].countrynr will be nr of USA // pfxnummulti[1].countrynr will be nr of Canada for (pcntnr = 0; pcntnr < pfxnummultinr; pcntnr++) { if (pfxnummulti[pcntnr].countrynr == n) { pfxnumcntnr = pcntnr; pcntnr = pfxnummultinr; // end loop } } } if (pfxnummultinr > 0 && pfxnumcntnr >= 0) { int pfxnum; // walking pfxnummulti[N].qsos, which is a 10 element array // each element represent a number of the country code // eg: K0, K1, K2, ..., K9 for (pfxnum = 0; pfxnum < 10; pfxnum++) { if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND160) != 0) { countryscore[BANDINDEX_160]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND80) != 0) { countryscore[BANDINDEX_80]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND40) != 0) { countryscore[BANDINDEX_40]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND20) != 0) { countryscore[BANDINDEX_20]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND15) != 0) { countryscore[BANDINDEX_15]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND10) != 0) { countryscore[BANDINDEX_10]++; } } } else { // simple 'country_mult', but it's works together with pfxnummultinr if ((countries[n] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[n] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[n] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[n] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[n] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[n] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } } if (qsonum == 1) { InitPfx(); total = 0; for (i = 0; i < NBANDS; i++) band_score[i] = 0; for (i = 0; i < NBANDS; i++) countryscore[i] = 0; for (i = 0; i < NBANDS; i++) multscore[i] = 0; } return (s); // nr of lines in log } //------------------------------------------------------------------------ int synclog(char *synclogfile) { extern char logfile[]; extern struct tm *time_ptr; char wgetcmd[120] = "wget ftp://"; //user:password@hst/dir/file char date_buf[60]; get_time(); strftime(date_buf, 9, "%d%H%M", time_ptr); if (strlen(synclogfile) < 80) strcat(wgetcmd, synclogfile); else { showmsg("Warning: Name of syncfile too long\n"); sleep(5); exit(1); } strcat(wgetcmd, " -O log1 -o wgetlogfile"); if (system(wgetcmd) == 0) showmsg("Syncfile o.k.\n"); else { showmsg("Warning: Did not get syncfile !!\nExiting...\n"); sleep(5); exit(1); } wgetcmd[0] = '\0'; sprintf(wgetcmd, "cp %s log2", logfile); if (system(wgetcmd) != 0) showstring("\nCopying logfile %s failed\n", logfile); showmsg("Backing up logfile.\n"); sleep(1); sprintf(wgetcmd, "cp %s %s%s", logfile, date_buf, logfile); if (system(wgetcmd) != 0) showstring("\nCopying logfile %s to backup failed\n", logfile); showmsg("Merging logfiles...\n"); sleep(1); sprintf(wgetcmd, "cat log1 log2 | sort -g -k4,4 | uniq > %s", logfile); if (system(wgetcmd) == 0) showmsg("Merging logs successful\n"); else { showmsg("Problem merging logs.\nExiting...\n"); sleep(5); exit(1); } sleep(1); IGNORE(system("rm log1"));; IGNORE(system("rm log2"));; return (0); } tlf-1.4.0/src/getmessages.h0000644000175000017500000000171713562576621012514 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef GETMESSAGES_H #define GETMESSAGES_H void getstationinfo(void); void getmessages(void); #endif /* GETMESSAGES_H */ tlf-1.4.0/src/cleanup.c0000644000175000017500000000355613562576621011632 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Cleanup call input field * *--------------------------------------------------------------*/ #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #include "write_keyer.h" void cleanup_qso(void) { extern char hiscall[]; extern char comment[]; extern char my_rst[]; extern char his_rst[]; hiscall[0] = '\0'; /* reset hiscall and comment */ comment[0] = '\0'; his_rst[1] = '9'; /* reset to 599 */ my_rst[1] = '9'; } int cleanup(void) { extern int defer_store; int k = 0; attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 29, " "); mvprintw(12, 29, ""); attron(COLOR_PAIR(C_WINDOW)); mvprintw(12, 54, " "); attron(COLOR_PAIR(C_LOG | A_STANDOUT)); for (k = 1; k <= 5; k++) { mvprintw(k, 0, "%s", " "); } refreshp(); cleanup_qso(); defer_store = 0; keyer_flush(); return (0); } tlf-1.4.0/src/tlf.h0000644000175000017500000001023413562576621010764 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef TLF_H #define TLF_H #define NO_KEYER 0 #define LPT_KEYER 1 /* deprecated */ #define COM1_KEYER 2 /* deprecated */ #define NET_KEYER 3 #define MFJ1278_KEYER 4 #define ORION_KEYER 5 /* deprecated */ #define K2_KEYER 6 /* deprecated */ #define GMFSK 7 #define FLDIGI 8 #define SINGLE 0 /* single op */ #define MULTI 1 /* multi op / single tx */ #define TELNET_INTERFACE 1 #define TNC_INTERFACE 2 #define NETWORK_INTERFACE 3 #define FIFO_INTERFACE 4 #define NOCLUSTER 0 /* no cluster info */ #define MAP 1 /* show spots */ #define CLUSTER 3 /* full cluster info */ #define FREQWINDOW 4 /* M/M frequencies */ #define SHORTCW 1 /* short cw characters in exchange (e.g. 0 = T, 9 = N) */ #define LONGCW 0 #define SEARCHWINDOW 1 /* searchflg on */ #define CQ 1 /* cqmode on */ #define S_P 0 /* S&P mode on */ #define SEND_DE 1 /* de_mode on */ #define CONTEST 1 /* contest mode on */ #define FILTER_ANN 1 /* filter announcements */ #define FILTER_DX 3 #define FILTER_ALL 0 #define FILTER_TALK 2 #define CWMODE 0 #define SSBMODE 1 #define DIGIMODE 2 #define BAND30 256 #define BAND17 128 #define BAND12 64 #define BAND160 32 #define BAND80 16 #define BAND40 8 #define BAND20 4 #define BAND15 2 #define BAND10 1 #define BANDOOB 0 // out of band enum { BANDINDEX_160 = 0, BANDINDEX_80, BANDINDEX_40, BANDINDEX_30, BANDINDEX_20, BANDINDEX_17, BANDINDEX_15, BANDINDEX_12, BANDINDEX_10, BANDINDEX_OOB, /* out of band */ NBANDS }; /* display color sets */ enum { C_HEADER = 2, C_BORDER, C_INPUT, C_DUPE, C_WINDOW, C_LOG }; #define NORMCOLOR C_INPUT #define ISDUPE 1 #define NODUPE 0 #define MAX_QSOS 20000 /* internal qso array */ #define MAX_DATALINES 1000 /* from ctydb.dat */ #define MAX_CALLS 5000 /* max nr of calls in dupe array */ #define MAX_MULTS 1000 /* max nr of mults in mults array */ #define MAX_SPOTS 200 /* max nr. of spots in spotarray */ #define MAX_CALLMASTER 50000 /* max number of calls in callmaster array */ #define CQ_ZONES 40 #define ITU_ZONES 90 #define MAX_ZONES (ITU_ZONES + 1) /* size of zones array */ #define EDITOR_JOE 0 #define EDITOR_VI 1 #define EDITOR_E3 2 #define EDITOR_MC 3 #define UNIQUECALL_ALL 1 #define UNIQUECALL_BAND 2 #define LOGLINELEN (88) /* Length of logline in logfile (including linefeed) */ #define MINITEST_DEFAULT_PERIOD 600 /* ignore dupe state when MINITEST is set * and last QSO was not in actual period */ /* special message numbers */ enum { SP_TU_MSG = 12, CQ_TU_MSG = 13, SP_CALL_MSG = 24 }; /** worked station * * contains all informations about an already worked station */ struct worked_t { char call[20]; /**< call of the station */ char exchange[12]; /**< the last exchange */ int band; /**< bitmap for worked bands */ int country; /**< its country number */ long qsotime[3][NBANDS]; /**< last timestamp of qso in gmtime for all modes and bands */ }; /** worked mults * * all information about worked multis */ struct mults_t { char name[12]; /**< Multiplier */ int band; /**< bitmap with abnds the multi was worked */ }; #define MAXPFXNUMMULT 30 typedef struct { int countrynr; int qsos[10]; } t_pfxnummulti; void refreshp(); #endif /* TLF_H */ tlf-1.4.0/src/scroll_log.h0000644000175000017500000000166013562576621012341 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SCROLL_LOG_H #define SCROLL_LOG_H void scroll_log(void); #endif /* SCROLL_LOG_H */ tlf-1.4.0/src/searchcallarray.c0000644000175000017500000000314413562576621013334 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * search array of worked stations * *--------------------------------------------------------------*/ #include #include "tlf.h" /** \brief lookup 'hiscall' in array of worked stations * * See if 'hiscall' was already worked by looking it up in worked[] * \param hiscall callsign to lookup * \return index in callarray where hiscall was found (-1 if not found) */ int searchcallarray(char *hiscall) { extern int nr_worked; extern struct worked_t worked[]; int found = -1; int i; for (i = 0; i < nr_worked; i++) { if (strcmp(worked[i].call, hiscall) == 0) { found = i; break; } } return (found); } tlf-1.4.0/src/bands.h0000644000175000017500000000341513562576621011271 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2018 Thomas Beierlein * * 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 */ /* Definitions and functions related to manipulation of frequencies and * ham radio bands */ #ifndef BANDS_H #define BANDS_H #include "tlf.h" #define IsWarcIndex(index) ((index == BANDINDEX_12) || \ (index == BANDINDEX_17) || (index == BANDINDEX_30)) /* Direction for switch to next band */ #define BAND_UP +1 #define BAND_DOWN -1 extern int inxes[NBANDS]; /**< conversion from BANDINDEX to BAND-mask */ extern const unsigned int bandcorner[NBANDS][2]; extern const unsigned int cwcorner[NBANDS]; extern const unsigned int ssbcorner[NBANDS]; /** Switch to next band * * Switch to next ham radio band up or down. Wrap around if lowest or highest * band reached. * * \param direction BAND_UP or BAND_DOWN to choose next band up or down */ void next_band(int direction); /** \brief convert frequency in Hz to bandindex * * \return bandindex or BANDINDEX_OOB if not in any band */ int freq2band(unsigned int freq); #endif /* BANDS_H */ tlf-1.4.0/src/globalvars.h0000644000175000017500000000572413562576621012343 00000000000000#ifndef TLF_H # include "tlf.h" #endif #include #include extern char qsos[MAX_QSOS][LOGLINELEN + 1]; // array of log lines of QSOs so far; // note that not every log line needs // to be a QSO, it could also be a // comment, starting with a semicolon extern int nr_qsos; // number of lines in qsos[] extern struct mults_t multis[MAX_MULTS]; // array of multipliers worked so far extern int nr_multis; // number of entries in mults[] extern int multscore[NBANDS]; // number of multipliers worked per // band; index is // BANDINDEX_160 ... BANDINDEX_10 // note: until 200409111, // index was 0...5 for only // the non-warc bands! extern int nr_worked; // number of worked station // entries in worked[] extern struct worked_t worked[MAX_CALLS]; // worked stations extern int countries[MAX_DATALINES]; // for every country, a bitfield // indicating bands on which it has // been worked extern int bandinx; // band we're currently working on extern char logfile[]; extern int contest; extern int cqww; extern int arrldx_usa; extern int pacc_pa_flg; extern int country_mult; extern int other_flg; extern char hiscall[20]; extern int total; extern int band_score[NBANDS]; // QSO/band extern int zones[MAX_ZONES]; extern int wpx; extern int arrlss; extern int serial_section_mult; extern int serial_grid4_mult; extern int sectn_mult; extern int dx_arrlsections; extern int wysiwyg_multi; extern int wysiwyg_once; extern char pxstr[]; extern int zonescore[NBANDS]; extern int countryscore[NBANDS]; extern int qsonum; extern int countrynr; extern int w_cty; extern int ve_cty; extern int pfxmult; extern int pfxmultab; extern int minute_timer; extern int stewperry_flg; extern char myqra[7]; extern int unique_call_multi; extern char logline_edit[5][LOGLINELEN + 1]; #define logline0 logline_edit[0] #define logline1 logline_edit[1] #define logline2 logline_edit[2] #define logline3 logline_edit[3] #define logline4 logline_edit[4] extern char band[NBANDS][4]; extern struct tm *time_ptr; extern struct tm time_ptr_cabrillo; extern char cqzone[]; extern char ituzone[]; extern char continent[]; extern char zone_export[]; extern int itumult; extern char ssexchange[]; extern int shownewmult; extern char comment[]; extern char lan_logline[]; extern char logfile[]; extern char qsonrstr[]; extern int lan_mutex; extern int lan_active; extern int exchange_serial; extern int highqsonr; extern int trxmode; extern rmode_t rigmode; extern char lastqsonr[]; extern int cqwwm2; extern char thisnode; extern char lastcall[]; extern char my_rst[]; extern char his_rst[]; extern char section[]; extern int wazmult; extern int addcallarea; extern int addcty; extern char zone_fix[]; extern int universal; extern int arrl_fd; extern int one_point; extern int two_point; extern int three_point; extern int dxped; extern int addzone; extern int do_cabrillo; extern rmode_t digi_mode; extern char message[][80]; extern char *digi_message[]; tlf-1.4.0/src/callinput.h0000644000175000017500000000200713562576621012171 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef CALLINPUT_H #define CALLINPUT_H #include int callinput(void); int play_file(char *audiofile); void send_bandswitch(freq_t freq); #endif /* CALLINPUT_H */ tlf-1.4.0/src/edit_last.h0000644000175000017500000000175613562576621012160 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012 Thomas Beierlein * * 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 */ #ifndef EDIT_LAST_H #define EDIT_LAST_H void edit_last(void); #endif /* EDIT_LAST_H */ tlf-1.4.0/src/writecabrillo.c0000644000175000017500000005453613562576621013051 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012-2013 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * write cabrillo file * *--------------------------------------------------------------*/ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include #include #include #include #include "getsummary.h" #include "tlf_curses.h" #include "ui_utils.h" #include "cabrillo_utils.h" extern char call[]; /* conversion table between tag name in format file and internal tag */ extern struct tag_conv tag_tbl[]; int is_comment(char *buffer); struct qso_t *get_next_record(FILE *fp); struct qso_t *get_next_qtc_record(FILE *fp, int qtcdirection); void free_qso(struct qso_t *ptr); /** check if logline is only a comment */ int is_comment(char *buffer) { if (buffer[0] != ';' && strlen(buffer) > 60) /** \todo better check */ return 0; else return 1; } /** get next qso record from log * * Read next line from logfile until it is no comment. * Then parse the logline into a new allocated QSO data structure * and return that structure. * * \return ptr to new qso record (or NULL if eof) */ struct qso_t *get_next_record(FILE *fp) { char buffer[160]; char *tmp; char *sp; struct qso_t *ptr; struct tm date_n_time; while ((fgets(buffer, sizeof(buffer), fp)) != NULL) { if (!is_comment(buffer)) { ptr = g_malloc0(sizeof(struct qso_t)); /* remember whole line */ ptr->logline = g_strdup(buffer); ptr->qtcdirection = 0; ptr->qsots = 0; /* split buffer into parts for qso_t record and parse * them accordingly */ tmp = strtok_r(buffer, " \t", &sp); /* band */ ptr->band = atoi(tmp); /* mode */ if (strcasestr(tmp, "CW")) ptr->mode = CWMODE; else if (strcasestr(tmp, "SSB")) ptr->mode = SSBMODE; else ptr->mode = DIGIMODE; /* date & time */ memset(&date_n_time, 0, sizeof(struct tm)); strptime(strtok_r(NULL, " \t", &sp), "%d-%b-%y", &date_n_time); strptime(strtok_r(NULL, " \t", &sp), "%H:%M", &date_n_time); ptr->year = date_n_time.tm_year + 1900; /* convert to 1968..2067 */ ptr->month = date_n_time.tm_mon + 1; /* tm_mon = 0..11 */ ptr->day = date_n_time.tm_mday; ptr->hour = date_n_time.tm_hour; ptr->min = date_n_time.tm_min; /* qso number */ ptr->qso_nr = atoi(strtok_r(NULL, " \t", &sp)); /* his call */ ptr->call = g_strdup(strtok_r(NULL, " \t", &sp)); /* RST send and received */ ptr->rst_s = atoi(strtok_r(NULL, " \t", &sp)); ptr->rst_r = atoi(strtok_r(NULL, " \t", &sp)); /* comment (exchange) */ ptr->comment = g_strndup(buffer + 54, 13); /* tx */ ptr->tx = (buffer[79] == '*') ? 1 : 0; /* frequency (kHz) */ ptr->freq = atof(buffer + 80) * 1000.0; if ((ptr->freq < 1800000.) || (ptr->freq >= 30000000.)) { ptr->freq = 0.; } return ptr; } } return NULL; } /** get next qtc record from log * * Read next line from logfile. * Then parse the received or sent qtc logline into a new allocated received QTC data structure * and return that structure. * * \return ptr to new qtc record (or NULL if eof) */ struct qso_t *get_next_qtc_record(FILE *fp, int qtcdirection) { char buffer[100]; char *tmp; char *sp; struct qso_t *ptr; int pos, shift; struct tm date_n_time; if (fp == NULL) { return NULL; } while ((fgets(buffer, sizeof(buffer), fp)) != NULL) { ptr = g_malloc0(sizeof(struct qso_t)); /* remember whole line */ ptr->logline = g_strdup(buffer); ptr->qtcdirection = qtcdirection; /* tx */ if (qtcdirection == RECV) { pos = 28; shift = 0; } else { pos = 33; shift = 5; } ptr->tx = (buffer[pos] == ' ') ? 0 : 1; /* split buffer into parts for qso_t record and parse * them accordingly */ tmp = strtok_r(buffer, " \t", &sp); /* band */ ptr->band = atoi(tmp); /* mode */ if (strcasestr(tmp, "CW")) ptr->mode = CWMODE; else if (strcasestr(tmp, "SSB")) ptr->mode = SSBMODE; else ptr->mode = DIGIMODE; /* qso number */ ptr->qso_nr = atoi(strtok_r(NULL, " \t", &sp)); /* in case of SEND direction, the 3rd field is the original number of sent QSO, but it doesn't need for QTC line */ if (qtcdirection & SEND) { tmp = strtok_r(NULL, " \t", &sp); } /* date & time */ memset(&date_n_time, 0, sizeof(struct tm)); strptime(strtok_r(NULL, " \t", &sp), "%d-%b-%y", &date_n_time); strptime(strtok_r(NULL, " \t", &sp), "%H:%M", &date_n_time); ptr->qsots = timegm(&date_n_time); ptr->year = date_n_time.tm_year + 1900; /* convert to 1968..2067 */ ptr->month = date_n_time.tm_mon + 1; /* tm_mon = 0..11 */ ptr->day = date_n_time.tm_mday; ptr->hour = date_n_time.tm_hour; ptr->min = date_n_time.tm_min; if (ptr->tx == 1) { /* ignore TX if set */ strtok_r(NULL, " \t", &sp); } /* his call */ ptr->call = g_strdup(strtok_r(NULL, " \t", &sp)); /* QTC serial and number */ ptr->qtc_serial = atoi(strtok_r(NULL, " \t", &sp)); ptr->qtc_number = atoi(strtok_r(NULL, " \t", &sp)); ptr->qtc_qtime = g_strdup(strtok_r(NULL, " \t", &sp)); ptr->qtc_qcall = g_strdup(strtok_r(NULL, " \t", &sp)); ptr->qtc_qserial = g_strdup(strtok_r(NULL, " \t", &sp)); /* frequency */ ptr->freq = atof(buffer + 80 + shift) * 1000.0; if ((ptr->freq < 1800000.) || (ptr->freq >= 30000000.)) { ptr->freq = 0.; } return ptr; } return NULL; } /** free qso record pointed to by ptr */ void free_qso(struct qso_t *ptr) { if (ptr != NULL) { g_free(ptr->comment); g_free(ptr->logline); g_free(ptr->call); if (ptr->qtc_qtime != NULL) { g_free(ptr->qtc_qtime); g_free(ptr->qtc_qcall); g_free(ptr->qtc_qserial); } g_free(ptr); } } /** write out information */ void info(char *s) { attron(modify_attr(COLOR_PAIR(C_INPUT) | A_STANDOUT)); mvprintw(13, 29, "%s", s); refreshp(); } const char *to_mode[] = { "CW", "PH", "RY" }; /* converts band to frequency of start of band */ static freq_t band2freq(int band) { freq_t freq; switch (band) { case 160: freq = 1800000.; break; case 80: freq = 3500000.; break; case 40: freq = 7000000.; break; case 30: freq = 10100000.; break; case 20: freq = 14000000.; break; case 17: freq = 18068000.; break; case 15: freq = 21000000.; break; case 12: freq = 24890000.; break; case 10: freq = 28000000.; break; default: freq = 0.; break; } return freq; } /* add 'src' to 'dst' with max. 'len' chars left padded */ void add_lpadded(char *dst, char *src, int len) { char *field; int l; field = g_malloc(len + 1); strcat(dst, " "); memset(field, ' ', len); l = strlen(src); if (l > len) l = len; memcpy(field + len - l, src, l); field[len] = '\0'; strcat(dst, field); g_free(field); } /* add 'src' to 'dst' with max. 'len' char right padded */ void add_rpadded(char *dst, char *src, int len) { char *field; int l; field = g_malloc(len + 1); strcat(dst, " "); memset(field, ' ', len); l = strlen(src); if (l > len) l = len; memcpy(field, src, l); field[len] = '\0'; strcat(dst, field); g_free(field); } /* get the n-th token of a string, return empty string if no n-th token */ gchar *get_nth_token(gchar *str, int n) { gchar *string = g_strdup(str); gchar *ptr; char *sp; ptr = strtok_r(string, " \t", &sp); while (n > 0 && ptr != NULL) { ptr = strtok_r(NULL, " \t", &sp); n--; } /* if no n-th element in string, return empty string */ if (ptr == NULL) ptr = strdup(""); else ptr = strdup(ptr); g_free(string); return ptr; } /* format QSO: line for actual qso according to cabrillo format description * and put it into buffer */ void prepare_line(struct qso_t *qso, struct cabrillo_desc *desc, char *buf) { extern char exchange[]; freq_t freq; int i; char tmp[80]; struct line_item *item; gchar *token; int item_count; GPtrArray *item_array; if (qso == NULL) { strcpy(buf, ""); return; } freq = qso->freq; if (freq < 1800000.) freq = band2freq(qso->band); if (qso->qtcdirection == 0) { strcpy(buf, "QSO:"); /* start the line */ item_count = desc->item_count; item_array = desc->item_array; } else { if (desc->qtc_item_array == NULL) { strcpy(buf, ""); /* no QTC format description */ return; } strcpy(buf, "QTC:"); /* start the line */ item_count = desc->qtc_item_count; item_array = desc->qtc_item_array; } for (i = 0; i < item_count; i++) { item = g_ptr_array_index(item_array, i); switch (item->tag) { case FREQ: sprintf(tmp, "%d", (int)(freq / 1000.0)); add_lpadded(buf, tmp, item->len); break; case MODE: sprintf(tmp, "%s", to_mode[qso->mode]); add_lpadded(buf, tmp, item->len); break; case DATE: sprintf(tmp, "%4d-%02d-%02d", qso->year, qso->month, qso->day); add_lpadded(buf, tmp, item->len); break; case TIME: sprintf(tmp, "%02d%02d", qso->hour, qso->min); add_lpadded(buf, tmp, item->len); break; case MYCALL: strcpy(tmp, call); add_rpadded(buf, g_strchomp(tmp), item->len); break; case HISCALL: add_rpadded(buf, qso->call, item->len); break; case RST_S: sprintf(tmp, "%d", qso->rst_s); add_rpadded(buf, tmp, item->len); break; case RST_R: sprintf(tmp, "%d", qso->rst_r); add_rpadded(buf, tmp, item->len); break; case EXCH: add_rpadded(buf, qso->comment, item->len); break; case EXC1: token = get_nth_token(qso->comment, 0); add_rpadded(buf, token, item->len); g_free(token); break; case EXC2: token = get_nth_token(qso->comment, 1); add_rpadded(buf, token, item->len); g_free(token); break; case EXC3: token = get_nth_token(qso->comment, 2); add_rpadded(buf, token, item->len); g_free(token); break; case EXC4: token = get_nth_token(qso->comment, 3); add_rpadded(buf, token, item->len); g_free(token); break; case EXC_S: { int pos; char *start = exchange; tmp[0] = '\0'; pos = strcspn(start, "#"); strncat(tmp, start, pos); /** \todo avoid buffer overflow */ while (pos < strlen(start)) { if (start[pos] == '#') { /* format and add serial number */ char number[6]; sprintf(number, "%04d", qso->qso_nr); strcat(tmp, number); } start = start + pos + 1; /* skip special character */ pos = strcspn(start, "#"); strncat(tmp, start, pos); } add_rpadded(buf, tmp, item->len); } break; case TX: sprintf(tmp, "%1d", qso->tx); add_rpadded(buf, tmp, item->len); break; case QTCRCALL: if (qso->qtcdirection == 1) { // RECV strcpy(tmp, call); } if (qso->qtcdirection == 2) { // SEND strcpy(tmp, qso->call); } add_rpadded(buf, g_strchomp(tmp), item->len); break; case QTCHEAD: tmp[0] = '\0'; sprintf(tmp, "%*d/%d", 3, qso->qtc_serial, qso->qtc_number); add_rpadded(buf, g_strchomp(tmp), item->len); break; case QTCSCALL: if (qso->qtcdirection == 1) { // RECV strcpy(tmp, qso->call); } if (qso->qtcdirection == 2) { // SEND strcpy(tmp, call); } add_rpadded(buf, g_strchomp(tmp), item->len); break; case QTC: sprintf(tmp, "%s %-13s %4s", qso->qtc_qtime, qso->qtc_qcall, qso->qtc_qserial); add_rpadded(buf, g_strchomp(tmp), item->len); case NO_ITEM: default: tmp[0] = '\0'; } } strcat(buf, "\n"); /* closing nl */ } int write_cabrillo(void) { extern char *cabrillo; extern char logfile[]; extern char exchange[]; extern char call[]; char *cab_dfltfile; struct cabrillo_desc *cabdesc; char cabrillo_tmp_name[80]; char buffer[4000] = ""; FILE *fp1, *fp2, *fpqtcrec = NULL, *fpqtcsent = NULL; struct qso_t *qso, *qtcrec = NULL, *qtcsent = NULL; int qsonr, qtcrecnr, qtcsentnr; if (cabrillo == NULL) { info("Missing CABRILLO= keyword (see man page)"); sleep(2); return (1); } /* Try to read cabrillo format first from local directory. * Try also in default data dir if not found. */ cabdesc = read_cabrillo_format("cabrillo.fmt", cabrillo); if (!cabdesc) { cab_dfltfile = g_strconcat(PACKAGE_DATA_DIR, G_DIR_SEPARATOR_S, "cabrillo.fmt", NULL); cabdesc = read_cabrillo_format(cab_dfltfile, cabrillo); g_free(cab_dfltfile); } if (!cabdesc) { info("Cabrillo format specification not found!"); sleep(2); return (2); } /* open logfile and create a cabrillo file */ strcpy(cabrillo_tmp_name, call); g_strstrip(cabrillo_tmp_name); /* drop \n */ strcat(cabrillo_tmp_name, ".cbr"); if ((fp1 = fopen(logfile, "r")) == NULL) { info("Can't open logfile."); sleep(2); free_cabfmt(cabdesc); return (1); } if (cabdesc->qtc_item_array != NULL) { if (qtcdirection & 1) { fpqtcrec = fopen(QTC_RECV_LOG, "r"); if (fpqtcrec == NULL) { info("Can't open received QTC logfile."); sleep(2); free_cabfmt(cabdesc); fclose(fp1); return (1); } } if (qtcdirection & 2) { fpqtcsent = fopen(QTC_SENT_LOG, "r"); if (fpqtcsent == NULL) { info("Can't open sent QTC logfile."); sleep(2); free_cabfmt(cabdesc); fclose(fp1); if (fpqtcrec != NULL) fclose(fpqtcrec); return (1); } } } if ((fp2 = fopen(cabrillo_tmp_name, "w")) == NULL) { info("Can't create cabrillo file."); sleep(2); free_cabfmt(cabdesc); fclose(fp1); if (fpqtcsent != NULL) fclose(fpqtcsent); if (fpqtcrec != NULL) fclose(fpqtcrec); return (2); } /* ask for exchange and header information */ ask(buffer, "Your exchange (e.g. State, province, age etc... (# if serial number)): "); strncpy(exchange, buffer, 10); getsummary(fp2); info("Writing cabrillo file"); qsonr = 0; qtcrecnr = 0; qtcsentnr = 0; while ((qso = get_next_record(fp1))) { qsonr++; prepare_line(qso, cabdesc, buffer); if (strlen(buffer) > 5) { fputs(buffer, fp2); } if (fpqtcrec != NULL && qtcrec == NULL) { qtcrec = get_next_qtc_record(fpqtcrec, RECV); if (qtcrec != NULL) { qtcrecnr = qtcrec->qso_nr; } } if (fpqtcsent != NULL && qtcsent == NULL) { qtcsent = get_next_qtc_record(fpqtcsent, SEND); if (qtcsent != NULL) { qtcsentnr = qtcsent->qso_nr; } } while (qtcrecnr == qsonr || qtcsentnr == qsonr) { if (qtcsent == NULL || (qtcrec != NULL && qtcrec->qsots < qtcsent->qsots)) { prepare_line(qtcrec, cabdesc, buffer); if (strlen(buffer) > 5) { fputs(buffer, fp2); free_qso(qtcrec); } qtcrec = get_next_qtc_record(fpqtcrec, RECV); if (qtcrec != NULL) { qtcrecnr = qtcrec->qso_nr; } else { qtcrecnr = 0; } } else { prepare_line(qtcsent, cabdesc, buffer); if (strlen(buffer) > 5) { fputs(buffer, fp2); free_qso(qtcsent); } qtcsent = get_next_qtc_record(fpqtcsent, SEND); if (qtcsent != NULL) { qtcsentnr = qtcsent->qso_nr; } else { qtcsentnr = 0; } } } free_qso(qso); } fclose(fp1); fputs("END-OF-LOG:\n", fp2); fclose(fp2); if (fpqtcrec != NULL) { fclose(fpqtcrec); } free_cabfmt(cabdesc); return 0; } /* The ADIF function has been written according ADIF v1.00 specifications as shown on http://www.adif.org LZ3NY */ int write_adif(void) { extern char logfile[]; extern char exchange[]; extern char whichcontest[]; extern int exchange_serial; extern char modem_mode[]; char buf[181] = ""; char buffer[181] = ""; char standardexchange[70] = ""; char adif_tmp_name[40] = ""; char adif_tmp_call[13] = ""; char adif_tmp_str[2] = ""; char adif_year_check[3] = ""; char adif_rcvd_num[16] = ""; char resultat[16]; char adif_tmp_rr[5] = ""; char freq_buf[16]; int adif_mode_dep = 0; FILE *fp1, *fp2; if ((fp1 = fopen(logfile, "r")) == NULL) { info("Opening logfile not possible."); sleep(2); return (1); } strcpy(adif_tmp_name, whichcontest); strcat(adif_tmp_name, ".adi"); if ((fp2 = fopen(adif_tmp_name, "w")) == NULL) { info("Opening ADIF file not possible."); sleep(2); fclose(fp1); //added by F8CFE return (2); } if (strlen(exchange) > 0) strcpy(standardexchange, exchange); /* in case using write_adif() without write_cabrillo() before * just ask for the needed information */ if ((strlen(standardexchange) == 0) && (exchange_serial != 1)) { ask(buffer, "Your exchange (e.g. State, province, age etc... (# if serial number)): "); strncpy(standardexchange, buffer, 10); } info("Writing ADIF file"); /* write header */ fputs ("################################################################################\n", fp2); fputs ("# ADIF v1.00 data file exported by TLF\n", fp2); fputs ("# according to specifications on http://www.adif.org\n", fp2); fputs("#\n", fp2); fputs ("################################################################################\n", fp2); fputs("1.00\n\n", fp2); while (fgets(buf, sizeof(buf), fp1)) { buffer[0] = '\0'; if ((buf[0] != ';') && ((buf[0] != ' ') || (buf[1] != ' ')) && (buf[0] != '#') && (buf[0] != '\n') && (buf[0] != '\r')) { /* CALLSIGN */ strcat(buffer, ""); strcat(buffer, adif_tmp_call); /* BAND */ if (buf[1] == '6') strcat(buffer, "160M"); else if (buf[1] == '8') strcat(buffer, "80M"); else if (buf[1] == '4') strcat(buffer, "40M"); else if (buf[1] == '3') strcat(buffer, "30M"); else if (buf[1] == '2') strcat(buffer, "20M"); else if (buf[1] == '1' && buf[2] == '5') strcat(buffer, "15M"); else if (buf[1] == '1' && buf[2] == '7') strcat(buffer, "17M"); else if (buf[1] == '1' && buf[2] == '2') strcat(buffer, "12M"); else if (buf[1] == '1' && buf[2] == '0') strcat(buffer, "10M"); /* FREQ if available */ if (strlen(buf) > 81) { // read kHz and write MHz const double mhz = atof(buf + 80) / 1000.0; freq_buf[0] = '\0'; if (mhz > 1.799) { sprintf(freq_buf, "%.4f", mhz < 10 ? 6 : 7, mhz); } strcat(buffer, freq_buf); } /* QSO MODE */ if (buf[3] == 'C') strcat(buffer, "CW"); else if (buf[3] == 'S') strcat(buffer, "SSB"); else if (strcmp(modem_mode, "RTTY") == 0) strcat(buffer, "RTTY"); else /* \todo DIGI is no allowed mode */ strcat(buffer, "DIGI"); /* QSO_DATE */ /* Y2K :) */ adif_year_check[0] = '\0'; strncpy(adif_year_check, buf + 14, 2); if (atoi(adif_year_check) <= 70) strcat(buffer, "20"); else strcat(buffer, "19"); /* year */ strncat(buffer, buf + 14, 2); /*month */ if (buf[10] == 'J' && buf[11] == 'a') strcat(buffer, "01"); if (buf[10] == 'F') strcat(buffer, "02"); if (buf[10] == 'M' && buf[12] == 'r') strcat(buffer, "03"); if (buf[10] == 'A' && buf[12] == 'r') strcat(buffer, "04"); if (buf[10] == 'M' && buf[12] == 'y') strcat(buffer, "05"); if (buf[10] == 'J' && buf[11] == 'u' && buf[12] == 'n') strcat(buffer, "06"); if (buf[10] == 'J' && buf[12] == 'l') strcat(buffer, "07"); if (buf[10] == 'A' && buf[12] == 'g') strcat(buffer, "08"); if (buf[10] == 'S') strcat(buffer, "09"); if (buf[10] == 'O') strcat(buffer, "10"); if (buf[10] == 'N') strcat(buffer, "11"); if (buf[10] == 'D') strcat(buffer, "12"); /*date */ strncat(buffer, buf + 7, 2); /* TIME_ON */ strcat(buffer, ""); strncat(buffer, buf + 17, 2); strncat(buffer, buf + 20, 2); /* RS(T) flag */ if (buf[3] == 'S') /* check for SSB */ adif_mode_dep = 2; else adif_mode_dep = 3; /* RST_SENT */ strcat(buffer, ""); strncat(buffer, buf + 44, adif_mode_dep); /* STX - sent contest number */ strcat(buffer, ""); strncat(buffer, buf + 23, 4); } else { snprintf(resultat, sizeof(resultat), "%zd", strlen(standardexchange)); strcat(buffer, resultat); strcat(buffer, ">"); strcat(buffer, g_strstrip(standardexchange)); } /* RST_RCVD */ strncpy(adif_tmp_rr, buf + 49, 4); strcpy(adif_tmp_rr, g_strstrip(adif_tmp_rr)); strcat(buffer, ""); strncat(buffer, buf + 49, adif_mode_dep); /* SRX - received contest number */ strncpy(adif_rcvd_num, buf + 54, 14); strcpy(adif_rcvd_num, g_strstrip(adif_rcvd_num)); snprintf(resultat, sizeof(resultat), "%zd", strlen(adif_rcvd_num)); strcat(buffer, ""); if (strcmp(buf + 54, " ") != 0) strcat(buffer, adif_rcvd_num); /* */ strcat(buffer, "\n"); //end of ADIF row fputs(buffer, fp2); } } // end fgets() loop fclose(fp1); fclose(fp2); return (0); } // end write_adif tlf-1.4.0/src/clusterinfo.c0000644000175000017500000002316413562576621012535 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011-2014 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * * clusterinfo + time update *--------------------------------------------------------------*/ #include #include #include #include #include "bandmap.h" #include "dxcc.h" #include "err_utils.h" #include "get_time.h" #include "getctydata.h" #include "lancode.h" #include "nicebox.h" // Includes curses.h #include "printcall.h" #include "tlf.h" #include "ui_utils.h" #define MAXMINUTES 30 extern int bandinx; extern pthread_mutex_t spot_ptr_mutex; char *bandmap[MAX_SPOTS]; int spotarray[MAX_SPOTS]; /* Array of indices into spot_ptr */ int loadbandmap(void); int getclusterinfo(void); void clusterinfo(void) { extern int cluster; extern char backgrnd_str[]; extern freq_t freq; extern char band[NBANDS][4]; extern int bandinx; extern int trx_control; extern char spot_ptr[MAX_SPOTS][82]; extern freq_t node_frequencies[MAXNODES]; extern char thisnode; int f, j, k; char inputbuffer[160] = ""; /* cluster and bandmap display */ attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 0, ""); if (cluster == NOCLUSTER) { attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (int i = 14; i < LINES - 1; i++) mvprintw(i, 0, backgrnd_str); refreshp(); } if (cluster == MAP) { attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); loadbandmap(); } if (cluster == FREQWINDOW) { for (f = 0; f < 8; f++) mvprintw(15 + f, 4, " "); if (trx_control == 0) node_frequencies[thisnode - 'A'] = atof(band[bandinx]); else node_frequencies[thisnode - 'A'] = freq; for (f = 0; f < MAXNODES; f++) { if (node_frequencies[f] != 0) mvprintw(15 + f, 4, " Stn %c : %5.0f", 'A' + f, node_frequencies[f] / 1000.0); } nicebox(14, 3, 8, 27, "Frequencies"); } if (cluster == CLUSTER) { attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); g_strlcpy(inputbuffer, backgrnd_str, 79); for (j = 15; j <= LINES - 3; j++) { mvprintw(j, 1, "%s", inputbuffer); } /** \todo minimize lock time */ pthread_mutex_lock(&spot_ptr_mutex); k = getclusterinfo(); if (k > (MAX_SPOTS - 1)) { k = MAX_SPOTS - 1; } k -= (LINES - 3 - 14) + 1; if (k < 0) k = -1; for (j = 15; j <= LINES - 3; j++) { k++; if (k < (MAX_SPOTS - 1) && spotarray[k] > -1) { if (k > MAX_SPOTS - 1) k = MAX_SPOTS - 1; inputbuffer[0] = '\0'; if (spotarray[k] >= 0 && spotarray[k] < MAX_SPOTS) g_strlcpy(inputbuffer, spot_ptr[spotarray[k]], 79); else { TLF_LOG_INFO("error in packet table"); } if (strlen(inputbuffer) > 14) { mvprintw(j, 1, "%s", inputbuffer); } } } pthread_mutex_unlock(&spot_ptr_mutex); nicebox(14, 0, LINES - 3 - 14, 78, "Cluster"); refreshp(); } printcall(); } /* ----------------------------------------------------*/ int loadbandmap(void) { extern char *bandmap[MAX_SPOTS]; extern struct tm *time_ptr; extern int xplanet; extern char markerfile[]; extern char lastmsg[]; extern char spot_ptr[MAX_SPOTS][82]; extern int nr_of_spots; int i = 0, j, m, x; unsigned int k; int spotminutes = 0; int sysminutes = 0; int timediff = 0; int linepos; int spot_age[MAX_SPOTS]; freq_t spot_freq[MAX_SPOTS]; char thisline[83]; char spotcall[20]; char spottime[6]; char spotline[38]; char callcopy[81]; FILE *fp; char marker_out[60]; char color[20]; int lon; int lat; int zz; int nofile = 0; int iswarc = 0; char xplanetmsg[160]; dxcc_data *dx; for (i = 0; i < MAX_SPOTS; i++) { if (bandmap[i] != NULL) { g_free(bandmap[i]); bandmap[i] = NULL; } spot_age[i] = 0; spot_freq[i] = 0.; } i = 0; get_time(); sysminutes = 60 * time_ptr->tm_hour + time_ptr->tm_min; /* parse log of cluster output and find DX announcements. * Copy them to bandmap array and find spot_age and spot_freq */ pthread_mutex_lock(&spot_ptr_mutex); for (j = 0; j < nr_of_spots; j++) { strncpy(thisline, spot_ptr[j], 82); if (strncmp(thisline, "DX de ", 6) == 0) { g_strlcpy(spotcall, thisline + 26, 6); strncpy(spottime, thisline + 70, 4); // how old? spottime[4] = spottime[3]; spottime[3] = spottime[2]; spottime[2] = ':'; spottime[5] = '\0'; spotminutes = 60 * atoi(spottime) + atoi(spottime + 3); timediff = (sysminutes - spotminutes) + 5; if (timediff + 30 < 0) timediff += 1440; /* is spot recent? */ if ((timediff + 30) <= (MAXMINUTES + 30)) { /* look for duplicates already in bandmap * => kill older one and keep younger entry */ for (k = 0; k < i; k++) { g_strlcpy(callcopy, bandmap[k] + 26, 6); if (strncmp(callcopy, spotcall, 4) == 0) { bandmap[k][0] = 'd'; break; } } bandmap[i] = g_strdup(thisline); spot_age[i] = timediff; spot_freq[i] = atof(thisline + 17); i++; } } } pthread_mutex_unlock(&spot_ptr_mutex); linepos = (i < 8 ? 0 : i - 8); /* prune markerfile by opening it for write */ if (xplanet > 0 && nofile == 0) { if ((fp = fopen(markerfile, "w")) == NULL) { nofile = 1; /* remember: no write possible */ TLF_LOG_INFO("Opening marker file not possible."); } else fclose(fp); } for (j = linepos; j < linepos + 8; j++) { if (bandmap[j] != NULL) { g_strlcpy(spotline, bandmap[j] + 17, 23); // freq and call g_strlcpy(spottime, bandmap[j] + 70, 6); // time strcat(spotline, spottime); strncpy(callcopy, bandmap[j] + 26, 16); // call for (m = 0; m < 16; m++) { if (callcopy[m] == ' ') { callcopy[m] = '\0'; break; } /* use strcspn? */ } x = getctynr(callcopy); // CTY of station if (x != 0 && xplanet > 0 && nofile == 0) { if ((fp = fopen(markerfile, "a")) == NULL) { TLF_LOG_INFO("Opening markerfile not possible."); } else { /* show no callsign if MARKERDOTS */ if (xplanet == 2) callcopy[0] = '\0'; dx = dxcc_by_index(x); lon = (int)(dx -> lon) * -1; lat = (int)(dx -> lat); *color = '\0'; if (spot_age[j] > 15) strcat(color, "Green"); else { iswarc = 0; if (spot_freq[j] >= 10100.0 && spot_freq[j] <= 10150.0) iswarc = 1; if (spot_freq[j] >= 18068.0 && spot_freq[j] <= 18168.0) iswarc = 1; if (spot_freq[j] >= 24890.0 && spot_freq[j] <= 24990.0) iswarc = 1; if (iswarc == 0) { if (spot_freq[j] < 3500.0) strcat(color, "Red"); if (spot_freq[j] >= 3500.0 && spot_freq[j] <= 4000.0) strcat(color, "Magenta"); if (spot_freq[j] >= 7000.0 && spot_freq[j] <= 7300.0) strcat(color, "Yellow"); if (spot_freq[j] >= 14000.0 && spot_freq[j] <= 14350.0) strcat(color, "Blue"); if (spot_freq[j] >= 21000.0 && spot_freq[j] <= 21450.0) strcat(color, "White"); if (spot_freq[j] >= 28000.0 && spot_freq[j] <= 29700.0) strcat(color, "Green"); } else { strcat(color, "Cyan"); } } if (*color != '\0') { sprintf(marker_out, "%4d %4d \"%s\" color=%s\n", lat, lon, callcopy, color); fputs(marker_out, fp); } fclose(fp); } } } } /* append last dx cluster message to markerfile; will be shown at bottom */ if (xplanet == 1 && nofile == 0) { strcpy(xplanetmsg, " -82 -120 "); strcat(xplanetmsg, "\""); strcat(xplanetmsg, lastmsg); for (zz = 0; zz < strlen(lastmsg); zz++) if (lastmsg[zz] == 34) lastmsg[zz] = ' '; strcat(xplanetmsg, "\" color=Cyan\n"); if ((fp = fopen(markerfile, "a")) == NULL) { TLF_LOG_INFO("Opening markerfile not possible."); } else { if (strlen(xplanetmsg) > 20) fputs(xplanetmsg, fp); fclose(fp); } } bandmap_show(); refreshp(); return (i); /* nr of found spot lines */ } int getclusterinfo(void) { extern char spot_ptr[MAX_SPOTS][82]; extern int nr_of_spots; extern int announcefilter; extern char call[]; int i; int si; char calldupe[12]; strcpy(calldupe, call); calldupe[strlen(call) - 1] = '\0'; for (si = 0; si < (MAX_SPOTS - 2); si++) spotarray[si] = -1; i = 0; si = 0; while (1) { if (strstr(spot_ptr[i], "DX de") != NULL) { spotarray[si] = i; si++; } else if (strstr(spot_ptr[i], calldupe) != NULL) { if ((announcefilter <= 2)) { spotarray[si] = i; si++; } } else if (strstr(spot_ptr[i], "To ALL") != NULL) { if ((announcefilter <= 1)) { spotarray[si] = i; si++; } } else if ((announcefilter == 0) && (strlen(spot_ptr[i]) > 20)) { spotarray[si] = i; si++; } i++; if (i > (nr_of_spots - 1)) break; } return si; } tlf-1.4.0/src/grabspot.c0000644000175000017500000000524013562576621012014 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 "grabspot.h" #include "bandmap.h" #include "fldigixmlrpc.h" #include "getctydata.h" #include "searchlog.h" // Includes glib.h #include "showinfo.h" #include "tlf.h" #include "tlf_curses.h" #include "gettxinfo.h" void send_bandswitch(freq_t outfreq); static freq_t execute_grab(spot *data); freq_t grabspot(void) { extern char hiscall[]; extern int trx_control; spot *data; if (!trx_control) { return 0; // no trx control } if (hiscall[0] == '\0') { return 0; // call input is empty } data = bandmap_lookup(hiscall); if (data == NULL) { return 0; // no spot found } return execute_grab(data); } freq_t grab_next(void) { extern int trx_control; extern freq_t freq; static int dir = 1; /* start scanning up */ spot *data; if (!trx_control) { return 0; // no trx control } data = bandmap_next(dir, freq); if (data == NULL) { /* nothing in that direction */ /* try other one */ dir = 1 - dir; data = bandmap_next(dir, freq); } if (data == NULL) { return 0; } return execute_grab(data); } /* Perform the steps needed to grab a call and then free data * \return frequency of the spot in Hz */ static freq_t execute_grab(spot *data) { extern char hiscall[]; extern char mode[]; extern int cqmode; extern freq_t mem; extern freq_t freq; freq_t f = data->freq - fldigi_get_carrier(); set_outfreq(f); send_bandswitch(f); strcpy(hiscall, data->call); showinfo(getctydata_pfx(hiscall)); searchlog(hiscall); /* if in CQ mode switch to S&P and remember QRG */ if (cqmode == CQ) { cqmode = S_P; strcpy(mode, "S&P "); mem = freq; mvprintw(14, 67, " MEM: %7.1f", mem / 1000.); } refreshp(); g_free(data->call); g_free(data); return f; } tlf-1.4.0/src/tlf_curses.h0000644000175000017500000000463613562576621012361 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2015 Nate Bargmann * * 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 */ /* Collate the macro test boilerplate into this file and then * include this file into the Tlf source files that need [n]curses.h * functions. */ #ifndef TLF_CURSES_H #define TLF_CURSES_H #include #if defined HAVE_NCURSESW_CURSES_H # include #elif defined HAVE_NCURSESW_H # include #elif defined HAVE_NCURSES_CURSES_H # include #elif defined HAVE_NCURSES_H # include #elif defined HAVE_CURSES_H # include #else # error "SysV or X/Open-compatible Curses header file required" #endif /* Additional key codes reported by Gnome Terminal and Xterm * and apparently in the terminfo database but not in Ncurses header files. * * The following keys are defined in the xterm terminfo database. * Key names with a suffix of '3' are Alt-key combinations. * Key names with a suffix of '5' are Ctl-key combinations. * * Keys are defined in decimal ordinal order. */ #define kDC5 519 /* Ctrl-Delete */ #define kDN3 523 /* Alt-Down arrow */ #define kDN5 525 /* Ctrl-Down arrow */ #define kEND3 528 /* Alt-End */ #define kEND5 530 /* Ctrl-End */ #define kHOM3 533 /* Alt-Home */ #define kHOM5 535 /* Ctrl-Home */ #define kIC5 540 /* Ctrl-Insert */ #define kLFT3 543 /* Alt-Left arrow */ #define kLFT5 545 /* Ctrl-Left arrow */ #define kNXT3 548 /* Alt-Page Down */ #define kNXT5 550 /* Ctrl-Page Down */ #define kPRV3 553 /* Alt-Page Up */ #define kPRV5 555 /* Ctrl-Page Up */ #define kRIT3 558 /* Alt-Right arrow */ #define kRIT5 560 /* Ctrl-Right arrow */ #define kUP3 564 /* Alt-Up arrow */ #define kUP5 566 /* Ctrl-Up arrow */ #endif tlf-1.4.0/src/getsummary.c0000644000175000017500000000775713562576621012407 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * write cabrillo header * *--------------------------------------------------------------*/ #include #include #include "nicebox.h" // Includes curses.h #include "showscore.h" extern char call[]; void ask(char *buffer, char *what) { attron(A_STANDOUT); mvprintw(15, 1, " "); nicebox(14, 0, 1, 78, what); attron(A_STANDOUT); mvprintw(15, 1, ""); echo(); getnstr(buffer, 78); noecho(); g_strstrip(buffer); } int getsummary(FILE *fp) { char buffer[80]; fprintf(fp, "START-OF-LOG: 3.0\n"); fprintf(fp, "CREATED-BY: tlf-%s\n", VERSION); ask(buffer, "Contest: (CQ-WW-CW/SSB, CQ-WPX-CW/SSB, ARRL-DX-CW/SSB)"); fprintf(fp, "CONTEST: %s\n", buffer); fprintf(fp, "CALLSIGN: %s", call); /* !!! trailing \n at call */ ask(buffer, "Category-Assisted: (ASSISTED, NON-ASSISTED"); fprintf(fp, "CATEGORY-ASSISTED: %s\n", buffer); ask(buffer, "Bands: (ALL,160M,80M,40M,20M,15M,10M)"); fprintf(fp, "CATEGORY-BAND: %s\n", buffer); ask(buffer, "Mode: (CW,SSB,RTTY,MIXED)"); fprintf(fp, "CATEGORY-MODE: %s\n", buffer); ask(buffer, "Category-Operator:(SINGLE-OP, MULTI-OP, CHECKLOG)"); fprintf(fp, "CATEGORY-OPERATOR: %s\n", buffer); ask(buffer, "POWER: (HIGH,LOW,QRP)"); fprintf(fp, "CATEGORY-POWER: %s\n", buffer); ask(buffer, "Category-Station: (FIXED, MOBILE, PORTABLE, ROVER, EXPEDITION, HQ, SCHOOL"); if (*buffer != '\0') fprintf(fp, "CATEGORY-STATION: %s\n", buffer); ask(buffer, "Category-Time: (6-HOURS, 12-HOURS, 24-HOURS)"); if (*buffer != '\0') fprintf(fp, "CATEGORY-TIME: %s\n", buffer); ask(buffer, "Transmitter: (ONE, TWO, LIMITED, UNLIMITED, SWL)"); if (*buffer != '\0') fprintf(fp, "CATEGORY-TRANSMITTER: %s\n", buffer); ask(buffer, "Category-Overlay: (ROOKIE, TB-WIRES, NOVICE-TECH, OVER-50)"); if (*buffer != '\0') fprintf(fp, "CATEGORY-OVERLAY: %s\n", buffer); fprintf(fp, "CLAIMED-SCORE: %d\n", get_total_score()); ask(buffer, "Club: "); if (*buffer != '\0') fprintf(fp, "CLUB: %s\n", buffer); ask(buffer, "Location: (section, IOTA name, RDA, State/Province, ...)"); if (*buffer != '\0') fprintf(fp, "LOCATION: %s\n", buffer); ask(buffer, "Operator name: "); fprintf(fp, "NAME: %s\n", buffer); ask(buffer, "ADDRESS: "); fprintf(fp, "ADDRESS: %s\n", buffer); ask(buffer, "ADDRESS(2): "); if (*buffer != '\0') fprintf(fp, "ADDRESS: %s\n", buffer); ask(buffer, "ADDRESS(3): (use any text editor to insert more ADDRESS lines)"); if (*buffer != '\0') fprintf(fp, "ADDRESS: %s\n", buffer); ask(buffer, "List of Operators: (space delimited)"); fprintf(fp, "OPERATORS: %s\n", buffer); ask(buffer, "OFFTIME: (yyyy-mm-dd hhmm yyyy-mm-dd hhmm)"); if (*buffer != '\0') fprintf(fp, "OFFTIME: %s\n", buffer); ask(buffer, "SOAPBOX: (use any text editor to include more lines)"); if (*buffer != '\0') fprintf(fp, "SOAPBOX: %s\n", buffer); return 0; } tlf-1.4.0/src/deleteqso.c0000644000175000017500000001200313562576621012153 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * delete last qso * *--------------------------------------------------------------*/ #include #include #include #include #include "clear_display.h" #include "deleteqso.h" #include "err_utils.h" #include "ignore_unused.h" #include "printcall.h" #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "qsonr_to_str.h" #include "tlf_curses.h" #include "scroll_log.h" #include "ui_utils.h" #include "addcall.h" #define QTCRECVCALLPOS 30 #define QTCSENTCALLPOS 35 void delete_last_qtcs(char *call, char *bandmode) { int look, qtclen, s; int qtcfile; struct stat qstatbuf; char logline[100]; // clean up received qtcs with same call and mode if (qtcdirection & RECV) { if ((qtcfile = open(QTC_RECV_LOG, O_RDWR)) < 0) { mvprintw(5, 0, "Error opening QTC received logfile.\n"); sleep(1); } fstat(qtcfile, &qstatbuf); if ((int)qstatbuf.st_size > QTCRECVCALLPOS) { look = 1; qtclen = 0; // iterate till the current line from back of logfile // callsigns is the current callsign // this works only for fixed length qtc line! lseek(qtcfile, 0, SEEK_SET); while (look == 1) { lseek(qtcfile, ((int)qstatbuf.st_size - (91 + qtclen)), SEEK_SET); IGNORE(read(qtcfile, logline, 90));; logline[90] = '\0'; if (!(strncmp(call, logline + QTCRECVCALLPOS, strlen(call)) == 0 && strncmp(bandmode, logline, 5) == 0)) { // stop searching look = 0; } else { qtclen += 91; qtc_dec(call, RECV); } } IGNORE(ftruncate(qtcfile, qstatbuf.st_size - qtclen));; fsync(qtcfile); } close(qtcfile); } // clean up sent qtcs with same call and mode if (qtcdirection & SEND) { if ((qtcfile = open(QTC_SENT_LOG, O_RDWR)) < 0) { mvprintw(5, 0, "Error opening QTC sent logfile.\n"); sleep(1); } fstat(qtcfile, &qstatbuf); if ((int)qstatbuf.st_size > QTCSENTCALLPOS) { look = 1; qtclen = 0; s = nr_qsos; while (s >= 0 && qsoflags_for_qtc[s] != 1) { s--; } // iterate till the current line from back of logfile // callsigns is the current callsign // this works only for fixed length qtc line! while (s >= 0 && look == 1) { lseek(qtcfile, ((int)qstatbuf.st_size - (95 + qtclen)), SEEK_SET); IGNORE(read(qtcfile, logline, 94));; if (!(strncmp(call, logline + QTCSENTCALLPOS, strlen(call)) == 0 && strncmp(bandmode, logline, 5) == 0)) { // stop searching look = 0; } else { qtclen += 95; qtc_dec(call, SEND); qsoflags_for_qtc[s] = 0; next_qtc_qso = s; while (s >= 0 && qsoflags_for_qtc[s] != 1) { s--; } } } IGNORE(ftruncate(qtcfile, qstatbuf.st_size - qtclen));; nr_qtcsent--; fsync(qtcfile); } close(qtcfile); } } void delete_qso(void) { int x; struct stat statbuf; int lfile; char logline[100]; char call[15], bandmode[6]; mvprintw(13, 29, "OK to delete last qso (y/n)?"); x = key_get(); if ((x == 'y') || (x == 'Y')) { if ((lfile = open(logfile, O_RDWR)) < 0) { TLF_LOG_WARN("I can not find the logfile..."); } else { fstat(lfile, &statbuf); if (statbuf.st_size >= LOGLINELEN) { if (qtcdirection > 0) { // read band, mode and call from last QSO line lseek(lfile, ((int)statbuf.st_size - LOGLINELEN), SEEK_SET); IGNORE(read(lfile, logline, LOGLINELEN - 1));; g_strlcpy(bandmode, logline, 6); g_strlcpy(call, logline + 29, 15); g_strchomp(call); // delete QTC's for that combination of band, mode and call delete_last_qtcs(call, bandmode); } IGNORE(ftruncate(lfile, statbuf.st_size - LOGLINELEN)); } fsync(lfile); close(lfile); if (qsos[nr_qsos-1][0] != ';') { int band = get_band(qsos[nr_qsos-1]); band_score[band]--; qsonum--; qsonr_to_str(); } nr_qsos--; qsos[nr_qsos][0] = '\0'; } scroll_log(); } attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(13, 29, " "); printcall(); clear_display(); } tlf-1.4.0/src/bandmap.c0000644000175000017500000006357213562576621011611 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2011 Thomas Beierlein * * 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 #include #include #include #include #include "bandmap.h" #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "searchcallarray.h" #include "tlf_curses.h" #include "ui_utils.h" #include "getctydata.h" #include "dxcc.h" #include "initial_exchange.h" #include "bands.h" #define TOLERANCE 100 /* spots with a QRG +/-TOLERANCE will be counted as the same QRG */ #define SPOT_COLUMN_WIDTH 22 #define SPOT_FREQ_WIDTH 7 #define SPOT_CALL_WIDTH SPOT_COLUMN_WIDTH-SPOT_FREQ_WIDTH-4 /* 3 space before and 1 after call */ #define DISTANCE(x, y) \ ( x < y ? y - x : x -y ) #define TOPLINE 14 #define LASTLINE (LINES - 2) #define LINELENGTH 80 #define COLUMNS ((LINELENGTH - 14) / SPOT_COLUMN_WIDTH) #define NR_SPOTS ((LASTLINE - TOPLINE + 1) * COLUMNS) pthread_mutex_t bm_mutex = PTHREAD_MUTEX_INITIALIZER; /** \brief sorted list of all recent DX spots */ GList *allspots = NULL; /** \brief sorted list of filtered spots */ GPtrArray *spots; bm_config_t bm_config = { 1, /* show all bands */ 1, /* show all mode */ 1, /* show dupes */ 1, /* skip dupes during grab */ 900,/* default livetime */ 0 /* DO NOT show ONLY multipliers */ }; short bm_initialized = 0; extern freq_t freq; extern int trx_control; extern int bandinx; extern int trxmode; extern char thisnode; extern struct worked_t worked[]; extern int contest; extern char whichcontest[]; char *qtc_format(char *call); gint cmp_freq(spot *a, spot *b); /* * write bandmap spots to a file */ void bmdata_write_file() { FILE *fp; spot *sp; GList *found; struct timeval tv; if ((fp = fopen(".bmdata.dat", "w")) == NULL) { attron(modify_attr(COLOR_PAIR(CB_DUPE) | A_BOLD)); mvprintw(13, 29, "can't open bandmap data file!"); refreshp(); return; } gettimeofday(&tv, NULL); pthread_mutex_lock(&bm_mutex); found = allspots; fprintf(fp, "%d\n", (int)tv.tv_sec); while (found != NULL) { sp = found->data; fprintf(fp, "%s;%d;%d;%d;%c;%u;%d;%d;%d;%s\n", sp->call, sp->freq, sp->mode, sp->band, sp->node, (int)sp->timeout, sp->dupe, sp->cqzone, sp->ctynr, g_strchomp(sp->pfx)); found = found->next; } pthread_mutex_unlock(&bm_mutex); fclose(fp); } /* * read bandmap spots from file, put them to allspots list */ void bmdata_read_file() { FILE *fp; struct timeval tv; int timediff, last_bm_save_time, fc; char line[50], *token; static int bmdata_parsed = 0; if ((fp = fopen(".bmdata.dat", "r")) != NULL && bmdata_parsed == 0) { bmdata_parsed = 1; if (fgets(line, 50, fp)) { sscanf(line, "%d", &last_bm_save_time); gettimeofday(&tv, NULL); timediff = (int)tv.tv_sec - last_bm_save_time; if (timediff < 0) timediff = 0; while (fgets(line, 50, fp)) { spot *entry = g_new0(spot, 1); fc = 0; token = strtok(line, ";"); while (token != NULL) { switch (fc) { case 0: entry -> call = g_strdup(token); break; case 1: sscanf(token, "%d", &entry->freq); break; case 2: sscanf(token, "%hhd", &entry->mode); break; case 3: sscanf(token, "%hd", &entry->band); break; case 4: sscanf(token, "%c", &entry->node); break; case 5: sscanf(token, "%u", &entry->timeout); break; case 6: sscanf(token, "%hhd", &entry->dupe); break; case 7: sscanf(token, "%u", &entry->cqzone); break; case 8: sscanf(token, "%u", &entry->ctynr); break; case 9: entry->pfx = g_strdup(token); break; } fc++; token = strtok(NULL, ";"); } if (entry->timeout > timediff) { entry->timeout -= timediff; /* remaining time */ allspots = g_list_insert_sorted(allspots, entry, (GCompareFunc)cmp_freq); } else { g_free(entry); } } } fclose(fp); } } /** \brief initialize bandmap * * initalize colors and data structures for bandmap operation */ void bm_init() { pthread_mutex_lock(&bm_mutex); init_pair(CB_NEW, COLOR_CYAN, COLOR_WHITE); init_pair(CB_NORMAL, COLOR_BLUE, COLOR_WHITE); init_pair(CB_DUPE, COLOR_BLACK, COLOR_WHITE); init_pair(CB_OLD, COLOR_YELLOW, COLOR_WHITE); init_pair(CB_MULTI, COLOR_WHITE, COLOR_BLUE); spots = g_ptr_array_sized_new(128); bmdata_read_file(); pthread_mutex_unlock(&bm_mutex); } /** \brief guess mode based on frequency * * \return CWMODE, DIGIMODE or SSBMODE */ int freq2mode(freq_t freq, int band) { if (freq <= cwcorner[band]) return CWMODE; else if (freq < ssbcorner[band]) return DIGIMODE; else return SSBMODE; } /** \brief add DX spot message to bandmap * * check if cluster message is a dx spot, * if so split it into pieces and insert in spot list */ void bm_add(char *s) { char *line; char *call; char node = ' '; line = g_strdup(s); if (strncmp(line, "DX de ", 6) != 0) { g_free(line); return; } if ((call = strtok(line + 26, " \t")) == NULL) { g_free(line); return; } if (strncmp(line + 6, "TLF-", 4) == 0) node = line[10]; /* get sending node id */ bandmap_addspot(call, atof(line + 16) * 1000, node); g_free(line); } /* compare functions to search in list */ gint cmp_call(spot *ldata, char *call) { return g_strcmp0(ldata->call, call); } gint cmp_freq(spot *a, spot *b) { unsigned int af = a->freq; unsigned int bf = b->freq; if (af < bf) return -1; if (af > bf) return 1; return 0; } /** add a new spot to bandmap data * \param call the call to add * \param freq on which frequency heard * \param node reporting node */ void bandmap_addspot(char *call, freq_t freq, char node) { /* - if a spot on that band and mode is already in list replace old entry * with new one and set timeout to SPOT_NEW, * otherwise add it to the list as new * - if other call on same frequency (with some TOLERANCE) replace it and set * timeout to SPOT_NEW * - all frequencies from cluster are rounded to 100 Hz, * remember all other frequencies exactly * but display only rounded to 100 Hz - sort exact */ GList *found; int band; char mode; dxcc_data *dxccdata; int dxccindex; int wi; char *lastexch; extern struct ie_list *main_ie_list; struct ie_list *current_ie; /* add only HF spots */ if (freq > 30000000) return; band = freq2band(freq); if (band == BANDINDEX_OOB) /* no ham band */ return; mode = freq2mode(freq, band); /* acquire bandmap mutex */ pthread_mutex_lock(&bm_mutex); /* look if call is already on list in that mode and band */ /* each call is allowed in every combination of band and mode * but only once */ found = g_list_find_custom(allspots, call, (GCompareFunc)cmp_call); while (found != NULL) { /* if same band and mode -> found spot already in list */ if (((spot *)found->data)->band == band && ((spot *)found->data)->mode == mode) break; found = g_list_find_custom(found->next, call, (GCompareFunc)cmp_call); } /* if already in list on that band and mode * -> set timeout to SPOT_NEW, and set new freq and reporting node * if freq has changed enough sort list anew by freq */ if (found) { ((spot *)found->data)->timeout = SPOT_NEW; ((spot *)found->data)->node = node; if (DISTANCE(((spot *)found->data)->freq, freq) > TOLERANCE) { ((spot *)found->data)->freq = freq; allspots = g_list_sort(allspots, (GCompareFunc)cmp_freq); } } else { /* if not in list already -> prepare new entry and * insert in list at correct freq */ spot *entry = g_new(spot, 1); entry -> call = g_strdup(call); entry -> freq = freq; entry -> mode = mode; entry -> band = band; entry -> node = node; entry -> timeout = SPOT_NEW; entry -> dupe = 0; /* Dupe will be determined later. */ lastexch = NULL; dxccindex = getctynr(entry->call); if (cqww == 1) { // check if the callsign exists in worked list wi = searchcallarray(call); if (wi >= 0) { lastexch = g_strdup(worked[wi].exchange); } if (lastexch == NULL && main_ie_list != NULL) { current_ie = main_ie_list; while (current_ie) { if (strcmp(call, current_ie->call) == 0) { lastexch = g_strdup(current_ie->exchange); break; } current_ie = current_ie->next; } } } if (dxccindex > 0) { dxccdata = dxcc_by_index(dxccindex); entry -> cqzone = dxccdata->cq; if (lastexch != NULL) { entry -> cqzone = atoi(lastexch); g_free(lastexch); } entry -> ctynr = dxccindex; entry -> pfx = g_strdup(dxccdata->pfx); } else { entry -> cqzone = 0; entry -> ctynr = 0; entry -> pfx = g_strdup(""); } allspots = g_list_insert_sorted(allspots, entry, (GCompareFunc)cmp_freq); /* lookup where it is */ found = g_list_find(allspots, entry); } /* check that spot is unique on freq +/- TOLERANCE Hz, * drop other entries if needed */ if (found->prev && (DISTANCE(((spot *)(found->prev)->data)->freq, freq) < TOLERANCE)) { spot *olddata; olddata = found->prev->data; allspots = g_list_remove_link(allspots, found->prev); g_free(olddata->call); g_free(olddata->pfx); g_free(olddata); } if (found->next && (DISTANCE(((spot *)(found->next)->data)->freq, freq) < TOLERANCE)) { spot *olddata; olddata = found->next->data; allspots = g_list_remove_link(allspots, found->next); g_free(olddata->call); g_free(olddata->pfx); g_free(olddata); } pthread_mutex_unlock(&bm_mutex); } void bandmap_age() { /* * go through all entries * + decrement timeout * + set state to new, normal, aged or dead * + if dead -> drop it from collection */ pthread_mutex_lock(&bm_mutex); GList *list = allspots; while (list) { spot *data = list->data; GList *temp = list; list = list->next; if (data->timeout) { data->timeout--; } if (data->timeout == 0) { allspots = g_list_remove_link(allspots, temp); g_free(data->call); g_free(data->pfx); g_free(data); } } pthread_mutex_unlock(&bm_mutex); } int bm_ismulti(char *call, spot *data, int band) { if (data != NULL && data->cqzone > 0 && data->ctynr > 0) { if (cqww == 1) { if ((zones[data->cqzone] & inxes[band]) == 0 || (countries[data->ctynr] & inxes[band]) == 0) { return 1; } } } return 0; } /** \todo should check band AND mode if already worked.... */ int bm_isdupe(char *call, int band) { int found = -1; struct t_qtc_store_obj *qtc_obj; /* spot for warc bands are never dupes */ if (IsWarcIndex(band)) return 0; found = searchcallarray(call); if (found == -1) /* new call */ return 0; if (qtcdirection > 0) { qtc_obj = qtc_get(call); if (qtc_obj->total > 0 && qtc_obj->total < 10) { return 0; } if (qtc_obj->total == 0 && (qtc_obj->capable > 0)) { return 0; } } if (worked[found].band & inxes[band]) { return 1; } else { return 0; } } void bm_show_info() { int curx, cury; getyx(stdscr, cury, curx); /* remember cursor */ /* show info field on the right */ attrset(COLOR_PAIR(CB_DUPE) | A_BOLD); move(TOPLINE, 66); vline(ACS_VLINE, LINES - TOPLINE - 1); mvprintw(LASTLINE - 5, 67, " bands: %s", bm_config.allband ? "all" : "own"); mvprintw(LASTLINE - 4, 67, " modes: %s", bm_config.allmode ? "all" : "own"); mvprintw(LASTLINE - 3, 67, " dupes: %s", bm_config.showdupes ? "yes" : "no"); mvprintw(LASTLINE - 2, 67, " onl.ml: %s", bm_config.onlymults ? "yes" : "no"); attrset(COLOR_PAIR(CB_NEW) | A_STANDOUT); mvprintw(LASTLINE - 1, 67, " MULTI"); attrset(COLOR_PAIR(CB_NEW) | A_BOLD); printw(" NEW"); attrset(COLOR_PAIR(CB_NORMAL)); mvprintw(LASTLINE, 67, "SPOT"); attrset(COLOR_PAIR(CB_OLD)); printw(" OLD"); attrset(COLOR_PAIR(CB_DUPE) | A_BOLD); printw(" dupe"); attroff(A_BOLD | A_STANDOUT); move(cury, curx); /* reset cursor */ } /* helper function for bandmap display * mark entries according to age, source and worked state. Mark new multis * - new brigth blue * - normal blue * - aged brown * - worked small caps */ void colorize_spot(spot *data) { if (data -> timeout > SPOT_NORMAL) attrset(COLOR_PAIR(CB_NEW) | A_BOLD); else if (data -> timeout > SPOT_OLD) attrset(COLOR_PAIR(CB_NORMAL)); else attrset(COLOR_PAIR(CB_OLD)); if (bm_ismulti(NULL, data, data->band)) { attrset(COLOR_PAIR(CB_NEW) | A_STANDOUT); attron(A_STANDOUT); } else if (data->dupe && bm_config.showdupes) { attrset(COLOR_PAIR(CB_DUPE) | A_BOLD); attroff(A_STANDOUT); } } /* helper function for bandmap display * convert dupes to lower case * add QTC flags for WAE contest */ char *format_spot(spot *data) { char *temp; char *temp2; if (qtcdirection > 0) { temp = qtc_format(data->call); } else temp = g_strdup(data->call); if (data->dupe && bm_config.showdupes) { temp2 = temp; temp = g_ascii_strdown(temp2, -1); g_free(temp2); } return temp; } /* helper function for bandmap display * shows formatted spot on actual cursor position */ void show_spot(spot *data) { attrset(COLOR_PAIR(CB_DUPE) | A_BOLD); printw("%7.1f %c ", data->freq / 1000., (data->node == thisnode ? '*' : data->node)); char *temp = format_spot(data); colorize_spot(data); printw("%-12s", temp); g_free(temp); } /* helper function for bandmap display * shows spot on actual working frequency */ void show_spot_on_qrg(spot *data) { printw("%7.1f %c ", (data->freq / 1000.), (data->node == thisnode ? '*' : data->node)); char *temp = format_spot(data); printw("%-12s", temp); g_free(temp); } /* helper function for bandmap display * advance to next spot position */ void next_spot_position(int *y, int *x) { *y += 1; if (*y == LASTLINE + 1) { *y = TOPLINE; *x += SPOT_COLUMN_WIDTH; } } /* helper function for bandmap display * provide center frequency for display * * If we have a rig online, read the frequency from it. * Otherwise calculate center frequency from band and mode * as middle value of the band/mode corners. */ freq_t bm_get_center(int band, int mode) { freq_t centerfrequency; if (trx_control) return freq; /* return freq from rig */ /* calculate center frequency for current band and mode */ if (CWMODE == mode) { centerfrequency = (bandcorner[band][0] + cwcorner[band]) / 2.; } else if (SSBMODE == mode) { centerfrequency = (ssbcorner[band] + bandcorner[band][1]) / 2.; } else { centerfrequency = (cwcorner[band] + ssbcorner[band]) / 2.; } return centerfrequency; } void bandmap_show() { /* * display depending on filter state * - all bands on/off * - all mode on/off * - dupes on/off * * If more entries to show than room in window, show around current frequency * * mark entries according to age, source and worked state. Mark new multis * - new brigth blue * - normal blue * - aged black * - worked small caps * - new multi underlined * - self announced stations * small preceeding letter for reporting station * * maybe show own frequency as dashline in other color * (maybee green highlighted) * - highligth actual spot if near its frequency * * Allow selection of one of the spots (switches to S&P) * - Ctrl-G as known * - '.' and cursor plus 'Enter' \Todo * - Test mouseclick.. \Todo * * '.' goes into map, shows help line above and supports * - cursormovement * - 'ESC' leaves mode * - 'Enter' selects spot * - 'B', 'D', 'M', 'O' switches filtering for band, dupes, mode and multiPlier on or off. */ GList *list; spot *data; int curx, cury; int bm_x, bm_y; int i, j; short dupe, multi; if (!bm_initialized) { bm_init(); bm_initialized = 1; } /* acquire mutex * do not add new spots to allspots during * - aging and * - filtering * furthermore do not allow call lookup as long as * filtered spot array is build anew */ pthread_mutex_lock(&bm_mutex); /* make array of spots to display * filter spotlist according to settings */ if (spots) g_ptr_array_free(spots, TRUE); /* free array */ spots = g_ptr_array_sized_new(128); /* allocate new one */ list = allspots; while (list) { data = list->data; /* if spot is allband or allmode is set or band or mode matches * actual one than add it to the filtered 'spot' array * drop spots on WARC bands if in contest mode */ multi = bm_ismulti(NULL, data, data->band); dupe = bm_isdupe(data->call, data->band); if ((!contest || !IsWarcIndex(data->band)) && (bm_config.allband || (data->band == bandinx)) && (bm_config.allmode || (data->mode == trxmode)) && (bm_config.showdupes || !dupe) && (! bm_config.onlymults || multi)) { data -> dupe = dupe; g_ptr_array_add(spots, data); } list = list->next; } pthread_mutex_unlock(&bm_mutex); /* afterwards display filtered list around own QRG +/- some offest * (offset gets reset if we change frequency */ getyx(stdscr, cury, curx); /* remember cursor */ /* start in TOPLINE, column 0 */ bm_y = TOPLINE; bm_x = 0; /* clear space for bandmap */ attrset(COLOR_PAIR(CB_DUPE) | A_BOLD); move(bm_y, 0); /* do not overwrite # frequency */ for (j = 0; j < 67; j++) addch(' '); for (i = bm_y + 1; i < LASTLINE + 1; i++) { move(i, 0); for (j = 0; j < 80; j++) addch(' '); } /* show info text */ bm_show_info(); /* split bandmap into two parts below and above current QRG. * Give both both parts equal size. * If there are less spots then reserved in the half * give the remaining room to the other half. * * These results in maximized usage of the bandmap display while * trying to keep the actual frequency in the center. */ unsigned int below_qrg = 0; unsigned int on_qrg = 0; unsigned int startindex, stopindex; const freq_t centerfrequency = bm_get_center(bandinx, trxmode); /* calc number of spots below your current QRG */ for (i = 0; i < spots->len; i++) { data = g_ptr_array_index(spots, i); if (data->freq <= centerfrequency - TOLERANCE) below_qrg++; else break; } /* check if current QRG is on a spot */ if (below_qrg < spots->len) { data = g_ptr_array_index(spots, below_qrg); if (!(data->freq > centerfrequency + TOLERANCE)) on_qrg = 1; } /* calc the index into the spot array of the first spot to show */ { unsigned int max_below; unsigned int above_qrg = spots->len - below_qrg - on_qrg; if (above_qrg < ((NR_SPOTS - 1) / 2)) { max_below = NR_SPOTS - above_qrg - 1; } else max_below = NR_SPOTS / 2; startindex = (below_qrg < max_below) ? 0 : (below_qrg - max_below); } /* calculate the index+1 of the last spot to show */ stopindex = (spots->len < startindex + NR_SPOTS - (1 - on_qrg)) ? spots->len : (startindex + NR_SPOTS - (1 - on_qrg)); /* correct calculations if we have no rig frequency to show */ if (trx_control == 0) { if (on_qrg) { on_qrg = 0; } else { stopindex += 1; } if (spots->len < stopindex) stopindex = spots->len; } /* show spots below QRG */ for (i = startindex; i < below_qrg; i++) { move(bm_y, bm_x); show_spot(g_ptr_array_index(spots, i)); next_spot_position(&bm_y, &bm_x); } /* show highlighted frequency marker or spot on QRG if rig control * is active */ if (trx_control != 0) { move(bm_y, bm_x); attrset(COLOR_PAIR(C_HEADER) | A_STANDOUT); if (!on_qrg) { printw("%7.1f %s", centerfrequency / 1000.0, "============"); } else { show_spot_on_qrg(g_ptr_array_index(spots, below_qrg)); } next_spot_position(&bm_y, &bm_x); } /* show spots above QRG */ for (i = below_qrg + on_qrg; i < stopindex; i++) { move(bm_y, bm_x); show_spot(g_ptr_array_index(spots, i)); next_spot_position(&bm_y, &bm_x); } attroff(A_BOLD); move(cury, curx); /* reset cursor */ refreshp(); } /** allow control of bandmap features */ void bm_menu() { int curx, cury; char c = -1; int j; getyx(stdscr, cury, curx); /* remember cursor */ attrset(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(13, 0, " Toggle and, ode, upes or nly multi filter"); printw(" | any other - leave "); c = toupper(key_get()); switch (c) { case 'B': bm_config.allband = 1 - bm_config.allband; break; case 'M': bm_config.allmode = 1 - bm_config.allmode; break; case 'D': bm_config.showdupes = 1 - bm_config.showdupes; break; case 'O': bm_config.onlymults = 1 - bm_config.onlymults; break; } bandmap_show(); /* refresh display */ move(13, 0); for (j = 0; j < 80; j++) addch(' '); move(cury, curx); refreshp(); } spot *copy_spot(spot *data) { spot *result = NULL; result = g_new(spot, 1); result -> call = g_strdup(data -> call); result -> freq = data -> freq; result -> mode = data -> mode; result -> band = data -> band; result -> node = data -> node; result -> timeout = data -> timeout; result -> dupe = data -> dupe; result -> cqzone = data -> cqzone; result -> ctynr = data -> ctynr; result -> pfx = g_strdup(data -> pfx); return result; } /** Search partialcall in filtered bandmap * * Lookup given partial call in the list of filtered bandmap spots. * Return a copy of the first entry found (means with teh lowest frequency). * * \param partialcall - part of call to look up * \return spot * structure with a copy of the found spot * or NULL if not found (You have to free the structure * after use). */ spot *bandmap_lookup(char *partialcall) { spot *result = NULL; if ((*partialcall != '\0') && (spots->len > 0)) { int i; pthread_mutex_lock(&bm_mutex); for (i = 0; i < spots->len; i++) { spot *data; data = g_ptr_array_index(spots, i); if (strstr(data->call, partialcall) != NULL) { /* copy data into a new Spot structure */ result = copy_spot(data); break; } } pthread_mutex_unlock(&bm_mutex); } return result; } /** Lookup next call in filtered spotlist * * Starting at given frequency lookup the array of filtered spots for * the next call up- or downwards. * Apply some headroom for frequency comparison (see problem with ORION rig * (Dec2011). * Returns a copy of the spot data or NULL if no such entry. * * \param upwards - lookup upwards if not 0 * \param freq - frequency to start from * * \return spot * structure with a copy of the found spot * or NULL if not found (You have to free the structure * after use). */ spot *bandmap_next(unsigned int upwards, freq_t freq) { spot *result = NULL; if (spots->len > 0) { int i; pthread_mutex_lock(&bm_mutex); if (upwards) { for (i = 0; i < spots->len; i++) { spot *data; data = g_ptr_array_index(spots, i); if ((data->freq > freq + TOLERANCE / 2) && (!bm_config.skipdupes || data->dupe == 0)) { /* copy data into a new Spot structure */ result = copy_spot(data); break; } } } else { for (i = spots->len - 1; i >= 0; i--) { spot *data; data = g_ptr_array_index(spots, i); if ((data->freq < freq - TOLERANCE / 2) && (!bm_config.skipdupes || data->dupe == 0)) { /* copy data into a new Spot structure */ result = copy_spot(data); break; } } } pthread_mutex_unlock(&bm_mutex); } return result; } /* * copy string to buffer but truncate it to n characters * If truncated show it by replacing last two chars by '..' * The buffer has to be at least n+1 chars long. */ void str_truncate(char *buffer, char *string, int n) { if (strlen(string) > n) { g_strlcpy(buffer, string, n - 1); /* truncate to n-2 chars */ strcat(buffer, ".."); } else { g_strlcpy(buffer, string, n + 1); /* copy up to n chars */ } } /* * format bandmap call output for WAE * - prepare and return a temporary string from call and number of QTC's * (if any) */ char *qtc_format(char *call) { char tcall[15]; char qtcflag; struct t_qtc_store_obj *qtc_temp_ptr; qtc_temp_ptr = qtc_get(call); qtcflag = qtc_get_value(qtc_temp_ptr); if (qtc_temp_ptr->total <= 0 && qtcflag == '\0') { str_truncate(tcall, call, SPOT_CALL_WIDTH); } else { str_truncate(tcall, call, SPOT_CALL_WIDTH - 2); sprintf(tcall + strlen(tcall), " %c", qtcflag); } return g_strdup(tcall); } /** Search filtered bandmap for a spot near the given frequency * * Return the call found at that frequency or NULL if no spot found * * \param dest - place to put the call in * \param freq - the frequency where to look for a spot */ void get_spot_on_qrg(char *dest, freq_t freq) { *dest = '\0'; if (spots->len > 0) { int i; pthread_mutex_lock(&bm_mutex); for (i = 0; i < spots->len; i++) { spot *data; data = g_ptr_array_index(spots, i); if ((fabs(data->freq - freq) < TOLERANCE) && (!bm_config.skipdupes || data->dupe == 0)) { strcpy(dest, data->call); break; } } pthread_mutex_unlock(&bm_mutex); } } tlf-1.4.0/src/speedupndown.c0000644000175000017500000000536313562576621012714 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014 Thomas Beierlein * * 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 #include "clear_display.h" #include "cw_utils.h" #include "err_utils.h" #include "netkeyer.h" #include "sendbuf.h" #include "tlf.h" #include "tlf_curses.h" void setspeed(void) { extern int cwkeyer; int retval = 0; char buff[3]; snprintf(buff, 3, "%2u", GetCWSpeed()); if (cwkeyer == NET_KEYER) { retval = netkeyer(K_SPEED, buff); if (retval < 0) { TLF_LOG_WARN("keyer not active"); // trxmode = SSBMODE; clear_display(); } } if (cwkeyer == MFJ1278_KEYER) { char *msg; sendmessage("\\\015"); usleep(500000); msg = g_strdup_printf("MSP %s \015", buff); sendmessage(msg); g_free(msg); usleep(500000); sendmessage("CONV\015\n"); } } /* ------------------------------------------------------------ * Page-up increases CW speed with 2 wpm * *--------------------------------------------------------------*/ int speedup(void) { extern int trxmode; if (trxmode != CWMODE) return (0); if (speed < 20) { speed++; setspeed(); } return (speed); } /* ------------------------------------------------------------ * Page down, decrementing the cw speed with 2 wpm * *--------------------------------------------------------------*/ int speeddown(void) { extern int trxmode; if (trxmode != CWMODE) /* bail out, this is an SSB contest */ return (0); if (speed >= 1) { speed--; setspeed(); } return (speed); } /* write weight to netkeyer */ int setweight(int weight) { extern int cwkeyer; int retval; char buff[4]; if (cwkeyer == NET_KEYER && weight > -51 && weight < 51) { sprintf(buff, "%d", weight); retval = netkeyer(K_WEIGHT, buff); if (retval < 0) { TLF_LOG_INFO("keyer not active ?"); clear_display(); } } return (0); } tlf-1.4.0/src/freq_display.h0000644000175000017500000000167013562576621012665 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef FREQ_DISPLAY_H #define FREQ_DISPLAY_H void freq_display(void); #endif /* FREQ_DISPLAY_H */ tlf-1.4.0/src/getwwv.c0000644000175000017500000000551013562576621011516 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 #include "dxcc.h" #include "printcall.h" #include "tlf.h" #include "tlf_curses.h" extern int ymax; #define LINELENGTH 80 int getwwv(void) { extern char lastwwv[]; extern char backgrnd_str[]; extern double r; extern int mycountrynr; extern int timeoffset; char printbuffer[81] = ""; char *i; char r_value[6]; char sf_value[6]; char timebuff[80]; double sfi, d; time_t now; struct tm *ptr1; if (strlen(lastwwv) >= 2) { lastwwv[78] = '\0'; /* cut the bell chars */ if ((strncmp(lastwwv, "WCY", 3) == 0) || (strncmp(lastwwv, "WWV", 3) == 0)) { strcat(printbuffer, "Condx: "); i = strstr(lastwwv, "<"); if (i != NULL) { strncat(printbuffer, i + 1, 2); strcat(printbuffer, " GMT "); } i = strstr(lastwwv, "R="); if (i != NULL) { strncat(printbuffer, i, 5); r_value[0] = '\0'; strncat(r_value, i + 2, 3); r = atof(r_value); } strcat(printbuffer, " "); i = strstr(lastwwv, "SFI="); if (i != NULL) { strncat(printbuffer, i, 7); sf_value[0] = '\0'; strncat(sf_value, i + 4, 3); sfi = atof(sf_value); r = ((sfi - 70.0) * (200.0 / 180.0)); } i = strstr(lastwwv, "eru"); if (i != NULL) strcat(printbuffer, " eruptive "); i = strstr(lastwwv, "act"); if (i != NULL) strcat(printbuffer, " act "); i = strstr(lastwwv, "Au=au"); if (i != NULL) strcat(printbuffer, " AURORA!"); strcpy(lastwwv, printbuffer); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(LINES - 1, 0, backgrnd_str); mvprintw(LINES - 1, 0, printbuffer); /* print WWV info */ printw(" "); d = dxcc_by_index(mycountrynr) -> timezone; now = (time(0) + (long)((timeoffset - d) * 3600)); ptr1 = gmtime(&now); strftime(timebuff, 80, "%H:%M", ptr1); mvprintw(LINES - 1, LINELENGTH - 17, " local time %s", timebuff); refreshp(); } } return 0; } tlf-1.4.0/src/prevqso.h0000644000175000017500000000177613562576621011711 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014, 2015 Thomas Beierlein * * 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 */ #ifndef PREVQSO_H #define PREVQSO_H void prev_qso(void); #endif /* end of include guard: PREVQSO_H */ tlf-1.4.0/src/setcontest.h0000644000175000017500000000165713562576621012403 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SETCONTEST_H #define SETCONTEST_H int setcontest(void); #endif /* SETCONTEST_H */ tlf-1.4.0/src/setparameters.h0000644000175000017500000000167313562576621013065 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SETPARAMETERS_H #define SETPARAMETERS_H int setparameters(void); #endif /* SETPARAMETERS_H */ tlf-1.4.0/src/show_help.c0000644000175000017500000000375713562576621012176 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Thomas Beierlein * * 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 */ /* * ------------------------------------------------------------ * * Show help file * * *-------------------------------------------------------------- */ #include #include #include #include "clear_display.h" #include "ignore_unused.h" #include "tlf_curses.h" extern SCREEN *mainscreen; /** \brief Show help file * * Read 'help.txt' and display it via 'less'. * Local 'help.txt' in actual directory overrides default file * in PKG_DATA_DIR */ int show_help(void) { char filename[] = "help.txt"; char *helpfile; char *cmdstr; if (g_access(filename, R_OK) == 0) { helpfile = g_strdup(filename); } else { helpfile = g_strconcat(PACKAGE_DATA_DIR, G_DIR_SEPARATOR_S, filename, NULL); if (g_access(helpfile, R_OK) != 0) { g_free(helpfile); return -1; } } cmdstr = g_strdup_printf("less %s", helpfile); endwin(); IGNORE(system("clear"));; IGNORE(system(cmdstr));; IGNORE(system("clear"));; g_free(helpfile); g_free(cmdstr); set_term(mainscreen); clear_display(); return 0; } tlf-1.4.0/src/startmsg.c0000644000175000017500000000401413562576621012035 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 "ignore_unused.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" extern int verbose; static int linectr = 0; void clearmsg() { clear(); linectr = 0; refreshp(); } void clearmsg_wait(void) { if (verbose) { move(LINES-3, 0); clrtoeol(); mvprintw(LINES-2, 0, "Press any key to continue!"); move(LINES-1, 0); clrtoeol(); refreshp(); IGNORE(key_get()); } else { sleep(1); } clearmsg(); } static int has_room_for_message() { if (linectr < LINES-3) return 1; else return 0; } void showmsg(char *message) { if (!has_room_for_message()) clearmsg_wait(); mvprintw(linectr, 0, message); refreshp(); linectr++; } //--------------------------------------------------------------- void shownr(char *message, int nr) { if (!has_room_for_message()) clearmsg_wait(); mvprintw(linectr, 0, "%s %d", message, nr); refreshp(); linectr++; } //---------------------------------------------------------------- void showstring(char *message1, char *message2) { if (!has_room_for_message()) clearmsg_wait(); mvprintw(linectr, 0, "%s %s", message1, message2); refreshp(); linectr++; } tlf-1.4.0/src/locator2longlat.c0000644000175000017500000000710113562576621013277 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedus * * * 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 */ /* * original code in HAMLIB * src/locator.c * * author Stephane Fillod and the Hamlib Group * date 2000-2010 * * Hamlib Interface - locator, bearing, and conversion calls * * * Hamlib Interface - locator and bearing conversion calls * Copyright (c) 2001-2010 by Stephane Fillod * Copyright (c) 2003 by Nate Bargmann * Copyright (c) 2003 by Dave Hines * * * Code to determine bearing and range was taken from the Great Circle, * by S. R. Sampson, N5OWK. * Ref: "Air Navigation", Air Force Manual 51-40, 1 February 1987 * Ref: "ARRL Satellite Experimenters Handbook", August 1990 * * Code to calculate distance and azimuth between two Maidenhead locators, * taken from wwl, by IK0ZSN Mirko Caserta. * * New bearing code added by N0NB was found at: * http://williams.best.vwh.net/avform.htm#Crs * */ #include #include #define MAX_LOCATOR_PAIRS 6 #define MIN_LOCATOR_PAIRS 1 static const int loc_char_range[] = { 18, 10, 24, 10, 24, 10 }; /** * converts QTH locator to lattitude and longitude * * Be aware that it returns east longitudes as negative numbers, wheras dxcc cty table * uses negative numbers */ int locator2longlat(double *longitude, double *latitude, const char *locator) { int x_or_y, paircount; int locvalue, pair; int divisions; double xy[2], ordinate; /* bail if NULL pointers passed */ if (!longitude || !latitude) return -1; paircount = strlen(locator) / 2; /* verify paircount is within limits */ if (paircount > MAX_LOCATOR_PAIRS) paircount = MAX_LOCATOR_PAIRS; else if (paircount < MIN_LOCATOR_PAIRS) return -1; /* For x(=longitude) and y(=latitude) */ for (x_or_y = 0; x_or_y < 2; ++x_or_y) { ordinate = -90.0; divisions = 1; for (pair = 0; pair < paircount; ++pair) { locvalue = locator[pair * 2 + x_or_y]; /* Value of digit or letter */ locvalue -= (loc_char_range[pair] == 10) ? '0' : (isupper(locvalue)) ? 'A' : 'a'; /* Check range for non-letter/digit or out of range */ if ((locvalue < 0) || (locvalue >= loc_char_range[pair])) return -1; divisions *= loc_char_range[pair]; ordinate += locvalue * 180.0 / divisions; } /* Center ordinate in the Maidenhead "square" or "subsquare" */ ordinate += 90.0 / divisions; xy[x_or_y] = ordinate; } *longitude = xy[0] * 2.0; *latitude = xy[1]; return 0; } /* returns true if 'qra' is valid QRA locator */ int check_qra(char *qra) { if (strlen(qra) < 4) { return 0; } if (qra[0] < 'A' || qra[0] > 'R' || qra[1] < 'A' || qra[1] > 'R' || qra[2] < '0' || qra[2] > '9' || qra[3] < '0' || qra[3] > '9') { return 0; } return 1; } tlf-1.4.0/src/netkeyer.c0000644000175000017500000001054013562576621012020 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 #include #include #include #include #include "err_utils.h" #include "netkeyer.h" #include "tlf.h" #include "tlf_curses.h" int netkeyer_port = 6789; char netkeyer_hostaddress[16] = "127.0.0.1"; static int socket_descriptor; static struct sockaddr_in address; int netkeyer_init(void) { /* Translate a host name to IP address */ struct hostent *hostbyname; hostbyname = gethostbyname(netkeyer_hostaddress); if (hostbyname == NULL) { perror("gethostbyname failed"); return -1; } /* Initialize socket address structure for Internet Protocols The address comes from the datastructure returned by gethostbyname() */ bzero(&address, sizeof(address)); /* empty data structure */ address.sin_family = AF_INET; memcpy(&address.sin_addr.s_addr, hostbyname->h_addr, sizeof(address.sin_addr.s_addr)); address.sin_port = htons(netkeyer_port); /* Create a UDP socket */ socket_descriptor = socket(AF_INET, SOCK_DGRAM, 0); if (socket_descriptor == -1) { perror("socket call failed"); return -1; } return 0; } /*-------------------------end netkeyer_init---------------*/ int netkeyer_close(void) { int close_rc; close_rc = close(socket_descriptor); if (close_rc == -1) { perror("close call failed"); return -1; } return 0; } /*-------------------------end netkeyer_close---------------*/ #define BUFSIZE 81 #define CMD(x) { do { buf[0] = '\e'; \ buf[1] = x; \ buf[2] = 0; } while(0); } int netkeyer(int cw_op, char *cwmessage) { char buf[BUFSIZE] = ""; ssize_t sendto_rc = 0; int add_message = 0; switch (cw_op) { case K_RESET: CMD('0'); // reset: 0 break; case K_MESSAGE: buf[0] = 0; add_message = 1; // play cw message break; case K_SPEED: CMD('2'); // speed: 2NN add_message = 1; break; case K_TONE: CMD('3'); // tone: 3NN add_message = 1; break; case K_ABORT: CMD('4'); // message abort: 4 break; case K_STOP: CMD('5'); // keyer daemon stop: 5 break; case K_WORDMODE: CMD('6'); // non-interruptible: 6 break; case K_WEIGHT: CMD('7'); // set weight: 7NN add_message = 1; break; case K_DEVICE: CMD('8'); // set device: 8NN add_message = 1; break; case K_PTT: CMD('a'); // PTT on/off: aNN add_message = 1; break; case K_SET14: CMD('b'); // set pin 14 of lp port: bNN add_message = 1; break; case K_TUNE: CMD('c'); // tune: cNN add_message = 1; break; case K_TOD: CMD('d'); // set Turn On Delay (TXDELAY): dNN add_message = 1; break; case K_SWITCH: CMD('e'); // set band switch output: eNN add_message = 1; break; case K_SIDETONE: CMD('f'); // set sidetone output to sound card: fs buf[2] = 's'; break; case K_STVOLUME: CMD('g'); // set sound card output volume: gNN add_message = 1; break; default: return 0; } if (add_message) { g_strlcat(buf, cwmessage, BUFSIZE); } sendto_rc = sendto(socket_descriptor, buf, strlen(buf) + 1, 0, (struct sockaddr *) &address, sizeof(address)); if (sendto_rc == -1) { TLF_LOG_WARN("Keyer send failed...!"); return -1; } return 0; } tlf-1.4.0/src/last10.c0000644000175000017500000000412113562576621011274 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * last 10 - return time (in mins) for last 10 QSOs on * actual band *--------------------------------------------------------------*/ #include #include #include "get_time.h" #include "globalvars.h" // Includes glib.h and tlf.h int last10(void) { char input[LOGLINELEN + 1]; int minsbefore; int minsnow; int span; int counter; int qsocount = 0; int thisband; if (nr_qsos < 10) return (-1); thisband = atoi(band[bandinx]); /* look backwards in actual band for QSOs */ for (counter = nr_qsos; counter >= 0; counter--) { if (thisband == (atoi(qsos[counter]))) { qsocount++; if (qsocount >= 10) /* stop after 10 QSOs found */ break; } } /* counter points to the first QSO */ if (counter < 0) return (-1); /* not 10 QSOs found */ strncpy(input, qsos[counter], LOGLINELEN + 1); input[17 + 5] = '\0'; minsbefore = atoi(input + 17 + 3); input[17 + 2] = '\0'; minsbefore += (atoi(input + 17) * 60); get_time(); minsnow = time_ptr->tm_hour * 60 + time_ptr->tm_min; if ((minsnow - minsbefore) <= 0) minsnow += 1440; span = minsnow - minsbefore; return (span); } tlf-1.4.0/src/cw_utils.c0000644000175000017500000001243013562576621012023 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Thomas Beierlein * * 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 #define CW_SPEEDS "06121416182022242628303234363840424446485060" /*< speed string with 2 chars each (in WPM) */ char speedstr[50] = CW_SPEEDS; int speed = 10; /* converts cw speed in wpm to an numbered index into speedstr table */ int speed_conversion(int cwspeed) { int x; switch (cwspeed) { case 0 ... 6: { x = 0; break; } case 7 ... 12: { x = 1; break; } case 13 ... 14: { x = 2; break; } case 15 ... 16: { x = 3; break; } case 17 ... 18: { x = 4; break; } case 19 ... 20: { x = 5; break; } case 21 ... 22: { x = 6; break; } case 23 ... 24: { x = 7; break; } case 25 ... 26: { x = 8; break; } case 27 ... 28: { x = 9; break; } case 29 ... 30: { x = 10; break; } case 31 ... 32: { x = 11; break; } case 33 ... 34: { x = 12; break; } case 35 ... 36: { x = 13; break; } case 37 ... 38: { x = 14; break; } case 39 ... 40: { x = 15; break; } case 41 ... 42: { x = 16; break; } case 43 ... 44: { x = 17; break; } case 45 ... 46: { x = 18; break; } case 47 ... 48: { x = 19; break; } default: { x = 20; break; } } return (x); } /** Set CW speed * * Set CW speed to the nearest supported value. Converts it into an index into * the speed table and stores that. * \param wpm The CW speed in WPM */ void SetCWSpeed(unsigned int wpm) { speed = speed_conversion(wpm); } /* Get CW speed * * Return the actual CW speed in WPM as integer * \return The CW speed in WPM */ unsigned int GetCWSpeed() { char buff[3]; g_strlcpy(buff, speedstr + (2 * speed), 3); return (atoi(buff)); } /** get length of CW characters * * converts a given CW character into the number of dot elements * \param ch the character to convert * \return number of dots for the character including the following character * space */ unsigned int getCWdots(char ch) { unsigned int length; switch (ch) { case 'A': length = 9; break; case 'B': length = 13; break; case 'C': length = 15; break; case 'D': length = 11; break; case 'E': length = 5; break; case 'F': length = 13; break; case 'G': length = 13; break; case 'H': length = 11; break; case 'I': length = 7; break; case 'J': length = 17; break; case 'K': length = 13; break; case 'L': length = 13; break; case 'M': length = 11; break; case 'N': length = 9; break; case 'O': length = 15; break; case 'P': length = 15; break; case 'Q': length = 17; break; case 'R': length = 11; break; case 'S': length = 9; break; case 'T': length = 7; break; case 'U': length = 11; break; case 'V': length = 13; break; case 'W': length = 13; break; case 'X': length = 15; break; case 'Y': length = 17; break; case 'Z': length = 15; break; case '0': length = 23; break; case '1': length = 21; break; case '2': length = 19; break; case '3': length = 17; break; case '4': length = 15; break; case '5': length = 13; break; case '6': length = 15; break; case '7': length = 17; break; case '8': length = 19; break; case '9': length = 21; break; case '/': length = 17; break; case '?': length = 19; break; case ' ': length = 3; break; default: length = 0; } return (length); } /** calculate dot length of a cw message * * Calculate the length of a given CW message in dot elements. * Expands '%' into your own call. * \param message the CW message * \return number of dot elements in the message */ unsigned int cw_message_length(char *message) { extern char call[]; int i; int message_length = 0; char cwmessage[80]; int testchar, j; strncpy(cwmessage, message, 79); cwmessage[79] = '\0'; for (i = 0; i < strlen(cwmessage); i++) { testchar = cwmessage[i]; if (testchar == '%') { for (j = 0; j < strlen(call); j++) { testchar = call[j]; message_length += getCWdots(testchar); } } else message_length += getCWdots(testchar); } return (message_length); } tlf-1.4.0/src/addspot.c0000644000175000017500000000462613562576621011640 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2010-2016 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * * Add spot to bandmap * * *--------------------------------------------------------------*/ #include #include #include #include #include "get_time.h" #include "lancode.h" #include "splitscreen.h" #include "tlf.h" #include "tlf_curses.h" /** add call to list of spots * * format a fake DX spot from call and frequency add it to the spot list * and send it to other stations in the LAN */ void add_to_spots(char *call, freq_t freq) { extern int lanspotflg; extern struct tm *time_ptr; extern char thisnode; char spotline[160]; char spottime[6]; sprintf(spotline, "DX de TLF-%c: %9.3f %s", thisnode, freq / 1000.0, call); strcat(spotline, " "); get_time(); strftime(spottime, sizeof(spottime), "%H%MZ", time_ptr); strcpy(spotline + 70, spottime); strcat(spotline, "\n\n"); send_lan_message(TLFSPOT, spotline); lanspotflg = 1; addtext(spotline); lanspotflg = 0; } int addspot(void) { extern freq_t freq; extern char hiscall[]; extern int trx_control; char frequency[8]; if (strlen(hiscall) < 3) return (0); if (trx_control == 0) { attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(13, 20, "freq.: "); echo(); getnstr(frequency, 7); noecho(); freq = atof(frequency) * 1000.0; } add_to_spots(hiscall, freq); hiscall[0] = '\0'; return (0); } tlf-1.4.0/src/score.h0000644000175000017500000000206013562576621011310 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013-2014 Thomas Beierlein * * 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 */ #ifndef _SCORE_H #define _SCORE_H int score(void); int score2(char *line); int country_found(char prefix[]); #endif /* end of include guard: _SCORE_H */ tlf-1.4.0/src/qrb.c0000644000175000017500000001025613562576621010762 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedus * 2014 Thomas Beierlein * * 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 */ /* * qrb() function comes from HAMLIB src/locator.c * * author Stephane Fillod and the Hamlib Group * date 2000-2010 * * Hamlib Interface - locator, bearing, and conversion calls * * * Hamlib Interface - locator and bearing conversion calls * Copyright (c) 2001-2010 by Stephane Fillod * Copyright (c) 2003 by Nate Bargmann * Copyright (c) 2003 by Dave Hines * * * Code to determine bearing and range was taken from the Great Circle, * by S. R. Sampson, N5OWK. * Ref: "Air Navigation", Air Force Manual 51-40, 1 February 1987 * Ref: "ARRL Satellite Experimenters Handbook", August 1990 * * Code to calculate distance and azimuth between two Maidenhead locators, * taken from wwl, by IK0ZSN Mirko Caserta. * * New bearing code added by N0NB was found at: * http://williams.best.vwh.net/avform.htm#Crs * */ #include #include "qrb.h" #define ARC_IN_KM 111.2 #define RADIAN (180.0 / M_PI) /* Compute the Bearing and Range */ int get_qrb(double *range, double *bearing) { extern double QTH_Lat; extern double QTH_Long; extern double DEST_Lat; extern double DEST_Long; extern char hiscall[]; if (*hiscall == '\0') return -1; return qrb(-1.0 * QTH_Long, QTH_Lat, -1.0 * DEST_Long, DEST_Lat, range, bearing); } /* positive numbers are N and E * * be aware that dxcc counts east longitudes as negative numbers */ int qrb(double lon1, double lat1, double lon2, double lat2, double *distance, double *azimuth) { double delta_long, tmp, arc, az; /* bail if NULL pointers passed */ if (!distance || !azimuth) return -1; if ((lat1 > 90.0 || lat1 < -90.0) || (lat2 > 90.0 || lat2 < -90.0)) return -1; if ((lon1 > 180.0 || lon1 < -180.0) || (lon2 > 180.0 || lon2 < -180.0)) return -1; /* Prevent ACOS() Domain Error */ if (lat1 == 90.0) lat1 = 89.999999999; else if (lat1 == -90.0) lat1 = -89.999999999; if (lat2 == 90.0) lat2 = 89.999999999; else if (lat2 == -90.0) lat2 = -89.999999999; /* Convert variables to Radians */ lat1 /= RADIAN; lon1 /= RADIAN; lat2 /= RADIAN; lon2 /= RADIAN; delta_long = lon2 - lon1; tmp = sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(delta_long); if (tmp > .999999999999999) { /* Station points coincide, use an Omni! */ *distance = 0.0; *azimuth = 0.0; return 0; } if (tmp < -.999999) { /* * points are antipodal, it's straight down. * Station is equal distance in all Azimuths. * So take 180 Degrees of arc times 60 nm, * and you get 10800 nm, or whatever units... */ *distance = 180.0 * ARC_IN_KM; *azimuth = 0.0; return 0; } arc = acos(tmp); /* * One degree of arc is 60 Nautical miles * at the surface of the earth, 111.2 km, or 69.1 sm * This method is easier than the one in the handbook */ *distance = ARC_IN_KM * RADIAN * arc; /* Short Path */ /* Change to azimuth computation by Dave Freese, W1HKJ */ az = RADIAN * atan2(sin(lon2 - lon1) * cos(lat2), (cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon2 - lon1))); az = fmod(360.0 + az, 360.0); if (az < 0.0) az += 360.0; else if (az >= 360.0) az -= 360.0; *azimuth = floor(az + 0.5); return 0; } tlf-1.4.0/src/time_update.h0000644000175000017500000000166413562576621012506 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef TIME_UPDATE_H #define TIME_UPDATE_H void time_update(void); #endif /* TIME_UPDATE_H */ tlf-1.4.0/src/sendspcall.c0000644000175000017500000000530313562576621012323 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2005 Rein Couperus * 2012,2014 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * Sendspcall sends (de) call if callarea empty * *--------------------------------------------------------------*/ #include #include #include "sendbuf.h" #include "tlf.h" int play_file(char *audiofile); /** prepares your own call in S&P mode * * \return string with prepared call, has to be freed with g_free() * after use */ char *PrepareSPcall() { extern int demode; extern char call[]; extern int trxmode; extern int digikeyer; extern char hiscall[]; char *buf = g_malloc(80); char *c; buf[0] = '\0'; if (trxmode == CWMODE) { if (demode == SEND_DE) strcat(buf, "DE "); strcat(buf, call); } else if (trxmode == DIGIMODE) { if (digikeyer == MFJ1278_KEYER) { strcat(buf, "{ "); /* => ctrl-t */ strcat(buf, "|"); /* => CR */ if (demode == SEND_DE) { strcat(buf, hiscall); strcat(buf, " DE "); } strcat(buf, call); if ((c = strchr(buf, '\n')) == NULL) strcat(buf, " "); else *c = ' '; strcat(buf, "}"); /* => ctrl-r */ } else { strcat(buf, "|"); /* => CR */ if (demode == SEND_DE) { strcat(buf, hiscall); strcat(buf, " DE "); } strcat(buf, call); if ((c = strchr(buf, '\n')) == NULL) strcat(buf, " "); else *c = ' '; } } return buf; } void sendspcall(void) { extern int trxmode; extern char message[][80]; extern char ph_message[14][80]; if (trxmode == CWMODE || trxmode == DIGIMODE) { /* if set use SPCALL message */ if (*message[SP_CALL_MSG] != '\0') { sendmessage(message[SP_CALL_MSG]); } else { /* otherwise prepare one */ char *SPcall = PrepareSPcall(); sendmessage(SPcall); g_free(SPcall); } } else play_file(ph_message[5]); } tlf-1.4.0/src/makelogline.h0000644000175000017500000000171613562576621012473 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef _MAKELOGLINE_H #define _MAKELOGLINE_H void makelogline(void); #endif /* end of include guard: _MAKELOGLINE_H */ tlf-1.4.0/src/audio.h0000644000175000017500000000233313562576621011301 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * audio.h include file for soundcard input routine * *--------------------------------------------------------------*/ #ifndef AUDIO_H #define AUDIO_H #define FS 11025 #define S_BAR 0 #define SPOT_BAR 1 #define PAN_BAR 2 void init_audio(); int close_audio(); int testaudio(); void record(void); #endif /* AUDIO_H */ tlf-1.4.0/src/checkparameters.h0000644000175000017500000000170313562576621013341 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef CHECKPARAMETERS_H #define CHECKPARAMETERS_H int checkparameters(void); #endif /* CHECKPARAMETERS_H */ tlf-1.4.0/src/getwwv.h0000644000175000017500000000163713562576621011531 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef GETWWV_H #define GETWWV_H int getwwv(void); #endif /* GETWWV_H */ tlf-1.4.0/src/cleanup.h0000644000175000017500000000167313562576621011635 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef CLEANUP_H #define CLEANUP_H void cleanup_qso(void); int cleanup(void); #endif /* CLEANUP_H */ tlf-1.4.0/src/editlog.c0000644000175000017500000000413313562576621011622 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Edit Log * *--------------------------------------------------------------*/ #include #include #include #include #include #include "background_process.h" #include "checklogfile.h" #include "clear_display.h" #include "ignore_unused.h" #include "scroll_log.h" #include "tlf.h" #include "tlf_curses.h" int logedit(void) { extern char logfile[]; extern char backgrnd_str[]; extern int editor; char comstr[40] = ""; int j; if (editor == EDITOR_JOE) strcat(comstr, "joe "); /* my favorite editor */ else if (editor == EDITOR_VI) strcat(comstr, "vi "); else if (editor == EDITOR_MC) strcat(comstr, "mcedit "); else strcat(comstr, "e3 "); stop_background_process(); strcat(comstr, logfile); IGNORE(system(comstr));; start_background_process(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); erase(); refreshp(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } stop_background_process(); checklogfile(); start_background_process(); scroll_log(); refreshp(); return (0); } tlf-1.4.0/src/note.h0000644000175000017500000000163713562576621011153 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef NOTE_H #define NOTE_H int include_note(void); #endif /* NOTE_H */ tlf-1.4.0/src/nicebox.c0000644000175000017500000000345313562576621011626 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Nicebox draws a box with a header * *--------------------------------------------------------------*/ #include "nicebox.h" // Includes curses.h #include "tlf.h" #include "ui_utils.h" void wnicebox(WINDOW *win, int y, int x, int height, int width, char *boxname) { height += 1; width += 1; wattrset(win, modify_attr(COLOR_PAIR(C_BORDER))); mvwaddch(win, y, x, ACS_ULCORNER); whline(win, ACS_HLINE, width); mvwaddch(win, y, x + width, ACS_URCORNER); mvwaddch(win, y + height, x, ACS_LLCORNER); whline(win, ACS_HLINE, width); mvwaddch(win, y + height, x + width, ACS_LRCORNER); mvwvline(win, y + 1, x + width, ACS_VLINE, height - 1); mvwvline(win, y + 1, x, ACS_VLINE, height - 1); mvwprintw(win, y, x + 2, boxname); return; } void nicebox(int y, int x, int height, int width, char *boxname) { wnicebox(stdscr, y, x, height, width, boxname); } tlf-1.4.0/src/editlog.h0000644000175000017500000000164313562576621011632 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef EDITLOG_H #define EDITLOG_H int logedit(void); #endif /* EDITLOG_H */ tlf-1.4.0/src/bands.c0000644000175000017500000000450213562576621011262 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2018 Thomas Beierlein * * 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 */ /* Definitions and functions related to manipulation of frequencies and * ham radio bands */ #include "bands.h" const unsigned int bandcorner[NBANDS][2] = { { 1800000, 2000000 }, // band bottom, band top { 3500000, 4000000 }, { 7000000, 7300000 }, { 10100000, 10150000 }, { 14000000, 14350000 }, { 18068000, 18168000 }, { 21000000, 21450000 }, { 24890000, 24990000 }, { 28000000, 29700000 }, { 0, 0 } }; const unsigned int cwcorner[NBANDS] = { 1838000, 3580000, 7040000, 10140000, 14070000, 18095000, 21070000, 24915000, 28070000, 0 }; const unsigned int ssbcorner[NBANDS] = { 1840000, 3600000, 7040000, 10150000, 14100000, 18120000, 21150000, 24930000, 28300000, 0 }; /** Converts bandindex to bandmask */ int inxes[NBANDS] = \ { BAND160, BAND80, BAND40, BAND30, BAND20, BAND17, BAND15, BAND12, BAND10, BANDOOB }; extern int bandinx; void next_band(int direction) { bandinx += direction; if (bandinx < 0) { bandinx = BANDINDEX_OOB - 1; } if (bandinx >= BANDINDEX_OOB) { bandinx = 0; } } /** \brief convert frequency in Hz to bandindex * * \return bandindex or BANDINDEX_OOB if not in any band */ int freq2band(unsigned int freq) { int i; for (i = 0; i < NBANDS; i++) { if (freq >= bandcorner[i][0] && freq <= bandcorner[i][1]) return i; /* in actual band */ } return BANDINDEX_OOB; /* not in any band (out of band) */ } tlf-1.4.0/src/messagechange.h0000644000175000017500000000167513562576621013002 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef MESSAGECHANGE_H #define MESSAGECHANGE_H int message_change(int x); #endif /* MESSAGECHANGE_H */ tlf-1.4.0/src/checkqtclogfile.h0000644000175000017500000000201513562576621013324 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Ervin Hegedüs - HA2OS * 2015 Thomas Beierlein * * 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 */ #ifndef CHECKQTCLOGFILE_H #define CHECKQTCLOGFILE_H int checkqtclogfile(); #endif /* end of include guard: CHECKQTCLOGFILE_H */ tlf-1.4.0/src/qtcutil.c0000644000175000017500000001204213562576621011656 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2014 Ervin Hegedüs - HA2OS * * 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 */ /* ------------------------------------------------------------ * QTC utils functions * *--------------------------------------------------------------*/ #include #include #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "tlf_curses.h" GHashTable *qtc_store = NULL; /* stores number of QTC's per callsign */ struct t_qtc_store_obj *qtc_empty_obj = NULL; void qtc_init() { if (qtc_store != NULL) { g_hash_table_destroy(qtc_store); } qtc_store = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); if (qtc_empty_obj != NULL) { g_free(qtc_empty_obj); } qtc_empty_obj = g_malloc(sizeof(struct t_qtc_store_obj)); qtc_empty_obj->total = 0; qtc_empty_obj->received = 0; qtc_empty_obj->sent = 0; qtc_empty_obj->capable = 0; } void qtc_meta_write() { struct t_qtc_store_obj *qtc_obj; GList *qtc_key_list; char logline[20]; FILE *fp; qtc_key_list = g_hash_table_get_keys(qtc_store); if ((fp = fopen(QTC_META_LOG, "w")) == NULL) { mvprintw(5, 0, "Error opening QTC meta logfile.\n"); refreshp(); sleep(2); } else { while (qtc_key_list != NULL) { qtc_obj = g_hash_table_lookup(qtc_store, qtc_key_list->data); if (qtc_obj->capable == 2) { sprintf(logline, "%s;L\n", (char *)qtc_key_list->data); fputs(logline, fp); } if (qtc_obj->capable == -1) { sprintf(logline, "%s;N\n", (char *)qtc_key_list->data); fputs(logline, fp); } qtc_key_list = qtc_key_list->next; } fclose(fp); } g_list_free(qtc_key_list); } void qtc_inc(char callsign[15], int direction) { struct t_qtc_store_obj *qtc_obj; qtc_obj = g_hash_table_lookup(qtc_store, callsign); if (qtc_obj == NULL) { qtc_obj = g_malloc0(sizeof(struct t_qtc_store_obj)); qtc_obj->total = 0; qtc_obj->received = 0; qtc_obj->sent = 0; g_hash_table_insert(qtc_store, strdup(callsign), qtc_obj); } if (direction == RECV || direction == SEND) { qtc_obj->total++; if (direction == RECV) { qtc_obj->received++; } if (direction == SEND) { qtc_obj->sent++; } } if (direction == QTC_CAP) { qtc_obj->capable = 1; } if (direction == QTC_LATER) { qtc_obj->capable = 2; } if (direction == QTC_NO) { qtc_obj->capable = -1; } if (direction == QTC_LATER || direction == QTC_NO) { qtc_meta_write(); } } void qtc_dec(char callsign[15], int direction) { struct t_qtc_store_obj *qtc_obj; qtc_obj = g_hash_table_lookup(qtc_store, callsign); if (qtc_obj != NULL) { qtc_obj->total--; if (direction == RECV) { qtc_obj->received--; } if (direction == SEND) { qtc_obj->sent--; } } } struct t_qtc_store_obj *qtc_get(char callsign[15]) { struct t_qtc_store_obj *qtc_obj; if (qtc_store == NULL) { return qtc_empty_obj; } qtc_obj = g_hash_table_lookup(qtc_store, callsign); if (qtc_obj == NULL) { return qtc_empty_obj; } return qtc_obj; } void parse_qtcline(char *logline, char callsign[15], int direction) { int i = 0; if (direction == RECV) { strncpy(callsign, logline + 30, 15); } if (direction == SEND) { strncpy(callsign, logline + 35, 15); } while (callsign[i] != ' ') { i++; } callsign[i] = '\0'; } char qtc_get_value(struct t_qtc_store_obj *qtc_obj) { if (qtc_obj->total > 0) { if (qtc_obj->total == 10) { return 'Q'; } else { return qtc_obj->total + 48; } } else { if (qtc_obj->capable == 1) { return 'P'; } if (qtc_obj->capable == 2) { return 'L'; } if (qtc_obj->capable == -1) { return 'N'; } } return '\0'; } int parse_qtc_flagstr(char *lineptr, char *callsign, char *flag) { char *tmp; tmp = strtok(lineptr, ";"); if (tmp != NULL) { strcpy(callsign, tmp); tmp = strtok(NULL, ";"); if (tmp != NULL) { strncpy(flag, tmp, 1); return 0; } } return 1; } void parse_qtc_flagline(char *lineptr) { int rc; char callsign[15], msg[18]; char flag[2] = ""; rc = parse_qtc_flagstr(lineptr, callsign, flag); if (rc == 0 && (flag[0] == 'N')) { qtc_inc(callsign, QTC_NO); } if (rc == 0 && (flag[0] == 'L')) { qtc_inc(callsign, QTC_LATER); } sprintf(msg, "%s;%c", callsign, flag[0]); } tlf-1.4.0/src/qrb.h0000644000175000017500000000205113562576621010761 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef QRB_H #define QRB_H int qrb(double lon1, double lat1, double lon2, double lat2, double *distance, double *azimuth); int get_qrb(double *range, double *bearing); #endif /* end of include guard: QRB_H */ tlf-1.4.0/src/readctydata.c0000644000175000017500000000317213562576621012462 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011, 2013, 2016 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * * Read country data from disk file cty.dat *--------------------------------------------------------------*/ #include #include #include #include #include #include "dxcc.h" #include "tlf.h" #include "tlf_curses.h" int readctydata(void) { gchar *filename; if (load_ctydata("cty.dat") == -1) { filename = g_strconcat(PACKAGE_DATA_DIR, G_DIR_SEPARATOR_S, "cty.dat", NULL); if (load_ctydata(filename) == -1) { g_free(filename); mvprintw(4, 0, "Error opening cty.dat file.\n"); refreshp(); sleep(5); endwin(); exit(1); } g_free(filename); } return (0); } tlf-1.4.0/src/show_help.h0000644000175000017500000000200313562576621012162 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Thomas Beierlein * * 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 */ #ifndef SHOW_HELP_H #define SHOW_HELP_H int show_help(void); #endif /* end of include guard: SHOW_HELP_H */ tlf-1.4.0/src/showpxmap.h0000644000175000017500000000165413562576621012233 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SHOWPXMAP_H #define SHOWPXMAP_H int show_mults(void); #endif /* SHOWPXMAP_H */ tlf-1.4.0/src/prevqso.c0000644000175000017500000000262113562576621011672 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014, 2015 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * repeat previous_qsonr * *--------------------------------------------------------------*/ #include #include #include "sendbuf.h" void prev_qso(void) { extern int qsonum; extern char last_rst[]; int i; char *str; str = g_strdup_printf("%3s %03d ", last_rst, qsonum - 1); for (i = 0; i < strlen(str); i++) { str[i] = short_number(str[i]); } sendmessage(str); g_free(str); } tlf-1.4.0/src/writecabrillo.h0000644000175000017500000000172713562576621013050 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef WRITE_CABRILLO_H #define WRITE_CABRILLO_H int write_cabrillo(void); int write_adif(void); #endif /* WRITE_CABRILLO_H */ tlf-1.4.0/src/searchcallarray.h0000644000175000017500000000171413562576621013342 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SEARCHCALLARRAY_H #define SEARCHCALLARRAY_H int searchcallarray(char *hiscall); #endif /* SEARCHCALLARRAY_H */ tlf-1.4.0/src/calledit.h0000644000175000017500000000167613562576621011772 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef CALLEDIT_H #define CALLEDIT_H void calledit(void); int insert_char(int); #endif /* CALLEDIT_H */ tlf-1.4.0/src/focm.h0000644000175000017500000000212513562576621011123 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2014 Thomas Beierlein * * 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 */ #ifndef _FOC_H #define _FOC_H extern int got_g4foc; /* did we got Gx4FOC on the air? */ void foc_init(void); int foc_score(char *call); int foc_total_score(); void foc_show_scoring(int start_colmn); void foc_show_cty(); #endif /* end of include guard: _FOC_H */ tlf-1.4.0/src/readcalls.h0000644000175000017500000000202613562576621012131 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedüs - HA2OS * * 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 */ #ifndef READCALLS_H #define READCALLS_H int readcalls(void); int synclog(char *synclogfile); #endif /* READCALLS_H */ tlf-1.4.0/src/showpxmap.c0000644000175000017500000000624513562576621012227 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * show prefix map * *--------------------------------------------------------------*/ #include #include "dxcc.h" #include "focm.h" #include "changepars.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #include "bands.h" int show_mults(void) { extern int countries[MAX_DATALINES]; extern int bandinx; extern int cqww; extern int focm; int i, j, k, l, bandmask = 0; static char prefix[5]; static char zonecmp[3] = ""; int ch; int iMax = dxcc_count(); if (focm == 1) { foc_show_cty(); return 0; } if (cqww == 1) { mvprintw(12, 29, "E,A,F,N,S,O"); refreshp(); ch = key_get(); while (ch != '\n' && ch != KEY_ENTER) { if (ch == 27) break; zonecmp[0] = '\0'; if (ch == 'E' || ch == 'e') strcat(zonecmp, "EU"); else if (ch == 'A' || ch == 'a') strcat(zonecmp, "AS"); else if (ch == 'F' || ch == 'f') strcat(zonecmp, "AF"); else if (ch == 'N' || ch == 'n') strcat(zonecmp, "NA"); else if (ch == 'S' || ch == 's') strcat(zonecmp, "SA"); else if (ch == 'O' || ch == 'o') strcat(zonecmp, "OC"); else strcat(zonecmp, "EU"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (l = 1; l < 6; l++) mvprintw(l, 0, " "); i = 0; for (k = 1; k < 6; k++) { for (j = 0; j <= 19; j++) { while ((i < iMax) && ((strncmp(dxcc_by_index(i) -> continent, zonecmp, 2)) != 0)) { i++; } if (i == iMax) break; bandmask = inxes[bandinx]; if ((countries[i] & bandmask) == 0) { prefix[0] = '\0'; strncat(prefix, dxcc_by_index(i)->pfx, 3); strncat(prefix, " ", 4 - strlen(prefix)); attron(modify_attr(COLOR_PAIR(C_INPUT))); mvprintw(k, j * 4, prefix); refreshp(); i++; } else { mvprintw(k, j * 4, " "); refreshp(); i++; } } if (i == iMax) break; } ch = key_get(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); } // end while attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (l = 1; l < 6; l++) mvprintw(l, 0, " "); } else multiplierinfo(); return (0); } tlf-1.4.0/src/gettxinfo.c0000644000175000017500000001611713562576621012207 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * get trx info * *--------------------------------------------------------------*/ #include #include #include #include "bands.h" #include "err_utils.h" #include "fldigixmlrpc.h" #include "gettxinfo.h" #include "tlf.h" #include "tlf_curses.h" #include "callinput.h" #include "bands.h" #include #ifdef RIG_PASSBAND_NOCHANGE #define TLF_DEFAULT_PASSBAND RIG_PASSBAND_NOCHANGE #else #define TLF_DEFAULT_PASSBAND RIG_PASSBAND_NORMAL #endif extern RIG *my_rig; extern int cw_bandwidth; extern int trxmode; extern rmode_t rigmode; extern int digikeyer; extern rmode_t digi_mode; extern freq_t freq; extern int bandinx; extern freq_t bandfrequency[]; extern int trx_control; extern unsigned char rigptt; /* output frequency to rig or other rig-related request * * possible values: * 0 - poll rig * SETCWMODE * SETSSBMODE * RESETRIT * SETDIGIMODE * else - set rig frequency * */ static freq_t outfreq = 0; static pthread_mutex_t outfreq_mutex = PTHREAD_MUTEX_INITIALIZER; static double get_current_seconds(); static void handle_trx_bandswitch(const freq_t freq); void set_outfreq(freq_t hertz) { if (!trx_control) { hertz = 0; // no rig control, ignore request } pthread_mutex_lock(&outfreq_mutex); outfreq = hertz; pthread_mutex_unlock(&outfreq_mutex); } freq_t get_outfreq() { return outfreq; } static freq_t get_and_reset_outfreq() { pthread_mutex_lock(&outfreq_mutex); freq_t f = outfreq; outfreq = 0.0; pthread_mutex_unlock(&outfreq_mutex); return f; } static rmode_t get_ssb_mode() { // LSB below 14 MHz, USB above it return (freq < bandcorner[BANDINDEX_20][0] ? RIG_MODE_LSB : RIG_MODE_USB); } static pbwidth_t get_cw_bandwidth() { // use specified bandwidth (CWBANDWIDTH) if available return (cw_bandwidth > 0 ? cw_bandwidth : TLF_DEFAULT_PASSBAND); } void gettxinfo(void) { freq_t rigfreq; vfo_t vfo; pbwidth_t bwidth; int retval; int retvalmode; static double last_freq_time = 0.0; static int oldbandinx; static int fldigi_carrier; static int fldigi_shift_freq; if (!trx_control) return; /* CAT PTT wanted, available, inactive, and PTT On requested * bits 0, 1, and 3 set. */ if (rigptt == 0x0b) { retval = rig_set_ptt(my_rig, RIG_VFO_CURR, RIG_PTT_ON); /* Set PTT active bit. */ rigptt |= (1 << 2); /* 0x0f */ /* Clear PTT On requested bit. */ rigptt &= ~(1 << 3); /* 0x07 */ } /* CAT PTT wanted, available, active and PTT Off requested * bits 0, 1, 2, and 4 set. */ if (rigptt == 0x17) { retval = rig_set_ptt(my_rig, RIG_VFO_CURR, RIG_PTT_OFF); /* Clear PTT Off requested bit. */ rigptt &= ~(1 << 4); /* 0x07 */ /* Clear PTT active bit. */ rigptt &= ~(1 << 2); /* 0x03 */ } freq_t reqf = get_and_reset_outfreq(); // get actual request if (reqf == 0) { rigfreq = 0.0; double now = get_current_seconds(); if (now < last_freq_time + 0.2) { return; // last read-out was within 200 ms, skip this query } last_freq_time = now; retval = rig_get_vfo(my_rig, &vfo); /* initialize RIG_VFO_CURR */ if (retval == RIG_OK || retval == -RIG_ENIMPL || retval == -RIG_ENAVAIL) { retval = rig_get_freq(my_rig, RIG_VFO_CURR, &rigfreq); if (trxmode == DIGIMODE && (digikeyer == GMFSK || digikeyer == FLDIGI) && retval == RIG_OK) { retvalmode = rig_get_mode(my_rig, RIG_VFO_CURR, &rigmode, &bwidth); if (retvalmode != RIG_OK) { rigmode = RIG_MODE_NONE; } } } if (trxmode == DIGIMODE && (digikeyer == GMFSK || digikeyer == FLDIGI)) { fldigi_carrier = fldigi_get_carrier(); rigfreq += (freq_t)fldigi_carrier; if (rigmode == RIG_MODE_RTTY || rigmode == RIG_MODE_RTTYR) { fldigi_shift_freq = fldigi_get_shift_freq(); if (fldigi_shift_freq != 0) { retval = rig_set_freq(my_rig, RIG_VFO_CURR, ((freq_t)rigfreq + (freq_t)fldigi_shift_freq)); } } } if (retval != RIG_OK || rigfreq < 0.1) { freq = 0.0; return; } if (rigfreq >= bandcorner[0][0]) { freq = rigfreq; // Hz } bandinx = freq2band((unsigned int)freq); bandfrequency[bandinx] = freq; if (bandinx != oldbandinx) { // band change on trx oldbandinx = bandinx; handle_trx_bandswitch((int) freq); } } else if (reqf == SETCWMODE) { retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_CW, get_cw_bandwidth()); if (retval != RIG_OK) { TLF_LOG_WARN("Problem with rig link!"); } } else if (reqf == SETSSBMODE) { retval = rig_set_mode(my_rig, RIG_VFO_CURR, get_ssb_mode(), TLF_DEFAULT_PASSBAND); if (retval != RIG_OK) { TLF_LOG_WARN("Problem with rig link!"); } } else if (reqf == SETDIGIMODE) { rmode_t new_mode = digi_mode; if (new_mode == RIG_MODE_NONE) { if (digikeyer == FLDIGI) new_mode = RIG_MODE_USB; else new_mode = RIG_MODE_LSB; } retval = rig_set_mode(my_rig, RIG_VFO_CURR, new_mode, TLF_DEFAULT_PASSBAND); if (retval != RIG_OK) { TLF_LOG_WARN("Problem with rig link!"); } } else if (reqf == RESETRIT) { retval = rig_set_rit(my_rig, RIG_VFO_CURR, 0); if (retval != RIG_OK) { TLF_LOG_WARN("Problem with rig link!"); } } else { // set rig frequency to `reqf' retval = rig_set_freq(my_rig, RIG_VFO_CURR, (freq_t) reqf); if (retval != RIG_OK) { TLF_LOG_WARN("Problem with rig link: set frequency!"); } } } static double get_current_seconds() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec + tv.tv_usec / 1e6; } static void handle_trx_bandswitch(const freq_t freq) { send_bandswitch(freq); rmode_t mode = RIG_MODE_NONE; // default: no change pbwidth_t width = TLF_DEFAULT_PASSBAND; // passband width, in Hz if (trxmode == SSBMODE) { mode = get_ssb_mode(); } else if (trxmode == DIGIMODE) { if ((rigmode & (RIG_MODE_LSB | RIG_MODE_USB | RIG_MODE_RTTY | RIG_MODE_RTTYR)) != rigmode) { mode = RIG_MODE_LSB; } } else { mode = RIG_MODE_CW; width = get_cw_bandwidth(); } if (mode == RIG_MODE_NONE) { return; // no change was requested } int retval = rig_set_mode(my_rig, RIG_VFO_CURR, mode, width); if (retval != RIG_OK) { TLF_LOG_WARN("Problem with rig link!"); } } tlf-1.4.0/src/err_utils.h0000644000175000017500000000250413562576621012210 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2019 Thomas Beierlein , * * 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 */ #ifndef ERR_UTILS_H #define ERR_UTILS_H enum log_lvl { L_DEBUG, L_INFO, L_WARN, L_ERR }; void handle_logging(enum log_lvl lvl, ...); #define TLF_LOG_DEBUG(...) ( handle_logging(L_DEBUG, __VA_ARGS__) ) #define TLF_LOG_INFO(...) ( handle_logging(L_INFO, __VA_ARGS__) ) #define TLF_LOG_WARN(...) ( handle_logging(L_WARN, __VA_ARGS__) ) #define TLF_LOG_ERR(...) do { \ handle_logging(L_ERR, __VA_ARGS__); \ exit(EXIT_FAILURE); \ } while(0) #endif /* ERR_UTILS_H */ tlf-1.4.0/src/getpx.c0000644000175000017500000000543513562576621011330 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * get the prefix * *--------------------------------------------------------------*/ #include #include #include "globalvars.h" // Includes glib.h and tlf.h /** \brief Get prefix from call * * Analyses callsign and extract prefix information like follows: * - If callsign contains only letters, copy first two and append '0' * - Remember a portable prefix area if present .../3 * - Copy first character (letter or number) * - Copy all following letters * - Copy all following numbers * - If portable prefix remembered and last character is digit * replace last character * - If last character was a letter append '0' * * \param checkcall Call to analyse * (!has to be in normalized format: * - call * - portable prefix/call * - call/portable area) */ /** \todo fix problem: kl32a/4 wird zu kl34 ??? */ int letters_only(const char *call) { int i; for (i = 0; i < strlen(call); i++) { if (!isalpha(call[i])) return 0; } return 1; } void getpx(char *checkcall) { char pxbuffer[16] = ""; int i, len; char portable = '\0'; if (letters_only(checkcall)) { /* only characters in call */ strncpy(pxbuffer, checkcall, 2); strcat(pxbuffer, "0"); } else { len = strlen(checkcall); if (len >= 2) { if ((checkcall[len - 2] == '/') && isdigit(checkcall[len - 1])) /* portable /3 */ portable = checkcall[len - 1]; } for (i = 0; i < len; i++) { if (((checkcall[i] <= 'Z') && (checkcall[i] >= 'A')) || (i == 0)) pxbuffer[i] = checkcall[i]; else break; } for (; i < len; i++) { if (((checkcall[i] <= '9') && (checkcall[i] >= '0')) || (i == 0)) pxbuffer[i] = checkcall[i]; else break; } if (portable != '\0' && isdigit(pxbuffer[i - 1])) pxbuffer[i - 1] = portable; if (isalpha(pxbuffer[i - 1])) pxbuffer[i] = '0'; } strcpy(pxstr, pxbuffer); } tlf-1.4.0/src/sendspcall.h0000644000175000017500000000201213562576621012322 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014 Thomas Beierlein * * 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 */ #ifndef SENDSPCALL_H #define SENDSPCALL_H void sendspcall(void); #endif /* end of include guard: SENDSPCALL_H */ tlf-1.4.0/src/checklogfile.h0000644000175000017500000000173613562576621012625 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef CHECKLOGFILE_H #define CHECKLOGFILE_H int checklogfile_new(char *filename); void checklogfile(void); #endif /* CHECKLOGFILE_H */ tlf-1.4.0/src/checklogfile.c0000644000175000017500000001375113562576621012620 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * make sure logfile is present and can be opened for append * - create one if it does not exist * - check that length of logfile is a integer m^ultiple of * the loglinelen * *--------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include "err_utils.h" #include "ignore_unused.h" #include "startmsg.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" /** Repair log file * * Try to repair log file if some lines are too short. * Same is used to convert old logfile format v1 to new v2 * * \return 0 on success */ int repair_log(char *filename) { gchar *backupfile; gchar *cmd; char buffer[200]; gchar *fill; int rc; FILE *infp; FILE *outfp; /* make a backup of the original file */ backupfile = g_strconcat(filename, ".bak", NULL); showstring("Backing up original file as: ", backupfile); cmd = g_strconcat("cp ", filename, " ", backupfile, NULL); rc = system(cmd); g_free(cmd); if (rc != 0) { showmsg("Could not backup logfile. Giving up!"); return 1; } showmsg("Converting file to new format"); if ((infp = fopen(backupfile, "r")) == NULL) { showmsg("Could not convert logfile. Sorry!"); return 1; } if ((outfp = fopen(filename, "w")) == NULL) { fclose(infp); showmsg("Could not convert logfile. Sorry!"); return 1; } while (fgets(buffer, sizeof(buffer), infp)) { /* strip trailing whitespace (and newline) */ g_strchomp(buffer); /* append spaces */ fill = g_strnfill((LOGLINELEN - 1) - strlen(buffer), ' '); strcat(buffer, fill); g_free(fill); fputs(buffer, outfp); fputs("\n", outfp); } fclose(outfp); fclose(infp); g_free(backupfile); showmsg("Done"); sleep(2); return 0; } int checklogfile_new(char *filename) { int lineno; int tooshort; char buffer[160]; FILE *fp; /* check if logfile exist and can be opened for read */ if ((fp = fopen(filename, "r")) == NULL) { if (errno == EACCES) { showstring("Can not access log file: ", filename); return 1; } if (errno == ENOENT) { /* File not found, create new one */ showmsg("Log file not found, creating new one"); sleep(2); if ((fp = fopen(filename, "w")) == NULL) { /* cannot create logfile */ showmsg("Creating logfile not possible"); return 1; } /* New logfile created */ fclose(fp); return 0; } showstring("Can not check log file: ", filename); return 1; } /* check each line of the logfile of correct format */ lineno = 0; tooshort = 0; while (fgets(buffer, sizeof(buffer), fp)) { int band, linelen; int bandok = 0; lineno++; /* if no logline -> complain and back */ band = atoi(buffer); if ((band == 160) || (band == 80) || (band == 40) || (band == 30) || (band == 20) || (band == 17) || (band == 15) || (band == 12) || (band == 10)) bandok = 1; if (!((buffer[0] == ';') || bandok)) { /* msg no valid logline in line #, cannot handle it */ shownr("No valid log line in line ", lineno); return 1; } linelen = strlen(buffer); /* if to long -> complain and back */ if (linelen > LOGLINELEN) { /* msg length of line # to long, * cannot handle that log file format */ shownr("Log line to long in line ", lineno); showmsg("Can not handle that log format"); return 1; } /* if to short -> remember */ if (linelen < LOGLINELEN) { tooshort = 1; } } fclose(fp); if (tooshort) { char c; /* some lines in logfile are too short, maybe old logfile format */ showmsg("Some log lines are too short (maybe an old log format)!"); showmsg("Shall I try to repair? Y/(N) "); echo(); c = toupper(key_get()); noecho(); if (c != 'Y') { return 1; /* giving up */ } /* trying to repair */ return repair_log(filename); } return 0; } void checklogfile(void) { extern char logfile[]; int qsobytes; struct stat statbuf; char inputbuffer[800]; FILE *infile; FILE *outfile; FILE *fp; if ((fp = fopen(logfile, "a")) == NULL) { TLF_LOG_WARN("I can not find the logfile ..."); } else { fstat(fileno(fp), &statbuf); fclose(fp); qsobytes = statbuf.st_size; if ((qsobytes % LOGLINELEN) != 0) { if ((infile = fopen(logfile, "r")) == NULL) { TLF_LOG_WARN("Unable to open logfile..."); } else { if ((outfile = fopen("./cpyfile", "w")) == NULL) { fclose(infile); TLF_LOG_WARN("Unable to open cpyfile..."); } else { while (fgets(inputbuffer, 160, infile) != NULL) { if (strlen(inputbuffer) != LOGLINELEN) { /* append spaces */ for (int i = strlen(inputbuffer); i < LOGLINELEN; i++) { strcat(inputbuffer, " "); } inputbuffer[LOGLINELEN - 1] = '\n'; inputbuffer[LOGLINELEN] = '\0'; } fputs(inputbuffer, outfile); } fclose(infile); fclose(outfile); } rename("./cpyfile", logfile); remove("./cpyfile"); } } } } tlf-1.4.0/src/keyer.h0000644000175000017500000000166113562576621011322 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef KEYER_H #define KEYER_H int keyer(void); #endif /* end of include guard: KEYER_H */ tlf-1.4.0/src/checkparameters.c0000644000175000017500000000230713562576621013335 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Check for .paras file * *--------------------------------------------------------------*/ #include #include "writeparas.h" int checkparameters(void) { FILE *fp; if ((fp = fopen(".paras", "r")) == NULL) { writeparas_file(); } else { fclose(fp); } return (0); } tlf-1.4.0/src/main.c0000644000175000017500000006543113562576621011127 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2010-2017 Thomas Beierlein * 2013-2016 Ervin Hegedus - HA2OS * * 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 #include #include #include #include #include "addmult.h" #include "background_process.h" #include "bandmap.h" #include "checkparameters.h" #include "clear_display.h" #include "checklogfile.h" #include "checkqtclogfile.h" #include "cw_utils.h" #include "fldigixmlrpc.h" #include "getmessages.h" #include "getwwv.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "initial_exchange.h" #include "lancode.h" #include "logit.h" #include "netkeyer.h" #include "parse_logcfg.h" #include "qtcvars.h" // Includes globalvars.h #include "readctydata.h" #include "readcalls.h" #include "readqtccalls.h" #include "rtty.h" #include "rules.h" #include "scroll_log.h" #include "searchlog.h" // Includes glib.h #include "sendqrg.h" #include "set_tone.h" #include "splitscreen.h" #include "startmsg.h" #include "tlf_panel.h" #include "ui_utils.h" #include "readcabrillo.h" #include #include SCREEN *mainscreen; extern int lan_active; char pr_hostaddress[48] = "131.155.192.179"; char *config_file = NULL; int portnum = 0; int use_rxvt = 0; int use_xterm = 0; int tlfcolors[8][2] = { {COLOR_BLACK, COLOR_WHITE}, {COLOR_GREEN, COLOR_YELLOW}, {COLOR_WHITE, COLOR_RED}, {COLOR_CYAN, COLOR_WHITE}, {COLOR_WHITE, COLOR_BLACK}, {COLOR_WHITE, COLOR_MAGENTA}, {COLOR_BLUE, COLOR_YELLOW}, {COLOR_WHITE, COLOR_BLACK} }; int debugflag = 0; int editor = EDITOR_JOE; int tune_val = 0; int use_bandoutput = 0; int no_arrows = 0; int bandindexarray[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int cqwwm2 = 0; /* predefined contests */ int cqww = 0; int wpx = 0; int dxped = 0; int sprint = 0; int arrldx_usa = 0; int arrl_fd = 0; int arrlss = 0; int pacc_pa_flg = 0; int stewperry_flg = 0; int focm = 0; int sprint_mode = 0; int minitest = 0; /**< if set, length of minitest period in seconds */ int unique_call_multi = 0; /* do we count calls as multiplier */ int universal = 0; int addcallarea; int pfxmult = 0; int pfxmultab = 0; int exc_cont = 0; int manise80; int other_flg; int one_point = 0; int two_point = 0; int three_point = 0; int ssbpoints; int cwpoints; int lowband_point_mult = 0; int sc_sidetone; char sc_volume[4] = ""; /* LZ3NY mods */ int my_country_points = -1; int my_cont_points = -1; int dx_cont_points = -1; char countrylist[255][6]; int countrylist_only = 0; int countrylist_points = -1; char continent_multiplier_list[7][3]; // SA, NA, EU, AF, AS and OC int continentlist_points = -1; int continentlist_only = 0; int exclude_multilist_type = 0; int mult_side = 0; /* end LZ3NY mods */ int portable_x2 = 0; int recall_mult = 0; int exchange_serial = 0; int wysiwyg_once = 0; int wysiwyg_multi = 0; int country_mult = 0; float fixedmult = 0.0; int sectn_mult = 0; int dx_arrlsections = 0; int serial_section_mult = 0; int serial_or_section = 0; /* exchange is serial OR section, like HA-DX */ int serial_grid4_mult = 0; int qso_once = 0; int addcallarea_once = 0; int noleadingzeros; int ctcomp = 0; int isdupe = 0; // 0 if nodupe -- for auto qso b4 (LZ3NY) int nob4 = 0; // allow auto b4 int ignoredupe = 0; int noautocq = 0; int verbose = 0; int no_rst = 0; /* 1 - do not use RS/RST */ char myqra[7] = ""; int pacc_qsos[10][10]; int ve_cty; int w_cty; int zl_cty; int ja_cty; int py_cty; int ce_cty; int lu_cty; int vk_cty; int zs_cty; int ua9_cty; t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; int pfxnummultinr = 0; char multsfile[80] = ""; /* name of file with a list of allowed multipliers */ char exchange_list[40] = ""; int timeoffset = 0; int trxmode = CWMODE; rmode_t rigmode = RIG_MODE_NONE; int mixedmode = 0; char his_rst[4] = "599"; char my_rst[4] = "599"; char last_rst[4] = "599"; /* Report for last QSO */ /* TODO Maybe we can use the following */ int mults_per_band = 1; /* mults count per band */ int shortqsonr = LONGCW; /* 1 = short cw char in exchange */ int cluster = NOCLUSTER; /* 0 = OFF, 1 = FOLLOW, 2 = spots 3 = all */ int clusterlog = 0; /* clusterlog on/off */ int searchflg = 0; /* 1 = display search window */ int show_time = 0; int cqmode = CQ; /* 1 = CQ 0 = S&P */ int demode = 0; /* 1 = send DE before s&p call */ int contest = 0; /* 0 = General, 1 = contest */ int announcefilter = FILTER_ANN; /* filter cluster announcements */ int showscore_flag = 0; /* show score window */ int change_rst = 0; char exchange[40]; char whichcontest[40] = "qso"; int defer_store = 0; char call[20]; char logfile[120] = "general.log"; char *cabrillo = NULL; /**< Name of the cabrillo format definition */ char synclogfile[120]; char markerfile[120] = ""; int xplanet = 0; unsigned char rigptt = 0; /**< Bitmask for Hamlib CAT PTT * bit 0 set: CAT PTT wanted--RIGPTT in logcfg.dat (set in parse_logcfg) * bit 1 set: CAT PTT available--from rig caps (set in sendqrg) * bit 2 set: PTT active (set/unset in gettxinfo) * bit 3 set: PTT On (set/unset in callinput) * bit 4 set: PTT Off (set/unset in callinput) */ char message[25][80] = /**< Array of CW messages * * message[0]..[11] activated by F1..F12 key * message[12] - TU message S&P mode * message[13] - TU message CQ mode * message[14]..[23] activated by Alt-0..9 * message[24] - S&P call message * * special use: * * message[0] (F1) - 'cq message' in CQ mode, * 'de ' in S&P * message[2] (F3) - send rapport * message[4] (F5) - hiscall (used if '?' entered * in call field * message[6] (F7) - 'worked before' message * message[11] (F12) - used for auto-cq * * additional use if in CTCOMP mode * message[1] (F2) - insert pressed */ { "TEST %\n", "@ DE %\n", "@ [\n", "TU 73\n", " @\n", "%\n", "@ SRI QSO B4 GL\n", "AGN\n", " ?\n", " QRZ?\n", " PSE K\n", "TEST % %\n", "@ [\n", "TU %\n", "", "", "", "", "", "", "", "", "", "", "" }; char *digi_message[sizeof(message) / sizeof(message[0])]; char ph_message[14][80] = /**< Array of file names for voice keyer messages * See description of message[] */ { "", "", "", "", "", "", "", "", "", "", "", "", "", "" }; char qtc_recv_msgs[12][80] = {"QTC?\n", "QRV\n", "R\n", "", "TIME?\n", "CALL?\n", "NR?\n", "AGN\n", "", "QSL ALL\n", "", ""}; // QTC receive windowS Fx messages char qtc_send_msgs[12][80] = {"QRV?\n", "QTC sr/nr\n", "", "", "TIME\n", "CALL\n", "NR\n", "", "", "", "", ""}; // QTC send window Fx messages char qtc_phrecv_message[14][80] = { "", "", "", "", "", "", "", "", "", "", "", "" }; // voice keyer file names when receives QTC's char qtc_phsend_message[14][80] = { "", "", "", "", "", "", "", "", "", "", "", "" }; // voice keyer file names when send QTC's int qtcrec_record = 0; char qtcrec_record_command[2][50] = {"rec -q 8000", "-q &"}; char qtcrec_record_command_shutdown[50] = "pkill -SIGINT -n rec"; char qtc_cap_calls[40] = ""; int qtc_auto_filltime = 0; int qtc_recv_lazy = 0; char hiscall[20]; /**< call of other station */ char hiscall_sent[20] = ""; /**< part which was sent during early start */ int cwstart = 0; /**< number characters after which sending call started automatically, 0 - off, -1 - manual start */ int sending_call = 0; int early_started = 0; /**< 1 if sending call started early, strlen(hiscall)>cwstart or 'space' */ char lastcall[20]; char qsonrstr[5] = "0001"; char band[NBANDS][4] = { "160", " 80", " 40", " 30", " 20", " 17", " 15", " 12", " 10", "???" }; char comment[80]; char mode[20] = "Log "; char cqzone[3] = ""; char mycqzone[3] = ""; char ituzone[3] = ""; char continent[3] = ""; char mycontinent[3] = ""; char pxstr[11] = ""; int totalmults = 0; int totalcountries = 0; int totalzones = 0; int secs = 0; int countrynr; int mycountrynr = 215; int total = 0; /**< total number of qso points */ int band_score[NBANDS]; int dupe = 0; int callfound = 0; int partials = 0; /**< show partial calls */ int use_part = 0; /**< if 1 use automatically found partial call */ int block_part = 0; /**< if 1 block the call autocompletion for these QSO */ char para_word[80] = "LODNCFS:3C\n"; /* longcw, cluster, search, DE, contest, filter, speed, delay */ char lastmsg[1000] = ""; char sc_device[40] = "/dev/dsp"; /*-------------------------------------keyer------------------------------*/ int cwkeyer = NO_KEYER; int digikeyer = NO_KEYER; char keyer_device[10] = ""; // ttyS0, ttyS1, lp0-2 for net_keyer int keyer_backspace = 0; // disabled char controllerport[80] = "/dev/ttyS0"; // for GMFSK or MFJ-1278 char rttyoutput[120]; // where to GMFSK digimode output rmode_t digi_mode = RIG_MODE_NONE; int txdelay = 0; int weight = 0; char weightbuf[4]; char tonestr[5] = "600"; int cqdelay = 8; int k_tune; int k_pin14; int k_ptt; int miniterm = 0; /* is miniterm for digimode active? */ char modem_mode[8]; int commentfield = 0; /* 1 if we are in comment/excahnge input */ /*-------------------------------------packet-------------------------------*/ char spot_ptr[MAX_SPOTS][82]; /* Array of cluster spot lines */ int nr_of_spots; /* Anzahl Lines in spot_ptr array */ char lastwwv[120] = ""; int packetinterface = 0; int fdSertnc = 0; int tncport = 1; char tncportname[40]; char rigconf[80]; int tnc_serial_rate = 2400; char clusterlogin[80] = ""; int bmautoadd = 0; int bmautograb = 0; /*-------------------------------------rigctl-------------------------------*/ rig_model_t myrig_model = 351; /* Ten-Tec Omni VI Plus */ RIG *my_rig; /* handle to rig (instance) */ rmode_t rmode; /* radio mode of operation */ pbwidth_t width; vfo_t vfo; /* vfo selection */ port_t myport; int ssb_bandwidth = 3000; int cw_bandwidth = 0; int serial_rate = 2400; char *rigportname; int rignumber = 0; int rig_comm_error = 0; int rig_comm_success = 0; /*----------------------------------fldigi---------------------------------*/ char fldigi_url[50] = "http://localhost:7362/RPC2"; /*---------------------------------simulator-------------------------------*/ int simulator = 0; int simulator_mode = 0; int simulator_seed = 8327; int system_secs; char tonecpy[5]; char simulator_tone[5]; /*-------------------------------the log lines-----------------------------*/ char qsos[MAX_QSOS][LOGLINELEN + 1]; int nr_qsos = 0; /*------------------------------dupe array---------------------------------*/ int nr_worked = 0; /**< number of calls in worked[] */ struct worked_t worked[MAX_CALLS]; /**< worked stations */ /*----------------------statistic of worked countries,zones ... -----------*/ int countries[MAX_DATALINES]; /* per country bit fieldwith worked bands set */ int zones[MAX_ZONES]; /* same for cq zones or itu zones; using 1 - 40 or 1 - 90 */ struct mults_t multis[MAX_MULTS]; /**< worked multis */ int nr_multis = 0; /**< number of multis in multis[] */ int multlist = 0; int callareas[20]; int multscore[NBANDS]; struct ie_list *main_ie_list = NULL; /* head of initial exchange list */ int zonescore[NBANDS]; int countryscore[NBANDS]; int zonedisplay = 0; int addzone = 0; /* flag for new zone */ int addcty = 0; /* flag for new country */ int shownewmult = -1; int minute_timer = 0; int bandinx = BANDINDEX_40; /* start with 40m */ int qsonum = 1; /* nr of next QSO */ int ymax, xmax; /* screen size */ pid_t pid; struct tm *time_ptr, time_ptr_cabrillo; freq_t freq; freq_t mem; int logfrequency = 0; int rit; int trx_control = 0; int showfreq = 0; freq_t bandfrequency[NBANDS] = { 1830000, 3525000, 7010000, 10105000, 14025000, 18070000, 21025000, 24900000, 28025000, 0. }; char headerline[81] = " 1=CQ 2=DE 3=RST 4=73 5=HIS 6=MY 7=B4 8=AGN 9=? \n"; char backgrnd_str[81] = " "; char logline_edit[5][LOGLINELEN + 1]; char terminal1[88] = ""; char terminal2[88] = ""; char terminal3[88] = ""; char terminal4[88] = ""; char termbuf[88] = ""; int termbufcount = 0; double QTH_Lat = 51.; double QTH_Long = -7.; double DEST_Lat = 51.; double DEST_Long = 1.; double r = 50; int m = 1; char hiscountry[40]; int this_second; int wazmult = 0; /* to add the ability of WAZ zones to be multiplier */ int itumult = 0; /* to add the ability of ITU zones to be multiplier */ char itustr[3]; int nopacket = 0; /* set if tlf is called with '-n' */ int no_trx_control = 0; /* set if tlf is called with '-r' */ int convert_cabrillo = 0; /* set if the arg input is a cabrillo */ int do_cabrillo = 0; /* actually converting cabrillo file to Tlf log */ int bandweight_points[NBANDS] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 0}; int bandweight_multis[NBANDS] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 0}; pthread_t background_thread; static struct termios oldt, newt; /*-------------------------parse program options---------------------------*/ const char *argp_program_version = "tlf-" VERSION; const char *argp_program_bug_address = ""; static const char program_description[] = "tlf - contest logging program for amateur radio operators"; static const struct argp_option options[] = { { "config", 'f', "FILE", 0, "Use FILE as configuration file instead of logcfg.dat in the current directory" }, {"import", 'i', 0, 0, "Import cabrillo file to Tlf format"}, {"no-cluster", 'n', 0, 0, "Start without cluster hookup" }, {"no-rig", 'r', 0, 0, "Start without radio control" }, {"sync", 's', "URL", 0, "Synchronize log with other node" }, {"debug", 'd', 0, 0, "Debug mode" }, {"verbose", 'v', 0, 0, "Produce verbose output" }, { 0 } }; /* parse a single option */ static error_t parse_opt(int key, char *arg, struct argp_state *state) { switch (key) { case 'f': // config file config_file = g_strdup(arg); break; case 'n': // disable packet nopacket = 1; break; case 'r': no_trx_control = 1; // disable radio control break; case 'i': convert_cabrillo = 1; break; case 's': if (strlen(arg) >= 120) { printf("Argument too long for sync\n"); exit(EXIT_FAILURE); } strcpy(synclogfile, arg); break; case 'd': // debug rigctl debugflag = 1; break; case 'v': // verbose startup verbose = 1; break; default: return ARGP_ERR_UNKNOWN; } return 0; } const static struct argp argp = { options, parse_opt, NULL, program_description }; /** initialize user interface */ void ui_init() { /* modify stdin terminals attributes to allow Ctrl-Q/S key recognition */ tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_iflag &= ~(IXON); tcsetattr(STDIN_FILENO, TCSANOW, &newt); /* getting users terminal string and (if RXVT) setting rxvt colours on it */ /* LZ3NY hack :) */ char *term = getenv("TERM"); if (strcasecmp(term, "rxvt") == 0) { use_rxvt = 1; } else if ((strcasecmp(term, "xterm") == 0) || (strcasecmp(term, "xterm-256color") == 0)) { use_xterm = 1; use_rxvt = 1; } /* Check the environment variable ESCDELAY. * * If unset set it to 25 mS which should allow enough time to capture * escaped key codes and yet be fast enough to call stoptx() when needed * by the user. When unset Ncurses assumes a default value of 1000 mS so * use set_escdelay(0) to set it as the Ncurses documentation declares this * method to be thread safe. * * Else let Ncurses honor the user defined value of the env variable. */ if (getenv("ESCDELAY") == NULL) { set_escdelay(25); } /* activate ncurses terminal control */ if ((mainscreen = newterm(NULL, stdout, stdin)) == NULL) { perror("initscr"); printf ("\nSorry, wrong terminal type !!!!! \nTry a linux text terminal or set TERM=linux !!!\n"); sleep(2); exit(EXIT_FAILURE); } InitSearchPanel(); /* at least one panel has to be defined for refreshp() to work */ getmaxyx(stdscr, ymax, xmax); if ((ymax < 25) || (xmax < 80)) { char c; showmsg("!! TLF needs at least 25 lines and 80 columns !!"); showmsg(" Continue anyway? Y/(N) "); c = toupper(key_get()); if (c != 'Y') { showmsg("73 es cuagn"); sleep(1); endwin(); exit(EXIT_FAILURE); } clearmsg(); } if (!has_colors() || (start_color() == ERR)) { showmsg("Sorry, terminal does not support color"); showmsg("Try TERM=linux or use a text console !!"); sleep(1); endwin(); exit(EXIT_FAILURE); } refreshp(); noecho(); cbreak(); keypad(stdscr, TRUE); lookup_keys(); } /* setup colors */ void ui_color_init() { if (use_rxvt == 1) { // use rxvt colours init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_RED); if (use_xterm == 1) { init_pair(C_HEADER, COLOR_GREEN, COLOR_BLUE); init_pair(COLOR_RED, COLOR_WHITE, 8); init_pair(C_WINDOW, COLOR_CYAN, COLOR_MAGENTA); init_pair(C_DUPE, COLOR_WHITE, COLOR_MAGENTA); init_pair(C_INPUT, COLOR_BLUE, COLOR_WHITE); } else { init_pair(C_HEADER, COLOR_GREEN, COLOR_YELLOW); init_pair(COLOR_RED, COLOR_WHITE, COLOR_RED); init_pair(C_WINDOW, COLOR_CYAN, COLOR_RED); init_pair(C_DUPE, COLOR_RED, COLOR_MAGENTA); init_pair(C_INPUT, COLOR_BLUE, COLOR_YELLOW); } init_pair(C_LOG, COLOR_WHITE, COLOR_BLACK); init_pair(C_BORDER, COLOR_CYAN, COLOR_YELLOW); } else { // use linux console colours init_pair(COLOR_BLACK, tlfcolors[0][0], tlfcolors[0][1]); // b/w init_pair(C_HEADER, tlfcolors[1][0], tlfcolors[1][1]); // Gn/Ye init_pair(COLOR_RED, tlfcolors[2][0], tlfcolors[2][1]); // W/R init_pair(C_WINDOW, tlfcolors[3][0], tlfcolors[3][1]); // Cy/W init_pair(C_LOG, tlfcolors[4][0], tlfcolors[4][1]); // W/B init_pair(C_DUPE, tlfcolors[5][0], tlfcolors[5][1]); // W/Mag init_pair(C_INPUT, tlfcolors[6][0], tlfcolors[6][1]); // Bl/Y init_pair(C_BORDER, tlfcolors[7][0], tlfcolors[7][1]); // W/B } } /** load all databases * * \return EXIT_FAILURE if not successful */ int databases_load() { int status; showmsg("Reading country data"); readctydata(); /* read ctydb.dat */ showmsg("Reading configuration data"); status = read_logcfg(); /* read the configuration file */ status |= read_rules(); /* read the additional contest rules in "rules/contestname" */ if (status != PARSE_OK) { showmsg("Problems in logcfg.dat or rule file detected! Continue Y/(N)?"); if (toupper(key_get()) != 'Y') { showmsg("73..."); return EXIT_FAILURE; } } if (*call == '\0') { showmsg ("WARNING: No callsign defined in logcfg.dat! exiting...\n"); return EXIT_FAILURE; } if (multlist == 1) { showmsg("Reading multiplier data "); if (strlen(multsfile) == 0) { showmsg("No multiplier file specified, exiting.. !!"); return EXIT_FAILURE; } } init_and_load_multipliers(); showmsg("Reading callmaster data"); load_callmaster(); if (*exchange_list != '\0') { showmsg("Reading initial exchange file"); main_ie_list = make_ie_list(exchange_list); if (main_ie_list == NULL) { showmsg("Problems in initial exchange file detected! Continue Y/(N)?"); if (toupper(key_get()) != 'Y') { showmsg("73..."); return EXIT_FAILURE; } } } /* make sure logfile is there and has the right format */ if (checklogfile_new(logfile) != 0) { showmsg("Can not access logfile. Giving up"); return EXIT_FAILURE; } if (qtcdirection > 0) { if (checkqtclogfile() != 0) { showmsg("QTC's giving up"); return EXIT_FAILURE; } readqtccalls(); } // unset QTC_RECV_LAZY if mode is DIGIMODE if (trxmode == DIGIMODE) { qtc_recv_lazy = 0; } return 0; } void hamlib_init() { int status; if (no_trx_control == 1) { trx_control = 0; } if (trx_control != 0) { shownr("Rignumber is", (int) myrig_model); shownr("Rig speed is", serial_rate); showmsg("Trying to start rig ctrl"); status = init_tlf_rig(); if (status != 0) { showmsg("Continue without rig control Y/(N)?"); if (toupper(key_get()) != 'Y') { endwin(); exit(1); } trx_control = 0; showmsg("Disabling rig control!"); sleep(1); } } } void fldigi_init() { #ifdef HAVE_LIBXMLRPC int status; if (digikeyer == FLDIGI) { xmlrpc_showinfo(); status = fldigi_xmlrpc_init(); if (status != 0) { digikeyer = NO_KEYER; } } #endif } void lan_init() { if (lan_active == 1) { if (lanrecv_init() < 0) /* set up the network */ showmsg("LAN receive init failed"); else showmsg("LAN receive initialized"); if (lan_send_init() < 0) showmsg("LAN send init failed"); else showmsg("LAN send initialized"); } } void packet_init() { if (nopacket == 1) packetinterface = 0; set_term(mainscreen); // really needed? refreshp(); if ((nopacket == 0) && (packetinterface != 0)) { if (init_packet() == 0) packet(); else cleanup_telnet(); } } void keyer_init() { char keyerbuff[3]; if (cwkeyer == NET_KEYER) { showmsg("CW-Keyer is cwdaemon"); if (netkeyer_init() < 0) { showmsg("Cannot open NET keyer daemon "); refreshp(); sleep(1); } else { netkeyer(K_RESET, "0"); sprintf(weightbuf, "%d", weight); write_tone(); snprintf(keyerbuff, 3, "%2u", GetCWSpeed()); netkeyer(K_SPEED, keyerbuff); // set speed netkeyer(K_WEIGHT, weightbuf); // set weight if (*keyer_device != '\0') netkeyer(K_DEVICE, keyer_device); // set device sprintf(keyerbuff, "%d", txdelay); netkeyer(K_TOD, keyerbuff); // set TOD if (sc_sidetone != 0) // set soundcard output netkeyer(K_SIDETONE, ""); if (*sc_volume != '\0') // set soundcard volume netkeyer(K_STVOLUME, sc_volume); } } if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER || digikeyer == GMFSK) { init_controller(); } } void show_GPL() { printw("\n\n\n"); printw(" TTTTT L FFFFF\n"); printw(" T L F \n"); printw(" T L FFFFF\n"); printw(" T L F \n"); printw(" T LLLLL F \n"); printw ("\n\nThis program is copyright 2002, 2003, 2004 by Rein Couperus, PA0R\n\n"); printw ("It is free software; you can redistribute it and/or modify it under the terms\n"); printw ("of the GNU General Public License as published by the Free Software Foundation;\n"); printw ("either version 2 of the License, or (at your option) any later version.\n\n"); printw ("This program is distributed in the hope that it will be useful, but\n"); printw ("WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n"); printw ("or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n"); printw ("for more details.\n"); refreshp(); } int isFirstStart() { FILE *fp; if ((fp = fopen(".paras", "r")) == NULL) { return 1; } fclose(fp); return 0; } /** cleanup function * * Cleanup initialisations made by tlf. Will be called after exit() from * logit() or background_process() */ void tlf_cleanup() { if (pthread_self() != background_thread) { pthread_cancel(background_thread); pthread_join(background_thread, NULL); } cleanup_telnet(); if (trxmode == CWMODE && cwkeyer == NET_KEYER) netkeyer_close(); else deinit_controller(); if (my_rig) { close_tlf_rig(my_rig); } #ifdef HAVE_LIBXMLRPC if (digikeyer == FLDIGI) { fldigi_xmlrpc_cleanup(); } #endif endwin(); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); } /* ------------------------------------------------------------------------*/ /* Main loop of the program */ /* ------------------------------------------------------------------------*/ int main(int argc, char *argv[]) { int j; int ret; char welcome[80]; sprintf(welcome, " Welcome to %s by PA0R!!", argp_program_version); argp_parse(&argp, argc, argv, 0, 0, NULL); // parse options ui_init(); strcat(logline0, backgrnd_str); strcat(logline1, backgrnd_str); strcat(logline2, backgrnd_str); strcat(logline3, backgrnd_str); strcat(logline4, backgrnd_str); strcat(terminal1, backgrnd_str); strcat(terminal2, backgrnd_str); strcat(terminal3, backgrnd_str); strcat(terminal4, backgrnd_str); termbuf[0] = '\0'; hiscall[0] = '\0'; if (isFirstStart()) { /* first time called in this directory */ verbose = 1; printw(welcome); show_GPL(); sleep(5); clear(); } showmsg(welcome); showmsg(""); total = 0; if (databases_load() == EXIT_FAILURE) { sleep(2); endwin(); exit(EXIT_FAILURE); } if (convert_cabrillo == 1) { char tstring[100] = ""; sprintf(tstring, "Converting cabrillo for contest %s from file %s.cbr", whichcontest, g_strstrip(call)); showmsg(tstring); showmsg(""); getstationinfo(); if (0 != readcabrillo(READCAB_MODE_CLI)) showmsg("Sorry. Conversion failed...."); else showmsg("Done..."); sleep(2); endwin(); exit(EXIT_SUCCESS); } /* now setup colors */ ui_color_init(); // if (strlen(synclogfile) > 0) // synclog(synclogfile); hamlib_init(); fldigi_init(); lan_init(); keyer_init(); scroll_log(); /* read the last 5 log lines and set the qso number */ nr_qsos = readcalls(); /* read the logfile for score and dupe */ checkparameters(); /* check .paras file */ getmessages(); /* read .paras file */ clearmsg_wait(); packet_init(); clear_display(); /* tidy up the display */ attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= LINES - 1; j++) { /* wipe lower window */ mvprintw(j, 0, backgrnd_str); } refreshp(); getwwv(); /* get the latest wwv info from packet */ bm_init(); /* initialize bandmap */ atexit(tlf_cleanup); /* register cleanup function */ /* Create the background thread */ ret = pthread_create(&background_thread, NULL, background_process, NULL); if (ret) { perror("pthread_create: backgound_process"); endwin(); exit(EXIT_FAILURE); } /* now start logging !! Does never return */ logit(); return 0; } tlf-1.4.0/src/getmessages.c0000644000175000017500000000716613562576621012513 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Get messages from -paras file * and gets the last 5 qso records for display * also gets the nr of the last qso from the logfile *--------------------------------------------------------------*/ #include #include #include #include #include "checklogfile.h" #include "dxcc.h" #include "getctydata.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "qsonr_to_str.h" #include "ignore_unused.h" #include "tlf_curses.h" /* get countrynumber, QTH, CQ zone and continent for myself */ void getstationinfo() { extern char call[]; extern int mycountrynr; extern char mycqzone[]; extern char mycontinent[]; extern double QTH_Lat; extern double QTH_Long; dxcc_data *mydx; mycountrynr = getctydata(call); /* whoami? */ mydx = dxcc_by_index(mycountrynr); sprintf(mycqzone, "%02d", mydx -> cq); strcpy(mycontinent, mydx->continent); QTH_Lat = mydx->lat; /* whereami? */ QTH_Long = mydx->lon; } void getmessages(void) { extern char call[]; extern char mycqzone[]; extern char mycontinent[]; extern char logfile[]; extern int qsonum; extern char qsonrstr[]; extern char backgrnd_str[]; FILE *fp; int i, ii; char logline[5][82]; printw("\n Call = "); printw(call); getstationinfo(); printw(" My Zone = "); printw(mycqzone); printw(" My Continent = "); printw(mycontinent); printw("\n\n"); refreshp(); if ((fp = fopen(logfile, "r")) == NULL) { printw("\nError opening logfile.\nExiting...\n"); refreshp(); sleep(5); endwin(); exit(1); } for (i = 5; i >= 1; i--) { ii = 5 - i; if (fseek(fp, -1L * i * LOGLINELEN, SEEK_END) == 0) { IGNORE(fgets(logline[ii], 85, fp));; } else { strncpy(logline[ii], backgrnd_str, 81); } logline[ii][80] = '\0'; logline[ii][78] = 32; logline[ii][79] = 32; } fclose(fp); strncpy(qsonrstr, logline[4] + 23, 4); qsonrstr[4] = '\0'; qsonum = atoi(qsonrstr) + 1; if (qsonum == 1) { strncpy(qsonrstr, logline[3] + 23, 4); qsonrstr[4] = '\0'; qsonum = atoi(qsonrstr) + 1; qsonr_to_str(); } if (strlen(logline[0]) >= 75) strncpy(logline0, logline[0], 80); else strcpy(logline0, backgrnd_str); if (strlen(logline[1]) >= 75) strncpy(logline1, logline[1], 80); else strcpy(logline1, backgrnd_str); if (strlen(logline[2]) >= 75) strncpy(logline2, logline[2], 80); else strcpy(logline2, backgrnd_str); if (strlen(logline[3]) >= 75) strncpy(logline3, logline[3], 80); else strcpy(logline3, backgrnd_str); if (strlen(logline[4]) >= 75) strncpy(logline4, logline[4], 80); else strcpy(logline4, backgrnd_str); } tlf-1.4.0/src/listmessages.c0000644000175000017500000000503313562576621012676 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * List CW messages * *--------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "globalvars.h" #include "nicebox.h" // Includes curses.h #include "tlf.h" #include "ui_utils.h" #define LIST_HEIGHT 15 #define LIST_WIDTH 78 #define LIST_UPPER 7 #define LIST_LEFT 0 char printbuffer[160]; char *formatMessage(int i) { extern char message[][80]; extern char backgrnd_str[]; /* copy the message string WITHOUT trailing newline/space */ if (trxmode == DIGIMODE) g_strlcpy(printbuffer, digi_message[i], strlen(digi_message[i])); else g_strlcpy(printbuffer, message[i], strlen(message[i])); /* and fill up with spaces */ strcat(printbuffer, backgrnd_str); printbuffer[LIST_WIDTH - 7] = '\0'; return printbuffer; } void listmessages(void) { extern char backgrnd_str[]; int i; nicebox(LIST_UPPER, LIST_LEFT, LIST_HEIGHT, LIST_WIDTH, "Messages"); attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); for (i = 0 ; i < 12 ; i++) { mvprintw(i + LIST_UPPER + 1, 1, " %2i : %s", i + 1, formatMessage(i)); } mvprintw(12 + LIST_UPPER + 1, 1, " SPmg: %s", formatMessage(SP_TU_MSG)); mvprintw(13 + LIST_UPPER + 1, 1, " CQmg: %s", formatMessage(CQ_TU_MSG)); mvprintw(14 + LIST_UPPER + 1, 1, " SPCa: %s", formatMessage(SP_CALL_MSG)); attroff(A_STANDOUT); mvprintw(23, 30, "Press any key"); refreshp(); (void)key_get(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (i = 13 ; i <= 23 ; i++) { mvprintw(i, 0, backgrnd_str); } refreshp(); return; } tlf-1.4.0/src/startmsg.h0000644000175000017500000000220613562576621012043 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef STARTMSG_H #define STARTMSG_H void clearmsg(void); void clearmsg_wait(void); void showmsg(char *message); // output text void shownr(char *message, int nr); // output text + number void showstring(char *message1, char *message2); // output 2 strings #endif /* end of include guard: STARTMSG_H */ tlf-1.4.0/src/cw_utils.h0000644000175000017500000000210313562576621012024 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2013 Thomas Beierlein * * 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 */ #ifndef CW_UTILS_H #define CW_UTILS_H extern int speed; void SetCWSpeed(unsigned int wpm); unsigned int GetCWSpeed(); unsigned int getCWdots(char ch); unsigned int cw_message_length(char *message); #endif /* end of include guard: CW_UTILS_H */ tlf-1.4.0/src/paccdx.c0000644000175000017500000000733613562576621011445 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 "getctydata.h" #include "getpx.h" #include "tlf.h" #include "bands.h" int pacc_pa(void) { extern int w_cty; extern int ve_cty; extern int zl_cty; extern int ja_cty; extern int py_cty; extern int ce_cty; extern int lu_cty; extern int vk_cty; extern int zs_cty; extern int ua9_cty; extern char pxstr[]; extern int addcallarea; extern char hiscall[]; extern int bandinx; extern int countrynr; extern int countryscore[]; extern int pacc_qsos[10][10]; //extern int band_score[]; int pxnr; /* FIXME: Initialisation is wrong as 0 is bandindex for 160m */ int i = 0, j = 0, k; k = 1; switch (bandinx) { case BANDINDEX_160: case BANDINDEX_80: case BANDINDEX_40: case BANDINDEX_20: case BANDINDEX_15: case BANDINDEX_10: i = inxes[bandinx]; j = bandinx; break; } getpx(hiscall); pxnr = pxstr[strlen(pxstr) - 1] - 48; getctydata(hiscall); if (countrynr == w_cty) { if ((pacc_qsos[0][pxnr] & i) == 0) { pacc_qsos[0][pxnr] = pacc_qsos[0][pxnr] | i; countryscore[j]++; addcallarea = 1; } k = 0; } else if (countrynr == ve_cty) { if ((pacc_qsos[1][pxnr] & i) == 0) { pacc_qsos[1][pxnr] = pacc_qsos[1][pxnr] | i; countryscore[j]++; addcallarea = 1; } k = 0; } else if (countrynr == zl_cty) { if ((pacc_qsos[2][pxnr] & i) == 0) { pacc_qsos[2][pxnr] = pacc_qsos[2][pxnr] | i; countryscore[j]++; addcallarea = 1; } k = 0; } else if (countrynr == ja_cty) { if ((pacc_qsos[3][pxnr] & i) == 0) { pacc_qsos[3][pxnr] = pacc_qsos[3][pxnr] | i; countryscore[j]++; addcallarea = 1; } k = 0; } else if (countrynr == py_cty) { if ((pacc_qsos[4][pxnr] & i) == 0) { pacc_qsos[4][pxnr] = pacc_qsos[4][pxnr] | i; countryscore[j]++; addcallarea = 1; } k = 0; } else if (countrynr == ce_cty) { if ((pacc_qsos[5][pxnr] & i) == 0) { pacc_qsos[5][pxnr] = pacc_qsos[5][pxnr] | i; countryscore[j]++; addcallarea = 1; } k = 0; } else if (countrynr == lu_cty) { if ((pacc_qsos[6][pxnr] & i) == 0) { pacc_qsos[6][pxnr] = pacc_qsos[6][pxnr] | i; countryscore[j]++; addcallarea = 1; } k = 0; } else if (countrynr == vk_cty) { if ((pacc_qsos[7][pxnr] & i) == 0) { pacc_qsos[7][pxnr] = pacc_qsos[7][pxnr] | i; countryscore[j]++; addcallarea = 1; } k = 0; } else if (countrynr == zs_cty) { if ((pacc_qsos[8][pxnr] & i) == 0) { pacc_qsos[8][pxnr] = pacc_qsos[8][pxnr] | i; countryscore[j]++; addcallarea = 1; } k = 0; } else if (countrynr == ua9_cty) { if ((pxnr == 9) || (pxnr == 0)) { if ((pacc_qsos[9][pxnr] & i) == 0) { pacc_qsos[9][pxnr] = pacc_qsos[9][pxnr] | i; // countryscore[j]++; addcallarea = 1; } k = 0; } } else { addcallarea = 0; k = 1; } return (k); } tlf-1.4.0/src/scroll_log.c0000644000175000017500000000702213562576621012332 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------------------ * scroll the loglines of the keyer terminal 1 up * ---------------------------------------------------------------------------*/ #include #include #include #include #include"err_utils.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "ignore_unused.h" #include "qsonr_to_str.h" #include "tlf_curses.h" void scroll_log(void) { char inputbuffer[800]; static int ii, kk; int mm; FILE *fp; if ((fp = fopen(logfile, "r")) == NULL) { TLF_LOG_ERR("Error opening logfile."); } for (ii = 5; ii >= 1; ii--) { inputbuffer[0] = '\0'; if (fseek(fp, -1L * ii * LOGLINELEN, SEEK_END) == 0) IGNORE(fgets(inputbuffer, 90, fp)); else strcpy(inputbuffer, " "); kk = 5 - ii; if (strlen(inputbuffer) <= 10) /* log repair */ IGNORE(fgets(inputbuffer, 90, fp));; // if (strlen(inputbuffer) != LOGLINELEN) // strcat (inputbuffer, backgrnd_str); inputbuffer[80] = '\0'; switch (kk) { case 0: { strncpy(logline0, inputbuffer, 80); logline0[80] = '\0'; break; } case 1: { strncpy(logline1, inputbuffer, 80); logline1[80] = '\0'; break; } case 2: { strncpy(logline2, inputbuffer, 80); logline2[80] = '\0'; break; } case 3: { strncpy(logline3, inputbuffer, 80); logline3[80] = '\0'; break; } case 4: { strncpy(logline4, inputbuffer, 80); logline4[80] = '\0'; break; } } } fclose(fp); mm = qsonum - 1; if (logline4[0] != ';') { strncpy(qsonrstr, logline4 + 23, 4); mm = atoi(qsonrstr); } if (logline3[0] != ';') { if (atoi(logline3 + 23) > mm) { mm = atoi(logline3 + 23); strncpy(qsonrstr, logline3 + 23, 4); } } if (logline2[0] != ';') { if (atoi(logline2 + 23) > mm) { mm = atoi(logline2 + 23); strncpy(qsonrstr, logline2 + 23, 4); } } if (logline1[0] != ';') { if (atoi(logline1 + 23) > mm) { mm = atoi(logline1 + 23); strncpy(qsonrstr, logline1 + 23, 4); } } if ((lan_active == 1) && (exchange_serial == 1)) { if (lan_mutex == 2) { /* last mesagge from lan */ if (atoi(qsonrstr) <= highqsonr) { qsonum = highqsonr; } } else { qsonum = atoi(qsonrstr); if (qsonum < highqsonr) qsonum = highqsonr; if (highqsonr < qsonum) highqsonr = qsonum; } } else qsonum = atoi(qsonrstr); if (logline4[0] != ';') qsonum++; else qsonum = mm + 1; // if((qsonum > highqsonr) && (lan_mutex == 2)) highqsonr++; qsonr_to_str(); } tlf-1.4.0/src/locator2longlat.h0000644000175000017500000000367513562576621013320 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedus * * 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 */ /* * original code in HAMLIB * * src/locator.c header file * * author Stephane Fillod and the Hamlib Group * date 2000-2010 * * Hamlib Interface - locator, bearing, and conversion calls * * * Hamlib Interface - locator and bearing conversion calls * Copyright (c) 2001-2010 by Stephane Fillod * Copyright (c) 2003 by Nate Bargmann * Copyright (c) 2003 by Dave Hines * * * Code to determine bearing and range was taken from the Great Circle, * by S. R. Sampson, N5OWK. * Ref: "Air Navigation", Air Force Manual 51-40, 1 February 1987 * Ref: "ARRL Satellite Experimenters Handbook", August 1990 * * Code to calculate distance and azimuth between two Maidenhead locators, * taken from wwl, by IK0ZSN Mirko Caserta. * * New bearing code added by N0NB was found at: * http://williams.best.vwh.net/avform.htm#Crs */ #ifndef LOCATOR2LONGLAT_H #define LOCATOR2LONGLAT_H int locator2longlat(double *longitude, double *latitude, const char *locator); int check_qra(char *qra); #endif /* end of include guard: LOCATOR2LONGLAT_H */ tlf-1.4.0/src/autocq.c0000644000175000017500000000576013562576621011476 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * AUTO_CQ * *--------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "cw_utils.h" #include "globalvars.h" #include "printcall.h" #include "sendbuf.h" #include "stoptx.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #include "time_update.h" int play_file(char *audiofile); /* FIXME: Needs refactorization and cleanup of logic */ int auto_cq(void) { extern char mode[]; extern char message[][80]; extern int cqdelay; extern int cqmode; extern int trxmode; extern char hiscall[]; int inchar = -1, delayval = 0, cw_message_len = 0, realspeed = 0, j = 0; long message_time = 0; char cwmessage[80]; int letter = 0; strcpy(mode, "AUTO_CQ "); clear_display(); while (delayval == 0) { send_standard_message(11); mvprintw(12, 29 + strlen(hiscall), ""); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); if (trxmode == CWMODE) { realspeed = GetCWSpeed(); strncpy(cwmessage, message[11], 79); cw_message_len = cw_message_length(cwmessage); message_time = (long)(1200.0 / realspeed) * cw_message_len; for (j = 0; j < 10; j++) { usleep(message_time * 100); time_update(); inchar = key_poll(); if (inchar > 0) { letter = inchar; stoptx(); break; } } } for (delayval = cqdelay; delayval > 0; delayval--) { if (inchar < 0) { mvprintw(12, 29, "Auto cq %d ", delayval - 1); refreshp(); } else { break; } usleep(500000); time_update(); if (inchar < 0) inchar = key_poll(); letter = inchar; if (inchar > 0) break; } mvprintw(12, 29, " "); mvprintw(12, 29, ""); refreshp(); } if (cqmode == CQ) strcpy(mode, "Log "); else strcpy(mode, "S&P "); clear_display(); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); // Promote lower case letters to uppercase. if (letter > 96 && letter < 123) letter -= 32; mvprintw(12, 29, " "); printcall(); if (inchar == 27) return (27); else return (letter); } tlf-1.4.0/src/sendqrg.c0000644000175000017500000001373513562576621011646 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 #include "bands.h" #include "sendqrg.h" #include "startmsg.h" #include "gettxinfo.h" #include "bands.h" #include "globalvars.h" void send_bandswitch(freq_t trxqrg); static int parse_rigconf(); static void debug_tlf_rig(); /* check if call input field contains a frequency value and switch to it. * */ int sendqrg(void) { extern char hiscall[]; extern int trx_control; if (!trx_control) { return 0; /* nothing to do here */ } const freq_t trxqrg = atof(hiscall) * 1000.0; int bandinx = freq2band(trxqrg); if (bandinx == BANDINDEX_OOB) { return 0; // not a frequency or out of band } set_outfreq(trxqrg); send_bandswitch(trxqrg); return trxqrg; } /**************************************************************************/ int init_tlf_rig(void) { extern RIG *my_rig; extern rig_model_t myrig_model; extern int serial_rate; extern char *rigportname; extern int debugflag; extern unsigned char rigptt; freq_t rigfreq; /* frequency */ vfo_t vfo; int retcode; /* generic return code from functions */ const char *ptt_file = NULL, *dcd_file = NULL; dcd_type_t dcd_type = RIG_DCD_NONE; const struct rig_caps *caps; /* * allocate memory, setup & open port */ rig_set_debug(RIG_DEBUG_NONE); my_rig = rig_init(myrig_model); if (!my_rig) { shownr("Unknown rig model", (int) myrig_model); return -1; } if (rigportname == NULL || strlen(rigportname) == 0) { showmsg("Missing rig port name!"); return -1; } rigportname[strlen(rigportname) - 1] = '\0'; // remove '\n' strncpy(my_rig->state.rigport.pathname, rigportname, FILPATHLEN); caps = my_rig->caps; /* If CAT PTT is wanted, test for CAT capability of rig backend. */ if (rigptt & (1 << 0)) { if (caps->ptt_type == RIG_PTT_RIG) { rigptt |= (1 << 1); /* bit 1 set--CAT PTT available. */ } else { rigptt = 0; showmsg("Controlling PTT via hamlib is not supported for that rig!"); } } if (dcd_type != RIG_DCD_NONE) my_rig->state.dcdport.type.dcd = dcd_type; if (ptt_file) strncpy(my_rig->state.pttport.pathname, ptt_file, FILPATHLEN); if (dcd_file) strncpy(my_rig->state.dcdport.pathname, dcd_file, FILPATHLEN); my_rig->state.rigport.parm.serial.rate = serial_rate; // parse RIGCONF parameters if (parse_rigconf() < 0) { return -1; } retcode = rig_open(my_rig); if (retcode != RIG_OK) { showmsg("rig_open: error "); return -1; } rigfreq = 0.0; retcode = rig_get_vfo(my_rig, &vfo); /* initialize RIG_VFO_CURR */ if (retcode == RIG_OK || retcode == -RIG_ENIMPL || retcode == -RIG_ENAVAIL) retcode = rig_get_freq(my_rig, RIG_VFO_CURR, &rigfreq); if (retcode != RIG_OK) { showmsg("Problem with rig link!"); if (!debugflag) return -1; } shownr("Freq =", (int) rigfreq); if (debugflag) { // debug rig control debug_tlf_rig(); } switch (trxmode) { case SSBMODE: set_outfreq(SETSSBMODE); break; case DIGIMODE: set_outfreq(SETDIGIMODE); break; case CWMODE: set_outfreq(SETCWMODE); break; } return 0; } int close_tlf_rig(RIG *my_rig) { extern char *rigportname; rig_close(my_rig); /* close port */ rig_cleanup(my_rig); /* if you care about memory */ printf("Rig port %s closed ok\n", rigportname); return 0; } static int parse_rigconf() { extern char rigconf[]; extern RIG *my_rig; char *cnfparm, *cnfval; const int rigconf_len = strlen(rigconf); int i; int retcode; cnfparm = cnfval = rigconf; for (i = 0; i < rigconf_len; i++) { /* FIXME: left hand value of = cannot be null */ if (rigconf[i] == '=' && cnfval == cnfparm) { cnfval = rigconf + i + 1; rigconf[i] = '\0'; continue; } if (rigconf[i] == ',' || i + 1 == rigconf_len) { if (cnfval <= cnfparm) { showstring("Missing parm value in RIGCONF: ", rigconf); return -1; } if (rigconf[i] == ',') rigconf[i] = '\0'; retcode = rig_set_conf(my_rig, rig_token_lookup(my_rig, cnfparm), cnfval); if (retcode != RIG_OK) { showmsg("rig_set_conf: error "); return -1; } cnfparm = cnfval = rigconf + i + 1; continue; } } return 0; } static void debug_tlf_rig() { extern RIG *my_rig; freq_t rigfreq; int retcode; sleep(10); retcode = rig_get_freq(my_rig, RIG_VFO_CURR, &rigfreq); if (retcode != RIG_OK) { showmsg("Problem with rig get freq!"); sleep(1); } else { shownr("freq =", (int) rigfreq); } sleep(10); const freq_t testfreq = 14000000; // test set frequency retcode = rig_set_freq(my_rig, RIG_VFO_CURR, testfreq); if (retcode != RIG_OK) { showmsg("Problem with rig set freq!"); sleep(1); } else { showmsg("Rig set freq ok!"); } retcode = rig_get_freq(my_rig, RIG_VFO_CURR, &rigfreq); // read qrg if (retcode != RIG_OK) { showmsg("Problem with rig get freq!"); sleep(1); } else { shownr("freq =", (int) rigfreq); if (rigfreq != testfreq) { showmsg("Failed to set rig freq!"); } } sleep(10); } tlf-1.4.0/src/get_time.h0000644000175000017500000000165013562576621011776 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef GET_TIME_H #define GET_TIME_H void get_time(void); #endif /* GET_TIME_H */ tlf-1.4.0/src/grabspot.h0000644000175000017500000000173313562576621012024 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef GRABSPOT_H #define GRABSPOT_H #include freq_t grabspot(void); freq_t grab_next(void); #endif /* GRABSPOT_H */ tlf-1.4.0/src/printcall.h0000644000175000017500000000202213562576621012163 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Thomas Beierlein * * 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 */ #ifndef PRINTCALL_H #define PRINTCALL_H void printcall(void); void highlightCall(unsigned int n); #endif /* PRINTCALL_H */ tlf-1.4.0/src/freq_display.c0000644000175000017500000002246113562576621012661 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 "freq_display.h" #include "nicebox.h" // Includes curses.h #include "tlf.h" #include "ui_utils.h" static void print_dot(int y, int x); static void clear_freq_display(int y, int x); static void print_big_number(int number, int y_position, int x_position, int location); void freq_display(void) { extern freq_t freq; extern int trxmode; const int x_position = 40; const int y_position = 17; clear_freq_display(y_position, x_position); nicebox(16, 39, 5, 35, "TRX"); print_dot(y_position + 4, 28 + x_position + 1); char fbuffer[8]; sprintf(fbuffer, "%7.1f", freq / 1000.0); // display the digits int x_offset = 4; for (int i = 0; i <= 6; ++i) { if (i == 5) { // skip decimal dot x_offset += 2; continue; } const int digit = fbuffer[i] - '0'; if (digit >= 0) { print_big_number(digit, y_position, x_position, x_offset); } x_offset += 5; } attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); if (trxmode == CWMODE) mvprintw(18, 41, "CW"); else if (trxmode == SSBMODE) mvprintw(19, 41, "SSB"); else mvprintw(19, 41, "DIG"); refreshp(); } void print_big_number(int number, int y_position, int x_position, int location) { switch (number) { case 1: { print_dot(y_position, location + x_position + 3); print_dot(y_position + 1, location + x_position + 3); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position + 3); print_dot(y_position + 4, location + x_position + 3); break; } case 2: { print_dot(y_position, location + x_position); print_dot(y_position, location + x_position + 1); print_dot(y_position, location + x_position + 2); print_dot(y_position, location + x_position + 3); print_dot(y_position + 1, location + x_position + 3); print_dot(y_position + 2, location + x_position); print_dot(y_position + 2, location + x_position + 1); print_dot(y_position + 2, location + x_position + 2); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position); print_dot(y_position + 4, location + x_position); print_dot(y_position + 4, location + x_position + 1); print_dot(y_position + 4, location + x_position + 2); print_dot(y_position + 4, location + x_position + 3); break; } case 3: { print_dot(y_position, location + x_position); print_dot(y_position, location + x_position + 1); print_dot(y_position, location + x_position + 2); print_dot(y_position, location + x_position + 3); print_dot(y_position + 1, location + x_position + 3); print_dot(y_position + 2, location + x_position); print_dot(y_position + 2, location + x_position + 1); print_dot(y_position + 2, location + x_position + 2); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position + 3); print_dot(y_position + 4, location + x_position); print_dot(y_position + 4, location + x_position + 1); print_dot(y_position + 4, location + x_position + 2); print_dot(y_position + 4, location + x_position + 3); break; } case 4: { print_dot(y_position, location + x_position); print_dot(y_position, location + x_position + 3); print_dot(y_position + 1, location + x_position); print_dot(y_position + 1, location + x_position + 3); print_dot(y_position + 2, location + x_position); print_dot(y_position + 2, location + x_position + 1); print_dot(y_position + 2, location + x_position + 2); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position + 3); print_dot(y_position + 4, location + x_position + 3); break; } case 5: { print_dot(y_position, location + x_position); print_dot(y_position, location + x_position + 1); print_dot(y_position, location + x_position + 2); print_dot(y_position, location + x_position + 3); print_dot(y_position + 1, location + x_position); print_dot(y_position + 2, location + x_position); print_dot(y_position + 2, location + x_position + 1); print_dot(y_position + 2, location + x_position + 2); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position + 3); print_dot(y_position + 4, location + x_position); print_dot(y_position + 4, location + x_position + 1); print_dot(y_position + 4, location + x_position + 2); print_dot(y_position + 4, location + x_position + 3); break; } case 6: { print_dot(y_position, location + x_position); print_dot(y_position + 1, location + x_position); print_dot(y_position + 2, location + x_position); print_dot(y_position + 2, location + x_position + 1); print_dot(y_position + 2, location + x_position + 2); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position); print_dot(y_position + 3, location + x_position + 3); print_dot(y_position + 4, location + x_position); print_dot(y_position + 4, location + x_position + 1); print_dot(y_position + 4, location + x_position + 2); print_dot(y_position + 4, location + x_position + 3); break; } case 7: { print_dot(y_position, location + x_position); print_dot(y_position, location + x_position + 1); print_dot(y_position, location + x_position + 2); print_dot(y_position, location + x_position + 3); print_dot(y_position + 1, location + x_position + 3); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position + 3); print_dot(y_position + 4, location + x_position + 3); break; } case 8: { print_dot(y_position, location + x_position); print_dot(y_position, location + x_position + 1); print_dot(y_position, location + x_position + 2); print_dot(y_position, location + x_position + 3); print_dot(y_position + 1, location + x_position); print_dot(y_position + 1, location + x_position + 3); print_dot(y_position + 2, location + x_position); print_dot(y_position + 2, location + x_position + 1); print_dot(y_position + 2, location + x_position + 2); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position); print_dot(y_position + 3, location + x_position + 3); print_dot(y_position + 4, location + x_position); print_dot(y_position + 4, location + x_position + 1); print_dot(y_position + 4, location + x_position + 2); print_dot(y_position + 4, location + x_position + 3); break; } case 9: { print_dot(y_position, location + x_position); print_dot(y_position, location + x_position + 1); print_dot(y_position, location + x_position + 2); print_dot(y_position, location + x_position + 3); print_dot(y_position + 1, location + x_position); print_dot(y_position + 1, location + x_position + 3); print_dot(y_position + 2, location + x_position); print_dot(y_position + 2, location + x_position + 1); print_dot(y_position + 2, location + x_position + 2); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position + 3); print_dot(y_position + 4, location + x_position + 3); break; } case 0: { print_dot(y_position, location + x_position); print_dot(y_position, location + x_position + 1); print_dot(y_position, location + x_position + 2); print_dot(y_position, location + x_position + 3); print_dot(y_position + 1, location + x_position); print_dot(y_position + 1, location + x_position + 3); print_dot(y_position + 2, location + x_position); print_dot(y_position + 2, location + x_position + 3); print_dot(y_position + 3, location + x_position); print_dot(y_position + 3, location + x_position + 3); print_dot(y_position + 4, location + x_position); print_dot(y_position + 4, location + x_position + 1); print_dot(y_position + 4, location + x_position + 2); print_dot(y_position + 4, location + x_position + 3); break; } } } void print_dot(int y, int x) { attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(y, x, " "); } void clear_freq_display(int y, int x) { attroff(A_STANDOUT); attron(modify_attr(COLOR_PAIR(C_LOG))); for (int i = 0; i < 5; ++i) { mvprintw(y + i, x, " "); } } tlf-1.4.0/src/autocq.h0000644000175000017500000000166713562576621011505 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef AUTOCQ_H #define AUTOCQ_H int auto_cq(void); #endif /* end of include guard: AUTOCQ_H */ tlf-1.4.0/src/lancode.c0000644000175000017500000002320513562576621011601 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Fred DH5FS * * 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 #include #include #include #include #include #include #include #include #include "err_utils.h" #include "lancode.h" #include "tlf.h" #include "tlf_curses.h" int lan_socket_descriptor; struct sockaddr_in lan_sin; int lan_bind_rc, lan_close_rc; ssize_t lan_recv_rc; long lan_save_file_flags; char lan_recv_message[256]; char lan_message[256]; char lan_logline[256]; unsigned int lan_sin_len; //-------------------------------------- int bc_socket_descriptor[MAXNODES]; ssize_t bc_sendto_rc; int bc_close_rc; int cl_send_inhibit = 0; char lanbuffer[255]; struct sockaddr_in bc_address[MAXNODES]; struct hostent *bc_hostbyname[MAXNODES]; /* host names and UDP ports to send notifications to */ char bc_hostaddress[MAXNODES][16]; char bc_hostservice[MAXNODES][16] = { [0 ... MAXNODES - 1] = { [0 ... 15] = 0 } }; char sendbuffer[256]; int nodes = 0; int node; int send_error_limit[MAXNODES]; //-------------------------------------- /* default port to listen for incomming packets and to send packet to */ char default_lan_service[16] = "6788"; /* lan port parsed from config */ int lan_port = 6788; int lan_active = 0; int send_error[MAXNODES]; int lan_mutex = 0; int send_packets[MAXNODES]; int recv_error; int recv_packets; int buflen; char talkarray[5][62]; freq_t node_frequencies[MAXNODES]; int lanqsos; char lastqsonr[5]; int highqsonr; int landebug = 0; long lantime; long timecorr; int time_master; char thisnode = 'A'; /* start with 'A' if not defined in logcfg.dat */ extern char backgrnd_str[]; //---------------------end lan globals -------------- int resolveService(const char *service) { struct servent *service_ent; service_ent = getservbyname(service, "udp"); int port = 0; if (service_ent != NULL) { port = ntohs(service_ent->s_port); } else if (strlen(service) > 0) { port = atoi(service); } if (port == 0) { port = atoi(default_lan_service); } return port; } int lanrecv_init(void) { if (lan_active == 0) return (1); sprintf(default_lan_service, "%d", lan_port); bzero(&lan_sin, sizeof(lan_sin)); lan_sin.sin_family = AF_INET; lan_sin.sin_addr.s_addr = htonl(INADDR_ANY); lan_sin.sin_port = htons(resolveService(default_lan_service)); lan_sin_len = sizeof(lan_sin); lan_socket_descriptor = socket(AF_INET, SOCK_DGRAM, 0); if (lan_socket_descriptor == -1) { syslog(LOG_ERR, "%s\n", "LAN: socket"); return (-1); } lan_bind_rc = bind(lan_socket_descriptor, (struct sockaddr *) &lan_sin, sizeof(lan_sin)); if (lan_bind_rc == -1) { syslog(LOG_ERR, "%s\n", "LAN: bind"); return (-2); } lan_save_file_flags = fcntl(lan_socket_descriptor, F_GETFL); lan_save_file_flags |= O_NONBLOCK; if (fcntl(lan_socket_descriptor, F_SETFL, lan_save_file_flags) == -1) { syslog(LOG_ERR, "%s\n", "trying non-blocking"); return (-3); } return (0); } int lan_recv_close(void) { if (lan_active == 0) return (-1); lan_close_rc = close(lan_socket_descriptor); if (lan_close_rc == -1) { syslog(LOG_ERR, "%s\n", "LAN: close call failed"); return (errno); } return (0); } int lan_recv(void) { if (lan_active == 0) return (-1); lan_recv_message[0] = '\0'; lan_recv_rc = recvfrom(lan_socket_descriptor, lan_recv_message, sizeof(lan_recv_message), 0, (struct sockaddr *) &lan_sin, &lan_sin_len); if (lan_recv_rc == -1 && errno != EAGAIN) { recv_error++; return (errno); } else if (lan_recv_rc == 0 || errno == EAGAIN) { /* no data */ errno = 0; /* clear the error */ } errno = 0; /* clear the error */ if (lan_recv_message[1] == CLUSTERMSG) cl_send_inhibit = 1; // this node does not send cluster info if (lan_recv_rc > 0) recv_packets++; strcpy(lan_message, lan_recv_message); if (lan_recv_rc > buflen) buflen = lan_recv_rc; return (0); } // ----------------send routines -------------------------- int lan_send_init(void) { if (lan_active == 0) return (1); for (node = 0; node < nodes; node++) { bc_hostbyname[node] = gethostbyname(bc_hostaddress[node]); if (bc_hostbyname[node] == NULL) { syslog(LOG_ERR, "%s\n", "LAN: gethostbyname failed"); return (-1); } bzero(&bc_address[node], sizeof(bc_address[node])); /* empty data structure */ bc_address[node].sin_family = AF_INET; memcpy(&bc_address[node].sin_addr.s_addr, bc_hostbyname[node]->h_addr, sizeof(bc_address[node].sin_addr.s_addr)); bc_address[node].sin_port = htons(resolveService(bc_hostservice[node])); syslog(LOG_INFO, "open socket: to %d.%d.%d.%d:%d\n", (ntohl(bc_address[node].sin_addr.s_addr) & 0xff000000) >> 24, (ntohl(bc_address[node].sin_addr.s_addr) & 0x00ff0000) >> 16, (ntohl(bc_address[node].sin_addr.s_addr) & 0x0000ff00) >> 8, (ntohl(bc_address[node].sin_addr.s_addr) & 0x000000ff) >> 0, ntohs(bc_address[node].sin_port)); bc_socket_descriptor[node] = socket(AF_INET, SOCK_DGRAM, 0); if (bc_socket_descriptor[node] == -1) { syslog(LOG_ERR, "%s\n", "LAN: socket call failed"); return (-1); } } return (0); } int lan_send_close(void) { if (lan_active == 0) return (-1); for (node = 0; node < nodes; node++) { bc_close_rc = close(bc_socket_descriptor[node]); if (bc_close_rc == -1) { syslog(LOG_ERR, "%s\n", "LAN: close call failed"); return (-1); } } return (0); } int lan_send(char *lanbuffer) { if (lan_active == 0) return (-1); for (node = 0; node < nodes; node++) { if (lanbuffer[0] != '\0') { bc_sendto_rc = sendto(bc_socket_descriptor[node], lanbuffer, 256, 0, (struct sockaddr *) &bc_address[node], sizeof(bc_address[node])); } if (bc_sendto_rc == -1) { if (send_error[node] >= (send_error_limit[node] + 10)) { TLF_LOG_INFO("LAN: send problem...!"); send_error_limit[node] += 10; } else send_error[node]++; } else send_packets[node]++; } lanbuffer[0] = '\0'; return (0); } /* ----------------- send lan message ----------*/ int send_lan_message(int opcode, char *message) { char sendbuffer[102]; sendbuffer[0] = thisnode; sendbuffer[1] = opcode; sendbuffer[2] = '\0'; strncat(sendbuffer, message, 98); if (opcode == CLUSTERMSG) { if (cl_send_inhibit == 0) { strcat(sendbuffer, "\n"); lan_send(sendbuffer); } } if (opcode == LOGENTRY) { sendbuffer[82] = '\0'; lan_send(sendbuffer); } if (opcode == TLFSPOT) { sendbuffer[82] = '\0'; lan_send(sendbuffer); } if (opcode == TLFMSG) { sendbuffer[82] = '\0'; lan_send(sendbuffer); } if (opcode == FREQMSG) { sendbuffer[10] = '\0'; lan_send(sendbuffer); } if (opcode == INCQSONUM) { strcat(sendbuffer, "\n"); lan_send(sendbuffer); } if (opcode == TIMESYNC) { sendbuffer[14] = '\0'; lan_send(sendbuffer); } if (opcode == QTCRENTRY) { strcat(sendbuffer, "\n"); sendbuffer[94] = '\0'; lan_send(sendbuffer); } if (opcode == QTCSENTRY) { strcat(sendbuffer, "\n"); sendbuffer[100] = '\0'; lan_send(sendbuffer); } if (opcode == QTCFLAG) { strcat(sendbuffer, "\n"); lan_send(sendbuffer); } return (0); } /* ----------------- send talk message ----------*/ void talk(void) { char talkline[61] = ""; mvprintw(LINES - 1, 0, backgrnd_str); mvprintw(LINES - 1, 0, "T>"); refreshp(); echo(); getnstr(talkline, 60); noecho(); strcat(talkline, "\n"); send_lan_message(TLFMSG, talkline); talkline[0] = '\0'; attron(COLOR_PAIR(C_HEADER)); mvprintw(LINES - 1, 0, backgrnd_str); refreshp(); } /* ----------------- send freq. message ----------*/ int send_freq(freq_t freq) { extern int bandinx; extern int trx_control; char fbuffer[8]; if (trx_control == 1) { sprintf(fbuffer, "%7.1f", freq / 1000.0); } else { switch (bandinx) { case 0: sprintf(fbuffer, " 160.0"); break; case 1: sprintf(fbuffer, " 80.0"); break; case 2: sprintf(fbuffer, " 40.0"); break; case 3: sprintf(fbuffer, " 30.0"); break; case 4: sprintf(fbuffer, " 20.0"); break; case 5: sprintf(fbuffer, " 17.0"); break; case 6: sprintf(fbuffer, " 15.0"); break; case 7: sprintf(fbuffer, " 12.0"); break; case 8: sprintf(fbuffer, " 10.0"); break; default: sprintf(fbuffer, " "); } } send_lan_message(FREQMSG, fbuffer); return (0); } /* ----------------- send time message ----------*/ int send_time(void) { extern int timeoffset; long now; char timebuffer[14]; now = (long)(time(0) + (timeoffset * 3600L)); sprintf(timebuffer, "%ld", now); strcat(timebuffer, " "); send_lan_message(TIMESYNC, timebuffer); return (0); } tlf-1.4.0/src/getctydata.c0000644000175000017500000001456413562576621012335 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Parse various call formats * Convert country data *--------------------------------------------------------------*/ #include #include #include #include #include #include "dxcc.h" #include "getpx.h" #include "globalvars.h" // Includes glib.h and tlf.h /* check for calls which have no assigned country and no assigned zone, * e.g. airborn mobile /AM or maritime mobile /MM */ int location_unknown(const char *call) { return g_regex_match_simple("/AM$|/MM$", call, (GRegexCompileFlags)0, (GRegexMatchFlags)0); } /* search for a full match of 'call' in the pfx table */ int find_full_match(const char *call) { int i, w; prefix_data *pfx; int pfxmax = prefix_count(); w = -1; for (i = 0; i < pfxmax; i++) { pfx = prefix_by_index(i); if (have_exact_matches && !pfx->exact) continue; if (strcmp(call, pfx->pfx) == 0) { w = i; break; } } return w; } /* search for the best mach of 'call' in pfx table */ int find_best_match(const char *call) { int bestlen = 0; int i, w; prefix_data *pfx; int pfxmax = prefix_count(); w = -1; for (i = 0; i < pfxmax; i++) { int l; pfx = prefix_by_index(i); if (pfx->exact) { if (strcmp(call, pfx->pfx) == 0) { w = i; break; } continue; } if (*pfx->pfx != call[0]) continue; l = strlen(pfx->pfx); if (l <= bestlen) continue; if (strncmp(pfx->pfx, call, l) == 0) { bestlen = l; w = i; } } return w; } /* replace callsign area (K2ND/4 -> K4ND) * * for stations with multiple digits (LZ1000) it replaces the last digit * (may be wrong) */ void change_area(char *call, char area) { int i; for (i = strlen(call) - 1; i > 0; i--) { if (isdigit(call[i])) { call[i] = area; break; } } } /* prepare and check callsign and look it up in dxcc data base * * returns index in data base or -1 if not found * if normalized_call ptr is not NULL retruns a copy of the normalized call * e.g. DL1XYZ/PA gives PA/DL1XYZ * caller has to free the copy after use */ int getpfxindex(char *checkcallptr, char **normalized_call) { char checkcall[17] = ""; char strippedcall[17] = ""; int w = 0, abnormal_call = 0; size_t loc; g_strlcpy(strippedcall, checkcallptr, 17); if (strstr(strippedcall, "/QRP") == (strippedcall + strlen(strippedcall) - 4)) /* drop QRP suffix */ strippedcall[strlen(strippedcall) - 4] = '\0'; /* go out if /MM, /AM or similar */ if (location_unknown(strippedcall)) strippedcall[0] = '\0'; strncpy(checkcall, strippedcall, 16); loc = strcspn(checkcall, "/"); if (loc != strlen(checkcall)) { /* found a '/' */ char checkbuffer[17] = ""; char call1[17]; char call2[17]; strncpy(call1, checkcall, loc); /* 1st part before '/' */ call1[loc] = '\0'; strcpy(call2, checkcall + loc + 1); /* 2nd part after '/' */ if (strlen(call2) < strlen(call1) && strlen(call2) > 1) { sprintf(checkcall, "%s/%s", call2, call1); abnormal_call = 1; loc = strcspn(checkcall, "/"); } if (loc > 3) { strncpy(checkbuffer, (checkcall + loc + 1), (strlen(checkcall) + 1) - loc); if (strlen(checkbuffer) == 1) checkcall[loc] = '\0'; loc = strcspn(checkcall, "/"); } if (loc != strlen(checkcall)) { if (loc < 5) checkcall[loc] = '\0'; /* "PA/DJ0LN/P */ else { /* DJ0LN/P */ strncpy(checkcall, checkcall, loc + 1); } } /* ------------------------------------------------------------ */ if ((strlen(checkbuffer) == 1) && isdigit(checkbuffer[0])) { /* /3 */ change_area(checkcall, checkbuffer[0]); } else if (strlen(checkbuffer) > 1) strcpy(checkcall, checkbuffer); } /* -------------check full call exceptions first...--------------------- */ if (abnormal_call == 1) { w = find_full_match(strippedcall); } else { w = find_best_match(strippedcall); } if (w < 0 && 0 != strcmp(strippedcall, checkcall)) { // only if not found in prefix full call exception list w = find_best_match(checkcall); } if (normalized_call != NULL) *normalized_call = strdup(checkcall); return w; } /* lookup dxcc cty number from callsign */ int getctynr(char *checkcall) { int w; w = getpfxindex(checkcall, NULL); if (w >= 0) return prefix_by_index(w)->dxcc_index; else return 0; /* no country found */ } /* lookup various dxcc cty data from callsign * * side effect: set up various global variables */ static int getctydata_internal(char *checkcallptr, bool get_country) { int w = 0, x = 0; char *normalized_call = NULL; w = getpfxindex(checkcallptr, &normalized_call); if (wpx == 1 || pfxmult == 1) /* needed for wpx and other pfx contests */ getpx(normalized_call); free(normalized_call); if (w >= 0) { x = prefix_by_index(w)->dxcc_index; sprintf(cqzone, "%02d", prefix_by_index(w) -> cq); sprintf(ituzone, "%02d", prefix_by_index(w) -> itu); } if (itumult != 1) strcpy(zone_export, cqzone); else strcpy(zone_export, ituzone); countrynr = x; if (prefix_by_index(w) -> continent != NULL) g_strlcpy(continent, prefix_by_index(w) -> continent, 3); else g_strlcpy(continent, dxcc_by_index(countrynr) -> continent, 3); if (get_country) return (x); return w; } int getctydata(char *checkcallptr) { return getctydata_internal(checkcallptr, true); } int getctydata_pfx(char *checkcallptr) { return getctydata_internal(checkcallptr, false); } tlf-1.4.0/src/addarea.h0000644000175000017500000000165013562576621011562 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef ADDAREA_H #define ADDAREA_H int add_callarea(void); #endif /* ADDAREA_H */ tlf-1.4.0/src/messagechange.c0000644000175000017500000000642513562576621012773 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ /* ------------------------------------------------------------ * Change CW messages * last change: 25.2.02 11:50 *--------------------------------------------------------------*/ #include #include #include #include "clear_display.h" #include "globalvars.h" #include "nicebox.h" // Includes curses.h #include "tlf.h" #include "ui_utils.h" #include "writeparas.h" int message_change(int x) { extern char backgrnd_str[]; extern char message[][80]; int j; int count; int mes_length; int bufnr = 0; char printbuf[80]; char *msg; clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } nicebox(14, 3, 2, 60, "Enter message (F1-12, C, S)"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); while (1) { bufnr = toupper(key_get()); if ((bufnr == 'C') || (bufnr == 'S')) break; if (bufnr >= KEY_F(1) && bufnr <= KEY_F(12)) break; } if (bufnr == 'S') { bufnr = 12; } else if (bufnr == 'C') { bufnr = 13; } else { bufnr = bufnr - KEY_F(1); } if (trxmode == DIGIMODE) msg = digi_message[bufnr]; else msg = message[bufnr]; printbuf[0] = '\0'; strncat(printbuf, msg, strlen(msg) - 1); mvprintw(15, 4, "%s", printbuf); refreshp(); mvprintw(16, 4, ""); msg[0] = '\0'; echo(); getnstr(printbuf, 60); noecho(); if (trxmode == DIGIMODE) strcat(printbuf, " "); else strcat(printbuf, "\n"); mes_length = strlen(printbuf); if (mes_length < 2) { clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } if (trxmode == DIGIMODE) { strcat(printbuf, " "); free(digi_message[bufnr]); digi_message[bufnr] = strdup(printbuf); } else strcpy(message[bufnr], printbuf); return (1); } for (count = 0; count <= mes_length; count++) { if ((printbuf[count] > 96) && (printbuf[count] < 123)) printbuf[count] = printbuf[count] - 32; } if (trxmode == DIGIMODE) { strcat(printbuf, " "); free(digi_message[bufnr]); digi_message[bufnr] = strdup(printbuf); } else strcpy(message[bufnr], printbuf); mvprintw(12, 29, ""); refreshp(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } writeparas(); return (0); } tlf-1.4.0/src/cabrillo_utils.c0000644000175000017500000001515013562576621013203 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012-2013 Thomas Beierlein * 2017 Ervin Hegedus * * 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 */ /* ------------------------------------------------------------ * cabrillo utils file * *--------------------------------------------------------------*/ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include #include #include #include "cabrillo_utils.h" /* conversion table between tag name in format file and internal tag */ struct tag_conv tag_tbl[] = { { "FREQ", FREQ }, { "MODE", MODE }, { "DATE", DATE }, { "TIME", TIME }, { "MYCALL", MYCALL }, { "HISCALL", HISCALL }, { "RST_S", RST_S }, { "RST_R", RST_R }, { "EXC_S", EXC_S }, { "EXCH", EXCH }, { "EXC1", EXC1 }, { "EXC2", EXC2 }, { "EXC3", EXC3 }, { "EXC4", EXC4 }, { "TX", TX }, { "QTCRCALL", QTCRCALL }, { "QTCHEAD", QTCHEAD }, { "QTCSCALL", QTCSCALL }, { "QTC", QTC } }; /* translate item name into a tag */ enum tag_t translate_item_name(char *name) { int i; /* lookup name in tag list */ for (i = 0; i < sizeof(tag_tbl) / sizeof(struct tag_conv); i++) { if (strcmp(tag_tbl[i].item_name, name) == 0) { /* and return corresponding tab */ return tag_tbl[i].tag; } } /* if not found return NO_ITEM tag */ return NO_ITEM; } /** free cabrillo format description */ void free_cabfmt(struct cabrillo_desc *desc) { int i; if (desc == NULL) return; if (desc->item_array) { for (i = 0; i < desc->item_array->len; i++) { g_free(g_ptr_array_index(desc->item_array, i)); } g_ptr_array_free(desc->item_array, TRUE); } if (desc->qtc_item_array) { for (i = 0; i < desc->qtc_item_array->len; i++) { g_free(g_ptr_array_index(desc->qtc_item_array, i)); } g_ptr_array_free(desc->qtc_item_array, TRUE); } if (desc->name) g_free(desc->name); g_free(desc); } /* parse item describing one entry * * has to be in following format: item,length * - item to print (date, time, call, ...) * - max length */ struct line_item *parse_line_entry(char *line_entry) { struct line_item *item; gchar **parts; enum tag_t tag; item = g_malloc(sizeof(struct line_item)); parts = g_strsplit(line_entry, ",", 2); if (g_strv_length(parts) == 2) { tag = translate_item_name(parts[0]); item->tag = tag; item->len = atoi(parts[1]); } else { /* type is NO_ITEM */ item->tag = NO_ITEM; } g_strfreev(parts); return item; } /** read cabrillo format description * * Try to read cabrillo format description for given format from * file and return a describing structure. * * \param filename File to read description from * \param format Name of the format to read * \return Pointer to a structure describing the format * (NULL if file or format not found or not readable) */ struct cabrillo_desc *read_cabrillo_format(char *filename, char *format) { GKeyFile *keyfile; GError *error = NULL; gchar **list; gsize nrstrings; struct cabrillo_desc *cabdesc; int i; keyfile = g_key_file_new(); if (!g_key_file_load_from_file(keyfile, filename, G_KEY_FILE_NONE, &error)) { g_error_free(error); /* file does not exist or is wrongly formatted */ g_key_file_free(keyfile); return NULL; } /* check if 'format' defined in file */ if (g_key_file_has_group(keyfile, format) == FALSE) { /* group not found */ g_key_file_free(keyfile); return NULL; } /* read needed keys */ list = g_key_file_get_string_list(keyfile, format, "QSO", &nrstrings, &error); if (error && error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND) { /* if not found -> stop processing as that key is mandatory */ g_error_free(error); g_key_file_free(keyfile); return NULL; } /* construct new format descriptor and fill it in */ cabdesc = g_new(struct cabrillo_desc, 1); cabdesc->name = g_strdup(format); cabdesc->item_array = g_ptr_array_new(); cabdesc->item_count = nrstrings; cabdesc->qtc_item_array = NULL; cabdesc->qtc_item_count = 0; for (i = 0; i < nrstrings; i++) { struct line_item *item; item = parse_line_entry(list[i]); if (item) { /* add only well formatted entries */ g_ptr_array_add(cabdesc->item_array, item); } } if (cabdesc->item_array->len != nrstrings) { /* not all entries are ok -> stop processing */ free_cabfmt(cabdesc); g_strfreev(list); g_key_file_free(keyfile); return NULL; } g_strfreev(list); /* read needed QTC keys */ list = g_key_file_get_string_list(keyfile, format, "QTC", &nrstrings, &error); if (error && error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND) { /* if not found -> stop processing as that key is optional */ g_error_free(error); } else { /* construct new format descriptor and fill it in */ cabdesc->qtc_item_array = g_ptr_array_new(); cabdesc->qtc_item_count = nrstrings; for (i = 0; i < nrstrings; i++) { struct line_item *item; item = parse_line_entry(list[i]); if (item) { /* add only well formatted entries */ g_ptr_array_add(cabdesc->qtc_item_array, item); } } if (cabdesc->qtc_item_array->len != nrstrings) { /* not all entries are ok -> stop processing */ free_cabfmt(cabdesc); g_strfreev(list); g_key_file_free(keyfile); return NULL; } } g_strfreev(list); /* possible further entries in format specification may contain information * about allowed items for different categories: * CONTEST, CATEGORY-OPERATOR, CATEGORY_TRANSMITTER, CATEGORY-POWER, * CATEGORY-ASSISTED, CATEGORY-BAND, CATEGORY-MODE, C-STATION, C-TIME. * C-OVERLAY */ g_key_file_free(keyfile); /* return parsed cabrillo format description */ return cabdesc; } tlf-1.4.0/src/initial_exchange.c0000644000175000017500000000744013562576621013472 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 -2004 Rein Couperus * * 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 */ /* ------------------------------------------------------------------------------ * initial exchange.c * * makes a linked list of calls and exchanges from comma separated file * *-------------------------------------------------------------------------------*/ #include #include #include #include #include "initial_exchange.h" #include "startmsg.h" /** * Free linked list of all allocated entries pointed * to by 'head'. */ void free_ie_list(struct ie_list *head) { struct ie_list *next; while (head) { next = head->next; free(head); head = next; } } struct ie_list *make_ie_list(char *file) { FILE *fp; char inputbuffer[91]; char *loc; struct ie_list *ie_listhead = NULL; struct ie_list *new; char *token; int linectr = 0; if ((fp = fopen(file, "r")) == NULL) { showmsg("Cannot find initial exchange file"); return NULL; } showstring("Using initial exchange file", file); while (fgets(inputbuffer, 90, fp) != NULL) { linectr++; g_strstrip(inputbuffer); // strip leading/trailing whitespace /* skip empty and comment lines */ if (inputbuffer[0] == '#' || inputbuffer[0] == 0) { continue; } if (strlen(inputbuffer) > 80) { /* line to long */ char msg[80]; free_ie_list(ie_listhead); fclose(fp); sprintf(msg, "Line %d: too long", linectr); showmsg(msg); return NULL; } loc = strchr(inputbuffer, ','); if (loc == NULL) { /* no comma found */ char msg[80]; free_ie_list(ie_listhead); fclose(fp); sprintf(msg, "Line %d: no comma found", linectr); showmsg(msg); return NULL; } // comma found, parse the line new = malloc(sizeof(struct ie_list)); if (new == NULL) { free_ie_list(ie_listhead); fclose(fp); showmsg("Out of memory"); return NULL; } *loc = '\0'; /* split the string into call and exchange */ token = strtok(inputbuffer, " \t"); /* callsign is first token delimited by whitespace */ if (token == NULL || strtok(NULL, " \t")) { /* 0 or >1 token before comma */ char msg[80]; free(new); free_ie_list(ie_listhead); fclose(fp); sprintf(msg, "Line %d: 0 or more than one token before comma", linectr); showmsg(msg); return NULL; } strncpy(new->call, token, MAX_CALL_LENGTH); new->call[MAX_CALL_LENGTH] = '\0'; /* proper termination */ // prepare exchange field char *xchg = loc + 1; loc = strchr(xchg, ','); if (loc != NULL) { *loc = '\0'; /* terminate it at the 2nd comma */ } g_strstrip(xchg); // strip leading/trailing whitespace strncpy(new->exchange, xchg, MAX_IE_LENGTH); new->exchange[MAX_IE_LENGTH] = '\0'; /* proper termination */ /* prepend new entry to existing list */ new->next = ie_listhead; ie_listhead = new; } fclose(fp); return ie_listhead; } tlf-1.4.0/src/parse_logcfg.h0000644000175000017500000000206713562576621012637 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * * 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 */ #ifndef PARSE_LOGCFG_H #define PARSE_LOGCFG_H enum { PARSE_OK, PARSE_ERROR, PARSE_CONFIRM }; int read_logcfg(void); int parse_configfile(FILE *fp); int parse_logcfg(char *inputbuffer); #endif // PARSE_LOGCFG_H tlf-1.4.0/src/time_update.c0000644000175000017500000001124013562576621012470 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2003 Rein Couperus * 2011-2012 Thomas Beierlein * * 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 */ /* ------------------------------------------------------------ * * Update time * * also updates windows every second *--------------------------------------------------------------*/ #include #include "bandmap.h" #include "clusterinfo.h" #include "freq_display.h" #include "get_time.h" #include "getwwv.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "lancode.h" #include "printcall.h" #include "showscore.h" #include "tlf_curses.h" #include "ui_utils.h" /** broadcast to LAN * * every 120s broadcast frequency via LAN and * act as time master if allowed */ void broadcast_lan(void) { extern int time_master; extern freq_t freq; static int frcounter = 0; frcounter++; if (frcounter >= 60) { // every 60 calls frcounter = 0; if (lan_active != 0) { send_freq(freq); if (time_master == 1) send_time(); } } } /** update band, date and time */ void update_line(char *timestr) { extern struct tm *time_ptr; static int daysecs = 0; char time_buf[40] = ""; attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); strncpy(time_buf, timestr, 8); mvaddstr(12, 0, band[bandinx]); mvprintw(12, 17, time_buf); daysecs++; if (daysecs >= 60) { // update the date 1x per minute daysecs = 0; get_time(); strftime(time_buf, 60, "%d-%b-%y", time_ptr); mvprintw(12, 7, time_buf); } } /** show frequency and frequency memory if rig control is active */ void show_freq(void) { extern int showfreq; extern int showscore_flag; extern freq_t mem; extern int trx_control; extern freq_t freq; attron(modify_attr(COLOR_PAIR(C_LOG))); if (trx_control == 1) { if ((showfreq == 0) || (showscore_flag == 1)) mvprintw(13, 67, " TRX: %7.1f", freq / 1000.0); if (mem > 0.0) mvprintw(14, 67, " MEM: %7.1f", mem / 1000.0); else mvprintw(14, 67, " "); if ((showfreq == 1) && (showscore_flag == 0)) { freq_display(); } } else { mvprintw(13, 67, " "); mvprintw(14, 67, " "); } } void time_update(void) { extern struct tm *time_ptr; extern char qsonrstr[]; extern int bandinx; extern int this_second; extern int system_secs; extern int miniterm; char time_buf[11]; int currentterm = 0; static int s = 0; static int m = 0; static int bm_timeout = 0; static int oldsecs = -1; /* trigger immediate update */ get_time(); this_second = time_ptr->tm_sec; /* seconds */ system_secs = time_ptr->tm_min * 60 + time_ptr->tm_sec; if (this_second != oldsecs) { /* do it every second */ oldsecs = this_second; if (wpx == 1) { if (minute_timer > 0) minute_timer--; } show_freq(); bandmap_age(); /* age bandmap spots every second */ clusterinfo(); /* update cluster and bandmap display */ /* write bandmap spots to file every 10s */ bm_timeout = (bm_timeout + 1) % 10; if (bm_timeout == 0) { bmdata_write_file(); } s = (s + 1) % 2; if (s > 0) { /* every 2 seconds */ strftime(time_buf, 10, "%H:%M:%S", time_ptr); time_buf[5] = '\0'; if ((time_buf[6] == '1') && (m >= 30)) { m = 0; getwwv(); printcall(); } else { m++; } currentterm = miniterm; miniterm = 0; broadcast_lan(); update_line(time_buf); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(7, 0, logline0); mvprintw(8, 0, logline1); mvprintw(9, 0, logline2); mvprintw(10, 0, logline3); mvprintw(11, 0, logline4); mvprintw(13, 0, " "); attron(COLOR_PAIR(C_WINDOW)); mvprintw(12, 23, qsonrstr); printcall(); showscore(); /* update score window every 2 seconds */ miniterm = currentterm; } } } tlf-1.4.0/src/bandmap.h0000644000175000017500000000751313562576621011607 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2011, 2015 Thomas Beierlein * * 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 */ #ifndef _BANDMAP_H #define _BANDMAP_H #include #include "tlf.h" typedef struct { char *call; int freq; /* freq in Hz */ char mode; short band; char node; unsigned int timeout;/* time (in seconds) left in bandmap */ char dupe; /* only used internal in bm_show() */ int cqzone; /* CQ zone */ int ctynr; /* Country nr */ char *pfx; /* prefix */ } spot; #define SPOT_NEW (bm_config.livetime) #define SPOT_NORMAL (SPOT_NEW * 95) / 100 #define SPOT_OLD (SPOT_NEW * 2) / 3 typedef struct { short allband; short allmode; short showdupes; short skipdupes; short livetime; short onlymults; } bm_config_t; extern bm_config_t bm_config; enum { CB_DUPE = 8, CB_OLD, CB_NORMAL, CB_NEW, CB_MULTI }; /* * write bandmap spots to a file */ void bmdata_write_file(); void bm_init(); void bm_add(char *s); void bm_menu(); /** check if call is new multi * * \return true if new multi */ int bm_ismulti(char *call, spot *data, int band); /** check if call is a dupe * * \return true if is dupe */ int bm_isdupe(char *call, int band); /** add a new spot to bandmap data * \param call the call to add * \param freq on which frequency heard * \param reason - new cluster spot * - local announcement (Ctrl-A) * - own cluster announcement (Ctrl-B) * - just worked in S&P */ void bandmap_addspot(char *call, freq_t freq, char node); /* * - if call already on that band and mode replace old entry with new one and * set age to 0 otherwise add it to collection * - if other call on same frequency (with some tolerance) replace it and set * age to 0 * - round all frequencies from cluster to 100 Hz, remember all other exactly * but display only rounded to 100 Hz - sort exact */ void bandmap_age(); /* * - go through all entries * + decrement timeout * + set state to new, normal, aged or dead * + if dead -> drop it from collection */ void bandmap_show(); /* * display depending on filter state * - all bands on/off * - all mode on/off * - dupes on/off * * If more entries to show than place in window, show around current frequency * * mark entries according to age, source and worked state. Mark new multis * - new brigth blue * - normal blue * - aged black * - worked small caps * - new multi underlined * - self announced stations * small preceeding letter for repoting station * * maybe show own frequency as dashline in other color * (maybee green highlighted) * - highligth actual spot if near its frequency * * Allow selection of one of the spots (switches to S&P) * - Ctrl-G as known * - '.' and cursor plus 'Enter' * * '.' goes into map, shows help line above and supports * - cursormovement * - 'ESC' leaves mode * - 'Enter' selects spot * - 'B', 'D', 'M' switches filtering for band, dupes and mode on or off. */ spot *bandmap_lookup(char *partialcall); spot *bandmap_next(unsigned int upwards, freq_t freq); void get_spot_on_qrg(char *dest, freq_t freq); #endif tlf-1.4.0/src/searchlog.h0000644000175000017500000000247113562576621012152 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef SEARCHLOG_H #define SEARCHLOG_H #include #define CALLMASTER_SIZE 16000 extern GPtrArray *callmaster; #define CALLMASTERARRAY(n) ((char *) g_ptr_array_index(callmaster, n)) #define CALLMASTER_DEFAULT "callmaster" extern char *callmaster_filename; int load_callmaster(void); void searchlog(char *searchstring); void InitSearchPanel(void); void ShowSearchPanel(void); void HideSearchPanel(void); void OnLowerSearchPanel(int x, char *str); #endif /* SEARCHLOG_H */ tlf-1.4.0/src/stoptx.h0000644000175000017500000000163713562576621011547 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 */ #ifndef STOPTX_H #define STOPTX_H int stoptx(void); #endif /* STOPTX_H */ tlf-1.4.0/src/changefreq.c0000644000175000017500000000432613562576621012302 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * 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 "freq_display.h" #include "time_update.h" #include "tlf_curses.h" #include "ui_utils.h" #include "gettxinfo.h" void change_freq(void) { extern freq_t freq; extern int trx_control; int brkflg = 0; if (trx_control == 0) return; curs_set(0); while (1) { freq_display(); if (get_outfreq() == 0) { // last request has been processed, check keys again int x = key_poll(); int deltaf = 0; switch (x) { // Up arrow, raise frequency by 100 Hz. case KEY_UP: { deltaf = 100; break; } // Down arrow, lower frequency by 100 Hz. case KEY_DOWN: { deltaf = -100; break; } // Right arrow, raise frequency by 20 Hz. case KEY_RIGHT: { deltaf = 20; break; } // Left arrow, lower frequency by 20 Hz. case KEY_LEFT: { deltaf = -20; break; } // , raise frequency by 500 Hz. case KEY_PPAGE: { deltaf = 500; break; } // , lower frequency by 500 Hz. case KEY_NPAGE: { deltaf = -500; break; } // no key case ERR: { break; } // any other key: exit frequency change mode default: { brkflg = 1; break; } } if (deltaf) { set_outfreq(freq + deltaf); } } if (brkflg) { break; } time_update(); freq_display(); usleep(100 * 1000); } curs_set(1); } tlf-1.4.0/INSTALL0000644000175000017500000000326313562576621010274 00000000000000Tlf now comes with automake and autoconf. Starting with TLF-1.0.0 you need pkg-config too. Build Dependencies ------------------ Building TLF requires some other components to be installed before. It depends on * the _Hamlib_ library for controlling your radio, * _ncurses_ and _tinfo_ for text screen handling, * the _XMLRPC_C_ library for communication with programs like _FlDigi_ and * _Glib-2.0_ for supporting C functions. If you are using a distribution of the _Debian_ family make sure to install also the needed header files with ---- sudo apt install libglib2.0-dev libhamlib-dev libncurses5-dev libtinfo-dev libxmlrpc-core-c3-dev ---- While not a strict build dependency installing the following packages is helpful too: * _sox_ for audio signal handling during SSB contests and * _xplanet_ which allows you to see the latest DX spots on the globe. Quick Install ------------- The easiest way to install tlf is by typing: ---- ./configure make make install ---- If you want to compile tlf from the repo, please do a ---- autoreconf --install ---- before the above commands. By default, tlf will install into /usr/local/bin, together with the shell-scripts from the scripts directory. Data files will install into /usr/local/share/tlf. If you want to change any of these paths, you can do this with the configure script too, e.g. './configure --prefix=/usr --datadir=/usr/share' will install tlf and scripts into /usr/bin, datafiles into /usr/share/tlf. If you are doing a lot of contesting in digimodes using Fldigi there is support for reading the audio frequency via xmlrpc. Make sure to install XMLRPC-c and configure tlf with ---- ./configure --enable-fldigi-xmlrpc ---- tlf-1.4.0/share/0000755000175000017500000000000013562576670010425 500000000000000tlf-1.4.0/share/cabrillo.fmt0000644000175000017500000000217713562576621012647 00000000000000# cabrillo format description for different contests # used for ARRL and CQ contests, RDXC, Oceania DX Contest, AP Sprint and others [UNIVERSAL] QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;RST_S,3;EXC_S,6;HISCALL,13;RST_R,3;EXCH,6 # used for CQWW (mostly as above but includes number of used TX) [CQWW] QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;RST_S,3;EXC_S,6;HISCALL,13;RST_R,3;EXCH,6;TX,1 # used for EUSPRINT contest [EUSPRINT] QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;EXC_S,14;HISCALL,13;EXCH,14 # for ARRL Sweep Stakes [ARRL-SS] QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,10;EXC_S,13;HISCALL,10;EXCH,13 # used for CW Open contest by CWops [CWO] QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;EXC_S,14;HISCALL,13;EXC1,4;EXC2,9 # used for FOC Marathon [FOCMARATHON] QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;RST_S,3;EXC_S,6;HISCALL,13;RST_R,3;EXCH,6 # used for WAE [WAEDC] QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;RST_S,3;EXC_S,6;HISCALL,13;RST_R,3;EXCH,6 QTC=FREQ,5;MODE,2;DATE,10;TIME,4;QTCRCALL,13;QTCHEAD,10;QTCSCALL,13;QTC,23 # used for TESLA [TESLA] QSO=FREQ,5;MODE,2;DATE,10;TIME,4;MYCALL,13;RST_S,3;EXC_S,10;HISCALL,13;RST_R,3;EXCH,10tlf-1.4.0/share/Makefile.in0000644000175000017500000003471213562576653012422 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ax_append_flag.m4 \ $(top_srcdir)/macros/ax_cflags_warn_all.m4 \ $(top_srcdir)/macros/ax_pthread.m4 \ $(top_srcdir)/macros/ax_require_defined.m4 \ $(top_srcdir)/macros/ax_with_curses.m4 \ $(top_srcdir)/macros/ax_with_curses_extra.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(tlfdir)" DATA = $(tlf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CMOCKA_CFLAGS = @CMOCKA_CFLAGS@ CMOCKA_LIBS = @CMOCKA_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ HAMLIB_CFLAGS = @HAMLIB_CFLAGS@ HAMLIB_LIBS = @HAMLIB_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBM_LIB = @LIBM_LIB@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXMLRPC_CLIENT_LIB = @LIBXMLRPC_CLIENT_LIB@ LIBXMLRPC_LIB = @LIBXMLRPC_LIB@ LIBXMLRPC_UTIL_LIB = @LIBXMLRPC_UTIL_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_LIBS = @PANEL_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TLF_FILES = cabrillo.fmt callmaster cty.dat logcfg.dat arrl10m_mults \ arrldx_mults arrlsections ea_sections paccmults spdxmults \ ssamults help.txt darcmults tlfdir = $(pkgdatadir) tlf_DATA = $(TLF_FILES) EXTRA_DIST = $(TLF_FILES) CLEANFILES = *~ all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu share/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-tlfDATA: $(tlf_DATA) @$(NORMAL_INSTALL) @list='$(tlf_DATA)'; test -n "$(tlfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(tlfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(tlfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tlfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(tlfdir)" || exit $$?; \ done uninstall-tlfDATA: @$(NORMAL_UNINSTALL) @list='$(tlf_DATA)'; test -n "$(tlfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(tlfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(tlfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-tlfDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-tlfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip install-tlfDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-tlfDATA .PRECIOUS: Makefile # 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: tlf-1.4.0/share/logcfg.dat0000644000175000017500000000766513562576621012312 00000000000000RULES=cqww # ################################# # # # TLF-LOGCFG.DAT v. 1.1.0 # # # # Uncomment the options you # # want to enable. See tlf.doc # # for a description of the # # options. You can keep diff- # # erent versions for different # # contests. I keep separate # # configuration files for # # each contest. If you enable # # more than 1 mutually exclu- # # sive options, the last one # # will be efective. # # # # # ################################# # #CTCOMPATIBLE # ################################# # # # EDITOR # # # ################################# # EDITOR=joe #EDITOR=vi #EDITOR=e3 #EDITOR=mcedit # ################################# # # # CALL # # # ################################# # CALL=NOCALL # # ################################# # # # Time offset from UTC # # # ################################# # TIME_OFFSET=0 TIME_MASTER # ################################# # # # LAN PORT # # # ################################# # use 'addnode' only for OTHER nodes !! # #ADDNODE=10.0.0.115 #ADDNODE=192.168.1.2 # THISNODE=A # #LAN_DEBUG # ################################# # # # KEYERPORT # # # ################################# # NETKEYER #NETKEYERPORT=6789 #NETKEYERHOST=127.0.0.1 # ################################# # # # KEYERPARAMETERS # # # ################################# #---speed (6 ... 60 wpm) CWSPEED=30 #---weight (-5 ... 5 ms) WEIGHT=1 #---cq delay (in 0,5 s) CQDELAY=10 #---txdelay (ms) TXDELAY=2 #---sidetone (200...800, 0 = mute) CWTONE=800 ################################# # # # PACKET INTERFACE # # # ################################# # Cluster: PI4TUE (Eindhoven) #TELNETHOST=131.155.192.179 #TELNETPORT=8000 # automatic login ############### #CLUSTERLOGIN=yourcall # write log to disk ############# #CLUSTER_LOG # # use tnc instead of telnet ##### #TNCPORT=/dev/ttyS0 #TNCPORT=/dev/ttyUSB1 #TNCSPEED=2400 # # get clusterinfo from network ## #FIFO_INTERFACE # ################################# # # # RADIO CONTROL # # (comment out if not present) # # Rigmodel = Hamlib index, here # # for ten tec OMNI VI # ################################# # #RADIO_CONTROL #RIGMODEL=351 #RIGSPEED=2400 #RIGPORT=/dev/ttyS0 #RIGPORT=/dev/ttyUSB2 #RIGPTT # #SSBMODE # #RIT_CLEAR # #SHOW_FREQUENCY # ################################# # # # INFORMATION WINDOWS # # # ################################# # #CLUSTER BANDMAP=S,900 # skipdupes, 900s livetime #FILTER # SCOREWINDOW # CHECKWINDOW ################################# # # # CHECK PARTIAL FUNCTION # # # ################################# # PARTIALS #USEPARTIALS # ################################# # # # CONDX (info for muf calc.) # # # ################################# # SUNSPOTS=30 SFI=100 # ################################# # # # Misc commands # # # ################################# # No automatic 'qso before msg' NOB4 # # No automatic cq #NOAUTOCQ # # Left/right arrows don't change band... #NO_BANDSWITCH_ARROWKEYS # # Marker file for Xplanet MARKERS=tlfmarkers # #############END################# tlf-1.4.0/share/arrldx_mults0000644000175000017500000000027513562576621013010 00000000000000AL AZ AR CA CO CT DE FL GA ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NC ND NE NV NH NJ NM NY OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY DC NB NS QC ON MB SK AB BC NT NF LB YT PE NU tlf-1.4.0/share/paccmults0000644000175000017500000000005113562576621012253 00000000000000DR FL FR GD GR LB NB NH OV UT ZH ZL -end-tlf-1.4.0/share/ea_sections0000644000175000017500000000022013562576621012552 00000000000000A AB AL AV B BA BI BU C CA CC CE CO CR CS CU GC GI GR GU H HU IB J L LE LO LU M MA ML MU NA O OU P PO S SA SE SG SO SS T TE TF TO V VA VI Z ZA tlf-1.4.0/share/Makefile.am0000644000175000017500000000040513562576621012374 00000000000000TLF_FILES = cabrillo.fmt callmaster cty.dat logcfg.dat arrl10m_mults \ arrldx_mults arrlsections ea_sections paccmults spdxmults \ ssamults help.txt darcmults tlfdir = $(pkgdatadir) tlf_DATA = $(TLF_FILES) EXTRA_DIST = $(TLF_FILES) CLEANFILES = *~ tlf-1.4.0/share/darcmults0000644000175000017500000011046313562576621012267 00000000000000DA0C,F69 DA0CA,N41 DA0CCC,D23 DA0FFR,X19 DA0I,I08 DA0JUH,JUH DA0LSW,BBT12 DA0SAR,Q18 DA0SL,X14 DA0T,E38 DA0TTO,OTTO1K DA0X,C09 DA0YL,YL DA1813L,1813L DA1BTP,K51 DA1SP,K31 DA2A,O32 DA2MORSE,MORSE DA30FDB,T19 DA3T,S22 DA9L,G11 DB0AI,F49 DB0EJ,F43 DB0OK,I12 DB100AWPB,N14 DB1APP,U14 DB1BAC,I18 DB1BC,G01 DB1BKA,S64 DB1CP,R33 DB1GEO,C33 DB1HGV,H05 DB1JC,R25 DB1MKS,C11 DB1MUC,C25 DB1RL,P02 DB1RLE,P50 DB1RUL,A22 DB1SMB,P61 DB1SMW,P61 DB1VQ,Q13 DB1WT,R01 DB1YV,N29 DB2AY,Z83 DB2B,H20 DB2BJT,I49 DB2LS,E39 DB2TX,P12 DB2WD,K04 DB3BW,I12 DB3BX,I12 DB3LO,W02 DB3RB,P51 DB3RH,U19 DB3TRB,C25 DB4MZ,C12 DB4RG,B12 DB4SP,P05 DB4VO,Q05 DB5SB,X17 DB5WL,H35 DB6EDR,I11 DB6FO,Z25 DB6KT,S44 DB6LB,K27 DB6MC, DB6MG,C18 DB6MK,C18 DB6NT,B23 DB6VPP,Q05 DB6ZU,F62 DB7BU,I11 DB7GE,P10 DB7HJ,E31 DB7HL,X29 DB7KC,G09 DB7MA,M11 DB7MM,U03 DB7QJ,N01 DB7SH,E29 DB7TF,F62 DB8AH,L06 DB8WK,I16 DB9EX,R11 DB9MM,B18 DB9NFB,O55 DB9RZ,C15 DC0AD,I09 DC0ASP,P61 DC0FHB,G25 DC0NE,F27 DC0VZ,Q05 DC1DB,L16 DC1FO,F42 DC1GD,B26 DC1JAG,G45 DC1LEX,C12 DC1MBB,C12 DC1MER,C18 DC1MKR,T19 DC1MPP,C12 DC1NNN,B39 DC1SK,X06 DC2AC,B02 DC2CB,N29 DC2CC,E13 DC2CL,C25 DC2CT,L15 DC2CW,Y18 DC2CWP,Y18 DC2DC,I54 DC2DL,O04 DC2LS,E34 DC2TL,L03 DC2TOM,C07 DC2VE,Q05 DC2WK,K54 DC2YY,N41 DC2ZL,H42 DC2ZP,D08 DC3PH,C28 DC3RJ,B25 DC3SW,P15 DC3TC,U13 DC4A,B06 DC4GC,A48 DC4MF,P05 DC4ON,H48 DC4RU,U08 DC4UN,H35 DC4UW,D23 DC4UX,A22 DC5DM,O55 DC6CX,R09 DC6FS,C11 DC6KL,Z19 DC6RI,U08 DC6UA,A22 DC7CCC,D23 DC7CCCP,D23 DC7KM,D04 DC7UG,I49 DC7UL,E10 DC8KP,C25 DC8QT,F27 DC8RU,U14 DC8SG,F27 DC8WPA,K46 DC9AM,E09 DC9BG,I28 DC9MA,C13 DC9PI,R01 DC9XU,I21 DC9ZP,G10 DD0UKW,O02 DD0VS,S09 DD1A,A25 DD1EE,G43 DD1IWX,F22 DD1JN,B10 DD1JSN,Y22 DD1KJ,G47 DD1LC,E30 DD1LD,C12 DD1LI,M11 DD1LIP,M11 DD1MAT,T09 DD1OP,H04 DD1UDW,S05 DD1WKS,Q21 DD2CK,F76 DD2CW,T02 DD2D,F27 DD2ML,C15 DD2PI,K40 DD2PZ,C01 DD2TC,A18 DD2TT, DD2VO,Q04 DD3AL,H46 DD3D,F73 DD3JS, DD3SF,Q11 DD3WW,X36 DD4BY,I29 DD4JC,I09 DD4TS,E12 DD5A,V10 DD5AJ,G25 DD5AW,O27 DD5FZ,C12 DD5KG,C18 DD5M,C01 DD5MA,G17 DD5RS,S04 DD5T,N01 DD5XL,F32 DD6CC,S45 DD6UBC,D21 DD7BW,I43 DD7DAC,O12 DD7DACP,O12 DD7LM,M05 DD7NT,S06 DD7ZT,F22 DD8EI,R25 DD8JJ,R31 DD8SM,F39 DD8YG,B02 DD8ZX,F27 DD9DAG,Y14 DD9HK,E33 DD9NT,F06 DD9OR,H44 DD9WG,K04 DD9WL,K33 DF0A,T01 DF0AGC,CW DF0AR,C18 DF0BG,G19 DF0BT,D04 DF0BV,C25 DF0BW,Y18 DF0CI,X12 DF0CK,X32 DF0CQ, DF0DA,K34 DF0DC,E18 DF0DG,I37 DF0DNT,DNT DF0DOX,P03 DF0DRK,F49 DF0DX,N01 DF0EFG,N01 DF0ESA,X11 DF0FU,F06 DF0FY,E31 DF0GC,S57 DF0GSN,RDP DF0HO,I17 DF0IA,N38 DF0IC,I41 DF0IZ,M05 DF0JEN,X22 DF0KF,F72 DF0M,C18 DF0MO,C11 DF0MU,N16 DF0NG,I43 DF0PDF,I51 DF0PT,I38 DF0SX,P51 DF0TX,E38 DF0UK,A24 DF0VK,O47 DF0WBS,X14 DF0WE,P47 DF0WH,I16 DF0WSB,R33 DF1AI,C35 DF1AN,V11 DF1ASG,Z90 DF1BT,I20 DF1BV,I11 DF1DT,O40 DF1DX,O16 DF1GU,T13 DF1HE,I38 DF1HF,E21 DF1HPK,M30 DF1IAQ,P05 DF1IAV,A36 DF1IC,A19 DF1JC,R09 DF1JM,R25 DF1JSF,Y22 DF1LON,R11 DF1LONP,R11 DF1LX,M15 DF1MC,D13 DF1MM,I18 DF1OE,H48 DF1OLS,H41 DF1PAW,O55 DF1PU,Z11 DF1QJ,I28 DF1RD,U15 DF1RL,M35 DF1RLP,M35 DF1SX,Z46 DF1SZ,P40 DF1XC,Y24 DF1XM,S30 DF1ZA,F27 DF2AD,H51 DF2AJ,P51 DF2AP,X10 DF2BR,I18 DF2CB,C18 DF2CD,P39 DF2CH,O04 DF2CK,S21 DF2CQ,C25 DF2DD,O04 DF2FM,F36 DF2FR,O16 DF2GB,Q05 DF2GL,I12 DF2HL,E09 DF2HP,E33 DF2IAG,A19 DF2IAX,A24 DF2IY,A24 DF2KD,G22 DF2KK,G11 DF2KX,C04 DF2LH,E12 DF2MM,N04 DF2NU,C18 DF2OK,H23 DF2PH,F20 DF2QZ,N20 DF2RG,U18 DF2RY,U18 DF2SD,L06 DF2UA,A02 DF2UD,K17 DF2WF,G01 DF3AX,H43 DF3CU,C06 DF3DJ,O02 DF3FS,F62 DF3FX,R25 DF3GY,A04 DF3HD,E03 DF3IR,K14 DF3IS,A36 DF3MA,S03 DF3MC,C03 DF3OL,H24 DF3OW,H35 DF3RL,U15 DF3SM,M14 DF3SS,P05 DF3TE,G46 DF3VM,Q05 DF3XZ,E13 DF3YG,D06 DF3ZR,F54 DF4AJ,H04 DF4AK,H04 DF4BA,I28 DF4BM,C01 DF4ER,L02 DF4IP,A02 DF4IU,A19 DF4LS,M07 DF4MAA,C25 DF4PD,G23 DF4PS,A36 DF4TD,P09 DF4UM,P07 DF4WC,F39 DF4WU,K50 DF4XF,S48 DF4XG,E33 DF4XX,E38 DF4ZL,F16 DF4ZY,P24 DF5A,V11 DF5AN,H09 DF5AU,X22 DF5BM, DF5BX,I37 DF5EM,L05 DF5FF,F05 DF5FH,H37 DF5FL,F27 DF5HD,E29 DF5KB,Y22 DF5LR,U08 DF5LW,M03 DF5MA,C26 DF5QT,N34 DF5RF,F43 DF5RFP,F43 DF5TR,P05 DF5VF,Z19 DF5VO,Q21 DF5WA,K07 DF5WI,K41 DF5WW,K50 DF60JFA,60FA DF6AD,H01 DF6CZ,T01 DF6DBF,O08 DF6EH,U14 DF6FR,F17 DF6JF,L16 DF6MU,C12 DF6QP,N43 DF6RI,U15 DF6RK,F22 DF6VU,N49 DF6WE,L30 DF6XP,N06 DF6YC,N04 DF6ZY,F05 DF7BR,Z36 DF7DJ,O47 DF7EF,R29 DF7GG,V11 DF7HD,E13 DF7IW,K09 DF7JC,R02 DF7JL,L26 DF7JU,L06 DF7KHK,R25 DF7LS,M09 DF7MQ,T21 DF7MZ,P12 DF7NS,B02 DF7OA,H01 DF7OGO,H55 DF7RG,C15 DF7SX,Z46 DF7SXP,Z46 DF7TT,V06 DF7WL,Z11 DF7YT,N43 DF7ZQ,F27 DF7ZS,F27 DF8AA,X37 DF8AE,N01 DF8DT,O38 DF8DX,H44 DF8IT,P50 DF8KN,C30 DF8LJM,E12 DF8SB,P07 DF8TI,A48 DF8TM,P50 DF8TX,P07 DF8TY,P14 DF8UO,A17 DF8VV,Q11 DF8WB,K36 DF8XC,N01 DF9AL,S42 DF9CY,M01 DF9DH,O05 DF9DM,Z38 DF9EA,B02 DF9FS,F09 DF9GH, DF9GR,T01 DF9IK,A36 DF9IX,A36 DF9JD,A34 DF9KLK,M05 DF9KR,G22 DF9LJ,M15 DF9MP,T09 DF9OB,H42 DF9OO,H01 DF9PX,C12 DF9QO,N08 DF9RC,U15 DF9RD,U08 DF9RJ,U14 DF9TS,C30 DF9WB,K34 DF9WOY,S01 DF9XI,N52 DF9YC,N44 DF9ZP,F54 DG0AM,X23 DG0CC,S54 DG0DG,S27 DG0DRF,S28 DG0EF,S53 DG0KS,V02 DG0LFG,S41 DG0OCZ,X31 DG0OM,X23 DG0OSK,X37 DG0OSL,X08 DG0PF,X30 DG0UFA,A07 DG0WT,X35 DG1ATN,X34 DG1BAR,S31 DG1BHA,Y16 DG1BOR,F39 DG1CM,T19 DG1CMZ,S46 DG1DRS,S24 DG1DTL,S02 DG1EA,R33 DG1EH,Z04 DG1HJB,E05 DG1HUD,F51 DG1HUQ,W14 DG1IU,A36 DG1KTS,G01 DG1LE,C11 DG1LS,M13 DG1MDQ,T01 DG1MFT,C01 DG1MHC,T19 DG1MHZ,T19 DG1MNB,C06 DG1NAU,B03 DG1NAUP,B03 DG1NI,I12 DG1NPJ,B13 DG1NSE,B26 DG1OJ,H05 DG1OW,Z84 DG1ROL,C12 DG1RTV,D16 DG1RUG,O16 DG1RZD,Y02 DG1SAC,P07 DG1VL,S06 DG1VR,S24 DG1XG,E05 DG1XOP,W13 DG1YBN,N44 DG1YBO,N16 DG1YFF,F76 DG2BARP,I37 DG2BAT,I02 DG2BHB, DG2DCI,O52 DG2EBW,R09 DG2FDE,P51 DG2GG,A34 DG2HN,I17 DG2HSI,W33 DG2LO,M35 DG2MEL,C16 DG2MHW,C18 DG2MKV,C26 DG2NBN,B26 DG2NMF,B06 DG2NMH,B08 DG2RSO,Y04 DG2SCZ,P05 DG2SRL,S36 DG2ST,P05 DG2STM,P05 DG2YIR,H04 DG3BFA,I17 DG3DAT,O10 DG3EX,R29 DG3FAW,F62 DG3FBL,F49 DG3FCT,F36 DG3FCTP,F36 DG3FEHP,F42 DG3FK,F27 DG3HAN,E34 DG3IS,O36 DG3MDE,T02 DG3MKB,C26 DG3MR,T09 DG3NCZ,B37 DG3NEC,B14 DG3SBM,P01 DG3UAW,A36 DG3UH,S07 DG4BCL,E34 DG4DDA,O43 DG4FAD,F22 DG4HZ,E22 DG4MB,I49 DG4MKG,C25 DG4MNA,T21 DG4NBI,DVB DG4NFI,B05 DG4R,Y08 DG4RO,F76 DG4UF,S21 DG4UFP,S22 DG4VD,S20 DG4VN,S07 DG4YGW, DG5AAP,I15 DG5BRE,Y21 DG5DBL,G07 DG5DJ,T19 DG5HFS,E34 DG5HFSP,E34 DG5KR,G01 DG5LAC,E38 DG5LM,V10 DG5MHJ,C18 DG5MLA,T08 DG5MLAP,T08 DG5MLH,C12 DG5NEW,B26 DG5NFF,B13 DG5OBB,H01 DG5SBK,P08 DG5SFW,P50 DG5SM,A36 DG5TX,W31 DG5VV,S10 DG5WIN,D16 DG5WJP,C18 DG5XJ,E05 DG6BU,I38 DG6DAF,F47 DG6DCB, DG6HD,V23 DG6IMR,Y26 DG6ITP,Y27 DG6LAR,M35 DG6LAU,M35 DG6MBS,O02 DG6OAG,H62 DG6OG,H37 DG6SA,R24 DG6SAQ,P47 DG6SCP,P31 DG6SYL,V20 DG6TOM,C01 DG6UAI,A36 DG6VC,Q21 DG6YDJ,N47 DG7BBP,I04 DG7DBR,O01 DG7DNL,S04 DG7EE,S54 DG7HL,T15 DG7LAB,M23 DG7MAQ,C06 DG7MAQP,C06 DG7RO,C06 DG7SCB,P05 DG7TG,M11 DG7YBT,N47 DG8AM,U08 DG8DBQ,O12 DG8DP,C25 DG8FAY,F27 DG8HJ,E15 DG8HJP,F11 DG8KAJP,G09 DG8LG,M15 DG8MFV,C09 DG8MFVP,C09 DG8NCO,B39 DG8NEL,B25 DG8OP,H42 DG8VE,Q08 DG8YFM,I21 DG8YGZ,N47 DG9AK,Z21 DG9AW,T01 DG9AY,X23 DG9DQ,O32 DG9FFP,F16 DG9KAF,Z60 DG9KBE,G10 DG9NEF,Z64 DG9NW,B25 DG9SEH,P47 DG9VH,Q02 DG9YCA,N01 DG9YIH,N16 DG9ZA,F16 DH0DK,S27 DH0EAV,L30 DH0F,B09 DH0FAB,Z05 DH0GDS,P30 DH0GHU,C07 DH0JAE,Y28 DH0JC,L16 DH0KAA,G37 DH0MA,C25 DH0YAH,I21 DH1AHLP,C12 DH1BBH,I20 DH1BUZ,Y18 DH1CH,R25 DH1DA,P30 DH1DM,S07 DH1DX,X28 DH1FM,S07 DH1FR,F34 DH1FY,I41 DH1GAP,A25 DH1HJL,V14 DH1HWG,W33 DH1JY,R29 DH1MS,M23 DH1NAI,B23 DH1ND,E05 DH1PAL,G46 DH1PS,N20 DH1PSP,N20 DH1RJ,S04 DH1TS,G54 DH1TST,Y11 DH1TW,P31 DH1UZ,P37 DH1VY,Q05 DH1WNO,T21 DH2AAK,F10 DH2AX,Y07 DH2BR,N05 DH2DAM,O32 DH2FW,P29 DH2IF,E33 DH2JX,L16 DH2KS,P19 DH2MAY,C12 DH2MIC,C01 DH2MS,A16 DH2PAF,F11 DH2PL,S28 DH2RTW,R13 DH2SRM,P47 DH2UAK,Y26 DH2UHE,Y26 DH2URF, DH3BP,Z21 DH3CW,S04 DH3FEN,Y28 DH3KBI,X23 DH3LK,E19 DH3MAY,C02 DH3MS,T19 DH3RD,K09 DH3SR,U04 DH3WO,A07 DH4GK,V22 DH4JQ,R25 DH4LH,M11 DH4PSG,N20 DH4YAQ,N28 DH5AO,X14 DH5AU,X25 DH5EAM,R33 DH5FAS,F39 DH5FASP,F39 DH5HV,L06 DH5KLI,D23 DH5NBK,B38 DH5WB,X30 DH5YM,S07 DH6AD,X31 DH6ARM,X40 DH6BAI,I28 DH6BH,I54 DH6DAO,O17 DH6DL,V07 DH6IAZ,A19 DH6ICE,Y28 DH6KM,E34 DH6KW,F39 DH6MB,N29 DH6PF,G09 DH6RM,F27 DH6WS,N47 DH6YMC,N41 DH7AEQ,D24 DH7AHK,D06 DH7AMF,Y18 DH7FA,Y07 DH7FFE,F27 DH7IF,A06 DH7KU,C28 DH7LF,M11 DH7RD,F05 DH7SAP,B02 DH7TNO,C01 DH8BAT,I56 DH8BQA,Y19 DH8BQAM,Y19 DH8DAPP,O27 DH8FAP,F17 DH8GV,I30 DH8HD,E38 DH8IAB,A24 DH8IAT,A02 DH8IJ,N01 DH8LAR,M09 DH8LAW,M09 DH8LWN,S35 DH8MS,R01 DH8NAS,B39 DH8RAJ,U19 DH8SA,V15 DH8SL,K11 DH8VH,Q21 DH8VV,B25 DH8WE,X23 DH8WEP,X23 DH8WKA,X35 DH8WLA,X24 DH8WM,X03 DH9BL,R25 DH9DX,I58 DH9FAXM,F22 DH9GCD,A16 DH9HAK,E05 DH9KFCP,S54 DH9NBU,B10 DH9SB,P40 DJ0AH,T11 DJ0GM,C22 DJ0IF,E28 DJ0LC,F20 DJ0MY,F39 DJ0OT,C09 DJ0QN,C01 DJ0RU,L03 DJ0SP,N53 DJ0TF,G09 DJ0TP,I14 DJ0VZ,G22 DJ0YZ,P06 DJ1AA,H27 DJ1AR,G03 DJ1BWH,O36 DJ1CC,C10 DJ1CW,I38 DJ1DH,E33 DJ1FZ,F16 DJ1GK,G25 DJ1HF,G53 DJ1JAY,X37 DJ1JM,F62 DJ1LB,E31 DJ1LBF,M02 DJ1MD,C16 DJ1MM,C15 DJ1NI,I12 DJ1OJ,C25 DJ1RK,X17 DJ1SL,H48 DJ1SO,P06 DJ1TM,E36 DJ1TT,S48 DJ1TU,P07 DJ1TW,M05 DJ1VQ,A09 DJ1WJ,B23 DJ1WK,G02 DJ1WL,K36 DJ1YF,E03 DJ1YFK,S07 DJ1ZH,P07 DJ1ZU,U14 DJ2AX,X20 DJ2BC,V22 DJ2DA,S02 DJ2FR,C06 DJ2GM,C12 DJ2GMS,P20 DJ2GMSP,P20 DJ2HD,Z17 DJ2IA,F43 DJ2IE,A24 DJ2IT,C11 DJ2JS,O06 DJ2KH,H04 DJ2MRK,G10 DJ2MX,C26 DJ2NJ,L14 DJ2NR,B39 DJ2QV,C30 DJ2RG,W12 DJ2SEA,G01 DJ2SL,F20 DJ2SN,E32 DJ2SX,V23 DJ2XC,V22 DJ2YA,O39 DJ2YE,R09 DJ3AK,H24 DJ3AX,X17 DJ3BO,I04 DJ3CQ,C06 DJ3CS,X04 DJ3EF,S44 DJ3GE,G25 DJ3HJ,A33 DJ3HW,H04 DJ3JD,H03 DJ3JO,K36 DJ3KR,H34 DJ3LE,M15 DJ3OWY,D25 DJ3RA,Y22 DJ3SEP,M02 DJ3SN,P47 DJ3TD,V11 DJ3TY,M02 DJ3WE,C01 DJ3WEK,X31 DJ3XA,V01 DJ3XD,H31 DJ3XG,Z85 DJ3XK,E31 DJ3XM,E35 DJ3YI,F27 DJ3YX,C30 DJ4AK,P08 DJ4DN,O05 DJ4EJ,A14 DJ4EY,Z92 DJ4FZ,M06 DJ4GS,V14 DJ4HH,B23 DJ4JZ,K18 DJ4KW,E34 DJ4KWP,E34 DJ4LN,P05 DJ4MF,S54 DJ4MG,N47 DJ4MH,I38 DJ4MM,W04 DJ4MZ,C12 DJ4PI,A36 DJ4PK,P02 DJ4SO,M33 DJ4TG,R09 DJ4UF,G01 DJ4WM,H40 DJ4WT,K06 DJ4XD,Y09 DJ4YJ,U14 DJ5AN,I08 DJ5AQ,O16 DJ5BWD,O02 DJ5BX,F42 DJ5CL,C25 DJ5CLM,C25 DJ5EA,L06 DJ5EJ,C09 DJ5GI,M09 DJ5GKP,A05 DJ5HB,H04 DJ5HD,E05 DJ5IO,B23 DJ5IR,A24 DJ5IW,C27 DJ5JK,A07 DJ5KB,N01 DJ5KW,R25 DJ5KX,G09 DJ5KZ,C14 DJ5LY,M12 DJ5MN,C25 DJ5MO,I43 DJ5MW,T13 DJ5MY,C25 DJ5MYP,C25 DJ5NN,S18 DJ5NQ,B23 DJ5OW,S29 DJ5QE,N20 DJ5QV,F62 DJ5TD,N01 DJ5TT,C25 DJ5UL,G44 DJ5ULP,G44 DJ5VI,U15 DJ5VP,I17 DJ5WS,N01 DJ5YI,H12 DJ5YL,Y24 DJ5ZV,R17 DJ60DXMB,60DXMB DJ6APA,X39 DJ6AU,H44 DJ6BQ,I18 DJ6BS,I30 DJ6DP,H13 DJ6EJ,E02 DJ6ET,L06 DJ6EU,DVM DJ6FO,K01 DJ6GK,F15 DJ6GR,H03 DJ6IP,C01 DJ6JB,E05 DJ6JH,A53 DJ6KS,F62 DJ6OL,H55 DJ6OV,A27 DJ6OZ,E18 DJ6QK,T21 DJ6QO,M10 DJ6QT,F62 DJ6RA,U14 DJ6RS,U14 DJ6SE,R25 DJ6ST,R12 DJ6T,C30 DJ6TB,C16 DJ6TK,M03 DJ6UP,G06 DJ6XH,C30 DJ6XK,C01 DJ6XV,N38 DJ6ZM,C30 DJ7A,B20 DJ7AL,S05 DJ7AO,E39 DJ7AT,B20 DJ7AW,C25 DJ7BA,T19 DJ7EC,L06 DJ7EO, DJ7FM,W08 DJ7GP,H24 DJ7IK,F39 DJ7JC,L05 DJ7JE,F06 DJ7JI,H32 DJ7JM,P47 DJ7LB,H04 DJ7LI,C11 DJ7MH,I38 DJ7OQ,H32 DJ7R,U15 DJ7RC,L15 DJ7RD,P50 DJ7TW,P20 DJ7UD,A24 DJ7UO,R10 DJ7VX,R25 DJ7WB,B02 DJ7WG,V13 DJ7WW,M11 DJ7XU,C01 DJ7YP,N01 DJ7YT,M11 DJ7ZZ,K02 DJ8BD,O04 DJ8BP,F13 DJ8DA,C11 DJ8EI,G09 DJ8ES,Z71 DJ8EW,C25 DJ8GL,I53 DJ8LD,C01 DJ8LG,E05 DJ8MWB,C28 DJ8OG,F62 DJ8PJ,O55 DJ8QA,P61 DJ8RS,V06 DJ8RX,C13 DJ8SB,G17 DJ8SR,L14 DJ8UB,P05 DJ8WK,O16 DJ8XW,C18 DJ9A,K36 DJ9AL,B13 DJ9AO,X22 DJ9BM,G55 DJ9BX,V15 DJ9CB,F20 DJ9DZ,N06 DJ9FC,M02 DJ9HX,P50 DJ9IE, DJ9JY,L30 DJ9KH,I17 DJ9LX,M01 DJ9MH,B10 DJ9MT,M11 DJ9OZ,D01 DJ9RO,U15 DJ9RR,E03 DJ9SN,C01 DJ9UJ,B14 DJ9UN,A46 DJ9VA,K36 DJ9WB,N16 DJ9XK,A02 DK0A,A02 DK0AN,B02 DK0ASP,P61 DK0BER,Y14 DK0BM,C04 DK0BN,K15 DK0BO,O40 DK0CN,T19 DK0CW,F05 DK0D,T21 DK0DAN,I55 DK0DWK,G46 DK0DX,W37 DK0ED,C25 DK0EE,C26 DK0EMV,EMV DK0FFO,Y22 DK0FI,I09 DK0FJ,P48 DK0FR,A05 DK0FT,Q08 DK0GHC,W30 DK0GSK,FPFG09 DK0GYB,W33 DK0HAT,E13 DK0HATP,E13 DK0HF,N08 DK0HN,N20 DK0IU,E34 DK0IW,C07 DK0KG,40KTL DK0LK,N22 DK0LU,150LU DK0MM,F39 DK0MN,C12 DK0NA,B23 DK0NDR,E15 DK0OG,C15 DK0PC,M11 DK0PH,E28 DK0PI,E15 DK0PO,O53 DK0PRP,E10 DK0PS,K09 DK0QQ,N16 DK0SM,H35 DK0SU,P11 DK0TEU,E29 DK0V,C01 DK0VA,C01 DK0VH,R32 DK0VLP,H24 DK0VW,C02 DK0W,B24 DK0WL,C30 DK0WM,X40 DK0XB,S50 DK0XTP,L12 DK0XX,F49 DK0YLO,YLO DK150RB,P51 DK1AD,H56 DK1AUP,X05 DK1AW,X36 DK1AX,P61 DK1CO,V11 DK1DKE,P24 DK1DU,F12 DK1EI,K07 DK1FD,F32 DK1FT,P06 DK1GG,E18 DK1GO,T21 DK1HJ,A04 DK1HW,H29 DK1II,I08 DK1IP,E34 DK1IZ,M05 DK1JU,C11 DK1KC,B10 DK1KCP,B10 DK1KH,C12 DK1LC,P19 DK1LRS,E36 DK1MF,Q07 DK1MFI,T21 DK1MM,Z46 DK1NO,P29 DK1OM,H02 DK1OP,C01 DK1OR,W04 DK1PL,F76 DK1QH,N01 DK1QO,Z65 DK1RV,O16 DK1TF,S10 DK1TR,C01 DK1TRP,C01 DK1TS,F76 DK1TUX,B13 DK1VFA,Y07 DK1VG,O55 DK1WB,H24 DK1WER,Z33 DK1WI,O16 DK1WU,G17 DK1WZ,X36 DK1YY,R17 DK20KTL,X20 DK2AB,S07 DK2AJ,W33 DK2AT,F76 DK2BE,Z31 DK2CB,Y26 DK2CC,V22 DK2CF,Z92 DK2CX,C26 DK2DL,C25 DK2DQ,O02 DK2EE,B08 DK2EU,R09 DK2FG,N05 DK2GZ,A36 DK2JP,Y19 DK2KM,H47 DK2KT,I53 DK2MA,F38 DK2MB,Q11 DK2MC,B26 DK2MT,N42 DK2MU,C09 DK2NE,B13 DK2NG,W06 DK2OY,M15 DK2PH,N47 DK2PZ,C01 DK2QA,C18 DK2RMP,Y41 DK2RO,B19 DK2RT,A01 DK2TC,G08 DK2TG,Y11 DK2UMK,S27 DK2WU,U14 DK2WV,C09 DK2WW,F20 DK2YI,N34 DK2YL,Q05 DK2ZJ,I28 DK2ZO,Z17 DK3A,E19 DK3AX,B18 DK3BK,Z87 DK3BT,F06 DK3CC,F54 DK3CW,F05 DK3CWP,F05 DK3DM,O03 DK3DUA,S05 DK3FB,O43 DK3GI,B40 DK3GP,S12 DK3GX,D10 DK3HV,R06 DK3IP,F76 DK3LM,Y37 DK3LT,E39 DK3OI,C11 DK3PM,V02 DK3QN,T19 DK3QNP,T19 DK3QZ,L03 DK3RA,V10 DK3RP,N12 DK3RW,F07 DK3SR,P05 DK3T,N61 DK3TNA,Y11 DK3UL,E34 DK3UO,D23 DK3W,W37 DK3WA,K23 DK3WG,Y22 DK3WJ,X22 DK3WM,F73 DK3WN,Z21 DK3WW,Y24 DK3XC,S36 DK3YD,C12 DK3YDP,C12 DK40AHLEN,N34 DK4A,R17 DK4AA,C01 DK4BM,I23 DK4BY,I30 DK4CU,O12 DK4DE,H56 DK4DJ,N47 DK4DS,O10 DK4EF,F68 DK4G,Y26 DK4HH,V28 DK4IO,A36 DK4IS,A09 DK4JM,L18 DK4JT,R29 DK4JV,E09 DK4LI,M15 DK4LX,F06 DK4M,C12 DK4MO,C25 DK4MX,X35 DK4OWW,H62 DK4PL,S05 DK4QK,H04 DK4QT,N01 DK4REX,N29 DK4RL,Z91 DK4SC,P05 DK4US,K06 DK4VF,M27 DK4VW,M15 DK4VY,E20 DK4WA,Y37 DK4WF,S29 DK4WO,Z14 DK4WW,Y24 DK4YJ,C12 DK55ZAB,55ZAB DK5AF,Z38 DK5AN,H19 DK5BO,Z43 DK5BS,I07 DK5CF,I11 DK5CS,Z63 DK5D,O49 DK5DC,DVO DK5DQ,O32 DK5E,N01 DK5EQ,O27 DK5EZ,R29 DK5FT,I18 DK5GT,C25 DK5HF,E05 DK5IM,W05 DK5IR,A22 DK5JG,R01 DK5JM,L07 DK5KMA,X33 DK5LO,M11 DK5LOP,M11 DK5LP,R25 DK5M,X24 DK5MB,C25 DK5MV,C25 DK5NAD,B13 DK5OA,H03 DK5ONP,N47 DK5OS,N06 DK5PD,K04 DK5QN,N02 DK5RK,W35 DK5RO,D20 DK5TX,C12 DK5WN,X17 DK5WO,G01 DK5XG,E22 DK5XO,E28 DK5ZX,V11 DK6AC,H24 DK6ACP,H24 DK6AH,A24 DK6AN,H19 DK6AO,I28 DK6AR,H09 DK6AS,H24 DK6AY,H41 DK6BA,N47 DK6BT,Z02 DK6CB,C02 DK6CQ,C25 DK6EA,L15 DK6ER,C25 DK6HA,E31 DK6HAP,E31 DK6ITM,Y43 DK6KN,F27 DK6NC,B22 DK6NF,F15 DK6NJ,B10 DK6OK,M32 DK6OL,O27 DK6PW,Y06 DK6QW,L03 DK6RF,U20 DK6SP,C25 DK6TE,P07 DK6TM,R09 DK6TV,T07 DK6UC,W21 DK6UCP,W21 DK6UO,Q07 DK6VCO,I49 DK6WL,C26 DK6XZ,A24 DK6YM,O43 DK6YMM,O43 DK7AC,H46 DK7AN,W35 DK7AO,X22 DK7BI,Z43 DK7BY,I30 DK7C,D06 DK7CH,C04 DK7EM,L16 DK7FCP,F42 DK7FP,L05 DK7GH,A05 DK7HBS,X40 DK7HP,E31 DK7JQ,R25 DK7JQM,R25 DK7KD,G43 DK7LA,M28 DK7LE,M09 DK7LV,I25 DK7M,G54 DK7MCX,C10 DK7MCXM,C10 DK7MR,C16 DK7MV,C28 DK7MW,F11 DK7NB,B20 DK7OM,V20 DK7PA,W37 DK7RF,U15 DK7SO,P05 DK7TM,P51 DK7VW,Q10 DK7XH,K25 DK7ZH, DK7ZT,F15 DK8AF,B26 DK8AP,H22 DK8AX,F10 DK8BZ,C18 DK8CB,N29 DK8CX,Y28 DK8EY,R09 DK8FA,F17 DK8HE,H13 DK8IJ,A24 DK8IJP,A24 DK8IP,A24 DK8KL,G22 DK8LQ,M02 DK8MZ,C30 DK8NI,B35 DK8NT,B27 DK8NW,B02 DK8OL,M19 DK8PX,K07 DK8RE,Y43 DK8SX,P06 DK8UE,G22 DK8VD,K48 DK8WG,F69 DK8XX,R25 DK8ZB,F54 DK8ZZ,K07 DK9AR,P07 DK9BW,I38 DK9CN,C01 DK9HE,E34 DK9HF,E34 DK9HN,E33 DK9IP,A24 DK9IV,C11 DK9KC,G06 DK9KE,G17 DK9KW,N40 DK9KWP,N40 DK9LB,N47 DK9LJ,E12 DK9MH,C18 DK9MW,C15 DK9NM,B22 DK9OV,C28 DK9OY,H32 DK9PY,K04 DK9TF,P07 DK9TN,Z06 DK9UMA,F49 DK9VA,Q11 DK9VC,Q05 DK9VZ,F27 DK9ZE,F66 DK9ZQ,F36 DLF4GFT, DLHB9AYZ, DLPA3EYCP, DLSP3LPG,L04 DLW6ZBA,F62 DL0ABK,X29 DL0ABL,X40 DL0ABW,B02 DL0AD,G09 DL0AG,N43 DL0ANA,S48 DL0AON,D27 DL0ARN,X10 DL0AT,E13 DL0AUE,S45 DL0AVH,D06 DL0BAS,Y14 DL0BBQP,R14 DL0BI,N01 DL0BL,A02 DL0BMW,C09 DL0BQ,F02 DL0BV,H03 DL0C,Y13 DL0CS,M15 DL0CW,I53 DL0DA,CW DL0DBR,V06 DL0DEF,C29 DL0DG,L02 DL0DIX,X20 DL0DKH,D26 DL0DZ,L04 DL0EB,P05 DL0EJ,F43 DL0EKO,Y13 DL0EL,I03 DL0ER,L05 DL0ERZ,S14 DL0ESA,F42 DL0ESAP,F42 DL0ET,A24 DL0EW,Q11 DL0FA,H07 DL0FFF,K34 DL0FH,F17 DL0FM,F05 DL0FOR,Y27 DL0FTL,S27 DL0FU,C28 DL0GD,H04 DL0GEL,S22 DL0GEO,L03 DL0GER,K23 DL0GL,L03 DL0GMA,GMA DL0GRH,S18 DL0GS,Q01 DL0GTH,X17 DL0HAM,D25 DL0HM,Z07 DL0HN,P05 DL0HNP,P05 DL0HOT,S58 DL0HTW,S01 DL0HW,E12 DL0IA,O02 DL0II,R09 DL0IR,T08 DL0IS,O11 DL0ISM,C32 DL0IT,Q02 DL0ITP,Q02 DL0JBB,N54 DL0JE,Y37 DL0KAC,KA DL0KD,Z59 DL0KR,T05 DL0KU,O12 DL0KV,G43 DL0KWH,Y07 DL0LBS,X23 DL0LBSP,X23 DL0LD,N04 DL0LG,E05 DL0LK,E03 DL0LO,I07 DL0LSW,Y28 DL0LU,80LU DL0MAG,W05 DL0MB,A26 DL0MBG,X16 DL0MCM,MCM DL0MER,W21 DL0MFL,MF DL0MFX,MF DL0MGB,Z85 DL0MI,N12 DL0ML,P37 DL0MRR,S65 DL0NM,U10 DL0NO,E12 DL0NOP,E12 DL0NP,Y10 DL0OEK,OEKU DL0OF,F23 DL0OMR,P51 DL0OS,I12 DL0P,Y08 DL0PHG,1225PHG DL0PN,M23 DL0PS,N14 DL0QW,I38 DL0RCP,S38 DL0RD,L16 DL0RH,E22 DL0RM,K56 DL0RSF,K27 DL0RSH,M27 DL0RST,B02 DL0RUS,C01 DL0SA,C18 DL0SAX,20RDS DL0SLG,S50 DL0SM,B14 DL0SN,O16 DL0SP,D06 DL0SWN,BUGA DL0SX,M13 DL0SXP,M13 DL0TE,BMF20 DL0TS,F27 DL0TUM,C12 DL0U,U15 DL0UA,G01 DL0UM,F15 DL0UTW,I56 DL0VV,V07 DL0VX,N49 DL0WA,N21 DL0WAE,N02 DL0WH,A20 DL0WJ,K11 DL0WM,HT12 DL0WN,F20 DL0WOB,VFL09 DL0WZ,GS11KT DL0XM,S41 DL0XR,XRAY DL0XS,50DHH DL0XTP,N44 DL0XX,R09 DL0YL,G46 DL0YLD,YLD DL0YLG,YLG DL0YLN,YLN DL0YLS,YLS DL0ZI,S24 DL0ZZ,I21 DL150BH,G09 DL1630Y,L16 DL1A,C30 DL1AP,C30 DL1AAAP,H10 DL1AAZ,H34 DL1AEN,I12 DL1AGS,W17 DL1AH,I19 DL1AKL,X28 DL1AKN,Y17 DL1AKP,X19 DL1AKU,X31 DL1ALF,X23 DL1ALN,X06 DL1ALX,T06 DL1AMH,W29 DL1AMQ,X22 DL1AN,A19 DL1ANT,S42 DL1ANZ,X08 DL1AOB,X16 DL1AOP,Y24 DL1APQ,X21 DL1APX,X31 DL1AQN,X07 DL1AQU,X36 DL1AQUP,X36 DL1ARD,X23 DL1ARJ,X28 DL1ARS,P36 DL1ASA,F02 DL1ASF,X26 DL1ASH,X26 DL1ATR,L16 DL1ATZ,X23 DL1AVK,X37 DL1AW,X09 DL1AWB,X19 DL1AWC,X31 DL1AXB,X31 DL1AXC,K27 DL1AXJ,X46 DL1AXX,O47 DL1AYU,X23 DL1AZA,S41 DL1AZI,Z83 DL1AZK,X23 DL1BA,E29 DL1BDK,I55 DL1BEX,I09 DL1BFR,I33 DL1BFT,I28 DL1BI,O46 DL1BJA,I53 DL1BKK,I39 DL1BKT,I55 DL1BRU,P49 DL1BSH,F08 DL1BSN,Y21 DL1BUG,Y18 DL1BUT,Y22 DL1BWU,Y14 DL1BYL,L11 DL1BYZ,C25 DL1BZA,Y22 DL1CJP,R18 DL1CW,P51 DL1CWI,L30 DL1DAW,O47 DL1DBH,O38 DL1DBR,O17 DL1DES,O16 DL1DF,F68 DL1DFP,Z03 DL1DKB,O16 DL1DLFP,G23 DL1DN,G01 DL1DPN,S04 DL1DQE,S04 DL1DQF,S28 DL1DQW,S04 DL1DQY,S07 DL1DRA,S04 DL1DSW,S04 DL1DTC,N26 DL1DTF,S27 DL1DTL,S01 DL1DUO,S07 DL1DVE,S21 DL1DVN,S24 DL1DWI,S05 DL1DWR,S27 DL1DXA,S07 DL1DXF,S28 DL1DXL,S06 DL1EAG,R09 DL1EAL,R04 DL1EFW,R10 DL1EHG,R22 DL1EHR,R01 DL1EIC,L02 DL1EICP,L02 DL1EIP,R22 DL1EJA,L06 DL1EK,R25 DL1EKCP,Z59 DL1EKM,R31 DL1EKO,R11 DL1EL,F41 DL1ELY,L24 DL1EOT,Q13 DL1ET,L10 DL1FAA,X06 DL1FAC,M02 DL1FAR,F20 DL1FLO,U01 DL1FMG,F52 DL1FMK,F49 DL1FW,G27 DL1FY,C25 DL1GBQ,Z49 DL1GDS,P36 DL1GKC,A48 DL1GMEP,K38 DL1GO,C12 DL1GOR,Y08 DL1GRT,P43 DL1GTC,A48 DL1GWW,P29 DL1HAA,N22 DL1HBD,E33 DL1HBL,E19 DL1HBT,G16 DL1HCM,E03 DL1HLK,W30 DL1HRE,W21 DL1HRM,W18 DL1HSI,W33 DL1HSR,W22 DL1HTF,C01 DL1HTY,X40 DL1HW,A39 DL1HWH,W19 DL1HZM,W18 DL1IAO,A24 DL1ICB,X35 DL1II,A25 DL1JBE,S44 DL1JDQ,S50 DL1JDT,S53 DL1JDU,S56 DL1JET,S58 DL1JEZ,S65 DL1JGG,S53 DL1JGO,F76 DL1JHB,W21 DL1JJI,S50 DL1JKK,S56 DL1JL,A22 DL1JPF,S58 DL1KAM,G11 DL1KAS,G07 DL1KDT,G06 DL1KHD,F49 DL1KHM,G20 DL1KJB,A17 DL1KMN,G20 DL1KRT,F39 DL1KWK,V01 DL1LAE,M03 DL1LAF,E33 DL1LKR,O52 DL1LMN,C16 DL1LOD,S41 DL1LQL,S41 DL1LQR,Z91 DL1LRI,S36 DL1LT,H55 DL1LTK,X31 DL1MAJ,C25 DL1MDH,T19 DL1MDU,T18 DL1MDY,T01 DL1MDZ,C06 DL1MEB,C25 DL1MFZ,C06 DL1MGR,T01 DL1MGZP,C11 DL1MHJ,C12 DL1MM,G06 DL1MNU,F14 DL1MPK,C28 DL1MRA,Z30 DL1MRU,B13 DL1MTG,N29 DL1MUC,C09 DL1MWG,C01 DL1NBW,B01 DL1NEO,B36 DL1NFG,F62 DL1NFI,B05 DL1NGO,B26 DL1NJB,B02 DL1NKS,B24 DL1NOS,X37 DL1NPG,V22 DL1NUX,B37 DL1NX,G20 DL1NZA,V30 DL1OBF,H04 DL1OD,H24 DL1OI,H37 DL1OJ,N01 DL1OLI,O17 DL1PBC,K32 DL1PF,F16 DL1PR,G06 DL1PT,F37 DL1QQ,Z78 DL1QW,N06 DL1R,C18 DL1REM,N41 DL1RI,F55 DL1RIO,C12 DL1RLB,Y06 DL1RLH,E13 DL1RMI,X17 DL1RMJ,Y34 DL1RNH,Y09 DL1RNN,H24 DL1ROG,Y09 DL1RTD,Y01 DL1RTL,Y34 DL1RTS,Y07 DL1RTU,Y09 DL1RUN,S44 DL1RWN,Y34 DL1RWS,Y10 DL1RXG,Y03 DL1SAX,P05 DL1SBF,P51 DL1SEC,P15 DL1SKK,P06 DL1SMA,P36 DL1SR,Q05 DL1STG,O26 DL1STV,U13 DL1SUN,V14 DL1SVA,V04 DL1SWB,V28 DL1SWN,V14 DL1SWT,V19 DL1SXB,V14 DL1SYL,V18 DL1THB,V11 DL1TIM,O27 DL1TKB,O49 DL1TM,N01 DL1TPY,Y09 DL1TS,T05 DL1TX,Z07 DL1UNK,S06 DL1VDL,S06 DL1VF,Q06 DL1VH,M15 DL1VJL,S01 DL1VKR,S01 DL1VO,K30 DL1VTL,S14 DL1VWR,P29 DL1VWS,S14 DL1WA,X28 DL1WM,P11 DL1WTE,G11 DL1XAS,E37 DL1XW,L03 DL1YP,R06 DL1YCF,K16 DL1YD,P47 DL1YDW,N47 DL1YEN,N43 DL1YFF,N01 DL1YP,A48 DL1Z, DL1ZBO,F42 DL1ZU,F64 DL2A,P61 DL2AA,N04 DL2ABM,H08 DL2AGB,S50 DL2AJB,X17 DL2AKP,F39 DL2AKT,X17 DL2ALY,V18 DL2AMD,X22 DL2AMM,X19 DL2ANM,X40 DL2AOM,X40 DL2ARD,Z88 DL2ARN,X42 DL2ASB,X09 DL2AWA,X10 DL2AWW,X09 DL2AXM,X40 DL2AYK,X34 DL2BIS,I05 DL2BM,I55 DL2BMH,A19 DL2BRN,Y15 DL2BRW,Y22 DL2BUM,Y22 DL2CC,P51 DL2DBE,O52 DL2DBF,B26 DL2DBR,O16 DL2DCD,O55 DL2DCX,O52 DL2DIE,C27 DL2DL,C28 DL2DQL,S02 DL2DR,F76 DL2DRD,S18 DL2DRG,S24 DL2DRM,S27 DL2DTJ,S13 DL2DTL,S08 DL2DUA,S02 DL2DVE,C25 DL2DWC,S18 DL2DWP,S08 DL2DX,S07 DL2DXA,S01 DL2DXD,S05 DL2DXW,S02 DL2EAAP,L18 DL2EF,R06 DL2F,F07 DL2FAG,Z25 DL2FCA,F32 DL2FCB,F69 DL2FCQ,F49 DL2FCW,F20 DL2FDL,F07 DL2FFW,X30 DL2FK,P15 DL2GA,C25 DL2GBB,A01 DL2GC,H35 DL2GCM,H35 DL2GGE,A48 DL2GHE,G05 DL2GK,R01 DL2GMI,A44 DL2GTS,A48 DL2HE,T01 DL2HRH,W35 DL2HRT,W24 DL2HSX,W17 DL2HUC,W33 DL2HWB,W21 DL2HYH,W33 DL2IAN,K23 DL2IAQ,A36 DL2IKE,C12 DL2IPU,E07 DL2JAA,S48 DL2JC,O04 DL2JKE,D06 DL2JKN,S50 DL2JRM,S50 DL2JT,P07 DL2KBX,G22 DL2KP,F62 DL2KUA,Z89 DL2KUF,V12 DL2KWA,V06 DL2LAR,M15 DL2LFH,W21 DL2LFHP,W21 DL2LMS,S34 DL2LQB,S38 DL2LRT,S36 DL2LTM,S36 DL2MAJ,C28 DL2MDU,C06 DL2MDZ,B39 DL2MEP,C26 DL2MHO,T19 DL2MIH,C18 DL2MJ,H59 DL2MJW,C18 DL2MLU,C25 DL2MRE,S07 DL2MST,T19 DL2MWB,T07 DL2NA,C12 DL2NAU,B07 DL2NBU,C12 DL2NBY,B26 DL2NC,H32 DL2NCN,B23 DL2NOM,V22 DL2NTC,V26 DL2NY,N16 DL2OBNM,Z35 DL2OBO,H16 DL2OE,Y15 DL2OM,K32 DL2PR,F27 DL2QT,C18 DL2RCH,C04 DL2RMC,B02 DL2ROA,Z94 DL2ROM,Y34 DL2RPS,K34 DL2RRJ,Y09 DL2RSF,Y35 DL2RSH,Y09 DL2RSS,Y34 DL2RTD,Y09 DL2RTJ,X36 DL2RTL,Y09 DL2RUG,Y09 DL2RVL,Y07 DL2RZG,W36 DL2SAO,S18 DL2SAX,P05 DL2SBA,P48 DL2SBE,T02 DL2SWN,V14 DL2SWR,V13 DL2SWW,V10 DL2SYC,Z87 DL2T,F56 DL2TM, DL2TOB,B03 DL2TOS,C03 DL2TR,P05 DL2TXT,Y09 DL2UC,A02 DL2UH,P15 DL2UL,R17 DL2UX,S01 DL2VB,L03 DL2VC,V25 DL2VFR,I25 DL2VK,U07 DL2VL,S04 DL2VLA,S07 DL2VM,S36 DL2VNL,S26 DL2VPF,S28 DL2VRL,S27 DL2VSF,S29 DL2VV,U14 DL2WB,K35 DL2XLP,Z81 DL2XM,C01 DL2YAK,L03 DL2YDS,N16 DL2YEU,I38 DL2YMR,N47 DL2ZA,U15 DL2ZBO, DL2ZN,Z83 DL3ABL,W37 DL3AH,F34 DL3AKM,X40 DL3ALI,X17 DL3AMB,X40 DL3AMI,X04 DL3ANK,X35 DL3APK,Z90 DL3APO,S46 DL3APZ,X40 DL3ARK,X36 DL3ARM,S38 DL3AVI,X11 DL3AWI,X06 DL3AWK,X31 DL3AZ,K41 DL3AZI,X06 DL3BAT,I17 DL3BQD,Y36 DL3BRA,Y16 DL3BSD,Y09 DL3BUA,Y16 DL3BUE,Y22 DL3BVA,Y16 DL3BXX,Y22 DL3BY,C25 DL3CE,F42 DL3CY,S45 DL3DBC,O16 DL3DCQ,O27 DL3DD,R10 DL3DQL,S02 DL3DRN,S27 DL3DSY,F11 DL3DTH,S07 DL3DUE,S02 DL3DVL,S03 DL3DWD,S02 DL3DXF,S04 DL3EAZP,R01 DL3EBX,R09 DL3FBB,F54 DL3FBJ,F27 DL3FDT,F02 DL3FDZ,C01 DL3FF,R06 DL3G,B02 DL3GA,A04 DL3GT,B01 DL3HAA,E03 DL3HAE,E21 DL3HAH,G16 DL3HRZ,W35 DL3HWD,W35 DL3HWM,W21 DL3HXS,W22 DL3IAC,A02 DL3IF,P50 DL3ING,C18 DL3JAN,S07 DL3JHK,Y14 DL3JJ,S54 DL3JPN,S58 DL3JVN,S45 DL3JXN,S60 DL3KDC,G01 DL3KJS,F38 DL3KO,R25 DL3KUB,V02 DL3KUD,V14 DL3KUM,V04 DL3KVR,V02 DL3KWF,V11 DL3KWR,V11 DL3KZA,V10 DL3LAB,M15 DL3LBA,E19 DL3LBP,E20 DL3LED,E38 DL3LG,P05 DL3LQM,W29 DL3MBE,T01 DL3MBG,VO DL3MBGP,C15 DL3MBX,C28 DL3MFQ,C12 DL3MFQP,C12 DL3MHB,T19 DL3MR,S05 DL3MRKM,C32 DL3MVC,G04 DL3NBL,B39 DL3NCS,B25 DL3NDU,B13 DL3NM,B34 DL3OBQ,C08 DL3OCE,H01 DL3OH,Z17 DL3OHB,T01 DL3QQ,L03 DL3QY,C28 DL3RAR,U14 DL3RCG,Z76 DL3RCGQRP,Z76 DL3RDM,U08 DL3RHN,V22 DL3RMJ,Y09 DL3RNZ,Y12 DL3RUN,Y09 DL3SAV,P48 DL3SDW,P06 DL3SEM,P05 DL3SFB,P06 DL3SG,B18 DL3SJ, DL3SKY,A27 DL3SUG,V10 DL3SYA,V14 DL3TC,X22 DL3TOM,U14 DL3TU,P12 DL3TVI,X09 DL3UT,S27 DL3UX,O16 DL3VL,D16 DL3VTAP,S21 DL3VZL,S07 DL3WKG,W37 DL3XAQ,E30 DL3XKK,X37 DL3XM,S41 DL3YAF,N37 DL3YBG,N30 DL3YCW,Z41 DL3YDP,O38 DL3YDY,P13 DL3YDYP,P13 DL3YEE,X10 DL3YM,A24 DL3ZAI,F58 DL3ZAJ,F05 DL3ZAT,N61 DL3ZH,P51 DL3ZID,V14 DL3ZM,E33 DL3ZZA,D25 DL4A,P55 DL4AAE,P51 DL4AC,Z01 DL4AH,H47 DL4ALI,X17 DL4AND,D11 DL4ANI,X06 DL4AO,I39 DL4ASJ,X24 DL4AUE,X35 DL4AUK,X32 DL4AV,Z46 DL4BBH,I25 DL4CC,T01 DL4CF,F76 DL4CR,F43 DL4DCO,O12 DL4DCOP,O12 DL4DG,O38 DL4DQA,S10 DL4DRG, DL4DTU,S07 DL4DWA,S02 DL4EAX,R22 DL4EBA,R29 DL4EBW,R29 DL4EDC,L16 DL4FAP,F42 DL4FDI,Z54 DL4FDM,F02 DL4FF,F05 DL4FN,F35 DL4HCF,E33 DL4HG,E38 DL4HRM,W35 DL4HWM,W26 DL4IA,Y37 DL4IAL,A12 DL4IG,A19 DL4JG,R09 DL4JLM,S50 DL4JU,R09 DL4JWU,S54 DL4JYT,S54 DL4KCA,G40 DL4KCW,G07 DL4KM,O16 DL4KUG,V11 DL4KW,G06 DL4KWA,V07 DL4LAL,E05 DL4LAM,M31 DL4LAX,M12 DL4LBM,M31 DL4LH,M15 DL4LN,M15 DL4LQM,S31 DL4MAK,T18 DL4MAQ,C28 DL4MCA,C09 DL4MCF,C26 DL4ME,X30 DL4MFM,I38 DL4MFR,C05 DL4MGR,C15 DL4MHA,C06 DL4MHT,C01 DL4ML,P55 DL4MNG,L11 DL4MST,C03 DL4NAZ,T21 DL4NBV,B14 DL4NCO,B23 DL4NDO,B13 DL4NER,B17 DL4NL,C18 DL4NN,B31 DL4NTC,W33 DL4NWD,V30 DL4OCE,H08 DL4OCF,H24 DL4OL,H39 DL4PY,DVK DL4RAT,C08 DL4RDJ,U24 DL4SBK,P06 DL4SCP,P51 DL4SDW,P01 DL4SEW,P37 DL4SHE,T17 DL4SL,Y13 DL4SUN,V15 DL4SVA,V10 DL4SW,B26 DL4SXB,Z87 DL4SZB,V18 DL4TJ,P36 DL4TL,B30 DL4UCS,X04 DL4UL,E01 DL4VAB,Z19 DL4VAI,Q07 DL4VAQ,Z19 DL4VBU,Q05 DL4VCG,Q18 DL4VCV,Q11 DL4VQ,Q06 DL4WA,X28 DL4WD,O16 DL4WO,S06 DL4XU,E02 DL4YAJ,N01 DL4YAO,C25 DL4YAY,N45 DL4YBZ,L03 DL4YEG,N01 DL4YR,L03 DL4ZA,A19 DL4ZBY,F27 DL4ZM,S36 DL4ZZ,V19 DL5AB,A02 DL5ABR,H48 DL5AI,L06 DL5ALW,X06 DL5AN,P01 DL5ANM,X45 DL5ANS,X23 DL5ANSP,X23 DL5AOJ,X34 DL5APW,X26 DL5ARM,X33 DL5ASE,X36 DL5ASG,X08 DL5ASK,X29 DL5AWE,X11 DL5AWI,X11 DL5AX,H03 DL5AXX,X34 DL5AYI,X02 DL5AZZ,X33 DL5BAW,I53 DL5BBF,I17 DL5BCF,I54 DL5BCQ,I20 DL5BT,I14 DL5BTE,Y22 DL5BUT,Y36 DL5CD,S60 DL5CK,W10 DL5CL,F76 DL5CU,V07 DL5DBH,O14 DL5DCK,O04 DL5DD,E09 DL5DF,W09 DL5DRM,S13 DL5DTG,S07 DL5DWF,S26 DL5DXS,S04 DL5EC,L31 DL5FAM,F20 DL5FCO,F39 DL5FCY,F11 DL5FH,F17 DL5FM,F16 DL5FU,S37 DL5GAC,P09 DL5HAU,E38 DL5HBA,E33 DL5HF,Z27 DL5HN,E33 DL5HP,E33 DL5IAH,K09 DL5IC,A19 DL5JAG,S54 DL5JAN,S53 DL5JBW,Y14 DL5JH,R09 DL5JKD,S53 DL5JQ, DL5JRA,S56 DL5JS,R01 DL5KBG,G07 DL5KCI,G51 DL5KCS,G10 DL5KM,X10 DL5KMS,X32 DL5KUD,V01 DL5KUR,V02 DL5KVV,V07 DL5KW,K06 DL5L,X23 DL5LBY,M05 DL5LS,M01 DL5LYM,S41 DL5M,C25 DL5MAE,C25 DL5MAM,C10 DL5MAR,R14 DL5MBU,C12 DL5MDM,T19 DL5MEL,T21 DL5MEV,C16 DL5MGW,C28 DL5MHE,C18 DL5MHR,T17 DL5MM,S13 DL5MO,X30 DL5MPO,C26 DL5NBZ,B25 DL5NCP,B06 DL5NCV,B39 DL5NDX,B21 DL5NEB,B36 DL5NEN,B26 DL5OAB,G20 DL5OBY,S41 DL5OCD,H42 DL5OCR,H20 DL5QE,N13 DL5QS,N03 DL5RDO,U01 DL5RDP,U01 DL5RF,O38 DL5RJ,U14 DL5RMH,U08 DL5RT,N47 DL5RU,U09 DL5SAX,P05 DL5SDI,P51 DL5SE,S54 DL5SL,S24 DL5ST,S57 DL5SVB,V18 DL5SWB,V14 DL5SYB,V15 DL5SZB,E28 DL5TW,X31 DL5WB,X09 DL5WG,W04 DL5WO,K56 DL5WP,I51 DL5WS,S41 DL5WW,V22 DL5WWA,V22 DL5WWM,V22 DL5XAT,E38 DL5XJ,M30 DL5XL,E20 DL5YAL,N29 DL5YAS,N34 DL5YEE,N43 DL5YL,Y21 DL5YM,Y21 DL5YUM,S42 DL5YYM,S37 DL5ZB,S19 DL5ZBA,F15 DL5ZBS,F38 DL5ZL,X08 DL60BADEN,60DA DL60CHILD,CV60 DL60HSC,HSC60 DL6AAO,F10 DL6ABB,H03 DL6AG,S44 DL6AKK,W29 DL6AMM,H35 DL6AP,V01 DL6AT,V14 DL6ATI,X14 DL6AU,F11 DL6AWJ,X23 DL6BCX,I07 DL6BL,C04 DL6BLD,C15 DL6BQE,Z86 DL6BS,E02 DL6CNG,W08 DL6CT,Y18 DL6DA,O55 DL6DAP,O55 DL6DBN,O55 DL6DBNP,O55 DL6DCA,O38 DL6DQW,S01 DL6DSA,S06 DL6DVU,S07 DL6EAO,G21 DL6EZ,R01 DL6FBK,F29 DL6FBL,L06 DL6FBR,F16 DL6FD,F26 DL6FKK,D20 DL6GCE,C12 DL6GCK,A01 DL6HAK,M30 DL6HBX,E05 DL6HCX,E09 DL6HH,O43 DL6IAK,A36 DL6JZ,Y36 DL6KVA,V01 DL6KVH,E18 DL6KWN,V07 DL6LBTP,G21 DL6LJ,R13 DL6MDA,C12 DL6MDG,C27 DL6ME,D27 DL6MFE,C32 DL6MFK,C16 DL6MHT,C12 DL6MHW,W37 DL6MIG,W10 DL6MKA,W05 DL6MR,W19 DL6MTA,W03 DL6MWG,W37 DL6NAL,U08 DL6NALP,U08 DL6NBB,B26 DL6NBBP,B26 DL6NCI,B23 DL6NCY,B07 DL6NDW,C12 DL6NWA,V11 DL6OA,O16 DL6OAK,H37 DL6OCH,H57 DL6OCK,H10 DL6OLI,P55 DL6ON,Z84 DL6OZ,H24 DL6PI,O38 DL6PO,K09 DL6RAI,U08 DL6RAIP,U08 DL6RBH,U20 DL6RBO,U20 DL6RDE,Z64 DL6RG,S42 DL6RO,E33 DL6SAK,VO DL6SDA,P05 DL6SDZ,P47 DL6SEH, DL6SEV,P51 DL6TA,B14 DL6UAE,Y13 DL6UAM,Y24 DL6UD,Y28 DL6UEF,Y27 DL6UHA,Y27 DL6UJH,Y28 DL6UKL,Z86 DL6ULI,Y27 DL6UM,X20 DL6UMF,Y25 DL6UMR,Y28 DL6UNF,Y27 DL6USA,Y39 DL6WH,K04 DL6WT,K04 DL6WZ,B11 DL6YAQ,N07 DL6YDF,I20 DL6YXM,S36 DL6ZB,U24 DL6ZBN,F27 DL6ZFG,W10 DL7ACN,A22 DL7ACNP,A22 DL7AHD,D03 DL7AHF,D13 DL7AKQ,D24 DL7ALM,D06 DL7ANC,V06 DL7ANR,D06 DL7AOJ,F15 DL7AOS,P07 DL7APK,D14 DL7ARV,Y10 DL7AT,E38 DL7ATE,VO DL7ATR,G26 DL7AU,Y24 DL7AV,C30 DL7AVZ,Y34 DL7AWO,D06 DL7AXM,Y22 DL7BA,V12 DL7BC,A05 DL7BCP,A05 DL7BPM,D01 DL7BY,D26 DL7CK,P24 DL7CS,Q10 DL7CU,D21 DL7CX,S62 DL7DAX,O38 DL7DCL,Y43 DL7DH,D04 DL7DS,R11 DL7DZ,I11 DL7ED,R09 DL7ET,R24 DL7FA,D08 DL7FB,G50 DL7FCQ,I26 DL7FER,D26 DL7FUAP,D17 DL7GEM,F27 DL7GW,D20 DL7GZ,Q01 DL7HNA,W37 DL7HT,C18 DL7HU,D01 DL7IE,D07 DL7IZ,D04 DL7JAN,A02 DL7JOM,Y07 DL7JRD,Y14 DL7JV,D08 DL7KJS,G09 DL7KMA,Y09 DL7LG,A19 DL7LIN,C12 DL7LPH,M05 DL7LX,D07 DL7LZ,Y17 DL7MAW,D25 DL7MPA,Q07 DL7MST,B04 DL7ON,D04 DL7ORP,M21 DL7PD,F05 DL7PV,D04 DL7QU,D04 DL7RAL,T19 DL7RSL,A07 DL7RSM,Y09 DL7RU,D01 DL7RV,F73 DL7SAQ,C30 DL7SMK,X23 DL7SP,F50 DL7TJ,E33 DL7TOM,C06 DL7UAI,D16 DL7UAW,D17 DL7UAWP,D17 DL7UCX,D26 DL7UE,D04 DL7UEB,Y14 DL7UFN,D26 DL7UG,D26 DL7UGN,Y22 DL7UGNP,Y22 DL7UGO,D26 DL7UIO,A24 DL7UJK,D21 DL7UJM,D26 DL7ULK,D15 DL7ULM,C25 DL7UMAP,D17 DL7UMG,S65 DL7UMK,Y07 DL7UML,D21 DL7UMW,Y34 DL7UN,M15 DL7UPN,C16 DL7URB,D25 DL7URH,S41 DL7USA,Y06 DL7USWP,D26 DL7UVO,D20 DL7UXG,D21 DL7UZO,D20 DL7VAF,Y14 DL7VAO,D19 DL7VBJ,D26 DL7VDX,D20 DL7VEE,D26 DL7VHP,Y34 DL7VKD,D20 DL7VMM,D25 DL7VOG,D26 DL7VPO,Y21 DL7VRE,Y21 DL7VRG,D21 DL7VX,D14 DL7XT,A19 DL7YAD,N12 DL7YS,D06 DL7ZZ,H32 DL8AAV,H20 DL8ABG,H20 DL8AKA,X16 DL8ALU,X16 DL8AT,E30 DL8AWJ,X24 DL8AWK,X31 DL8AX,R11 DL8BCU,I38 DL8BDG,I09 DL8BEH,I12 DL8BTE,Y14 DL8BTL,Y19 DL8BZ,I34 DL8BZP,I34 DL8CA,L23 DL8CF,N34 DL8CHR,C37 DL8CKL,W13 DL8CO,F33 DL8CP,S07 DL8DAZ,O39 DL8DBW,O43 DL8DC,O38 DL8DP,O38 DL8DUL,S02 DL8DWW,S04 DL8DXL,S22 DL8DYL,S01 DL8DZV,S27 DL8EAQ,R29 DL8EBW,R29 DL8EKI,I09 DL8FA,C11 DL8FAJ,F10 DL8FCK,F49 DL8FF,Q05 DL8FMA,C29 DL8HE,A22 DL8HK,Q11 DL8JEW,S63 DL8JJ,F29 DL8JKN,S50 DL8JW,G19 DL8KAC,G19 DL8KJ,O16 DL8KX,E38 DL8L,K06 DL8LAS,M11 DL8LJ,E05 DL8LR,Q18 DL8MAKP,C18 DL8MAS,T19 DL8MBS,X06 DL8MCG,C35 DL8MEF,C12 DL8MEFP,C12 DL8MKG,W13 DL8MLD,W09 DL8MUG,W12 DL8NAS,B13 DL8NBD,B26 DL8NBE,B10 DL8NBJ,B39 DL8NBR,B05 DL8NCG,B39 DL8NCS,B33 DL8NCU,B36 DL8NEC, DL8NY,C12 DL8OAY,H55 DL8OAZ,H42 DL8OBD,C12 DL8OBF,H20 DL8OH,I49 DL8OK,H03 DL8PA,F38 DL8PZ,F05 DL8QS,I30 DL8R,T21 DL8RB,Q05 DL8RDL,U08 DL8RL,S27 DL8SAO,P07 DL8SC,F43 DL8SCD,P05 DL8SCG,P01 DL8SCT,P06 DL8SUBP,V14 DL8SV,H03 DL8TG,H24 DL8TGP,H24 DL8TW,B13 DL8UAA,Y43 DL8UAT,Y43 DL8UCC,Y24 DL8UER,Y27 DL8UF,P06 DL8UGF,Y24 DL8UI,F10 DL8UIL,Y24 DL8UKE,Y13 DL8ULF,Y37 DL8ULO,Z91 DL8UNF,Y24 DL8UO,B10 DL8USA,Y13 DL8UVG,Y30 DL8UWE,Y24 DL8VKO,P61 DL8VL,S04 DL8WAA,S41 DL8WE,C28 DL8WEM,P24 DL8WIG,U24 DL8WJM,S42 DL8WRG,S42 DL8WT,K07 DL8WX,K24 DL8ZAJ,F09 DL8ZAW,F34 DL8ZU,F32 DL9ABM,H07 DL9AKA,X26 DL9AWI,X11 DL9BBU,I17 DL9BCL,I28 DL9BW,R25 DL9CW,S01 DL9DAJ,O38 DL9DRF,S14 DL9DRZ,H31 DL9DXP,S01 DL9ECA,L06 DL9EE,M11 DL9EO,R33 DL9FB,W33 DL9FBF,F16 DL9FCL,F15 DL9FCLP,F15 DL9FR,W22 DL9GCG,P03 DL9GDC,N16 DL9GFB,V06 DL9GMC,V06 DL9GMN,V11 DL9GND,V11 DL9GS,O04 DL9GTI,V03 DL9GWA,V04 DL9GWD,V11 DL9HB,E30 DL9HCO,E09 DL9HCW,E09 DL9HD,E12 DL9HDA,E09 DL9HG,X09 DL9HO,E34 DL9HUH,W21 DL9IE,P07 DL9JON,S65 DL9JSO,Y09 DL9KCE,F12 DL9KI,N08 DL9KWW,V08 DL9LAV,M11 DL9LF,M10 DL9LM,V14 DL9LR,E13 DL9MCC,C30 DL9MEN,C26 DL9MFT,C11 DL9MFTP,C11 DL9MFY,C12 DL9MKA,W08 DL9MKN,W13 DL9MWE,H13 DL9NAI,B26 DL9NBJ,B19 DL9NCR,B07 DL9NDH,B26 DL9NDHM,B26 DL9NDP,B32 DL9NDS,DVB DL9NEF,B26 DL9NEI,C26 DL9NO,B18 DL9OBY,H27 DL9OCG,P50 DL9OHA,F19 DL9OLI,H03 DL9PM,S36 DL9RAR,U14 DL9RB,G43 DL9SA,P07 DL9SBT,P07 DL9SDW,P06 DL9SEV,P51 DL9SFB,P07 DL9SUB,V14 DL9SUD,V14 DL9TX,K11 DL9UJF,Y27 DL9UL,A02 DL9US,O16 DL9W,C30 DL9WP,C30 DL9WAA,S37 DL9WO,F11 DL9XW,I33 DL9YDH,F15 DL9YL,R25 DL9YSM,S38 DL9ZE,F45 DL9ZP,V14 DL9ZWG,W37 DM0B,A24 DM0E,Y24 DM0G,B26 DM1813LEI,1813L DM1A,A24 DM1CM,C07 DM1ER,X48 DM1JH,S53 DM1M,N47 DM1MB,A02 DM1PAX,S53 DM1PIO,Y21 DM1T,N02 DM1TB,O49 DM1TT,F27 DM1USL,S16 DM1V, DM1VA, DM2A,Y24 DM2AJK,X32 DM2AWM,S34 DM2BPG,W33 DM2BR,W24 DM2C,S54 DM2CEH,X07 DM2CF,S56 DM2CWM,X40 DM2DIN,S51 DM2DLG,R13 DM2DLGP,R13 DM2DME,Y14 DM2DMI,X10 DM2DRN,S48 DM2EV,X11 DM2FDO,D25 DM2GG,W35 DM2GM,A20 DM2GON,S65 DM2HB,O13 DM2K,N01 DM2MF,X23 DM2NL, DM2ORI,X10 DM2PJ,Y22 DM2RM,E28 DM2RN, DM2SKY,U14 DM2SR,E11 DM2TIM,R10 DM2TO,W22 DM2TS,S21 DM2USR,S01 DM3A,Y01 DM3AZ,D11 DM3B,Y14 DM3BJ,X20 DM3DL,S02 DM3F,S07 DM3FZN,S53 DM3GH,W26 DM3HA,Y43 DM3HZN,S53 DM3K,B14 DM3KC,I18 DM3KCP,I18 DM3KTO,D27 DM3KXL,S13 DM3KZN,S53 DM3M,Q01 DM3MH,Y09 DM3MR,O52 DM3O,M30 DM3PKK,B14 DM3RB,V20 DM3SWD,Y08 DM3VL,S07 DM3W,Y24 DM3XB,V11 DM3XD,Y09 DM3XI,X10 DM3XM,S41 DM3YBN,S35 DM3ZF,Y28 DM3ZM,Y28 DM4BG,V10 DM4D,Y18 DM4DB,V18 DM4DX,N62 DM4EA,Y19 DM4EE,R17 DM4G,H24 DM4IM,A20 DM4JK,Y11 DM4JU,Y09 DM4KCS,G22 DM4KM,W01 DM4KR,W08 DM4MN,R03 DM4NF,Y43 DM4RE,X40 DM4RM,Y22 DM4TI,X06 DM4TNF,Y43 DM4VPF,A17 DM50FOR,Y27 DM50KSJ,50KSJ DM50UEA,Y16 DM55JES,Y37 DM5BB,D14 DM5CQ,C15 DM5CT,X10 DM5D,Y43 DM5DM,S29 DM5EE,H46 DM5EL,S21 DM5G,X20 DM5HF,E13 DM5HFP,E13 DM5JBN,S60 DM5JF,S42 DM5JL,S04 DM5LK,S60 DM5ML,K32 DM5MM,W07 DM5OKR,Z90 DM5R,D20 DM5RS,K32 DM5TI,C15 DM5WF,Y43 DM5WH,F17 DM5Z,S60 DM6DX,Y24 DM6HK,C15 DM6KG,F49 DM6MM,Y26 DM6NG,C01 DM6V,S41 DM6WAN,S54 DM7A,S07 DM7DS,D23 DM7DX,W22 DM7M,S53 DM7WL,T19 DM8FW,T19 DM8T,T19 DM9EE,H16 DM9KT,X06 DN0EMH,SOTARP DN0MHD,P38 DN0UKW,R24 DN1APQ,X21 DN1BYZ,C25 DN1ED,R09 DN1MEF,C12 DN1MO,C01 DN1MSF,C12 DN1MUC,C25 DN1NEW,S48 DN1NS,B10 DN1QH,I21 DN1SOL,K28 DN1TB,C16 DN1WSS,V14 DN2AA,Z92 DN2HL,T15 DN2HS,Y14 DN2JHS,E15 DN2JOM,Y07 DN2LO,M35 DN2WO,N30 DN2ZJ,F43 DN3AL,H46 DN3AU,X22 DN4CQ,C15 DN4MH,I38 DN4MZ,C28 DN4NER,B17 DN4QE, DN4SB,R33 DN4SK,R10 DN5AJ,C25 DN5HAM,A22 DN5KA,X28 DN5KID,C25 DN6IP,C01 DN6LJ,R13 DN6MRM,F42 DN7HBK,X10 DN7OMB,M13 DN7TBOP,I12 DN8CW,O12 DO1AMK,G20 DO1ARQ,V14 DO1AYJ,X22 DO1BMK,E32 DO1BOP,R32 DO1BRU,P49 DO1BSS,Q21 DO1BWO,P55 DO1CA,H05 DO1CDE,S19 DO1CJ,S44 DO1CO,D04 DO1CP,S51 DO1CS,S49 DO1DHM,Y38 DO1DJJ,K45 DO1DJJP,K45 DO1DLE,G21 DO1DR,R15 DO1DSW,S54 DO1FPT, DO1FT,F06 DO1FWB,I38 DO1GAR,A25 DO1GPP,Y26 DO1HE,N01 DO1HGS,A25 DO1HKW,E05 DO1HW,E33 DO1HYL,X28 DO1JGE,T07 DO1JHL,A22 DO1JKB,Y11 DO1JM,D20 DO1JWP,Z86 DO1JWZ,Y43 DO1KEY, DO1KHB,G47 DO1KLI,D23 DO1KRT,G54 DO1KUB,F27 DO1LMN,C16 DO1MAF,G17 DO1MBE,C32 DO1MGN,X37 DO1MHW,B09 DO1MHZ,B37 DO1MKU,O12 DO1NCS,B08 DO1NPF,U10 DO1OHL,Y28 DO1OMS,H05 DO1PCD,K36 DO1PGR,L02 DO1RAA,K45 DO1RE,X40 DO1RGI,X31 DO1RSG,U14 DO1RTO,C30 DO1RWM,N29 DO1SAJ,P51 DO1SKP,H16 DO1SRB,P44 DO1STG,B14 DO1TBO,I12 DO1TBOP,I12 DO1TJ,U13 DO1TSF,P24 DO1TSI,Y09 DO1TV,Y34 DO1UZ,S27 DO1VB,F07 DO1VEG,S64 DO1VK,K18 DO1WHU,P14 DO1WHV,I49 DO1WT,O41 DO1WUP,R16 DO2ABK,X23 DO2AE,K54 DO2AKX,X40 DO2ART,G20 DO2CAT,F47 DO2DP,N49 DO2DTH,Y26 DO2EG,S04 DO2FUXP,L16 DO2FWW,F20 DO2GKP,K51 DO2GN,O52 DO2HN,S24 DO2HRB,X31 DO2IH,I18 DO2IN,H24 DO2JMP,C18 DO2KBM,A22 DO2LFS,M02 DO2LNJ,M02 DO2LR,O43 DO2LTF,M02 DO2LY,I45 DO2MCP, DO2ML,C15 DO2MLC,C26 DO2MPO,C26 DO2MS,Z54 DO2NFS,B26 DO2NPG,B14 DO2OFP,F07 DO2OL,C06 DO2RHB,P07 DO2RL,S50 DO2RMA,C26 DO2ROA,Z94 DO2RWE,O55 DO2TE,C26 DO2TV,X31 DO2TZ,H47 DO2VI,V22 DO2XX,S50 DO3AH,O16 DO3BST,W02 DO3CL,C25 DO3CQ,A36 DO3EBB,G09 DO3EF,F07 DO3GDW,W09 DO3GHS,S18 DO3GIQ,F02 DO3HDA,C06 DO3HF,T01 DO3HJW,E38 DO3HPR,F05 DO3JPA,N47 DO3KAB,Y14 DO3KHZ,S24 DO3KMF,F30 DO3KPB,G19 DO3KTM,H42 DO3MBA,C09 DO3MBK,M30 DO3MF,C28 DO3MPL,S04 DO3MSG,C30 DO3MU,L15 DO3MXK,Y06 DO3NN,B32 DO3NSA,A12 DO3PKE,Y25 DO3QQ,U14 DO3SEG,H42 DO3SH,X25 DO3TIM,O27 DO3TME,C26 DO3TS,O52 DO3WI,G50 DO3YMW,I38 DO3ZI,X40 DO4AXL,H14 DO4BD,I28 DO4CCC,B26 DO4DEB,I18 DO4DXA,C30 DO4FLO,F16 DO4HBK, DO4HH,I02 DO4HZ,S24 DO4JTR,O18 DO4LHT,M17 DO4MM,I13 DO4MR,O12 DO4NF,B43 DO4OD,I49 DO4RA,C01 DO4RAB,Z21 DO4RWE, DO4TC,G47 DO4TCP,G47 DO4TP,R01 DO4TT,V11 DO4UK,S04 DO4UWE,P47 DO4VPF,A17 DO4WA,E13 DO4WD,P37 DO4ZH,V03 DO4ZM,M02 DO5AWE,X11 DO5CC,P41 DO5DF,D27 DO5FEE,R24 DO5FMK,F19 DO5GU,X38 DO5HCS,Z87 DO5HMK,X40 DO5HOK,I38 DO5JD,B32 DO5KF,F72 DO5KOL,X16 DO5MPM,S44 DO5NEN,B26 DO5OT,Y21 DO5SKO,F74 DO5TAN,T09 DO5TMM,P19 DO5VD,M30 DO5WD,S37 DO5WE,F73 DO5YLM,N01 DO6AFL,F06 DO6AL,X22 DO6AN,F76 DO6BI,H42 DO6BY,R33 DO6DP,H13 DO6EAO, DO6ELW,N47 DO6HMA,C26 DO6JAN,M15 DO6KF,U24 DO6KP,C04 DO6MBA,F07 DO6MBAM,F07 DO6MSA,B02 DO6NI,Z90 DO6NIK,N14 DO6PE,F62 DO6PS,C25 DO6RO,G13 DO6RZ,U23 DO6SD,L18 DO6SR,P20 DO6TD,N07 DO6UTW,W21 DO6XX,S50 DO7AQ,X35 DO7BWU,D10 DO7CJ,H13 DO7DGH,B26 DO7DSV,S21 DO7DSW,G09 DO7DU,X38 DO7DYL,O12 DO7EA,A22 DO7FD,C30 DO7FOX,H60 DO7GIU,A09 DO7HS,U08 DO7HU,P03 DO7KX,B33 DO7LK,P50 DO7MAN,R27 DO7MDX,B03 DO7MLS,P29 DO7MM,U03 DO7NE,S37 DO7NP,R04 DO7OM,I18 DO7OMB,M13 DO7ORA,H23 DO7PD,N20 DO7RM,I15 DO7SRB,Y21 DO7TW,P20 DO7WF,C25 DO7WHP,P29 DO7WM,X11 DO8ABS,B24 DO8AGU,R09 DO8AH,X38 DO8ASC,X46 DO8BR,O52 DO8CW,F72 DO8DS,X39 DO8ER,H05 DO8IH,X40 DO8LA,S14 DO8LD,C01 DO8MFS,E15 DO8MM,F39 DO8OL,F76 DO8TB,N18 DO8YX, DO9AT,X23 DO9BC,P08 DO9BW,R25 DO9CTB,Y21 DO9DMB,R09 DO9EM,R24 DO9FL,M32 DO9GER,F39 DO9GM,C25 DO9HL,Q05 DO9HSK,Y28 DO9JMA,Z19 DO9LL,N40 DO9MHG,I21 DO9MJ,H15 DO9PL,R24 DO9RE,R09 DO9REF,O12 DO9SM,P24 DO9ST,F07 DP3D, DP4D,N47 DP4E,N62 DP4K,O03 DP4M,I38 DP4P,U01 DP4W,T09 DP5A,S54 DP5K,F69 DP5M,C26 DP5P,E33 DP5W,C12 DP6M,A24 DP6T,F49 DP6W,H08 DP7A,B25 DP7D,N16 DP7T,O46 DP850ZZ,850ZZ DP9A,Y37 DP9I,R25 DQ0A,O52 DQ0B,H03 DQ0L,U08 DQ0W,I23 DQ1A,A24 DQ1V,V19 DQ2T,M30 DQ2X,O02 DQ3Q,P36 DQ4T,F27 DQ4W,Z06 DQ5E,E05 DQ5T,M31 DQ6E,F76 DQ750UEM,750UEM DQ7A,B26 DQ7Q,H04 DQ7Y,B19 DQ8T,B39 DR09NRW,09HAMM DR0K,DRK DR0N,O52 DR0R,O02 DR0W,T13 DR0Y,A53 DR1050EB,EB1050 DR13IGS,IGS13 DR175LDE,S13 DR1A,L06 DR1D,G20 DR1F,F27 DR1H,F27 DR1R,M11 DR1X,N01 DR2010L,RUHR2010 DR20MVP,20MVP DR20RAFG,Y18 DR2B,B02 DR2C,E28 DR2N,B07 DR2P,P08 DR2Q,X06 DR2W,A07 DR3R,Y14 DR3RQRP,Y14 DR3S,R33 DR3W,W37 DR3X,S04 DR4A,F27 DR4G,C22 DR4O,P37 DR4T,C01 DR4U,N40 DR5C,S54 DR5K,X42 DR5L,L03 DR5M,B26 DR5N,N06 DR5O,R29 DR5X,M11 DR6J,X22 DR6N,K04 DR6R,U20 DR6X,L07 DR775TMG,775TMG DR7B,S50 DR800BI,800BI DR800GRZ,800GRZ DR888PL,S53 DR9P,ARDFR DR9Z,D20 tlf-1.4.0/share/arrl10m_mults0000644000175000017500000000050513562576621012766 00000000000000AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NC ND NE NV NH NJ NM NY OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY DC NB NS QC ON MB SK AB BC NWT NF LB YT PEI NU AGS BAC BCS CAM CHI CHH COA COL DFE DGO EMX GTO GRO HGO JAL MIC MOR NAY NLE OAX PUE QRO QUI SLP SIN SON TAB TAM TLX VER YUC ZAC tlf-1.4.0/share/callmaster0000644000175000017500000115231213562576621012420 00000000000000# # Release 2017.11.03.00 # by Stu Phillips, K6TU # 2E0AOZ 2E0BPP 2E0CEA 2E0CNL 2E0CON 2E0CVN 2E0CZE 2E0DSQ 2E0EBM 2E0EFS 2E0EMU 2E0FFT 2E0FGA 2E0FPC 2E0FQT 2E0GEL 2E0HAG 2E0HCL 2E0HES 2E0IFC 2E0IMD 2E0IQD 2E0KBL 2E0KDN 2E0KDT 2E0KDT/P 2E0KFH 2E0KGX 2E0KPD 2E0KVJ 2E0LJZ 2E0LKC 2E0LMD 2E0LPA 2E0MGP/P 2E0MNG 2E0MVH 2E0NER 2E0OAP 2E0OUT 2E0PIT 2E0PLA 2E0RMV 2E0RNM 2E0SDV 2E0SHT 2E0SMP 2E0SQL 2E0SUR 2E0TBT 2E0TFC 2E0TGS 2E0TIE 2E0TPO 2E0TTK 2E0UDX 2E0VCC 2E0VDS 2E0VPW 2E0VRM 2E0WBW 2E0WET 2E0XAR 2E0XCZ 2E0XZZ 2E0YAO 2E1ADT 2E1AYS 2E1EVK 2E1RDX 2E1VAL 2I0FPB 2I0NUM 2I0YLT 2M0BEC 2M0BHR 2M0JMN 2M0ONW 2M0RRT 2M0SDV 2M0WEV 2M0YIO 2U0WGE 2W0WOD 3A2MG 3A2NL 3B8CF 3B8CW 3B8HB 3B9HA 3D2AG 3D2JS 3D2KM 3DA0NJ 3E1FD 3G1B 3G1D 3G3AA 3G3M 3G3O 3G3PR 3G5EC 3G6S 3V8CB 3V8SM 3V8SS 3W2DK 3W3B 3W4XX 3W7W 3Z0X 3Z1K 3Z35RTTY 3Z3AHK 3Z3GF 3Z5N 3Z670BY 3Z6M 3Z6O 3Z6QRO 3Z6V 3Z8Z 3Z9DX 3Z9K 3Z9M 3Z9U 4A1DX 4A5XX 4C15C 4D1R 4E1A 4E34A 4F3BZ 4F3FSK 4F4IX 4H1T 4J3DJ 4J4K 4J5A 4J6R 4J6RO 4J90HAM 4K1HQ 4K4K 4K6FO 4K7K 4K8YL 4K9W 4L0A 4L0HQ 4L1BR 4L1MA 4L2M 4L3T 4L5P 4L6AM 4L6QC 4L8A 4L9QQ 4M1F 4M1K 4M4C 4M5EN 4M5W 4M6CQ 4M8E 4O10A 4O13HST 4O3A 4O3RAB 4O3RR 4O3TT 4O4A 4O4SM 4O6ZD 4O7CC 4S7AB 4S7BHG 4S7SAE 4T4T 4U0WFP 4U1A 4U1GSC 4U1ITU 4U1WB 4U5F 4U6F 4V1G 4V1TL 4W/N1YC 4X0A 4X0T 4X0W 4X1DX 4X1EL 4X1IM 4X1KS 4X1OM 4X1RF 4X1RU 4X1UF 4X1ZQ 4X1ZZ 4X2M 4X429DS 4X4DK 4X4DZ 4X4FD 4X4LF 4X4NJ 4X4WN 4X4YM 4X6DK 4X6FR 4X6GP 4X6KA 4X6TT 4X6ZM 4X7R 4X9B 4Z0T 4Z1DZ 4Z1KM 4Z1RZ 4Z1TL 4Z1UF 4Z4AK 4Z4DX 4Z4KX 4Z4TJ 4Z5AD 4Z5FI 4Z5FW 4Z5IW 4Z5KO 4Z5KU 4Z5LA 4Z5LU 4Z5LY 4Z5ML 4Z5MU 4Z5MY 4Z5OZ 4Z5PG 4Z5PJ 4Z5SL 4Z5TK 4Z5UN 4Z7T 5A1AL 5B/DL6JF 5B/OL0M 5B4AAB 5B4AGN 5B4AHL 5B4AHS 5B4AIF 5B4AIX 5B4AJC 5B4ALN 5B4AMM 5B4ES 5B4KH 5C5W 5D3A 5D5D 5E3A 5E5E 5H3EE 5H3MB 5J0B 5J0NA 5J0P 5J1E 5K0N 5K3J 5K3W 5K4R 5P1B 5P1KZX 5P2C 5P5CW 5P5X 5P6P 5P7LSO 5P9R 5P9X 5Q0X 5Q1A 5Q2A 5Q2J 5Q2T 5Q5AKM 5Q8B 5Q9T 5R8IC 5R8SV 5R8UI 5T0JL 5T2AI 5T3MM 5T4C 5T5OK 5V7D 5W0COW 5W0IF 5W0RA 5W1SA 5X1XA 5X2B 5Z4/DJ6TF 5Z4/DL2RMC 5Z4LS 6D0F 6E0C 6K2FDL 6K2IXF 6L0NJ 6V7A 6W1RY 6W1SR 6W1SU 6Y1D 6Y1LZ 6Y1M 6Y2M 6Y2T 6Y3E 6Y3T 6Y4K 6Y4T 6Y4V 6Y5IC 6Y5K 6Y5WJ 6Y6N 6Y6Y 6Y9X 7J1AAI 7J1AAX 7J1ABD 7J1YAD 7J1YAJ 7J6AAO 7J7ACT 7K1CPT 7K1EQG 7K1JFM 7K1JRC 7K1LUE 7K1MAG 7K1MAG/2 7K1PTT 7K1SLY 7K1VKU 7K2PZG 7K3BKZ 7K3OWM 7K4AEA 7K4GUR 7K4OIV 7K4QOK 7K4TSM 7K4VPV 7K4XNN 7L1WII 7L2CDG 7L2KOZ 7L2MDI 7L2OHM 7L3DGP 7L3SQL 7L4IKF 7L4IOU 7L4LKK 7L4VHB 7L4VYK 7M1ELX 7M1MCT 7M1MCY 7M2ALZ 7M2PSC 7M2VAP 7M4CLF 7M4OOS 7N1BHO 7N1GMK 7N1PRD/0 7N1PVD/1 7N2AIA 7N2JZT/6 7N2LPY 7N2SES 7N2SPK 7N2TCF 7N2TNI 7N2TRM 7N2UQC 7N3OAK 7N3WRE 7N4GIB 7N4LNK 7N4QCQ 7N4SJX 7N4WPY 7N4XCV 7Q7WW 7R7R 7R7W 7S5C 7S5S 7S5X 7S7V 7T0HQ 7U9C 7X2JV 7X2VB 7X2VFK 7X4MW 7X5TV 7Z1CQ 7Z1HL 7Z1JA 7Z1OO 7Z1SJ 8J1ISMC 8J1ITU 8J1JAG 8J1JOCV 8J2A/2 8J6VLP/6 8J790Y/7 8N1F 8N1F/1 8N2EJT/2 8N2HQ 8N3HQ 8N3KCJ/3 8N4HQ 8N6HQ 8N7HQ 8N7I 8N8HQ 8P0A 8P0P 8P1W 8P2K 8P50B 8P5A 8P6C 8P6ET 8P6NW 8P6SH 8P9AL 8P9EH 8P9IF 8P9NX 8Q7DV 8Q7SP 8R1/AG6UT 8R1AK 8S0C 8S0DX 8S0W 9A/DL3NCI 9A/DM5JBN 9A/E77DX 9A/HA3MY 9A/LZ73PM 9A/LZ7X 9A/OM2ZZ 9A/OM3RM 9A/OM5AW 9A/OM6NM 9A/OM8AA 9A0AA 9A0HQ 9A0KG 9A0W 9A0Z 9A161NT 9A1700SBD 9A1A 9A1AA 9A1AD 9A1AR 9A1BHI 9A1CBM 9A1CBM/P 9A1CC 9A1CFR 9A1CIG 9A1CMC 9A1CRT 9A1E 9A1EA 9A1FL 9A1IW 9A1JSB 9A1KDE 9A1MM 9A1P 9A1RAB 9A1RBZ 9A1SZ 9A1SZ/P 9A1TESLA 9A1TT 9A1UN 9A2AA 9A2AJ 9A2BD 9A2BW 9A2C 9A2CD 9A2CU 9A2DD 9A2DQ 9A2DS 9A2EU 9A2EY 9A2F 9A2G 9A2GA 9A2GF 9A2HQ 9A2JG 9A2JK 9A2KD 9A2KI 9A2KO 9A2L 9A2MF 9A2N 9A2NA 9A2NO 9A2QP 9A2R 9A2RD 9A2SW 9A2T 9A2TD 9A2TE 9A2TN 9A2TX 9A2U 9A2UA 9A2UI 9A2UN 9A2V 9A2VJ 9A2VX 9A2WB 9A2WJ 9A2X 9A2XW 9A2Z 9A3AG 9A3B 9A3BDE 9A3BSE 9A3BWW 9A3CJW 9A3DF 9A3DOS 9A3DV 9A3DZH 9A3GI 9A3IH 9A3JB 9A3JE 9A3JH 9A3K 9A3KG 9A3KS 9A3LE 9A3LN 9A3LUC 9A3MBM 9A3MR 9A3NC 9A3OS 9A3PM 9A3QB 9A3QO 9A3R 9A3SM 9A3ST 9A3TR 9A3TU 9A3TY 9A3VM 9A3W 9A3WX 9A3XV 9A3YT 9A3ZI 9A4A 9A4AA 9A4BL 9A4FS 9A4GD 9A4HP 9A4KJ 9A4M 9A4MF 9A4OP 9A4P 9A4QV 9A4R 9A4TX 9A4U 9A4VM 9A4W 9A4WY 9A4ZZ 9A50CBM 9A57AX 9A5A 9A5ADI 9A5B 9A5BAA 9A5BD 9A5BWW 9A5C 9A5CAN 9A5CW 9A5D 9A5D/P 9A5DO 9A5F 9A5G 9A5HZ 9A5IP 9A5K 9A5KIR 9A5KR/P 9A5M 9A5N 9A5O 9A5RJ 9A5RPZ 9A5SM 9A5ST 9A5TIM 9A5V 9A5W 9A5X 9A5Y 9A5YY 9A6A 9A6AR 9A6C 9A6DJX 9A6DQB 9A6DR 9A6IND 9A6KHI 9A6KZH 9A6M 9A6NA 9A6OY 9A6RMI 9A6RT 9A6ST 9A6T 9A6TAQ 9A6TKS 9A6TT 9A6V 9A6V/P 9A6W 9A6XX 9A6Z 9A6ZZ 9A701A 9A701AD 9A701CRJ 9A701CRT 9A702GA 9A703B 9A703JB 9A703XV 9A705Y 9A707R 9A708DX 9A77A 9A7A 9A7B 9A7C 9A7DD 9A7DRI 9A7DX 9A7JCY 9A7JZC 9A7R 9A7SSB 9A7T 9A7V 9A7W 9A7WW 9A7Y 9A7ZA 9A8A 9A8BEN 9A8CV 9A8DV 9A8FCC 9A8M 9A8RBX 9A8WW 9A9A 9A9CW 9A9DA 9A9I 9A9J 9A9K 9A9M 9A9R 9A9RR 9A9T 9A9TT 9A9XX 9A9Z 9G5GH 9G5X 9H1AE 9H1CG 9H1EJ 9H1PF 9H1PI 9H1TT 9H1XT 9H3AY 9H3EE 9H3YY 9H5BZ 9H5DX 9H5G 9H5SN 9H6A 9J2BO 9J2HN 9J2JOCV 9J2MM 9K2GS 9K2HN 9K2K 9K2MU 9K2NO 9K2OD 9K2RA 9K2RR 9K2WA 9K9K 9K9Z 9M2/JE1SCJ 9M2A 9M2CNC 9M2FUL 9M2GET 9M2JKL 9M2KDX 9M2KRZ 9M2M 9M2MCB 9M2MDX 9M2MRS 9M2ODX 9M2OUT 9M2PUL 9M2R 9M2RDX 9M2RS 9M2SI 9M2TO 9M2X 9M2YAA 9M2ZAK 9M4CC 9M4CKB 9M4CKK 9M4CPM 9M4CRX 9M4DX 9M4DXX 9M4SG 9M6BOB 9M6CDX 9M6LZY 9M6MI 9M6NA 9M6SDX 9M6XRO 9M6YBG 9M8ADX 9M8K 9Q6BB 9V1JA 9V1XX 9V1YC 9W2VGR 9W2VRD 9W6EZ 9W6MUL 9W8DEN 9X0NH 9X0TA 9Y4/VE3EY 9Y4/WJ2O 9Y4D 9Y4LDK 9Y4W 9Z4A 9Z4CP 9Z4DZ 9Z4FI 9Z4Y A31MM A35JP A35T A35W A41MO A41NN A41NW A41OO A41PG A42A A44A A45WG A45WH A45XR A47RS A60A A61BK A61BM A61D A61DA A61DD A61DJ A61EK A61FK A61HA A61M A61QQ A61SM A61VV A61ZX A62A A65BP A65CA A65CR A65DC A65DR A65EE A71A A71AE A71AM A71CV A71EM A71GO A71HQ A71MM A71SS A73A A92AA A92FQ A92GE A92GR A93JA A96A AA0A AA0AI AA0AW AA0AZ AA0CW AA0DW AA0FO AA0K AA0KW AA0MT AA0OG AA0RS AA0U AA0YY AA0ZZ AA1AC AA1AR AA1BU AA1CA AA1CT AA1GW AA1HF AA1HK AA1IL AA1IZ AA1JD AA1JM AA1JV AA1K AA1KN AA1LS AA1M AA1O AA1ON AA1PR AA1QD AA1RB AA1SU AA1UC AA1V AA1VT AA1WA AA1XO AA2A AA2AD AA2AN AA2AU AA2AW AA2BJ AA2BR AA2CN AA2DR AA2DT AA2EQ AA2F AA2FD AA2HJ AA2IL AA2KD AA2LF AA2MF AA2MF/4 AA2MU AA2NI AA2PQ AA2RR AA2S AA2SX AA2TH AA2UK AA2VG AA2VK AA2ZW AA3AZ AA3B AA3CS AA3DF AA3EE AA3GE AA3GM AA3I AA3JH AA3JK AA3JM AA3K AA3LX AA3LY AA3MD AA3S AA3SJ AA3TH AA3TT AA3WB AA4AK AA4AK/1 AA4BG AA4BQ AA4CB AA4CF AA4CT AA4DD AA4EA AA4EH AA4FF AA4FU AA4GA AA4GT AA4H AA4IB AA4JR AA4JS AA4JT AA4KD AA4LR AA4MB AA4MF AA4MI AA4MJ AA4MM AA4MX AA4MZ AA4N AA4NC AA4NN AA4NP AA4NU AA4OC AA4PP AA4Q AA4QE AA4R AA4RL AA4RX AA4SB AA4UC AA4V AA4VV AA4XG AA4XX AA4YL AA4ZU AA4ZZ AA5AM AA5AT AA5AU AA5AZ AA5B AA5BE AA5BT AA5C AA5CK AA5D AA5DX AA5FX AA5JD AA5KA AA5N AA5NT AA5PV AA5TB AA5TL AA5TL/7 AA5UK AA5UY AA5UZ AA5VN AA5VU AA5VZ AA5WZ AA5XA AA6AK AA6CV AA6DB AA6DT AA6DX AA6EE AA6FD AA6G AA6GI AA6IO AA6K AA6KJ AA6MK AA6MU AA6PP AA6PW AA6RE AA6RR AA6SS AA6TH AA6VB AA6VX AA6W AA6XV AA6XX AA6YQ AA6ZE AA7A AA7AX AA7BA AA7CR AA7CT AA7DK AA7DP AA7E AA7EA AA7EW AA7FV AA7G AA7GS AA7GT AA7IH AA7JV AA7KG AA7MB AA7MH AA7MI AA7SN AA7ST AA7TU AA7TV AA7UN AA7V AA7VR AA7WB AA7WM AA7YA AA8AO AA8CS AA8DC AA8EN AA8GP AA8HO AA8IN AA8JL AA8KR AA8M AA8MI AA8OY AA8P AA8R AA8TA AA8TK AA8U AA8UL AA8V AA8VG AA8WQ AA8WZ AA8XX AA8YN AA9A AA9BD AA9BL AA9D AA9DL AA9DU AA9E AA9F AA9GB AA9GG AA9GR AA9HQ AA9IL AA9K AA9KJ AA9L AA9LC AA9OZ AA9RR AA9SJ AA9UF AA9WJ AA9WP AA9WS AA9YP AB0BM AB0LR AB0MQ AB0P AB0RE AB0RX AB0S AB0TG AB0TO AB0VD AB0X AB0YM AB1A AB1AX AB1BX AB1DD AB1DQ AB1FD AB1GF AB1HZ AB1J AB1JV AB1KI AB1NE AB1NG AB1NI AB1NJ AB1NS AB1QB AB1U AB1UF AB1UT AB1VL AB1WG AB1WQ AB1WR AB1WT AB1XA AB1XB AB1XW AB1XX AB1YD AB1YD/0 AB1YH AB1YK AB2DE AB2DP AB2DX AB2E AB2EZ AB2IO AB2IW AB2KL AB2KX AB2NI AB2NW AB2SO AB2TC AB2VI AB2ZY AB3AH AB3AI AB3C AB3CV AB3CX AB3DC AB3FX AB3I AB3JF AB3KP AB3LC AB3OG AB3OS AB3QR AB3RU AB3RW AB3RY AB3TM AB3U AB3WM AB3WS AB3WW AB3XJ AB3YA AB3YC AB3YH AB3ZJ AB4AM AB4B AB4BC AB4BJ AB4D AB4EJ AB4ES AB4GE AB4GG AB4GO AB4GR AB4I AB4IQ AB4JK AB4KJ AB4KP AB4LX AB4SF AB4TT AB4UF AB4UG AB4V AB4VT AB4VV AB4WL AB4WS AB4YL AB4Z AB5C AB5CC AB5EB AB5ER AB5FS AB5GG AB5J AB5KM AB5KN AB5NX AB5OR AB5RJ AB5TH AB5X AB5XM AB5XP AB5XZ AB5ZA AB5ZA/7 AB6BT AB6CC AB6PS AB6WL AB6Z AB7AB AB7AS AB7BB AB7CR AB7LT AB7MP AB7NK AB7OI AB7RW AB7WP AB8AA AB8AC AB8DF AB8DS AB8FJ AB8I AB8M AB8OJ AB8OU AB8RL AB8RM AB8SA AB8UL AB8VE AB8YK AB8YZ AB9CA AB9CD AB9DU AB9H AB9JS AB9KZ AB9LF AB9LY AB9M AB9NA AB9PF AB9PN AB9PR AB9SJ AB9TA AB9TS AB9V AB9XI AB9YC AB9Z AC0B AC0BR AC0C AC0CU AC0DK AC0DQ AC0E AC0EK AC0KK AC0MJ AC0MN AC0N AC0PR AC0QK AC0RL AC0SQ AC0UA AC0VB AC0W AC0WL AC0XR AC0ZM AC0ZW AC0ZZ AC1AA AC1AJ AC1BN AC1J AC1O AC1U AC1Z AC2AA AC2AI/KH2 AC2C AC2CZ AC2FA AC2FC AC2HJ AC2IK AC2K AC2KP AC2LA AC2MI AC2MT AC2N AC2NW AC2OC AC2PL AC2QH AC2QY AC2RJ AC2RK AC2RL AC2T AC2TI AC3AV AC3Q AC3RK AC3SS AC3U AC3V AC4BT AC4BV AC4CA AC4CA/5 AC4D AC4G AC4MG AC4RD AC4RV AC4TO AC4VM AC4YD AC4YL AC4ZH AC5AA AC5EZ AC5K AC5O AC5RM AC5RN AC5RO AC5S AC5T AC5WT AC6BW AC6DD AC6DM AC6DX AC6EE AC6F AC6JA AC6SL AC6T AC6YY AC6ZM AC7A AC7AF AC7AP AC7B AC7CA AC7CG AC7GL AC7JM AC7JW AC7KJ AC7MX AC7NK AC7NU AC7P AC7SG AC7T AC7U AC8AG AC8AI AC8AP AC8AZ AC8CE AC8CY AC8DZ AC8E AC8EM AC8FG AC8FT AC8G AC8IL AC8JF AC8JT AC8KD AC8KW AC8LJ AC8MR AC8MW AC8NP AC8PL AC8RJ AC8RV AC8S AC8SA AC8SM AC8TE AC8TN AC8TO AC8UL AC8VK AC8W AC8WC AC8WP AC8XB AC8XI AC8XP AC8XU AC8Y AC9AE AC9CD AC9D AC9DX AC9EM AC9EZ AC9FL AC9GJ AC9GK AC9HJ AC9HP AC9HQ AC9IG AC9JU AC9KQ AC9KW AC9LV AC9LZ AC9NC AC9NE AC9PR AC9S AD0AB AD0AK AD0AM AD0BI AD0BL AD0CI AD0DA AD0DB AD0DX AD0FB AD0FL AD0GW AD0H AD0HJ AD0HW AD0IE AD0IU AD0JA AD0K AD0LI AD0NP AD0NQ AD0P AD0PE AD0QH AD0RB AD0RM AD0RW AD0S AD0ST AD0TR AD0WS AD0WX AD1C AD1L AD1T AD2EE AD2H AD2KA AD2L AD2SH AD2TM AD3CX AD3Y AD4AA AD4AX AD4AX/4 AD4C AD4CJ AD4CS AD4EB AD4ES AD4ET AD4IE AD4J AD4KJ AD4PZ AD4QT AD4RE AD4SB AD4SM AD4TA AD4TJ AD4TR AD4TT AD4UL AD4UM AD4XT AD4YQ AD4Z AD4ZC AD4ZU AD5A AD5BU AD5CQ AD5DX AD5EN AD5HV AD5IW AD5LU AD5MD AD5MN AD5MT AD5SJ AD5SX AD5T AD5TT AD5UJ AD5UQ AD5VC AD5VS AD5W AD5WB AD5XD AD5XU AD5YB AD5YJ AD6BI AD6E AD6FR AD6GE AD6GI AD6HF AD6HV AD6JV AD6LV AD6MT AD6NR AD6PB AD6RH AD7AF AD7DB AD7EO AD7HE AD7I AD7J AD7JP AD7KG AD7KI AD7MC AD7MM AD7ND AD7OG AD7SF AD7SN AD7TN AD7UP AD7V AD7XG AD8B AD8C AD8D AD8J AD8J/HR9 AD8M AD8P AD8Y AD9I AD9OV AD9Y AE0EE AE0G AE0JR AE0MT AE0TT AE1EZ AE1ME AE1N AE1P AE1Q AE1T AE2DX AE2JL AE2X AE3D AE3J AE3M AE3RM AE3RT AE3S AE3T AE4CL AE4CW AE4FH AE4M AE4Q AE4QQ AE4R AE4RM AE4T AE4TA AE4TI AE4TJ AE4VE AE4VJ AE4WC AE4WG AE4Y AE5AA AE5B AE5EZ AE5GG AE5GT AE5KC AE5LQ AE5MI AE5MM AE5NW AE5O AE5P AE5QL AE5QU AE5RF AE5S AE5SB AE5SG AE5TD AE5TF AE5TR AE5VB AE5VH AE5VR AE5WU AE5X AE5XQ AE5YC AE5YP AE5ZA AE5ZC AE5ZE AE6BH AE6C AE6F AE6JV AE6MO AE6PL AE6WR AE6XC AE6Y AE6YB AE6ZB AE7AB AE7AP AE7BT AE7CA AE7CG AE7DW AE7EE AE7EM AE7EU AE7H AE7JP AE7JW AE7KI AE7LT AE7PV AE7QT AE7U AE7US AE7VA AE8CW AE8J AE8M AE8S AE8TF AE8TT AE9C AE9DX AE9LL AF0E AF0S AF0W AF0XX AF0Z AF1Q AF1T AF2D AF2S AF3I AF3IF AF3K AF3T AF3X AF4AI AF4D AF4HL AF4HX AF4K AF4NW AF4RK AF4VA AF4WH AF4Z AF5AF AF5CC AF5DI AF5DM AF5EH AF5EL AF5FJ AF5FM AF5FX AF5GG AF5I AF5JG AF5M AF5MR AF5OD AF5OI AF5PO AF5Q AF5T AF5UX AF5VO AF5XF AF5XL AF5YH AF5Z AF5ZF AF6F AF6GA AF6GQ AF6MS AF6N AF6O AF6PH AF6PZ AF6SA AF6TC AF6TF AF6WF AF6WG AF7A AF7BU AF7EL AF7FP AF7KE AF7LZ AF7M AF7NX AF7O AF7QJ AF7QZ AF7RV AF7S AF7TR AF7UK AF7VP AF7XI AF7XM AF7Z AF8A AF8C AF8M AF8P AF8RH AF9J AF9S AG0A AG0DX AG1RL AG2AA AG2J AG2M AG2T AG3Q AG3R AG3V AG4EP AG4IL AG4IM AG4LT AG4M AG4P AG4W AG4WY AG4YL AG5AB AG5BA AG5BC AG5CC AG5DB AG5EK AG5FB AG5FU AG5GL AG5HR AG5HW AG5IX AG5JW AG5KJ AG5S AG5W AG5Z AG6AG AG6AU AG6AY AG6BJ AG6CJ AG6EL AG6GL AG6IS AG6JA AG6JY AG6LJ AG6OX AG6RX AG6T AG6TS AG6V AG6VH AG6WG AG6X AG7AA AG7AD AG7N AG7U AG8C AG9A AG9C AG9S AH0BT AH0K AH0KT AH2O AH2R AH6AX AH6EZ/W7 AH6FX/W4 AH6IO AH6KO AH6KW AH6NM AH6RE AH6U AH6V AH6WX AH7/K8PGJ AH7C AH7U AH8N AI0L AI0M AI0Y AI1K AI1V AI1W AI2I AI2N AI2Q AI2S AI2T AI3G AI3Q AI3Z AI4C AI4CJ AI4DB AI4EY AI4GR AI4IC AI4JU AI4KM AI4LU AI4QQ AI4QR AI4RF AI4RJ AI4UN AI4WL AI4WU AI4WW AI4X AI5BL AI5I AI5IN AI5P AI5SF AI5Z AI6A AI6AQ AI6CN AI6CU AI6DO AI6DS AI6EC AI6EG AI6EJ AI6HD AI6IE AI6II AI6IN AI6J AI6JB AI6JJ AI6JZ AI6KG AI6LY AI6MC AI6O AI6OS AI6RE AI6SL AI6US AI6UW AI6V AI6XN AI6YL AI6Z AI7AA AI7F AI7H AI8F AI8Y AI9I AI9K AI9L AI9R AI9T AJ0CM AJ1DM AJ1F AJ1G AJ1Q AJ1S AJ2E AJ2G AJ2I AJ2T AJ2Y AJ3DI AJ3M AJ3O AJ3T AJ4A AJ4AA AJ4F AJ4GO AJ4HW AJ4JJ AJ4LF AJ4LM AJ4LN AJ4M AJ4RS AJ4SB AJ4TF AJ4TW AJ4UQ AJ4VE AJ4XM AJ4ZU AJ5C AJ5E AJ5F AJ6DX AJ6T AJ6V AJ7C AJ7G AJ7T AJ8B AJ9A AJ9C AJ9D/7 AJ9K AJ9M AK0AA AK0BC AK0DX AK0F AK0M AK0MR AK0SK AK0W AK1N AK1P AK1W AK2G AK2S AK2U AK3Q AK3V AK3Y AK4AO AK4AT AK4CJ AK4D AK4JA AK4NC AK4NY AK4NZ AK4OD AK4OH AK4PI AK4QR AK4TW AK4VQ AK4VU AK4Z AK5CT AK5DX AK5SD AK5WB AK5X AK5Y AK6M AK6R AK6TR AK6VS AK6W AK7AN AK7AT AK7DB AK7DD AK7G AK7H AK7MG AK7O AK7RM AK8A AK8H AK9B AK9D AK9S AL1G AL2F AL4B AL4I AL4Y AL5M AL7CE AL7GA AL7JX AL7KC AL7L AL7LO AL7RF AL7RS AL7TC AL9A AM625VQ AN400A AN400D AN400E AN400G AN400I AN400M AN400N AN400R AN400T AN400V AP2IA AT1HQ AT2W AT3T AT5M AT5R AT5X AY1D B1W B1Z B3D B4HQ B4R B4S B4T B4W B7HQ B7K B7M B7P B7Q B8/BA1GN B9HQ B9K BA1GN/8 BA1PK BA1SN BA2BA BA2BI BA3MM BA3OM BA3QZ BA3TT BA4DL BA4DW BA4EO BA4ER BA4II BA4MY BA4SD BA4TB BA4WR BA5CJ BA5CW BA5DX BA5HAM BA7CK BA7IO BA7JA BA7JS BA7NQ BA7QT BA8AG BA8AT BA8BA BA8CY BD0AAI BD1IIJ BD1LT BD1RX BD2CO BD2FW BD2RWS BD2SH BD3CB BD3OM BD3PXM BD3QA BD3RX BD4AKC BD4FFM BD4HZX BD4IJ BD4QA BD4UJ BD4WN BD5BPA BD5FFK BD5XM BD5XX BD6AHP BD6AHU BD6OT BD6RD BD7BM BD7BW BD7DX BD7IAL BD7IS BD7KBB BD7LMD BD7OB BD7OXR BD8ASG BD8NBG BD9ATY BD9XE BG0ARE BG0ATE BG0AXS BG1AL BG1SZT BG1WNU BG2AUE BG2CTX BG2VIA BG3GEF BG3IAY BG3ITB BG3OJZ BG3UPA BG3UTD BG4AHK BG4DRL BG4FRZ BG4GOV BG4HJE BG4HRM BG4HRM/7 BG4HUL BG4QNE BG4TMC BG4TRN BG4UQX BG4VRG BG4WOM BG5BDY BG5BWZ BG5EEF BG5EFD BG5HVP BG5IFW BG5JNT BG5TOX BG5UDN BG5VSD BG6AHD BG6CCP BG6CJI BG6FDZ BG6LQZ BG7BDB BG7BES BG7DOD BG7OAJ BG7RCX BG7SFE BG8FT BG8GAM BG8HOB BG8IL BG8INK BG8NUD BG8SRQ BG8TFN BG9CMG BG9HKP BG9QM BG9XD BH1BMG BH1BOQ BH1CXR BH1EBF BH1KVZ BH1MHI BH1SCW BH1UVS BH2RO BH3PTL BH3SCC BH4AYG BH4BFS BH4BQI BH4CAC BH4DKO BH4IGO BH4LGE BH4OEW BH4OUF BH4QYX BH4RNX BH4SKP BH4SYG BH4TNQ BH4TQX BH4TVU BH4TXN BH4TYL BH4UTT BH4WPN BH6JFR BH6KOK BH7JUO BH7LSW BH7PFH BH8ASZ BH8BJO BH8FJA BI3NAW BI3NTC BI4MT BI4OJF BI4SCC BI4SHV BI4VIP BI4VTX BI4WXD BI7OEZ BI8FZA BM0DX BP0P BU2CN BV0HQ BV0MT BV0WPX BV1EK BV1EL BV2A/3 BV2KI BV3UF BV4WN BV60CRA BW/JL3RDC BW0PX BX2AB BX2AK BX3AA BX3AC BX4AG BX6AD BY1AS BY1CQ BY1D BY2AA BY2HIT BY2T BY2WL BY3CN BY4AA BY4AE BY4BBS BY4JN BY4QA BY4RB BY4TC BY5/DF9LJ BY5CD BY5HB BY6AC BY6DX BY6LY BY6QS BY7KTO BY7MJ BY7PP BY7SH BY8DX BY9CA C37N C37NL C37RC C37URA C44C C4A C4I C4W C4Z C52C C5C C5YK C6AGU C6AKQ C6AKV C6AMM C6ANA C6ANM C6APY C6ARU C6ARW C6AUM C91B C91C C91EP C91IJ C91IW C91TDD C92ZO C93PA CA1LEW/2 CA2CEV CA3CBM CA3JRI CA3LMO CA4CBK CA4SFT CA4UFC CA5GRF CA7CAQ CB0Y CB1H CB1S CB1W CB3F CB3L CB3LR CB3R CB3W CE0Y/NO9E CE0Y/R4WAA CE1ANF CE1AT CE1BF CE1CA CE1DY CE1LTL CE1OEB CE1RPW CE1TT CE1UGE CE1UMY CE1WFN CE2AWW CE2CT CE2HZ CE2LML CE2LS CE2MT CE2MUF CE2MVF CE2RZJ CE2SQE CE2WNW CE3/M0BLF/7 CE3/VE7BFN CE3AA CE3CBM CE3CT CE3DNP CE3EPN CE3GDR CE3JRI CE3KHZ CE3LI CE3NR CE3OP CE3PCG CE3PG CE3SBQ CE3TAZ CE3WW CE3WYZ CE4CBJ CE4KCA CE4SFG CE5AUC CE5JA CE5JZO CE6DFY CE6PGO CE6SAX CE6TC CE6TRA CE7KF CE7PGO CE7VPQ CE8EIO CF2BK CF2CZ CF2KZ CF2MO CF2QR CF2RC CF2WFD CF3A CF3CCO CF3FF CF3IK CF3KGK CF3NPC CF3NQ CF3RAC CF3RKM CF3SZ CF3TPV CF3ZDX CF3ZNW CF6CV CF6XDX CF7CDB CF7FC CF7JC CF7MAY CF7MM CF7RR CF7SRY CF7XNL CG1BB CG1JS CG1RSM CG2AWR CG2I CG2OCH CG2OV CG3ABN CG3AT CG3CW CG3CX CG3CYK CG3EY CG3HEU CG3IAE CG3KI CG3KTB CG3RIA CG3TW CG3USP CG3WKG CG4JBB CG5AAD CG5FX CG5GC CG5MX CG5TLW CG6AO CG6AX CG6BF CG6LB CG6QO CG6SPS CG6UX CG6WQ CG7SAR CG7SCC CG9HF CG9ML CG9ZZ CI1AAA CI2LI CJ3A CJ3T CM2FRB CM2HYR CM2KL CM2MM CM2RSV CM2XN CM2YV CM3EFM CM3JRH CM6ARD CM7OA CM88VD CM8NMN CN2A CN2AA CN2BW CN2R CN3A CN3AA CN3R CN8CE CN8KD CN8LI CN8MAA CN8VO CN8WW CN8YR CN8YZ CO0CB CO0CT CO2AJ CO2AME CO2AN CO2CW CO2ER CO2GG CO2GL CO2GLK CO2II CO2JA CO2JD CO2JW CO2KK CO2KL CO2KY CO2PTE CO2QM CO2RQ CO2RVA CO2SG CO2VDD CO2VE CO2WL CO2XK CO2XV CO2YQ CO2YT CO3DSE CO3GD CO3HMR CO3JA CO3LC CO3LF CO3TJ CO3VR CO6CAC CO6EC CO6GU CO6HK CO6HLP CO6HZ CO6LC CO6LE CO6LP CO6OO CO6RD CO6WD CO6WYR CO6YAC CO7EH CO7ES CO7RR CO8AW CO8CY CO8DM CO8FD CO8LY CO8NDZ CO8RH CO8RRM CO8SJ CO8TH CO8TW CO8WN CO8ZV CO8ZZ CO8ZZF CO9KAA CP1FF CP5HK CP6GR CP6UA CQ3L CQ3W CQ7EPC CQ7X CQ8CQ CQ8M CQ9T CR2A CR2B CR2M CR2OO CR2V CR2W CR2X CR3A CR3G CR3L CR3OO CR3W CR3WW CR3Z CR5A CR5C CR5CW CR5D CR5HQ CR5K CR5L CR5M CR5SSB CR5T CR5U CR5V CR6A CR6K CR6P CR6R CR6T CR6X CR6Z CR7AJL CR7AMH CR8ABC CR9ABG CS2C CS2S CS2V CS5CRE CS5LX CS5RPT CS7/DO3HK CS7AFI CS7AFP CS7AJM CS7AKW CS9/PD3EM CS9ABC CT1AGF CT1AGS CT1AL CT1AOZ CT1APP CT1BH CT1BLE CT1BOH CT1BOL CT1BWU CT1BXE CT1BXT CT1BYK CT1CJJ CT1CZT CT1DHX CT1DJE CT1DQV CT1DRB CT1DSV CT1DVV CT1DZY CT1EAT CT1EAV CT1EBM CT1EDJ CT1EGF CT1EHK CT1EKD CT1EKU CT1ELZ CT1ENV CT1EOD CT1EPC CT1ERW CT1ESV CT1ETX CT1EVE CT1EWA CT1EXR CT1FAC CT1FHL CT1FOQ CT1FPW CT1FSC CT1GFQ CT1GVN CT1HIX CT1HXB CT1IQI CT1ISF CT1IW CT1JGA CT1JOH CT1JRZ CT1ZQ CT1ZW CT2FZY CT2GMH CT2GQN CT2GSN CT2HKN CT2HPM CT2HPN CT2HTM CT2IBY CT2IOV CT2ITR CT2IVH CT2JBD CT2JMR CT2JVP CT2JXU/P CT3BD CT3BX CT3DL CT3EE CT3FW CT3HF CT3KN CT3KY CT3MD CT4NH CT5GOJ CT7/F6HBR CT7/F6IRA CT7ABE CT7ABG CT7ABP CT7ABQ CT7ACG CT7ADH CT7AEQ CT7AEZ CT7AGN CT7AGR CT7AGZ CT7AHQ CT7AHV CT7AIU CT7AIX CT7AJL CT7AMF CT7ANG CT7ANO CT7AQS CT9/DJ2YA CT9/DK2KT CT9/DL3KWF CT9/DL3KWR CT9/DL5AXX CT9/DL5RDP CT9/OH2BTB CT9/OK7U CT9/R7KW CT9/R9DX CT9/UA9CDC CU2AA CU2AF CU2ARA CU2CE CU2CR CU2DX CU2KG CU3AC CU3AN CU3DX CU3EQ CU4AT CU4DX CU5AQ CU7CG CU8FN CU9AB CV2D CV3D CV5Q CV7S CW1DC CW4MAX CW4R CW5B CW5W CW7C CX/W1UE CX1AA CX1AV CX1CAN CX1CK CX1DZ CX1EK CX1OB CX2AM CX2AQ CX2BR CX2CC CX2DA CX2DK CX2LT CX2TG CX2UI CX3CCC CX4AD CX4AT CX4BW CX4DX CX4RX CX4SS CX5A CX5ABM CX5BAB CX5BE CX5RW CX5UA CX6DRA CX6VM CX7ACH CX7AF CX7BBR CX7SS CX8DS CX90IARU CX9AU CX9BU D1A D1AZ D1CTT D1DNR D1DX D1HQ D1ITU D1M D1WA D1WW D1Z D3AM D41CV D44AC D44BS D44EE D44TBT D4C D4E D4Z D66D D70LW D73G DA0A DA0AA DA0C DA0CA DA0CCC DA0HEL DA0HQ DA0HSC DA0KOL DA0T DA0WFF DA0WRTC DA0Y DA0YL DA2A DA2C DA2ER DA3T DA3X/P DA9A DA9L DB0RC DB1BAN DB1HCL DB1HEF DB1JC DB1RLE DB1RUL DB1SS DB1VQ DB2B DB2BJT DB2HG DB2KT DB2MJ DB3BS DB3FS DB3MA DB3ZZ DB4BJ DB4MM DB5FW DB5SB DB5ZP DB6JG DB6NT DB6VH DB6VP DB7LG DB8AH DB9EV DB9OH DB9RZ DC0KK DC1DB DC1HR DC1JAG DC1LEX DC1MAS DC1XM DC1YB DC2AN DC2CL DC2IP DC2TL DC2VE DC2YT DC2YY DC3RJ DC4A DC4XO DC500LS DC5ES DC5IMM DC5PAD DC6CZ DC6KW DC6RI DC7DX DC8QT DC8SG DC8WPA DC8XV DC9ER DC9ZP DD0CC DD0DRK DD0PM DD0VE DD0VR DD0VS DD0VU DD1A DD1AX DD1JAN DD1JN DD1MAT DD1OP DD1UN DD1US DD2CW DD2EG DD2ML DD2NU DD2VO DD2XJ DD3D DD3DZ DD3KF DD3SP DD4BY DD4DA DD4EW DD4VB DD5AJ DD5DXD DD5FM DD5FZ DD5HP DD5HT DD5JK DD5KD DD5KG DD5M DD5MA DD5OO DD5RS DD5ZZ DD6DR DD7BW DD7GK DD7NT DD7ZN DD7ZT DD8IL DD8SM DD8VX DD9HK DD9KE DD9NT DD9PS DD9WG DD9WL DF0AT DF0BLM DF0BV DF0BW DF0CHE DF0CI DF0DA DF0DX DF0EFG DF0EG DF0FFH DF0HQ DF0IA DF0IC DF0ID DF0KF DF0RE DF0RW DF0SAX DF0SC DF0SL DF0SQ DF0SX DF0TX/P DF0VK DF0VK/P DF0WE DF1AN DF1ASG DF1BN DF1BV DF1CV DF1DN DF1DT DF1DV DF1DX DF1GC DF1HF DF1HPK DF1IAQ DF1JC DF1JM DF1KG DF1LON DF1LX DF1MHL DF1MM DF1NP DF1OE DF1PY DF1QQ DF1RQ DF1SD DF1SF DF1SZ DF1TL DF1VH DF1WR DF1WS DF1XC DF1YY DF1ZA DF2AD DF2AJ DF2AP DF2BO DF2CD DF2CH DF2CQ DF2DJ DF2DR DF2EQ DF2F DF2FM DF2GH DF2GW DF2HQ DF2IC DF2IY DF2KD DF2KK DF2LH DF2MC DF2MM DF2OU DF2PH DF2PI DF2PY DF2QC DF2RG DF2RR DF2SD DF2TG DF2TT DF2UA DF2UD DF2UQ DF2UU DF2VZ DF2WF DF3AK DF3AO DF3AX DF3CB DF3EC DF3EH DF3FS DF3HD DF3IR DF3IS DF3IU DF3JO DF3MC DF3OL DF3PN DF3QG DF3TE DF3VG DF3VM DF3XZ DF4BV DF4DT DF4ER DF4EU DF4GA DF4IAR DF4JM DF4PD DF4TD DF4TS DF4UM DF4WA DF4WC DF4WG DF4WV DF4XF DF4XG DF4XX DF4ZK DF4ZL DF4ZS DF5A DF5A/P DF5AN DF5AU DF5BM DF5BX DF5DG DF5DW DF5DY DF5EG DF5EM DF5HG DF5LW DF5MA DF5RF DF5SF DF5SM DF5TR DF5UL DF5WN DF5WW DF5XQ DF5YA DF5ZW DF6EH DF6FM DF6FQ DF6JC DF6JF DF6KA DF6MU DF6NW DF6PB DF6QB DF6QC DF6QE DF6QV DF6RI DF6VL DF6WE DF6YC DF6YM DF7AP DF7AT DF7BL DF7CP DF7DQ DF7DR DF7EF DF7EM DF7ER DF7FC DF7GG DF7IS DF7JC DF7JU DF7LA DF7LS DF7NS DF7OA DF7PM DF7PX DF7RG DF7TS DF7TV DF7XH DF7YE DF7ZS DF8AA DF8AE DF8AN DF8CS DF8HS DF8JD DF8JK DF8KI DF8KN DF8KY DF8LC DF8PN DF8QB DF8SB DF8SO DF8TM DF8TY DF8UO DF8XC DF8XR DF8YZ DF8ZH DF9DD DF9DH DF9EY DF9GH DF9GR DF9IX DF9JL DF9JS DF9KF DF9LW DF9MP DF9OB DF9OO DF9PE DF9PG DF9RD DF9TF DF9TS DF9TW DF9VJ DF9WB DF9XV DF9YC DF9ZP DF9ZV DG0AM DG0CG DG0CH DG0DG DG0ERS DG0KS DG0LFG DG0OBU DG0OFZ DG0OJO DG0OM DG0OME DG1AAE DG1BHA DG1BQC DG1CMZ DG1DUG DG1EA DG1EKL DG1EZ DG1FSK DG1HXJ DG1IU DG1NPM DG1PU DG1PW DG1ROD DG1RPU DG1RUG DG1RZH DG1SGW DG1TI DG1VL DG1YBN DG1YCF DG1YFF DG1YRT DG2BAR DG2BHB DG2EKO DG2FAJ DG2FDE DG2GAW DG2JA DG2KO DG2MEL DG2MKV DG2NCE DG2NMH DG2RBH DG2RON DG2SDK DG2SEG DG2WN DG2YCB DG2ZJ DG3BCZ DG3FAW DG3FFM DG3IS DG3MDE DG3MR DG3NCZ DG3TF DG4DX DG4FCN DG4FDQ DG4NAT DG4VD DG500BIER DG5AA DG5AAP DG5BKM DG5DBT DG5DJ DG5E DG5FF DG5KX DG5LAC/P DG5LP DG5MEX DG5MLA DG5MMQ DG5NAB DG5NET DG5OBB DG5YHK DG6DAF DG6IMR DG6ME DG6NBW DG6PW DG6SA DG6TOM DG6YID DG7BST DG7CF DG7DBR DG7EE DG7FB DG7FEQ DG7HL DG7JB DG7MA DG7MF DG7NFX DG7RO DG8AM DG8DBW DG8DP DG8EV DG8HJ DG8KAD DG8NCY DG8NGE DG8OBN DG8VE DG9BHU DG9FBA DG9MDM DG9MEH DG9MGU DG9NAV DG9NED DG9NEO DG9RAB DG9SEC DG9SEH DG9SQ DG9VH DH0DX DH0F DH0GDS DH0GHU DH0GSU DH0JAE DH0MB DH0MWH DH0PAZ DH1AKG DH1CH DH1DAC DH1GW DH1JG DH1NBE DH1OK DH1PAL DH1RK DH1TST DH1UK DH1VY DH2AAK DH2DA DH2DAM DH2FW DH2JD DH2MS DH2PA DH2PAF DH2PL DH2RTW DH2UAI DH2URF DH2VC DH2YGT DH3AP DH3FEN DH3MIT DH3SR DH4JQ DH4PSG DH5ABC DH5BS DH5KLI DH5MK DH5MM DH5NT DH5WB DH5YM DH6AD DH6BH DH6DAO DH6KM DH6VL DH7ACI DH7FA DH7HQ DH7KU DH7OM DH7PR DH7TNO DH7TS DH8AF DH8BAO DH8BAT DH8BQA DH8IAB DH8KV DH8MS DH8VV DH8WG DH8WM DH8WN DH8WR DH9AB DH9DX/P DH9FAW DH9GCD DH9SB DJ0A DJ0AH DJ0AJ DJ0AQ DJ0BE DJ0DO DJ0FBU DJ0FX DJ0IF DJ0JG DJ0MCZ DJ0MDR DJ0MY DJ0RU DJ0SP DJ0YI DJ0YZ DJ1AA DJ1AE DJ1AK DJ1AN DJ1BV DJ1BWH DJ1DB DJ1FZ DJ1KJ DJ1KS DJ1KW DJ1MM DJ1ND DJ1NO DJ1OJ DJ1PE DJ1PQ DJ1SD DJ1SL DJ1TH DJ1TO DJ1TU DJ1XT DJ1YF DJ1YFK DJ1ZH DJ1ZU DJ2AX DJ2BC DJ2BC/P DJ2BW DJ2FR DJ2GM DJ2GMS DJ2IA DJ2JS DJ2KD DJ2MT DJ2MX DJ2NR DJ2OJ DJ2PR DJ2QV DJ2RG DJ2RL/P DJ2SEA DJ2SL DJ2SN DJ2ST DJ2SX DJ2TI DJ2VA DJ2WK DJ2XC DJ2XO DJ2YA DJ2YE DJ2ZX DJ3AA DJ3AK DJ3AX DJ3BO DJ3CQ DJ3CS DJ3DQ DJ3EZ DJ3GE DJ3GG DJ3GZ DJ3HW DJ3IW DJ3JB DJ3JD DJ3KR DJ3NG DJ3NJ DJ3NK DJ3OS DJ3RA DJ3RL DJ3TU DJ3WE DJ3XA DJ3XD DJ3ZF DJ3ZX DJ4AX DJ4BO DJ4CW DJ4DN DJ4DY DJ4EJ DJ4EN DJ4GX DJ4JF DJ4KW DJ4MH DJ4MJ DJ4MM DJ4MO DJ4MZ DJ4OQ DJ4PK DJ4RP DJ4WM DJ4WS DJ4WT DJ4XD DJ4XR DJ50MUC DJ5AN DJ5AV DJ5AZ DJ5BK DJ5BT DJ5CL DJ5EJ DJ5EU DJ5IW DJ5JH DJ5KW DJ5KX DJ5LA DJ5LY DJ5MF DJ5MN DJ5MO DJ5MW DJ5MY DJ5PM DJ5QE DJ5QK DJ5QX DJ5TT DJ5UZ DJ5VB DJ5ZV DJ6DO DJ6FO DJ6GI DJ6HB DJ6HE DJ6HL/EA8 DJ6HR DJ6IH DJ6JH DJ6MD DJ6MN DJ6OI DJ6OK DJ6OL DJ6OV DJ6OZ DJ6PC DJ6QT DJ6RN DJ6TB DJ6TF DJ6TK DJ6UP DJ6VM DJ6XB DJ6YL DJ6ZC DJ6ZJ DJ6ZM DJ7AO DJ7AT DJ7BA DJ7BU DJ7EC DJ7EO DJ7HH DJ7IK DJ7JC DJ7MH DJ7OM DJ7OQ DJ7PI DJ7PT DJ7R DJ7RL DJ7SW DJ7TW DJ7UC DJ7UD DJ7UO DJ7WG DJ7WW DJ7XB DJ7XG DJ7YM DJ7YP DJ8DJ DJ8EF DJ8ES DJ8EW DJ8GE DJ8HB DJ8KW DJ8KZ DJ8MP DJ8NT DJ8OG DJ8QA DJ8QP DJ8RS DJ8SW DJ8UL DJ8VC DJ8VH DJ90IARU DJ9AO DJ9BM DJ9BN DJ9BO DJ9BX DJ9CN DJ9DZ DJ9EG DJ9ER DJ9EU DJ9GS DJ9HX DJ9IE DJ9JD DJ9JU DJ9KG DJ9KH DJ9KM DJ9MH DJ9QE DJ9RB DJ9RR DJ9SN DJ9SO DJ9VA DJ9XB DJ9YL DJ9ZB DK0AE DK0ALC DK0BZ DK0DX DK0ED DK0EE DK0FC DK0FFO DK0FR DK0FRI DK0GER DK0HAT DK0HF DK0HR DK0IU DK0IW DK0JA DK0JRS DK0L DK0LH DK0MM DK0MN DK0MN/P DK0OD DK0PO DK0PT DK0RX DK0SU DK0SV DK0TU DK0UB DK0V DK0VE DK0WM DK0WRTC DK0XB DK1A DK1AC DK1AF DK1AUP DK1AW DK1AX DK1BN DK1CO DK1EI DK1EY DK1FT DK1FW DK1GW DK1HL DK1IP DK1IS DK1IZ DK1JU DK1K DK1KC DK1LRS DK1MAX DK1MIR DK1MM DK1NO DK1OZ DK1PG DK1PL DK1PZ DK1QH DK1RU DK1SB DK1TF DK1TW DK1TX DK1UJ DK1VG DK1VP DK1WA DK1WB DK1WF DK1WI DK1WP DK1WU DK1YP DK2AJ DK2AMS DK2AN DK2AT DK2AY DK2BJ DK2BK DK2BU DK2CC DK2CF DK2CH DK2CX DK2DQ DK2ELF DK2FG DK2GZ DK2HZ DK2LO DK2MB DK2MC DK2MU DK2NG DK2NPM DK2O DK2OY DK2RO DK2RZ DK2SAM DK2SG DK2SZ DK2TG DK2TS DK2TX DK2VM DK2WC DK2WF DK2WM DK2WU DK2YL DK2ZO DK3A DK3AX DK3BK DK3BN DK3CC DK3DG DK3DUA DK3EE DK3GG DK3GI DK3HM DK3HV DK3KD DK3NU DK3PM DK3QN DK3QQ DK3QZ DK3RA DK3SJ DK3T DK3TL DK3TNA DK3UA DK3WE DK3WJ DK3WL DK3WM DK3WN DK3WW DK3XM DK3YD DK4AA DK4BY DK4CR DK4CU DK4DE DK4DS DK4EF DK4EI DK4FP DK4FT DK4FZ DK4G DK4HH DK4IO DK4LEH DK4LI DK4LX DK4MDA DK4MT DK4MX DK4PB DK4PE DK4PL DK4QT DK4RL DK4RX DK4SC DK4SR DK4TP DK4US DK4VF DK4VW DK4VY DK4WA DK4WO DK4WW DK4XB DK4YF DK4YJ DK50MUC DK5A DK5AD DK5AI DK5AL DK5AN DK5AX DK5CF DK5CM DK5D DK5DC DK5DM DK5DQ DK5EQ DK5EZ DK5GB DK5HZ DK5IM DK5JI DK5JM DK5KF DK5KK DK5LC DK5LQ DK5MB DK5MJ DK5MR DK5OCE DK5OK DK5OZ DK5PD DK5PF DK5PQ DK5PR DK5QN DK5RL DK5SF DK5ST DK5T DK5TX DK5WB DK5WN DK5WO DK5XG DK5XO DK5ZX DK65DARC DK6AH DK6AJ DK6AO DK6AR DK6BT DK6CQ DK6CS DK6DL DK6FC DK6HN DK6IM DK6IT DK6JM DK6JU DK6LH DK6MO DK6MP DK6NJ DK6OK DK6OR DK6PB DK6QW DK6RY DK6SP DK6TM DK6TV DK6VCO DK6WA DK6WH DK6WK DK6WL DK6YM DK7AW DK7C DK7CH DK7CX DK7DE DK7DU DK7DY DK7FP DK7FS DK7FU DK7FZ DK7GH DK7HA DK7IF DK7IH DK7JQ DK7MCX DK7MD DK7NL DK7NO DK7OB DK7OG DK7SS DK7TM DK7TX DK7TY DK7UM DK7VW DK7YY DK7ZB DK7ZH DK7ZT DK8AX DK8CC DK8CX DK8DV DK8EI DK8EY DK8FA DK8FD DK8FG DK8FS DK8HE DK8IF DK8IT DK8MCT DK8MZ DK8NC DK8NI DK8NT DK8NW DK8NX DK8OL DK8QH DK8R DK8RE DK8SR DK8SV DK8TA DK8TU DK8VX DK8WG DK8YY DK8ZB DK8ZZ DK9AT DK9BW DK9CG DK9ETM DK9FE DK9FEC DK9HE DK9HN DK9IP DK9JC DK9JI DK9JL DK9JS DK9MH DK9MS DK9OV DK9OY DK9PD DK9PY DK9SA DK9SF DK9TN DK9VA DK9VS DK9VZ DK9WB DK9WE DK9WI DK9ZQ DL0ABL DL0ABT DL0AC DL0AF DL0AH DL0AT DL0BOR DL0BX DL0BZA DL0C DL0CG DL0CM DL0CS DL0CS/P DL0CW DL0D DL0DA DL0DG DL0DIX DL0DM DL0DRL DL0DX DL0ESA DL0ET DL0EUF DL0FA/P DL0FH DL0FMC DL0FOR DL0FTL DL0GD DL0GD/P DL0GE/P DL0GEO DL0GH DL0GL DL0GMH DL0GN DL0GRH DL0GSH DL0HAM DL0HFC DL0HI DL0HMK DL0HN DL0HQ DL0HS DL0HSC DL0II DL0IL DL0JBB DL0JRH DL0KA DL0KAC DL0KCT DL0KJ DL0KWH/P DL0LA DL0LBS DL0LH DL0LK DL0LN DL0LSW DL0MCM DL0MET DL0MFF DL0MFH DL0MFL DL0MHD DL0ML DL0MLU DL0NG DL0NM DL0NP DL0OVA DL0P DL0PCK DL0PE DL0POLIO DL0PS DL0RD DL0RM DL0RN DL0RUS DL0SLG DL0SN DL0SOP DL0TN DL0TUM DL0TY DL0UM DL0V DL0VG DL0VW DL0WAE DL0WH DL0WM DL0WN DL0WW DL0WX DL0XAX DL0XM DL0XY DL0ZB DL1A DL1ABJ DL1AG DL1AH DL1AI DL1AIW DL1AKL DL1AKP DL1ALN DL1AMH DL1AMQ DL1AOB DL1AQU/P DL1AQY DL1ARH DL1ARJ DL1AS DL1ASA DL1ASF DL1ATZ DL1AUZ DL1AVA DL1AVF DL1AWC DL1AWM DL1AXI DL1AXX DL1BA DL1BBO DL1BDU/P DL1BFR DL1BJO DL1BPK DL1BRD DL1BRL DL1BSH DL1BSN DL1BUG DL1BWU DL1BZA DL1C DL1CBQ DL1CC DL1CF DL1CG DL1CLM DL1CW DL1DA DL1DAW DL1DBL DL1DBR DL1DCT DL1DF DL1DQC DL1DQW DL1DSW DL1DTD DL1DTL DL1DVE DL1DVO DL1DWL DL1DWR DL1DXA DL1DXF DL1DXL DL1EAL DL1EEZ DL1EF DL1EFW DL1EHG DL1EHR DL1EJA DL1EJD DL1EK DL1EKC/P DL1EKG DL1EKO DL1EKQ DL1EL DL1EMY DL1EOT DL1EST DL1FAR DL1FCL DL1FCU DL1FMG DL1FMK DL1FW DL1GBQ DL1GKC DL1GLH DL1GLO DL1GME DL1GO DL1GWW DL1GZW DL1HAA DL1HAZ DL1HBD DL1HBT DL1HDL DL1HQE DL1HQN DL1HRN DL1HSI DL1HTB DL1HTX DL1IAD DL1IAO DL1IBZ DL1ICB DL1IF DL1II DL1JCM DL1JDQ DL1JDT DL1JEL DL1JFM DL1JGO DL1JHW DL1JNA DL1JPF DL1JWA DL1KAS DL1KAT DL1KFS DL1KRT DL1KRW DL1KWK DL1KZA DL1LAF DL1LH DL1LOD DL1LQL DL1LRA DL1LRI DL1LSW DL1M DL1MAJ DL1MDU DL1MDV DL1MEV DL1MFZ DL1MGB DL1MHJ DL1MIM DL1MKJ DL1MUC DL1NCB DL1NEK DL1NEO DL1NGS DL1NHW DL1NKB DL1NKS DL1NPG DL1NUB DL1NUX DL1OJ DL1OLI DL1ONI DL1PF DL1PQ DL1PT DL1QH DL1QQ DL1QW DL1RAP DL1REM DL1RG DL1RNN DL1RNT DL1ROJ DL1ROT DL1RPR DL1RTL DL1RTO DL1RTS DL1RYD DL1SAN DL1SBF DL1SBY DL1SDZ DL1SEH DL1SKB DL1SKE DL1SKK DL1SL DL1SMA DL1SO DL1STG DL1STV DL1SVA DL1SWB DL1SXB DL1T DL1TC DL1THB DL1TKB DL1TLA DL1TPY DL1TRK DL1TS DL1VDL DL1VJL DL1VO DL1WA DL1WM DL1WTE DL1XA DL1XG DL1XP DL1YAF DL1YAF/P DL1YAW DL1YAY DL1YCF DL1YD DL1YEN DL1YM DL1YPF DL1ZAX DL1ZBO DL1ZM DL1ZU DL20GDXF DL2A DL2AA DL2AAZ DL2ADI DL2AJB DL2AK DL2AL DL2AMD DL2AMT DL2ANM DL2AOM DL2ARD DL2ARN DL2ASB DL2ASG DL2AVJ DL2AWA DL2AWW DL2AXA DL2AXM DL2AYK DL2BDA DL2BFK DL2BIS DL2BQV DL2BRN DL2BUM DL2CC DL2DIE DL2DN DL2DQL DL2DRM DL2DRU DL2DTJ DL2DUA DL2DVE DL2DWP DL2DX DL2DXA DL2DYL DL2F DL2FAG DL2FAR DL2FCA DL2FDL DL2FHO DL2FK DL2FQ DL2GBB DL2GGE DL2GK DL2GK/P DL2GMI DL2GMS DL2GRC DL2HBF DL2HRF DL2HRS DL2HRT DL2HUM DL2HWH DL2HWI DL2HYH DL2IC DL2IE DL2JAA DL2JLB DL2JRM DL2JX DL2KAS DL2KDF DL2KI DL2KUZ DL2KWA DL2KX DL2LDE DL2LFH DL2LI DL2LMS DL2LRT DL2LSM DL2LVM DL2MDU DL2MDZ DL2MGF DL2MHO DL2MIH DL2MIJ DL2MLU DL2MM DL2MRK DL2MST DL2NBJ DL2NBY DL2NOM DL2NY DL2OBN DL2OE DL2OM DL2PK DL2QB DL2QT DL2R DL2RD DL2RH DL2RMC DL2RNF DL2ROM DL2RPS DL2RSH DL2RTJ DL2RU DL2RUG DL2RUM DL2RZG DL2SAX DL2SER DL2SK DL2SWR DL2SWW DL2TG DL2TM DL2TOS DL2TR DL2VA DL2VBN DL2VE DL2VK DL2VLA DL2VM DL2VPF DL2VPO DL2VRL DL2VWR DL2XC DL2YBG DL2YCD DL2YET DL2YMR DL2ZA DL2ZBO DL2ZM DL2ZN DL3ABL DL3ALI DL3AMB DL3AMI DL3ANK DL3AO DL3ARH DL3ARK DL3ARM DL3AS DL3ASM DL3AZ DL3BCR DL3BPC DL3BQA DL3BUE DL3BVA DL3BXX DL3BY DL3BZ DL3CA DL3CB DL3CQ DL3CR DL3CX DL3DQL DL3DRN DL3DTH DL3DW DL3DXX DL3EAZ DL3EBX DL3EK DL3EL DL3FBB DL3FCG DL3FDL DL3FF DL3FSC DL3GA DL3GBO DL3GD DL3GER DL3HAE DL3HAH DL3HQN DL3HTF DL3HWD DL3HXS DL3IAC DL3IAS DL3IF DL3JAN DL3JJ DL3JJ/P DL3JPL DL3JRA DL3JXN DL3KF DL3KUD DL3KVR DL3KWF DL3KWR DL3LAR DL3LBM DL3LBP DL3LE DL3LO DL3MB DL3MCO DL3MVC DL3NAA DL3NCJ DL3NCR DL3NDD DL3NGN DL3OAU DL3OH DL3PU DL3PW DL3RAD DL3RAH DL3RAR DL3RDM DL3RHN DL3SBD DL3SDN DL3SDW DL3SEM DL3SF DL3SG DL3SKF DL3SKY DL3SWS DL3SYA DL3SZ DL3TC DL3TU DL3TVI DL3TW DL3UB DL3UR DL3VDL DL3VTA DL3VZL DL3WA DL3WB DL3XM DL3YEI DL3YFF DL3YL DL3YM DL3ZAI DL3ZBH DL3ZI DL3ZZA DL40MFR DL40RCE DL4A DL4AAE DL4ABR DL4AC DL4ALI DL4AOJ DL4AUK DL4BBJ DL4CF DL4CW DL4DBG DL4DBM DL4DCE DL4DD DL4DE DL4DG DL4DQA DL4DRW DL4DTL DL4DX DL4DXF DL4DZ DL4EA DL4EAM DL4EAX DL4EBA DL4EBW DL4EDC DL4FAP DL4FAY DL4FCH DL4FDI DL4FDM DL4FF DL4FI DL4FN DL4FNM DL4FO DL4GBA DL4HBF DL4HCF DL4HG DL4HRM DL4HWM DL4IAH DL4IAZ DL4IW DL4JLM DL4JMN DL4JU DL4JWU DL4JZ DL4KCA DL4KG DL4KUG DL4KW DL4KWA DL4LAB DL4LAM DL4LBK DL4LBM DL4LT DL4MA DL4MAK DL4MD DL4ME DL4MFA DL4MFF DL4MFM DL4MFR DL4MG DL4MHA DL4MP DL4NEG DL4RAK DL4RCE DL4RCK DL4RDJ DL4RDP DL4SAW DL4SDT DL4SDW DL4SKF DL4SL DL4SUN DL4SZ DL4SZB DL4TJ DL4UCS DL4UL DL4UNY DL4VAI DL4VM DL4WA DL4WG DL4WK DL4XU DL4YAO DL4YR DL4ZA DL4ZAA DL4ZB DL4ZBY DL4ZM DL500ML DL5AAZ DL5ALW DL5AMF DL5AN DL5ANS DL5ANT DL5AOJ DL5ARM DL5ARZ DL5ASK DL5AWE DL5AWI DL5AX DL5AXX DL5AYI DL5AZZ DL5BAW DL5CC DL5CD DL5CK DL5CL DL5CO DL5CW DL5CX DL5DBH DL5DTG DL5DXS DL5EBE DL5EC DL5FAB DL5FCZ DL5FDP DL5FH DL5FU DL5GAC DL5GBG DL5GCH DL5GSM DL5HAI DL5HCL DL5HF DL5HN DL5IAH DL5IC DL5IF DL5JAB DL5JAG DL5JAN DL5JBW DL5JH DL5JJ DL5JMN DL5JQ DL5JS DL5JWL DL5KBO DL5KBT DL5KM DL5KUD DL5KUT DL5KVV DL5KW DL5L DL5LB DL5LYM DL5MAE DL5MAM DL5MBW DL5ME DL5MEV DL5MFC DL5MFF DL5MFW DL5MHR DL5MK DL5MU DL5N DL5NAM DL5NDX DL5NEB DL5NEN DL5NO DL5NUA DL5OAB DL5OBY DL5OCR DL5PW DL5QS DL5RBW DL5RDO DL5RDP DL5RDQ DL5RFK DL5RJ DL5RK DL5RMH DL5RU DL5SDN DL5SE DL5ST DL5TW DL5UG DL5WB DL5WO DL5WS DL5WW DL5X DL5XAT DL5XJ DL5XL DL5XU DL5YAS DL5YCI DL5YEE DL5YET DL5YL DL5YM DL5YYM DL5ZB DL5ZBA DL5ZBE DL5ZK DL5ZL DL65DARC DL6AA DL6AAF DL6ABB DL6ABN DL6AG DL6AH DL6AL DL6AST DL6ATI DL6ATM DL6AWJ DL6AZ DL6BBF DL6BBR DL6BBT DL6BE DL6BM DL6BR DL6BS DL6CGX DL6CNG DL6CT DL6CWL DL6DCD DL6DH DL6DJ DL6DQW DL6DQW/P DL6DSA DL6DVU DL6EDD DL6ER DL6EZ DL6FAX DL6FBH DL6FBK DL6FBL DL6FBR DL6FCB DL6GCE DL6GV DL6HCC DL6HCF DL6HH DL6HRW DL6IAK DL6II DL6IY DL6JF DL6JI DL6JV DL6JZ DL6KCR DL6KO DL6KR DL6KVA DL6KVB/P DL6KWN DL6LAG DL6LBI DL6LBQ DL6LW DL6MDG DL6MFK DL6MHW DL6MI DL6MIG DL6MK DL6MN DL6MRS DL6MWG DL6NAL DL6NBB DL6NBS DL6NCY DL6NDW DL6NWA DL6O DL6OAA DL6OCH DL6OCM DL6ON DL6OW DL6OZ DL6PO DL6RAI DL6RAW DL6RBH DL6RDE DL6RDM DL6RG DL6SDA DL6SEV DL6SFR DL6SRD DL6TK DL6TR DL6TV DL6UAA DL6UD DL6UHA DL6UHD DL6UKL DL6UM DL6UNF DL6USA DL6WA DL6WT DL6YAO DL6YBD DL6YCU DL6YDH DL6ZB DL6ZBN DL6ZFG DL6ZXG DL70DSH DL7AA DL7ACA DL7ACN DL7ACZ DL7ALM DL7AN DL7ANR DL7AOJ DL7APK DL7APT DL7AQT DL7ARJ DL7ARM DL7ARV DL7AT DL7ATR DL7AU DL7AV DL7AWO DL7AXM DL7BA DL7BC DL7BQ DL7CB DL7CO DL7CU DL7CX DL7DAX DL7DCL DL7DZ DL7ED DL7ET DL7FB DL7FCQ DL7FE DL7FF DL7FP DL7FUA DL7GEM DL7GP DL7GW DL7HU DL7HZ DL7JAN DL7JOM DL7JRD DL7JV DL7KJS DL7KL DL7LF DL7LG DL7LIN DL7LPH DL7LX DL7LZ DL7MAL DL7MB DL7MPA DL7NDS DL7NV DL7NX DL7OD DL7ON DL7PA DL7PV DL7QU DL7RKK DL7RSM DL7RV DL7SAQ DL7SBV DL7SI DL7SLB DL7SP DL7SX DL7TG DL7UAJ DL7UAW/P DL7UCM DL7UCW DL7UDA DL7UG DL7UGN DL7UGO DL7UIO DL7UK DL7UKA DL7ULM DL7UMK DL7UN DL7UPN DL7URB DL7URH DL7URH/P DL7USW DL7USY DL7UXG DL7VEE DL7VHP DL7VIO DL7VMM DL7VOG DL7VPE DL7VRG DL7VX DL7XT DL7YAD DL7YS DL7YY DL7ZZ DL800JE DL8A DL8AAE DL8AAI DL8AAM DL8AAV DL8AKA DL8AWK DL8AX DL8AZ DL8BBJ DL8BH DL8BJ DL8BP DL8BV DL8CA DL8CKL DL8CO DL8DAW DL8DBW DL8DSL DL8DUL DL8DW DL8DWL DL8DWW DL8DXL DL8DXW DL8DYL DL8DZL DL8FAJ DL8FCK DL8FP DL8HK DL8JDX DL8JKN DL8KX DL8L DL8LAQ DL8LBK DL8LR DL8MAS DL8MBS DL8MDW DL8MEF DL8MF DL8MRE DL8NBD DL8NBJ DL8NCM DL8NU DL8OAZ DL8OBE DL8OBF DL8OH DL8OK DL8PG DL8PZ DL8QS DL8RB DL8RDL DL8RJ DL8SAS DL8SCG DL8SDC DL8TG DL8TN DL8TR DL8TV DL8UAT DL8UBR DL8UD DL8UI DL8UIL DL8UKE DL8UKW DL8ULF DL8ULO DL8UNF DL8UP DL8UV DL8UVG DL8VN DL8WEM DL8WN DL8WT DL8WX DL8WYJ DL8YAU DL8YE DL8YED DL8YHR DL8ZAJ DL8ZAW DL8ZP DL8ZU DL9ABM DL9AJ DL9BBA DL9BBE DL9CI DL9CP DL9CW DL9DAC DL9DAJ DL9DBZ DL9DRA DL9DYL DL9ECA DL9EE DL9EJ DL9FB DL9FBF DL9FCP DL9FCQ DL9FCR DL9GCG DL9GFB DL9GMC DL9GMN DL9GRE DL9GS DL9GTB DL9GTD DL9GTI DL9GWA DL9GWD DL9HB DL9HCO DL9IM DL9IU DL9JBN DL9JL DL9JON DL9JSO DL9KCE DL9KI DL9LF DL9LM DL9MBZ DL9MCC DL9MDI DL9MDW DL9MFY DL9MKN DL9MRF DL9MS DL9MWG DL9NAI DL9NBJ DL9NCR DL9NDM DL9NDV DL9NEI DL9NEQ DL9NO DL9OBL DL9OBY DL9OCG DL9OHA DL9PP DL9QJ DL9RAR DL9RBT DL9SAD DL9SAS DL9SAS/P DL9SCO DL9SEP DL9SEV DL9SFE DL9SUB DL9TU DL9UJF DL9UO DL9UP DL9USA DL9W DL9WO DL9YAJ DL9YAO DL9YCS DL9ZAL DL9ZEA DL9ZOG/P DL9ZP DL9ZWG DM04JG DM04XD DM0MORSE DM0Y DM1517L DM16RRV DM1A DM1AOK DM1CM DM1DE DM1FS DM1LC DM1LM DM1MA DM1PL DM200LFS DM200PZL DM2AA DM2AWM DM2BPG DM2BR DM2C DM2CWM DM2DLG DM2DMI DM2DX DM2DXA DM2DXG DM2DZM DM2GG DM2GM DM2I DM2LS DM2M DM2MA DM2MF DM2ORI DM2PB DM2RM DM2RN DM2TO DM2TS DM2W DM2X DM2XM DM3A DM3AZ DM3B DM3BJ DM3C DM3CW DM3F DM3HZN DM3KF DM3KZN DM3M DM3MM DM3PKK DM3PYA DM3SCK DM3SU DM3VL DM3VPJ DM3W DM3WZN DM3XI DM3XM DM3XRF DM3ZF DM3ZM DM4CW DM4DS DM4DX DM4EE DM4G DM4G/P DM4JK DM4KJ DM4M DM4MN DM4TR DM4VPF DM4WL DM4X DM4YWL DM500RT DM5A DM5AT DM5BB DM5CQ DM5CT DM5D DM5DX DM5EE DM5EL DM5EM DM5GI DM5HF DM5JBN DM5JL DM5KK DM5LS DM5MA DM5ML DM5MM DM5N DM5NH DM5NSA DM5P DM5RC DM5RS DM5SB DM5TI DM5TS DM5WH DM5Z DM5ZQL DM6A DM6CS DM6DX DM6HK DM6M DM6MB DM6RAC DM6V DM6WAN DM7C DM7CW DM7MRE DM7PQ DM7T DM88YLF DM8T DM95CB DM9EE DM9EE/P DM9JM DM9K DM9KC DM9KT DM9LSB DN0UKW DN1JRS DN1QP DN2MR DN2RMC DN2WB DN3CX DN5DJ DN5MX DN6JC DO1AYJ DO1CS DO1CVM DO1DJJ DO1FCB DO1FPT DO1GM DO1HGS DO1IN DO1JWZ DO1KLE DO1KRT DO1KUB DO1MGN DO1MPR DO1NWA DO1OH DO1OHL DO1PCD DO1POT DO1RAC DO1RTO DO1RU DO1RWM DO1SJF DO1SVW DO1UKR DO1UZ DO1YHN DO2AMS DO2FM DO2FWW DO2HEY DO2HRB DO2KD DO2MAH DO2MIT DO2MPS DO2MRC DO2MS DO2MWR DO2STA DO2SYD DO2XX DO2YX DO3ED DO3EF DO3KTM DO3ME DO3MKB DO3NO DO3PKE DO3SMR DO3WBH DO3YMW DO4AD DO4DXA DO4ED DO4HRE DO4HZ DO4JM DO4JMD DO4JS DO4MTB DO4OD DO4TP DO5BK DO5CTH DO5DC DO5HCS DO5JD DO5JSA DO5LO DO5LW DO5LY DO5MFJ DO5MPM DO5MSN DO5NJH DO5OT DO5SJ DO5SU DO5WA DO5WW DO6AN DO6AZ DO6FC DO6JJ DO6NI DO6PA DO6SI DO6SR DO6UL DO6US DO6XX DO6YY DO7AGN DO7CED DO7DC DO7DSV DO7EE DO7ES DO7MAN DO7NHK DO7PRM DO7RU DO7WM DO8CW/P DO8ER DO8FD DO8FY DO8GF DO8MA DO8TOH DO8WA DO8YX DO9CW DO9EE DO9KK DO9OAM DO9RWG DO9SR DO9ST DO9TM DP1POL DP4E DP4M DP4M/P DP4T DP4X DP5A DP5M DP5O DP5V DP5W DP65HSC DP6A DP6HSC DP6M DP6M/P DP6P DP6T DP7D DP7P DP9A DP9Z DQ0A DQ0U DQ0X DQ0YOTA DQ1P DQ1V DQ200RRH DQ2C DQ2T DQ4W DQ5M DQ5Q DQ5R/P DQ5T DQ6Q DQ7Y DQ8N DQ9A DR0F DR0Y DR150MM DR1517LU DR160TESLA DR1A DR1D DR1E DR1X DR25MDK DR2C DR2P DR2Q DR2W DR3W DR4A DR4W DR5E DR5F DR5L DR5N DR5X DR60VKL DR6J DR6N DR6R DR7A DR7B DR7B/P DR8A DR8M DS0KBS DS1JFY DS1STV DS1SYV DS2CYI DS2GOO DS2GWM DS2KGJ DS2NDD DS2NMJ DS3BNU DS3CHK DS3EXX DS3HWS DS4AOW DS4DEV DS4DRE DS4EOI DS4GEX DS4GGM DS4GQR DS5ACV DS5DNO DS5DNO/P DS5OYE DS5TOS DS5USH DS5VTG DU1/JA3FJE DU1/KD7KL DU1/R7KW DU1AV DU1AVC DU1DT DU1EG DU1EV DU1HR DU1IVT DU1JM DU1KA DU1R DU1RB DU1UGZ DU1WBX DU2MIC DU2XXA DU3/W6QT DU3BC DU3JH DU3LA DU3T DU4DXT DU4PMA DU7DRU DU7DUG DU7ET DU7HF DU7JAY DU7OK DU7P DU9WTZ DV1KIR DV1ZFE DV7HTK DW3TRZ DX0HQ DX1DBT DX1EVM DX1J DX1MK DX2R DX3R DX7CA DX7HQ DX9M DY1T E20AE E20AX E20FUP E20NGF E20QVD E20WXA E20YLM E21AOY E21EIC E21IZC E21IZC/5 E21YDP E22UUW E23HSW E23XOT E24NQN E27AH E28AD E28AI E29AJ E29AU E29BUQ E2A E2E E2HQ E2T E2X E2Z E41MS E44YL E50A E51ADD E51AND E51DWC E51EAQ E51JD E6AG E70A E70EA E70T E71A E71AGA E71AVW E71EEE E71EZC E71W E72AD E72JG E72M E72MD E72MM E72U E73CV E73DPR E73ECT E73EKK E73ENS E73ESP E73FDE E73JHI E73M E73O E73QI E73RB E73S E73SDM E73SF E73W E73Y E73YL E73Z E74A E74BQ E74CVZ E74E E74EBL E74GZ E74JS E74KM E74MG E74O E74R E74SL E74X E74Y E74YM E74ZZ E75A E75AZ E75C E75M E75MM E76WO E77A E77AW E77C E77CFG E77CV E77DX E77E E77EA E77G E77M E77O E77S E77T E77W E77Y E77ZZ E78DX E78T E78ZX E790IARU E79D E79DS E79EA E7C E7DX E7HQ E7OT E7PD E7TT EA1/DH1TW EA1AA EA1AAE EA1ABS EA1ABT EA1ACP EA1AER EA1AF EA1AHY EA1AIW EA1AJV EA1AKS EA1ANB EA1AOH EA1AOQ EA1AP EA1AS EA1ASC EA1ASG EA1AST EA1AT EA1AUS EA1AW EA1AY EA1AYT EA1BAF EA1BD EA1BDX EA1BFZ EA1BLI EA1BNF EA1BP EA1BQR EA1CBX EA1CCM EA1CDV EA1CF EA1CM EA1CQ EA1CS EA1DA EA1DAV EA1DAX EA1DBX EA1DFP EA1DHB EA1DLU EA1DOB EA1DR EA1DVY EA1DZ EA1EHW EA1EI EA1ENG EA1EPM EA1ET EA1EVR EA1EWY EA1EXE EA1EYG EA1FA EA1FBU EA1FCH EA1FDI EA1FMD EA1FW EA1GET EA1GFY EA1GT EA1GXR EA1GY EA1HHT EA1HNP EA1HRR EA1HS EA1HTF EA1HV EA1IC EA1IIP EA1IJF EA1IMO EA1IMP EA1IMQ EA1IOW EA1IQS EA1ISE EA1IT EA1ITC EA1ITS EA1IYK EA1JK EA1JO EA1LQ EA1MI EA1MV EA1MW EA1MX EA1ND EA1NE EA1NO EA1NY EA1OL EA1OS EA1OT EA1PA EA1PO EA1PP EA1QS EA1QT EA1RCM EA1RCO EA1RCR EA1RKV EA1RN EA1RT EA1SA EA1SB EA1SI EA1SV EA1TG EA1TI EA1TL EA1TX EA1URE EA1VM EA1VT EA1WD EA1WH EA1WS EA1WX EA1XT EA1YD EA1YE EA1YG EA1YO EA1YR EA1YW EA2AA EA2AAE EA2AAZ EA2AF EA2AGV EA2AOO EA2ASB EA2AZ EA2BD EA2BER EA2BF EA2BNU EA2CAR EA2CCG EA2CE EA2CFR EA2CIA EA2CW EA2CYJ EA2DDE EA2DLX EA2DMH EA2DNR EA2DPA EA2DPS EA2DR EA2DSG EA2DT EA2DVR EA2DWG EA2EA EA2ECA EA2EDU EA2EGZ EA2EHE EA2ELK EA2EZ EA2GM EA2GP EA2HW EA2KB EA2KK EA2KR EA2KU EA2KV EA2LMI EA2LU EA2MA EA2NA EA2NS EA2OK EA2OT EA2PLN EA2QC EA2QU EA2RCF EA2RCP EA2RW EA2RY EA2SN EA2SS EA2SW EA2TT EA2VE EA2WD EA2WT EA2XR EA3AGB EA3AH EA3AKA EA3AMS EA3AQ EA3AR EA3ARN EA3ARP EA3ATM EA3AVN EA3AVV EA3AYK EA3AYQ EA3BOW EA3BOX EA3BRL EA3CA EA3CAZ EA3CC EA3CCN EA3CEC EA3CFV EA3CHA EA3CI EA3CJU EA3CS EA3CV EA3CX EA3DJL EA3DN EA3DNC EA3DU EA3DUR EA3DYY EA3EAN EA3EER EA3ELZ EA3EO EA3EVL EA3EW EA3EYD EA3EYO EA3EZD EA3FAJ EA3FCQ EA3FF EA3FHP EA3FP EA3FUJ EA3FYO EA3FZT EA3FZY EA3GBA EA3GCT EA3GCV EA3GEG EA3GHZ EA3GOM EA3GP EA3GXD EA3GYE EA3HAB EA3HCJ EA3HDZ EA3HJO EA3HKA EA3HKY EA3HLM EA3HOE EA3HRA EA3HSD EA3HSO EA3HWC EA3HXT EA3IAA EA3IM EA3IN EA3IW EA3JE EA3JL EA3JW EA3KE EA3KN EA3KT EA3KU EA3KX EA3LA EA3LD EA3LS EA3LX EA3MP EA3MR EA3NA EA3NN EA3NO EA3NP EA3NR EA3NT EA3NW EA3NY EA3ODC EA3OW EA3PP EA3PT EA3QP EA3RCB EA3RP EA3VM EA3VN EA3WX EA3XL EA3XP EA3XR EA3YK EA3YM EA3ZD EA4AA EA4AAE EA4AAI EA4AFP EA4AGI EA4AOC EA4BNQ EA4BV EA4BX EA4BZ EA4CFT EA4CFY EA4CRP EA4CTM EA4CU EA4CUN EA4CWH EA4CWN EA4DB EA4DE EA4DKJ EA4DXP EA4EER EA4EF EA4EIY EA4EJP EA4EJR EA4EPY EA4EQD EA4ESP EA4ETN EA4EUI EA4EUW EA4EXC EA4FET EA4FIT EA4FJL EA4FJX EA4FL EA4FLY EA4FP EA4FQM EA4FVT EA4FYX EA4GB EA4GEL EA4GEO EA4GJJ EA4GLI EA4GLJ EA4GMX EA4GOY EA4GPZ EA4GQS EA4GRZ EA4GSL EA4GST EA4GSX EA4GTJ EA4GUU EA4GUW EA4GVA EA4GWL EA4GWU EA4HD EA4IE EA4IF EA4IL EA4JJ EA4KD EA4KT EA4LG EA4LO EA4LU EA4MD EA4MZ EA4NI EA4OA EA4PN EA4RCH EA4RE EA4RT EA4SG EA4SV EA4TA EA4TD EA4TW EA4TX EA4UB EA4URE EA4URL EA4UT EA4UV EA4WD EA4X EA4XA EA4XT EA4YC EA4YT EA4ZK EA4ZR EA5/DK5IM EA5/LA7VK EA5/LB7Q EA5/LN2G EA5/UA9NP EA5AEP EA5AIH EA5AJB EA5AJX EA5AL EA5ARC EA5ASF EA5ASM EA5ATK EA5AVL EA5AVW EA5BAH EA5BB EA5BM EA5BY EA5BZ EA5CCY EA5CI EA5CP EA5CRC EA5CTE EA5DB EA5DCL EA5DD EA5DF EA5DFV EA5DHF EA5DIT EA5DLP EA5DM EA5DNO EA5DPL EA5DY EA5EJ EA5EQH EA5ERA EA5ET EA5EV EA5EX EA5FCW EA5FID EA5FIV EA5FL EA5FQ EA5FQF EA5FR EA5FU EA5FV EA5FWW EA5FX EA5GF EA5GI EA5GIE EA5GIN EA5GMB EA5GPC EA5GS EA5GVZ EA5GX EA5GXI EA5HEW EA5HJO EA5HKV EA5HM EA5HPX/P EA5HRM EA5HRT EA5HRV EA5HT EA5HYC EA5HYJ EA5HZZ EA5ICL EA5ICS EA5IDG EA5IDH EA5IDQ EA5IFL EA5IGO EA5IHK EA5IIK EA5IIR EA5IJG EA5IMM EA5INS EA5IOG EA5IOZ EA5IPC EA5KA EA5KM EA5KO EA5KV EA5LD EA5LH EA5MB EA5ME EA5MON EA5NB EA5ON EA5RC EA5RD EA5RKO EA5RM EA5RQ EA5RS EA5RU EA5RW EA5SM EA5SR EA5T EA5TS EA5TT EA5UB EA5UJ EA5VK EA5WA EA5WI EA5WP EA5WU EA5XA EA5XC EA5YI EA5YJ EA5YT EA5YU EA6/E71DX EA6/EI6DX EA6/M0DXR EA6AJ EA6ALH EA6AMB EA6AMM EA6AZ EA6BB EA6BH EA6EE EA6GP EA6LP EA6NB EA6NP EA6SX EA6UN EA6UP EA6URA EA6VQ EA6XQ EA6ZS EA7/DH5JN EA7/G0AYM EA7/G8PL EA7/HG3IPA EA7AAF EA7AAW EA7AH EA7AHA EA7AKK EA7AN EA7ANC EA7AQR EA7ATX EA7AYF EA7AZA EA7BUU EA7CB EA7CIX EA7CWA EA7CZS EA7ELY EA7ESM EA7EU EA7FRX EA7GI EA7GSU EA7GT EA7GTJ EA7GV EA7GX EA7GXD EA7HAB EA7HCB EA7HE EA7HG EA7IA EA7IIW EA7IQM EA7ITL EA7IYF EA7IZ EA7IZJ EA7IZZ EA7JD EA7JHV EA7JM EA7JMO EA7JOY EA7JPL EA7JQO EA7JQT EA7JV EA7JVN EA7JW EA7JWF EA7JXV EA7JXZ EA7JYS EA7JZD EA7KB EA7KE EA7KI EA7KO EA7KP EA7KW EA7LH EA7LL EA7MT EA7NL EA7OR EA7OT EA7OY EA7PP EA7RCV EA7RM EA7RU EA7SL EA7ST EA7TG EA7TR EA7TV EA7URI EA7VA EA7VJ EA7VPG EA7YV EA7ZY EA8/DF5MA EA8/DJ6HL EA8/DK5AN EA8/DK5ON EA8/DK6TR EA8/DL2MRE EA8/DL4OCF EA8/HA7TGC EA8/HB9EMP EA8/HB9FIH EA8/HB9IQY EA8/IK1PMR EA8/IV3HAX EA8/IZ5DIY EA8/LZ2HM EA8/OH5C EA8/OH5XK EA8/PA3LEO EA8/RA1A EA8/SP1NQN EA8/SP6AXW EA8/YP9W EA8/YT6W EA8ACW EA8AH EA8AKQ EA8AM EA8AMY EA8AOC EA8AQV EA8ARG EA8ARI EA8AVJ EA8AVK EA8AXT EA8AZD EA8BGO EA8BH EA8BMG EA8BOA EA8BPX EA8BQM EA8BZH EA8CAZ EA8CCQ EA8CMX EA8CN EA8CNR EA8CPN EA8CQW EA8CSD EA8CSG EA8CTK EA8CUU EA8CVW EA8CXY EA8CYQ EA8CZK EA8CZQ EA8DA EA8DAU EA8DBM EA8DEC EA8DED EA8DET EA8DO EA8DP EA8EW EA8HE EA8IN EA8JR EA8KC EA8KL EA8KR EA8KW EA8KY EA8LG EA8MT EA8NF EA8NQ EA8OG EA8OM EA8PT EA8RM EA8RP EA8RY EA8TH EA8TK EA8TL EA8TX EA8URG EA8URT EA8ZS EA8ZT EA9ACD EA9ACE EA9ACF EA9BO EA9CD EA9EU EA9HY EA9IB EA9KB EA9LZ EA9RY EA9UG EB1AC EB1ADD EB1BCG EB1CAR EB1DJ EB1DMQ EB1EB EB1IC EB1OU EB1RL EB1RL/2 EB1TR EB2AM EB2DJ EB2DPT EB2ESS EB2RA EB3AN EB3CW EB3DYS EB3EFT EB3EFU EB3EKZ EB3EPR EB3FLY EB3JT EB3TR EB3WH EB4BIN EB4ERS EB4GRT EB4SM EB5BBM EB5CS EB5CUZ EB5DXJ EB5GC EB5GGB EB5JKV EB5KT EB5TC EB7HQE EB7KA EB8AH EC1AE EC1AIJ EC1CT EC1DBO EC1DD EC1KR EC1RS EC2DX EC3AAJ EC3AIT EC3CVD EC4AA EC4DX EC4RC EC4TA EC4TR EC5AC EC5AEZ EC5AGM EC5AN EC5BNL EC5CR EC5CSW EC5EA EC5JC EC5NJ EC6AAE EC6PG EC7ABV EC7AMY EC7AT EC7CW EC7DDZ EC7DWP EC7DZZ EC7KW EC7MA EC7RC EC7WA EC7WR EC7ZK EC8ADS EC8AQQ EC8CQ ED1A ED1B ED1K ED1L ED1M ED1MK ED1R ED1S ED1T ED1V ED1W ED1WW ED2A ED2C ED2R ED2RA ED2V ED2W ED2WW ED3D ED3T ED3V ED3X ED4A ED4AA ED4D ED4P ED4R ED4T ED4W ED5K ED5M ED5N ED5O ED5P ED5T ED5W ED7B ED7C ED7O ED7P ED7R ED7X ED8AH ED8B ED8H ED8O ED8T ED8URT ED8W ED8X ED9E ED9K ED9P ED9T ED9U EE1B EE1D EE1G EE1Y EE2A EE2K EE3A EE3E EE3X EE4A EE4C EE4CP EE4EA EE5AA EE5D EE5H EE5M EE5O EE5R EE5SP EE5T EE7L EE7P EE7R EE7X EE7Y EE8A EE8V EF0F EF1A EF1S EF1W EF2A EF2O EF2T EF2Y EF3A EF3R EF3T EF3W EF3X EF4HQ EF5F EF5I EF5R EF5T EF5Y EF6T EF7A EF7AAW EF7D EF7R EF7T EF7X EF8A EF8B EF8C EF8I EF8J EF8O EF8R EF8S EF8U EF8X EF9R EG2ATU EG8CID EG8RM EH5WAP EH7H EH7XX EI/DL1EFW EI/G3SQX EI/W5GN EI0CZ EI0DX EI0HQ EI0PL EI0R EI0W EI11WAW EI1916E EI1A EI1E EI1Y EI22WAW EI2CL EI2CN EI2GLB EI2II EI2JL EI2KA EI2KC EI2KM EI3CTB EI3ENB EI3GD EI3GRB EI3GZ EI3HDB EI3IO EI3JE EI3KE EI3KI EI4CF EI4DJB EI4FOB EI4GAB EI4GNB EI4GYB EI4GZB EI4HQ EI4II EI4JY EI4KF EI4KH EI4VYB EI5DI EI5FQB EI5GUB EI5HB EI5HIB EI5HJ EI5HRB EI5HTB EI5HZB EI5IX EI5JC EI5KF EI5KG EI5Q EI6DX EI6FM EI6FR EI6GGB EI6HB EI6HZB EI6IL EI6IZ EI6JK EI6KD EI77WAW EI7BA EI7CC EI7GL EI7GSB EI7GY EI7HBB EI7HDB EI7HE EI7HHB EI7HQB EI7IG EI7JK EI7JZ EI7KD EI7M EI88WAW EI8BLB EI8EJB EI8EM EI8FH EI8GS EI8HL EI8IU EI8JX EI8KF EI8KK EI99WAW EI9C EI9CF EI9CN EI9E EI9FBB EI9FVB EI9HQ EI9HX EI9JA EI9JU EI9KC EI9KF EI9P EJ0SR EJ8KO EK/RZ3DJ EK3GM EK4JJ EK6SI EK7DX EK8ZZ EL2DT EL96VW EL97GH EM0I EM130QG EM140Y EM25A EM2G EM5HQ EM60EV EM66JU EM9Q EN4U EN7P EO25F EO25PY EO25UA EO26U EO3Q EP2C ER1BF ER1GY ER1JA ER1LW ER1LZ ER1OO ER1PB ER1X ER1Y ER2OW ER2RM ER3AU ER3CR ER3CT ER3DX ER3MM ER3ZZ ER4A ER4DX ER4LX ER4M ER4X ER5DX ER5LL ER7HQ ES0DJ ES0GP ES0HAM ES0IA ES0V ES1/K1MM ES17EU ES1ACS ES1BH ES1CN ES1CW ES1LS ES1O ES1QV ES1QX ES1TU ES2DJ ES2EZ ES2IPA ES2MA ES2MC ES2TT ES3AX ES3RF ES3V ES3VI ES3VL ES4IN ES4MM ES4NY ES4OJ ES4RC ES4RD ES4RLH ES4RX ES5E ES5EP ES5GP ES5JR ES5KJ ES5MG ES5Q ES5QA ES5QD ES5RIM ES5RR ES5RW ES5RY ES5TF ES5TI ES5TV ES5YG ES6DO ES6PA ES6Q ES6RMR ES6RW ES7A ES7AM ES7GM ES7GN ES7MB ES7RIX ES8/YL1ZX ES8DH ES8GP ES8SX ES90IARU ES9A ES9C ES9YOTA ET3AA ET7L EU1A EU1AA EU1ADH EU1AI EU1DX EU1EU EU1FQ EU1KY EU1R EU1ST EU1U EU1UC EU1W EU1WW EU2EU EU2MM EU3A EU3AA EU3AC EU3AR EU4A EU4AX EU4DGC EU4E EU4T EU4U EU5C EU5T EU6A EU6AA EU6AF EU6DX EU6RO EU8A EU8BB EU8F EU8R EU8U EV1P EV1P/2 EV1P/4/A EV1R EV4R EV6M EV6Z EV750M/P EV950O EW/R1AT EW1AFM EW1BA EW1DL EW1E EW1EA EW1FM EW1I EW1IP EW1KT EW1KV EW1M EW1NA EW1NM EW1P EW1RR EW1SP EW1TO EW1TZ EW1W EW2A EW2BO EW2DZ EW2EO EW2ES EW2M EW2O EW2R EW2W EW2WW EW3A EW3EO EW3LN EW3MM EW3W EW4A EW4C EW4CD EW4DX EW4FG EW4GL EW4KA EW4M EW4R EW4RF EW4W EW4WE EW5HQ EW5W EW5Z EW6AF EW6BY EW6CU EW6DM EW6EN EW6EW EW6F EW6FM EW6FW EW6GF EW6M EW6W EW7A EW7BA EW7DK EW7EW EW7M EW7RA EW8AX EW8B EW8BQ EW8C EW8DX EW8EW EW8FN EW8G EW8GL EW8K EW8M EW8NB EW8O EW8OD EW8OG EW8OM EW8OP EW8OW EW8R EW8RR EW8RU/1 EW8S EW8W EW8WA EW8Y EW8Z EW8ZO EX7ML EX8AY EX8BN EX8M EX8MAT EX8MJ EX8MK EY7AD EY7BL EY8MM F/DL2CC F/E72T F/G0PZA F/G4BJM F/G4BJM/P F/GW3YDX F/IU0BMX F/KX6H F/OM2ZA F/ON5OF F/SQ6MS F0DWJ F1ADG F1AEY F1AGR F1AGR/P F1AKK F1BBI F1BFC F1BGY F1BJD F1BOQ F1BRV F1DMR F1EBN F1EMX F1EOF F1EOY F1FPL F1GKS F1GYX F1GZV F1HMR F1HOM/P F1HTU F1ICR F1ICS F1IWH F1JVY F1MGE F1MKC F1MLN F1MPQ F1MQJ F1NGP F1NZC F1OKV F1OOG F1ORL F1PNJ F1PSX F1PYN F1RAF F1RCH F1RHS F1ROA F1SKH F1SPK F1TRE F1TZE F1TZG F1TZM F1UBA F1UDC F1UIJ F1ULQ F1UMO F1UVN F1VBW F1VEV F2AR F2CT F2DX F2FG F2GL F2IL F2JD F2LG F2RA F2VX F2YT F2YT/P F3JP F3JP/P F3OA F3OA/P F3PZ F3WT F4ADZ F4AEL F4AHP F4AOS F4AQG F4ARM F4ASK F4AWH F4AYI F4AZH F4BDG F4BHS F4BHW F4BIV F4BKT F4BKV F4BWJ F4BYB F4CDR F4CKV F4CPF F4CUI F4CUO F4CVQ F4CWN F4CYH F4DIA F4DLL F4DNW F4DPW F4DSD F4DSE F4DSK F4DTO F4DVX F4DXP F4DXW F4DZF F4EAN F4EAT F4EEX F4EFI F4EFL F4EGG F4EGZ F4EHA F4EIH F4EIK F4EJW F4ELR F4EMG F4ENJ F4ENK F4EPP F4EPU F4EQA F4ERS F4ESK F4ESV F4ETG F4EUG F4EUN F4FBP F4FCC F4FCE F4FDR F4FEP F4FET F4FFH F4FFN F4FFZ F4FGC F4FHT F4FHZ F4FIP F4FLF F4FLO F4FLQ F4FLQ/P F4FMU F4FNK F4FPG F4FQY F4FQZ F4FRC F4FRF F4FRG F4FRQ F4FSP F4FSV F4FSY F4FTA F4FTV F4FUB F4FVQ F4FXH F4FYE F4GAJ F4GBW F4GCD F4GDI F4GDO F4GFT F4GGQ F4GHS F4GLD F4GLK F4GLQ F4GOT F4GOU F4GPB F4GPK F4GPZ F4GTB F4GTD F4GTT F4GVE F4GVZ F4GWY F4GYG F4GYI F4HAB F4HAQ F4HAU F4HBI F4HEC F4HEG F4HFQ F4HGF F4HGV F4HHL F4HIK F4HIN F4HJC F4HJC/P F4HJG F4HJI F4HJO F4HKD F4HKE F4HKV F4HLB/P F4HLR F4HMV F4HMX F4HNP F4HOD F4HPX F4HQZ F4HRI/P F4HRM F4HRR F4HSB F4HTO F4HTV F4HUA F4HXJ F4IVV F4KIP F4KIR F4KJP/P F4KJQ F4KJR F4KKE F4PCM F4TTR F4VPC F4VPL F4VQP F4VQT F4VSE F4WBL F4WBN F4WDN F5AAR F5ABV F5AD F5ADE F5AJG F5AOW F5APZ F5AQB F5ASD F5BBD F5BEG F5BLC F5BMI F5BOY F5BSB F5BTH F5BZB F5CCX F5CQ F5CT F5DJL F5DM F5DRD F5DYD F5ELL F5EQR F5FDV F5FJ F5FKY F5FLN F5GFA F5GGL F5GN F5GPE F5HGT F5HIJ F5HNQ F5HRH F5HUF F5HX F5IAE F5ICC F5IDJ F5IGF F5II F5ILS F5IN F5INJ F5IPE F5IQJ F5IRC F5IYJ F5IYU F5JFU F5JGA F5JIW F5JLV F5JMI F5JNV F5JNX F5JQQ F5JRC F5JSQ F5JU F5JVP F5JWH F5JY F5JYD F5KAR F5KCC F5KCH F5KDC F5KDJ F5KDK/P F5KEQ F5KFL F5KHP F5KKD F5KLF F5KMB F5KMY F5KSE F5LDY F5LEN F5LIW F5LMH F5LMI F5LMJ F5LPY F5LQ F5LTH F5LVL F5MA F5MBM F5MIE F5MKD F5MLJ F5MMB F5MMF F5MNK F5MQU F5MQW F5MSB F5MSE F5MUX F5MVB F5MVT F5MXH F5MXQ F5MYH F5MYK F5MZE F5NBU F5NBX F5NKP F5NKX F5NQT F5NTV F5NTZ F5NWG F5NZY F5OAM F5OCL F5ODK/P F5OEV F5OGJ F5OHH F5OHM F5OHMNST F5OHV F5OIH F5OJN F5OQK F5OQL F5ORB F5OUD F5OWL F5OWT F5OYC F5OZC F5OZK F5PAC F5PAL F5PBG F5PBM F5PCV F5PDG F5PGA F5PHP F5PHW F5PLC F5PNI F5POJ F5PRH F5PTA F5PTI F5PWK F5PXF F5PYJ F5PZR F5RAG F5RAV F5RD F5RHD F5RJK F5RLW F5RMK F5RMN F5ROW F5ROX F5RPN F5RQQ F5RUJ F5RVO F5SDD F5SDH F5SGI F5SGI/P F5SIH F5SJC F5SKW F5SNY F5SOF F5SPJ F5SVU F5TFW F5TGR F5TJZ F5TLZ F5TPO F5TRB F5TRO F5TVG/P F5UAY F5UB F5UFX F5UJQ F5UKW F5UMP F5UQE F5URG F5UTN F5VBT F5VBU F5VFU F5VHE/P F5VHJ F5VHQ F5VHY F5VIF F5VJC F5VJL F5VKF F5VKT F5VKV F5VLY F5VMB F5VMN F5VU F5VV F5XX F6ACD F6ACV F6AEW F6AFC F6AGM F6AJH F6AJM F6AOJ F6APE F6API F6ARC F6ARL F6ARS F6AUS F6AVK F6AWU F6AXN F6BAT F6BAX F6BBO F6BCC F6BEE F6BEG F6BFH F6BFI F6BGC F6BGG F6BGH F6BGV F6BHI F6BHK F6BIA F6BIP F6BLK F6BLP F6BLZ F6BNH F6BNM F6BNX F6BQG F6BUL F6BVY F6BYZ F6BZG F6BZQ F6CBL F6CCH F6CEL F6CHF F6CLQ F6CMS F6COW F6CQU F6CSO F6CSQ F6CTL F6CTT F6CUK F6CWA F6CWN F6CXJ F6CYT F6CZQ F6CZV/P F6DEO F6DEV F6DGH F6DKQ F6DMQ F6DRP F6DSV F6DTZ F6DVH F6DWX F6DXE F6DYA F6DYX F6DZD F6DZS F6DZU F6EAY F6EAZ F6ECS F6EDO F6EHP F6EKJ F6ENO F6EPO F6EPQ F6EQD F6EQZ F6EWB F6EWX F6EXV F6EYB F6EYD F6EZF F6FDR F6FDR/P F6FET F6FGB F6FHO F6FLH F6FLU F6FMX F6FNA F6FNG F6FTB F6FTI F6FUD F6GCI F6GCP F6GCT F6GDC F6GEU F6GGA F6GGO F6GNZ F6GOE F6GOX F6GPT F6GUF F6GVC F6GWV F6GYF F6HBI F6HBI/P F6HBR F6HDI F6HEO/P F6HHR F6HIA F6HJO F6HKA F6HKS F6HLC F6HMQ F6HOY F6HPP F6HQP F6HQY F6HRP F6HTS F6HZZ F6ICX F6IES F6IFJ F6IGS F6IHY F6IIT F6IPQ F6IRA F6IRA/P F6IRG F6IRO F6IRS F6IRW F6ITD F6JOE F6JON F6JPN F6JSZ F6KAT F6KBF F6KBK F6KDL F6KEH F6KFA F6KFV F6KHM F6KJG F6KJJ F6KJS F6KJX F6KLO F6KMB F6KMX F6KNB F6KOH F6KOP F6KOP/P F6KPQ F6KQV F6KRD F6KRK F6KUP F6KUQ F6KVJ F6LIA F6OBD F6REF F8AAB F8AAN F8AEE F8AOF F8ARK F8ATM F8ATS F8AUF F8BBL F8BCU F8BDQ F8BFU F8BJJ F8BJO F8BNN F8BNV F8BPN F8BSI F8BUO F8CED F8CFU F8CGL F8CIL F8CJS F8CMF F8CPA F8CRH F8CRS F8DBF F8DEG F8DFO F8DFP F8DGF F8DGY F8DHB F8DHE F8DJV F8DNX F8DRE F8DSN F8DVC F8DVD F8DWH F8DYD F8DZU F8DZY F8EBY F8EEQ F8EFU F8EMH F8ETK F8FBB F8FHI F8FKI F8FLK F8FQJ F8FSC F8FSN F8FUA F8FWL F8FWM F8FY F8GGV F8GGZ F8IJV/P F8JU F8KCF F8KFS F8KGH F8KGS F8KGW F8KGZ F8KHF F8KHO/P F8KHP F8KIH F8KKH F8KLY F8NAN F8NUH F8OML F8OOI F8PDR F8PMO F8UFT F8VNU F8VOL F8WAW F9CI F9EW FG1JS FG1PP FG4KH FG4NN FG4NO FG5DH FG5FI FG5GP FG5LA FH/DJ9RR FH/HB9AMO FH/IK5ZUI FJ/KO8SCA FJ/NN2DX FK8CE FK8CP FK8DD FK8HN FK8IK FM1HN FM4KA FM5AJ FM5AN FM5BH FM5DN FM5EB FM5FJ FM5WE FO/K7AR FO4BM FO5RH FP5AC FR/DJ9RR FR/OH2YL FR4NT FR4PV FR4QT FR5CB FR5DX FR5GS FR8QN FT5WQ FW1JG FW5JJ FY/F5HRY FY5FY FY5KE G0AAA G0AJH G0AJJ G0AOJ G0AWV G0AZE G0AZH G0BBO G0BFJ G0BFZ G0BLB G0BNR G0BRC G0BSU G0BVD G0BWB G0BYH G0C G0CER G0CHE G0CKP G0CLH G0CPA G0DAY G0DBE G0DGF G0DRM G0DTX G0DVJ G0DWV G0ECJ G0EFO G0EWV G0FGI G0FHR G0FPU G0FYX G0GDA G0GDU G0GFQ G0GHK G0GLJ G0GNI G0GWA G0HDB G0HDV G0HEU G0HFL G0HGH G0HNW G0HRR G0HSA G0HVQ G0HZG G0IBN G0IFC G0IIQ G0IPE G0IXZ G0IZM G0JHC G0JJG G0JKY G0JSP G0KBL G0KHO G0KPH G0KSB G0KSC G0KYA G0LCQ G0LFF G0LHZ G0LRD G0LTG G0LVX G0LWU G0LZL G0LZX G0MBA G0MBP G0MCV G0MDR G0MFR G0MGM G0MLC G0MNN G0MRH G0MTN G0MTQ G0MUC G0NBI G0OFD G0OGD G0OKD G0OKF G0OOF G0OOR G0OQX G0ORC G0ORH G0PBE G0PHP G0PHY G0PQB G0PSM G0PXQ G0PZA G0RAH G0RDU G0RPM G0RRM G0SBN G0SNG G0SUM G0SUQ G0SYF G0T G0TAN G0THF G0TKZ G0TLE G0TPH G0TRB G0TSM G0TYS G0TZZ G0UAN G0UCH G0UII G0UJD G0UKB G0UQC G0URR/P G0UWK G0UWS G0VAX G0VDE G0VGS G0VIM G0VJG G0VOF G0VOK G0VQR G0VWL G0VXE G0VXM G0W G0WAT G0WFH G0WOU G0WPH G0WRE G0WSA G0WTD G0WWD G0XAK G0ZEN G1A G1EIX G1GIL G1HPD G1HYA G1IMS G1IPU G1IZQ G1JCC G1JDT G1M G1MHU G1MZD G1N G1OCN G1OSI G1PCR G1PPA G1SCT G1SDK G1SSL G1T G1TDN G1TGM G1TPA G1XKZ G1XOW G1XRJ G2AA G2BKZ G2F G2HDR G2HKU G2JL G2KQ G2L G2M G2NF G2U G2X G2Z G3ASG G3B G3BJ G3EKJ G3F G3GAF G3GLL G3GMM G3GRS G3HEJ G3HGE G3HRH G3HTA G3ICO G3IGU G3IGZ G3IJA G3ILO G3ILO/P G3IRQ G3IZD G3JDT G3JFS G3JMJ G3JNB G3JRM G3JUL G3K G3KAF G3KDP G3KKP G3KLH G3KMG G3KML G3KMQ G3KNU G3KOJ G3KTZ G3KWK G3KYF G3KZR G3LDI G3LET G3LHJ G3LHS G3LIK G3LKZ G3LPS G3LPU G3LUW G3LVP G3LX/P G3M G3MCK G3MLO G3MPB G3MPN G3MUO G3MXH G3MZV G3N G3NCN G3NDC G3NFV G3NGD G3NIJ G3NKS G3NPZ G3NSM G3NWG G3NYY G3OAG G3OCA G3OKA G3OLB G3OND G3OOU G3ORY G3OTH G3OTK G3P G3PDH G3PFM G3PGA G3PHO G3PJT G3PLE G3PLP G3PND G3PPR G3PQA G3PRI G3PSM G3PXF G3PXT G3Q G3R G3RAU G3RCV G3RFH G3RGD G3RIR G3RKF G3RKJ G3RLE G3RSD G3RTE G3RTU G3RTY G3RVM G3RWF G3RWL G3RXP G3RXQ G3SBI G3SBM G3SED G3SEM G3SEN G3SET G3SHF G3SJJ G3SNT G3SNU G3SQU G3SQX G3SRC G3SVD G3SVK G3SVL G3SWC G3SWH G3SXW G3SYM G3SZS G3SZU G3TA G3TBK G3TDH G3TEV G3TFX G3TJE G3TKF G3TKK G3TRV G3TTJ G3TVW G3TXA G3TXF G3TZM G3U G3UAS G3UEG G3UES/P G3UFO G3UFY G3UGK G3UHU G3UJE G3ULN G3ULT/P G3UQW G3USA G3USE G3UYD G3V G3VAO G3VCA G3VDB G3VGG G3VGZ G3VIP G3VIR G3VKW G3VM G3VMW G3VMY G3VOF G3VPS G3VPW G3VQO G3VSL G3VSQ G3VYI G3VZM G3WBB G3WCY G3WEF G3WFM G3WGN G3WGV G3WKL G3WMX G3WNQ G3WPF G3WPH G3WRJ G3WRO G3WRR G3WVG G3WWT G3WYN G3WYW G3WZD G3WZT G3XAQ G3XGC G3XHZ G3XKR G3XLG G3XMM G3XOV G3XPO G3XQX G3XSD G3XSV G3XTT G3XVF G3XVR G3XYF G3XZG G3XZQ G3Y G3YBO G3YBY G3YEU G3YFE G3YGG G3YHV G3YJQ G3YJR G3YLA G3YMC G3YNN G3YNU G3YPE G3YPP G3YQA G3YRO G3YRZ G3YSX G3YXX G3YYD G3YZO G3ZAY G3ZBU G3ZGC G3ZHE G3ZHL G3ZKN G3ZNH G3ZNR G3ZOH G3ZQH G3ZRJ G3ZRN G3ZSE G3ZSS G3ZVW G3ZYV G4A G4ABX G4ADJ G4ADR G4AFJ G4AFS G4AFU G4AGE G4AIR G4AJC G4AJY G4ALD G4ALE/P G4ALH G4AMT G4ANS G4AON G4AQG G4ARI G4ASR G4ATH G4ATH/P G4AXX G4AYR G4AYU G4AZN G4BCA G4BEE G4BHE G4BJM G4BMM G4BSW G4BTN G4BUE G4BUO G4BVH G4BVY G4BWP G4BYE G4BYG G4BYY G4C G4CCQ G4CCZ G4CIB G4CLN G4CMQ G4CUS G4CWH G4CXQ G4CXT G4CYB G4CZB G4CZK G4DBL G4DBN G4DBW G4DCF G4DDL G4DDX G4DFI G4DJC G4DJJ G4DJX G4DOQ G4DRS G4DSD G4DST G4DUC G4DXW G4DXX G4DYA G4DYC G4EBK G4EBY G4EDG G4EDR G4EHN G4EHT G4EKT/P G4ELJ G4ELR G4ELZ G4ENZ G4EOW G4ERW G4EXD G4EZT G4FAD G4FAL G4FEV G4FFE G4FFN G4FJK G4FJW G4FKA G4FKG G4FMO G4FNL G4FOC G4FOX/P G4FPA G4FSU G4FVK G4FVZ G4GIR G4GMW G4GNK G4GVB G4GZG G4HBI G4HCC G4HJE G4HOM G4HVC G4HYG G4HZV G4HZW G4ICD G4IDF G4IDL G4IIY G4IKR G4IOG G4IRN G4IRN/P G4IUF G4IWO G4IWQ G4JBA G4JFK G4JFS G4JKZ G4K G4KFT G4KGL G4KHG G4KHM G4KIU G4KMH G4KNO G4KRN G4KXQ G4KZD G4KZY G4L G4LJU G4LKD G4LMZ G4LNG G4LPD G4LQF G4LRG G4LWB G4LYM G4MDR G4MEM G4MKP G4MKR G4MLA G4MUL G4MZJ G4NBS G4NDM G4NFS G4NGV G4NKT G4NKU G4NVR G4NXG G4OBB G4OCO G4OGB G4OJY G4ONG G4OSB G4OTU G4OTV G4OWT G4OZG G4P G4PDF G4PEF G4PEO G4PFF G4PGD G4PIQ G4PKT G4PLX G4PLY G4PNC G4POF G4PVM G4PWA G4PWO G4Q G4R G4RCD G4RCG G4RFR G4RGK G4RHR G4RKO G4RLS G4RMV G4RNK G4RRA G4RRM G4RUW G4SGI G4SGX G4SHF G4SIE G4SJG G4SJP G4SJX G4SKO G4SMB G4SMD G4SOF G4STH G4TGK G4TJJ G4TJK G4TNI G4TSH G4TVR G4TXF G4U G4UDU G4UEL G4UFK G4UFU G4UGB G4UJS G4UNB G4UQB G4URG G4USB G4UZE G4VHH G4VLC G4VMM G4VMX G4VSZ G4VUA G4VYR G4WAC G4WAC/P G4WBV G4WCP G4WGE G4WGE/P G4WKT G4WPD G4WQI G4WUG G4WWG G4WWG/P G4WWH G4XBG G4XEE G4XEX G4XGR G4XHE G4XLO G4XPE G4XRO G4XRX G4YAQ G4YCS G4YDM G4YDT G4YRR G4ZCS G4ZDY G4ZFE G4ZIB G4ZKT G4ZOB G4ZOY G5BBL G5E G5HY G5K G5KC G5LP G5N G5O G5Q G5RR G5U G5W G5XV G6A G6AY G6AYU G6BDV G6BDV/P G6CHD G6DCT G6EES G6EVD G6GLP G6HUI G6LD G6M G6MC G6MUX G6MXL G6N G6NHU G6NUM G6NYG G6OKU G6RC G6T G6UBM G6UJB G6UW G6UWK G6VMR G6X G6XX G7AGZ G7ARK G7AZA G7BHU G7BXU G7BZD G7CSM G7CST G7EZE G7FSI G7HJX G7HYS G7IXU G7KXZ G7MBH G7MFR G7MJX G7MVX G7NIB G7NKS G7NOT G7PVZ G7RAU G7RHF G7RTI G7SOZ G7SQW G7SSE G7SYW G7T G7TMU G7TWC G7UGC G7UOU G7VJR G7VMX G7VNN G7VRD G7VTU G7WIA G7Y G80CC G8AFN G8AJM G8APB G8C G8CMU G8CRB G8CYK G8D G8DQP G8DX G8EKG G8EVR G8FCQ G8FDR G8FMC G8GFF G8GHD G8GNI G8GRS G8HBA G8HBS G8HDK G8HGP G8HXE G8IJM G8JYV G8KEK G8KEK/P G8MIA G8MM G8N G8NVX G8OO G8SRS G8T G8UBJ G8VPE G8X G8XDD G8XTJ G8XXJ G8XYJ G8YIG G8ZRE G8ZZL G9F G9V G9W G9Y GB0GGR GB2GP GB3RS GB5CC GB9IOW GC6BRC GD0A GD0AMD GD0IFU GD0OUD GD0T GD0TEP GD3TNS GD3YUM GD4EIP GD5F GD6IA GG66PJ GI0LDI GI0MXT GI0RQK GI0THZ GI0UVD GI0VJE GI1GKI GI3KVD GI3NVW GI3OQR GI3SG GI4DOH GI4DYE GI4EBS GI4FUE GI4FUM GI4GID GI4JTF GI4MBM GI4NFH GI4OPH GI4OWA GI4RKC GI4SJQ GI4SNA GI4SZW GI4T GI4VHO GI4VKS GI5I GI6K GI6RBD GI7AXB GI7VXC GI80CC GI8SKN GI8YJV GJ0KE GJ2A GJ3YHU GJ6WRI GJ7LJJ GK3MPD GK4AMT GK7AGZ GM0ADX GM0AXY GM0B GM0BZS GM0EGI GM0EKM GM0ELP GM0EWX GM0FSV GM0GAV GM0GMN GM0HVS GM0KWW GM0LIR GM0LKS GM0LVI GM0NAI GM0NBM GM0OBX GM0OGN GM0OQV GM0UKZ GM0V GM0VRP GM0WED GM1C GM1DSK GM1J GM1KNP GM2T GM2V GM2Y GM3A GM3C GM3D GM3JKS GM3MZX GM3NHQ GM3PIL GM3POI GM3PPE GM3PPG GM3TAL GM3VAL GM3W GM3WIJ GM3WIL GM3WOJ GM3WUX GM3X GM3XSV/P GM3YBQ GM3YEH GM3YOR GM3YTS GM3ZDH GM3ZRT GM4AFF GM4AGG/P GM4AGL GM4ATA GM4CUX GM4DLG GM4EOU GM4EVS GM4FDM GM4FOC GM4JR GM4JYB GM4LER GM4M GM4NNC GM4NTL GM4O GM4OSS GM4SID GM4SQM GM4U/P GM4UBJ GM4ULS GM4UQG GM4UYE GM4UYZ GM4X GM4XQJ GM4YSN GM4Z GM4ZMK GM4ZUK GM5A GM5CX GM5M GM5TO GM5X GM6NX GM6VCV GM6VVG GM7A GM7O GM7R GM7TUD GM7V GM7WCO GM8FXD GM8OEG GM8TTD GM9C GM9N GS3BSQ GS3PYE/P GS8VL GT8IOM GU0SUP GU0URR GU0UVH GU3HFN GU4CHY GU4EON GU4RUK GU4YBW GU4YOX GU6EFB GU7A GU80CC GU8FBO GW0A GW0AVW GW0BBO GW0GEI GW0IRT GW0IRW GW0KRL GW0RHC GW0RHC/P GW0RYT GW0TAU GW0UDJ GW0WGK GW1YQM GW2D GW2L GW2OP GW2R GW2X GW3KDB GW3KGV GW3LNR GW3NAS GW3SFC GW3TKH GW3XHG GW3YAF GW3YDX GW4AYJ GW4AZI GW4BKG GW4BLE GW4BVE GW4BVJ GW4BZD GW4EVX GW4GNY GW4HDF GW4J GW4MVA GW4OGO GW4OH GW4OKT GW4SHF GW4TPG GW4TSG GW4UWD GW4W GW4ZAR GW5NF GW5R GW6J GW6PVK GW6W GW7ERI GW7O GW80CC GW8JLY GW8K GW8KBO GW8SIE GW9J GW9T GW9X GX0GHK GX3YNN GX4MBC GX4ODR GX4RFR GX5TO GX8HRC/A GZ5Y H2T H2X H44MS HA0BR HA0BW HA0DR HA0GK HA0HV HA0HW HA0IH HA0IL HA0IM HA0IT HA0ITU HA0IV HA0LC HA0LP HA0LW HA0LZ HA0ML HA0MO HA0MS HA0NAR HA1A HA1AC HA1AD HA1AG HA1AS HA1BC HA1DAE HA1DQ HA1IO HA1RB HA1RJ HA1SN HA1SS HA1SU HA1TAB HA1TI HA1TNX HA1TO HA1TV HA1VG HA1WD HA1XY HA1YN HA1ZH HA1ZN HA2D HA2DX HA2EOA HA2EOD HA2EQD HA2ERO HA2ESM HA2G HA2MI HA2MM HA2MN HA2MV HA2NA HA2NEP HA2NK HA2NM HA2NP HA2OS HA2PP HA2RAU HA2RQ HA2SK HA2VH HA2VR HA30IA HA3A HA3DX HA3FHH HA3FMR HA3FTA HA3FUT HA3GO HA3HK HA3HO HA3HX HA3ITU HA3JB HA3JO HA3KNA HA3LI HA3LN HA3MG HA3MN HA3MQ HA3MU HA3MY HA3NU HA3OK HA3OU HA3PT HA3PV HA3PW HA3TA HA3UU HA3YE HA43PS HA45KKC HA4A HA4AA HA4FB HA4FY HA4RZ HA4WQ HA4XH HA4YF HA5AGP HA5AGS HA5AQ HA5ARX HA5BA HA5BGG HA5BGL HA5BI HA5CLF HA5CRT HA5DDX HA5FM HA5FQ HA5GY HA5HK HA5JI HA5JP HA5KY HA5LC HA5LUI HA5MA HA5MK HA5MO HA5MY HA5NB HA5NP HA5NR HA5NU HA5OM HA5OO HA5OV HA5OZX HA5PL HA5PP HA5T HA5TOP HA5UA HA5VJ HA5VZ HA5X HA5ZG HA6DX HA6FQ HA6ITU HA6NL HA6NN HA6NW HA6NY HA6OA HA6ON HA6OZ HA6P HA6PJ HA6VA HA6VH HA6VR HA6VV HA6VV/P HA6WT HA7A HA7AVU HA7AZ HA7GN HA7HQ HA7I HA7JIV HA7JQK HA7KBR HA7KRE HA7LR HA7LW HA7MB HA7ME HA7MF HA7MS HA7MW HA7NK HA7PL HA7PO HA7RY HA7SBQ HA7SG HA7TM HA7UI HA7UL HA7XC HA7XL HA8A HA8AL HA8AP HA8AR HA8AT HA8BA HA8BE HA8BQ HA8BT HA8CQ HA8DT HA8DU HA8EK HA8EN HA8ES HA8FK HA8FM HA8FY/P HA8GY HA8GZ HA8IB HA8IE HA8IH HA8ITU HA8JP HA8JV HA8KW HA8LIF HA8LMZ HA8LNN HA8LNT HA8MD HA8MT HA8MZ HA8QB HA8QC HA8QZ HA8RM HA8RT HA8TI HA8TKS HA8TP HA8V HA8VK HA8VV HA8VX HA8VZ HA8WY HA8WZ HA8ZB HA8ZE HA9A HA9AX HA9MDN HA9PP HA9RC HA9RP HA9RT HA9SB HA9T HA9TA HB0/DD5ZZ HB0/DK4YJ HB0/DL2JRM HB0/DL5SE HB0/DL5YM HB0/HB9RB HB0/RC3C HB0A HB0AFVL HB0CC HB0HQ HB0WR HB20AA HB2C HB2K HB2S HB2T HB2U HB2W HB3YFC HB3YGD HB3YGG HB3YKU HB3YOJ HB3YPS HB3YRU HB3YSW HB600NVF HB80BS HB8FG HB9AA HB9AAI HB9AAL HB9AAY HB9AAZ HB9AEP HB9AEV HB9AFH HB9AFI HB9AFZ HB9AGA HB9AGO HB9AGU HB9AIY HB9AJ HB9AJP HB9ALH HB9ALM HB9ALO HB9AMO HB9ANM HB9AOF HB9APJ HB9AQA HB9AQW HB9ARF HB9ARY HB9AT HB9ATG HB9ATX HB9AUK HB9AUS HB9AVK HB9AW HB9AWS HB9AYQ HB9AYZ HB9AZO HB9AZZ HB9BA HB9BAS HB9BEM HB9BHW HB9BIN/P HB9BJL HB9BLQ HB9BMY HB9BOS HB9BPV HB9BQP HB9BRJ HB9BRU HB9BS HB9BTI HB9BUN HB9BXE HB9BXF HB9BXU HB9BYQ HB9CA HB9CAL HB9CAT HB9CC HB9CEY HB9CGL HB9CIC HB9CIP HB9CL HB9CNU HB9CNY HB9COF HB9CPH HB9CPS HB9CQH HB9CQL HB9CRV HB9CSA HB9CSW HB9CTU HB9CVQ HB9CXK HB9CXZ HB9CYT HB9CYV HB9CZB HB9CZF HB9DAI HB9DAX HB9DBK HB9DCL HB9DCM HB9DCO HB9DD HB9DDE HB9DDO HB9DDS HB9DEN HB9DFD HB9DHG HB9DHZ HB9DND HB9DOS HB9DPY HB9DQJ HB9DQL HB9DQP HB9DRM HB9DRS HB9DSE HB9DSG HB9DUR HB9DUS HB9DVH HB9DVZ HB9DXA HB9EBC HB9EBT HB9EDY HB9EFJ HB9EGA/P HB9EHJ HB9EHV HB9EI HB9ELD HB9ELV HB9EMP HB9ENI HB9EOE HB9EOU HB9EP HB9ERU HB9ESS HB9ETR HB9EVF HB9EXA HB9EXQ HB9EXR HB9EYB HB9EYP HB9FAI HB9FAP HB9FAQ HB9FBA HB9FBD HB9FBG HB9FBL HB9FBM HB9FBP HB9FBS HB9FBU HB9FEC HB9FEU HB9FEY HB9FHV HB9FKK HB9FKL HB9FLD HB9FLU HB9FLX HB9FMJ HB9FMN HB9FMU HB9FPM HB9FPS HB9FRL HB9FRV HB9FSE HB9FT HB9FUH HB9FUV HB9FUX HB9FVL HB9FWO HB9FXL HB9FXU HB9FZE HB9FZI HB9GCE HB9GF HB9GFP HB9GKM HB9H HB9HC HB9HFM HB9HFN HB9HI HB9HLI HB9HLM HB9HQ HB9HQX HB9HTC HB9HVG HB9IAB HB9IIO HB9IIY HB9IQB HB9IQY HB9IRF HB9JCI HB9JNM HB9JOE HB9JW HB9KAM HB9KG HB9KNY HB9LF HB9LL HB9MM HB9MOP HB9MOZ HB9MXY HB9N HB9NBG HB9NFB HB9O HB9OAB HB9OAU HB9OCR HB9ODK HB9ODP HB9OK HB9ON HB9OQ HB9PUE HB9Q HB9QO HB9QT HB9RB HB9RDD HB9RF HB9RIY HB9RUD HB9RVE HB9RYZ HB9T HB9TG HB9TJR HB9TLM HB9TMW HB9TOC HB9TPN HB9TPQ HB9TPT HB9TRR HB9TSI HB9TST HB9TSW HB9TTK HB9TUD HB9TVF HB9TWK HB9TWM HB9TWU HB9TXE HB9VAA HB9VID HB9WDF HB9WDY HB9WI HB9YC HB9ZAG HB9ZCF HB9ZE HB9ZY HB9ZZ HC0E HC1CD HC1JQ HC1TCD HC1WBT HC1WDT HC1YC HC2A HC2AO HC2AQ HC2E HC2G HC2HQ HC2SL HC3BL HC5AI HC5F HC5K HC5VF HC5ZY HC7AE HF0DGS HF0H HF0WFF HF100F HF1A HF1D HF1K HF1T HF1YL HF1Z HF250NCH HF31ROT HF35PBW HF3T HF50BRP HF50KDA HF5L HF60IU HF60KAG HF67CES HF6K HF9M HG0DQR HG0HQ HG0ITU HG0M HG0R HG10CC HG14HST HG17EYOF HG17HA HG1A HG1B HG1G HG1ITU HG1R HG1S HG1VN HG1W HG225M HG225U HG2A HG2DX HG2ITU HG2U HG2UK HG30CW HG35XA HG3A HG3C HG3DX HG3FMZ HG3IP HG3IPA HG3ITU HG3M HG3O HG3R HG3X HG44FY HG4F HG4I HG500A HG500E HG500T HG500U HG50IPA HG5A HG5C HG5D HG5DX HG5F HG5I HG5ITU HG5N HG5O HG5P HG5R HG5S HG5XMAS HG60JLO HG6C HG6IA HG6ITU HG6L HG6N HG6O HG6R HG6T HG6V HG6Y HG7HQ HG7JEC HG7T HG8C HG8DX HG8ITU HG8K HG8N HG8R HG8U HG8W HG8X HG8YKO HG8Z HG9ITU HH2/HB9AMO HH2/N5JR HH2/VA3MPG HH2AA HH2AW HH2GMR HH2JR HI1UD HI3/HA3JB HI3/KC1XX HI3/KL7JR HI3/ND3F HI3AA HI3CC HI3K HI3RCD HI3T HI3TEJ HI3TT HI3Y HI6K HI7SBR HI8A HI8CSS HI8JKG HI8JSG HI8K HI8K/6 HI8KW HI8LAM HI8PAP HI8PJP HI8PLE HJ0NA HJ1E HJ4ZJS HK0/DL9GRE HK0RMR HK1AC HK1ANP HK1MW HK1NA HK1R HK1T HK1W HK1X HK2NPH HK3C HK3E HK3J HK3JJB HK3JJH HK3PSA HK3Q HK3T HK3TK HK3TU HK3TY HK3UA HK3VHZ HK3W HK3ZD HK4CMB HK4DLO HK4GOO HK4JCC HK4L HK4SAN HK4W HK5/OZ1AA HK5LAM HK5VD HK6CF HK6F HK6J HK6JIL HK6NVV HK6P HK6SNJ HL0HQ HL0NHQ HL1AHS HL1IWD HL1OYF HL1VAU HL1ZAI HL1ZIX HL2AHL HL2CFY HL2DBP HL2DNU HL2KXT HL2LTX HL2ST HL2SU HL2UOK HL2VXK HL2WA HL2WP HL2ZDA HL2ZED HL3AMO HL3EHK HL3EPH HL3IB HL4CBI HL4CCM HL4CEL HL4CHH HL4RBR HL5BCL HL5BLF HL5BMX HL5FAM HL5FEI HL5FUA HL5IVL HL5JCB HL5JZ HL5NAE HL5NBM HL5UOG HL5YI HL5ZEE HO1C HO2C HP1/K6CT HP1AC HP1ALX HP1AVS HP1BD HP1DCP HP1ELV HP1MAC HP1RIS HP1RN HP1XT HP2BW HP2BWJ HP3/VY2SS HP3AK HP3SS HP8KJW HQ1LEO HQ2ALJ HQ9X HR1/K2LCT HR1AAB HR2/OE3GEA HR2DMR HR2J HR2WW HR5/F2JD HR9X HS0AC HS0ACS HS0ZAR HS0ZCW HS0ZDG HS0ZDR HS0ZDX HS0ZEE HS0ZGV HS0ZHC HS0ZIA HS0ZIN HS0ZIV HS0ZJK HS0ZLE HS0ZLM HS0ZLN HS0ZLW HS1FVL HS1JZT HS3ANP HS3LSE HS3LUY HS3NBR HS3PIK HS3XVP HS4DDQ HS4UEL HS5AC HS5FAI HS5IHQ HS5NMF HS5SRH HS5ZLD HS6MYW HS6VW HS6XHH HS6ZBQ HS7BHK HS7WMU HS8FLU HS8GLR HS8JCV HS8JWH HS8JYX HS8LVC HT7C HV0A HV6SP HZ1BL HZ1BW HZ1DG HZ1FI HZ1HN HZ1HZ HZ1MX HZ1PS HZ1SK HZ1SM HZ1TL HZ1TT HZ87ND I/HB9TTK I0/LZ2OG I0/S53R I02X I0ABK I0BYR I0CMD I0FSP I0GIA I0GOJ I0HOU I0IA I0IJ I0JBL I0KHY I0KIB I0KWK I0KWX I0LYO I0MLU I0MOM I0NRF I0PNM I0QGR I0SNY I0UZF I0WBX I0YQV I0ZUT I1/IK2DKX I1ABT I1ANP I1APQ I1BEP I1BPU I1DXD I1EIS I1FBJ I1FLC I1HJT I1HLP I1JHS I1JQJ I1JTQ I1LGR I1MRH I1NVU I1OQI I1PLX I1POR I1QQC I1RB I1RJP I1SWI I1UW I1WQR I1WXY I1XPQ I1XYX I1YGQ I1YRL I1YTO I1ZDW I2AZ I2BJS I2BPP I2BWW I2BZN I2CZQ I2DJX I2FUM I2IFT I2IOJ I2JIN I2JSB I2KBD I2KBW I2MOV I2NKR I2OGV I2ORX I2PEI I2PJA I2RBR I2RFJ I2ROO I2RVW I2SVA I2TAO I2TFJ I2TZK I2UVZ I2VGW I2VRN I2VXJ I2VZU I2WDB I2WIJ I2WIJ/1 I2WSG I2XIP I2XLF I2YPY I2YYO I3BQC/P I3CRW I3EVK I3FDZ I3FGX I3FIY I3GKK I3JFU I3JKI I3JRF I3JSS I3JUK I3KAN I3LGP I3LTT I3MDU I3ON I3PVB I3PVE I3PXN I3QDK I3QJZ I3VAD I3VJW I3VRD I3VWK I3YEG I3ZSX I4/HB9ZAG I4AUM I4AVG I4BMJ I4DVT I4DZ I4EAT I4EUM I4EWH I4FGG I4GAD I4HRH I4IKW I4JED I4JEE I4JUQ I4KDJ I4KYO I4LCK I4LEC I4MKN I4PZP I4TDK I4TJE I4UUL I4VDZ I4VEQ I4VIL I4VJC I4VOS I4WYE I4XNN I4YCE I4YEY I4YSS I4ZGI I4ZQS I4ZSQ I5DOF I5ECW I5EFO I5FCK I5IIL I5KAP I5MXX I5NQK I5NSR I5NZH I5OYY I5RAD I5REA I5RMY I5SOD I5WNN I5YKQ I5ZSS I6CBI I6COJ I6CXD I6DU I6FDJ I6FLD I6FPN I6MAT I6NO I6ONE I6PZ I6WJB I7ALE I7CSB I7DFV I7PHH I7WL I8JIT I8QJU I8QLS I8UZA I8VJK I8XTX I8YAV IB1A IB1B IB1G IB1K IB1W IB2A IB2P IB2T IB2VIG IB3A IB3C IB3N IB4A IB4K IB4X IB5T IB7J IB9A IB9O IB9P IB9T IC8AIK IC8AJU IC8BNR IC8CUQ IC8FBU IC8FJX IC8FQU IC8POF IC8SQS IC8TEM IC8WIC IC8XIL ID9/IT9BXR ID9T IE9K IF9/IT9PPG IF9A IG9/I2ADN IG9/LZ2SX IH9A IH9R IH9YMC II0/OM8A II0I II0K II0M II0X II1A II1HQ II1IGG II1K II1TO II1W II2HQ II2S II2V II3E II3I II3IOTA II3W II3Y II4A II4K II4Z II5ANC II5COTA II5D II5E II5HQ II6A II6HQ II6T II7P II8HQ II8M II8P II9HQ II9P II9W IK0ALH IK0BAL IK0BZE IK0CHU IK0CNA IK0EFR IK0EIE IK0FMB IK0FUX IK0FVC IK0HBN IK0HFO IK0HTP IK0ISD IK0IXI IK0IXO IK0JNI IK0LNN IK0MIB IK0OKY IK0OPS IK0OZD IK0PEA IK0PHU IK0PHY IK0PRG IK0PRP IK0PUL IK0PXD IK0SME IK0TIX IK0TUM IK0TWN IK0UTM IK0UXO IK0VKL IK0VSY IK0VVE IK0VVG IK0VVP IK0VWH IK0WRB IK0XBX IK0XCG IK0XFD IK0YGJ IK0YUO IK0YUT IK0YVV IK0ZWZ IK1ASR IK1BBC IK1BPL IK1BQD IK1EZC IK1FXX IK1GKH IK1GPG IK1HJS IK1HZZ IK1IXG IK1JJM IK1LYQ IK1MEG IK1NEG IK1ODS IK1OOF IK1OOG IK1OXF IK1PMR IK1QBT IK1QFP IK1QFP/IT9 IK1QHB IK1RAE IK1RAG IK1RGK IK1RQQ IK1SLD IK1SOW IK1SPR IK1TAZ IK1TTD IK1TWC IK1UGX IK1UUU IK1VHR IK1VQY IK1WEG IK1WGX IK1WGZ IK1XPK IK1YDA IK1YDB IK1YED IK1YFE IK1YLL IK1ZFO IK1ZNU IK1ZOC IK1ZOF IK1ZVJ IK2AHB IK2AHR IK2AIT IK2ANI IK2AOH IK2AOO IK2AQZ IK2AUK IK2AVH IK2BUF IK2CAW IK2CFD IK2CIO IK2CLB IK2CMI IK2CZQ IK2DED IK2DFZ IK2DIA IK2DJV IK2DKX IK2DPP IK2EAD IK2EBP IK2EGL IK2EKO IK2FDV IK2FIR IK2FYH IK2GPQ IK2GVS IK2GWH IK2GZU IK2HAB IK2HKT IK2IKW IK2ILH IK2ILW IK2IQD IK2JTS IK2JUA IK2LOL IK2MKS IK2MMM IK2MPR IK2MXM IK2NCF IK2NCJ IK2NNI IK2NUX IK2NVE IK2ODD IK2OFS IK2OHG IK2OVC IK2OVT IK2PFL IK2PZC IK2QEI IK2QIK IK2QIN IK2QLX IK2QPR IK2REA IK2RGT IK2RLS IK2RZD IK2RZG IK2RZP IK2RZQ IK2SAI IK2SAR IK2SAU IK2SBB IK2SGB IK2SGF IK2SGL/OA8 IK2SGO IK2SND IK2SYK IK2TDM IK2TKX IK2TYL IK2UCK IK2UEC IK2UEX IK2UIX IK2UJF IK2ULM IK2ULV IK2UUJ IK2UVR IK2UZQ IK2UZV IK2VFR IK2VFW IK2VUC IK2WAD IK2WFN IK2WPO IK2WQH IK2WRV IK2WSJ IK2WSO IK2WXQ IK2WYI IK2WZM IK2XDE IK2XSL IK2XYF IK2XYI IK2YCW IK2YDM IK2YGZ IK2YLV IK2YSJ IK2YXB IK2YXP IK2YYL IK2ZEC IK3ACI IK3ASM IK3AVM IK3BVD IK3CHK IK3CST IK3DVY IK3EDT IK3ELC IK3FHP IK3GES IK3HAR IK3HMB IK3HXF IK3ITX IK3IUE IK3JBP IK3JLS IK3MLF IK3OBX IK3OCD IK3OGN IK3OII IK3ORD IK3OYU IK3OYY IK3QAR IK3RET IK3SCB IK3SSJ IK3SSO IK3SSW IK3TPP IK3TZB IK3UNA IK3UNA/1 IK3VUT IK3VUU IK3XJP IK3XTT IK3XTV IK3XTY IK3YBX IK3YCW IK3ZAQ IK3ZBM IK4ADE IK4ALM IK4AUY IK4BEI IK4CIE IK4CLF IK4DCX IK4DDI IK4DKO IK4DRY IK4EWX IK4FAL IK4FWF IK4GBU IK4GNI IK4GRO IK4HLQ IK4HPS IK4ICS IK4IDF IK4IDP IK4JPK IK4JQQ IK4JQR IK4JQS IK4LZH IK4MEE IK4MGJ IK4MGP IK4NMF IK4NYV IK4NZD IK4OMO IK4OMU IK4PKK IK4PKN IK4POG IK4QJF IK4RAS IK4RQE IK4RSR IK4RVG IK4TVP IK4UNH IK4UOA IK4UPB IK4UPI IK4UQA IK4UXA IK4UXB IK4VET IK4VFB IK4VFD IK4WKU IK4WLA IK4WMB IK4XCL IK4XQT IK4YCQ IK4ZGO IK4ZHH IK4ZHV IK4ZIF IK5AFJ IK5AMB IK5BCM IK5BDG IK5BOH/2 IK5BSC IK5CRH IK5DHL IK5DNF IK5EKL IK5FCK IK5FKF IK5IFH IK5IIS IK5LWE IK5MEP IK5OJB IK5ORP IK5PWJ IK5PWQ IK5PWS IK5QPS IK5QPV IK5RLP IK5ROP IK5RUN IK5SRF IK5TBI IK5TBK IK5UAN IK5WGK IK5XCT IK5YJK IK5ZAI IK5ZWU IK6BAK IK6BGJ IK6BMU IK6CAC IK6CNM IK6CRE IK6CWQ IK6DIN IK6EIW IK6FAW IK6FTZ IK6FWJ IK6GPZ IK6HRB IK6IHJ IK6IHN IK6LBT IK6MIN IK6NUZ IK6OGZ IK6PTH IK6QON IK6SBW IK6SIO IK6UBY IK6VXO IK6XEJ IK6ZER IK6ZRX IK7BEF IK7BPV IK7CMY IK7EES IK7EOT IK7FPU IK7GFS IK7GUW IK7HDY IK7HPG IK7HPJ IK7HTB IK7IMK IK7JTF IK7JVE IK7JWY IK7LMX IK7LVE IK7LYW IK7MIY IK7MXB IK7NXU IK7PRU IK7PTX IK7RVY IK7WPC IK7XGH IK7XLU IK7XNA IK7XNF IK7YCE IK7YTT IK8ARF IK8AWH IK8BIZ IK8BQE IK8DNJ IK8DYM IK8EJN IK8ENH IK8EVE IK8FUN IK8GJR IK8GYS IK8INR IK8JDH IK8LXI IK8MYM IK8NBE IK8NSR IK8OFW IK8OJJ IK8OZV IK8QQO IK8RJS IK8SCR IK8SDA IK8SEU IK8SVQ IK8TEM IK8TEO IK8TNG IK8TVG IK8UND IK8XFR IK8YHO IM0DTF IM0SDX IN3ADW IN3AHO IN3AUD IN3BFW IN3BJS IN3BJU IN3EIS IN3EME IN3ENK IN3EOM IN3EOV IN3EQD IN3EYI IN3FCK IN3FHE IN3FJK IN3FOI IN3FOX IN3FSR IN3FWK IN3GYN IN3HDE IN3HUU IN3IKF IN3ISV IN3JJI IN3JRZ IN3KLQ IN3KMY IN3MNS IN3MQT IN3NJB IN3OWY IN3QGY IN3RWF IN3UFW IN3VVK IN3XUG IN3YKS IN3ZDR IN3ZNR IN3ZWF IO0LOVE IO0TRC IO1C IO1T IO1X IO2R IO2X IO3A IO3CA IO3X IO4C IO4T IO4W IO4X IO5O IO5P IO7K IO7T IO8V IO9A IO9P IO9R IO9Z IP0LOVE IP0P IP0TRC IP1T IQ0AP IQ0FO IQ0ID IQ0LT IQ0NU IQ0PG IQ0RU IQ0TE IQ0XR IQ1AO IQ1BD IQ1CN IQ1DX IQ1GE IQ1GP IQ1IM IQ1RY IQ1SP IQ1ZC IQ2CJ IQ2CU IQ2DN IQ2LS IQ2MI IQ2PV IQ2WU IQ2XI IQ2XZ IQ2ZY IQ3BM IQ3GA IQ3IY IQ3KU IQ3MB IQ3ME IQ3ME/P IQ3MF IQ3QU IQ3RK IQ3TS IQ3UD IQ3VI IQ3WW IQ4AD IQ4BQ IQ4FA IQ4FC IQ4FE/P IQ4RN IQ5AE IQ5FI IQ5HX IQ5PJ IQ5PO IQ5TT IQ5WT IQ5ZP IQ5ZP/3 IQ6AN IQ7AF IQ7IW IQ7MU IQ7QK IQ7YP IQ8AY IQ8BB IQ8BB/8 IQ8CS IQ8LR IQ8NQ IQ8WF IQ8XE IQ8XF IQ8XS IQ8YT IQ9UI IQ9ZZ IR1A IR1E IR1G IR1O IR1R IR1X IR1Y IR2C IR2CSN IR2F IR2L IR2R IR3C IR3M IR3Z IR4B IR4E IR4M IR4P IR4X IR5A IR6A IR6T IR7A IR7R IR8C IR8P IR8T IR8W IR9F IR9RW IR9W IR9Z IS0/DL5SE IS0/IZ2DLV IS0/OM8A IS0AEM IS0AFM IS0AML IS0BHY IS0BOY IS0BRQ IS0BSR IS0DCR IS0DDL IS0DFC IS0DSW IS0ESG IS0FEZ IS0FFF IS0FFV IS0FMD IS0FRV IS0FWY IS0GGA IS0GQX IS0GRB IS0GSR IS0HQJ IS0HXK IS0IEK IS0LYN IS0M IS0NHT IS0QQA IS0SWW IS0XDA IT9/IV3YYK IT9/K7ZSD IT9AAI IT9ACJ IT9AHH IT9AHI IT9AJP IT9AOI IT9AUG IT9AUH IT9AXQ IT9AXZ IT9AZE IT9AZK IT9BCC IT9BDM IT9BDR IT9BDW IT9BII IT9BLB IT9BTI IT9BUN IT9BYS IT9CDU IT9CFP IT9CHU IT9CJC IT9CKA IT9CLN IT9CLX IT9CML IT9CTG IT9CVO IT9CZJ IT9DGG IT9DGZ IT9DKI IT9DSA IT9DSZ IT9DVZ IT9ELD IT9ESI IT9ESW IT9EUT IT9EWR IT9FRD IT9FRX IT9FUN IT9GAK IT9GBF IT9GCW IT9GJK IT9GQB IT9GQH IT9GRX IT9HBT IT9IMJ IT9IQQ IT9IZY IT9JGX IT9JOF IT9JQY IT9KCD IT9LED IT9LKX IT9MUO IT9NAN IT9NVA IT9OPR IT9PPG IT9PQJ IT9PZM IT9QQP IT9RBW IT9RDG IT9RDG/IF9 IT9RGY IT9RKR IT9RWB IT9RYJ IT9RZU IT9SFT IT9SSI IT9STX IT9SVJ IT9TFX IT9UCS IT9UFP IT9VCE IT9VDQ IT9VPT IT9WDC IT9WNU IT9XTP IT9YAO IT9YOZ IT9YVO IT9ZMX IT9ZVL IT9ZZO IU0APV IU0ARA IU0CNI IU0CSH IU0DFT IU0DMP IU0FNW IU0GCB IU1AUG IU1BSV IU1CYF IU1DEI IU1DUK IU1DZZ IU1EAF/4 IU1FIB IU1FID IU1FQQ IU1FSL IU1FTV IU1GHC IU1GNA IU1HCC IU1JCZ IU2ABV IU2ACI IU2BEE IU2BHI IU2BXA IU2BZE IU2CBY IU2CIQ IU2CKS IU2CVS IU2DQH IU2DUP IU2DXF IU2EFB IU2EFL IU2FGB IU2FQW IU2GDC IU2GGD IU2GLK IU2IDO IU2IGX IU2JMZ IU3BPW IU3BRB IU3BSY IU3BTY IU3BXO IU3EDK IU3FBL IU3FCM IU3FCR IU3GNS IU4AOP IU4AOS IU4APB IU4AZC IU4BIP IU4BUQ IU4CHE IU4DAF IU4DTV IU4FIR IU4FIT IU4FJH IU4FJI IU4FKN IU4FKR IU4FKS IU4FLO IU4FNO IU4FNQ IU4HMP IU4HMY IU4HRJ IU4ICT IU4JGS IU5BJS IU5BKR IU5BLZ IU5CJP IU5CTX IU5DBS IU5DVC IU5FFM IU5HLE IU6AIG IU6AKY IU6DVS IU6EPI IU6FUB IU7BOE IU7BOH IU7BXH IU7CUE IU7DUU IU7EPA IU7GRJ IU8ACL IU8ACV IU8CEC IU8CNE IU8CPQ IU8DKG IU8DSP IU8FRE IU8FRF IU8FUL IU8FUN IU8GIS IU8GNY IU8HEP IU8HRV IV3/YT3H IV3AEB IV3AOL IV3APV IV3ARJ IV3AVQ IV3AZV IV3BCA IV3BSV IV3CGJ IV3CNZ IV3CTS IV3CYT IV3DCZ IV3DLW/P IV3DRA IV3DRP IV3DSG IV3DSH IV3DUC IV3DXW IV3DYS IV3EAD IV3ELR IV3EPO IV3EWO IV3FNW IV3FNX IV3FSG IV3FWZ IV3GKE IV3GOS IV3GUY IV3HAX IV3IDP IV3IFY IV3IUM IV3IXN IV3IYH IV3JCC IV3JVJ IV3JWY IV3KAS IV3KCB IV3KKW IV3KSE IV3KVC IV3KYQ IV3MGN IV3MPI IV3NDR IV3NTI IV3NVB IV3OKO IV3ONZ IV3OSC IV3PGQ IV3PRK IV3RYP IV3RYX IV3SKB IV3TIQ IV3TMV IV3TRK IV3TUO IV3UHL IV3UT IV3VBM IV3WMI IV3WMS IV3XNF IV3XZG IV3YIB IV3YYK IV3ZCS IV3ZUY IV3ZXQ IW0AEN IW0BCF IW0BLW IW0BNW IW0BYL IW0CUK IW0EAC IW0ECV IW0EZW IW0GPW IW0GTA IW0GTA/5 IW0HBY IW0HLZ IW0QO IW0RGN IW0RTW IW0SAF IW0UWE IW1ANM IW1ARB IW1AWW IW1BCO IW1CBG IW1CHX IW1DFU IW1FGY IW1FRD IW1FRU IW1FZR IW1GJR IW1GPT IW1PDP IW1PNJ IW1PUR IW1QEA IW1QN IW1RBI IW1RGP IW1RGS IW1RHR IW1RLC IW1RLS IW2BAI IW2BCN IW2BZY IW2CAM IW2CNM IW2CTQ IW2CXJ IW2DJN IW2DUG IW2ESL IW2ETR IW2EVH IW2FLB IW2FUT IW2HAJ IW2HUS IW2JRV IW2LLH IW2MVM IW2MXY IW2MYG IW2MYH IW2MZX IW2NEF IW2NRI IW2NUI IW2ODC IW3FVZ IW3FZQ IW3GID IW3GRG IW3GXW IW3HKW IW3HVB/P IW3HXR IW3IAU IW3ICK IW3IFJ IW3ILM IW3IOD IW3QRM IW3RIF IW3RQT IW3RUA IW3SLG IW3SNW IW3SQH IW3SSD IW4AOT IW4BLZ IW4CNY IW4ECF IW4EGX IW4EII IW4EJK IW5AB IW5BT IW5DLY IW5ECP IW5EDI IW5EHL IW5EKR IW5ELA IW6ASD IW6CJM IW6NEM IW6PWC IW7BIM IW7CZK IW7DBM IW7DHC IW7DMH IW7EBE IW7EFJ IW8AQP IW8AWR IW8DGZ IW8DQY IW8FFX IW9BCW IW9FDD IW9FI IW9FIR IW9FRA IW9GMF IW9GRL IW9GTD IW9GYL IW9HII IW9HRQ IW9HRZ IX1CKN IX1CLD IX1CVF IX1IIU IY1A IY4FGM IZ0AEZ IZ0AIS IZ0AXF IZ0BVU IZ0CHK IZ0DXD IZ0EHL IZ0EUS IZ0EUX IZ0FKE IZ0FUW IZ0FVD IZ0FZM IZ0GRR IZ0GUS IZ0GYR IZ0HLY IZ0IRH IZ0KBA IZ0KBR IZ0LZC IZ0MQN IZ0OTV IZ0OVW IZ0PAD IZ0PAU IZ0PMV IZ0PTY IZ0RJR IZ0TSC IZ0TTE IZ0TWS IZ0TZI IZ0UIN IZ0UME IZ0VXY IZ0XZD IZ0YIQ IZ1AEL IZ1ANK IZ1ANU IZ1ANZ IZ1BII IZ1BZV IZ1CJZ IZ1CLA IZ1DBY IZ1DGG IZ1DLY IZ1DNQ IZ1DXS IZ1EPM IZ1ERW IZ1ESM IZ1GAR IZ1GCV IZ1GLT IZ1GLX IZ1GMA IZ1GRH IZ1HBC IZ1HDR IZ1HLU IZ1JKH IZ1JLG IZ1JLN IZ1JOB IZ1KGY IZ1LAY IZ1LBG IZ1MDJ IZ1MHY IZ1NBX IZ1OMY IZ1OQU IZ1ORU IZ1OSP IZ1PHT IZ1PKV IZ1PLH IZ1PMC IZ1POA IZ1POF IZ1RDQ IZ1RFL IZ1RSS IZ1RYS IZ1TGH IZ1TRG IZ1UJE IZ1UKA IZ1UKX IZ1USO IZ1WIX IZ1WTO IZ1XBB IZ1XEE IZ1XGD IZ1YCG IZ1YPF IZ1YUI IZ1ZHG IZ1ZJS IZ2ABI IZ2ABN IZ2ACY IZ2AJE IZ2AMW IZ2AVK IZ2BHQ IZ2BKA IZ2BKD IZ2BKP IZ2BVC IZ2BVN IZ2BZP IZ2CPO IZ2CSX IZ2DII IZ2DJP IZ2DLV IZ2DPX IZ2DVI IZ2EAS IZ2EEV IZ2EVH IZ2FDU IZ2FLX IZ2FLY IZ2FME IZ2FNI IZ2FOS IZ2GIL IZ2GIU IZ2GMT IZ2GOT IZ2GRG IZ2GTS IZ2IPF IZ2JNN IZ2JPN IZ2KPE IZ2KTE IZ2KXC IZ2LQD IZ2LSP IZ2LTW IZ2MFD IZ2MGN IZ2NBD IZ2NXF IZ2NZQ IZ2OBS IZ2ODM IZ2ODT IZ2OHL IZ2OOS IZ2QCP IZ2QDC IZ2QDQ IZ2QGB IZ2QKG IZ2QXG IZ2RPJ/5 IZ2SDK IZ2SMQ IZ2SNI IZ2SNY IZ2SQR IZ2SXZ IZ2USH IZ2WTZ IZ2WYA IZ2XNY IZ2YAF IZ2YCW IZ2ZOT IZ2ZPH IZ2ZPM IZ2ZQP IZ2ZSH IZ2ZTR IZ3AYQ IZ3AYS IZ3BJA IZ3CKG IZ3CLE IZ3DVU IZ3EAW IZ3EIN IZ3ENH IZ3ERM IZ3ETC IZ3ETU IZ3EYZ/4 IZ3GFZ IZ3GHP IZ3GJL IZ3GNG IZ3GOG IZ3GOM IZ3GYS IZ3IBL IZ3IQW IZ3KIF IZ3KKE IZ3KMY IZ3KSP IZ3KUY IZ3KVD IZ3LCI IZ3LEY IZ3LSZ IZ3LUF IZ3NOC IZ3NUI IZ3NVR IZ3NYG IZ3NYT IZ3PUR IZ3PYE IZ3PZI IZ3PZM IZ3QCH IZ3QET IZ3QFG IZ3QHA IZ3SQW IZ3VTH IZ3WSV IZ3WUW IZ3WXR IZ3XAC IZ3XEF IZ3XNJ IZ3ZLC IZ3ZLG IZ3ZLT IZ4AFW IZ4AIF IZ4AKO IZ4BOY IZ4COT IZ4COW IZ4DIW IZ4DLR IZ4DYQ IZ4DYX IZ4DZD IZ4FTD IZ4GJJ IZ4GOL IZ4GWE IZ4IRX IZ4ISK IZ4IST IZ4JMA IZ4JMU IZ4JUK IZ4MJP IZ4MNY IZ4NIC IZ4NSV IZ4ORF IZ4ORO IZ4OSH IZ4RCQ IZ4REF IZ4RYB IZ4TNM IZ4TOA IZ4UFB IZ4UFG IZ4VQS IZ4VSD IZ4VUS IZ4VYY IZ4WNQ IZ4XAI IZ4XHG IZ4YDF IZ4YGS IZ4ZZB IZ5ASZ IZ5BRP IZ5BRW IZ5BSA IZ5CLJ IZ5CMI IZ5CML IZ5DKG IZ5DKJ IZ5DKO IZ5EAF IZ5EBL IZ5EKV IZ5EKX IZ5EME IZ5FDD IZ5FDE IZ5FFI IZ5FKK IZ5FSA IZ5FSO IZ5HPQ IZ5HQB IZ5HSK IZ5HZO IZ5ICH IZ5ILC IZ5ILF IZ5ILJ IZ5ILK IZ5IMD IZ5IOS IZ5JLF IZ5JLW IZ5JMZ IZ5MKA IZ5MOQ IZ5MXA IZ5NFD IZ5NRF IZ5OQA IZ5OQX IZ5OVP IZ5PQT IZ5RAQ IZ5RJS IZ5RKC IZ5RKR IZ5RKW IZ5RVG IZ5TJD/7 IZ5UGE IZ5VCI IZ5WRC IZ5WTV IZ5YHD IZ6BTN IZ6BXQ IZ6BXV IZ6BYS IZ6DWH IZ6ERS IZ6FXP IZ6GVC IZ6HAO IZ6HYR IZ6LOF IZ6OUX IZ6RMR IZ6UQO IZ6WSJ IZ6ZFM IZ7BOR IZ7CDE IZ7DJR IZ7DJS IZ7DOK IZ7ECB IZ7ECL IZ7EUB IZ7FLP IZ7FLQ IZ7FMI IZ7GEG IZ7NLM IZ7NMD IZ7SIA IZ7SJV IZ7UIT IZ7UMS IZ7VII IZ7VPK IZ7WWY IZ7XIB IZ7XMY IZ7XNB IZ7XUQ IZ7XZJ IZ7ZKV IZ8ATP IZ8AZZ IZ8BFV IZ8BRI IZ8CCW IZ8CKY IZ8DBJ IZ8DDL IZ8DFO IZ8DSX IZ8DUD IZ8DVD IZ8EDL IZ8EEL IZ8EFD IZ8EFE IZ8EPX IZ8ESX IZ8EWD IZ8EYP IZ8FBU IZ8FDG IZ8FFA IZ8FPK IZ8FWN IZ8GBT IZ8GCB IZ8GEX IZ8GNR IZ8GUH IZ8GUQ IZ8HUJ IZ8HUW IZ8HXG IZ8IBC IZ8IEV IZ8IFL IZ8IQL IZ8ITT IZ8JAI IZ8JCW IZ8JFL IZ8JFL/1 IZ8JHD IZ8LIP IZ8LKL IZ8LMA IZ8LNG IZ8NVV IZ8NWA IZ8QNS IZ8RQS IZ8SFM IZ8SXI IZ8TDP IZ8TVS IZ8VBS IZ8VKW IZ8VYU IZ8XFM IZ8XQC IZ8XXE IZ8YAA IZ8YBS IZ8YUB IZ8ZPS J3/KO8SCA J34G J35X J38DG J41J J42P J42PIKRA J42T J43N J43TR J49A J6/K4ZGB J6/K9AW J6/N8WD J6/WB9OTX J62DX J66SJ J68GD J68GU J68HF J68HZ J68RL J69MV J69Z J70BH J70BS J73GAR J73Z J75Y J77HQ J79E J79WTA J79XBI J79XE J79XF J7HY J8/WW2DX J80BS J87HQ J88HF JA0AOO JA0AOQ JA0ARF JA0AVS JA0AWN JA0BJY JA0BOV JA0BPY/6 JA0BZY JA0CGJ JA0CJK JA0CLB JA0CUW JA0CVC JA0CVW JA0CXQ JA0DAI JA0DCB JA0DIN JA0DOM JA0DOW JA0DVE JA0EBV JA0ED JA0EIY JA0EKI JA0ELW JA0EME JA0EOK JA0EPV JA0EVI JA0FMU JA0FSB JA0FVU JA0GCI JA0GCY JA0GJJ JA0GSG JA0HXV JA0IKP JA0IND/1 JA0IOF JA0IXW JA0JWQ JA0KJD JA0LBE JA0LNS JA0MOQ JA0MVW JA0NFP JA0NPQ JA0OLK JA0OZZ JA0PE JA0QBY JA0QNJ JA0RCK JA0RUG JA0RXU JA0UH JA0UMV JA0UR JA0URR JA0UUA JA0VSH JA0VTK/7 JA0WIU JA1AAA JA1ADU JA1AFI JA1AGE JA1AGG JA1AHS JA1AJK JA1AKL JA1ALT JA1AML JA1ANR JA1AUD JA1AVI/1 JA1AYO JA1AZR JA1AZW JA1BAN JA1BBC JA1BBO JA1BFN JA1BIV JA1BJI JA1BNW JA1BON JA1BOQ JA1BPA JA1BPN JA1BRS JA1BTR JA1BVY JA1BWA JA1BWD JA1CC JA1CCN JA1CCO JA1CCX JA1CG JA1CHY JA1CJL JA1CJP JA1CKE JA1CLZ JA1COU JA1CP JA1CPU JA1CPZ JA1CQD JA1CQK JA1CQT JA1CRJ JA1CSN JA1CTB JA1CTZ JA1CUF JA1CZI JA1DBG JA1DCK JA1DCL JA1DCO JA1DDR JA1DDZ JA1DFP JA1DKT JA1DMX JA1DOF JA1DSW JA1DUH JA1DVN JA1EFY JA1EMQ JA1ENX JA1EOD JA1EOG JA1EPJ JA1ERB JA1ETN JA1EUI JA1EYN JA1EZK JA1FFB JA1FGB JA1FNA JA1FNO JA1FTW JA1FUI JA1FVE JA1FVJ JA1FWS JA1GC JA1GCA JA1GFB JA1GFD JA1GHR JA1GLE JA1GOL JA1GQC JA1GQL JA1GUC JA1GUH JA1GVM JA1GZK JA1GZV JA1HEV JA1HFY JA1HGX JA1HGY JA1HLR JA1HMK JA1HNW JA1HOX JA1HTD JA1HTK JA1HXJ JA1IAW JA1IAZ JA1IE JA1IFB JA1IFP JA1II JA1ILE JA1IPZ JA1IQV JA1IRH JA1ISA JA1ITX JA1IVY JA1IXY JA1IZ JA1IZZ JA1JCF JA1JCF/P JA1JHW JA1JLP JA1JNM JA1JPM JA1JQY JA1JXT JA1JXU JA1KDU JA1KEB JA1KEV JA1KGV JA1KIH JA1KJW JA1KK JA1KPH JA1KUU JA1KVF JA1KVT JA1KWB JA1KZP JA1LBZ JA1LHH JA1LLG JA1LLN JA1LLY JA1LNZ JA1LZB JA1LZK JA1LZR JA1MLV JA1MRM JA1MSS JA1MYW JA1MZL JA1MZM JA1NCZ JA1NEZ JA1NFB JA1NFD JA1NIJ JA1NIR JA1NLC JA1NLX JA1NQU JA1NRH JA1NRQ JA1NSH JA1NUT JA1NVF JA1NZD JA1OAF JA1OGI JA1OGM JA1OGX JA1OHD JA1OHP JA1OJE/2 JA1ORM JA1OTT JA1OVD JA1OWP JA1OYD JA1PCM JA1PFP JA1PIG JA1PJS JA1PLL JA1PNA JA1PPW JA1PRV JA1PTC JA1PTJ JA1PTO JA1PVX JA1PYP JA1QGS JA1QHQ JA1QIF JA1QJE JA1QJI JA1QND JA1QOW JA1QU JA1QVR JA1QWT JA1QXC JA1RAC JA1RFF JA1RKI JA1RNU JA1RPK JA1RQT JA1RRA JA1RTX JA1RYC JA1SCE JA1SIM JA1SJV JA1SKE JA1SKL JA1SKM JA1SQD JA1STY JA1SVP JA1TBA JA1TBX JA1TD JA1TGO JA1TLK JA1TMG JA1TOU JA1UBZ/1 JA1UEA JA1UHJ JA1UII JA1UKC JA1UOA JA1UOC JA1UPO JA1UPT JA1USO JA1UTC JA1UTN JA1UTZ JA1UWB JA1UXJ JA1UXV JA1UYJ JA1VDJ JA1VHO JA1VJQ JA1VLK JA1VND JA1VSL JA1VUA JA1VUI JA1VVO JA1VVX JA1VZO JA1WBX JA1WHG JA1WPX JA1WQD JA1WQX JA1WRI JA1WSK JA1WSX JA1WTI JA1WTO JA1WUL JA1WUM JA1WWB JA1WWE JA1WWO JA1WZV JA1WZX JA1XBX JA1XEC JA1XGI JA1XHC JA1XPQ JA1XRA JA1XTQ JA1XZF JA1YEN/1 JA1YHC JA1YNE JA1YPA JA1YVT/1 JA1YYE JA1ZGO JA1ZGP JA1ZWT JA2AC JA2ACR JA2ANR JA2ATE JA2AXB JA2AYP JA2BAY JA2BCE JA2BDR JA2BHQ JA2BIV JA2BJW JA2BMW JA2BNN JA2BQX JA2CKT JA2CUS JA2DDA JA2DGQ/3 JA2DHF JA2DPQ JA2DXD JA2DZQ JA2ENO JA2EOX JA2FBC JA2FLE JA2FMN JA2FNY JA2FSM JA2FTR JA2FUA JA2FUJ JA2FXV JA2GAL JA2GDH JA2GHP JA2GTW JA2HBK JA2HGF JA2HGY/1 JA2HJP JA2HMD JA2HNP JA2HOL JA2HXV JA2HYD JA2HZA JA2IEM JA2III JA2IJU JA2ITK JA2IVK JA2IXS JA2JGB JA2JKT JA2JNC JA2JNC/1 JA2JOJ JA2JTN JA2JWH JA2KCY JA2KGH JA2KGQ JA2KIY JA2KKA JA2KOG JA2KPW JA2KQE JA2KSI JA2KVB JA2KVD JA2LMY JA2LWA JA2MOG JA2MWV JA2NDQ JA2NQG JA2ODB JA2OZI JA2PAC JA2PFO JA2PSV JA2QOF JA2QQC JA2QS JA2QVP JA2QWN JA2RPZ JA2VHG JA2VHO JA2VMU JA2VPO JA2VQF JA2VWG JA2VXZ JA2VZL JA2WUK JA2XCR JA2XLV JA2XYO JA2XZZ JA2YBK JA2YEF JA2YGP JA2YKA JA3AER JA3AHD JA3AIC JA3ALO JA3AOP JA3APV JA3AVO JA3BAW JA3BBG JA3BCT JA3BDS JA3BIN JA3BLN JA3BOA JA3BQC JA3BUT JA3BVD JA3BXF JA3CG JA3CSZ JA3CZY JA3DAY JA3DAZ JA3DVJ JA3DWT JA3EAD JA3EBT JA3EGE JA3EJG JA3ENN JA3EQC JA3EQH JA3EZJ/2 JA3FQO JA3FRI JA3FYC JA3GJQ JA3GN JA3GSM JA3GZE/1 JA3HBC JA3HBF JA3HCC JA3HDM JA3HIL JA3HKR JA3HU JA3HZT JA3IBU JA3IDQ JA3IKG JA3IWB JA3JFT JA3JM JA3JND JA3JOT JA3KDJ JA3KGF JA3KIO JA3KKE JA3KLI JA3KNB JA3KRK JA3LCR JA3LDH JA3LEB JA3LEZ JA3LKU JA3LXH JA3LXJ JA3LXY JA3MAT JA3MEV JA3MIB JA3MIX JA3MQY JA3NFA JA3NJY JA3NTE JA3NVF JA3OEA JA3OHY JA3OLO JA3OOK JA3PFY JA3PIS JA3POW JA3PYC JA3PYH JA3QCM JA3QNI JA3QOS JA3RAR JA3RAZ JA3UNA JA3UVR JA3UWB JA3VLD JA3VOV JA3VQW JA3VUI JA3VXH JA3WKK JA3WMS JA3WNB JA3WPN JA3WQX/2 JA3XOG JA3YAA JA3YBK JA4AFT JA4AQR JA4AVO JA4AYU JA4BDY JA4BRS JA4BSZ JA4BUA JA4BXL JA4CES JA4CMW JA4COF JA4CQS JA4CSJ JA4CUU JA4CZM JA4DC JA4DEN JA4DHN JA4DNC JA4DND JA4DPL JA4DQX JA4DWG JA4DZ JA4EKO JA4ENP JA4ENY JA4EPE JA4ESR JA4EVN JA4EVW JA4EZP JA4FFZ JA4FKX JA4FSH JA4GGR JA4GQD JA4GXS JA4GXX JA4HIX JA4HXZ JA4IAQ JA4IOM JA4JBT JA4JSV JA4JY/3 JA4KEX JA4KTG JA4LAZ JA4LKB JA4LXY JA4MHB JA4MMO JA4MOK JA4NQD JA4OK JA4OPW JA4RED JA4RMX JA4RQO JA4RWN JA4SCQ JA4SSM/6 JA4TEG JA4TUJ JA4UDN JA4VNE JA4XHF/3 JA4XW JA4XY JA4ZA JA5AEA JA5ALE JA5AQC JA5AUC JA5BEN JA5BIN JA5BXF JA5BZL JA5CBU JA5CDL JA5CEX JA5CIC JA5CJZ JA5CN JA5CPJ JA5DPL JA5DQH JA5DVK JA5DX JA5EXW JA5FBZ JA5FDJ JA5FMP JA5FNX JA5GCI JA5GSG JA5GYU JA5IVG JA5IVG/5 JA5JGV JA5JLF JA5JWQ JA5KPO JA5MHD JA5MXP JA5NNS JA5NSR JA5OP JA5OVF JA5OXV JA5PWW JA5PXG JA5QAH/3 JA5QYR JA5RA JA5RB JA5RVN JA5SUD JA5TNF JA5TX JA5WIO JA5WU JA5XPD JA6ACZ JA6AGA JA6AGB JA6AGS JA6ARM JA6BCV JA6BDB JA6BGA JA6BJT JA6BWH JA6BXA JA6BZI JA6CBG JA6CM JA6CNH JA6CNL JA6CTN JA6CVR JA6CXX JA6CYL JA6DH JA6DIJ JA6EFT JA6ELV JA6EML JA6EXO JA6FCL JA6FFK JA6FFO JA6FIO JA6FOF JA6FUV JA6GCE JA6GGD JA6GHP JA6GIJ JA6GMC JA6GPR JA6GT JA6GVF JA6GXP JA6HOI JA6HZN JA6IGO JA6JNF JA6JYM JA6LCJ JA6LJN JA6MQY JA6NGD/1 JA6NQC JA6OXT JA6PA JA6RCH JA6RID JA6RIL JA6SHL JA6SRB JA6TIT JA6TNY JA6UDI JA6VQA JA6WFM JA6WHC JA6WJL JA6XMM JA6ZPR JA7ACM JA7ACV JA7ADV JA7AEM JA7AKH JA7AMK JA7ARW JA7AUM JA7AXB JA7AXP JA7BAL JA7BEW JA7BME JA7BMR JA7BMW JA7BOB JA7BVH JA7BWT JA7BXS JA7BZU JA7CDV JA7CIS/1 JA7CNS JA7CNS/1 JA7COI JA7CPW JA7CUA JA7CVL JA7CXL JA7CZU JA7DNO JA7DOT JA7DPC JA7DRZ JA7DY JA7EJO JA7EPO JA7ETU JA7FAS JA7FDA JA7FFN JA7FLI JA7FTR JA7GAP JA7GBS JA7GDW JA7GFN JA7GNX JA7GUT JA7GYP JA7HB JA7HYS JA7IC JA7IL JA7JAA JA7JAS JA7JMX JA7JRC JA7KBR JA7KED JA7KQC JA7KY JA7LGE JA7LLL JA7MBT JA7MJ JA7MOL JA7MSQ JA7MVX JA7MWC JA7NI JA7NPV JA7NVF JA7NX JA7OAR JA7ODY JA7OOO JA7OUV JA7OWB JA7OWD JA7OXV JA7OYF JA7OYM JA7OZW JA7PJC JA7PVK JA7QOU JA7QVI JA7ROM JA7RPC JA7RQK JA7RRU JA7SFD JA7SPJ JA7SSP JA7SUR JA7TJ JA7UES JA7VEI JA7WND JA7WTC JA7XRH JA7YAA JA7YBB JA7YCQ JA7YRR JA7ZF JA7ZFN JA7ZP JA8ABZ JA8AHA JA8AJE JA8BFO JA8BKI JA8BTC JA8CEA JA8CJY JA8CMC JA8CNF JA8COE JA8CTO JA8CXY JA8DCR JA8DFQ JA8DIQ JA8DIV JA8DJY JA8DKJ JA8DNV JA8DWZ JA8EAT JA8ECS JA8EEK JA8EIA JA8EIU JA8EOT JA8FFM JA8GAK JA8GMZ JA8GWK JA8HZJ JA8HZL JA8IAF JA8IDS JA8IJI JA8ISU JA8JLC JA8KGG JA8KSF JA8KSW/1 JA8LN JA8LNR JA8LP JA8LRG JA8MS JA8NFV JA8NNT/1 JA8NRS JA8NSF/1 JA8RWU JA8TGD JA8TR JA8WKE JA8WY JA8XOK JA8XQI JA8YK JA8ZO JA8ZZZ JA9ABA JA9APM JA9APS JA9BCV JA9BFN JA9BGL JA9BJS JA9BXP JA9CCG JA9CHI JA9CNC JA9CVY JA9CWJ JA9CZE JA9DTV/1 JA9EEH JA9EJG JA9ESZ JA9EZV JA9FAI JA9FHB JA9GEW JA9GLW JA9HIZ JA9IIC JA9IL JA9ILH JA9IPF JA9IWR JA9KBS JA9LJS JA9LNZ JA9LX JA9MAT JA9MGH JA9NFO JA9PAK JA9PPC JA9RPU JA9RRH JA9RT JA9SBI JA9TOZ/1 JA9TQY JA9ZMQ JD1BIA JD1BON JE1AEX JE1AJG JE1AON JE1AYU JE1BIG JE1BJP JE1BJT JE1BMJ JE1CAC JE1CKA JE1COB JE1CPB JE1CQT JE1CSW JE1CVJ/2 JE1CWQ JE1DRU JE1DVJ JE1DXC JE1EDY JE1EUH/1 JE1FQV JE1FUX JE1GDY JE1GLP JE1GWO JE1GZB JE1HPM JE1HRC JE1HTV JE1IBI JE1IFV JE1ILP JE1JAC JE1KEY JE1LET JE1LFR JE1LFX JE1LOI JE1LPZ JE1LRT JE1MGE JE1MMX JE1MQI JE1NHF JE1NVD JE1OLF JE1PMQ JE1PNX JE1QYI JE1REU JE1RRK JE1RXJ JE1RZR JE1SGH JE1SLP JE1SPY JE1SYN JE1TBU JE1TRF JE1TSD JE1VIF JE1VMZ JE1VTZ JE1XAD JE1XGZ JE1YKR JE1ZWT JE2BOM JE2CPI JE2DJC JE2DLR JE2DOD JE2DZC JE2EHP JE2EVX JE2FJI JE2FUP JE2GHV JE2GUV JE2HCJ JE2HXL JE2ILG JE2LUN JE2OTM JE2OTM/3 JE2OVG JE2PCY JE2PMC JE2PQQ JE2SOY JE2TLZ JE2URF JE2VFX JE2VLG JE2VYM JE2WLD JE2WTX JE3BXY JE3CDW JE3CXJ JE3DJB JE3ECD JE3EDJ JE3EMV JE3EVI JE3GRQ JE3JRA JE3MTQ JE3RNC JE3UHV JE3VRJ JE3XSY JE4ADO JE4CIL JE4JPQ JE4KCN JE4MHL JE4NAN JE4QPJ JE4RAL JE4URN JE4YLY JE5HTN JE5JHZ JE6BWB JE6CMG JE6EKC/3 JE6ETN JE6GCC JE6HCL JE6HGL JE6HJT JE6JNC JE6JRI JE6KYA JE6LZN JE6NSS JE6PJP JE6PPI JE6PRM JE6RPM JE6TSP JE6TUP JE7CJL JE7DMH JE7ETY JE7HYK JE7JDL JE7JZT JE7KCI JE7MAY JE7PNN JE7RHT JE7SRK JE8BKW JE8CIC JE8CLT JE8KGH JE8KKX JE8TGI JE8URC JE9QMZ JE9WEO JF0EBM JF0SGW JF1AZQ JF1BJD JF1BVG JF1CCH JF1DIR JF1DMY JF1DWJ JF1EHM JF1ELQ JF1FLM JF1GUT JF1GZZ JF1HJZ JF1HYA JF1IBZ JF1IRW JF1KIC JF1KMC JF1KML JF1KSF JF1KWG JF1LEO JF1LLB JF1LMB JF1MAD JF1MQS JF1NUV JF1NWF JF1NZW JF1OJC JF1OPL JF1OPO JF1OVA JF1RFZ JF1ROR JF1RYU JF1SEK JF1SPT JF1SQC JF1TEU JF1UOW JF1UOX JF1UVJ JF1VNR JF1WCK JF1WLK JF1WNT JF1WQC JF1WRV JF2AIJ JF2BDK JF2CTY JF2ERJ JF2FIU JF2FOX JF2IWL JF2KMX JF2KOZ JF2KWM JF2LTU JF2MBF JF2MVI JF2OHQ JF2OZH JF2PKL JF2QNM JF2RDG JF2RLD JF2RYX JF2SKV JF2UPM JF2VAX JF2VFN JF2VVQ/2 JF2WKE JF2WME JF2WXS JF2XGF JF3AHI JF3BFS JF3BHV JF3EIG JF3GFH JF3GFH/1 JF3ITH JF3IYW JF3KCH JF3KNW JF3KQA JF3LFL JF3LOP JF3MYU JF3NDW JF3NKA JF3PGW JF3PLF JF3PNQ JF3PRS JF3QJR JF3ROH JF3SUL JF3VAX JF3VEC JF3VKL/1 JF3VMY JF4IQS JF4VZT JF6OOM JF6RIM JF7EGJ JF7ELG JF7FHY JF7GDF JF7PHE JF7XKY JF8EPR JF8LPB JF8QNF JF9JTS JF9KVT JF9PPM JF9QCX JG0EXP JG1AVO JG1BKX JG1CFO JG1DLY JG1EGG JG1EIQ JG1EZF JG1FKT JG1FMA JG1FML JG1GCO JG1GGU JG1GPY JG1GUW JG1HQA JG1IEF JG1IGX JG1ITH JG1IUF JG1LEU JG1LFR JG1LHB JG1LPL JG1MIJ JG1OIY JG1OWV JG1PED JG1RBF JG1RET JG1RRH JG1RWM JG1RZH JG1SLY JG1SPS JG1STB JG1SWV JG1SXP JG1TGQ JG1THV JG1TVK JG1UKW JG1ULJ JG1ULT JG1UMO JG1UNF JG1UTG JG1UZD JG1VGX JG1VHA JG1WKM JG1XAJ JG1XFM JG1XIO JG1XMV JG2AXJ JG2BRI JG2JSZ JG2KKG JG2LGM JG2MWA JG2NLN JG2REJ JG2RFJ JG2RZF JG2TKH JG2TSL JG2VLL JG3CKF/1 JG3CQJ JG3EHD JG3EWE JG3FEA JG3FZU JG3GNU JG3IWL JG3KIV JG3KMT JG3LDD JG3LGD JG3QKO JG3QZN JG3RPL JG3RXZ JG3SVP JG3UVN JG3VWI JG3WDN JG4AKL JG5DHX JG5DHX/5 JG5UWK JG6ALR JG6BKB JG6CDH JG6JAV JG6JMQ JG6QFC JG6QHE JG6TPY JG6XYS JG7AFV JG7AMD JG7EHM JG7IJM/7 JG7PSJ JG8FWH JG8IBY JG8NKJ JG8RIT JG8XTU JH0AHI JH0BBA JH0BQX JH0CCK JH0EPI JH0EQN JH0EXA JH0GHZ JH0HVJ JH0IEW JH0IEY JH0ILL JH0INE JH0INP JH0JDV JH0KHR JH0LME JH0MHR JH0MJY JH0MMJ JH0MUC JH0MXV JH0NEC JH0OTM JH0OXS JH0QEV JH0QYS JH0RNN JH0TIS JH0WJW JH1ACA JH1AEP JH1AFD JH1AGU JH1AJT JH1ANW JH1APE JH1APK JH1APZ JH1ASG JH1BCS JH1BED JH1BHW JH1BIU JH1BNC JH1BZJ JH1CCN JH1CDR JH1CFV JH1CGI JH1CHU JH1CML JH1CMW JH1CTV JH1DGJ JH1DGQ JH1DLD JH1DYV JH1EAQ JH1EEB JH1EIG JH1EIT JH1EJB JH1EVD JH1EYM JH1FNU JH1FQW JH1FRR JH1FSF JH1FSL JH1FTL JH1FXB JH1GBO JH1GBZ JH1GCR JH1GDZ JH1GEX JH1GLJ JH1GNU JH1GTR JH1GTU JH1GTV JH1GTY JH1GZE JH1HDT JH1HEJ JH1HGC JH1HGI JH1HIC JH1HLC JH1HXY JH1IAQ JH1IED JH1IFS JH1IHD JH1IHO JH1ILX JH1INE JH1IOY JH1IVD JH1IWU JH1JCQ JH1JNJ JH1KLE JH1KMC JH1KRC JH1KWG JH1KYA JH1KZB JH1LEM JH1LGZ JH1LMD JH1LMG JH1LNL JH1LTM JH1LZU JH1MDJ JH1MFN JH1MTR/4 JH1MZG JH1NBN JH1NCZ JH1NIX JH1NKO JH1NTG JH1NVA JH1NXU JH1NYN JH1OAI JH1OBS JH1OCC JH1OES JH1OGC JH1OGT JH1OIB JH1OLB JH1OTZ JH1OVY JH1OYB JH1PCE JH1PXH JH1QDB JH1QDF JH1QMX JH1QQN JH1RDU JH1RFM JH1RFZ JH1RGG JH1RLT JH1RNI JH1RRP JH1RVQ JH1RZY JH1SAJ JH1SAR JH1SCZ JH1SJN JH1SJS JH1SOD JH1SUU JH1SZL JH1TAA JH1TCA JH1TFE JH1TMX JH1TXG/9 JH1UBK JH1UBX JH1URJ JH1URT JH1VHU JH1VIG JH1VIX JH1VOR JH1VRB JH1VRM JH1VUF JH1VWS JH1VZP JH1WFS JH1WHA JH1WHZ JH1WOY JH1WPX JH1WQV JH1WVJ JH1XEF JH1XJO JH1XUM JH1XUP JH1XUZ JH1XVE JH1XYB JH1YAK JH1YNY JH2AHZ JH2BAX JH2BTM JH2BUF JH2CMH JH2DFJ JH2FNN JH2FXK JH2GZY JH2HUQ JH2IQJ JH2JCT JH2JFM JH2JNU JH2KKW JH2LMH JH2LTL JH2LYU JH2MYN JH2NZS JH2OFJ JH2OMM JH2PWY JH2RMU JH2SON JH2UPE JH2UVB JH2UVB/2 JH2WGI JH2XQY JH3AIU JH3BYX JH3CTQ JH3CUL JH3DAA JH3DMQ JH3EBR JH3EDG JH3EQP JH3FCF JH3FGI JH3FUK JH3GCN JH3GFA JH3GMI JH3HGI JH3IEG JH3JJS/1 JH3JUB JH3KAI JH3KCW JH3KHS JH3LCX JH3MHI JH3OHO JH3OXM JH3PAS JH3PRR JH3PTC JH3QAX JH3QFY JH3QMF JH3SIF JH3TCC JH3WKE JH3XVQ JH4AAG JH4ADK JH4ADV JH4BTI JH4CES JH4CFK JH4CHV JH4CPC JH4DIT JH4EYD JH4FUF JH4GJR JH4GLG JH4IFF JH4JNG JH4OQF JH4PHW JH4PUL/3 JH4PUS JH4RUF JH4SZY JH4UTP JH4UYB JH5ATF JH5AVM JH5FIX JH5FTY JH5FXP JH5HDA JH5IRT JH5KAC JH5KDL JH5MXB JH5OWN JH6AUS JH6DUI JH6FTJ JH6GYD/1 JH6HKK JH6QFJ JH6QIL JH6RON JH6RTO JH6RVI JH6SCA JH6SHL JH6UNQ JH6WDG JH6WHN JH6ZHV JH7AFR JH7BDS JH7BKN JH7BMF JH7BVH JH7CFX JH7CUO JH7CVM JH7DMH JH7DUM JH7FMJ JH7FNM JH7FUJ JH7GLT JH7HNM JH7IAJ JH7IMX JH7IQQ JH7IRM JH7IXX JH7JUO JH7MQD JH7NXV JH7OHS JH7OUW JH7OYV JH7QXJ JH7RTQ JH7RXU JH7RXY JH7SSJ JH7UCD JH7UFT JH7UJU JH7VHZ JH7WNV JH7WQX JH7XGN JH7XMO JH7XVB JH8ASO JH8BAK JH8BKP JH8BOE JH8CLC/7 JH8CXW JH8DBI JH8DBJ JH8DHV JH8EJA JH8FIH JH8FOR JH8GEU JH8HWA JH8JLI/1 JH8JYV JH8KIY JH8KYU/1 JH8OCV JH8PNE/1 JH8QLP JH8RNY JH8RXM JH8SGR JH8SIT JH8SLS JH8TRY JH8XVH JH8YOH JH9AUB JH9CEN JH9DRL/2 JH9FCP JH9JFH JH9KVF JH9MBQ JH9UDI JH9URT JI0WVQ JI1ALP JI1ANI JI1ANL JI1AQY JI1AVY JI1BBN JI1BDQ JI1BJB JI1BNU JI1BXD JI1CNA JI1CPN JI1DCW JI1DSU JI1DUV JI1EOY JI1ETU JI1FLB JI1FOE JI1FXS JI1HAC JI1HFJ JI1HNC JI1HSV JI1ICF JI1KLL JI1KOA JI1KSL JI1KXL JI1LAI JI1LAT JI1LET JI1LNR JI1NIK JI1NZA JI1OII JI1PBK JI1PUC JI1QNM JI1RAK JI1RFB JI1RNB JI1RSF JI1RXQ JI1TBA JI1TBQ JI1TEW JI1TSH JI1TYA JI1VAH JI1WGL JI2EQL JI2FYR JI2GZC JI2HVT JI2IWB JI2IXA JI2KLU JI2NFF JI2TKX JI2UPG JI2XTS JI2ZEY JI2ZJS JI3BFC JI3CJO JI3CJP JI3CWI JI3DST JI3FLA JI3FSI JI3KDH JI3KHV JI3KZD JI3MJK JI3NST JI3WMK JI4HKA JI4UEN JI4WAO JI4WHS JI5NWQ JI5SKS JI6OXK JI7GYU JI7RRS JI7UUO JI8BRZ JI8NBJ JI8XBG JJ0AEB JJ0JML JJ0KRD JJ0NCC JJ0NSL JJ0PER JJ0PJD JJ1AZX JJ1BEA JJ1CBY JJ1CHU JJ1CKN JJ1CZR JJ1ENZ JJ1EPE JJ1ERF JJ1IDW JJ1IYE JJ1KZZ JJ1LBJ JJ1LWA JJ1LZE JJ1NDP JJ1NYH JJ1NYW JJ1PLS JJ1QLT JJ1RDX JJ1RXC JJ1RZG JJ1SLW JJ1TEA JJ1VFE JJ1VJB JJ1VRO JJ1VTE JJ1WWL JJ1XQU JJ1YAF JJ1ZEJ JJ2CJB JJ2DWL JJ2HCM JJ2ICA JJ2IJU JJ2LPV JJ2ONH JJ2PIK JJ2QWN JJ2QXI JJ2SQJ JJ2VLY JJ2YDV JJ2YKZ JJ2YNR JJ2YRE JJ3DJS/8 JJ3DKQ JJ3JJL JJ3KTW JJ3PRT JJ3TBB/3 JJ4CDW JJ4RAG JJ5GMJ JJ5GSY JJ5HUD JJ5IYC JJ5LLP JJ5NHJ JJ6CRH JJ7GCL JJ7PMS JJ7RMS JJ7SRA JJ8DEN JJ8HGA JK1APY/1 JK1BII JK1BSU JK1DHX JK1ECD JK1EXO JK1FFB JK1FNL JK1FUP JK1GKG JK1HCE JK1HIX JK1IQK JK1JUI JK1JXB JK1KSB JK1LSE JK1LUY JK1MZT JK1NAF JK1NJH JK1NSR JK1OLT JK1OPL JK1OXU JK1QAY JK1SQJ JK1TCV JK1THE JK1THF JK1UNZ JK1UVL JK1VMC JK1WSH JK1WXM JK1XDB JK1XMP JK1YMM JK2AQT JK2EIJ/0 JK2JMC JK2KVV JK2NNF JK2RCP JK2TTP JK2VOC JK2XXK JK3HFN JK3JTJ JK3NSD JK3RHX JK3TJM JK3UQF JK4KSD JK6BQQ JK6CSW JK6SEW JK7CJM JK7DWD JK7LXU JK7QJK JK7RKF JK7UST JK8CEE JK8PBO JK8USI JL1AGH JL1BDI JL1DCA JL1DLQ JL1EDB JL1EEI JL1EGW JL1EHU JL1ELQ JL1EUP JL1HOV JL1IEO JL1IHE JL1IVG JL1JJD JL1KBS JL1KLK JL1LNC JL1LOF/1 JL1MJD JL1MTY JL1MUT JL1MWY JL1MYP JL1NIE JL1NMB JL1OHO JL1QDO JL1QOC JL1QQA JL1RUC JL1RXW JL1SAM JL1TJM JL1UTS JL1VFZ JL1VWL JL1WPQ JL1XMN JL2GSN JL2KEQ JL2LPX JL2XMW JL3CEY JL3CRS JL3DQX JL3JRY JL3JTD JL3MCM JL3PPN JL3RDC JL3RNZ JL3SZP JL3VUL JL3VUL/3 JL4ENS JL6USD JL7CTR JL7MGJ JL7SNM JL8BEL JL8MBF JL8TZJ JL8TZJ/5 JL8XSO JM1AHX JM1ATF JM1BKZ JM1CMA JM1DPL JM1DSC JM1EKM JM1ESG JM1FHL JM1FUW JM1GAW JM1HWV JM1IQX JM1KLO JM1KNI JM1LAW JM1LPN JM1LRA JM1LRQ JM1LWY JM1MTE JM1NKT JM1NZJ JM1SBU JM1SMY JM1SZY JM1TUY JM1UTT JM1UWB JM1VDM JM1XCW JM1XTB JM2LEI JM2LHB JM2QWQ JM2SVG JM3ERL JM3QIS JM3QML JM3ROY JM3UGA JM3UJJ JM4AHN JM4WUZ JM6EXB JM7EJW JM7OLW JM7SKE JM7UBI JM8BGQ JM8EUX JM8FEI JN1ATL JN1BBO JN1BMX JN1CJS JN1DNV JN1ECL JN1GTG JN1IDY JN1JYD JN1MSO JN1NBU JN1NDY JN1NOP JN1RFY JN1RQV JN1RVS JN1SPR JN1THL JN1VFF JN2AMD JN2GPQ JN2NOJ JN2OWE JN3DMJ JN3DRB JN3DSH JN3IWQ JN3KST JN3LQP JN3ONX JN3SAC JN3TMW JN3TRK JN3TSY JN3WPH JN4FNZ JN4MCL/2 JN4MMO JN4UUS JN6EPA JN7FAH JN7IIR JN7KRH JN7TAN JO01FO JO1ABS JO1AEC JO1AXN JO1COV JO1CTH JO1DGE JO1DZA JO1HQC JO1JKH JO1KVS JO1QNO JO1RUQ JO1SIM JO1WIZ JO1WKO JO1WXO JO2FBV JO3AGQ JO3DDD JO3FKS JO3FNR JO3GAH JO3IEE JO3JIS JO3JYE JO3PSJ JO3QVT JO3SLK JO4BOW JO4CBO JO4CFV JO4CYX JO4DIO JO7BTV JO7GVC JO7KMB JO7RAA JO7WXN JP1AEG JP1DJV JP1EYX JP1FOS JP1GVC JP1HDK JP1HUJ JP1IMA JP1IXV JP1KSI JP1LJH JP1LRT JP1LVI JP1NDO JP1QDH JP1SCQ JP1SPV JP1SRG JP1TRJ JP1TVC JP3ASW JP3AWA JP3AYQ JP3AZM JP3AZZ JP3BEE JP3DOJ JP3EXE JP3JDL JP3KPJ JP3MFV JP6NWR JP6OGP JP7BCL JP7DKQ JP7EIP JP7FSO JP7GRU JQ1ABC JQ1ARQ JQ1BVI JQ1CIV JQ1COB JQ1DPP JQ1HYB JQ1KVH JQ1LPT JQ1NGT JQ1PCT JQ1PMQ JQ1QGM JQ1QKK JQ1RKI JQ1TAR JQ1TIV JQ1VDJ JQ1WYU JQ2GYU JQ2IQW JQ2OUL JQ2VTH JQ3PPC JQ3TAN JQ3UDL JQ6CWL JQ6QNQ JR0AMD JR0BNF JR0BQD JR0BUL JR0DZH JR0ETA JR0GFM JR0GVW JR0GXA JR0WZR JR1AIA JR1AKD JR1AMR JR1AQI JR1ARK JR1AUK JR1BAS JR1BFZ/2 JR1BLX JR1BTG JR1BVP JR1CAD JR1CBC JR1CCT JR1CHR JR1CJD JR1CVU JR1DUP JR1DVB JR1EEU JR1EMO JR1EMT JR1ERU JR1FBX JR1FSX JR1GCN JR1GFX JR1GJP JR1GSE JR1IJV JR1IZM JR1JCB JR1JGA JR1JUR JR1JYR JR1KBJ JR1KEI JR1KQU JR1LEV JR1LFT JR1LLD JR1LZK JR1MEG/1 JR1MEU JR1MQT JR1MRG JR1MTS JR1NHD JR1NHI JR1NKN JR1QBA JR1SLU JR1TMP JR1TNP JR1UBR JR1UFN JR1VAY JR1VJH JR1WCT JR1WJM JR1WYW JR1YRI JR1ZTT JR2AWS JR2BCF JR2BEI JR2BOF JR2BYJ JR2DOL JR2ECF JR2EKD JR2FJC JR2FJX JR2FVC JR2GRX JR2HVW JR2IOB JR2MCN JR2MIN JR2MIO JR2MIO/2 JR2NMA JR2NMJ JR2NTC/2 JR2PAU JR2PMT JR2SBA JR2SCJ JR2SCZ JR2TDB JR2TRC JR2TTS JR2TZJ JR2UBS JR2UJT JR2UTT JR2VZP JR2WLQ JR2WYD JR2XWR JR3AAZ JR3BOT JR3BWF JR3EOI JR3FYM JR3GIY JR3GPP JR3HZW JR3IIR JR3IXB JR3JFZ JR3JRI JR3KQJ JR3LSE JR3NDM JR3NZC JR3QHQ JR3RIU JR3RIY JR3RWB JR3TOE JR3UIC JR3WGU JR3XEX JR3XUH JR4CTF JR4CZM JR4DAH JR4DHK JR4GPA JR4ISF/3 JR4LRY JR4NMV JR4OZR JR4PMW JR4PMX/1 JR4VEV JR4XME JR5IAH JR5JAQ JR5XPG JR5YCE JR6AG JR6CSY JR6DM JR6ENI JR6EZE JR6FC JR6FRV JR6GIM JR6HK JR6HMJ/1 JR6PQD JR6RLV JR6VDU JR7AMZ JR7ANB JR7AQL JR7ASO JR7CJS JR7COH JR7COP JR7DUT JR7FFN JR7FNT JR7FRW JR7FTO JR7FVO JR7GBL JR7IWC JR7IWL JR7JRI JR7NFW JR7NXM JR7OEF JR7QKH JR7RZK JR7TEQ JR7UOL JR7XKN JR8AMF JR8BMW/1 JR8BRK JR8ECU JR8FNO JR8NOD JR8ORC JR8QFG JR8QVT/1 JR8SUB JR8VSE JR8XXQ JR8YLW JR9CPT JR9GMS JR9HEL JR9NVB JS1BXH JS1IFK JS1KKY JS1KQQ JS1MBH JS1MZV JS1NDM JS1OHI JS1OYN JS1PDC JS2KHM JS3CGH JS3CTF JS3CTQ JS3IKM JS3LSQ JS3OSI JS3QWI JS3UDR JS6RTJ JS6SRY JS6SUP JS6TMW JS6TSE JT1AA JT1BV JT1CD JT1CO JT1CS JT1PB JT5DX JT5LZ JU1DX JU1WP JW2US JW5E JW6VDA JW7QIA JY9FC K0ABA K0ACP K0AD K0ADZ K0AE K0AL K0ALT K0AMA K0ANS K0AOZ K0AP K0APR K0APT K0ARA K0ARS K0ARY K0ATC K0ATZ K0AU K0AV K0AVI K0AWU K0BAK K0BBB K0BBC K0BD K0BFT K0BIU K0BJ K0BLT K0BQB K0BRO K0BUD K0BWQ K0BX K0CCM K0CD K0CF K0CL K0CMH K0CN K0COM K0CQ K0CRF K0CS K0DAJ K0DD K0DDD K0DEQ K0DI K0DJO K0DK K0DLJ K0DLW K0DNG K0DPT K0DQ K0DRA K0DSL K0DTJ K0DU K0DVY K0EA K0ECN K0EJ K0ELS K0EOO K0EOU K0ESE K0EU K0EV K0EVZ K0EWS K0FBV K0FD K0FG K0FHG K0FJ K0FJW K0FLY K0FRY K0FS K0FVF K0FW K0FX K0FY K0GEO K0GGM K0GK K0GLT K0GMO K0GND K0GU K0GUG K0GUR K0GUZ K0GWR K0GXI K0GZL K0HAS K0HAY K0HB K0HC K0HCV K0HMZ K0HNC K0HPR K0HS K0HT K0HUU K0HVR K0HX K0IDX K0IKZ K0IL K0IMP K0INR K0IO K0IP K0IR K0IS K0ITC K0IUC K0IUZ K0IVK K0IZI K0JA K0JE K0JEM K0JJ K0JJL K0JJM K0JJR K0JPL K0JSC K0JUH K0JV K0JVX K0KAN K0KB K0KE K0KEV K0KL K0KME K0KPH K0KR K0KT K0KX K0LAF K0LB K0LDS K0LG K0LIR K0LPR K0LTC K0LUM K0LUZ K0LW K0MAJ K0MAN K0MD K0MDJ K0MF K0MGA K0MHP K0MIS K0MLD K0MN K0MP K0MPH K0MS K0MT K0MV K0MZN K0NA K0NE K0NEB K0NJR K0NM K0NR K0NW K0NZ K0OB K0OE K0OI K0OK K0OM K0OMH K0OO K0OSW K0OU K0OWG K0OY K0PB K0PC K0PFV K0PFX K0PFZ K0PG K0PGE K0PH K0PIR K0PJ K0PK K0PMO K0PPY K0PV K0PY K0QB K0QC K0QL K0QMU K0QQ K0QU K0RA K0RAL K0RC K0RCJ K0RDS K0RF K0RGR K0RI K0RJW K0RK K0RN K0RON K0RS K0RVB K0SAZ K0SBV K0SCO K0SDW K0SF K0SIP K0SIX K0SJ K0SM/VE3 K0SMK K0SN K0SN/7 K0SQ K0SR K0SRL K0STH K0STK K0STP K0SV K0SW K0SX K0SZ K0TAZ K0TC K0TG K0THN K0TI K0TIV K0TLG K0TNT K0TO K0TOT K0TPP K0TQ K0TRL K0TT K0TVD K0TW K0UA K0UAS K0UD K0UH K0UIF K0UK K0UM K0USA K0VBU K0VC K0VG K0VH K0VK K0VM K0VOZ K0VR K0VRC K0VVX K0VVY K0VXU K0WA K0WB K0WDM K0WPM K0XB K0XD K0XG K0XU K0XY K0YB K0YCR K0YES K0YLE K0YQ K0YQX K0YR K0YRG K0YW K0YY K0ZL K0ZN K0ZR K0ZRK K0ZS K0ZUB K0ZX K1AC K1AJ K1APJ K1AQB K1AR K1ARO K1ARR K1AUS K1AVM K1AY K1BAA K1BG K1BO K1BU K1BUK K1BV K1BW K1BX K1BZ K1BZM K1CAL K1CC K1CCN K1CCS K1CL K1CN K1CPJ K1CSA K1CSP K1CX K1DAT K1DBM K1DBO K1DC K1DCT K1DD K1DDN K1DEC K1DFT K1DG K1DJ K1DLM K1DM K1DQV K1DRV K1DSK K1DSW K1DT K1DTW K1DW K1DX K1DXA K1EA K1EAR K1EBU K1EBY K1ECU K1EEE K1EFI K1EIC K1EO K1EP K1ESE K1EZ K1FBI K1FE K1FFX K1FM K1FQL K1FR K1FUG K1FXY K1FZ K1GE K1GG K1GGI K1GHC K1GJQ K1GJY K1GMM K1GND K1GQ K1GU K1GU/4 K1GUP K1GX K1HC K1HG K1HI K1HT K1HTJ K1HTV K1HV K1HZ K1IB K1IEB K1IED K1IFJ K1IG K1IIG K1IMI K1ING K1IR K1IX K1IZ K1JB K1JD K1JDL K1JHS K1JOG K1JRF K1JSM K1JTF K1JX K1KA K1KAV K1KD K1KDG K1KDX K1KG K1KI K1KNQ K1KP K1KQC K1KRN K1KS K1KU K1KX K1KXN K1LB K1LD K1LDO K1LEE K1LEM K1LGM K1LGQ K1LHO K1LI K1LK K1LKP K1LKR K1LOG K1LOL K1LT K1LTJ K1LU K1LYP K1LZ K1MAA K1MAZ K1MBF K1MC K1MD K1MF K1MHZ K1MIJ K1MIX K1MK K1MO K1MQ K1MR K1MTD K1MVM K1MVY K1NA K1ND K1NMF K1NR K1NS K1NSS K1NTR K1NU K1NV K1NY K1NZ K1OA K1OL K1OR K1OT K1OU K1OYQ K1PAD K1PAM K1PDY K1PH K1PJR K1PL K1PLL K1PQS K1PS K1PT K1PTF K1PU K1PX K1PY K1QO K1QQ K1QR K1QT K1QVX K1QX K1RA K1RAX K1RCT K1RGO K1RH K1RI K1RID K1RK K1RM K1RO K1ROA K1RQ K1RR K1RU K1RV K1RX K1RZ K1SCE K1SD K1SE K1SEC K1SEZ K1SFA K1SIG K1SIX K1SLB K1SM K1SND K1SO K1SUB K1SUU K1SV K1SW K1SWL K1SX K1SXD K1TA K1TB K1TEO K1TGX K1TH K1TKL K1TLA K1TM K1TN K1TN/4 K1TO K1TOL K1TR K1TSW K1TTT K1TU K1TW K1TXS K1UO K1UR K1USA K1USN K1UU K1VC K1VDF K1VI K1VK K1VLB K1VMT K1VO K1VOI K1VR K1VRF K1VSJ K1VT K1VUT K1VV K1VWQ K1WA K1WB K1WCC K1WDY K1WGM K1WHS K1WHY K1WJL K1WN K1WTF K1WW K1WY K1XE K1XFC K1XJ K1XM K1XS K1XT K1XX K1YA K1YAG K1YR K1YT K1YTG K1YWW K1ZD K1ZE K1ZG K1ZK K1ZM K1ZN K1ZO K1ZPZ K1ZR K1ZW K1ZZ K2AA K2AA/100 K2ACB K2ADA K2AE K2AF K2AKA K2AL K2AL/1 K2AMI K2AN K2ANT K2AR K2ARM K2AS K2ATY K2ATZ K2AU K2AUW K2AV K2AVX K2AX K2AZ K2BAR K2BB K2BCM K2BIO K2BLC K2BMI K2BOG K2BX K2CAF K2CBI K2CC K2CD K2CDX K2CF K2CGH K2CIB K2CJ K2CM K2CPR K2CQW K2CS K2CT K2CTR K2CUB K2CX K2CYE K2CYS K2DAR K2DB K2DBK K2DEG K2DF K2DFC K2DFE K2DH K2DI K2DJN K2DLS K2DM K2DMG K2DP K2DRH K2DSL K2DSW K2DSW/0 K2DT K2DUX K2DV K2DXN K2EDW K2EEF K2EK K2EP K2EQ K2ERG K2EY K2EYS K2EZ K2FEO K2FF K2FI K2FL K2FN K2FOC K2FTP K2GAV K2GG K2GJJ K2GLS K2GLW K2GMT K2GMY K2GT K2GTC K2GV K2HA K2HAT K2HF K2HIG K2HL K2HT K2HVN K2HYD K2HZN K2HZO K2IL K2ITT K2IVS K2IXQ K2IY K2IZ K2JAY K2JB K2JF K2JJF K2JJI K2JK K2JMY K2JNC K2JPV K2JT K2JVB K2JVX K2JX K2JYV K2KA K2KGJ K2KIB K2KMC K2KP K2KQ K2KR K2KU K2LAX K2LCK K2LE K2LE/1 K2LEH K2LH K2LIM K2LLC K2LML K2LNS K2LP K2LS K2LTE K2LYV K2MA K2MD K2MF K2MFF K2MFR K2MFW K2MFY K2MGR K2MIJ K2MIK K2MK K2MLB K2MME K2MMO K2MMW K2MP K2MQJ K2MRK K2MTG K2MV K2NA K2NEO K2NG K2NJ K2NNY K2NP K2NPN K2NRA K2NV K2NV/VE3 K2NYG K2OEQ K2OF K2OID K2OO K2OQA K2OS K2PAA K2PF K2PH K2PI K2PK K2PLF K2PM K2PMC K2PO K2PO/7 K2PS K2PUT K2PW K2QB K2QBN K2QD K2QL K2QMF K2QO K2QPN K2QQ K2QS K2QU K2QWK K2QY K2QZR K2RAS K2RB K2RD K2RET K2RK K2RKD K2RNY K2RP K2RPC K2RPM K2RR K2RRB K2RRM K2RRV K2RU K2RWF K2RYD K2SAN K2SD K2SDS K2SE K2SFS K2SG K2SGH K2SHA K2SHZ K2SI K2SIX K2SJ K2SJB K2SLZ K2SM K2SOG K2SQS K2SSB K2SSS K2STO K2SX K2TB K2TD K2TE K2TER K2TGW K2TO K2TOP K2TQC K2TRD K2TS K2TT K2TTM K2TTP K2TTT K2TV K2TW K2TWI K2TZ K2TZY K2UA K2UF K2UFT K2UM K2UNI K2UNK K2UO K2UQT K2UR K2USA K2USN K2UU K2UV K2UYK K2VHW K2VI K2VN K2VS K2VUI K2VV K2WDF K2WG K2WJ K2WJL K2WK K2WNW K2WOP K2WPM K2WR K2WW K2XA K2XE K2XF K2XN K2XR K2XT K2XX K2YAZ K2YG K2YGM K2YNY K2YR K2YWE K2YY K2YY/6 K2YYZ K2ZBA K2ZC K2ZD K2ZF K2ZJ K2ZL K2ZR K2ZR/4 K2ZSD K2ZV K2ZWI K2ZZ K3AE K3AIR K3AJ K3ALE K3AQ K3ASW K3ATO K3AU K3BBB K3BFA K3BFQ K3BHX K3BLN K3BM K3BR K3BSA K3BVQ K3BYU K3BZ K3CCR K3CIA K3CKA K3CLT K3CNH K3CR K3CS K3CT K3CWF K3DBG K3DCW K3DE K3DMG K3DMG/P4 K3DMH K3DNE K3DOS K3DQB K3DW K3DWC K3DY K3EDP K3EEI K3EJJ K3EKQ K3EL K3ENT K3EP K3EQ K3EST K3ET K3EW K3EWZ K3FAZ K3FGO K3FH K3FI K3FK K3FLY K3FM K3FMQ K3FP K3GC K3GDS K3GEV K3GHH K3GHH/2 K3GLS K3GNC K3GP K3GS K3GTS K3GTX K3GW K3GWK K3HCR K3HR K3HSK K3HVT K3HW K3HX K3IE K3II K3ILC K3IP K3IPK K3IPM K3IR K3IRV K3ISH K3IT K3IU K3IVN K3JAE K3JAG K3JD K3JGJ K3JHT K3JJG K3JJJ K3JL K3JLM K3JPT K3JPW K3JRR K3JRZ K3JT K3JWI K3JZD K3KGX K3KGX/8 K3KKH K3KN K3KNL K3KO K3KQ K3KU K3KWB K3KYR K3LA K3LAB K3LB K3LEA K3LID K3LKS K3LL K3LNZ K3LP K3LR K3LR/VE3 K3LRH K3LSY K3LT K3LU K3LUE K3LV K3MA K3MAW K3MD K3MD/1 K3MDX K3MEC K3MF K3MJW K3MKZ K3MM K3MOT K3MOV K3MRK K3MSB K3MYI K3MZ K3NC K3ND K3NDM K3NF K3NG K3NGV K3NK K3NM K3NP K3NQ K3NR K3NRX K3NUI K3NXH K3OA K3OD K3ODX K3OIL K3OJK K3OK K3ONW K3OO K3OQ K3OQF K3ORC K3ORS K3OWX K3OX K3OXL K3OZB K3PA K3PG K3PH K3PIN K3PMC K3PP K3PRC K3QC K3QF K3QIA K3QID K3QQN K3QY K3RA K3RCC K3RF K3RG K3RH K3RJG K3RJR K3RL K3RMB K3RN K3RON K3RR K3RSJ K3RU K3RUQ K3RV K3RWL K3RWN K3RWN/4 K3RY K3RYA K3SAE K3SEN K3SEW K3SF K3SFS K3SGE K3SI K3SOM K3STX K3SU K3SUI K3SV K3SW K3SWZ K3SX K3SXA K3TBD K3TC K3TCE K3TCO K3TD K3TEJ K3TIM K3TM K3TN K3TUF K3TW K3TWL K3TX K3TXW K3TYL K3UA K3UG K3UGI K3UHU K3UK K3UL K3UN K3UR K3URT K3USC K3UU K3UW K3VA K3VAR K3VAT K3VED K3VIG K3VJ K3VN K3VO K3VOX K3VPZ K3VW K3VX K3VYY K3VZ K3WA K3WA/9 K3WF K3WGR K3WI K3WJV K3WKJ K3WR K3WRK K3WT K3WTT K3WU K3WW K3WWP K3WWT K3WYC K3XA K3XO K3XR K3XT K3YBN K3YDX K3YEO K3YGX K3YH K3YNY K3YP K3YT K3YTL K3ZA K3ZCY K3ZD K3ZGA K3ZJ K3ZK K3ZM K3ZMJ K3ZO K3ZU K3ZV K3ZXL K3ZYK K3ZZ K4/RU4W K4AAP K4AB K4ABB K4ADB K4ADR K4AEN K4AFE K4AFR K4AHO K4AKK K4ALE K4AMA K4AMC K4AMQ K4AOA K4AOR K4AP K4AR K4ARC K4ARE K4ARI K4ARQ K4ATA K4AUX K4AVF K4AVU K4AVX K4AWM K4BAD K4BAI K4BB K4BBA K4BBH K4BBK K4BC K4BDJ K4BDL K4BDN K4BFT K4BGV K4BK K4BLL K4BLP K4BM K4BNC K4BRI K4BSK K4BT K4BTA K4BTC K4BX K4BXX K4BYN K4BYT K4CA K4CAE K4CC K4CCK K4CEB K4CET K4CGA K4CGY K4CKB K4CKS K4CMC K4CME K4CML K4CMQ K4CMS K4CPO K4CQ K4CSA K4CUE K4CVL K4CWW K4DBK K4DDE K4DEQ K4DES K4DET K4DG K4DGJ K4DJ K4DJG K4DLE K4DMH K4DMR K4DP K4DS K4DSP K4DTR K4DWP K4DXV K4DY K4DZQ K4DZR K4EA K4ECD K4EDE K4EDI K4EET K4EG K4EIR K4EJ K4ELI K4ENC K4EOR K4EQ K4EU K4EWG K4EZS K4EZY K4FAC K4FAN K4FC K4FCG K4FD K4FDL K4FDP K4FF K4FHI K4FIT K4FJ K4FJU K4FJW K4FL K4FNG K4FOY K4FRT K4FS K4FT K4FTO K4FTP K4FTW K4FTY K4FW K4FXN K4FY K4FYM K4FZG K4GAA K4GG K4GHS K4GJF K4GK K4GM K4GMH K4GO K4GOP K4GRE K4GYD K4GZ K4HA K4HAL K4HC K4HDW K4HEB K4HG K4HGG K4HH K4HJZ K4HKE K4HMB K4HO K4HPP K4HPS K4HQK K4HR K4HTA K4HTO K4HUD K4HX K4HY K4HYJ K4IA K4ICQ K4IDD K4IE K4IHY K4II K4IIE K4INA K4IQJ K4ISV K4ITV K4IU K4IVF K4JAF K4JAZ K4JC K4JDF K4JGA K4JGR K4JJ K4JJW K4JKB K4JKL K4JLD K4JNM K4JO K4JP K4JPD K4JPN K4JQV K4JTA K4JVK K4JWA K4JWF K4JZQ K4KAY K4KCL K4KEW K4KFF K4KG K4KGG K4KGM K4KGT K4KKL K4KKP K4KMO K4KNN K4KR K4KRK K4KRW K4KSP K4KSR K4KSV K4KSW K4KXX K4KYB K4KZ K4KZE K4KZZ K4LDC K4LHE K4LIX K4LJG K4LKL K4LM K4LO K4LPQ K4LQ K4LRA K4LRG K4LRX K4LSK K4LT K4LTA K4LTE K4LW K4LWB K4LY K4MEF K4MF K4MI K4MIJ K4MIL K4ML K4MLD K4MM K4MMP K4MN K4MOA K4MPE K4MQ K4MQG K4MQM K4MR K4MS K4MSR K4MTI K4MV K4MWB K4MWM K4MX K4MY K4MZE K4NA K4NAB K4NAU K4NAX K4NC K4NGS K4NK K4NKT K4NM K4NNQ K4NO K4NPC K4NRA K4NRC K4NTO K4NUC K4NUQ K4NV K4NVA K4NVJ K4NWU K4NYI K4NYM K4OAQ K4ODL K4OGG K4OJ K4ONC K4ONS K4OO K4OP K4ORD K4OSO K4OTH K4OTV K4OV K4OWR K4OY K4PDM K4PDS K4PGM K4PI K4PJ K4PP K4PPK K4PV K4PVJ K4PZC K4QD K4QE K4QFM K4QL K4QPL K4QS K4QXX K4QZB K4RB/6 K4RC K4RCA K4RCG K4RCM K4RDU K4REB K4RES K4RFT K4RGK K4RGR K4RHB K4RIK K4RIP K4RLC K4RLO K4RM K4RNV K4RO K4RPD K4RTE K4RU K4RUM K4RV K4RW K4SAG K4SAV K4SAW K4SBZ K4SE K4SEK K4SGR K4SIR K4SN K4SO K4SPA K4SPE K4SPO K4SQC K4SQL K4SR K4ST K4SUE K4SV K4SWE K4SWJ K4SX K4SXT K4TB K4TCG K4TEA K4TG K4TJA K4TJF K4TK K4TKT K4TLH K4TMC K4TNN K4TNX K4TO K4TR K4TRH K4TS K4TXI K4TXJ K4TXL K4TXX K4TZ K4UB K4UEE K4UI K4UN K4UPI K4UQ K4US K4USV K4UTE K4UTI K4UU K4UX K4UY K4VBM K4VCU K4VD K4VGL K4VHL K4VIG K4VMO K4VO K4VOZ K4VRC K4VRP K4VRT K4VSK K4VUQ K4VVM K4WA K4WAK K4WC K4WCF K4WDR K4WES K4WG K4WHM K4WI K4WIP K4WLG K4WLS K4WMS K4WOP K4WPC K4WQ K4WRZ K4WS K4WSU K4WTR K4WW K4WY K4XD K4XF K4XG K4XI K4XL K4XP K4XR K4XU K4XY K4YA K4YCR K4YEH K4YFH K4YFR K4YJ K4YKZ K4YMQ K4YND K4YOW K4YT K4YTZ K4YYL K4YYM K4ZA K4ZDH K4ZGB K4ZGV K4ZHM K4ZIN K4ZQ K4ZRJ K4ZRP K4ZVL K4ZW K4ZZM K5AAD K5AB K5ACL K5ACO K5AF K5AM K5AND K5APL K5AQ K5AUP K5AV K5AVY K5AWF K5AX K5AXZ K5BAH K5BCN K5BG K5BIO K5BIU K5BKW K5BOD K5BTK K5BY K5BZH K5BZI K5CAO K5CCG K5CD K5CGH K5CI K5CJL K5CKS K5CM K5COW K5DB K5DBF K5DC K5DD K5DGY K5DH K5DHY K5DL K5DNA K5DNC K5DSM K5DU K5DWI K5DX K5ECI K5EDI K5EDM K5EEE K5EEP K5EFH K5EK K5ELF K5EM K5EMI K5EMU K5EOK K5ER K5ERP K5ESW K5EW K5EWJ K5EWS K5FA K5FAB K5FD K5FG K5FNQ K5FO K5FP K5FR K5FUV K5FVO K5FXB K5FZ K5GA K5GAT K5GDX K5GJ K5GJQ K5GKC K5GM K5GN K5GO K5GQ K5GSF K5GVP K5GWO K5GZR K5HAB K5HDU K5HDV K5HDX K5HGX K5HK K5HLZ K5HM K5HP K5HTB K5HTE K5HX K5IB K5ICW K5IID K5IJ K5IMC K5IS K5IT K5ITO K5IX K5IZO K5JAE K5JC K5JDB K5JEF K5JEP K5JK K5JMB K5JPB K5JPS K5JRW K5JTH K5JYD K5KBA K5KC K5KDG K5KDX K5KEN K5KG K5KJ K5KLA K5KM K5KMD K5KND K5KPE K5KQ K5KRM K5KT K5KTD K5KU K5KUA K5KUA/5 K5KV K5LAD K5LC K5LDA K5LG K5LGP K5LGX K5LH K5LJ K5LLA K5LN K5LOL K5LRW K5LSU K5LU K5LXK K5LXP K5LXY K5LY K5LZP K5MBA K5MDX K5ME K5MFP K5MGB K5MGO K5MH K5ML K5MLE K5MLY K5MM K5MO K5MPK K5MQ K5MR K5MUG K5MV K5MVP K5MXG K5NA K5NB K5NCW K5ND K5NMT K5NOF K5NOK K5NON K5NOV K5NOW K5NV K5NZ K5OA K5OAI K5ODZ K5OLV K5OO K5OX K5OY K5PA K5PDC K5PHB K5PI K5PMK K5PN K5PQ K5PX K5PXP K5QE K5QEA K5QPO K5QR K5QW K5QXJ K5QY K5RA K5RAR K5RCR K5RCS K5RES K5RHD K5RHZ K5RJ K5RLN K5RM K5RMJ K5ROE K5RPM K5RR K5RRD K5RT K5RWB K5RWD K5RX K5RZA K5SBR K5SGE K5SHT K5SI K5SM K5SMH K5SNA K5SPJ K5SPP K5SRT K5SS K5SSR K5STR K5SVV K5TA K5TBA K5TCD K5TCJ K5TDW K5TED K5TEE K5TER K5TF K5TGS K5TIA K5TLJ K5TMH K5TMT K5TO K5TQ K5TR K5TRI K5TRI/7 K5TRM K5TSK K5TU K5TW K5TXM K5TXT K5TXU K5TYR K5UA K5UI K5UR K5URU K5UTD K5UUT K5UV K5UZ K5VGS K5VI K5VIP K5VJZ K5VL K5VOP K5VP K5VR K5VUU K5VV K5VWW K5VYT K5VZD K5WA K5WAF K5WBM K5WDW K5WE K5WG K5WI K5WK K5WL K5WLT K5WNH K5WO K5WP K5WQG K5WSW K5WTS K5WW K5WWT K5WX K5WZ K5XH K5XI K5XK K5XQ K5XR K5XS K5XU K5XYL K5YAA K5YAB K5YDR K5YG K5YM K5YQF K5YS K5YVY K5YZ K5ZD K5ZE K5ZG K5ZM K5ZMR K5ZO K5ZQ K5ZX K5ZZR K6AA K6AAB K6AAM K6AAN K6AAW K6AF K6AJA K6AKR K6AM K6ANP K6AQL K6AR K6ARP K6ATZ K6AW K6BCT K6BEW K6BF K6BFL K6BHH K6BIG K6BIR K6BV K6BY K6BZS K6BZZ K6CCR K6CEL K6CMG K6CQP K6CRC K6CSH K6CSL K6CTA K6CTW K6CW K6CY K6CZH K6DBX K6DDJ K6DDS K6DF K6DGQ K6DGW K6DJ K6DLB K6DMZ K6DN K6DSW K6DTT K6DTX K6DWI K6DXX K6EE K6EEP K6EGF K6EI K6EID K6EIE K6EL K6ELE K6EM K6ERT K6ESS K6ETA K6ETM K6EU K6EVR K6EZ K6FC K6FEU K6FG K6FI K6FWT K6GCN K6GDP K6GFJ K6GGO K6GHA K6GRD K6GT K6GVG K6GZ K6HES K6HGF K6HL K6HP K6HR K6HRT K6HRU K6HXB K6ICS K6III K6IJ K6INM K6IPV K6IR K6IRP K6IT K6IVX K6JAT K6JBH K6JCA K6JDC K6JEB K6JEY K6JF K6JHD K6JHX K6JJ K6JJJ K6JJR K6JL K6JMO K6JMQ K6JR K6JRO K6JS K6JTA K6JX K6KAL K6KHB K6KII K6KLY K6KMH K6KN K6KNS K6KO K6KQV K6KR K6KR/7 K6KS K6KWI K6KZM K6LA K6LE K6LER K6LEW K6LG K6LH K6LHE K6LIE K6LJ K6LJC K6LL K6LPO K6LQP K6LR K6LRG K6LRN K6LSJ K6LZ K6MAN K6MBD K6MCS K6ME K6MI K6MKF K6MKL K6ML K6MM K6MMM K6MMU K6MOX K6MR K6MTS K6MTU K6MUG K6MW K6MWK K6MXZ K6NA K6ND K6NLC K6NML K6NO K6NR K6NV K6OAK K6OGO K6OI K6OK K6OO K6OR K6ORJ K6OWS K6OY K6OZY K6PAD K6PBF K6PBQ K6PDL K6PER K6PFA K6PGH K6PJ K6PKT K6PLR K6PO K6PO/VE7 K6PSR K6PV K6PV/6 K6PVA K6QCB K6QD K6QK K6QQQ K6RAD K6RAH K6RB K6RBS K6RC K6RE K6REK K6RF K6RG K6RIG K6RIM K6RLA K6RLQ K6RM K6RNK K6RQT K6RR K6RTC K6RUV K6RV K6RWM K6SAL K6SBA K6SCA K6SDW K6SIK K6SOA K6SQL K6SRZ K6ST K6SU K6SY K6TA K6TD K6TDI K6TEC K6TER K6TIG K6TIM K6TJ K6TKD K6TKR K6TLR K6TOP K6TU K6TVE K6TVT K6UDA K6UF K6UFO K6UIP K6UJ K6UKK K6UM K6UN K6UNR K6URK K6USN K6UUW K6VCR K6VDP K6VDU K6VFR K6VGP K6VHF K6VMV K6VN K6VNX K6VO K6VRS K6VVA K6VVA/6 K6VWL K6VXI K6WDE K6WDE/KH6 K6WFV K6WG K6WSC K6WSC/6 K6WSC/7 K6WV K6XC K6XJ K6XM K6XN K6XT K6XV K6XX K6YEK K6YK K6YLG K6YOA K6YP K6YRA K6YT K6YUI K6YYL K6ZB K6ZED K6ZH K6ZI K6ZO K6ZQ K6ZY K6ZZ K6ZZD K7AAO K7ABC K7ABL K7ABP K7ABV K7ACZ K7ADD K7AF K7AHF K7AJM K7AMS K7ANE K7ANQ K7ANT K7AR K7ARJ K7ATK K7ATN K7AWB K7AZT K7AZW K7BFI K7BG K7BHM K7BNY K7BOA K7BPV K7BTW K7BUX K7BUY K7BV K7BVT K7BX K7CA K7CAH K7CAR K7CCC K7CF K7CJJ K7CS K7CW K7CY K7DAA K7DB K7DBN K7DD K7DF K7DJ K7DJ/6 K7DLX K7DPT K7DQH K7DR K7DRA K7DSE K7DSZ K7DXX K7EA K7EAN K7EAR K7EAZ K7EDX K7EG K7EIQ K7EK K7EKD K7EMI K7EMR K7EOS K7EPH K7ER K7ETE K7EUG K7EW K7FA K7FD K7FE K7FO K7FU K7FX K7FYI K7GA K7GI K7GJX K7GK K7GM K7GMX K7GO K7GQ K7GS K7GSB K7GSE K7GSL K7GT K7GZP K7HBN K7HD K7HI K7HIL K7HJE K7HKR K7HLN K7HP K7HPT K7HRT K7HV K7IA K7IAM K7IB K7ICE K7IDX K7IE K7IFT K7II K7INA K7IOA K7IOC K7IP K7IQO K7IR K7JA K7JA/6 K7JAN K7JDT K7JE K7JEO K7JF K7JFD K7JG K7JH K7JJ K7JKM K7JKZ K7JNA K7JNX K7JOE K7JPF K7JQ K7JR K7JSG K7KAD K7KAR K7KFB K7KFG K7KJH K7KMR K7KNM K7KPH K7KRZ K7KU K7KV K7KVH K7KY K7LDB K7LE K7LED K7LES K7LFY K7LLC K7LNP K7LOL K7LR K7LTV K7LV K7LVJ K7LW K7MAQ K7MCX K7MDH K7MF K7MGR K7MI K7MJF K7MK K7MKL K7MKL/0 K7MLN K7MM K7MO K7MOA K7MOA/4 K7MOK K7MRQ K7MRU K7MS K7MSO K7MTR K7MVT K7MWK K7MY K7MZ K7MZM K7NAA K7NCG K7NEW K7NG K7NJ K7NN K7NV K7NX K7OA K7OG K7OM K7OM/4 K7ON K7ONP K7OP K7ORG K7OVG K7OVM K7OVW K7OX K7PAC K7PEH K7PGL K7PI K7PIA K7PJT K7PPY K7PQ K7PRW K7PVV K7PWL K7PX K7QA K7QBO K7QDX K7QG K7QHN K7QHO K7QI K7QML K7QO K7QXG K7QYY K7RB K7RBT K7RC K7RE K7RF K7RFI K7RFW K7RI K7RJ K7RK K7RL K7RLD K7RLW K7RMJ K7RR K7RTM K7RVX K7RXC K7SCN K7SCX K7SD K7SEL K7SEN K7SF K7SI K7SID K7SJ/VE1 K7SKE K7SML K7SP K7SS K7STO K7SU K7SV K7TD K7TEH K7THM K7TJR K7TM K7TN K7TNX K7TQ K7TR K7TRF K7TYE K7UA K7UI K7UK K7ULS K7UM K7UOT K7UT K7VAP K7VAY K7VBG K7VIC K7VIT K7VK K7VNE K7VO K7VOA K7VU K7VZX K7WA K7WDA K7WFM K7WLX K7WP K7WXK K7XB K7XC K7XE K7XH K7XR K7XV K7XZ K7YCH K7YDL K7YK K7YMA K7YMG K7YUR K7ZA K7ZAD K7ZD K7ZG K7ZI K7ZO K7ZOO K7ZOV K7ZOX K7ZS K7ZSD/IT9 K7ZUM K7ZV K7ZX K7ZYV K8AAV K8AAX K8AB K8AC K8AEX K8AH K8AI K8AJA K8AJS K8AJX K8ALM K8ANM K8AO K8ARY K8ASS K8AVJ K8AZ K8BA K8BAT K8BBE K8BF K8BHS K8BKM K8BL K8BSW K8BTU K8BXQ K8BYP K8BZ K8CBC K8CC K8CCZ K8CI K8CIT K8CJ K8CJY K8CMO K8CN K8CPA K8CQ K8CR K8CV K8CX K8CXM K8DAA K8DC K8DE K8DID K8DIL K8DJC K8DJR K8DK K8DM K8DOC K8DR K8DSS K8DTB K8DTW K8DTX K8DV K8DZ K8EAW K8ED K8EEE K8EEN K8EET K8EG K8EHE K8EI K8EIJ K8EIO K8EMA K8EO K8EP K8ES K8ESQ K8EST K8ET K8EUR K8FB K8FC K8FF K8FH K8FL K8FP K8FU K8GC K8GDT K8GG K8GI K8GIB K8GIM K8GL K8GLB K8GM K8GP K8GQ K8GT K8GU K8GVK K8GW K8HLH K8HLQ K8HMS K8HQ K8HSY K8HZK K8IA K8IFK K8IKO K8IKW K8IR K8IRB K8IRC K8JA K8JH K8JH/VP9 K8JHD K8JQ K8JTD K8JYG K8KBB K8KHZ K8KI K8KR K8KT K8KWT K8LBQ K8LEE K8LEF K8LES K8LF K8LJ K8LN K8LS K8LSB K8LV K8LY K8LZR K8MAJ K8MCN K8MD K8MDA K8ME K8MEG K8MFO K8MID K8MJH K8MJZ K8MK K8MM K8MN K8MOT K8MP K8MPW K8MQP K8MR K8MRT K8MSH K8MU K8MW K8NAP K8ND K8NK K8NOS K8NOW K8NQW K8NS K8NU K8NVR K8NWD K8NY K8NYG K8NYY K8NZ K8OD K8OK K8OM K8OOK K8OSF K8OWL K8OZ K8PC K8PGJ K8PI K8PJK K8PL K8PP K8PX K8PXR K8QF K8QH K8QKY K8QS K8QWY K8RCT K8RD K8RDG K8RDJ K8RGI K8RGI/4 K8RGM K8RJW K8RL K8RMC K8RNM K8RO K8ROX K8RQ K8RQX K8RSC K8RTR K8RVR K8RWL K8RYU K8SB K8SCH K8SD K8SDX K8SE K8SEM K8SHB K8SIA K8SJC K8SM K8SMD K8SSS K8ST K8SV K8SVT K8SYH K8SZN K8TAO K8TB K8TE K8TE/0 K8TE/7 K8TGR K8THF K8TIH K8TKA K8TLC K8TLH K8TLW K8TS K8TV K8TW K8UGG K8ULT K8UNS K8UO K8UT K8UU K8VB K8VFV K8VGL K8VOX K8VRZ K8VUS K8VYA K8WAR K8WAY K8WDQ K8WDX K8WEE K8WFL K8WGA K8WHA K8WHB K8WLK K8WRD K8WSN K8XG K8XS K8XX K8YAH K8YC K8YE K8YE/4 K8YFM K8YIB K8YM K8YN K8YQR K8YR K8YSE K8YYY K8ZAP K8ZBY K8ZH K8ZOG K8ZT K8ZZU K8ZZU/4 K9AA K9AAD K9AAN K9ABL K9ABR K9AIX K9AKS K9ALP K9AMB K9AMP K9APW K9AQ K9ARF K9ARZ K9ASE K9ATX K9AW K9AWM K9AY K9AZH K9AZY K9BAY K9BBQ K9BEC K9BGL K9BIZ K9BTF K9BTQ K9BTU K9BY K9CAV K9CC K9CDB K9CG K9CHP K9CJ K9COT K9CQ K9CS K9CT K9CU K9CW K9DA K9DAC K9DBE K9DBX K9DE K9DEB K9DFS K9DIB K9DIG K9DJ K9DJ/4 K9DJT K9DR K9DRG K9DRP K9DT K9DTC K9DU K9DUE K9DUR K9DX K9DXA K9DY K9EA K9EBY K9EDV K9EGS K9EJ K9EL K9ELF K9EN K9ES K9ESV K9EXY K9FBI K9FD K9FD/KH6 K9FDX K9FI K9FMX K9FN K9FNN K9FO K9FRO K9FS K9FW K9FZ K9GA K9GAJ K9GB K9GDF K9GEM K9GL K9GS K9GVM K9GWB K9GWS K9GX K9GXU K9GY K9GYI K9HA K9HK K9HKS K9HVW K9HWL K9HXO K9IA K9IBM K9ICP K9IDQ K9IDX K9IG K9IJ K9IL K9IL/4 K9ILS K9IM K9IMM K9ING K9IO K9IPO K9IQP K9IR K9IT K9IU K9IUQ K9IXO K9JAI K9JDP K9JDV K9JE K9JF K9JF/7 K9JFB K9JG K9JK K9JM K9JM/NEVA K9JMT K9JN K9JP K9JT K9JU K9JU/4 K9JWI K9JWP K9JWV K9KA K9KDE K9KE K9KEU K9KFT K9KIL K9KJ K9KK K9KL K9KM K9KMD K9KQX K9KR K9KSG K9KTS K9KU K9KUZ K9LA K9LCR K9LGE K9LGU K9LJ K9LJB K9LJN K9LNX K9LOF K9LOF/5 K9LRD K9LZJ K9LZR K9MA K9MAF K9MBQ K9MCE K9MCK K9MDK K9MI K9MJA K9MK K9MM K9MMS K9MOI K9MQ K9MU K9MUG K9MWM K9MY K9NB K9NDY K9NHP K9NN K9NO K9NR K9NSE K9NSS K9NTZ K9NU K9NW K9NY K9NZ K9OB K9OCO K9OGI K9OM K9OM/4 K9OMW K9OO K9OQ K9OR K9OT K9OW K9OZ K9PG K9PIN K9PMV K9PPY K9PSN K9PY K9QDA K9QH K9QJ K9QJS K9QLL K9QR K9QVB K9QVB/9 K9RA K9RJ K9RM K9RN K9RQ K9RR K9RRF K9RRW K9RS K9RU K9RX K9RZ K9RZZ K9SB K9SDM K9SE K9SEM K9SEX K9SF K9SG K9SGB K9SH K9SM K9SO K9SOL K9SOU K9SS K9STH K9SVL K9TC K9TF K9TM K9TMS K9TRY K9TV K9TVG K9TWW K9TY K9TZZ K9UDS K9UGF K9UIY K9UNY K9UQN K9UTM K9UWA K9UXC K9VB K9VD K9VER K9VIN K9VIS K9VIT K9VJR K9VSW K9VT K9VV K9WA K9WD K9WDY K9WEN K9WEY K9WIS K9WKD K9WKW K9WM K9WN K9WOJ K9WWS K9WWT K9WX K9WXE K9WZB K9XB K9XD K9XE K9XT K9XV K9XW K9XXL K9YC K9YM K9YVT K9YX K9ZA K9ZF K9ZIB K9ZM K9ZMI K9ZMU K9ZO K9ZT K9ZU K9ZVZ K9ZW K9ZXO KA0AIG KA0CSW KA0EGL KA0EIC KA0EML KA0FSP KA0GOA KA0HIB KA0HZP KA0JDT KA0JJR KA0JPN KA0KVW KA0LDG KA0LL KA0NEB KA0NNF KA0P KA0PQW KA0REN KA0RVL KA0SIX KA0UAX KA0UEH KA0ZLG KA0ZPP KA0ZWV KA1AF KA1AL KA1AMR KA1API KA1BED KA1BSZ KA1C KA1CQR KA1DBE KA1DJ KA1EAZ KA1EKR KA1FAL KA1G KA1GMN KA1ILH KA1IOO KA1IOR KA1IS KA1J KA1JY KA1KAL KA1KIX KA1KXL KA1LOR KA1MEX KA1MPG KA1O KA1OPD KA1PGI KA1QBO KA1QYP KA1R KA1SAW KA1SG KA1SNP KA1TNV KA1TWX KA1URP KA1V KA1VF KA1VGM KA1VMG KA1WER KA1WPM KA1ZD KA2ABA KA2AEY KA2BDU KA2BIG KA2BKG KA2BPP KA2BSK KA2D KA2DDX KA2DTH KA2EGI KA2EYH KA2F KA2FHN KA2FIR KA2GQQ KA2HTV KA2HZP KA2IBE KA2ISM KA2KEI KA2KGP KA2KON KA2LIM KA2M KA2MGE KA2MLH KA2NFG KA2OFM KA2OMQ KA2OQZ KA2OSV KA2QWC KA2THJ KA2VLP KA2VLP/3 KA2YRA KA2ZIU KA3ANO KA3ARF KA3BMU KA3CFX KA3CRC KA3CWR KA3CZY KA3D KA3DRR KA3EEO KA3EHL KA3EQU KA3FQS KA3FZN KA3FZO KA3GIK KA3GLQ KA3HED KA3HPM KA3IHR KA3J KA3JLW KA3KRB KA3KSP KA3KST KA3LKM KA3MHM KA3MLU KA3MTT KA3MTU KA3MZR KA3NZR KA3OCS KA3PCX KA3PMW KA3POX KA3QLF KA3QOT KA3RLZ KA3S KA3TRU KA3UOL KA3VFW KA3WZY KA3YGL KA3YJM KA3YJU KA3YNV KA4APA KA4AQM KA4BDW KA4BVG KA4CDN KA4CKR KA4DLW KA4EMR KA4ERK KA4FDM KA4FVE KA4GAV KA4GFY KA4HHM KA4HOT KA4JNB KA4JRY KA4KID KA4KKS KA4OTB KA4PKB KA4PKB/0 KA4PNE KA4R KA4RRU KA4SQN KA4TLC KA4TOM KA4UDX KA4W KA4WNZ KA4ZDR KA5ABS KA5CJJ KA5CRL KA5DJS KA5DWI KA5ETS KA5GCB KA5GIL KA5IAU KA5IXR KA5JBZ KA5M KA5PNX KA5PVB KA5QMA KA5QQA KA5TCF KA5VZG KA5W KA5WHO KA6AED KA6AIL KA6BIM KA6CUU KA6HHW KA6JLT KA6JLT/7 KA6KKE KA6MEL KA6MIB KA6MLE KA6RLQ KA6SGT KA6T KA6U KA6W KA6WKE KA6YMD KA7A KA7ARC KA7BVG KA7G KA7JOI KA7KSP KA7NPQ KA7PNH KA7RRA KA7T KA7YHA KA8CNI KA8G KA8GFB KA8GMX KA8GOV KA8HDE KA8HKC KA8HNS KA8HOK KA8JBK KA8JHD KA8JZR KA8LCW KA8NJW KA8Q KA8RTS KA8SBI KA8SMA KA8WMF KA8WQL KA8ZAW KA9A KA9BBQ KA9BGI KA9BHD KA9CAR KA9CFD KA9CKK KA9EKJ KA9FAJ KA9FON KA9FOX KA9FQG KA9GDW KA9IBS KA9JAC KA9JCP KA9KLR KA9KQH KA9LHE KA9LMK KA9O KA9OBL KA9OKH KA9OUT KA9OZP KA9P KA9PCU KA9SWE KA9TMM KA9TOZ KA9VPM KA9VRX KA9VVQ KA9WAR KA9YKB KA9ZAI KA9ZPL KA9ZZT KB0ARZ KB0BN KB0CH KB0DMA KB0DNP KB0DOG KB0EL KB0EO KB0FD KB0FQM KB0GUS KB0HAZ KB0HP KB0IG KB0JI KB0JIT KB0KFH KB0KFX KB0KRO KB0L KB0LF KB0LGF KB0LXE KB0LZQ KB0MDQ KB0MQV KB0NES KB0NHW KB0OFM KB0PAT KB0PPA KB0QEF KB0QH KB0R KB0RIF KB0ROB KB0SK KB0TLL KB0USA KB0VHA KB0WLF KB0WMQ KB0WSW KB0XA KB0XY KB0YFN KB0YH KB0YPS KB0YUV KB0ZNU KB1BMF KB1BSR KB1CL KB1CQ KB1DK KB1DMR KB1DMX KB1DN KB1EFS KB1EFS/2 KB1EPA KB1EYU KB1FBQ KB1FRK KB1FRW KB1FV KB1GKN KB1GMX KB1GTG KB1HNZ KB1HQS KB1HY KB1IRB KB1JDY KB1JJX KB1JL KB1JTB KB1JZR KB1K KB1KA KB1KUK KB1KXL KB1LRL KB1NA KB1NNH KB1ODO KB1OIQ KB1OWW KB1OY KB1QDC KB1QU KB1QU/4 KB1RI KB1SF KB1SWZ KB1TSE KB1TUR KB1UM KB1VCR KB1VQF KB1VUN KB1VWQ KB1VXY KB1VZY KB1W KB1WEA KB1WEB KB1WEI KB1WEZ KB1WID KB1WIO KB1WLB KB1WRZ KB1WSR KB1WUP KB1WXM KB1WY KB1YAP KB1YJ KB1YNT KB1YO KB1YXN KB1Z KB1ZDZ KB2ACY KB2AMY KB2AS KB2CKN KB2DAB KB2DMD KB2EMC KB2ERJ KB2ESY KB2FMH KB2GD KB2GNL KB2HSH KB2IAU KB2IPH KB2IYS KB2KBC KB2KDP KB2KDY KB2KFN KB2KOL KB2KUU KB2LAV KB2LOI KB2M KB2MS KB2NB KB2NQE KB2OMC KB2OYI KB2OYJ KB2PD KB2PIZ KB2RSK KB2SDF KB2SXT KB2SYH KB2TNH KB2URI KB2WVO KB2WXQ KB2WZT KB2XX KB2ZPB KB2ZVP KB3AAY KB3AC KB3AGZ KB3AII KB3AWQ KB3BSA KB3CAB KB3CB KB3CNH KB3CO KB3CT KB3CTX KB3CWG KB3CWQ KB3DC KB3DUT KB3FNY KB3FTE KB3GBC KB3GJP KB3GUN KB3H KB3ILS KB3JSV KB3JZB KB3K KB3KNX KB3KUJ KB3KYH KB3LIX KB3LMC KB3LNP KB3LR KB3LTT KB3MHB KB3MI KB3MJ KB3MMM KB3MP KB3OK KB3OMJ KB3OMW KB3ONQ KB3OQI KB3ORR KB3OVB KB3OZA KB3OZC KB3P KB3QBA KB3QWC KB3RA KB3RC KB3RC/HUN KB3RCT KB3RHR KB3RKM KB3RM KB3ROR KB3RYM KB3SJQ KB3SJS KB3TC KB3UCW KB3UVG KB3VAX KB3VHC KB3VMR KB3VNH KB3VQC KB3VQL KB3VVE KB3WBT KB3WD KB3WTI KB3YQK KB3YRC KB3Z KB3ZLY KB3ZNL KB3ZVH KB3ZWM KB3ZWR KB4C KB4CAU KB4DFK KB4DUC KB4DX KB4EUZ KB4FB KB4FOS KB4GNP KB4GYT KB4GZZ KB4HAI KB4IAN KB4IRR KB4JCY KB4JZ KB4KBS KB4LHP KB4MG KB4MRX KB4OLM KB4QDQ KB4QQJ KB4UF KB4ULE KB4UPI KB4VL KB4ZLS KB5AAB KB5BLZ KB5CCW KB5DJX KB5ENP KB5EZ KB5GA KB5GH KB5IJ KB5IRL KB5JC KB5JO KB5KYJ KB5KYX KB5LYR KB5MJC KB5MRT KB5NJD KB5OIL KB5OO KB5R KB5REX KB5SSQ KB5T KB5TB KB5TKG KB5TMD KB5TX KB5VLW KB5WWW KB5YN KB5YPJ KB6A KB6C KB6CIO KB6FB KB6FRD KB6J KB6NU KB6OJE KB6QIT KB6TAZ KB6TR KB6TSQ KB6UNC KB6VME KB6WKT KB7AA KB7ABJ KB7AZ KB7BKC KB7CSW KB7CSX KB7CW KB7DXN KB7EM KB7FSC KB7G/KH6 KB7GFL KB7H KB7HDX KB7IQO KB7JJG KB7KP KB7KRA KB7KY KB7KYK KB7MBI KB7N KB7NAS KB7OGE KB7Q KB7QFE KB7QPS KB7QYI KB7RJ KB7RUQ KB7TX KB7V KB7VML KB7XL KB7ZR KB8ABJ KB8AJR KB8BFM KB8DEX KB8DNQ KB8ECG KB8F KB8FNC KB8GAE KB8JIU KB8JNE KB8KB KB8KIK KB8KLK KB8KMH KB8LFA KB8M KB8MRC KB8NNU KB8NTY KB8NUF KB8O KB8OEJ KB8OMG KB8ORR KB8OTK KB8PGW KB8QAP KB8QF KB8QGR KB8RJ KB8RTB KB8RY KB8SB KB8SHE KB8SMD KB8SRQ KB8TAV KB8TL KB8TPT KB8TYJ KB8U KB8UHN KB8UUZ KB8V KB8VAO KB8W KB8WNL KB8YBG KB8YIT KB8YJY KB8ZB KB8ZGL KB8ZR KB8ZUN KB8ZYE KB9AH KB9AVX KB9AZZ KB9BPZ KB9BSK KB9COL KB9CYL KB9DAK KB9DVC KB9ENS KB9FBI KB9FPY KB9GAT KB9GE KB9GKG KB9GN KB9IIZ KB9JJF KB9KCT KB9LQA KB9LTW KB9LYB KB9MCX KB9MEJ KB9MI KB9NKM KB9O KB9ORH KB9OS KB9OWD KB9OZI KB9RDS KB9RPS KB9S KB9SJD KB9SWI KB9SXH KB9TVR KB9UDR KB9UMI KB9UWR KB9UWU KB9VQH KB9VXJ KB9WZH KB9YGD KB9ZES KB9ZJ KB9ZTF KC0AYG KC0BRA KC0CCR KC0CDX KC0DAS KC0DDZ KC0DEB KC0DMF KC0DX KC0FCL KC0FOT KC0GL KC0GM KC0GWK KC0HPM KC0INP KC0INP/4 KC0IUY KC0JFY KC0JQO KC0JRW KC0KHA KC0L KC0LDH KC0LKV KC0LNK KC0M KC0MCK KC0MJY KC0MO KC0MS KC0MYW KC0NFB KC0ODE KC0OHP KC0ONP KC0OW KC0PTF KC0QBU KC0QGB KC0QIK KC0QXX KC0RET KC0REY KC0RSX KC0SL KC0SWG KC0TDQ KC0TRK KC0TRX KC0UFB KC0URL KC0UUT KC0UXC KC0V KC0VDY KC0VFP KC0VKN KC0VRV KC0VTJ KC0W KC0WCF KC0WU KC0YFC KC0YHU KC0ZIC KC0ZNI KC0ZVN KC1ACL KC1ACN KC1AFA KC1AHI KC1AJT KC1AMZ KC1ANM KC1APK KC1AXJ KC1BAZ KC1BB KC1BJG KC1BJT KC1BLB KC1BMD KC1BOH KC1CBL KC1CCD KC1CCR KC1CDX KC1CET KC1CGR KC1CIL KC1CLZ KC1CNA KC1CRS KC1CTB KC1CWF KC1CWW KC1CYT KC1DAD KC1DDO KC1DKY KC1DLY KC1DQR KC1DRW KC1DVL KC1EDE KC1EKC KC1EKP KC1ELD KC1ELF KC1ENX KC1ERO KC1EYA KC1EYG KC1FCH KC1FOR KC1FOX KC1FOZ KC1FWV KC1GEJ KC1GEV KC1GIR KC1GQH KC1HAN KC1HBG KC1I KC1ME KC1MPK KC1NBD KC1NY KC1PR KC1PUG KC1SA KC1SQ KC1SS KC1UCK KC1V KC1XX KC1YL KC2ASA KC2AYK KC2BBI KC2BPP KC2C KC2DHU KC2DVT KC2DZT KC2EBP KC2EKE KC2EPU KC2FQ KC2HRO KC2HZW KC2IAR KC2IGE KC2JDU KC2JRQ KC2JYD KC2KAE KC2KGV KC2KKQ KC2KY KC2KZJ KC2LM KC2LMB KC2LRC KC2LSD KC2LST KC2LXD KC2MBV KC2NMK KC2NVG KC2NYU KC2OLA KC2OSR KC2P KC2PBE KC2PDO KC2PJH KC2PRB KC2PSC KC2Q KC2QJB KC2QLA KC2QNK KC2QYM KC2RVP KC2RXS KC2RZZ KC2SLJ KC2SOU KC2SST KC2SWB KC2SYF KC2SZ KC2TA KC2TEL KC2TFX KC2TMF KC2TN KC2TVJ KC2UBI KC2VAE KC2VPE KC2VVZ KC2WLR KC2WQD KC2WTU KC2WUF KC2WVX KC2WYU KC2YEA KC2ZA KC2ZOR KC2ZUR KC3ANS KC3ASH KC3AZX KC3BKG KC3BLF KC3BPS KC3BRA KC3BSA KC3BWA KC3CIP KC3CNT KC3COD KC3D KC3DA KC3DAD KC3DBG KC3DFS KC3DGM KC3DIG KC3DOF KC3DPB KC3DR KC3DRZ KC3DUO KC3EAH KC3EDN KC3EED KC3EF KC3EKA KC3EKZ KC3ERD KC3ESH KC3EWJ KC3EXO KC3EYB KC3FGD KC3FJB KC3FKR KC3FL KC3FMP KC3FQG KC3FSO KC3GDS KC3GEM KC3GJW KC3GRV KC3GUU KC3GWF KC3GYN KC3HEO KC3HHE KC3HJP KC3HMY KC3HOD KC3II KC3M KC3R KC3RN KC3RV KC3WX KC3X KC3YG KC4AAA KC4AAW KC4AUF KC4AXN KC4D KC4DV KC4EOG KC4EY KC4EZN KC4FDT KC4FLT KC4FWS KC4G KC4GCM KC4GL KC4GUL KC4HQS KC4HUS KC4HW KC4HYO KC4JD KC4JIY KC4JNS KC4KEZ KC4LE KC4LNX KC4MM KC4NX KC4PSN KC4PX KC4QX KC4RAC KC4SAW KC4SIG KC4SIT KC4TAC KC4TEO KC4TNQ KC4TVZ KC4VO KC4WQ KC4X KC4YBO KC4YCT KC4YDK KC4YLV KC4YOV KC4YPF KC4YT KC4ZA KC4ZPB KC4ZWA KC5CMX KC5DCT KC5DI KC5FP KC5FWW KC5H KC5HWB KC5JAN KC5JSV KC5KBN KC5LK KC5LL KC5LT KC5MC KC5MO KC5MOL KC5NCZ KC5NGX KC5ODT KC5PL KC5QIH KC5R KC5RDP KC5RGQ KC5RPF KC5RR KC5SB KC5SDY KC5SWT KC5T KC5USN KC5VHH KC5VRI KC5WA KC5WX KC5Y KC5YPU KC5YWN KC5ZRY KC6HFF KC6JAM KC6JQU KC6KGL KC6L KC6NAT KC6R KC6RZW KC6SEH KC6SWL KC6UKO KC6VCH KC6VVT KC6ZME KC7CM KC7CNN KC7DM KC7DVF KC7ES KC7FCW KC7FPF KC7GX KC7H KC7IEC KC7IGT KC7ITP KC7KNY KC7MP KC7ND KC7O KC7OO KC7PFR KC7QR KC7QY KC7RKU KC7STK KC7TAK KC7TCH KC7UG KC7V KC7YE KC7ZON KC8A KC8AWL KC8BOO KC8CB KC8CC KC8EVS KC8FQD KC8FRP KC8GCR KC8GTX KC8HNZ KC8HQS KC8I KC8IMB KC8JDX KC8JNL KC8JSF KC8LAU KC8LKB KC8MFX KC8MIS KC8MZR KC8NFN KC8NLP KC8PKY KC8PX KC8QDP KC8QDQ KC8QHT KC8QYZ KC8R KC8RLP KC8RPV KC8SQC KC8UDV KC8VC KC8VPQ KC8VWA KC8WH KC8WIK KC8WSM KC8YEJ KC8YJB KC8YJJ KC8YVF KC8YVP KC8ZH KC8ZMN KC8ZQS KC9AHH KC9AMM KC9AMY KC9BG KC9BHE KC9BXX KC9CDW KC9CLM KC9CRM KC9CRV KC9DDF KC9DK KC9DOA KC9DQK KC9EE KC9ELL KC9ELU KC9EOQ KC9FIQ KC9FJX KC9GBX KC9GHA KC9GQR KC9GZB KC9HYL KC9HYY KC9I KC9IL KC9IPL KC9IRQ KC9IRV KC9JBU KC9JCH KC9JML KC9JNH KC9K KC9KBB KC9KQ KC9LBE KC9LBO KC9LDK KC9LDO KC9LIF KC9LOX KC9LVT KC9MRW KC9NBV KC9NFJ KC9NNA KC9NNH KC9NOK KC9NPZ KC9NQD KC9NTY KC9NUW KC9NVN KC9NZR KC9OET KC9OUT KC9OYE KC9PIF KC9PWE KC9PYV KC9QFH KC9QQ KC9RAK KC9RAV KC9RDG KC9RIQ KC9RP KC9RRN KC9RXT KC9SFL KC9SFQ KC9SNM KC9TMH KC9TQR KC9TTR KC9TZO KC9UDL KC9UJS KC9UMR KC9UNL KC9UR KC9UTC KC9UTM KC9UUN KC9UVT KC9VFO KC9VYX KC9WAV KC9WBC KC9WBH KC9WC KC9WIX KC9WJF KC9WJH KC9WPS KC9WRB KC9WRY KC9WWM KC9WZ KC9YFU KC9YIJ KC9YIT KC9YL KC9YS KC9YTT KC9YVL KC9YWO KC9ZJI KC9ZTX KC9ZTY KC9ZVP KD0A KD0AA KD0ARN KD0B KD0CAC KD0CVZ KD0DHF KD0DSU KD0EE KD0EFW KD0ESZ KD0ETU KD0EZS KD0FW KD0FYN KD0FZT KD0GN KD0HIY KD0HKD KD0HRM KD0HTS KD0HVX KD0IEL KD0IF KD0IPI KD0IRW KD0ITF KD0IVV KD0JHW KD0JLE KD0JLN KD0JUC KD0KHV KD0LHI KD0LRG KD0MED KD0MEI KD0MQU KD0NEO KD0NPT KD0NWW KD0OEC KD0OIX KD0OYC KD0PO KD0PQX KD0PZ KD0Q KD0QNC KD0RCB KD0RIY KD0RSX KD0S KD0SBN KD0SBW KD0SGC KD0STU KD0SVH KD0SZT KD0TYU KD0UBE KD0UN KD0UWZ KD0UXO KD0VHD KD0VJF KD0VJO KD0VNQ KD0WAN KD0WF KD0WUF KD0WUQ KD0WVS KD0WXT KD0XT KD0YAA KD0YCR KD0YSW KD0YVA KD0YWZ KD0ZGW KD0ZZ KD0ZZO KD1CT KD1GA KD1O KD1OG KD1PV KD1W KD1XH KD1YV KD2A KD2ABK KD2AEF KD2AJO KD2ARU KD2BAN KD2BBC KD2BGM KD2BMX KD2BQQ KD2BS KD2BXD KD2CFD KD2CFG KD2CTZ KD2CVR KD2CYU KD2D KD2DKB KD2DLL KD2DMR KD2DNB KD2DQX KD2DVW KD2DWX KD2DXI KD2DXJ KD2DYY KD2EFK KD2EFR KD2EIM KD2EJ KD2ELY KD2EPW KD2ETP KD2FIQ KD2FJQ KD2FLX KD2FND KD2FO KD2FSH KD2FWG KD2GTW KD2GUD KD2GXL KD2HDP KD2HEK KD2HFN KD2HHT KD2HJZ KD2HRD KD2HZI KD2I KD2IBC KD2IBQ KD2IIK KD2INN KD2INX KD2IRA KD2ITW KD2ITZ KD2IWW KD2JA KD2JAA KD2JBC KD2JBE KD2JBZ KD2JC KD2JCT KD2JKL KD2JKV KD2JOE KD2JPV KD2JQK KD2KBZ KD2KCD KD2KEH KD2KGV KD2KOG KD2KOS KD2KSG KD2KW KD2LGX KD2MCU KD2MHV KD2NE KD2P KD2RD KD2RPJ KD2SC KD2T KD2TT KD2XI KD2XN KD3CQ KD3D KD3FG KD3HN KD3KB KD3KO KD3RF KD3TB KD3Y KD3YE KD4AA KD4ACG KD4ADC KD4BVG KD4CB KD4CM KD4D KD4EAQ KD4EE KD4FBA KD4FJ KD4FV KD4FW KD4GNM KD4GS KD4GUB KD4HCR KD4ISM KD4JM KD4JMV KD4JRX KD4KLD KD4KSO KD4LEM KD4LN KD4LV KD4LYS KD4MPN KD4MXA KD4MZM KD4NEM KD4NUL KD4POJ KD4POK KD4PXY KD4PYR KD4QFT KD4QIT KD4QMY KD4RAX KD4RH KD4RJ KD4RLD KD4S KD4SEV KD4SN KD4SUG KD4ULW KD4UZ KD4VEU KD4WKP KD4YDD KD4YRA KD4Z KD5AFS KD5AY KD5BBR KD5C KD5CCG KD5DD KD5DLZ KD5DSQ KD5EDL KD5EE KD5FBA KD5FDP KD5FEE KD5FHW KD5IKG KD5ILA KD5J KD5JAA KD5JHE KD5JRY KD5JSM KD5L KD5LKB KD5LNO KD5M KD5MMM KD5OWQ KD5PHV KD5QAQ KD5QHV KD5QX KD5R KD5RA KD5RC KD5RHR KD5RR KD5RXP KD5UBC KD5URK KD5USV KD5UVV KD5YHQ KD5ZAT KD6AF KD6BIS KD6BZN KD6C KD6CCP KD6CUB KD6DKC KD6DW KD6FIL KD6GWH KD6IRI KD6KHK KD6KYT KD6ME KD6NSA KD6OAT KD6PPM KD6RMS KD6SBK KD6ST KD6TR KD6UO KD6UY KD6WKY KD6X KD7DCR KD7DEG KD7DLE KD7F KD7FK KD7GX KD7H KD7IBE KD7IQL KD7JG KD7JR KD7KL KD7KMZ KD7LEE KD7LRK KD7MRJ KD7PCE KD7PFG KD7PY KD7QAS KD7RCJ KD7RF KD7RUS KD7SU KD7TO KD7UO KD7VIK KD7VV KD7YDL KD7YUW KD7ZLF KD8ACG KD8AFH KD8AJK KD8BB KD8BBK KD8BXE KD8CAO KD8CGS KD8CQC KD8DEU KD8DQS KD8DX KD8DZO KD8ECG KD8EDC KD8EER KD8EWG KD8EXU KD8EXX KD8FAQ KD8FDK KD8FLT KD8FO KD8GYS KD8HHG KD8HNF KD8HQU KD8IIN KD8IZZ KD8JAM KD8JQE KD8KEO KD8KXD KD8KZG KD8LBA KD8LNO KD8LW KD8MGI KD8MQ KD8MRL KD8NIV KD8NJ KD8NNU KD8NOH KD8NYO KD8NYP KD8NZF KD8OBW KD8ONC KD8OPN KD8ORN KD8OSD KD8PGL KD8PHI KD8PQQ KD8QDL KD8QDP KD8QYE KD8RGJ KD8RQE KD8RUC KD8RWR KD8RYP KD8SAV KD8SGQ KD8SKO KD8SNZ KD8SQ KD8SUT KD8SWT KD8SZZ KD8TGH KD8TNF KD8TQT KD8TTE KD8TTH KD8TTM KD8TXZ KD8U KD8UAW KD8UDO KD8UFD KD8UNM KD8UQY KD8UWF KD8VMM KD8VRX KD8VSQ KD8VUX KD8W KD8WA KD8WBZ KD8WCJ KD8WEY KD8WKR KD8WTB KD8WTI KD8WVX KD8YGW KD8YNG KD8YVD KD8YVJ KD8YWF KD8YZ KD8ZBA KD8ZCH KD8ZJO KD8ZMN KD8ZPX KD8ZQG KD8ZRI KD8ZUE KD8ZYD KD9AC KD9ADB KD9ANY KD9ARD KD9ASA KD9AZW KD9BBB KD9BGY KD9BMI KD9BNP KD9BNQ KD9BPQ KD9BQO KD9BSO KD9BVD KD9BWP KD9BXR KD9CBZ KD9CDC KD9CES KD9CJX KD9CLH KD9CLI KD9CLT KD9CMS KD9CNQ KD9CPU KD9CQB KD9CQQ KD9CZQ KD9DAX KD9DBF KD9DCA KD9DCW KD9DDE KD9DDW KD9DEG KD9DEY KD9DGS KD9DHT KD9DK KD9DP KD9DPW KD9DRE KD9DRG KD9DRO KD9DVN KD9DXL KD9DXV KD9DXX KD9EFO KD9EIC KD9EIO KD9ELU KD9ERS KD9ERT KD9FAP KD9FBD KD9FM KD9FYS KD9GJV KD9GKL KD9GNW KD9GY KD9HAV KD9HNG KD9HNU KD9LA KD9LF KD9MH KD9MS KD9MY KD9OHM KD9QS KD9ST KD9SV KD9VT KD9VV KD9WR KD9ZR KE0A KE0AHM KE0AHU KE0ARY KE0BAQ KE0BCS KE0BFO KE0BHP KE0BPJ KE0BPY KE0BRK KE0BRZ KE0BTX KE0CAZ KE0CFD KE0CQF KE0CRP KE0CU KE0CZN KE0CZQ KE0DNL KE0DQU KE0EBK KE0EBS KE0EBW KE0EK KE0ERT KE0EVO KE0FDC KE0FK KE0FKE KE0FQS KE0G KE0GHU KE0GKD KE0GOM KE0GXN KE0GYA KE0HCE KE0HEW KE0HFB KE0HGE KE0HGI KE0HHL KE0HJA KE0HKV KE0HOO KE0HQO KE0HQZ KE0HWZ KE0IAA KE0IDD KE0IEZ KE0IGK KE0IS KE0ITC KE0JFZ KE0JGE KE0JRS KE0JYJ KE0KBS KE0KKD KE0KZ KE0L KE0LFX KE0LHX KE0LMQ KE0LY KE0ME KE0MF KE0NO KE0OG KE0OR KE0PX KE0SI KE0TT KE0UI KE0UL KE0VH KE0Z KE1AB KE1B KE1DS KE1F KE1GV KE1IH KE1IU KE1J KE1LI KE1Q KE1R KE1S KE1U KE1V KE2D KE2DX KE2IL KE2OI KE2R KE2SX KE2T KE2TR KE2U KE2UN KE2VB KE2VB/7 KE2WY KE2YC KE3AW KE3AX KE3C KE3FG KE3FO KE3GK KE3JP KE3K KE3KD KE3LA KE3MX KE3NP KE3O KE3V KE3VV KE3X KE3XE KE3ZT KE4AK KE4AZZ KE4BZJ KE4CIR KE4CQ KE4D KE4DQ KE4DV KE4ETY KE4EVL KE4FD KE4FW KE4G KE4GUQ KE4GVO KE4HKO KE4HTS KE4HVR KE4ID KE4IYB KE4KE KE4KEF KE4KK KE4KMG KE4KVC KE4KY KE4MBP KE4MFH KE4MU KE4NYH KE4PLT KE4PSD KE4QCM KE4R KE4RDF KE4REJ KE4RG KE4RK KE4RUN KE4S KE4SGS KE4TA KE4TG KE4TTS KE4TWI KE4UW KE4VA KE4VH KE4WY KE4XT KE4YGT KE4YMX KE4YOG KE4YVD KE4ZUN KE5AKL KE5AL KE5AST KE5AX KE5AZ KE5BCY KE5BGC KE5BHM KE5BZ KE5BZE KE5CJ KE5CVM KE5EE KE5FN KE5FNA KE5HDF KE5ISO KE5ISO/1 KE5KVR KE5LQ KE5MKB KE5MMT KE5MVC KE5NJ KE5OG KE5OO KE5PRL KE5RBS KE5RHE KE5RRN KE5RS KE5RX KE5SCC KE5SNJ KE5SUE KE5TC KE5TD KE5TO KE5WB KE5XV KE5YF KE5YHJ KE5ZCZ KE6DM KE6DPS KE6EEZ KE6FQC KE6GLA KE6GRN KE6IUE KE6JI KE6KJD KE6LB KE6LL KE6PLA KE6PY KE6QEY KE6QR KE6SHL KE6TE KE6TIM KE6TUH KE6VUS KE6WC KE6ZSN KE7ACE KE7AH KE7AUB KE7BPU KE7BT KE7DX KE7DZ KE7F KE7GKI KE7GRO KE7HTL KE7IHG KE7II KE7JZZ KE7KUS KE7LBB KE7MSU KE7NO KE7NYS KE7PGO KE7PLK KE7SW KE7TM KE7UQL KE7VUX KE7WNB KE7WTM KE7X KE7X/VY2 KE7ZAC KE8AAL KE8AKW KE8AME KE8ANS KE8AQW KE8ARL KE8ASY KE8BBB KE8BG KE8BHP KE8BHX KE8BII KE8BKP KE8BLN KE8BMC KE8BNE KE8BPS KE8BPZ KE8BRD KE8BTO KE8BWA KE8BYM KE8C KE8CBW KE8CDD KE8CEW KE8CIO KE8COQ KE8CQ KE8CRM KE8CRT KE8CU KE8CZO KE8DEM KE8DGY KE8DI KE8DNV KE8EAS KE8EJI KE8EJX KE8EVX KE8EYQ KE8FBB KE8FD KE8FT KE8FT/6 KE8G KE8GMU KE8GX KE8HBY KE8KT KE8KW KE8M KE8NK KE8NN KE8RG KE8RU KE8UN KE8VC KE8XH KE8Y KE9AJ KE9B KE9ET KE9EX KE9KF KE9L KE9MG KE9N KE9UA KE9V KF0CT KF0F KF0GE KF0HR KF0IQ KF0IR KF0JA KF0N KF0QR KF0SJ KF0UR KF0X KF0XO KF0Z KF0ZG KF1P KF2AT KF2B KF2E KF2FK KF2GV KF2I KF2O KF2OG KF2T KF2TI KF2TP KF2UJ KF2VX KF2Y KF2ZO KF3B KF3C KF3CG KF3CP KF3DJ KF3EB KF3F KF3G KF3N KF4AOF KF4AV KF4BY KF4CGM KF4CRG KF4DUE KF4DX KF4ECG KF4EKA KF4EWO KF4FC KF4FK KF4GDX KF4MMF KF4PN KF4Q KF4QFJ KF4RPJ KF4SKY KF4TC KF4TP KF4VTT KF4WCL KF4WEX KF4WSN KF4WZ KF4YLM KF4ZGZ KF4ZS KF4ZZ KF5ALL KF5BA KF5COP KF5CRF KF5CSO KF5CYZ KF5DA KF5DBN KF5DDR KF5DDV KF5EUC KF5FHZ KF5GO KF5GST KF5GTX KF5HIQ KF5HVL KF5ITM KF5JOO KF5JRA KF5JRE KF5JUH KF5LBK KF5LJI KF5MLP KF5MU KF5NHE KF5NRS KF5OMH KF5PAL KF5PLA KF5PMB KF5RHI KF5RLL KF5RPM KF5RSA KF5RUW KF5SLK KF5SM KF5SNL KF5SOU KF5SQC KF5TK KF5TOK KF5TXU KF5UEZ KF5UFI KF5UJD KF5UQJ KF5VDX KF5VM KF5VRD KF5WCP KF5WFL KF5WGB KF5WUF KF5WVJ KF5WYV KF5YAF KF5YSH KF5YUB KF5YZ KF5ZBL KF5ZNQ KF5ZPL KF6A KF6D KF6ESD KF6FGL KF6HI KF6I KF6JQ KF6LU KF6LYF KF6MIQ KF6MK KF6NCX KF6RTB KF6RY KF6SJ KF6XE KF6ZYD KF7BA KF7CG KF7CJJ KF7CQ KF7CYG KF7DS KF7DUR KF7DX KF7E KF7EB KF7EE KF7F KF7FIB KF7FK KF7FME KF7GGN KF7GMD KF7GMV KF7GPO KF7HB KF7IQ KF7JQV KF7KTC KF7KWK KF7LMS KF7LPU KF7NN KF7NPC KF7OJA KF7PBM KF7PG KF7PK KF7PKL KF7QIY KF7RGZ KF7RM KF7RPI KF7RU KF7SOJ KF7TCK KF7TLL KF7TOV KF7TY KF7U KF7UUM KF7UV KF7WMM KF7WMO KF7WNS KF7WPK KF7WRS KF7YED KF7Z KF7ZN KF7ZVG KF7ZYV KF7ZZ KF8BD KF8BT KF8DX KF8E KF8IY KF8MZ KF8PD KF8UN KF8UU KF8VS KF9AS KF9D KF9D/P KF9ER KF9FH KF9SD KF9U KF9US KF9WW KG0AQ KG0DX KG0EW KG0KP KG0MW KG0O KG0SI KG0SY KG0TS KG0UFO KG0US KG0V KG0VA KG0YL KG1D KG1E KG1V KG1ZX KG2A/KH2 KG2AF KG2CM KG2DC KG2DWS KG2GL KG2H KG2MS KG2RA KG2S KG2U KG3L KG3V KG3W KG4AW KG4BP KG4C KG4CRJ KG4CUY KG4E KG4EM KG4EU KG4EYG KG4FJC KG4GGG KG4GMY KG4GSX KG4HF KG4IGC KG4IKQ KG4IXG KG4JTR KG4KWW KG4LUN KG4MGB KG4MSR KG4NIH KG4OCJ KG4OLG KG4OOZ KG4OZC KG4QIV KG4QZV KG4SS KG4SZS KG4TEI KG4TRI KG4UPO KG4UPR KG4URP KG4USN KG4UVU KG4V KG4V/1 KG4VDZ KG4VMB KG4W KG4WOJ KG4Y KG4YNX KG4YTP KG4ZK KG4ZOD KG4ZOI KG4ZXN KG5AAK KG5ANO KG5AXZ KG5AYB KG5BMS KG5BQQ KG5BTN KG5BZR KG5CBD KG5CIJ KG5CIK KG5CJA KG5CNU KG5DKG KG5DRV KG5DUS KG5DWP KG5DWS KG5EAO KG5EE KG5EJM KG5EKB KG5ELN KG5EN KG5ESC KG5EVS KG5FIF KG5FII KG5FJI KG5FJV KG5FLM KG5FRR KG5FRS KG5GCC KG5GJT KG5GMN KG5GTF KG5GTO KG5GWM KG5GXZ KG5HBL KG5HEO KG5HFO KG5HI KG5HPS KG5HTH KG5HUU KG5HVO KG5ICI KG5ICX KG5IEE KG5IIS KG5INE KG5IOG KG5IPR KG5IQU KG5IT KG5JBY KG5JCK KG5JDJ KG5JHJ KG5JIM KG5KEY KG5KFC KG5KRZ KG5LKQ KG5LKU KG5LRP KG5LRX KG5LVR KG5LWL KG5MBX KG5MCY KG5MGN KG5NAN KG5OA KG5OSX KG5OV KG5PBJ KG5PJG KG5PWA KG5RAW KG5RJ KG5RMY KG5SAA KG5SV KG5TED KG5THG KG5U KG5UN KG5VK KG5WR KG6A KG6AO KG6AY KG6BOU KG6CD KG6CIH KG6DX KG6FIY KG6HJU KG6HM KG6J KG6MC KG6MZS KG6N KG6SFW KG6SVF KG6UEF KG6VNA KG6WIK KG6XF KG7ASQ KG7AZ KG7BAN KG7BP KG7CUI KG7CW KG7DHP KG7DMI KG7DPK KG7E KG7FIU KG7GEP KG7GYI KG7GYO KG7H KG7HAX KG7HSN KG7HZT KG7JMI KG7JWD KG7KA KG7KPO KG7KVH KG7LCD KG7LKI KG7MAJ KG7MEL KG7MRA KG7MVH KG7MXL KG7MZ KG7NJQ KG7NLF KG7NV KG7OH KG7OMM KG7OQY KG7OSO KG7P KG7PAP KG7PJD KG7PQX KG7QBT KG7QXE KG7RS KG7RYH KG7RZD KG7SNE KG7TFI KG7UET KG7UNF KG7UNG KG7UNH KG7VAK KG7VCL KG7VIZ KG7VLB KG7VQ KG7WLJ KG7WLX KG7WLZ KG7WNB KG7YJA KG7YUV KG7YVI KG8CW KG8DH KG8FE KG8I KG8OU KG8P KG8UT KG8V KG9D KG9DN KG9DW KG9E KG9FA KG9FB KG9HG KG9IL KG9JP KG9LB KG9ML KG9N KG9ND KG9SF KG9X KG9Z KH2JU KH2KY KH2L KH2N KH2RU/KP4 KH2SR KH2X KH6AT KH6BB KH6BE KH6BO KH6CB KH6CC KH6CJJ KH6CS KH6CW KH6DD KH6DE KH6DH KH6DK KH6DL KH6DV KH6DX KH6FKA KH6FP KH6G KH6GMP KH6HI KH6HU KH6J KH6JAY KH6KG KH6LC KH6LH KH6M KH6MB KH6MB/AI5 KH6MB/W5 KH6MOI KH6ND KH6ND/NZ7 KH6ND/W7 KH6NF KH6NO KH6NO/W7 KH6NX KH6OO KH6P KH6Q KH6QJ KH6RC KH6RS KH6SH KH6TA KH6TU KH6U KH6VM KH6VM/W7 KH6XL KH6Y KH6ZM KH7AR KH7B KH7BB KH7C KH7CW KH7J KH7LC KH7M KH7Q KH7T KH7X KH7X/W7 KH7XS KH8/KC0W KI0AD KI0E KI0EJ KI0F KI0G KI0GL KI0GU KI0HA KI0I KI0II KI0J KI0KN KI0Z KI1G KI1H KI1M KI1U KI2P KI3N KI3T KI4BIY KI4BQ KI4BXU KI4CBN KI4DFS KI4DNO KI4DSC KI4DT KI4EEY KI4EU KI4EZC KI4EZL KI4FCQ KI4FH KI4FSZ KI4FUV KI4FW KI4GGJ KI4GQP KI4IDB KI4IIV KI4IO KI4KGK KI4KN KI4LNE KI4LXH KI4MJK KI4MZC KI4NSP KI4ODO KI4OSH KI4PHE KI4PS KI4R KI4RFU KI4RGD KI4RKM KI4SA KI4SP KI4SPP KI4STU KI4SWB KI4TSI KI4UJ KI4UVE KI4VPD KI4WCQ KI4WMO KI4YCC KI4YY KI4YZN KI4ZRH KI4ZVU KI5AH KI5AK KI5EE KI5F KI5FJ KI5JF KI5JZ KI5LR KI5MM KI5OO KI5SC KI5WG KI5YG KI6AHH KI6ASK KI6BWO KI6CDF KI6CQ KI6CYT KI6DL KI6DY KI6DY/0 KI6EAB KI6FYQ KI6IJI KI6IT KI6LSB KI6LTC KI6MQX KI6NGN KI6NTB KI6NVG KI6OY KI6PMD KI6QDH KI6RRD KI6RRN KI6SMX KI6UDZ KI6VC KI6WJ KI6X KI6YJS KI7AHL KI7AO KI7AY KI7BP KI7CKE KI7DAN KI7DCE KI7DG KI7DJM KI7DOJ KI7DV KI7EL KI7FPL KI7G KI7GVS KI7IIM KI7M KI7MD KI7MT KI7N KI7SAP KI7Y KI7ZV KI8AE KI8AF KI8CL KI8CX KI8DU KI8EM KI8ER KI8JY KI8L KI8R KI8W KI9A KI9S KI9W KJ0B KJ0D KJ0DY KJ0I KJ0P KJ0U KJ1J KJ1RE KJ2AM KJ2D KJ3L KJ3Q KJ3V KJ4AOM KJ4AUQ KJ4AZA KJ4BAD KJ4CEG KJ4CFE KJ4CO KJ4DHF KJ4DVR KJ4E KJ4EOO KJ4EOZ KJ4EU KJ4EX KJ4FGI KJ4FQN KJ4FZ KJ4G/4 KJ4HZ KJ4IEU KJ4IKB KJ4IPF KJ4IWZ KJ4IXG KJ4IZW KJ4JQU KJ4JSQ KJ4JWM KJ4KHX KJ4KKD KJ4KTG KJ4KVC KJ4LQX KJ4LTA KJ4M KJ4MSR KJ4MZ KJ4NMO KJ4NN KJ4NOP KJ4OAP KJ4OK KJ4PNA KJ4PV KJ4QFV KJ4QHL KJ4R KJ4RAQ KJ4RRE KJ4RV KJ4SBC KJ4TFU KJ4TOF KJ4TOZ KJ4TTP KJ4TVS KJ4TVX KJ4UAU KJ4UC KJ4UDD KJ4UGO KJ4UY KJ4UZU KJ4V KJ4VKV KJ4VTH KJ4VVU KJ4WD KJ4WKD KJ4WNW KJ4YGC KJ4YKG KJ4YLR KJ4YPY KJ4YQK KJ4YZI KJ4Z KJ4ZML KJ4ZMV KJ4ZYB KJ5CI KJ5FA KJ5MA KJ5NJ KJ5RM KJ5SO KJ5TF KJ5Y KJ6AP KJ6DQ KJ6F KJ6FCF KJ6HZ KJ6JEP KJ6LBA KJ6LJB KJ6LJI KJ6LV KJ6MBW KJ6MIC KJ6MQM KJ6NZ KJ6OHI KJ6OOV KJ6PTX KJ6QMF KJ6RMM KJ6TPG KJ6TRT KJ6TSX KJ6TTR KJ6UD KJ6VU KJ6WH KJ6YAP KJ6YQV KJ6YXI KJ7EP KJ7MX KJ7NL KJ7NO KJ7PO KJ7S KJ7V KJ8DO KJ8N KJ8O KJ8U KJ9C KJ9I KJ9KJS KJ9P KJ9X KK0DJ KK0I KK0M KK1C KK1K KK1L KK1VT KK1W KK2A KK2WW KK3AN KK3F KK3MM KK3TN KK3XX KK4A KK4ADQ KK4AMR KK4AND KK4ANY KK4ASA KK4BF KK4BKD KK4BNC KK4BQ KK4BSM KK4BYP KK4BZ KK4CB KK4CBL KK4CCH KK4CLY KK4CQN KK4DMW KK4DZP KK4ECR KK4ENI KK4EXY KK4FEM KK4FFE KK4FT KK4FTC KK4FWU KK4H KK4HEG KK4HPX KK4HQT KK4HUK KK4ICQ KK4IMJ KK4IMY KK4IQD KK4IWN KK4JFM KK4JMW KK4JPB KK4JSJ KK4JTW KK4JW KK4KHS KK4KIG KK4KO KK4KT KK4KW KK4LDD KK4LFN KK4LGC KK4LL KK4LLS KK4LTQ KK4MA KK4MBT KK4MBX KK4MOV KK4MPR KK4MQD KK4NAW KK4NC KK4NJM KK4NZH KK4OA KK4ODQ KK4OFV KK4OK KK4ORP KK4OVW KK4OW KK4OWZ KK4PC KK4PIV KK4PJ KK4PQA KK4PUX KK4PWE KK4QHM KK4QIY KK4QOE KK4R KK4RDI KK4RT KK4RV KK4RVW KK4RXC KK4RXU KK4SMJ KK4SYD KK4TCE KK4TE KK4TIX KK4TJP KK4TKJ KK4TUX KK4UI KK4UON KK4VA KK4VMI KK4VPT KK4VT KK4WAC KK4WDM KK4WDR KK4WEY KK4WPR KK4WS KK4WTW KK4WUV KK4WX KK4XA KK4XO KK4XX KK4YEM KK4YOK KK4YYS KK4ZDR KK4ZR KK4ZT KK4ZUH KK4ZZD KK5CR KK5I KK5IB KK5ID KK5JD KK5JY KK5LD KK5LO KK5MT KK5NC KK5NO KK5OQ KK5OV KK5PL KK5RX KK5SW KK5T KK5UG KK5W KK6ABZ KK6AFD KK6AOL KK6BD KK6CX KK6DCT KK6DDC KK6DF KK6DPE KK6FCV KK6FEM KK6FJQ KK6FUT KK6HUB KK6I KK6IEE KK6ILV KK6IPK KK6IVX KK6JFN KK6JOL KK6JPA KK6KMU KK6L KK6L/3 KK6LE KK6MC KK6MKP KK6MMD KK6MOS KK6MU KK6NLZ KK6NON KK6NTL KK6OCN KK6OJR KK6OTJ KK6P KK6PGL KK6PIM KK6PMM KK6PTO KK6PTS KK6QCV KK6QMS KK6RDY KK6RKY KK6RQI KK6SXK KK6TBN KK6TGJ KK6TKQ KK6TV KK6UBP KK6USY KK6VKF KK6VZE KK6WHF KK6WJZ KK6XN KK6YRU KK6ZHK KK6ZIZ KK6ZM KK6ZUU KK6ZZD KK7A KK7AC KK7AI KK7EL KK7GC KK7JS KK7L KK7PR KK7PW KK7RD KK7TV KK7UQ KK7VL KK7X KK7YC KK8B KK8K KK8MM KK8U KK9A KK9DX KK9EJ KK9G KK9H KK9I KK9JEF KK9K KK9KK KK9M KK9N KK9O KK9T KK9TT KK9U KK9V KK9W KK9X KL0ET/W4 KL0MP KL0R KL1JP KL2A KL2R KL2T KL2ZZ KL3A KL3DO KL3IH KL3QI KL3UX KL4SD KL5AJK KL5DX/W5 KL7AC KL7AIR KL7CW KL7DA/4 KL7DG KL7GS KL7HBK KL7HFI KL7HRN KL7IEH KL7IWC KL7JRC KL7JVD KL7KK KL7KY KL7LT KL7N KL7NC KL7R/W7 KL7RA KL7RST KL7SB KL7SB/VP9 KL7SB/VY2 KL7SG KL7TH KL7TS KL7XU KL8X KL9A/W7 KM0A KM0DX KM0MMM KM0O KM0U KM1A KM1D KM1R KM1X KM2J KM2KM KM2L KM2O KM2S KM2Z KM3M KM3T KM3U KM4A KM4AAH KM4AEM KM4AHP KM4AJ KM4ATT KM4BLH KM4BYT KM4C KM4CAX KM4CLT KM4CNR KM4CPA KM4D KM4DAY KM4DCJ KM4DJO KM4DNX KM4DNY KM4DR KM4DVA KM4DVE KM4DYA KM4ECP KM4EDO KM4EFX KM4EKW KM4EKZ KM4ELJ KM4EMA KM4EMX KM4EOG KM4EQA KM4F KM4FLU KM4FO KM4FOC KM4FR KM4FRM KM4FSG KM4FVF KM4GAW KM4GBM KM4GCI KM4GFJ KM4GGQ KM4GQW KM4HDM KM4HFB KM4HI KM4HOH KM4HQE KM4HQL KM4HQP KM4HRG KM4HVE KM4HVL KM4HXI KM4IAF KM4IAJ KM4IIZ KM4IK KM4IKO KM4IPF KM4IYF KM4IYW KM4IZZ KM4JA KM4JBG KM4JNT KM4JSP KM4JVV KM4JWW KM4JYR KM4JZJ KM4KB KM4KOA KM4KPJ KM4KZC KM4KZV KM4LAO KM4LC KM4LHG KM4LKC KM4LLF KM4LS KM4LVX KM4LZM KM4MCI KM4MDR KM4MFW KM4MGG KM4MHJ KM4MLF KM4MQI KM4MWE KM4MYD KM4NHV KM4NOW KM4NS KM4NXW KM4OCC KM4ODS KM4OIX KM4OJA KM4OSB KM4OTB KM4OUS KM4PFF KM4PKV KM4PLK KM4POP KM4PPF KM4QEK KM4QER KM4QHI KM4QJW KM4QNT KM4QOY KM4QPG KM4QZP KM4RAY KM4RBL KM4RFI KM4RK KM4RKT KM4RO KM4RRE KM4SDN KM4SDN/5 KM4SEG KM4SFF KM4SII KM4SLW KM4TC KM4TMO KM4TOI KM4TPN KM4TUQ KM4TVU KM4TX KM4TXB KM4TXR KM4TYV KM4TZK KM4UUX KM4VIZ KM4VLO KM4VR KM4VTE KM4WII KM4WLS KM4WXJ KM4YCH KM4YHI KM4YMT KM4ZJL KM4ZMW KM4ZOP KM4ZOW KM4ZZ KM5EO KM5FW KM5G KM5JW KM5LF KM5LS KM5LY KM5ME KM5MS KM5PH KM5PS KM5VI KM5YV KM5YX KM64FT KM6AHU KM6AXC KM6AZI KM6CKI KM6CNF KM6CQ KM6CR KM6CSY KM6DF KM6DNB KM6DQD KM6ELP KM6G KM6HB KM6I KM6JD KM6NR KM6TJ KM6Z KM7DX KM7N KM7Q KM7R KM7TR KM7W KM8CC KM8L KM8Q KM8R KM8V KM9M KM9O KM9P KM9R KN0A KN0JI KN0MAP KN0R KN0V KN0W KN1CBR KN1FE KN1H KN1Q KN1W KN2M KN2RC KN2T KN3A KN3E KN3PAT KN3X KN4BBC KN4D KN4DEB KN4DLC KN4DLS KN4DS KN4DUA KN4EUM KN4EWI KN4FRG KN4G KN4HH KN4JN KN4JX KN4KL KN4MC KN4OK KN4SM KN4VFM KN4VV KN4W KN4Y KN5A KN5H KN5O KN5S KN5TX KN5X KN6BU KN6DR KN6KJ KN6MK KN6Q KN6Y KN6YC KN7K KN7N KN7NV KN7T KN8F KN8KAZ KN8L KN8S KN9E KN9K KN9N KN9P KO0A KO0D KO0OL KO0Z KO1E KO1U KO2E KO2WW KO3T KO4DN KO4FD KO4FV KO4GS KO4JY KO4LJ KO4O KO4OL KO4PM KO4SB KO4XB KO4XJ KO5OK KO6JF KO6LU KO6NO KO6PS KO6RM KO6UW KO6YG KO7I KO7P KO7SS KO8SCA KO8V KO8Z KO9F KO9Q KO9V KP2AD KP2BH KP2DX KP2M KP2Q KP2RUM KP2X KP2XX KP2Z KP3BR KP3CR KP3ER KP3H KP3LH KP3LR KP3RN KP3SK/W4 KP3W KP3Z KP4AAK KP4AW KP4BD KP4BME KP4CG KP4CPC KP4DQC KP4DRB KP4ED KP4EJ KP4ES KP4JFR KP4JRS KP4KD KP4KD/W4 KP4KE KP4LE KP4MD/P KP4MF KP4NS KP4PR KP4QQ KP4RD KP4RV KP4SX KP4TC KP4TF KP4VET KP4VOR KP4VP KP4Z KQ0C KQ0J KQ1F KQ2F KQ2M KQ2N KQ2RP KQ3E KQ3F KQ3S KQ4BR KQ4KX KQ4LA KQ4PK KQ4R KQ4ZM KQ4ZN KQ5J KQ5S KQ5U KQ6BN KQ6DV KQ6ES KQ6HW KQ6K KQ6P KQ6RS KQ7L KQ7M KQ7W KQ9H KQ9J KR0ARK KR0P KR0RD KR0T KR0U KR0VER KR1A KR1CW KR1DX KR1ST KR2AA KR2C KR2E KR2Q KR3DX KR3E KR3G KR3J KR4AE KR4AS KR4BD KR4F KR4FS KR4HU KR4LO KR4M KR4MT KR4NO KR4PI KR4SO KR4U KR4UA KR4V KR4X KR4YO KR4Z KR5D KR5J KR5R KR5RR/6 KR5X KR6BB KR6C KR6FH KR6LH KR6N KR6X KR7C KR7DX KR7LD KR7O KR7RK KR8T KR9E KR9L KR9U KS0AA KS0CW KS0KS KS0LV KS0M KS0MO KS0USA KS0X KS1J KS1N KS2G KS3D KS3K KS3N KS4BH KS4L KS4OT KS4Q KS4S KS4V KS4VOL KS4X KS4YX KS4ZD KS5A KS5H KS5V KS5Z KS5Z/VY2 KS6F KS6M KS6PD KS7AA KS7C KS7R KS7S KS7T KS7U KS7V KS8G KS9A KS9K KS9Q KS9V KS9W KT0A KT0DX KT0G KT0K KT0R KT1B KT1H KT1I KT1J KT1K KT1R KT1SGK KT3M KT3P KT3R KT3V KT3Y KT4AH KT4BOB KT4CB KT4E KT4FQ KT4FW KT4KA KT4LS KT4MU KT4NC KT4P KT4Q KT4RR KT4TL KT4WC KT4WX KT4XN KT4ZB KT5C KT5D KT5J KT5MR KT5OT KT5TE KT5V KT5W KT6DX KT6E KT6L KT6LA KT6V KT6Y KT7AZ KT7G KT7I KT7TT KT8D KT8K KT8TD KT8Y KT9B KT9C KT9L KT9T KU0D KU0G KU1CW KU1N KU1T KU1W KU2C KU2M KU2US KU2X KU3K KU3N KU3X KU4A KU4C KU4EB KU4FX KU4GC KU4H KU4MN KU4NY KU4PY KU4QG KU4UK KU4V KU4VY KU4WD KU4WS KU4YW KU5B KU6E KU6F KU6H KU6T KU6W KU7E KU7FM/KH2 KU7K KU7T KU7Y KU7Z KU8E KU8F KU8V KU8X KU9C KU9C/VP9 KU9E KU9V KU9Z KV0Q KV1E KV1J KV2C KV2K KV2R KV2X KV3D KV3W KV4AC KV4AJ KV4CQ KV4FZ KV4JK KV4K KV4KY KV4L KV4LV KV4MO KV4OP KV4PI KV4PY KV4QS KV4RH KV4SM KV4T KV4TG KV4TH KV4UD KV4UL KV4UP KV4VT KV4WN KV4ZY KV5J KV5V KV5W KV5WS KV5Y KV6O KV7AC KV7DX KV7J KV7N KV8P KV8Q KV8S KV9V KV9W KW0A KW0J KW0KW KW0RH KW1HF KW1K KW2J KW2T KW2Y KW3A KW3E KW3F KW3S KW3U KW3Z KW4AK KW4AM KW4AQ KW4AU KW4CQ KW4CR KW4CW KW4E KW4EN KW4FF KW4FQ KW4HN KW4HQ KW4J KW4JS KW4JX KW4JY KW4LU KW4LY KW4M KW4MB KW4NN KW4OV KW4PRO KW4QE KW4RI KW4RP KW4TI KW4TP KW4VA KW4VK KW4XC/HI9 KW4XP KW4YA KW5EBB KW5HP KW5RF KW6ACK KW6G KW6JIM KW6Q KW6S KW7A KW7D KW7MM KW7MM/VY2 KW7N KW7Q KW7R KW7WP KW7Y KW8KW KW8N KW8V KW9E KW9L KW9M KW9R KW9U KX0A KX0R KX1BK KX1E KX1G KX1W KX1X KX2A KX2H KX2P KX2S KX3C KX3DM KX4BI KX4DY KX4FR KX4GA KX4P KX4R KX4TT KX4VU KX4WB KX4X KX5C KX5M KX5SP KX5U KX6A KX6X KX6Y KX7DX KX7L KX7M KX7P KX7YT KX8AA KX8D KX8DX KX8V KX9DX KX9M KY0Q KY0R KY0W KY1KY KY2D KY3B KY3W KY3X KY4BP KY4D KY4DR KY4F KY4KY KY4L KY4M KY4NA KY4OD KY4OZ KY4XX KY4Z KY5M KY5U KY6AA KY6J KY6LA KY6M KY7M KY9B KY9J KY9KYO KZ0US KZ1A KZ1G KZ1M KZ1W KZ1X KZ2I KZ2R KZ2V KZ2W KZ3I KZ3MW KZ3T KZ3W KZ3X KZ4AAA KZ4AK KZ4D KZ4SKI KZ4U KZ4USA KZ5D KZ5DP KZ5E KZ5ED KZ5J KZ5MM KZ5OM KZ5V KZ6O KZ6T KZ6XX KZ7O KZ7X KZ7ZUL KZ8Y KZ9DX KZ9H KZ9V L33M L73D L77B L77D LA0CX LA0FA LA0FL LA1CCA LA1DSA LA1HL LA1K LA1LO LA1MFA LA1PHA LA1T LA1U LA1VFA LA1VNA LA1XFA LA2AB LA2ARA LA2FKA LA2G LA2GKA LA2HFA LA2IR LA2ONA LA2QJA LA2QM LA2US LA2WRA LA2XNA LA3BO LA3BPA LA3CLA LA3DNA LA3LJ LA3LJA LA3NUA LA3QPA LA3RK LA3RNA LA3S LA3T LA3TK LA3WAA LA3ZA LA3ZPA LA4AAA LA4C LA4CAA LA4CQ LA4GHA LA4IR LA4KQ LA4NL LA4O LA4OGA LA4PGA LA4PM LA4RT LA5FBA LA5HE LA5LJA LA5MDA LA5PRA LA5UF LA5YJ LA6CF LA6DFA LA6GX LA6IHA LA6K/P LA6M LA6OP LA6PB LA6PBA LA6SK LA6TPA LA6UL LA6VM LA6VQ LA6WDA LA6YIA LA6ZFA LA6ZP LA7AFA LA7AK LA7DFA LA7DHA LA7GIA LA7GNA LA7IJ LA7JO LA7MFA LA7NFA LA7Q LA7RJ LA7SI LA7THA LA7TN LA7USA LA7VK LA7XIA LA7XK LA8AJA LA8AW LA8CJ LA8FTA LA8HGA LA8LJA LA8OKA LA8OM LA8OOA LA8OSA LA8PDA LA8QQ/W4 LA8RTA LA9DAA LA9DJA LA9DK LA9H LA9JKA LA9NKA LA9OCA LA9OI LA9PTA LA9RY LA9TY LA9VFA LA9WDA LA9XGA LB0OG LB1AH LB1DH LB1GB LB1JG LB1LE LB1LG LB2EG LB2TB LB2TG LB2WG LB3RE LB4FH LB5BG LB5HG LB5WB LB6BG LB6KC LB7Q LB7ZG LB8CG LB8DC LB8IB LB8QG LB9RE LG5LG LM100UKA LM10HAM LM80Q LM80REX LM9L40Y LN1B LN2HQ LN2T LN3C LN4BBC LN4O LN5O LN7TTT LN8W LO5D LO7H LP1H LP1S LP7D LQ0D LQ7E LR1A LR1AW/X LR1E LR5FF LR5VV LS1UG LS4AA/5 LS4AA/D LS4AA/F LS4AA/H LT0H LT1F LT5I LT5V LT5X LT7F LT7H LU1ALF LU1AMH LU1AW LU1BJW LU1BR LU1DBQ LU1DK LU1DTL LU1DZ LU1EXR LU1FAM LU1FKR LU1FM LU1FQ LU1HLH LU1ICX LU1JHF LU1KCQ LU1MPK LU1QAH LU1UG LU1VM LU1VOF LU1WI LU1XP LU1XS LU1XS/O LU1ZI LU2BPM LU2DKN LU2DKT LU2DVI LU2DVI/H LU2DX LU2EE LU2EGI LU2FDA LU2FE LU2FFD LU2FGL LU2ICA LU2JCW LU2UF LU2UG LU2VCR LU2WA LU3ARE LU3CT LU3CW LU3DEI LU3DK LU3DX LU3FL LU3FR LU3HIP LU3HL LU3HO LU3HS LU3MAM LU3MCJ LU3VA LU3VE LU3XX LU4AA/D LU4AA/F LU4AT LU4DJB LU4DKN LU4DLL LU4DPL LU4DX LU4DXU LU4EG LU4EN LU4FPZ LU4HK LU4JEA LU4JHF LU4KC LU4OC LU4VSD LU4VZ LU4WG LU5AB LU5DF LU5DQ LU5DX LU5EVK LU5FB LU5FC LU5FCI LU5FF LU5FP LU5FYD LU5HCB LU5IBL LU5MEC LU5MT LU5OM LU5VV LU5YF LU6DC LU6DOT LU6DU LU6EBF LU6EDG LU6EF LU6ETB LU6EVD LU6FHO LU6FLZ LU6UAL LU6UO LU7ADN LU7CAW LU7DDX LU7DH LU7DIR LU7DUE LU7DV LU7DW LU7FP LU7FSM LU7FTS LU7HF LU7HN LU7HZ LU7MCJ LU7MT LU7VCH LU7YE LU7YN LU7YS LU7YW LU7YZ LU8ADX LU8DK LU8DPM LU8DY LU8DZJ LU8EEM LU8EHR LU8EKC LU8EOT LU8FAI LU8QT LU8VCC LU8VLE LU8VR LU8XW LU8Y LU8YE LU9CBL LU9DA LU9DAG LU9DDJ LU9DDS LU9DO LU9EHU LU9FHF LU9HW LU9MBY LU9MDH LU9VD LV1F LW1EUD LW1EX LW1HR LW2EE LW3DBW LW3DC LW3DG LW3DN LW4EF LW5DPG LW5DW LW5EAE LW5EE LW6DG LW6DW LW6EGE LW6EUR LW7DBA LW7DJ LW7DKG LW7DX LW8DQ LW9EKA LW9ETQ LX0RL LX1CC LX1DA LX1DKE LX1EA LX1ER LX1FC LX1FT LX1HD LX1IQ LX1KN LX1NO LX1RFJ LX1SG LX3DX LX4A LX7I LX7X LX8HQ LX8RTTY LX9DX LX9EG LX9LARU LY0HQ LY1BWB LY1CG LY1CT LY1CX LY1DZ LY1EE LY1FK LY1FW LY1K LY1M LY1N LY1NDN LY1R LY1SR LY1W LY1XA LY1YZ LY2AE LY2AJ LY2AT LY2AX LY2BAA LY2BAW LY2BBF LY2BGP LY2BIS LY2BKT LY2BMX LY2BNL LY2BOS LY2BUU LY2BVB LY2C LY2CG LY2CO LY2CQ LY2CV LY2CX LY2DV LY2DX LY2EN LY2EW LY2F LY2FN LY2GV LY2GW LY2H LY2HS LY2IJ LY2J LY2K LY2KA LY2KW LY2LE LY2LF LY2MC LY2MM LY2N LY2ND LY2NI LY2NK LY2NY LY2NZ LY2OF LY2OM LY2OU LY2PAD LY2PX LY2QT LY2RJ LY2SA LY2SM LY2SQ LY2T LY2TA LY2TS LY2W LY2X LY2XW LY2ZO LY3A LY3AB LY3B LY3BA LY3BB LY3BN LY3CW LY3CY LY3DA LY3G LY3I LY3IV LY3KS LY3NX LY3QA LY3UV LY3W LY3X LY3Z LY3ZM LY4A LY4BF LY4BP LY4G LY4K LY4L LY4MA LY4O LY4OO LY4Q LY4R LY4S LY4T LY5A LY5AM LY5CB LY5E LY5G LY5I LY5L LY5MM LY5O LY5P LY5Q LY5R LY5S LY5T LY5W LY5Y LY6A LY7A LY7M LY7Z LY8O LY9A LY9Y LZ/K1LZ LZ/S55M LZ/US5WEP LZ0M LZ105PBP LZ113RF LZ11C LZ180VL LZ1A LZ1AEY LZ1AQ LZ1BJ LZ1BP LZ1BY LZ1CF LZ1CL LZ1CNN LZ1D LZ1DM LZ1DMF LZ1DNY LZ1DPN LZ1DQ LZ1DS LZ1EP LZ1EV LZ1FCN LZ1FJ LZ1FY LZ1GE LZ1GU LZ1HM LZ1HO LZ1HW LZ1IA LZ1IKY LZ1IQ LZ1IU LZ1JZ LZ1KCO LZ1KDP LZ1KFM LZ1KU LZ1KZ LZ1LZS LZ1MC LZ1MDU LZ1MG LZ1MS LZ1ND LZ1NG LZ1NT LZ1NYK LZ1OJ LZ1QB LZ1QI LZ1QN LZ1QV LZ1QZ LZ1RA LZ1RF LZ1RW LZ1ST LZ1UBO LZ1UQ LZ1VB LZ1VCT LZ1VDR LZ1VKD LZ1VQ LZ1VVD LZ1WF LZ1YE LZ1YP LZ1YQ LZ1ZF LZ1ZJ LZ1ZM LZ1ZP LZ1ZU LZ1ZX LZ2016KM LZ2A LZ2AG LZ2AU LZ2BE LZ2CC LZ2CH LZ2CJ LZ2CW LZ2CWW LZ2DB LZ2DF LZ2DJA LZ2EG LZ2FL LZ2FM LZ2GS LZ2HA LZ2HM LZ2HN LZ2HR LZ2HT/P LZ2JA LZ2JE LZ2JOW LZ2JR LZ2KSB LZ2LE LZ2LT LZ2NG LZ2OJ LZ2OQV LZ2PG LZ2PL LZ2PS LZ2PT LZ2RM LZ2RS LZ2SC LZ2SX LZ2TF LZ2TU LZ2UW LZ2WNW LZ2WP LZ2XF LZ2YO LZ2ZD LZ2ZG LZ2ZY LZ3BB LZ3BF LZ3BG LZ3CQ LZ3DJ LZ3DP LZ3DX LZ3FN LZ3GW LZ3HI LZ3KB LZ3M LZ3PZ LZ3RM LZ3RN LZ3SD LZ3SM LZ3TL LZ3TY LZ3V LZ3XX LZ3YV LZ3YY LZ3ZQ LZ3ZZ LZ45YE LZ4A LZ4AE LZ4AW LZ4BU LZ4HYE LZ4SA LZ4T LZ4TX LZ4UX LZ5A LZ5CA LZ5E LZ5EE LZ5EO LZ5G LZ5GB LZ5IL LZ5K LZ5PL LZ5PX LZ5QZ LZ5R LZ5T LZ5U LZ5VK LZ5VV LZ5W LZ5XQ LZ5Z LZ60CF LZ65HSC LZ6B LZ6C LZ6F LZ6K LZ6Y LZ6Z LZ71ZZ LZ73PM LZ73TRC LZ7A LZ7AA LZ7D LZ7DX LZ7E LZ7EP LZ7H LZ7HQ LZ7J LZ7M LZ7MM LZ7O LZ7R LZ7S LZ7T LZ7U LZ7V LZ7W LZ7X LZ7Y LZ7Z LZ8A LZ8E LZ8R LZ8U LZ8Z LZ9A LZ9E LZ9R LZ9V LZ9W LZ9Z M0A M0AAC M0ABG M0ABR M0ACM M0ACM/P M0AFJ M0AFZ M0AID M0AUG M0BCT M0BJL M0BKB M0BPQ M0BTZ M0BUI M0BUL M0BWY M0BZZ M0CAR M0CCA M0CFM M0CFV M0CHK M0CKE M0CKX M0CLH M0CNP M0COM M0CSD M0CTP M0CUF M0CVO M0DBO M0DCD M0DCG M0DDI M0DDT M0DHO M0DMA M0DSL M0DSL/P M0DSR M0DVV M0DXR M0DYI M0DZB M0FAK M0GAV M0GDX M0GHQ M0GKC M0GME M0GMS M0GZR M0HDF M0HDX M0HFC M0HHG M0HJJ M0HOM M0HQB M0HRX M0HWD M0HZV M0ICL M0ICR M0IDL M0IEP M0IHT M0IKE M0IKT M0IMM M0INN M0IPU M0JAH M0JCE M0JCQ M0JGH M0JSX M0JWB M0KCM M0KDN M0KEB M0KED M0KPD M0KPW M0KWK M0KYI M0LAY M0LDM M0LDW M0LED M0LOB M0LRQ M0LTA M0MBF M0MCV M0MCX M0MDR M0MJA M0MLZ M0MNM M0MNV M0MPM M0MWC M0MXX M0NCG M0NIE M0NKR M0NOV M0NPQ M0NPT M0NQN M0NRD M0NST M0OFM M0OIC M0ORD M0ORO M0OSA M0OSH M0OXO M0P M0P/P M0PAM M0PAR M0PCB M0PCC M0PER M0PGX M0PIE M0PKZ M0PLA M0PLX M0PMH M0PMV M0PNN M0PSC M0PSW M0PWC M0PXS M0RBE M0RBG M0REG M0REG/P M0REX M0RGI M0RGZ M0RIU M0RLO M0RNR M0RNW M0ROF M0RYB M0SAR M0SBF M0SDM M0SDY M0SEL M0SEV M0SGO M0SHK M0SIY M0SNB M0SPA M0SQC M0SSK M0SSR M0TAZ M0TCL M0TDK M0TDW M0TEF M0TFO M0TFX M0TJU M0TQM M0TQR M0TRJ M0TTB M0TTT M0TWB M0TXK M0UKR M0UNI M0UNN M0URL M0URX M0USY M0VAA M0VCB M0VIE M0VKY M0VSE M0VSP M0WAF/P M0WAN M0WAY M0WCO M0WEL M0WGI M0WHC M0WLF M0WLY M0WPX M0WTR M0WUT M0WWA M0WYB M0WYH M0XAC M0XBF M0XDX M0XLT M0XOC M0XSX M0XUU M0YCQ M0YDB M0YKS M0YOL M0YTT M0YVG M0YYC M0ZGY M0ZID M0ZVB M0ZWW M1ACB M1AQO M1AZG M1BKL M1C M1CCY M1CEC M1CJE M1DBK M1DDD M1DDD/P M1DNC M1E M1EAK M1EYP M1EYP/P M1FCV M1G M1GEO M1GWZ M1K M1KMC M1LMO M1M M1MST M1N M1PTR M1PTT M1SLH M1TZR M1U M1VHT M2A M2E M2G M2L M2W M2X M3A M3BBF M3BNN M3BRR M3C M3D M3DJS M3EGU M3HXS M3I M3IGN M3JAC M3JFM M3LBY M3LDS M3ONL M3OZP M3P M3UFB M3W M3W/P M3XNK M3XYP M3ZXX M3ZZF M4A M4J M4M M4P M4U M4X M5A M5ADL M5ADZ M5AEO M5ARC M5B M5BFL M5D M5DIK M5DND M5GUS M5M M5O M5T M5Z M5ZAP M6AWG M6BIR M6BLB M6COJ M6DPY M6DTT M6EAM M6ENP M6ETL M6EYS M6FGA M6GBM M6GMV M6GVP M6HFH M6IDO M6KKZ M6KNS M6KWE M6LTT M6MPC M6NPL M6NTL M6O M6OCR M6PRR M6PZB M6RIN M6RVA M6SSV M6T M6USM M6VFT M6VGU M6W M6WCE M6WID M6YTU M6Z M6ZYK M7A M7C M7O M7P M7Q M7R M7T M7V M7W M7X M7Z M8A M8C M9A M9K M9T MC0SHL MD/DL1RTL MD/DL2AWG MD/DL4SVA MD/DL7VEE MD/OO4O MD0CCE MD0GLK MD0VMD MD1E MD1U MD2C MD2N MD4K MD7C MI/SP5MXB MI0AHH MI0AIH MI0AYR MI0BPB MI0DWE MI0GDO MI0GTA MI0HMY MI0HWG MI0JZZ MI0LJM MI0LLG MI0M MI0MVP MI0OBC MI0OIM MI0RRE MI0SAI MI0SDR MI0SLE MI0SMK MI0TMW MI0ULK MI0WWB MI0YLT MI0ZAO MI1ERL MI1M MI3OZX MI4I MI5AFK MI5I MI5JYK MI6GGF MI6IPB MI6JVC MI6TIJ MI6USC MJ/DL5SE MJ0ASP MJ0RTI MJ0RTI/P MJ5Z MJ7C MK0BUI MK0ZGY MM0AMW MM0AOQ MM0AWA MM0BHX MM0BMA MM0BQI MM0BSM MM0CBL MM0CCC MM0CIN MM0CKK MM0CPZ MM0CYR MM0DHQ MM0DXD MM0DXL MM0EAX MM0GHM MM0GYX MM0HNR MM0INS MM0JOM MM0JTV MM0LGS MM0LID MM0MOC MM0MUK MM0MUN MM0OKG MM0RYR MM0SJH MM0SKJ MM0SRY MM0SVK MM0T MM0TFU MM0TFU/P MM0TGH MM0TWX MM0TXT MM0WOA MM0XDG MM0ZBH MM1E MM1JWF MM2N MM2R MM2T MM3AWD MM3LLU MM3N MM3NRX MM3T MM3Z MM4D MM5PSL MM6PFT MM6PHG MM7M MM7X MM8Z MN0VFW MS0FNR MS0YHC MU0FAL MU0GSY MW0BFY MW0BRO MW0BYS MW0CND MW0CRI MW0CVT MW0DNF MW0EDX MW0IDX MW0JRX MW0JZE MW0KMS MW0MZM MW0SWA MW0TBI MW0UAA MW0UNN MW0VOW MW0YVK MW1MDH MW2I MW3FLI MW5B MW5HOC MW5R MW6FGJ MW6OWO MW7X MW8T MX0ADJ MX0IRN MX0SNB MX0WFF MX0YHA MX1SWL/A MZ5A MZ5B N0AB N0ABA N0AC N0AE N0AG N0AH N0AHS N0AIE N0AJN N0AKF N0AN N0ANP N0ANT N0AR N0AST N0AT N0AV N0AX N0AXE N0AXZ N0BAD N0BAK N0BAV N0BDS N0BE N0BK N0BM N0BQV N0BUI N0CAB N0CG N0CKR N0CM N0CN N0CU N0CVW N0DA N0DH N0DIM N0DJY N0DND N0DOW N0DQS N0DSN N0ECK N0ECT N0EE N0EF N0EI N0EKM N0EMU N0ENQ N0EO N0EZ N0FB N0FCD N0FN N0FUK N0FV N0FW N0FY N0GB N0GBR N0GC N0GIC N0GKO N0GMG N0GMT N0GOS N0GQR N0GZ N0HD N0HDR N0HF N0HI N0HIU N0HJZ N0HKK N0HR N0HU N0HV N0IAI N0IBT N0IJ N0IN N0IQM N0IRM N0IS N0IU N0IW N0IWN N0IWQ N0IZE N0JE N0JG N0JK N0JMN N0JPD N0JQ N0JWL N0JZ N0KA N0KBD N0KE N0KEW N0KJI N0KK N0KM N0KOE N0KQ N0KQ/6 N0KTK N0KV N0KVN N0KVN/7 N0KWA N0LD N0LEF N0LLH N0LNK N0LRA N0LRI N0LTX N0LY N0MA N0MDC N0MEU N0MH N0MHL N0MII N0MK N0ML N0MMA N0MOO N0MPM N0MQ N0MQJ N0MU N0NAC N0NAF N0NB N0NC N0NEE N0NI N0NR N0NZG N0ODK N0OJ N0OK N0OP N0OR N0OST N0OY N0PB N0PCL N0PDG N0PKT N0PLC N0PNQ N0POH N0PUI N0PVZ N0QE N0QET N0QLT N0QMQ N0QQ N0QQQ N0QX N0RB N0RC N0RN N0RQJ N0RR N0RSN N0RT N0RZ N0SAP N0SET N0SJ N0SK N0SLT N0SM N0SMX N0SO N0SQ N0SRF N0SS N0SSC N0SSM N0STL N0SZ N0TA N0TB N0TEK N0TF N0TK N0TKN N0TMU N0TOP N0TR N0TT N0TUZ N0TW N0UB N0UD N0UJJ N0UK N0UN N0UNS N0UR N0URW N0UU N0UV N0UW N0UY N0VAO N0VCY N0VD N0VFJ N0VHN N0VJJ N0VRM N0VVV N0WE N0WER N0WLX N0WM N0WNV N0WRK N0WVU N0XC N0XCR N0XGA N0XM N0XOC N0XR N0XT N0XXL N0YE N0YET N0YL N0YQ N0YY N0ZB N0ZFN N0ZH N0ZL N0ZNA N0ZS N0ZTO N1AC N1ADM N1AIA N1AKN N1ALO N1AM N1API N1ATO N1AW N1AYA N1BA N1BCL N1BNC N1BSA N1BUG N1BYT N1CC N1CDN N1CGP N1CHP N1CLG N1CPL N1CWR N1CWV N1DAY N1DBL N1DC N1DD N1DG N1DID N1DM N1DN N1DPK N1DRS N1EBQ N1ECC N1EEK N1EGS N1EK N1EMH N1EN N1ENG N1EOP N1ERS N1EU N1EV N1EVK N1EX N1EYE N1EZY N1FD N1FDX N1FF N1FI N1FIY N1FTP N1GB N1GBB N1GE N1GJ N1GKX N1GLT N1GMV N1GN N1GNV N1GPT N1GS N1GSA N1GTW N1HCW N1HD N1HEN N1HM N1HN N1HO N1HTB N1HTS N1IA N1IBC N1IBM N1ID N1IIX N1IK N1ILZ N1IME N1IMW N1INI N1IQC N1IX N1IXF N1JAO N1JBH N1JCM N1JCW N1JD N1JEO N1JEZ N1JHJ N1JI N1JM N1JP N1JQB N1JW N1KDO N1KEV N1KEZ N1KL N1KM N1KOZ N1KSC N1KW N1KWF N1LB N1LHP N1LI N1LID N1LN N1LQ N1LT N1LZF N1MD N1ME N1MFL N1MGO N1MH N1MIW N1MLO N1MM N1MUK N1NC N1NDN N1NK N1NN N1NQD N1NRP N1NSE N1NU N1NUA N1OIE N1OKL N1PGA N1PGQ N1PSX N1QAE N1QC N1QD N1QEH N1QEQ N1QV N1QY N1RB N1RCX N1RDN N1RES N1RLR N1RM N1RPH N1RR N1RU N1RWY N1SC N1SEA N1SEP N1SER N1SOH N1SP N1STN N1SUZ N1SV N1SZ N1TA N1TCH N1TEK N1TIM N1TL N1TM N1TO N1TQ N1TRC N1TY N1TYH N1UFO N1UIR N1UJ N1UK N1UNH N1UR N1UVK N1UXV N1UZ N1VAU N1VF N1VT N1VVV N1WC N1WDL N1WDS N1WGU N1WL N1WM N1WPU N1WQ N1WRK N1WW N1XCC N1XGH N1XIH/7 N1XJM N1XK N1XSS N1XX N1XXI N1XY N1YC N1YKH N1YW N1YZ N1ZN N1ZU N1ZX N1ZZ N1ZZN N2AAX N2ACQ N2ADE N2AE N2AIE N2AJO N2AMG N2AMW N2AN N2AN/1 N2APB N2ASD N2ATA N2ATB N2AUG N2AXX N2BA N2BB N2BEG N2BJ N2BNP N2BOW N2BQW N2BR N2BRG N2BTX N2BZD N2CEC N2CEI N2CEP N2CG N2CI N2CJN N2CJO N2CK N2COP N2CPR N2CQ N2CU N2CW N2DD N2DDX N2DEQ N2DM N2DPF N2DQ N2DSW N2DVQ N2ED N2EDY N2EI N2EJI N2EM N2ENM N2ESD N2ESH N2ESP N2ESP/4 N2ETJ N2EY N2FF N2FH N2FMS N2FQ N2FRB N2FRH N2FYE N2FZC N2GA N2GBR N2GC N2GDU N2GG N2GHR N2GHZ N2GM N2GOT N2GTS N2GXJ N2GZ N2HFO N2HMM N2HN N2HO N2HYG N2IC N2IEN N2IGW N2IIE N2IJ N2IK N2IMM N2IVN N2IXA N2JBJ N2JCS N2JE N2JEN N2JF N2JFL N2JJ N2JNE N2JNZ N2JS N2KA N2KDZ N2KED N2KHH N2KI N2KOF N2KOJ N2KPS N2KR N2KW N2KWO N2LBR N2LBZ N2LEC N2LEE N2LH N2LJM N2LK N2LL N2LO N2LRB N2LT N2LTV N2LVG N2MA N2MAC N2MEE N2MF N2MGT N2MHI N2MM N2MO N2MTG N2MUN N2NC N2NDY N2NF N2NI N2NKX N2NL N2NNF N2NO N2NQF N2NS N2NS/6 N2NT N2NVH N2NYR N2NYU N2OA N2OB N2OBX N2OCS N2OHP N2OO N2OT N2OTK N2OUV N2PA N2PEQ N2PHI N2PKT N2PP N2PPI N2PPL N2PQJ N2PQW N2PSL N2PTF N2QT N2RHL N2RI N2RJ N2RK N2RM N2RM/4 N2ROQ N2RR N2RRA N2SCJ N2SF N2SG N2SLO N2SO N2SQW N2SR N2SRK N2ST N2SU N2SUB N2TA N2TCB N2TEV N2TIF N2TK N2TKD N2TM N2TOM N2TOX N2TRX N2TSQ N2TTT N2TU N2TUX N2TX N2TXG N2TXV N2UHI N2UJN N2UK N2UN N2UT N2UU N2UZ N2UZK N2UZQ N2VA N2VAJ N2VIG N2VM N2VR N2VV N2VW N2WF N2WG N2WK N2WKS N2WLS N2WM N2WN N2WOF N2WPT N2WSY N2WWD N2WZP N2XJ N2XMA N2XNB N2XQM N2YB N2YBB N2YDD N2YET N2YI N2YIE N2YN N2YNF N2YO N2YPI N2YT N2ZL N2ZN N2ZX N2ZZ N3ACP N3AD N3ADF N3AE N3AEG N3AF N3AFT N3AIU N3ALN N3AM N3ANO N3AO N3AQC N3ATE N3ATQ N3AZZ N3BAH N3BB N3BBF N3BBQ N3BEN N3BGI N3BHW N3BLS N3BUD N3BUO N3CAL N3CAU N3CB N3CDO N3CI N3CKI N3CM N3CMH N3CO N3COB N3CR N3CRM N3CRT N3CS N3CU N3CW N3CXV N3CY N3CZ N3DAP N3DEB N3DI N3DNE N3DPL N3DRA N3DRL N3DRX N3DTG N3DUE N3DXX N3EA N3EB N3ED N3EEI N3EH N3EIL N3EKO N3EMA N3EMF N3EMZ N3EN N3ER N3ER/1 N3EU N3EWW N3FCP N3FES N3FJ N3FJP N3FM N3FQ N3FTO N3FYD N3GAR N3GBM N3GD N3GGT N3GJB N3GLZ N3GMR N3GOV N3GS N3GTO N3GTY N3GWR N3GWZ N3GY N3HBV N3HBX N3HCN N3HCP N3HE N3HEE N3HI N3HIH N3HPL N3HQN N3HSJ N3HU N3HWH N3IC N3IGO N3IOD N3IQ N3IW N3JB N3JDR N3JES N3JG N3JHS N3JIX N3JJT N3JNX N3JOD N3JON N3JPV N3JS N3JT N3JXB N3KAE N3KBF N3KCJ N3KCR N3KER N3KF N3KK N3KN N3KS N3KV N3KYZ N3LBJ N3LFC N3LH N3LI N3LL N3LPJ N3LRP N3LT N3LY N3LZV N3MA N3MAV N3MBH N3MFT N3MIE N3MIQ N3MK N3MNT N3MON N3MOW N3MRA N3MVX N3MWQ N3MX N3MYB N3NBT N3NC N3ND N3NGE N3NJ N3NR N3NRN N3NT N3NTF N3NTJ N3NVA N3NY N3NZ N3OC N3ODT N3OJL N3OJT N3OUC N3OW N3OZT N3PDT N3PEC N3PF N3PPH N3PS N3PV N3PVQ N3QCM N3QE N3QK N3QQH N3QXC N3RA N3RAY N3RC N3RC/6 N3RD N3RDV N3RG N3RJ N3RM N3RN N3ROC N3RR N3RS N3RSG N3RTX N3RUA N3RUM N3RW N3RZU N3SB N3SD N3SEE N3SJN N3SL N3SQD N3SRC N3SRO N3ST N3SW N3SY N3TB N3TBF N3TD N3TDE N3TE N3TG N3TIR N3TM N3TO N3TP N3TVV N3TWM N3TWT N3UA N3UE N3UPD N3UPN N3UR N3US N3VJ N3VKM N3VN N3VOP N3VQH N3VQW N3VS N3VYZ N3VZ N3WBJ N3WD N3WGH N3WM N3WMC N3WT N3WZR N3XF N3XKB N3XL N3XM N3XOF N3XPD N3XRU N3XVL N3XX N3YEA N3YMS N3YPJ N3YUG N3YZ N3ZA N3ZK N3ZL N3ZNI N3ZP N3ZRA N3ZV N3ZZ N4AA N4AAA N4AB N4ABN N4ACH N4ACW N4ADC N4ADK N4ADX N4AET N4AF N4AGG N4AKA N4ALN N4AOE N4APR N4AR N4ARM N4ARO N4ASA N4ASF N4ASX N4ATJ N4ATT N4AU N4AVV N4AW N4AWL N4AWP N4AX N4AYE N4AYV N4BAA N4BAT N4BC N4BCB N4BCC N4BCD N4BFR N4BOS N4BP N4BQQ N4BRF N4BRJ N4BWB N4BYY N4BZJ N4CAX N4CCB N4CCJ N4CD N4CF N4CJ N4CNZ N4CO N4COB N4CPO N4CU N4CV N4CVN N4CW N4CWK N4CWP N4CWZ N4DAB N4DAG N4DB N4DCT N4DD N4DE N4DGN N4DH N4DJ N4DJT N4DL N4DLA N4DLR N4DLT N4DPU N4DSL N4DT N4DTF N4DU N4DW N4DXI N4DXS N4EDC N4EDI N4EE N4EEB N4EEV N4EFS N4EH N4EK N4ELM N4EMG N4ES N4ESS N4EWT N4EXA N4FCG N4FF N4FN N4FNB N4FP N4FR N4FW N4FX N4FY N4GBK N4GCP N4GG N4GI N4GK N4GM N4GNO N4GO N4GU N4HA N4HAI N4HAL N4HB N4HER N4HES N4HH N4HID N4HN N4HOS N4HU N4HWH N4HXI N4HY N4IAG N4IDH N4IHV N4II N4IJ N4IK N4IL N4IN N4IQ N4IR N4IS N4IVE N4IY N4IYX N4JBN N4JDU N4JED N4JF N4JG N4JGD N4JGO N4JM N4JOW N4JPG N4JR N4JRG N4JRI N4JRP N4JT N4JTQ N4KC N4KCD N4KD N4KE N4KEZ N4KG N4KGL N4KH N4KHI N4KJU N4KKD N4KM N4KP N4KS N4KV N4KW N4KXO N4KZ N4LA N4LAG N4LAK N4LBX N4LDF N4LEQ N4LF N4LJS N4LMN N4LNR N4LPD N4LR N4LRA N4LT N4LU N4LV N4LZ N4MAR N4MAW N4MB N4MBN N4MEO N4MF N4MI N4MIC N4MIK N4MIO N4MJ N4MKA N4MM N4MQU N4MRM N4MTB N4MTT N4MUH N4MUJ N4NA N4NE N4NM N4NO N4NQ N4NQY N4NR N4NS N4NTO N4NX N4NYK N4OA N4OGW N4OJ N4OME N4OO N4OSV N4OT N4OX N4PAD N4PB N4PBC N4PCC N4PD N4PF N4PLC N4PLF N4PN N4PQX N4PR N4PSE N4PUM N4PWG N4PYI N4QBS N4QET N4QH N4QM N4QQ N4QS N4QV N4QWB N4QWF N4QWZ N4RA N4RAT N4RDL N4RDW N4REV N4RI N4RJ N4RJV N4RLD N4RLG N4RM N4RMK N4RS N4RSP N4RSS N4RU N4RV N4RZ N4RZP N4SDB N4SEC N4SF N4SFR N4SJJ N4SJW N4SLM N4SLR N4SOC N4SSD N4SSI N4ST N4STG N4SV N4SVC N4SWD N4SZF N4TB N4TGD N4THC N4THM N4TL N4TMM N4TOL N4TP N4TSA N4TT N4TTE N4TTI N4TTT N4TWX N4TY N4TZ N4TZN N4UA N4UB N4UC N4UCM N4UCU N4UEZ N4UF N4UFP N4UGS N4UH N4UHZ N4UK N4UL N4UM N4UP N4USB N4USS N4UU N4UVC N4UW N4UWS N4VA N4VC N4VDL N4VG N4VH N4VI N4VLK N4VLQ N4VN N4VUG N4VV N4VZ N4WD N4WDC N4WDT N4WE N4WGL N4WI N4WJW N4WMB N4WO N4WOT N4WQH N4WSK N4WW N4WZ N4XAD N4XD N4XFA N4XFF N4XH N4XL N4XM N4XN N4XYZ N4YA N4YCI N4YDU N4YHC N4YOU N4YSA N4YTM N4ZAK N4ZC N4ZEW N4ZI N4ZQ N4ZR N4ZZ N5AA N5AC N5ACA N5AF N5AFY N5AHS N5AIU N5AJD N5AN N5AQ N5ATM N5ATT N5AU N5AUL N5AUS N5AW N5AW/0 N5AYB N5BA N5BCA N5BMD N5BO N5BSA N5CEG N5CR N5CW N5CWA N5CWF N5DAL N5DDX N5DG N5DHB N5DJR N5DM N5DO N5DRG N5DT N5DTT N5DTX N5DUX N5DX N5DX/2 N5DY N5EBD N5EE N5EIL N5EKW N5EM N5EMS N5ENU N5EPA N5EPU N5FG N5FIW N5FNC N5FO N5FPW N5FUN N5FW N5FXZ N5GD N5GE N5GGG N5GH N5GI N5GNA N5GW N5HC N5HDX N5HEK N5HI N5HMH N5HV N5HYP N5HZ N5HZS N5IA N5II N5IJE N5IJY N5INP N5INV N5IR N5IT N5JB N5JED N5JJ N5JLC N5JM N5JO N5JR N5KAE N5KB N5KD N5KDA N5KDV N5KF N5KGY N5KIP N5KLE N5KM N5KNE N5KO N5KPK N5KUC N5KW N5KWD N5KWE N5KWN N5KXI N5LB N5LFE N5LJL N5LNL N5LNO N5LOC N5LTR N5LUL N5LXI N5LZB N5LZI N5MDB N5ME N5MEG N5MF N5MJL N5MKY N5ML N5MM N5MNO N5MOA N5MT N5MV N5MZX N5NA N5NAA N5NHJ N5NN N5NOM N5NPM N5NU N5OAO N5OB N5OCO N5OE N5OF N5PA N5PAC N5PD N5PEF N5PHT N5PJ N5PR N5PT N5PU N5PV N5QJ N5QN N5QQ N5RB N5REG N5RGV N5RHS N5RKK N5RL N5RLM N5RM N5RMQ N5RMS N5RN N5RP N5RR N5RZ N5SAN N5SEZ N5SHI N5SJ N5SKH N5SLY N5SMQ N5SMQ/4 N5SR N5SYV N5TDX N5TF N5TGL N5TI N5TIT N5TJ N5TLH N5TM N5TOO N5TT N5TU N5TX N5TY N5UD N5UI N5UJ N5UL N5UM N5UR N5UUA N5UWY N5VGK N5VI N5VPC N5VR N5VU N5VX N5VYS N5WA N5WC N5WJ N5WK N5WMQ N5WNG N5WR N5WS N5WVR N5WW N5WX N5XE N5XJ N5XTC N5XTR N5XU N5XXN N5XZ N5YA N5YE N5YT N5YYF N5YZ N5YZA N5ZC N5ZK N5ZKK N5ZM N5ZMP N5ZN N5ZO N5ZT N5ZVW N5ZY N5ZZ N6AA N6AB N6ABT N6ADO N6AJ N6AJS N6ALO N6AN N6AR N6AX N6BCT N6BHX N6BIS N6BIZ N6BM N6BOB N6BT N6BV N6BX N6CCL N6CHU N6CKV N6CL N6CMF N6CW N6CY N6DA N6DBF N6DBS N6DD N6DE N6DKP N6DNU N6DQ N6DW N6DXX N6DZ N6DZR N6EB N6ED N6EE N6EE/1 N6EEB N6EED N6ENO N6EP N6ER N6ET N6ETO N6EV N6EWT N6FC N6FE N6FMF N6FRX N6FS N6FVY N6GA N6GAT N6GD N6GEO N6GL N6GL/KY7 N6GLI N6GP N6GQ N6GWH N6GY N6HC N6HE N6HEW N6HI N6HK N6HY N6IC N6IE N6IJ N6IV N6JC N6JDX N6JN N6JNL N6JO N6JRL N6JS N6JV N6JW N6JZ N6KHO N6KI N6KIM N6KJ N6KL N6KN N6KOG N6KS N6KSF N6KT N6KW N6KZ N6LB N6LDP N6LEE N6LF N6LHL N6LHZ N6LJF N6LL N6LN N6LZD N6MA N6MB N6MDV N6MI N6MJ N6ML N6MM N6MON N6MSY N6MU N6MUF N6MW N6MWA N6MXU N6MZ N6NC N6NEE N6NF N6NFO N6NG N6NHI N6NKT N6NL N6NNA N6NO N6NR N6NT N6NU N6NZ N6OI N6OIL N6OJ N6ONC N6OPR N6ORB N6OV N6OW N6PAT N6PAZ N6PE N6PEQ N6PF N6PG N6PM N6PN N6PSE N6PUC N6PZ N6PZK N6QD N6QDO N6QEK N6QQ N6QW N6QZS N6RC N6RDP N6RIK N6RK N6RM N6RND N6RO N6RQW N6RRY N6RU N6RV N6RVI N6RW N6RZR N6SD N6SE N6SJ N6SJV N6SL N6SN N6SPP N6SS N6SU N6SUZ N6TA N6TCE N6TCZ N6TEM N6TFP N6TH N6TI N6TP N6TPT N6TQ N6TRI N6TU N6TV N6TVN N6TZV N6UD N6UOE N6US N6USP N6UTC N6VH N6VI N6VNI N6VOH N6VR N6VV N6VXM N6VZ N6WBL N6WDC N6WDK N6WIN N6WJN N6WM N6WMD N6WS N6XEW N6XG N6XI N6XT N6YDP N6YEU N6YEU/8 N6YFM N6YG N6YMM N6YMM/7 N6YOX N6YVW N6ZD N6ZE N6ZFO N6ZI N6ZM N6ZZO N7AAL N7AC N7AGF N7AHE N7AKC N7AMA N7AME N7AN N7ANT N7ARN N7AT N7ATB N7AU N7BAN N7BBX N7BD N7BFO N7BKS N7BLN N7BPA N7BT N7BU N7BV N7BXX N7CE N7CGD N7CKJ N7CPM N7CVZ N7CW N7CWC N7CZ N7DB N7DC N7DD N7DED N7DF N7DJD N7DK N7DLV N7DMO N7DQ N7DR N7DV N7DXT N7DZI N7EA N7EC N7EDK N7EIE N7EKD N7EL N7ELB N7ELL N7ENN N7EO N7EPD N7ESR N7ESU N7ET/DU7 N7EXP N7FFT N7FG N7FKI N7FLT N7FO N7FUL N7GCO N7GL N7GOA N7GP N7GR N7GTE N7GVV N7HG N7HGH N7HLS N7IG N7ILO N7INV N7IP N7IPG N7IR N7IV N7IW N7JAP N7JB N7JI N7JMO N7JO N7JPF N7JT N7JW N7JX N7JXS N7JY N7KA N7KDT N7KE N7KF N7KFL N7KN N7KQ N7KRN N7KU N7LE N7LFX N7LOX N7LPS N7LR N7LRG N7LT N7LUF N7MB N7MDS N7MIT N7MJ N7MM N7MOT N7MPY N7MU N7MWV N7MZ N7MZW N7NAV N7NBS N7NG N7NKD N7NM N7NPQ N7NR N7NT N7OC N7OEE N7OG N7ON N7OQ/6 N7PGI N7PI N7PP N7PR N7PS N7PV N7PVA N7PWC N7QAX N7QJ N7QMT N7QNM N7QNO N7QOZ N7QQ N7QS N7QT N7QU N7QY N7RBP N7RC N7RCQ N7RCS N7RD N7RH N7RJA N7RK N7RN N7RO N7RP N7RQ N7RVD N7RY N7SKR N7SMI N7SMT N7SVI N7SYD N7TB N7TCO N7TES N7TEW N7TK N7TM N7TMS N7TR N7TSK N7TTO N7TW N7UA N7UJJ N7UK N7US N7UVH N7UW N7VD N7VF N7VJ N7VM N7VPN N7VR N7VS N7VZU N7WA N7WB N7WFY N7WR N7WRO N7WS N7WSH N7WU N7WW N7WY N7WY/0 N7XA N7XAH N7XCZ N7XGH N7XM N7XR N7XS N7XU N7XX N7XY N7YA N7YK N7YQ N7ZA N7ZG N7ZO N7ZUF N8ACC N8AGU N8AHH N8AID N8AKO N8AP N8AR N8ATS N8AYY N8BB N8BBD N8BC N8BE N8BEE N8BEG N8BEX N8BI N8BJQ N8BL N8BNE N8BRO N8BUS N8BV N8CC N8CDY N8CEP N8CGY N8CIJ N8CL N8COM N8CPA N8CPW N8CWU N8DAW N8DC N8DE N8DEA N8DEZ N8DGD N8DJX N8DNA N8DRG N8DT N8DX N8DXR N8EA N8EGZ N8EHW N8ERL N8ES N8ET N8EW N8FE N8FF N8FGB N8FKF N8FLW N8FM N8FTJ N8FXH N8FYL N8GAS N8GBU N8GEO N8GIJ N8GLS N8GOU N8GU N8GU/VO1 N8HAR N8HKU N8HM N8HMG N8HO N8HP N8HSD N8HTG N8IBR N8IDA N8II N8IIV N8IK N8IL N8IPO N8IRC N8IVE N8IVN N8IW N8JE N8JF N8JGG N8JK N8JS N8KAM N8KDX N8KG N8KH N8KHU N8KIE N8KIM N8KIP N8KKG N8KQ N8KR N8KR/9 N8KRB N8KSG N8KV N8LA N8LC N8LCU N8LGP N8LJ N8LR N8LR/7 N8LRG N8MAR N8ME N8MIK N8MPF N8MR N8MRC N8MSA N8MSM/HI8 N8MWK N8MZ N8NA N8NAV N8NB N8NCP N8NFE N8NIJ N8NJA N8NK N8NM N8NN N8NPM N8NQN N8NR N8NTX N8NX N8NYE N8NYI N8OC N8OCJ N8OGI N8OH N8OHO N8OK N8OKR N8OL N8OO N8OP N8OQ N8OT N8OY N8PBP N8PCN N8PE N8PIB N8PPF N8PR N8PVL N8PW N8PWM N8QIK N8QMU N8QXC N8RA N8RAC N8RB N8REA N8RJP N8RMA N8RMZ N8RPA N8RR N8RT N8RU N8RV N8RW N8RWK N8RY N8SBE N8SDR N8SFO N8SK N8SL N8SNM N8SPM N8SS N8SSE N8SSH N8STY N8SYC N8TCP N8TD N8TEM N8TFD N8THN N8TL N8TR N8TUT N8TXI N8UE N8UKD N8UM N8URX N8UXI N8VK N8VKX N8VQG N8VV N8VW N8VY N8VZ N8WCR N8WGE N8WI N8WNA N8WRL N8WS N8WXQ N8XA N8XC N8XCO N8XE N8XEE N8XGS N8XI N8XKZ N8XQM N8XTH N8XX N8YN N8YQX N8YXR N8ZA N8ZFH N8ZFM N8ZI N8ZKT N8ZM N8ZSA N8ZVB N8ZVX N9AAC N9ADG N9AFU N9AI N9AJ N9AK N9AKR N9AMW N9APK N9ARB N9AU N9AUG N9AW N9AZR N9AZZ N9BBE N9BC N9BD N9BD/6 N9BDF N9BK N9BL N9BLK N9BOS N9BRZ N9BSO N9BT N9BUB N9BX N9CDX N9CHN N9CIF N9CIQ N9CK N9CK/7 N9CM N9CO N9CVB N9DBS N9DCH N9DFD N9DHX N9DJ N9DK N9DM N9DMA N9DR N9DT N9EAJ N9EAX N9EF N9EM N9EMC N9EN N9EP N9ETB N9EXM N9EXU N9EYG N9EZ N9FDE N9FKL N9FN N9FZV N9GB N9GBB N9GH N9GMT N9GQA N9GUN N9GUU N9GXI N9GZ N9HDE N9HF N9HJB N9ID N9IGP N9IHZ N9INK N9IO N9ISN N9IVO N9IW N9JF N9JR N9JRB N9JTB N9JYJ N9JZN N9JZY N9KIT N9KJT N9KL N9KO N9KPH N9KR N9KX N9KY N9KZ N9LAH N9LB N9LF N9LIS N9LJX N9LJY N9LL N9LOT N9LQ N9LXF N9LYE N9MBR N9MKZ N9MM N9MR N9MS N9MSG N9MT N9MVO N9MW N9NA N9NA/7 N9NAZ N9NB N9NBC N9NC N9NDI N9NE N9NEZ N9NIX N9NM N9NQA N9NS N9NT N9NTC N9NWI N9NYX N9OE N9OF N9OI N9OJC N9OK N9ONJ N9OOO N9OVC N9OZT N9PS N9PWM N9PZR N9QAP N9QGV N9QIY N9QK N9QS N9QVQ N9QWV N9RC N9RD N9RJM N9RJV N9RLO N9RP N9RU N9RV N9SAB N9SB N9SD N9SE N9SES N9SJ N9SJA N9SQE N9SSW N9SW N9SZ N9TBE N9TC N9TES N9TF N9TF/7 N9TGR N9TH N9TK N9TV N9TX N9UA N9UCV N9UFO N9UKX N9UOM N9UPG N9US N9USA N9UUP N9UXU N9UY N9VAO N9VI N9VPV N9WEW N9WFT N9WG N9WK N9WKW N9WL N9WVM N9XCO N9XGC N9XHN N9XHU N9XIM N9XO N9XP N9XX N9YA N9YB N9YK N9YKE N9YLE N9YLZ N9YZA N9ZI N9ZM N9ZOE N9ZWY N9ZYL NA0ED NA0L NA0N NA1CC NA1DX NA1LZ NA1RA NA1RR NA1S NA2AA NA2CC NA2JM NA2M NA2N NA2NA NA2NY NA2R NA2U NA2X NA3D NA3D/1 NA3DX NA3E NA3F NA3M NA3M/3 NA3M/4 NA3V NA4A NA4C NA4CW NA4EA NA4FM NA4K NA4M NA4MM NA4NA NA4O NA4RR NA4W NA4X NA5AR NA5DX NA5F NA5G NA5GA NA5J NA5NN NA5Q NA5U NA5V NA5YO NA5Z NA6AF NA6C NA6L NA6M NA6MB NA6MG NA6NA NA6O NA6ST NA7DX NA7OM NA7P NA7RH NA7TB NA7UT NA8B NA8N NA8V NA8W NA9A NA9J NA9L NA9M NA9RB NA9U NA9US NA9VY NB0O NB0Z NB1N NB1U NB2S NB3I NB3R NB3T NB4C NB4F NB4M NB5T NB6M NB7A NB8F NB8I NB9O NC0B NC0DX NC0JW NC0P NC1A NC1I NC1M NC1WX NC2W NC3P NC3Y NC4A NC4AK NC4AZ NC4B NC4CW NC4EF NC4KW NC4ME NC4MI NC4NH NC4ON NC4RT NC4S NC4SA NC4SB NC4SC NC4SU NC4VA NC4WB NC4WD NC4WS NC5G NC5T NC5Y NC6B NC6D NC6DX NC6K NC6Q NC6R NC6RJ NC6V NC7J NC7L NC7M NC8B NC8C NC8N NC8T NC9A NC9W ND0C ND0J ND0L ND0MN ND0N ND1Y ND2K ND2O ND2T ND3D ND3N ND3R ND4G ND4K ND4V ND4X ND4XE ND4Y ND4Z ND6H ND6M ND6P ND6U ND7J ND8D ND8DX ND8L ND9E ND9G ND9Z NE0A NE0DA NE0F NE0N NE0U NE0US NE1AR NE1B NE1C NE1F NE1HD NE1QP NE1RD NE2I NE2U NE2V NE2X NE3F NE3H NE3I NE3K NE3MD NE4AA NE4AM NE4DX NE4EA NE4H NE4N NE4RD NE4S NE4TN NE5E NE5IL NE5JK NE5LL NE5OK NE5W NE6AA NE6I NE6LE NE6M NE6O NE6R NE6V NE7D NE7DX NE7JN NE7X NE8J NE8O NE8O/4 NE8P NE8S NE8Z NE9H NE9M NE9U NF0N NF0R NF1A NF1G NF1J NF1L NF1O NF1R NF2NY NF2RS NF2Z NF3C NF3R NF4A NF4E NF4GA NF5A NF5FF NF6A NF6H NF6R NF7D NF7E NF7R NF7T NF8J NF8M NF8O NF8R NF9D NF9V NG0C NG0E NG0G NG0M NG0T NG0Z NG1I NG1P NG1R NG2C NG2D NG2F NG2H NG2O NG2P NG2S NG2X NG3J NG3R NG3X NG4C NG4D NG4L NG4S NG5R NG6R NG6S NG7A NG7M NG7O NG7W NG7Z NG9A NG9M NG9M/0 NG9R NG9Z NH0J NH2DX NH6AB NH6HI NH6I NH6JC NH6T/NZ4 NH6T/W4 NH6V NH6WZ NH6Y NH7A NH7AA NH7NJ NH7PE NH7RO/W5 NH7U NI0C NI0G NI0R NI0T NI1S NI2B NI2M NI2Q NI3I NI3K NI4TG NI5DX NI5L NI5M NI5T NI5W NI6A NI6BB NI6G NI6IW NI6W NI7F NI7R NI7T NI8R NI8W NI8Z NI9H NJ0F NJ0L NJ0U NJ1F NJ1H NJ1Q NJ1T NJ2E NJ2F NJ3I NJ3K NJ4F NJ4O NJ4Q NJ4U NJ4V NJ4X NJ4Y NJ6G NJ6K NJ6P NJ6W NJ7K NJ7Y NJ8G NJ8J NJ8M NJ8U NJ8V NJ9C NJ9L NJ9Q NJ9R NJ9T NJ9U NJ9Y NK0A NK0E NK0S NK1K NK1N NK1Z NK2C NK3L NK3U NK3Y NK4A NK4DX NK4I NK4K NK4L NK4N NK4P NK5B NK5G NK5U NK5W NK6A NK7J NK7L NK7U NK7Z NK8N NK8O NK8Q NK8X NK9G NK9H NK9I NK9O NK9Y NL7D NL7QC NL7S NL7V NL7W NL8F NM1C NM1G NM1J NM1JY NM1Y NM2D NM2L NM2O NM4V NM5M NM5O NM5S NM5TF NM5U NM5WB NM5Z NM6E NM6E/5 NM6K NM6V NM7D NM7G NM8O NM8R NM8W NM9K NM9O NM9P NN0JS NN0O NN0PE NN0Q NN0U NN1N NN1SS NN2DX NN2K NN2L NN2NN NN2T NN3Q NN3RP NN3U NN3V NN3W NN4AA NN4BJ NN4DF NN4DX NN4DX/7 NN4F NN4GG NN4H NN4II NN4J NN4JM NN4K NN4MM NN4NC NN4RB NN4RR NN4SA NN4SS NN4X NN5E NN5G NN5J NN5K NN5O NN5T NN5V NN5XX NN5Z NN6AA NN6C NN6CH NN6D NN6DX NN6EE NN6LL NN6NN NN6T NN6XX NN7A NN7AZ NN7CW NN7F NN7NN NN7SS NN7ZZ NN8L NN8MU NN8P NN8R NN9C NN9K NO0L NO2C NO2D NO2J NO2N NO2T NO2X NO3M NO4AH NO4FX NO4GA NO4J NO4MM NO4Y NO5F NO5G NO5N NO5RM NO5V NO5W NO6F NO6I NO6M NO6T NO6YM NO7B NO7DE NO7E NO7GX NO7R NO7T NO8C NO8D NO8J NO9C NO9E NO9G NO9O NO9Y NP2A NP2GG NP2J NP2L NP2N NP2P NP2Q NP2X NP3A NP3B NP3CW NP3DM NP3IR NP3LY NP3MR NP3N NP3OT NP3P NP3RE NP3U NP3X NP3XF NP3YL NP4A NP4AW NP4DX NP4ET NP4G NP4H NP4JL NP4KB NP4P NP4R NP4RA NP4WW NP4X NP4Z NQ0D NQ0K NQ0S NQ1C NQ2F NQ2W NQ4I NQ4K NQ5K NQ5M NQ5O NQ6B NQ6L NQ6N NQ6N/8 NQ6S NQ7R NQ8O NQ8Y NQ9A NR0L NR0Q NR0R NR0T NR1I NR1R NR1X NR2C NR2H NR3C NR3K NR3M NR3O NR3X NR4C NR4J NR4M NR4N NR5M NR5Q NR6E NR6O NR6Q NR7DX NR7ON NR7RR NR7T NR8U NR9K NR9Q NS0D NS0I NS0M NS0R NS0TA NS1O NS1RA NS1S NS1T NS2H NS2X NS3C NS3L NS3T NS3X NS4C NS4F NS4J NS4X NS5J NS5Z NS6C NS6D NS6E NS6T NS7A NS7B NS7E NS7I NS7K NS7V NS8H NS8O NS8Q NS8T NS9DX NS9I NS9N NS9X NT0AF NT0F NT0V NT0Y NT0Z NT1K NT2A NT2DR NT2I NT2X NT4A NT4H NT4K NT4MM NT4TS NT4W NT4Z NT5I NT5TM NT5V NT6X NT7B NT7J NT7R NT8V NT9E NT9F NT9M NT9O NU0C NU0P NU0Q NU0T NU0W NU1B NU1G NU1O NU2F NU2J NU2M NU2Q NU3A NU3B NU3D NU3H NU3K NU4B NU4N NU4O NU4X NU4Y NU5A NU5DE NU6C NU6L NU6O NU6S NU6XB NU6Y NU7D NU7F NU7J NU7P NU7R NU7Y NU8Z NV0S NV1O NV1P NV1Q NV1W NV2K NV3Y NV4A NV4B NV4G NV5E NV5F NV5M NV7JB NV8B NV8N NV8Q NV9L NV9S NV9X NW0G NW0K NW0M NW0X NW1E NW1P NW2I NW2K NW2M NW3DC NW3H NW3U NW3Y NW3Y/1 NW4J NW4KU NW4N NW4TF NW4V NW5H NW5Q NW5Y NW6H NW6P NW6V NW7D NW7E NW7M NW7R NW8E NW8F NW8S NW8U NW9H NW9S NX0I NX0U NX1P NX1P/7 NX1T NX1Z NX2X NX3L NX3T NX3U NX3V NX3Z NX4N NX5D NX5M NX5O NX6D NX6I NX6T NX7DX NX8E NX8G NX8G/5 NX8Y NX9B NX9G NX9Q NX9T NX9Y NY0A NY0P NY0T NY0V NY1E NY1H NY1S NY2MC NY2NY NY2PO NY3A NY3B NY3C NY3DX NY4A NY4D NY4G NY4I NY4S NY5B NY6C NY6DX NY6Y NY7N NY8K NY8T NY9H NY9P NY9X NZ0T NZ1I NZ1Q NZ1R NZ1U NZ2Z NZ3D NZ3O NZ4CW NZ4DX NZ5A NZ5E NZ5M NZ5O NZ5X NZ6G NZ6K NZ6Q NZ7M NZ8C NZ8D NZ8J NZ8Y NZ9D NZ9M NZ9R OA4/XQ3SA OA4AI OA4DW OA4DX OA4O OA4SS OA4TT OA6Q OA85O OC0E OD5NH OD5NJ OD5PY OD5TX OD5YA OD5ZZ OE0HQ OE11SO/P OE11WG OE17IOTA OE1ALW OE1CIW OE1DWC OE1EBC OE1GAQ OE1H OE1HFC OE1HHB OE1KFR OE1KLW OE1MBB OE1PAB OE1PEW OE1PPA OE1RFU OE1SGU OE1SSS OE1SZW OE1TKS/P OE1TKW OE1VMC OE1WEU OE1XA OE1XAW OE1XHQ OE1XRW OE2017SWG/P OE2ASL OE2AYM OE2BZL OE2CAL OE2DYL OE2E OE2GEN OE2IGP OE2IJL OE2K OE2KHM OE2KNN OE2LCM OE2LRO OE2M OE2ROL OE2S OE2SNL OE2UKL OE2VEL OE2WNL OE2WUL OE36KC OE3A OE3AIS OE3BKC OE3BLA OE3BOB OE3CBA OE3CDS OE3CHC OE3DEC OE3DMA OE3DSA OE3DSB OE3DXA OE3EMC OE3EVA OE3FFC OE3FVU OE3GCU OE3GDS OE3GSA OE3HAU OE3HTC OE3I OE3IDE OE3IPC OE3JTB OE3JWC OE3K OE3KAB OE3KEU OE3KLU OE3KNC OE3LHB OE3MCS OE3MDB OE3MWS OE3MZC OE3NEC OE3NHW OE3OLW OE3OOG OE3ORW OE3OSB OE3PFS OE3RTB OE3SGU OE3TWA OE3ULA OE3VET OE3VSW OE3WMA OE3WMW OE3XMA OE3YSC OE3ZK OE4AAC OE4B OE4DXP OE4ETA OE4JHW OE4NKB OE4PWW OE4VIE OE4VMB OE4WBW OE4WWL OE4XLC OE5ABI OE5BGN OE5BWN OE5CCN OE5CSP OE5CWO/K0 OE5CYL OE5DI OE5DLM OE5GA OE5GWP OE5HEL OE5HIL OE5JSL OE5KE OE5KFM/P OE5OHO OE5PEN OE5POP OE5RAL OE5REO OE5RFO OE5RI OE5RLM OE5SLN OE5SMU OE5T OE5TKM OE5UAL OE5WHN OE5X OE5XDL OE5XIL OE5XRL OE5XRL/P OE6AKD OE6ATD OE6FTE OE6GND OE6HLF OE6HTG OE6HWF OE6HZG OE6IMD OE6JTD OE6KDG OE6KYG OE6LUG OE6MBG OE6MDF OE6MMF OE6PID OE6RAD OE6RCD OE6RDD OE6SQD OE6SWG/P OE6TQG OE6U OE6WTF OE6XAD OE6XG OE6YWF OE6Z OE7/IZ3GNG OE7AJT OE7FMJ OE7GJ OE7LVI OE7PGI OE7PKJ OE8ANK OE8BAD OE8HAQ OE8HIK OE8MKQ OE8Q OE8TED OE8TLK OE8TTR OE8XBH OE8XDX OE9CBV OE9DAI OE9GHV OE9ICI OE9KFV OE9LWV OE9MCV OE9MDV OE9MON OE9NFI OE9R OE9RJJ OE9SEI OE9SLH OE9TZV OE9WGI OF0RJ OF0V OF0Z OF100FI OF100FI/1 OF100FI/2 OF100FI/3 OF100HQ OF100Y OF10A OF1AF OF1F OF1KB OF1LAR OF1NJN OF1RX OF1SIC OF1TD OF1TM OF1Z OF2BBM OF2BFG OF2FNR OF2FRM OF2FUW OF2IPA OF2K OF2KM OF2LNH OF2LZI OF2MZA OF2PLA OF3BCX OF3D OF3FM OF3JF OF3OJ OF3P OF3R OF4BCS OF4BEN OF4BNP OF5C OF5C/P OF5CZ OF5XK OF5Z OF5ZA OF6GAZ OF6HZH OF6MW OF6NIO OF7CW OF7GGX OF7KA OF7MN OF7UG OF8CW OF8JJ OF8KVY OF8L OF8LQ OF8TV OF8WW OF9A OF9UFO OF9W OF9X OG0Z OG1D OG1M OG1X OG25YL OG2K OG2K/0 OG2M OG2N OG2P OG2W OG30OJ OG3A OG3G OG3I OG3MS OG3P OG3R OG4T OG4X OG50ARI OG55W OG5A OG5N OG6N OG73X OG7A OG7F OG7M OG7O OG7X OG8T OG90AA OG9W OH/SM0W OH/SP7KT OH0/DL6UAA OH0AM OH0B OH0BR OH0I OH0JFP OH0JWL OH0R OH0RJ OH0TA OH0V OH0X OH0Z OH100FIN OH10A OH1AF OH1AYQ OH1B OH1BV OH1CH OH1D OH1EB OH1F OH1HB OH1HKN OH1KB OH1KF OH1LA OH1LAR OH1LEU OH1LWZ OH1MA OH1MIJ OH1MN OH1MRR OH1ND OH1NDA OH1NJN OH1NPW OH1NX OH1O OH1POR OH1QX OH1RX OH1SIC OH1TD OH1TM OH1TN OH1TS OH1TX OH1VR OH1WZ OH1XFE OH1Z OH2BAD OH2BAH OH2BAI OH2BBG OH2BBM OH2BBT OH2BC OH2BCD OH2BCK OH2BEV OH2BFP OH2BH OH2BKX OH2BLD OH2BN OH2BO OH2BP OH2BPI OH2BR OH2BS OH2BUW OH2BV OH2CK OH2CV OH2DA OH2DP OH2EA OH2ECG OH2EO OH2ET OH2EUU OH2EV OH2FNR OH2FT OH2FTA OH2GBA OH2GEK OH2GI OH2HAN OH2HOD OH2HQ OH2HZ OH2ID OH2II OH2IS OH2JLN OH2JSR OH2K OH2KI OH2KM OH2KW OH2LNH OH2LP OH2LU OH2LZC OH2LZI OH2MA OH2MAS OH2MGA OH2MQ OH2MZB OH2N OH2NC OH2NJN OH2NT OH2PLA OH2PM OH2PQ OH2PT OH2PW OH2RA OH2T OH2TA OH2TI OH2UA OH2V OH2VZ OH2WI OH2XF OH2XX OH2YL OH2YOTA OH2ZZ OH3AA OH3AC OH3BCX OH3BHL OH3BU OH3CT OH3CV OH3D OH3EPZ OH3EX OH3FM OH3GD OH3GLY OH3GZ OH3HS OH3I OH3JF OH3JP OH3JR OH3KAV OH3KQ OH3KRH OH3KX OH3MC OH3NAQ OH3NB OH3NDH OH3NHF OH3NLP OH3NU OH3OJ OH3OT OH3P OH3PE OH3RB OH3RF OH3RT OH3SR OH3UU OH3WR OH3WW OH3XR OH3Z OH4A OH4BNP OH4EA OH4EBD OH4JK OH4KA OH4MCV OH4MS OH4TY OH4X OH4XX OH5AG OH5BK OH5BM OH5BQ OH5BW OH5C OH5CX OH5CY OH5CZ OH5DX OH5ELX OH5EP OH5EUY OH5GIO OH5HUZ OH5JJL OH5KT OH5KW OH5MNJ OH5NE OH5NQ OH5NZ OH5RP OH5TB OH5TS OH5UFO OH5UQ OH5VT OH5XB OH5XK OH5XO OH5Y OH5YU OH5Z OH5ZA OH5ZZ OH6AC OH6BA OH6BG OH6CT OH6DX OH6E OH6ECM OH6EHZ OH6EOG OH6EPM OH6FSG OH6FXZ OH6GAW OH6GAZ OH6GDX OH6GHI OH6GQ OH6JD OH6JE OH6K OH6LEZ OH6LF OH6LHB OH6LI OH6LW OH6MW OH6NC OH6NEQ OH6NG OH6NIO OH6OS OH6QU OH6R OH6RE OH6RM OH6TN OH6VI OH6VV OH6X OH6XA OH6XG OH6Z OH7A OH7CW OH7EBA OH7GGX OH7HM OH7JL OH7KB OH7KBF OH7KC OH7KD OH7KNM OH7MFO OH7MHL OH7MN OH7MP OH7MRU OH7NW OH7R OH7RJ OH7SV OH7UG OH7VS OH7WN OH7WP OH7XI OH8A OH8CW OH8EJW OH8F OH8FAL OH8GBO OH8GET OH8JK OH8KA OH8KVA OH8KVY OH8L OH8LE OH8MBN OH8MJ OH8NV OH8NW OH8OR OH8SR OH8TU OH8UV OH8WR OH8WW OH8X OH90IARU OH9A OH9BS OH9GGY OH9GIT OH9UFO OH9VD OH9W OI3V OJ0B OJ0BH OJ0DX OK/LZ3SF OK1AAZ OK1ABF OK1AD OK1ADM OK1AGE OK1AHJ OK1AIT OK1AJY OK1AMF OK1AMM OK1AOU OK1AOV OK1AOZ OK1APV OK1APY OK1AR OK1ARO OK1ATH OK1ATP OK1AUC OK1AVG OK1AVV OK1AWC OK1AWG OK1AWH OK1AXA OK1AXB OK1AXG OK1AY OK1AYD OK1AYE OK1AYU OK1AYW OK1BA OK1BJ OK1BLU OK1BMW OK1BN OK1C OK1CF OK1CID OK1CLD OK1CRM OK1CS OK1CT OK1CW OK1CZ OK1DAR OK1DBE OK1DBS OK1DCF OK1DCP OK1DCS OK1DDV/P OK1DEK OK1DEZ OK1DG OK1DHP OK1DIG OK1DJS OK1DKO OK1DKR OK1DM OK1DMP OK1DO OK1DOL OK1DOR OK1DOT OK1DOY OK1DOZ OK1DPU OK1DQT OK1DRX OK1DRY OK1DSN OK1DST OK1DTC OK1DUB OK1DUG OK1DVA OK1DVK OK1DWC OK1DWF OK1DWQ OK1DX OK1DXK OK1DXW OK1DZD OK1EK OK1EP OK1ES OK1EW OK1FAB OK1FAI OK1FAK OK1FC OK1FCA OK1FCR OK1FED OK1FFU OK1FGD OK1FGS OK1FHD OK1FHI OK1FIG OK1FIM OK1FKD OK1FKM OK1FLC OK1FLK OK1FLT OK1FMG OK1FMX OK1FOG OK1FPQ OK1FPS OK1FRD OK1FRO OK1FV OK1FZM OK1GK OK1GS OK1GSB OK1GTH OK1GU OK1HCG OK1HEH OK1HFM OK1HFP OK1HGM OK1HRA OK1HWB OK1HWI OK1HX OK1IAS OK1IBP OK1IE OK1IEC OK1ITK OK1IVO OK1IVU OK1JAR OK1JBL OK1JD OK1JFP OK1JOC OK1JOK OK1JPO OK1JR OK1JST OK1JVS OK1JVT OK1JX OK1K OK1KA OK1KC OK1KCF OK1KEO OK1KHA OK1KI OK1KMU OK1KMU/P OK1KQH OK1KSL OK1KSO OK1KT OK1KTI OK1KUO OK1KUW OK1KZ OK1LL OK1LO OK1LST OK1LV OK1MAM OK1MAW OK1MBZ OK1MDK OK1MGW OK1MI OK1MIG OK1MIQ OK1MJA OK1MKU OK1MLP OK1MMN OK1MNV OK1MNW OK1MPU OK1MQY OK1MSL OK1MSP OK1MV OK1MZB OK1NE OK1NF OK1NG OK1NP OK1NS OK1NZ OK1OA OK1OEA OK1OM OK1OPT OK1OX OK1P OK1PBU OK1PCB OK1PFM OK1PI OK1PMA OK1PX OK1QA OK1QM OK1RCA OK1RIG OK1RMR OK1RP OK1RPL OK1RR OK1RZ OK1SI OK1SLA OK1SP OK1T OK1TA OK1TC OK1TD OK1TE OK1TFH OK1TN OK1TNM OK1TRW OK1TVL OK1UBA OK1UG OK1UKV OK1ULL OK1USP OK1USU OK1UXH OK1UYR OK1VAM OK1VD OK1VDJ OK1VHV OK1VK OK1VKC OK1VPO OK1VTR OK1VVT OK1W OK1WCF OK1WF OK1WMJ OK1XBF OK1XC OK1XPP OK1XQ OK1XV OK1YM OK1YR OK1ZE OK2ABU OK2AF OK2AP OK2BBD OK2BBJ OK2BBQ OK2BDF OK2BEH OK2BEN OK2BFN OK2BGB OK2BGN OK2BH OK2BHD OK2BHL OK2BIQ OK2BJ OK2BJK OK2BLD OK2BMA OK2BME OK2BMI OK2BMU OK2BND OK2BNF OK2BOB OK2BQ OK2BQZ OK2BRJ OK2BRQ OK2BRS OK2BRV OK2BRX OK2BSN OK2BSQ OK2BTK OK2BUJ OK2BUT OK2BV OK2BWK OK2BXA OK2BXU OK2BXW OK2BYH OK2BYW OK2BZ OK2BZE OK2CLW OK2CMW OK2CQR OK2D OK2DIK OK2DM OK2DW OK2EA OK2EC OK2EQ OK2ET OK2EW OK2FB OK2FD OK2FI OK2FN OK2FYM OK2GD OK2GG OK2GU OK2GX OK2HBR OK2HBY OK2HF OK2HFC OK2HIJ OK2HMS OK2IH OK2ILD OK2IT OK2JE OK2JNB OK2KFK OK2KG OK2KJU OK2KOJ OK2KPS OK2KR OK2KUB OK2KWX OK2LA OK2LC OK2LF OK2LI OK2LW OK2MBP OK2MC OK2MG OK2MRJ OK2NAJ OK2NO OK2OBW OK2OCT OK2OLD OK2OLS OK2ON OK2OZL OK2PA OK2PAD OK2PAY OK2PBG OK2PBR OK2PCL OK2PDK OK2PDN OK2PDT/P OK2PEM OK2PEX OK2PF OK2PHI OK2PIM OK2PIP OK2PMF OK2PRW OK2PVX OK2PX OK2PYA OK2QA OK2QX OK2R OK2RB OK2RJC OK2RN OK2RO OK2RRR OK2RU OK2RVM OK2RZ OK2SAI OK2SAR OK2SFP OK2SG OK2SGW OK2SGY OK2SLS OK2SPD OK2SPS OK2SSJ OK2SWD OK2TBC OK2TC OK2TRN OK2TS OK2TUH OK2UHP OK2UNC OK2UZ OK2VA OK2VIR OK2VK OK2VV OK2VWB OK2VX OK2W OK2WED OK2WKW OK2WM OK2WMC OK2WY OK2YZ OK2ZA OK2ZD OK2ZDL OK2ZI OK2ZO OK2ZU OK2ZV OK2ZW OK3A OK3AA OK3C OK3DV OK3EQ OK3M OK3MO OK3NR OK3PJ OK3R OK3RM OK3TM OK3VM OK4A OK4AS OK4AV OK4DZ OK4FF OK4FX OK4GP OK4K OK4KOP OK4MM OK4NN OK4OK OK4PA OK4RQ OK4Z OK5D OK5ET OK5IM OK5M OK5MK OK5MM OK5N OK5NW OK5OK OK5PM OK5RP OK5SA OK5SWL OK5T OK5W OK5WF OK5Z OK5ZH OK5ZZ OK6AA OK6AB OK6AZ OK6CX OK6DJ OK6K OK6MA OK6N OK6O OK6OK OK6RW OK6T OK6TT OK6TW OK6W OK6Y OK7AN OK7AW OK7CM OK7FL OK7GU OK7K OK7KW OK7LO OK7M OK7MT OK7N OK7O OK7PN OK7PY OK7RJ OK7SX OK7T OK7U OK7V OK7W OK7XA OK7XC OK7Y OK7Z OK8BN OK8DD OK8DM OK8KM OK8NM OK8WW OK8XX OL0A OL0C OL0M OL0W OL1A OL1B OL1C OL1M OL1R OL1X OL1Z OL2N OL2T OL2U OL2X OL3A OL3E OL3M OL3R OL3Z OL4A OL4N OL4W OL5A OL5B OL5E OL5J OL5M OL5T OL5W OL5Y OL6A OL6HQ OL6P OL6W OL6X OL7C OL7G OL7HQ OL7M OL7O OL7P OL7S OL7T OL7Z OL8M OL8R OL8W OL90IARU OL9A OL9M OL9R OL9Z OM0A OM0AM OM0ATP OM0CS OM0DC OM0M OM0MW OM0WR OM1AX OM1DK OM1DR OM1LA OM1TD OM1XQ OM20OTC OM2AAZ OM2AD OM2AGN OM2AM OM2BK OM2DT OM2IV OM2KM OM2MM OM2MW OM2RA OM2UL OM2VL OM2WX OM2XA OM2XW OM2Y OM2ZZ OM3BA OM3BH OM3CAQ OM3CAZ OM3CDN OM3CFF OM3CGN OM3CM OM3CMK OM3CND OM3COR OM3CPF OM3CUG OM3CW OM3DQ OM3DX OM3ED OM3EY OM3GI OM3IAG OM3IM OM3KFF OM3KFO OM3KHT OM3KWZ OM3KXR OM3KZA OM3LK OM3LU OM3LZ OM3MV OM3MW OM3PA OM3PQ OM3PR OM3R OM3RJB OM3RM OM3RMY OM3RRC OM3RWB OM3SEM OM3SX OM3TBG OM3TIX OM3TLE OM3TSZ OM3TWM OM3TWT/P OM3VL OM3WAN OM3WZ OM3XX OM3YAD OM3YCA OM3YDX OM3ZBG OM3ZWA OM4A OM4AIK OM4ANJ OM4ANO OM4ARW OM4AY OM4CI OM4DU OM4DW OM4EX OM4J OM4KK OM4M OM4MM OM4MO OM4O OM4Q OM4SX OM4WW OM4X OM50CND OM5ALC OM5AW OM5CD OM5CX OM5DP OM5DW OM5DX OM5KP OM5LR OM5MX OM5NA OM5NJ OM5NL OM5RM OM5TE OM5TZ OM5UM OM5VS OM5WW OM5XX OM5ZU OM5ZW OM65X OM6A OM6ADN OM6AL OM6AT OM6DN OM6FM OM6H OM6MS OM6MW OM6RM OM6SM OM6TX OM6WW OM7A OM7AB OM7AG OM7AS OM7AT OM7AW OM7AX OM7CM OM7JG OM7JM OM7KW OM7LM OM7LW OM7M OM7NO OM7OM OM7PY OM7RC OM7RU OM7SR OM7TJ OM7WFF OM7YC OM7ZM OM8A OM8AA OM8ADM OM8ADU OM8AHJ OM8AIK OM8AQ OM8AT OM8CD OM8CW OM8DD OM8FF OM8FR OM8HG OM8JP OM8KD OM8KT OM8LA OM8LD OM8LM OM8MF OM8ON OM8ST OM8VL ON1AEY ON1TO ON2AD ON2CQ ON2CYV ON2JF ON2KMJ ON2KP ON2VHF ON2XXX ON3ANY ON3AR ON3AT ON3BEN ON3BM ON3BZ ON3CGC ON3CQ ON3DFD ON3DI ON3DV ON3DWG ON3EA ON3FM ON3FU ON3FZT ON3GDM ON3GEO ON3HRL ON3JMV ON3KDN ON3LAD ON3LAW ON3LX ON3MK ON3MPA ON3ND ON3PGL ON3PHD ON3PU ON3SAT ON3SS ON3TNT ON3VP ON3VS ON3WM ON4AA ON4AAV ON4ACW ON4AEF ON4AGT ON4AHF ON4AIQ ON4AMC ON4AMP ON4AMY ON4ANE ON4APU ON4AR ON4ARF ON4ARJ ON4AST ON4ATK ON4ATW ON4AUT ON4AXU ON4AYM ON4BAG ON4BHQ ON4BIT ON4BR ON4BWT ON4CAB ON4CAF ON4CAS ON4CAU ON4CBA ON4CBN ON4CCN ON4CDX ON4CFB ON4CHN ON4CJU ON4CKE ON4CKM ON4CLF ON4CP ON4CT ON4DCU ON4DN ON4DY ON4FG ON4FN ON4GO ON4GPE ON4HRT ON4HVO ON4IA ON4IZ ON4JY ON4KCY ON4KEB ON4KGA ON4KHG ON4KLG ON4KMB ON4KML ON4KNP ON4LD ON4LDP ON4LDU ON4LEX ON4LG ON4LOU ON4LY ON4MCL ON4MD ON4MHO ON4MW ON4ON ON4PJA ON4PQ ON4PS ON4QJ ON4QX ON4RO ON4STA ON4SV ON4TC ON4TO ON4TV ON4UN ON4UP ON4UZ ON4VDV ON4VP ON4VT ON4WU ON4WW ON4WY ON5AFB ON5AM ON5ARY ON5AV ON5DE ON5DI ON5EX ON5FP ON5GA ON5GF ON5GM ON5GQ ON5HY ON5JD ON5JT ON5LGS ON5LL ON5LNS ON5LS ON5LS/A ON5NQ ON5NT ON5OO ON5PB ON5PV ON5RO ON5RZ ON5SV ON5SY ON5TB ON5TC ON5TO ON5TQ ON5UJ ON5UK ON5UN ON5UR ON5WL ON5WU ON5YT ON6AB ON6AT ON6BR ON6BV ON6CQ ON6DP ON6ED ON6EF ON6FC ON6FDP ON6FV ON6GMT ON6HH ON6HV ON6HX ON6HZ ON6IA ON6KE ON6KZ ON6LEO ON6LO ON6LR ON6MH ON6MM ON6MR ON6NA ON6NB ON6NG ON6NL ON6NW ON6OO ON6PJ ON6PQ ON6PX ON6PY ON6QB ON6QO ON6QR ON6QRP ON6QZ ON6RR ON6SA ON6SAT ON6SM ON6SX ON6UF ON6UL ON6VL ON6VOX ON6WY ON6XY ON6YH ON6YX ON6ZK ON6ZM ON6ZV ON7AAU ON7AB ON7AH ON7AR ON7ARQ ON7BA ON7BJ ON7BT ON7CC ON7CFZ ON7DY ON7EH ON7ERA ON7ET ON7FL ON7GLF ON7GO ON7GR ON7HLU ON7HM ON7HX ON7IDX ON7KC ON7KEC ON7LO ON7LX ON7MU ON7NT ON7NW ON7PQ ON7PS ON7PX ON7QL ON7RR ON7RU ON7TA ON7TK ON7TQ ON7TR ON7UF ON7UP ON7VD ON7WI ON7XN ON7YA ON7ZM ON7ZV ON7ZZ ON8AJ ON8AK ON8BB ON8BE ON8DM ON8DX ON8GE ON8GT ON8KW ON8NT ON8ON ON8PHD ON8PU ON8SGA ON8UK ON8VP ON8VT ON8WR ON8ZA ON9CFG ON9CLJ ON9EEE OO0O OO2O OO4O OO4P OO4T OO5G OO6T OO7J OO7P OO7R OO7W OO9O OP0HQ OP0P OP0PPY OP1A OP1P OP2A OP3A OP3AR OP4A OP4BAG OP4D OP4DN OP4F OP4K OP4T OP4U OP4W OP5T OP5TC OP6AT OP6FC OP6OM OP6WY OP7B OP7EH OP7F OP7M OP7SS OP7T OQ4A OQ4B OQ4Q OQ4T OQ4U OQ5M OQ6A OQ7Q OR0A OR1X OR1Z OR2F OR2R OR3A OR3R OR4A OR4K OR4T OR4U OR5T OR6T OR7B OR7R OR7W OR8A OS0C OS0M OS0S OS4U OS5U OS8A OS8D OT1L OT1S OT1V OT2A OT2X OT4A OT4CLM OT4I OT4R OT4T OT5A OT5X OT5X/P OT6M OT6V OT7E OT7X OT8T OT9Z OU1E OU2DX OU2I OU2M OU2P OU2V OU2W OU2X OU3A OU4N OU4O OU5U OU7A OV1RR OV2T OV3T OV3X OV5TC OV90EDR OV90ER OX3LX OX3XR OX5M OX5T OX7RST OX90EDR OY1CT OY1OF OY4M OY9JD OY9R OZ0A OZ0AP OZ0B OZ0J OZ0JX OZ0MJ OZ0NAVY OZ0Q OZ0TE OZ11A OZ1AA OZ1AAR OZ1AARHUS OZ1ACB OZ1ADL OZ1AXG OZ1BCG OZ1BZJ OZ1CTK OZ1D OZ1DAE OZ1DGQ OZ1DJJ OZ1DSD OZ1DTF OZ1DWK OZ1DYI OZ1ELY OZ1GNN OZ1HDF OZ1HNE OZ1HQ OZ1HX OZ1IKY OZ1IVA OZ1JTE OZ1JU OZ1JVX OZ1KEF OZ1KIH OZ1KJG OZ1KKH OZ1KVM OZ1LCG OZ1LCW OZ1LFI OZ1LO OZ1LQO OZ1NF OZ1NLD OZ1OP OZ1RD OZ1TDS OZ1TJ OZ1TTT OZ1ZD OZ1ZE OZ2A OZ2AR OZ2BKK OZ2CVT OZ2DAN OZ2PBS OZ2PJ OZ2RF OZ2TF OZ2U OZ30EU OZ3ABU OZ3AEV OZ3BJ OZ3SM OZ4ACK OZ4B OZ4CG OZ4EDR OZ4FA OZ4FF OZ4MD OZ4MU OZ4NA OZ4O OZ4RT OZ4SOP OZ4UN OZ4VW OZ5AGJ OZ5BAL OZ5BD OZ5D OZ5DX OZ5E OZ5E/P OZ5GOL OZ5HP OZ5JC OZ5KU OZ5NJ OZ5RF OZ5RM OZ5TO OZ5UR OZ6ABL OZ6AGX OZ6ARC OZ6CM OZ6GH OZ6KS OZ6OG OZ6OM OZ6PI OZ6TL OZ7A OZ7AKT OZ7AM OZ7BQ OZ7BQ/P OZ7D OZ7DK OZ7EA OZ7EDR OZ7HB OZ7IF OZ7IS OZ7KU OZ7OX OZ7RI OZ7RJ OZ7RQ OZ7X OZ7YL OZ7YY OZ8AE OZ8AGB OZ8AP OZ8BV OZ8CT OZ8PG OZ8RH OZ8SW OZ8UW OZ8X OZ8ZS OZ90IARU OZ9GA/P OZ9KL OZ9QV OZ9V OZ9VO P29LL P29RR P33P P33W P3F P3X P3Z P40A P40AA P40AH P40AUA P40C P40FA P40L P40LE P40M P40P P40R P40S P40T P40W P40X P40XA P40XM P40XX P40Y P43E P43L P43R P44N P44W P44X P45A P49MR P49X P49Y PA0A PA0AA PA0ABM PA0AGA PA0AKN PA0ATY PA0AWH PA0B PA0BWL PA0CGB PA0CMU PA0CT PA0DIN PA0DVD PA0EMO PA0FAW PA0FLE PA0FVH PA0GJV PA0GMS PA0HWB PA0IA PA0INA PA0JED PA0JHS PA0JNH PA0JSE PA0KBN PA0LEG PA0LIE PA0LUX PA0M PA0MAW PA0MBD PA0MBJ PA0MIR PA0MJM PA0O PA0PSA PA0QRB PA0QX PA0RBA PA0RBO PA0RDY PA0RHA PA0RRA PA0RRS PA0RSM PA0SAN PA0SHY PA0SKP PA0TCA PA0VAJ PA0VDV PA0VHA PA0VLA PA0VLY PA0WKI PA0WLB PA0WRS PA0WTO PA0WYS PA0XAW PA0ZAV PA0ZH PA10A PA146EU PA150LIM PA16CC PA17CC PA1A PA1AT PA1AW PA1B PA1BDO PA1BK PA1BX PA1CA PA1CC PA1CPA PA1CW PA1CWI PA1DI PA1DV PA1FD PA1FJ PA1FNW PA1FP PA1FR PA1H PA1HC PA1HR PA1JEP PA1JIM PA1K PA1KEK PA1LEX PA1LIO PA1M PA1MAR PA1MR PA1MUC PA1MV PA1MVL PA1NHZ PA1NL PA1OZU PA1P PA1PE PA1RT PA1RVG PA1SVM PA1T PA1TK PA1TO PA1VC PA1VD PA1WBU PA1X PA2A PA2ALF PA2C PA2CHM PA2CVD PA2DK PA2DKW PA2DW PA2EVR PA2F PA2GRU PA2IP PA2JWN PA2KW PA2LO PA2LP PA2PCH PA2PKZ PA2REH PA2RG PA2RU PA2S PA2SAM PA2SWL PA2TA PA2TMS PA2W PA2WCB PA2Z PA3A PA3AAU PA3AAV PA3ACA PA3AGF PA3AGN PA3AIN PA3AIW PA3AJI PA3AKE PA3AKP PA3AM PA3AQL PA3ARM PA3AT PA3ATN PA3ATZ PA3BNT PA3BQC PA3BUD PA3BUL PA3BWD PA3BWK PA3BWS PA3BXR PA3C PA3CAU PA3CJP PA3CLQ PA3CMF PA3CNI PA3CSG PA3CUI PA3CVI PA3CVJ PA3CVR PA3CWN PA3CXB PA3D PA3DAT PA3DBS PA3DCU PA3DCX PA3DDP PA3DJY PA3DLP PA3DMA PA3DP PA3DRL PA3DTR PA3DUU PA3DVA PA3DZM PA3EAQ PA3ECJ PA3ECL PA3ECZ PA3EEG PA3EFW PA3EHT PA3EKE PA3ELQ PA3EMN PA3EPA PA3EPO PA3EPX PA3EQN PA3EQO PA3EVY PA3EWG PA3EWP PA3EYC PA3EYK PA3EZC PA3FKY PA3FOE PA3FQA PA3FQH PA3FWM PA3FWZ PA3FYG PA3FYM PA3FYS PA3GAT PA3GBK PA3GCU PA3GCV PA3GDD PA3GDG PA3GDY PA3GEO PA3GGB PA3GRM PA3GUU PA3GVI PA3GVQ PA3GWH PA3GXF PA3GYK PA3GZX PA3HCC PA3HCL PA3HEB PA3HFX PA3HGF PA3HGP PA3HHT PA3HK PA3I PA3J PA3JD PA3JEM PA3JQD PA3KVE PA3KVL PA3MET PA3MM PA3MRO PA3N PA3PCV PA3RIS PA3T PA3TG PA3VTC PA4A PA4AO PA4B PA4DN PA4DO PA4EL PA4G PA4GB PA4GDR PA4HM PA4J PA4JJ PA4M PA4MRS PA4MSA PA4N PA4O PA4T PA4VHF PA4WG PA4WM PA4XA PA5ABW PA5AD PA5CA PA5CM PA5CW PA5FN PA5GU PA5HA PA5JD PA5JS PA5KT PA5M PA5MW PA5O PA5P PA5PJB PA5PR PA5SKY PA5TT PA5V PA5VK PA5VL PA5WK PA5WT PA6A PA6AA PA6ANT PA6B PA6DX PA6FR PA6GR PA6HQ PA6NB PA6NH PA6T PA6V PA6W PA6X PA6Y PA7A PA7AL PA7AM PA7BAS PA7DA PA7DN PA7F PA7FA PA7FB PA7JWC PA7LV PA7MM PA7PYR PA7RA PA7TT PA7WW PA85SVS PA8AD PA8E PA8H PA8KW PA8N PA8VK PA8ZB PA90IARU PA9CC PA9CW PA9DD PA9HR PA9IGB PA9J PA9JO PA9LUC PA9M PA9MB PA9S PA9WOR PA9X PB0ACU PB1HF PB2A PB2JJ PB2RVS PB2T PB4DX PB4FUN PB5DX PB5X PB7Z PB8DX PC1EMR PC1H PC1PM PC1Y PC2A PC2B PC2C PC2D PC2F PC2L PC2T PC2X PC2Y PC3H PC3M PC4C PC4H PC4Y PC5C PC5D PC5Q PC5WB PC5Z PC6C PC6M PC73X PC7B PC7C PC7E PC7R PC7T PC9DB PC9F PC9T PD0ABC PD0AG PD0ARI PD0CQ PD0EJD PD0FSB PD0HF PD0HLA PD0HMA PD0JBH PD0JHM PD0JMH PD0JOS PD0MBU PD0MBY PD0ME PD0MGX PD0MHZ PD0MM PD0MNF PD0MWG PD0P PD0PIW PD0PMS PD0PVL PD0RBZ PD0RKA PD0ROC PD0RS PD0RUD PD0RWL PD0RXP PD0SCY PD0WR PD0WVB PD0WVD PD1AAT PD1ABO PD1ADK PD1AFF PD1AT PD1ATH PD1B PD1BHZ PD1CW PD1D PD1DTH PD1GE PD1JN PD1RJV PD1RK PD1RO PD1ROT PD1RP PD1T PD1TV PD1WST PD2BA PD2C PD2DVB PD2DX PD2E PD2EP PD2GSP PD2JAM PD2LH PD2MT PD2PKM PD2RF PD2TW PD2WS PD3AL PD3ALX PD3ATM PD3DMN PD3ED PD3EDA PD3EM PD3H PD3HB PD3J PD3JAG PD3MDM PD3MR PD3OES PD3RFR PD4HDB PD4M PD4RD PD4RW PD5B PD5CW PD5DJ PD5ISW PD5JFK PD5L PD5MJF PD5ML PD5MVH PD5MVH/P PD5S PD5VDB PD5WSQ PD7BDN PD7CJT PD7DX PD7H PD7JVW PD7MH PD7RB PD7RF PD7YY PD8A PD8B PD8DX PD8J PD9BG PD9CN PD9DB PD9GD PD9MK PD9NR PD9T PD9X PD9Z PE0JBE PE0MVJ PE0NYJ PE0TS PE0VT PE1AED PE1AJ PE1BNF PE1BSI PE1CPJ PE1CUP PE1CZG PE1EWR PE1F PE1FTV PE1GQE PE1GRJ PE1GWX PE1HB PE1HWO PE1IWT PE1KVL PE1L PE1LJS PE1LTY PE1LUB PE1MJG PE1NPS PE1OAD PE1OBX PE1OFJ PE1OXP PE1OXS PE1PFH PE1PIC PE1RDP PE1RF PE1RLF PE1RMO PE1RNU PE1RPK PE1RUS PE1RWL PE2AAB PE2AE PE2CML PE2HD PE2HLA PE2JMR PE2K PE2KM PE2LZ PE2MEV PE2W PE3V PE4A PE4BAS PE4KH PE5ENJ PE5JW PE5T PE5TS PE5YES PE65TER PE7T PE8ROB PE9GG PF1A PF1MO PF30EUDXF PF38T PF5T PF5X PF9A PF9W PG0DX PG16MC PG17MC PG1A PG1R PG2AA PG2P PG2W PG3N PG4DX PG55G PG5M PG5V PG6G PG7A PG8M PG9HF PH0AS PH0NO PH2A PH2L PH2LB PH2M PH4E PH4X PH5C PH5M PH5T PH6SKCC PH7A PH90T PH9B PH9E PI2T PI4A PI4AAG PI4ADH PI4AMF PI4AMF/P PI4CC PI4CG PI4COM PI4CQ PI4D PI4DHG PI4DHV PI4DLZ PI4DTC PI4DX PI4F PI4FL PI4FRG PI4KAR PI4LWD PI4M PI4MM PI4NOV PI4OTC PI4RAG PI4SHB PI4SRN PI4TIL PI4UTR PI4VAD PI4VPO PI4YLC PI4Z PI4ZAZ PI4ZHE PI4ZOD PI4ZU PJ2D PJ2DD PJ2DX PJ2HQ PJ2ND PJ2P PJ2T PJ4A PJ4DX PJ4G PJ4K PJ4LS PJ4NX PJ4Q PJ4T PJ4X PJ6/G3TXF PJ6/NM1Y PJ6/OH1VR PJ6/OH3JR PJ6A PJ6E PJ6T PJ7AA PJ7PL PJ7TM PP1CZ PP1ER PP1WW PP2BK PP2BO PP2CC PP2FRS PP2MM PP2OK PP2PS PP2RON PP5/HB9CJX PP5AM PP5AO PP5ASF PP5AX PP5BI PP5BJF PP5BK PP5BLU PP5BSD PP5BZ PP5CY PP5DZ PP5EJ PP5FB PP5IP PP5JD PP5JN PP5JR PP5JY PP5KC PP5KR PP5ME PP5NS PP5NY PP5SB PP5UP PP5XA PP5XX PP5ZP PP6MS PP6ZZ PP7DX PP7JR PP7KVA PP7LP PP8ZAC PQ5A PQ5B PQ7A PQ7MM PQ8VA PQ9M PR1M PR1T PR2D PR2F PR2W PR4C PR5A PR5D PR5W PR7AA PR7AB PR7AE PR7AP PR7AR PR7AYE PR7CJ PR7FB PR7GY PR7HR PR7LO PR7MB PR7RBA PR8EP PR8MET PR9M PS1M PS2F PS2M PS2R PS2T PS5A PS5D PS7AW PS7DX PS7GL PS7KC PS7YL PS8BR PS8DX PS8ET PS8HF PS8RV PT2AC PT2ADM PT2AP PT2AW PT2AZ PT2BAT PT2CM PT2CVA PT2GTI PT2MG PT2NP PT2ZXR PT3A PT3T PT4A PT4T PT5A PT5D PT5E PT5N PT5T PT7AV PT7BL/VE3 PT7ZD PT7ZT PT8CW PT8DX PT9AA PT9AL PT9BM PT9DX PT9IR PT9JFM PU1JAM PU1KDX PU1KGG PU1KTZ PU1KVA PU1LMN PU1MHZ PU1MIL PU1MKZ PU1RSN PU1SSH PU1TMU PU1VGD PU1VKG PU1WTM PU2ATS PU2BRU PU2KAY PU2KBD PU2KFL PU2KKE PU2KNM PU2KQG PU2LEW PU2LPV PU2LXM PU2MAF PU2MTQ PU2MTV PU2NAX PU2NOE PU2NZZ PU2OYP PU2OYQ PU2POP PU2PSP PU2RAY PU2RDB PU2RTA PU2RTO PU2SDX PU2STZ PU2TES PU2TRX PU2UAF PU2UJG PU2ULN PU2UMZ PU2URP PU2VAV PU2VCP PU2VTN PU2WDF PU2WDX PU2WSQ PU2XBT PU2XDX PU2YBW PU2YVW PU2YZP PU3CAL PU3FKW PU3KNG PU3KNP PU3LTA PU3MUS PU4ABA PU4ALZ PU4ENY PU4GOD PU4HUD PU4JKB PU4YJS PU5AGM PU5BOY PU5CAW PU5CBJ PU5CSF PU5DCS PU5DTH PU5DUD PU5IKE PU5KGB PU5PEO PU5RHT PU5SKW PU5SSR PU5SVE PU5UAI PU5WDB PU5YSV PU7DEF PU7EEM PU8MDJ PU8MET PU8PSF PU8TAJ PU8TAS PU8UMR PU8WHJ PU8WTJ PU8YAB PU8YPL PU9ATH PU9DCB PV0C PV0L PV0R PV0W PV1C PV2B PV2M PV2P PV7M PV8AA PV8ADI PV8AX PV8BR PV8DC PV8DR PV8DX PW1A PW2A PW2D PW2F PW2W PW5A PW5T PW7I PW7M PW8AR PX0F PX1M PX2A PX2B PX2E PX2F PX2V PX2X PX36C PX4X PX5E PX7C PY0F/AA4NC PY0F/AA4VK PY0F/PY2QI PY0FW PY1AA PY1AN PY1AX PY1BAB PY1CDR PY1CML PY1CMT PY1CW PY1DO PY1EZ PY1FI PY1FOX PY1GQ PY1IT PY1JP PY1JR PY1KB PY1KR PY1KS PY1LU PY1MK PY1MM PY1MT PY1MX PY1NDX PY1NP PY1NS PY1NSC PY1NX PY1ON PY1PDF PY1PL PY1RBM PY1RY PY1SAD PY1SGT PY1SL PY1SX PY1TJ PY1TL PY1TSP PY1TV PY1UA PY1VOY PY1WDS PY1WS PY1WW PY1XW PY1YU PY1ZV PY2AA PY2AB PY2ABN PY2ACA PY2ADR PY2AE PY2AGO PY2ALC PY2ASA PY2AXH PY2BEK PY2BI PY2BK PY2BN PY2CAT PY2CDR PY2CE PY2COY PY2CSU PY2CTA PY2CX PY2DJ PY2DMZ PY2DO PY2DPM PY2DR PY2DV PY2DZ PY2EDY PY2EGM PY2EJ PY2EL PY2EM PY2ESG PY2EU PY2EVR PY2EX PY2EYE PY2FCL PY2FRQ PY2FSG PY2FSR PY2FUL PY2GH PY2GMR PY2GTA PY2GTO PY2GZ PY2HP PY2HT PY2HU PY2HUV PY2IQ PY2IU PY2JNV PY2KC PY2KG PY2KJ PY2KP PY2KQ PY2LCD PY2LED PY2LPM PY2LSM PY2LW PY2MC PY2MIA PY2MIG PY2MNL PY2MP PY2MPG PY2MR PY2MSR PY2NA PY2NB PY2NDX PY2NF PY2NFE PY2NFT PY2NY PY2NZ PY2OA PY2OSD PY2PJA PY2PRB PY2QI PY2QM PY2QT PY2RAR PY2RBN PY2RF PY2RH PY2RKG PY2RMY PY2RSA PY2RTB PY2RX PY2SAA PY2SAT PY2SBY PY2SEI PY2SHF PY2SPW PY2SRB PY2TED PY2THC PY2TI PY2TKB PY2TMV PY2TO PY2TOP PY2TRB PY2TTE PY2TUA PY2TWI PY2UD PY2VI PY2VM PY2VOA PY2VOX PY2VQ PY2VZ PY2WDD PY2WDX PY2WK PY2WND PY2XAT PY2XB PY2XC PY2XDX PY2XIZ PY2XJ PY2XU PY2XV PY2YP PY2YR PY2YU PY2YZB PY2ZA PY2ZEA PY2ZK PY2ZR PY2ZW PY2ZXU PY2ZZ PY2ZZZ PY3APY PY3AU PY3BEG PY3CAL PY3DJB PY3EW PY3FOX PY3KN PY3ML PY3MM PY3MU PY3PA PY3RLC PY3TIO PY3UEB PY3XX PY3YD PY3ZK PY3ZZR PY4ARS PY4BZ PY4CK PY4CR PY4DBU PY4DK PY4HGM PY4HO PY4KP PY4LH PY4NY PY4RGS PY4RL PY4RR PY4SO PY4TJ PY4TW PY4VG PY4WJ PY4WWW PY4XX PY4YY PY4ZAG PY4ZO PY5AB PY5AKW PY5AP PY5AS PY5BH PY5BK PY5DC PY5DD PY5DK PY5DU PY5EG PY5FB PY5FO PY5II PY5IN PY5JO PY5JQ PY5JR PY5KA PY5KD PY5MM PY5MW PY5PLL PY5PSA PY5PWR PY5QW PY5TJ PY5VC PY5WH PY5WW PY5XH PY5ZD PY5ZHP PY5ZW PY6AA PY6BA PY6TS PY6UN PY6ZEV PY6ZIM PY7BC PY7OJ PY7OO PY7RP PY7VI PY7XC PY7ZB PY7ZBK PY7ZY PY7ZZ PY8FML PY8WW PY8ZE PY90IARU PY9GC PY9MP PY9MT PZ2CM PZ50X PZ5K PZ5RA PZ5V PZ5W R0AA R0AB R0ADU R0AEE R0AEW R0AFF R0AK R0AS R0CAF R0CAF/3 R0CAF/P R0CM R0CW R0HQ R0JF R0QA R0RC R0RG R0SI R0SR R0TR R0TV R0VZ R0WC R1255F R1566O R1606M R1AC R1AI R1AK R1AL R1AN R1AO R1AT R1AT/P R1AZ R1BBL R1BCE R1BCO R1BW R1CA/P R1CAA R1CAM R1CC R1CX R1DX R1FZ R1KRG/P R1LN R1MA R1NI R1NW R1OO R1QE R1TE R1WAG R1ZM R2015GV R2017CC R2AA R2AB R2AB/4 R2ABT R2AC R2AD R2ADC R2AF R2AHS R2AL R2AOD R2AT R2CA R2DEM R2DFD R2DFE R2DFO R2DGD R2DS R2DT R2DU R2DX R2DX/P R2EA R2EC R2EL R2FAF R2FBE R2FBK R2GAP R2GB R2LAC R2MA R2OA R2OFF R2OM R2PA R2PT R2RAU R2RT R2RZ R2SA R2SAZ R2UZ R2UZ/P R2VA R2VA/P R2YA R2YES R2ZA R2ZC R2ZCA R2ZX R3AA R3AAA R3AD R3AI R3AIR R3AP R3AQ R3AQ/3 R3AT R3BA R3BB R3BT R3CW R3DAU R3DC R3DCB R3DCX R3DDL R3DE R3DG R3DL R3EA R3EE R3EG R3EK R3EV R3FC R3FP R3FX R3GD R3GM R3GMT R3GZ R3HA R3HD R3HD/6 R3IAN R3IJ R3IK R3IS R3KCW R3KF R3KM R3KQ R3LA R3LB R3LC R3LM R3LO R3LW R3MAI R3MAL R3MJ R3MS R3MU R3OA R3OM R3OP R3OQ R3OR R3PA R3PC R3PIQ R3PR R3PV R3PW R3QA R3QF R3QJ R3QN R3QV R3QX R3RA R3RAE R3RAT R3RF R3RK R3RK/P R3RR R3RT R3RU R3RZ R3ST R3TG R3THA R3TW R3UBH R3VA R3VL R3VO R3VS R3WAL R3WR R3WW R3WZ R3XA R3XAA R3XAI R3XP R3XX R3YAP R3YC R3ZJ R3ZO R3ZR R3ZV R3ZW R3ZZ R44YETI/0 R4AC R4AC/P R4AJ R4BZ R4CA R4CO R4CU R4DX R4FA R4FAN R4FD R4FY R4HBM R4HC R4HCM R4IB R4II R4IM R4IN R4IO R4LAK R4LC R4LR R4MA R4MM R4MZ R4NX R4RA R4RB R4RE R4RM R4RR R4RT R4RZ R4SA R4SAJ R4SO R4UZ R4WAA R4WAB R4WAE R4WBF R4WT R4WT/P R4YES R4YY R5ACQ R5AJ R5AK R5AM R5AU R5CW R5DC R5DC/P R5DF R5DT R5DU R5DV R5DZ R5FP R5FU R5FY R5KV R5QQ/1 R5RA R5RT R5WP R5WW R5ZG R60SAB R66IOTA R6AC R6AF R6AJ R6AP R6AW R6CC R6CO R6CS R6CW R6CZ R6CZ/P R6DBT R6DG R6DM R6DR R6DX R6FAA R6FDD R6FK R6FS R6FY R6GE R6KA R6KEE R6KF R6KX R6KY R6LAQ R6LBK R6LC R6LE R6LEQ R6MR R6NS R6RA R6YY R70ASIA R70LWA R70SRC R7AB R7AC R7AL R7AM R7AO R7AO/P R7AT R7AW R7AX R7AY R7BN R7CA R7CD R7CF R7CK R7CT R7DA R7DM R7DX R7FA R7FF R7FG R7FL R7FO R7GA R7GX R7HF R7HL R7IT R7KA R7KFX R7KH R7KKO R7KM R7KMA R7KO R7KQ R7KR R7KU R7KW R7KX R7KZ R7LA R7LP R7LV R7LY R7MC R7MM R7MP R7MT R7MU R7MY R7NA R7NF R7NK R7NP R7NW R7NZ R7PKS R7RAG R7RC R7RDE R7RF R7RF/6 R7RIB R7RM R7TJ R7TO R7TQ R7TU R7TW R8AA R8CA R8CAA R8CT R8FT R8IA R8LA R8LG R8MD R8OA R8TR R8TT R8US R8UT R8VK R8WF R8WO R8XA R8XF R8XW R9AAB R9AAL R9AB R9AE R9AJ R9AM R9AT R9AV R9AX R9AY R9BA R9CAC R9CB/9 R9CC R9CD R9CL R9CL/P R9CM R9CZA R9DA R9FA R9FM R9FN R9FT R9GM R9HAF R9HAG R9HQ R9IF R9IR R9JD R9JO/6 R9LM R9LY R9MA R9MJ R9OA R9OC R9OK R9OM R9OO R9PA R9QQ R9RA R9RT R9SAH R9SBH R9SD R9SK R9SN R9SS R9TV R9UA R9UC R9UG R9UP R9VA R9VK R9WDV R9WN R9XC R9XC/1 R9XG R9XM R9XS R9XT R9XU R9XV R9XZ R9YC R9YU RA/DL2KQ RA/EU4A RA/OG2K RA/UZ2I/P RA0ACM RA0ADQ RA0AM RA0AN RA0ANO RA0AQQ RA0AR RA0AY RA0CGY RA0F RA0FF RA0JBL RA0LE RA0LL RA0LMK RA0LMV RA0LQ RA0QD RA0QQ RA0R RA0S RA0SMS RA0SS RA0TG RA0UBI RA0UF RA0UF/8 RA0UJ RA0W RA0WHE RA1A RA1AGU RA1AL RA1ALC RA1ANS RA1AO RA1AOB RA1APV RA1CE RA1CP RA1CW RA1DA RA1L RA1OD RA1OHX RA1OW RA1QBH RA1QD RA1QE RA1QFU RA1QG RA1QQ RA1QY RA1TDX RA1TU RA1TV RA1WA RA1WZ RA1ZZ/3 RA2F RA2FAC RA2FB RA2FF RA2FN RA2FO RA2FU RA2FV RA2FX RA3AGF RA3AL RA3AN RA3ATX RA3AV RA3AV/P RA3BL RA3BQ RA3BQ/3 RA3BY RA3DAD RA3DGH RA3DJA RA3DNC RA3DQP RA3DS RA3DX RA3E RA3EA RA3EF RA3FD RA3FH RA3FP RA3FY RA3G RA3GAS RA3GK RA3GZ RA3ICK RA3IZ RA3LCW RA3LDP RA3LJ RA3LO RA3MD RA3MQ RA3MU RA3NC RA3OA RA3Q RA3QDU RA3QH RA3QK RA3QSY RA3R RA3RA RA3RBL RA3RLJ RA3RPS RA3S RA3SAE RA3SI RA3SI/P RA3ST RA3SX RA3TAC RA3TE RA3THN RA3TOS RA3TT RA3U RA3UAG RA3V RA3VE RA3VX RA3W RA3WDK RA3WT RA3WUG RA3WVG RA3XCZ RA3XDX RA3XEV RA3XM RA3XT RA3Y RA3YAO RA3YDA RA3YZ RA3Z RA3ZH RA4AAJ RA4AAO RA4AAT RA4ACX RA4AR RA4CB RA4CBN RA4CON RA4CVT RA4CX RA4DAR RA4DB RA4DR RA4FK RA4FP RA4FUN RA4FUT RA4FW RA4HBS RA4HL RA4HMT RA4HPI RA4HX RA4I RA4L RA4LBS/3 RA4LF RA4LGM RA4LO RA4LW RA4LY RA4M RA4PBE RA4PPB RA4PQ RA4PTI RA4UAT RA4UDC RA4UID RA4UVK RA4W RA4Y RA55GC RA5AO RA5C RA5R RA5ZB RA6AAW RA6ABC RA6AF RA6AN RA6AR RA6C RA6CA RA6CU RA6DT RA6FUZ RA6FYL RA6GW RA6HSM RA6KE RA6LIS RA6MQ RA6WF RA6X RA6XB RA6XV RA6YDX RA6YJ RA7A RA7C RA7C/P RA7E RA7KO RA7KU RA7KW RA7KW/P RA7M RA7R RA7RA RA7T RA9A RA9A/P RA9AAA RA9AEA RA9AFZ RA9AMO RA9AP RA9AP/P RA9APG RA9AU RA9CCK RA9CMO RA9CUU RA9DP RA9DZ RA9FEL RA9HM RA9JBA RA9JM RA9KY RA9LAN RA9LT RA9LY RA9MAS RA9MX RA9OFE RA9SB RA9SDT RA9SF RA9SK RA9SN RA9SN/P RA9SO RA9UAD RA9UN RA9UWT RA9V RA9WD RA9WU RA9X RA9XSL RA9Y RA9YE RA9YN RA9YUI RC0AA RC0AAB RC0LAD RC1Q RC1Z RC2A RC3C RC3F RC3P RC3U RC3W RC4D RC4HAA RC4R RC4W RC55GC RC5A RC5D RC5F RC5Z RC6AA RC6AE RC6M RC6R RC6U RC7A RC7C RC7K RC7KY RC7LI RC7LK RC8SC RC9A RC9AR RC9F RC9J RC9M RC9O RC9X RD0A RD0CD RD0F RD0L RD0W RD1A RD1A/P RD1AH RD1AP RD1D RD1T RD2A RD2D RD3AAD RD3AD RD3AEF RD3AJB RD3AL RD3ARU RD3AT RD3AW RD3BV RD3BZ RD3DY RD3F RD3FO RD3FP RD3FT RD3FV RD3K RD3MF RD3R RD3TBQ RD3XX RD3ZA RD4A RD4F RD4W RD4W/P RD4WM RD5A RD7K RD7T RD8D RD8O RD9CX RD9D RD9DX RD9FM RD9SA RD9U RF8R RF8R/P RF9C RF9W RG0A RG0F/5 RG1A RG3AR RG3B RG3K RG3P RG3R RG4A RG4F RG4I RG5A RG5A/6 RG5R RG6G RG7K RG8U RG9A RG9Y RI0FI RI1ANC RI1AND RI1ANZ RI1C RI1ON RJ1O RJ2A RJ2D RJ3A RJ3AA RJ3D RJ3DC RJ3DF RJ3F RJ4I RJ4P RJ7A RJ7J RJ7M RJ9I RJ9M RJ9U RK0S RK0SM RK0UT RK0W RK1AD RK1AS RK1NA RK1QWX RK2A RK2M RK3AW RK3BX RK3DK RK3DSW RK3DT RK3DU RK3DWW RK3DWW/P RK3DXW RK3DYB RK3E RK3ER RK3FT RK3FWE RK3IM RK3IR RK3LG RK3M RK3MWC RK3MXT RK3P RK3PWR RK3QY RK3R RK3RT RK3RX RK3SWB RK3SWS RK3T RK3UWK/P RK3V RK3VWA RK3VXL RK3Y RK3YWA RK3ZZ RK4CWA RK4FAJ RK4FAO RK4FD RK4FF RK4FL RK4FM RK4FW RK4HYT RK4PA RK4S RK4W RK4W/P RK55GC RK5D RK5W RK6ABM RK6AQP RK6C RK6CC RK6DL RK6HG RK6K RK6LZZ RK6YT RK7F RK7KB RK7M RK7T RK8A RK8I RK8O RK8W RK90DR RK9A RK9AA RK9AGF RK9AK RK9AN RK9AWQ RK9AWT RK9AX RK9AY RK9AY/P RK9CR RK9CYA RK9DC RK9DM RK9DO RK9DR RK9F RK9FBO RK9LWA RK9Q RK9QWM RK9UE RK9UM RK9UN RL2A RL2D RL3A RL3AA RL3AJ RL3AN RL3BZ RL3DD RL3DI RL3DX RL3F RL3QI RL3T RL4A RL4F RL4I RL4R/P RL5A RL5D RL5G/0 RL6K RL6M RL6MF RL8C RL9A RL9AA RL9AA/6 RL9I RL9LR RL9M RL9O RL9W RL9X RL9Y RM0A RM0F RM0W RM1Q RM1T RM2D RM2E RM2H RM2P RM2T RM2T/P RM2U RM3A RM3DA RM3F RM3G RM3N RM3O RM3TO RM3UA RM3V RM3Z RM4A RM4C RM4F RM4HZ RM4I RM4R RM4W RM55GC RM56GC RM5A RM5C RM5M RM5O RM5W RM5Y RM5Z RM6AA RM6C RM6J RM6M RM6Y RM7C RM7F RM7G RM7M RM7M/P RM8A RM8G RM8L RM8L/8 RM8Y RM9A RM9I RM9RZ RM9T RM9UM RM9X RN0A RN0C RN0CT RN0D RN1CW RN1ON RN1QA RN2F RN2FA RN2FQ RN3AAB RN3AAB/3 RN3AC RN3AC/P RN3B RN3BL RN3D RN3DDZ RN3DKE RN3DKQ RN3DNM RN3DV RN3F RN3FS RN3FT RN3FY RN3GQ RN3K RN3N RN3OG RN3P RN3QN RN3QQT RN3S RN3T RN3TT RN3YA RN3Z RN3ZJJ RN4ACX RN4ACZ/1 RN4AO RN4CA RN4F RN4HAB RN4HFJ RN4HKH RN4NF RN4SC RN4SN RN4SW RN4W RN4ZT RN5A RN5AA RN5F RN5M RN6A RN6AJ RN6BP RN6CH RN6DR RN6HGN RN6L RN6LG RN6LHF/W7 RN6MA RN6XD RN7A RN7F RN7K RN9A RN9N RN9RF RN9S RN9S/P RN9T RN9U RN9W RN9WA RN9WT RO1A RO1B RO1M RO2E RO2X RO3D RO3G RO4A RO4I RO55GC RO5D RO5F RO5I RO5K RO5O RO5X RO6A RO6M RO7K RO7T RO9A RO9O RO9S RO9T RQ2Q RQ3A RQ3M RQ3R RQ4A RQ4C RQ4D RQ4D/6 RQ4D/7 RQ4D/8 RQ4F RQ4N RQ5D RQ6M RQ7K RQ7L RQ7M RQ7M/P RQ7R RQ9A RT0C RT0F RT0O RT0Q RT0R RT0W RT1A RT1M RT1O RT1Q RT1T RT2A RT2D RT2F RT2H RT2M RT2O RT2Y RT3A RT3D RT3F RT3G RT3K RT3LA RT3M RT3N RT3O RT3P RT3T RT3W RT3Y RT4A RT4C RT4D RT4F RT4H RT4M RT4P RT4S RT4U RT4W RT55GC RT56GC RT5A RT5C RT5F RT5G RT5K RT5Q RT5R RT5Z RT6A RT6C RT6DI RT6DX RT6N RT6T RT73AS RT73CW RT73GP RT7C RT7F RT7N RT7T RT7Y RT8O RT8U RT9A RT9I RT9J RT9K/7 RT9K/P RT9L RT9S RT9T/3 RT9TM RT9X RT9Y RT9YA RT9YT RU0A RU0AI RU0AT RU0LAX RU0LL RU0SN RU1A RU1AB RU1AF RU1AT RU1M RU1OZ RU1ZC RU3ALR RU3C RU3DM RU3DU RU3DX RU3EJ RU3F RU3FM RU3GF RU3KO RU3OW RU3OZ RU3Q RU3QM RU3SD RU3TJ RU3U RU3UB RU3UR RU3UW RU3VV RU3WR RU3XB RU3XF RU3XJ RU3XK RU3XW RU3XY RU3XY/1 RU3XY/P RU3YAA RU4A RU4AA RU4H RU4I RU4LM RU4PAA RU4PH RU4PU RU4SM RU4SO RU4SS RU55GC RU5A RU5A/P RU5D/3 RU5TT RU6AV RU6B RU6CH RU6CO RU6CS RU6DX RU6DX/P RU6K RU6K/P RU6L RU6LV RU6M RU6MO RU6YJ RU6YK RU6YZ RU7A RU7KD RU7KN RU7L RU7M RU8T RU9AC RU9AZ RU9C RU9CC RU9CD RU9CI RU9CY RU9CZ RU9CZD RU9F RU9HM RU9I RU9LA RU9SB RU9SO RU9TN RU9UC RU9WZ RU9YF RV0CG RV1AE RV1AQ RV1AW RV1CB RV1CC RV1OM RV1ZT RV3A RV3D RV3DBK RV3F RV3FF RV3FT RV3FW RV3ID RV3LO RV3MR RV3PN RV3TG RV3U RV3UP RV3UQ RV3V RV3VR RV3YM RV3YR RV3ZD RV3ZN RV4AS RV4CC RV55GC RV5K RV6AA/P RV6AAA RV6ACC RV6ASU RV6BEH RV6CC RV6HEO RV6LCI RV6LCT RV6LM RV7M RV9CM RV9CQ RV9CVA RV9CX RV9DC RV9FT RV9MA RV9MN RV9UDO RV9UP RV9WP RV9YK RV9YP RW0A RW0AB RW0AJ RW0AR RW0BG RW0BT RW0CN RW0CR RW0LBM RW0LCN RW0LD RW0LL RW0LT RW0S RW0SP RW0SR RW0UM RW1A RW1AI RW1AM RW1C RW1CW RW1F RW1R/P RW2B RW2F RW3AI RW3AJX RW3AL RW3AO RW3AZ RW3DIA RW3DKK RW3DSR RW3DU RW3DVW RW3DW RW3DY RW3FB RW3FR RW3FY RW3LB RW3LL RW3LY RW3PK RW3PX RW3PZ RW3QJ RW3QM RW3RN RW3RQ RW3S RW3SK RW3SY RW3TN RW3TT RW3VA RW3VM RW3WP RW3WR RW3WX RW3X RW3XM RW3XN RW3XZ RW3YA RW3YB RW3YW RW3Z RW3ZA RW3ZC RW4AD RW4C RW4CLF RW4CR RW4CRV RW4F RW4FD RW4HB RW4HD RW4HFH RW4HL RW4HM RW4HS RW4HZ RW4LC RW4LR RW4M RW4NF RW4NN RW4O RW4PFF RW4S RW4W RW4WA RW4WN RW4WZ RW4YA/0 RW5CW RW5D RW5W RW6A RW6AEW RW6AF RW6ALB RW6AX RW6CR RW6K RW6MAO RW7F RW7K RW7M RW8T RW9AS RW9AV RW9AV/9 RW9AW RW9C RW9CD RW9DX RW9H RW9HSB RW9JZ RW9LL RW9MC RW9MZ RW9OG RW9OW RW9QA RW9QC RW9RN RW9SW RW9TP RW9USA RW9UX RW9UY RW9W RW9WT RW9XU RX0AA RX0AE RX0L RX0SA RX0SC RX1A RX1AG RX1CG RX1CQ RX1CV RX3AEX RX3AFE RX3AGD RX3AGQ RX3AJM RX3AMI RX3AP RX3AVD RX3DLH RX3DN RX3DPK RX3DTN RX3F RX3MM RX3MX RX3Q RX3RZ RX3VF RX3XA RX3XQ RX3ZW RX4CD RX4CH RX4HX RX4W RX6A RX6ACJ RX6AM RX6AOB RX6CB RX6CC RX6CW RX6DA RX6FJ RX6LEM RX6LG RX6LN RX6MY RX7A RX7K RX7M RX7R RX7T RX9AF RX9AX RX9CAZ RX9CC RX9CCJ RX9CM RX9DJ RX9FB RX9FJ RX9JX RX9KT RX9M/P RX9SN RX9SR RX9UK RX9UKF RX9WN RX9WN/P RY0A RY2S RY3AAD RY3D RY3F RY4AEE RY4F RY4UAA RY5WH RY6M RY6Y RY7A RY7G RY7Y RY9C RZ0LWA RZ0SN RZ16RU RZ1A RZ1AU RZ1AWT RZ1O RZ1OA RZ1OK RZ1ZR RZ2D RZ3AL RZ3AMW RZ3ARO/6 RZ3ATG RZ3AUL RZ3AV RZ3AWM RZ3DAB RZ3DC RZ3DJ RZ3DN RZ3DOT RZ3DW RZ3DZ RZ3DZI RZ3EM RZ3F RZ3FQ RZ3LC RZ3MM RZ3PX RZ3QL RZ3QM RZ3QS RZ3RZ RZ3TZZ RZ3VA RZ3XA RZ3Z RZ4A RZ4AG RZ4AZ RZ4HC RZ4W RZ4WZ RZ5D RZ6AK RZ6BR RZ6DX RZ6FA RZ6L RZ6MJ RZ6YZ RZ7L RZ8U RZ9A RZ9AD RZ9AN RZ9JZ RZ9OF RZ9OP RZ9OQ RZ9SZ/3 RZ9U RZ9UC RZ9UF RZ9UMA RZ9UO RZ9W/3 RZ9WU RZ9WYY RZ9Y RZ9YI RZ9YN RZ9YQ S01WS S0S S5/PA3BHF S500R S50A S50B S50BH S50C S50D S50G S50HQ S50J S50K S50L S50N S50O S50P S50Q S50R S50VM S50W S50XX S5100LIONS S51A S51AC S51AF S51AP S51AU S51CAB S51CK S51CL S51CN S51CT S51DD S51DI S51DX S51EC S51F S51FB S51FO S51I S51IB S51IS S51IV S51J S51JQ S51K S51KD S51KV S51MA S51MF S51NM S51R S51RE S51RH S51RJ S51RU S51SK S51SL S51SX S51TA S51TC S51TN S51TP S51U S51UN S51V S51W S51WO S51YI S51Z S51ZG S51ZJ S52A S52AA S52AQ S52AU S52AW S52B S52BT S52C S52CC S52CO S52CQ S52D S52DD S52DR S52F S52FT S52GO S52GP S52GS S52K S52LW S52M S52MZ S52NR S52ON S52OT S52P S52QM S52R S52RA S52RF S52T S52W S52WD S52WW S52X S52Y S52ZD S52ZW S530AZV S53A S53AR S53AU S53BB S53BH S53DT S53EA S53EO S53F S53FO S53GO S53JW S53K S53M S53MJ S53MM S53NW S53O S53Q S53R S53RA S53RM S53T S53TM S53U S53V S53W S53X S53XX S53Z S53ZO S54G S54I S54K S54MTB S54O S54W S54X S54ZO S54ZZ S55BA S55DX S55KA S55KM S55L S55M S55MZ S55N S55NF S55O S55OO S55RD S55T S55TB S55VM S55W S55X S55Z S560C S56A S56AX S56B S56C S56ECR S56IPS S56K S56KFG S56KHL S56M S56OA S56P S56PYZ S56RPJ S56SD S56VJM S56WL S56WYB S56X S56Y S56ZVD S570ABC S570C S570L S570ZRS S57A S57AC S57AJ S57AL S57AM S57AT S57AW S57AY S57C S57CV S57DX S57EA S57F S57K S57KM S57KV S57L S57LC S57LM S57LR S57M S57ME S57MM S57MPU S57NAW S57NEA S57NL S57NML S57NTR S57NW S57O S57OABC S57OWA S57PKT S57PM S57Q S57RO S57S S57SWR S57T S57TW S57U S57UX S57V S57W S57WJ S57WO S57X S57XX S57XZ S57YK S57YU S57YX S57Z S57ZT S58A S58AA S58D S58FA S58J S58K S58KA S58M S58MU S58N S58P S58Q S58RU S58T S58WW S58X S58Y S59A S59AA S59ABC S59ACP S59AV S59D S59DD S59DKR S59DXU S59GCD S59GI S59GS S59KB S59N S59OP S59P S59SV S59T S59V S59Z S71A S79V S9TM SA0BMV SA0BVA SA0BXV SA0CNH SA0RAD SA2APO SA3V SA4A SA5BJM SA5CDO SA6AUN SA6BET SA6BPD SA6CBY SA6CME SA6G SA6MIW SA6P SA6SKA SA6U SA7AOI SA7AUH SA7J SA7LOO SB0A SB0M SB3W SB6W SB7S SB7W SC0N SC3A SC3DX SC3N SC5C SC6M SC6W SC90SSA SC9W SD0A SD0T SD1A SD3A SD4C SD5X SD6E SD6M SD6N SE0DX SE0P SE0X SE2E SE2T SE3E SE3T SE3X SE3Y SE4E SE5E SE5L SE5N SE5S SE5Z SE6N SE6W SE6Y SE7Q SE8W SE8X SF0D SF2X SF2X/P SF3A SF5D SF5O SF5X SF6C SF7WT SG0M SG0U SG0W SG0X SG3R SG5G SG5Z SG6T SG7T SG8X SH6X SH7Q SI2E SI3A SI5Y SI6I SI6M SI6T SI6W SI7T SI9AM SJ0X SJ2W SJ2X SJ3A SJ4F SJ9MH SK0CC SK0QO SK0XW SK2T SK3GA SK3W SK4EA SK4RY SK5DB SK5LW SK5WB SK6AW SK6EI SK6HD SK6M SK6QA SK7A SK7AX SK7K SK9HQ SL0W SL7ZAY SM0A SM0AIG SM0BSO SM0BYD SM0CXS SM0FPR SM0GNS SM0HRP SM0LGO SM0LPO SM0MDG/1 SM0MLZ SM0MPV/0 SM0NUE SM0O SM0Q SM0RGG SM0S SM0T SM0TCZ SM0W SM0WRA SM0Y SM1NJC SM1TDE SM1WRA SM2A SM2BJS SM2BLY SM2C SM2CEW SM2CVH SM2EKA SM2EKM SM2EZT SM2IXM SM2JUR SM2M SM2ODB SM2OWW SM2S SM2SUM SM2T SM2U SM3/DL1IAO SM3C SM3CCM SM3CER SM3CZS SM3EAE SM3EVR SM3GBA SM3GSK SM3HBV SM3KIF SM3KJA SM3LBP SM3MTR SM3NXS SM3OMO SM3PXO SM3PYB SM3PZG SM3TLG SM3ULU SM3VAC SM3XAX SM3XRJ SM4ASX SM4ATA SM4CAN SM4CTT SM4DDY SM4DHF SM4EMO SM4EPR SM4KYN SM4LWY SM4OTI SM4RGD SM4TU SM4WKT SM4YWL SM5ACQ SM5AOG SM5B SM5BJT SM5BMB SM5BS SM5C SM5CAK SM5CBN SM5CCE SM5CEU SM5CIL SM5CKV/P SM5CNQ SM5COP SM5CSS SM5CZQ SM5D SM5DFM SM5DJZ SM5DVS SM5DXR SM5DXT SM5EDX SM5ENX SM5EPO SM5F SM5FUG SM5GLC SM5HPB SM5IMO SM5INC SM5KNV SM5KQS SM5L SM5LBR SM5LNE SM5M SM5MX SM5NQB SM5Q SM5QU SM5S SM5SRR SM5T SM5UIU SM5X SM5YRA SM6A SM6BGA SM6BGG SM6BSK SM6BZV SM6C SM6CCO SM6CMU SM6CNN SM6CNX SM6CPY SM6CUK SM6CWK SM6DER SM6DHU SM6DLY SM6DOI SM6DOO SM6E SM6EWB SM6FJY SM6FPC SM6FPG SM6GBM SM6GKT SM6I SM6IQD SM6JCC SM6JMZ SM6LJU SM6LPF SM6M SM6MCW SM6MNS SM6MSG SM6MVE SM6NET SM6NJK SM6NOC SM6NT SM6NZA SM6PPS SM6Q SM6UQL SM6V SM6VWG SM6WET SM6WYN SM6XUZ SM6Y SM6YNO SM6Z SM7AWQ SM7BCX SM7BHM SM7C SM7CIL SM7CTJ SM7DAY SM7DBN SM7DLK SM7DQV SM7E SM7GIB SM7GXR SM7IUN SM7JKD SM7LAD SM7MX SM7N SM7PEV SM7RYR SM7RZJ SM7SEL SM7SJR SM7THS SM7UZB SM7YIN SM7ZDI SM8B SM9A SN0HQ SN0R SN0RX SN0W SN0WPX SN100F SN1050D SN1050KJU SN1050M SN1A SN1C SN1D SN1I SN1J SN1K SN1LH SN1S SN1X SN1Y SN2B SN2K SN2M SN2X SN3A SN3R SN3X SN4A SN4EE SN4F SN4KIDS SN5B SN5DX SN5F SN5G SN5J SN5K SN5L SN5N SN5O SN5P SN5U SN5V SN5W SN5X SN60KDU SN6A SN6O SN7B SN7C SN7D SN7H SN7O SN7Q SN8B SN8C SN8D SN8N SN8Q SN8T SN90LKK SN966CP SN9C SN9J SN9M SN9N SN9TB SN9W SO1RON SO1TH SO2B SO2E SO2O SO2R SO2W SO3F SO3O SO40SONDA SO4B SO4M SO4R SO5FF SO5K SO5MAX SO5N SO5O SO5T SO5WD SO6C SO6GG SO6R SO6X SO7BIT SO7M SO7O SO7R SO7T SO9C SO9M SO9Q SO9T SP0P SP1/DM5JBN SP1/UW7LL SP1/UX1HW SP100F SP1AEN SP1ALK SP1C SP1D SP1DMD SP1DOZ SP1DPA SP1DSZ SP1F SP1FPG SP1FRC SP1GA SP1HN SP1I SP1II SP1JQJ SP1KIZ SP1MGM SP1MVG SP1MVW SP1MWK SP1MWN SP1NQN SP1NY SP1O SP1QY SP1RKR SP1V SP2ADY SP2AEK SP2AJ SP2ALT SP2AYC SP2BLC SP2BMX SP2BUC SP2BZ SP2CBS SP2CYK SP2DKI SP2EPV SP2EUI SP2EWQ SP2FAP SP2FOV SP2FTL SP2FUD SP2FWC SP2GCE SP2GCJ SP2GJV SP2GOW SP2GWH SP2HFH SP2HHX SP2HMN SP2HMT SP2HMY SP2HNF SP2HWW SP2HYO SP2ILQ SP2IPT SP2IU SP2IW SP2JMR SP2KAC SP2KDS SP2KJH SP2KPD SP2LNW SP2MF SP2MHC SP2MHD SP2MKI SP2MKT SP2MKZ SP2MPO SP2MSF SP2MW SP2OB SP2PBY SP2PIK SP2QCW SP2QG SP2SA SP2SGN SP2SV SP2TMT SP2TQI SP2UU SP2UUU SP2WGB SP2X SP2XX SP2YWL SP2ZIE SP3A SP3AMO SP3AU SP3AYA SP3AZO SP3BBS SP3BEJ SP3BES SP3BGD SP3BMT SP3CFM SP3CJS SP3CMX SP3CW SP3CYY SP3DIK SP3DOF SP3DOI SP3DRM SP3DVG SP3FHV SP3FPF SP3FSM SP3FXG SP3FYX SP3FZN SP3GAX SP3GEM SP3GTS SP3GXH SP3HLM SP3HRN SP3IBX SP3IC SP3IOE SP3IPB SP3J SP3JDZ SP3JHY SP3JIA SP3JUN SP3JZX SP3KQV SP3KRE SP3KWA SP3LAU SP3LD SP3LGF SP3LPG SP3LPR SP3LWP SP3MEO SP3MEP SP3NYC SP3NYR SP3OKS SP3P SP3PJY SP3POW SP3POZ SP3PWL SP3QDM SP3QFZ SP3RBG SP3RNZ SP3SC SP3SLO SP3SLU SP3SRN SP3TYF SP3UCW SP3UIW SP3UQG SP3UR SP3UY SP3VSE SP3YOR SP4AAZ SP4AVG SP4AWE SP4BEU SP4BPH SP4CGJ SP4CJA SP4CQU SP4CUF SP4D SP4DDS SP4DNX SP4DZT SP4G SP4GDC SP4GFG SP4GHL SP4ICN SP4IGV SP4INT SP4JCQ SP4JEU SP4JFR SP4JTJ SP4K SP4KHM SP4KSY SP4LVK SP4MPA SP4MPH SP4PBI SP4R SP4S SP4SHD SP4SHW SP4TBF SP4TKR SP4TXI SP4W SP4YPB SP4YR SP4Z SP4Z/VE3 SP5AGU SP5AKP SP5AN SP5APW SP5ATO SP5AUC SP5AUY SP5BB SP5BLI SP5BMU SP5BUJ SP5BYC SP5C SP5CGN SP5CIB SP5CJQ SP5CJY SP5CNA SP5CQI SP5CWQ SP5DDJ SP5DIR SP5DL SP5DRE SP5DUJ SP5DXU SP5EAF SP5EAQ SP5ECC SP5ELA SP5ELA/8 SP5ELW SP5ENA SP5ENG SP5ENM SP5EPP SP5ES SP5ETS SP5EWX SP5FKW SP5GDY SP5GH SP5GMM SP5GNI SP5GRM SP5ICS SP5IOU SP5IR SP5IVC SP5JP SP5JSZ SP5JTW SP5KAB SP5KCR SP5KD/P SP5LJP SP5LKJ SP5LS SP5MBI SP5MXZ SP5NHK SP5NON SP5NZA SP5NZZ SP5OXJ SP5PDA SP5PDB SP5PMU SP5PY SP5QAZ SP5SO SP5SR SP5T SP5TAT SP5TAZ SP5TIM SP5TT SP5UAF SP5UD SP5UGP SP5ULV SP5UUD SP5VIH SP5WA SP5WIT SP5X SP5XHJ SP5XO SP5XOV SP5XSD SP5XXX SP5Y SP5YAM SP5YW SP5Z SP5ZCC SP5ZRW SP6A SP6AAT SP6AB SP6ADI SP6AEG SP6AO SP6AXW SP6BEN SP6BXM SP6C SP6CC SP6CJK SP6CZ SP6DHH SP6DMI SP6DNZ SP6DVP SP6DZ SP6EIY SP6EUA SP6FXY SP6G SP6GCU SP6GTN SP6HEQ SP6IEQ SP6IHE SP6IXF SP6JOE SP6JQC SP6JZL SP6JZP SP6KCN SP6KK SP6LMQ SP6LUV SP6LV SP6MLX SP6MQO SP6NIC SP6NIF SP6NZ SP6OJE SP6OJK SP6OUJ SP6OWY SP6P SP6RLK SP6RYD SP6T SP6TGC SP6TRH SP6TRX SP6WM SP6YG SP6ZDA SP6ZT SP72PW SP7AH SP7AWG SP7B SP7BCA SP7BYU SP7C SP7CVW SP7CXV SP7DBI SP7EWD SP7EWL SP7FBQ SP7GIQ SP7HKK SP7HOA SP7HOV SP7ICE SP7IFM SP7IIT SP7JB SP7JLH SP7LIE SP7MC SP7MFU SP7MU SP7N SP7NHS SP7P SP7PCZ SP7Q SP7QHR SP7QO SP7QPG SP7ROZ SP7SEW SP7SMF SP7SQM SP7SZK SP7SZW SP7TEX SP7TF SP7UTW SP7V SP7VC SP7VC/1 SP7VCA SP7VTQ SP7WJ SP8AB SP8AJK SP8AWL SP8BA SP8BOZ SP8BQL SP8BWE SP8CGU SP8CIV SP8DIP SP8EEX SP8FB SP8GQU SP8H SP8HKT SP8HPW SP8HWM SP8HXN SP8ICV SP8IMG SP8IOV SP8JMA SP8JUS SP8K SP8LBK SP8LXE SP8MRD SP8N SP8P SP8QEJ SP8SN SP8W SP9A SP9AK SP9AMH SP9AQF SP9ATE SP9BCH SP9BGS SP9BMH SP9BNM SP9BWA SP9CCA SP9CLO SP9CQD SP9CTS SP9CTW SP9CVY SP9CXN SP9DEM SP9DLY SP9DNO SP9DTE SP9DTH SP9DUX SP9DWT SP9EKF SP9EMI SP9EML SP9ENV SP9ERY SP9EZM SP9FIH SP9FKQ SP9FMP SP9FOW SP9FUY SP9GFI SP9GMI SP9GR SP9H SP9HVV SP9HZF SP9HZW SP9IBJ SP9IHP SP9IKN SP9ITP SP9IVD SP9JPA SP9JZT SP9JZU SP9KAG SP9KAO SP9KAT SP9KDA SP9KDU SP9KJU SP9KR SP9LAS SP9LAW SP9LJD SP9M SP9MA SP9MAT SP9MDY SP9N SP9NLI SP9NLX SP9NSJ SP9NSV SP9NSV/7 SP9ODY SP9OYB SP9PBH SP9PGE SP9PKZ SP9PT SP9QMP SP9R SP9RCL SP9RHN SP9RI SP9RM SP9RQH SP9RTL SP9S SP9SDR SP9TCE SP9TPV SP9TPZ SP9UNX SP9UOP SP9VFR SP9VJ SP9W SP9WAN SP9WZJ SP9WZO SP9XCN SP9XW SP9YFF SP9Z SP9ZCF SP9ZHP SP9ZHR SP9ZPS SQ1BHH SQ1BSY SQ1BVG SQ1EIC SQ1EIX SQ1EUG SQ1FTC SQ1GQT SQ1KW SQ1MNE SQ1OD SQ1PSA SQ1PTO SQ1SNN SQ1WO SQ1X SQ2BNM SQ2BXI SQ2EAN SQ2ICX SQ2NNN SQ2OMB SQ2RGB SQ2RH SQ2SAT SQ2TOM SQ2WHH SQ3A SQ3ESP SQ3F SQ3JPV SQ3KKO SQ3LMK SQ3MVC SQ3MZM SQ3OGP SQ3PMX SQ3POS SQ3POX SQ3R SQ3RX SQ3SWD SQ3TGX SQ3WW SQ3YAY SQ4AVD SQ4G SQ4HRN SQ4JEN SQ4MP SQ5AAG SQ5AM SQ5ASR SQ5CQ SQ5EF SQ5GVY SQ5IRO SQ5JUP SQ5KWJ SQ5LNU SQ5LTL SQ5LTT SQ5M SQ5MJB SQ5NAE SQ5NBE SQ5NRY SQ5NWA SQ5PFH SQ5PMB SQ5Q SQ5RDX SQ5SAA SQ5STS SQ5SUL SQ5TDZ SQ5WAJ SQ65HSC SQ6DGO SQ6DX SQ6ELV SQ6H SQ6IYV SQ6KXY SQ6LJV SQ6PA SQ6PHP SQ6PLD SQ6PLE SQ6PNP SQ6POM SQ6PTR SQ6PWJ SQ6R SQ6RGG SQ6RKY SQ6SGV SQ6VIA SQ6WE SQ6WZ SQ7ACP SQ7B SQ7BRQ SQ7BTY SQ7CL SQ7FPD SQ7IQM SQ7LQJ SQ7NSN SQ7OTK SQ7OVT SQ7OVZ SQ7OXU SQ7PGO SQ7PGP SQ7RL SQ7SAU SQ8AL SQ8BGR SQ8C SQ8EP SQ8ERS SQ8FEU SQ8GHY SQ8IJZ SQ8KFM SQ8MFB SQ8MFM SQ8MXK SQ8MZW SQ8N SQ8NGO SQ8NGV SQ8NQW SQ8OAU SQ8SET SQ8VPS SQ8Z SQ9ANS SQ9AOR SQ9BDB SQ9C SQ9CAQ SQ9D SQ9DJD SQ9DXN SQ9DXT SQ9E SQ9FCF SQ9FMU SQ9FQY SQ9HQ SQ9HZM SQ9I SQ9IAU SQ9IWS SQ9IWT SQ9JYK SQ9KDT SQ9KEJ SQ9KPK SQ9MUO SQ9MZ SQ9NFC SQ9NFQ SQ9NIU SQ9OUM SQ9PPT SQ9PUW SQ9S SQ9T SQ9UM SQ9V SQ9Z SQ9ZAX ST2M SU90IARU SU9IG SU9JG SV0GU SV1AAK SV1ABB SV1AER SV1AGJ SV1AIN SV1AJO SV1AOW SV1AVD SV1AVE SV1AVS SV1AZL SV1BDO/3 SV1BFW SV1BJP SV1BJW SV1BY SV1CAZ SV1CEI SV1CIF SV1CQN SV1DEW SV1DKD SV1DOJ SV1DOO SV1DPI SV1DPJ SV1DPP SV1DZB SV1DZI SV1EEM SV1EET SV1EJD SV1ELF SV1ELI SV1EML SV1EMY SV1ENG SV1EQU SV1FJF SV1GE SV1GFM SV1GRB SV1GRD SV1GSV SV1GSX SV1GYG SV1HEM SV1HEM/3 SV1HEP SV1IA/8 SV1JDZ SV1JFL SV1JFV SV1JG SV1JHV SV1JMC SV1JMF SV1JMO SV1JRS SV1JSN SV1KWA SV1KWG SV1KYC SV1LHZ SV1LK SV1LV SV1ME SV1MNF SV1MO SV1NJA SV1NJW SV1NN SV1NZR SV1NZX SV1OCA SV1OCQ SV1ONV SV1PAJ SV1PIZ SV1PMH SV1PMQ SV1PMR SV1QXU SV1QZT SV1RB SV1RHL SV1RK SV1RMB SV1RP SV1RRP SV1RUX SV1TN SV1UL SV1VJ SV1VN SV1XV SV2/LZ1ZJ SV2/SV1RP/A SV2AIU SV2AJX SV2AMD SV2BFN SV2BXA SV2BXZ SV2CLJ SV2CUI SV2CXI SV2DCD SV2DFK SV2DGH SV2DSB SV2DSJ SV2ESW SV2EVS SV2FLM SV2FLQ SV2GJV SV2HJQ SV2HJW SV2HNE SV2HNZ SV2HTI SV2HTX SV2HXV SV2HYB SV2JAO SV2JU SV2KF SV2KGA SV2MJY SV2NUB SV2OEL SV2OJJ SV2QQS SV2TX SV2YC SV3ALB SV3AQR SV3AUW SV3BSF SV3DCX SV3DVO SV3EXU SV3FUO SV3FUP SV3GKU SV3GKW SV3GKY SV3HHH SV3IBP SV3IBQ SV3ICK SV3ICL SV3QUP SV3QUQ SV3RF SV3RPQ SV4AAQ SV4FFL SV4LQW SV5/DL3DRN SV5/DL6MHW SV5/G4DJX SV5/OH2FUW SV5/OO4O SV5AZP SV5BYP SV5BYR SV5DKL SV6COH SV6DBL SV6EXJ SV6JHA SV6NNZ SV7BIP SV7BOT SV7CUD SV7JJZ SV7RRL SV8CRI SV8CS SV8CYV SV8DCY SV8DOU SV8DTD SV8IIR SV8IM SV8JNL SV8JNM SV8JTS SV8LMQ SV8P SV8PMM SV8QDJ SV8QG SV8RMA SV8RX SV9AHZ SV9COL SV9CVY SV9DJO SV9FBG SV9FBL SV9FBP SV9FBZ SV9GPM SV9GPV SV9KNK SV9MBL SV9OFS SV9RGI SV9RNG SV9RPE SV9SK SW3JH SW8WW SW9AA SW9XB SX0HQ SX1S SX1T SX1Z SX2V SX2X SX3B SX5R SX90IARU SX9C SY1AEA SY1AQG SY1BFI SY1BXD SY2BEW SZ1A SZ3P SZ4KRD SZ5RDS SZ6P SZ8LSV SZ9ERK T2AQ T2R T2XX T31MM T32AZ T32WW T40A T40HQ T40K T42A T42CH T42CT T42US T44A T46A T46B T46T T46X T48K T48RR T48T T49A T5W T6TM T77C T77CX T88DT T88ON T88WJ T88ZO T8ED T8TH TA/UT2II TA0I TA1AGA TA1AJJ TA1AL TA1AMO TA1API TA1BJ TA1BM TA1BX TA1CD TA1CH TA1CM TA1CQ TA1DX TA1ED TA1IFV TA1L TA1UT TA2ACW TA2AD TA2AET TA2AGO TA2AKG TA2AKX TA2ANB TA2ANL TA2BS TA2BV TA2BW TA2DA/4 TA2DE TA2DX TA2EJ TA2FE TA2IB TA2LG TA2LM TA2LP TA2MES TA2MN TA2NC TA2OQ TA2OTT TA2PI TA2RG TA3ABM TA3AER TA3AMH TA3APS TA3D TA3EL TA3EP TA3GO TA3IUY TA3IW TA3IWS TA3J TA3LSD TA3MA TA3MHA TA3OM TA3OO TA3SA TA3X TA4A TA4AJK TA4AKS TA4ASO TA4CS TA4ED TA4IM TA4LYL TA4MA TA4OSK TA4PR TA4RC TA4SO TA5ADK TA5BS TA5FA TA5ISJ TA7AO TA7AOF TA7ASN TA7EB TA7I TA7JE TA8A TB1DIG TC0A TC0F TC10M TC10R TC2C TC2G TC2MK TC2O TC3A TC3D TC3HQ TC3O TC3P TC3SO TC3T TC4A TC4LOVE TC5A TC7G TC90IARU TF1AM TF1VS TF2CT TF2CW TF2LL TF2MSN TF2R TF3AO TF3CW TF3CY TF3DC TF3DT TF3EK TF3EO TF3GB TF3JB TF3ML TF3PPN TF3SA TF3SG TF3T TF3VS TF3VS/P TF3W TF3Y TF4X TF8HP TF8KY TG0AA TG9ADM TG9ADQ TG9ADV TG9AFX TG9AMD TG9ANF TG9ANF/4 TG9IGI TG9IIN TG9NMG TI0DX TI1K TI1T TI2CC TI2CDA TI2DYP TI2EMG TI2KAC TI2KWN TI2OY TI2SW TI2TL TI2WMP TI3W TI4W TI5/W3TB TI5/W4TTT TI5M TI5TM TI5W TI6/HA5X TI8/AA8HH TI8II TI9T TK0C TK2A TK4LS TK4RB TK4RC TK5AE TK5EP TK5KP TK5MH TK5UX TK9R TK9T TM0HQ TM0R TM0T TM13WAP TM17PGM TM1A TM1O TM1T TM1W TM1X TM22TSF TM2B TM2F TM2G TM2M TM2PL TM2R TM2T TM2Y TM3M TM3R TM3T TM3Y TM3Z TM40ULIS TM4A TM4C TM4E TM4L TM4P TM4Q TM4X TM51LP TM5A TM5CD TM5G TM5J TM5L TM5M TM5N TM5OTT TM5T TM5TT TM5X TM5Y TM62EURO TM6G TM6M TM6T TM6V TM6X TM77M TM77X TM7A TM7D TM7F TM7G TM7M TM7X TM7XX TM84S TM8A TM8CIL TM9K TM9MC TO1A TO1E TO2A TO2EE TO2M TO3Z TO4GU TO4K TO5A TO66R TO6D TO7A TO7D TO8M TO90R TO972M TR8CA TS7P TT8AMO TX5EG TX8D TX8F TY2CD TY4AB TZ4AM TZ5XR U1BA U1BD UA0A UA0AAS UA0ABB UA0ACG UA0AD UA0ADX UA0AKY UA0ALQ UA0APV UA0AXX UA0BA UA0CID UA0CKW UA0DBX UA0DM UA0DX UA0IDZ UA0JFG UA0KBG UA0LBF UA0LCZ UA0LDW UA0LDY UA0LEP UA0LHS UA0LMO UA0LS UA0OD UA0OK UA0S UA0SBQ UA0SBQ/P UA0SDX UA0SE UA0SEP UA0SR UA0UK UA0UV UA0UY UA0W UA0WF UA0WY UA0XAK UA0XAK/3 UA0XAK/6 UA0ZAM UA0ZC UA0ZK UA1A UA1AAF UA1AFT UA1AFZ UA1AIR UA1AJ UA1ANA UA1APX UA1AQA UA1ATD UA1AUW UA1CAK UA1CBM UA1CE UA1CEC UA1CEG UA1CEI UA1CGS UA1CIO UA1CUR UA1F UA1F/P UA1MU UA1NFA UA1ODM UA1OIZ UA1OJL UA1OMS UA1OOX UA1ORK UA1RG UA1T UA1TAN UA1TGQ UA1ZCX/3 UA1ZFG UA1ZIK UA1ZJV UA1ZZ UA2CZ UA2F UA2FAK UA2FBQ UA2FDM UA2FF UA2FHZ UA2FL UA2FP UA2FT UA2FT/6 UA2FZ UA2K UA2KW UA3A UA3A/6 UA3A/P UA3AAJ UA3AB UA3ABF UA3ABJ UA3AGW UA3AKI UA3AP UA3AP/1 UA3BL UA3CFM UA3DCE UA3DER UA3DJG UA3DLD UA3DOM UA3DSN UA3DSS UA3DTK UA3DTT UA3DUJ UA3DVB UA3ECJ UA3EDQ UA3EUW UA3FF UA3FO UA3FQ UA3GAF UA3GBV UA3GIE UA3GR UA3GT UA3IBD UA3IHJ UA3IVF UA3KW UA3LAR UA3LID UA3LIZ UA3LLR UA3LMR UA3MEG UA3MIF UA3NFI UA3O UA3ON UA3OQ UA3P UA3PC UA3PI UA3PP UA3PQN UA3QAM UA3QGT UA3QJJ UA3QKA UA3QPA UA3QUO UA3QUP UA3R UA3RAW UA3RAX UA3RBP UA3RC UA3RE UA3RF UA3RJ UA3RKK UA3RMB UA3RN UA3RU UA3RW UA3SAQ UA3SCW UA3SKV UA3TCJ UA3THY UA3TJF UA3TW UA3UAD UA3UAT UA3UBT UA3UCD UA3UJP UA3VFS UA3VLO UA3VVB UA3X UA3XO UA3YAA UA3YCX UA3YCZ UA3YDH UA3YDI UA3YFL UA3YGP UA3YY UA3Z UA3ZAY UA4AAC UA4ACP UA4AQL UA4ARF UA4ASE/6 UA4ATB UA4ATR UA4AVN UA4C UA4CBJ UA4CC UA4CCG UA4CDL UA4CIF UA4CNJ UA4CX UA4F UA4FBG UA4FCO UA4FDL UA4FEN UA4FER UA4FTA UA4FX UA4HBM UA4HBW UA4HDB UA4HEZ UA4HGL UA4HIP UA4HRZ UA4HTT UA4HTZ UA4I UA4LCH UA4M UA4NAL UA4NBA UA4NC UA4NCE UA4NCI UA4NDX UA4NE UA4NF UA4NN UA4NU UA4NX UA4PAN UA4PAQ UA4PAY UA4PCF UA4PF UA4PKN UA4PN UA4PRU UA4QK UA4RF UA4RW UA4S UA4SBZ/6 UA4SJO UA4SN UA4UAR UA4UT UA4W UA4WAG UA4WAU UA4WAV UA4WFN UA4WGM UA4WJ UA4WW UA4YAD UA4Z UA5A UA5C UA5D UA5F UA5L UA6AA UA6AAK UA6ABE UA6ACA UA6AH UA6AIR UA6AK UA6AKD UA6ARR UA6ART UA6ATG UA6AUA UA6BFE UA6BGM UA6BRD UA6CC UA6CE UA6CT UA6DV UA6EC UA6EED UA6EX UA6FF UA6FP UA6FZ UA6G UA6GE UA6GF UA6GG UA6GO UA6HFI UA6HI UA6HLN UA6HLP UA6HRX UA6HZ UA6J UA6JQ UA6K UA6LCJ UA6LCN UA6LDD UA6LFQ UA6LJB UA6LN UA6LUQ UA6MA UA6MF UA6MM UA6MS UA6XES UA6YH UA6YI UA6YN UA6YW UA7A UA7G UA7K UA7KA UA7Q UA7R UA7RA UA7T UA8A UA8AA UA8U UA8WAA UA9A UA9AB UA9AC UA9ADG UA9AEU UA9AFS UA9AGX UA9ALE UA9AR UA9AU UA9AV UA9AX UA9AZ UA9BA UA9CAW UA9CBO UA9CDC UA9CEP UA9CES UA9CGL UA9CHL UA9CLR UA9CNX UA9CTT UA9CU UA9CU/P UA9CUA UA9CVQ UA9D UA9DR UA9FAR UA9FGJ UA9FKH UA9FLK UA9FM UA9JDP UA9JLL UA9JNT UA9KB UA9LAO UA9LBQ UA9LDD UA9LEW UA9LIF UA9MA UA9MHN UA9MLT UA9MLT/8 UA9MLY UA9MW UA9NN UA9NP UA9OBW UA9OC UA9ODU UA9OGF UA9OMT UA9OOQ UA9OQM UA9OR UA9QCP/3 UA9QM UA9R UA9SCX UA9SEC UA9SMU UA9SUV/8 UA9TF UA9UDX UA9UKL UA9UNG UA9UR UA9URF UA9URI UA9UX UA9W UA9XBJ UA9XCQ UA9XF UA9XK UA9XL UA9XMC UA9XO UA9XX UA9YE UA9YTN UA9ZZ UB0A UB3A UB3ALY UB3DAO UB3DDA UB4W UB4WAW UB5MBA UB6B UB7A UB7K UB8QAA UB9UAT UC0A UC0W UC1A UC2K UC3C UC4A UC4C UC4I UC5D UC5G UC5G/P UC6A UC7A UC7C UC8U UC9A UD0W UD1A UD3D UD3T UD4F UD4FD UD7A UD8A UD8V UE08F UE25R UE2MW UF1M UF1M/2 UF2F UF3A UF4M UF4M/P UF5D UF6V/R6CZ UF8T UG3G UG4A UG9C UI0L UI2K UI3A UI4I UI5F UI5R UI6A UI7C UI7F UI7K UI8CM UI8J UI9I UK/JE1RZR UK7AL UK8IAR UK8ICM UK8OM UK9AA UN/RT9T UN0C UN0LL UN0OA UN1HQ UN1L UN1O UN1QWA UN2E UN2G UN3GX UN3M UN3Z UN4L UN4PD UN4PG UN5GAV UN5GM UN5GV UN5J UN5P UN6G UN6LN UN6QDD UN6T UN6TA UN7CAW UN7CN UN7CW UN7EG UN7EV UN7FW UN7GBM UN7GCE UN7GDQ UN7GDR UN7ID UN7JID UN7JX UN7LAN UN7LAP UN7LV UN7LZ UN7LZ/7 UN7MMM UN7MWU UN7NR UN7PGA UN7PL UN7QCC UN7QF UN7TX UN7ZAF UN7ZW UN7ZZ UN8LYA UN8PA UN8PT UN9GD UN9L UN9LES UN9LW UP0L UP1G UP2F UP2L UP4L UP55GC UP7G UP9L UR0CB UR0EJ UR0HQ UR0HWZ UR0IQ UR0MM UR0MZ UR1G UR1HM UR1I UR1L UR1MI UR1MM UR1MN UR1YAA UR1YDD UR2HA UR2LM UR2LX UR2MO UR2MZ UR2VA UR2Y UR3ABI UR3ABM UR3ABQ UR3AC UR3AFS UR3CMA UR3CRO UR3EO UR3GU UR3HC UR3LM UR3LPM UR3PA UR3PGW UR3PHG UR3QCW UR3QGJ UR3QM UR3QTN UR3QX UR3RAA UR3UK UR3UT UR3WA UR4CU UR4CW UR4CYT UR4EI UR4EWA UR4GU UR4IOR UR4IZ UR4LCB UR4LFA UR4LG UR4LIN UR4LRG UR4LTX UR4MF UR4MG UR4MH UR4MM UR4MS UR4MSF UR4MTJ UR4MVJ UR4PWC UR4Q UR4QFP UR4QQF UR4QRH UR4RWW UR4RXJ UR4UWY UR4WWT UR4WZZ UR5AMJ UR5AO UR5AS UR5AW UR5CC UR5CDD UR5CN UR5CSL UR5E UR5EAF UR5EFL UR5EH UR5EIT UR5EOA UR5EPG UR5EPV UR5ER UR5EU UR5FBM UR5FCM UR5FEO UR5FHD UR5FOF UR5FS UR5GAW UR5GCM UR5GDX UR5IFB UR5IFM UR5IHD UR5IHQ UR5IPW UR5IRM UR5ITU UR5IUY UR5KED UR5KO UR5LAK UR5LAM UR5LBM UR5LCZ UR5LF UR5LJD UR5LY UR5MBA UR5MCX UR5MD UR5MDY UR5MGU UR5MM UR5MQS UR5MW UR5NDS UR5NF UR5NJW UR5NLA UR5PG UR5QBB UR5QU UR5QUM UR5QW UR5R UR5RP UR5SAU UR5SD UR5TM UR5TW UR5UBD UR5UBR UR5UDX UR5UJ UR5UKW UR5UZ UR5VAA UR5VAW UR5VFS UR5VR UR5WA UR5WAT UR5WCQ UR5WCW UR5WFJ UR5WFP UR5WHQ UR5WIF UR5WT UR5WX UR5XMM UR5YDH UR5ZDZ UR5ZEP UR5ZGY UR5ZTH UR6EA UR6GWZ UR6IG UR6II UR6IJ UR6IM UR6IMF UR6LAF UR6QS UR6QV UR7AA UR7CB UR7CQ UR7CT UR7D UR7EC UR7EN UR7EU UR7EW UR7EZ UR7GO UR7GP UR7HCX UR7HDP UR7HN UR7IKJ UR7IZ UR7LY UR7MA UR7MG UR7MZ UR7QC UR7QM UR7R UR7TT UR7TV UR7UD UR7VA UR7ZO UR8EQ UR8GL UR8GM UR8GX UR8GZ UR8IDX UR8IF UR8IW UR8QAF UR8QE UR8QR UR8QV UR8RF UR8UZ UR9MB UR9MC US0AK US0FF US0GA US0HZ US0IJ US0IW US0KF US0LW US0LY US0MF US0MS US0QG US0SY US0TA US0U US0UX US0VA US0YA US0ZK US1GCU US1GFW US1I US1ITU US1IV US1MM US1PM US1Q US1UD US1US US1UU US1UX US1VS US2E US2IR US2IW US2IZ US2MT US2UZ US2VA US2WU US2YW US3EW US3IG US3IM US3IP US3IY US3IZ US3LR US3LX US3QQ US3UA US4AS US4EG US4EM US4EX US4I US4IDY US4IPC US4IQ US4IQS US4IRT US4IWA US5AT US5CB US5CCO US5D US5EEK US5EFU US5ELM US5EOI US5ERQ US5IIM US5IMX US5IND US5LO US5LOC US5LOD US5LPO US5MEU US5MUW US5QRW US5QUB US5UC US5UCC US5UO US5UZ US5VX US5WE US5WFV US5XD US5ZCW US5ZE US6CQ US6EU US6EX US6IKF US6IKT US6ILF US7IA US7IB US7IGN US7IGN/A US7IID US7IM US7IY US7KC US7LM US7MM US7U US7UU US7VF US7WW US8AR US8IAT US8IB US8ICM US8IEU US8IM US8MS US8QQ US8UA US9PA UT/HA5UX UT0AZA UT0CK UT0EA UT0EK UT0EM UT0EO UT0FC UT0HB UT0LK UT0LWD UT0LWF UT0MF UT0MJ UT0NB UT0NN UT0NT UT0QA UT0QR UT0RF UT0RM UT0U UT0UM UT0UY UT0VE UT1AA UT1DX UT1E UT1EI UT1EK UT1FT UT1HZM UT1IM UT1KWA UT1PG UT1PO UT1QQ UT1S UT1UL UT1US UT1UW UT1V UT1XX UT1ZZ UT2AA UT2AB UT2AU UT2DW UT2EF UT2G UT2GA UT2HC UT2HM UT2II UT2II/P UT2IO UT2IS UT2IV UT2IW UT2IX UT2LF UT2MZ UT2PL UT2PX UT2QQ UT2QT UT2RI UT2S UT2SQ UT2T UT2UB UT2UN UT2UU UT2WQ UT2XQ UT3C UT3EK UT3EV UT3GP UT3GX UT3IA UT3IB UT3IJ UT3IT UT3IZ UT3L UT3MA UT3N UT3NA UT3NF UT3QA UT3QD UT3QN UT3QU UT3QZ UT3RN UT3RS UT3SO UT3UA UT3UCP UT3UFH UT3UFI UT3UIW UT3UIX UT3UV UT3UX UT3UZ UT3WM UT3WS UT3WX UT3XA UT4EK UT4ES UT4EX UT4HZ UT4IXZ UT4LW UT4MF UT4MM UT4MW UT4MWM UT4NW UT4NY UT4PR UT4PZ UT4QV UT4TA UT4U UT4UB UT4UEG UT4UEI UT4UFU UT4UFZ UT4UMZ UT4UP UT4UQ UT4URX UT4UWC UT4UWE UT4UXB UT4UYF UT4VW UT4WA UT4XU UT4ZG UT5AX UT5C UT5CL UT5CW UT5EA UT5ECZ UT5EDU UT5EL UT5EO UT5EOX UT5EPP UT5EUQ UT5HO UT5HX UT5IA UT5ID UT5IG UT5IZ UT5JAJ UT5KQ UT5LA UT5LO UT5M UT5MB UT5NC UT5NR UT5PQ UT5PY UT5RB UT5RQ UT5T UT5UDX UT5UGR UT5UHX UT5UIA UT5UJO UT5ULB UT5ULQ UT5ULX UT5UML UT5UN UT5UNZ UT5UQV UT5URW UT5UT UT5UUV UT5UX UT5VX UT5YY UT5ZA UT5ZC UT6CW UT6EE UT6EY UT6HX UT6IE UT6IS UT6LX UT6UA UT6UD UT7AT UT7AW UT7AXA UT7CA UT7CR UT7DU UT7E UT7EJ UT7EL UT7EM UT7EV UT7EZ UT7FO UT7HA UT7HM UT7IA UT7IS UT7IY UT7KF UT7LM UT7LW UT7MR UT7NI UT7NW UT7NY UT7QB UT7QF UT7QL UT7TA UT7U UT7UA UT7UD UT7UE UT7UU UT7UX UT7UZ UT7VR UT7WZA UT7X UT7ZZ UT8AL UT8AS UT8EL UT8ER UT8EU UT8IA UT8IBU UT8IK UT8IM UT8IO UT8IT UT8IV UT8LN UT8LO UT8MM UT8NQ UT8NT UT8QQ UT8RR UT8UD UT8UF UT8UL UT8UM UT8UU UT8UZ UT9ER UT9EZ UT9FJ UT9NA UT9UZ UU1CC/A UU4JMN UU7V UV0A UV1IW UV3QF UV3RT UV5EDW UV5EEO UV5EOZ UV5EVW UV5EVZ UV5QR UV5QR/P UV5U UV7E UV7IW UV7MA UV7U UV7V UW0K UW1G UW1GR UW1GZ UW1I UW1M UW1U UW1WU UW2M UW2Q UW2ZM UW3E UW3HM UW3L UW3M UW3U UW4E UW4I UW4U UW5Q UW5RG UW5SW UW5U UW5W UW5Y UW5ZM UW5ZO UW6E UW6M UW7CF UW7CN UW7F UW7LL UW7M UW7RV UW7W UW8SM UW9I UX0DL UX0FF UX0HO UX0KN UX0KR UX0LL UX0RR UX0SX UX0UW UX0ZAB UX1AA UX1BZ UX1CL UX1CN UX1CW UX1HW UX1IB UX1IL UX1IM UX1IW UX1LW UX1MH UX1UA UX1UF UX1UX UX1VT UX1VX UX2HB UX2HH UX2HO UX2HX UX2IB UX2IJ UX2IQ UX2KA UX2MF UX2QA UX2U UX2VA UX2X UX3HA UX3HX UX3IO UX3IT UX3IW UX3MF UX3MZ UX3UN UX3UV UX3ZW UX4CR UX4E UX4FC UX4MX UX4U UX4UA UX5HY UX5IO UX5IS UX5IZ UX5TQ UX5U UX5UN UX5UO UX5UU UX5UW UX5VK UX6FZZ UX6IB UX6IR UX6VA UX7BA UX7BV UX7IA UX7IB UX7IN UX7IW UX7LL UX7MA UX7MR UX7QD UX7QG UX7QV UX7U UX7UN UX7UU UX7UW UX7VA UX8IA UX8IR UX8IW UX8IX UX8IXX UX8ML UX8ZA UX9Q UY0CA UY0HY UY0IF UY0IW UY0ZG UY1HY UY1IP UY2IF UY2IZ UY2RA UY2UA UY2UQ UY2UR UY2ZA UY2ZZ UY3AW UY3CC UY3IC UY3IQ UY4W UY4WWA UY5AA UY5AB UY5AR UY5AX UY5HF UY5IC UY5IG UY5IS UY5LM UY5LQ UY5MB UY5MR UY5NYY UY5OO UY5QJ UY5QQ UY5QR UY5QZ UY5TE UY5VA UY5YA UY5YB UY5ZI UY5ZZ UY6U UY7C UY7CA UY7IS UY7LM UY7LU UY7M UY7MM UY7QN UY8IF UY8IO UY9IM UZ0A UZ0U UZ1RM UZ2HZ UZ2I UZ2M UZ2Q UZ3A UZ3RR UZ4E UZ4I UZ4U UZ5DM UZ5DX UZ5DZ UZ5Q UZ5U UZ5UA UZ5ZU UZ5ZV UZ7HO UZ7M UZ7U UZ9E V21ZG V25VYC V26B V26K V26M V2BM V31AX V31DL V31GW V31GX V31HQ V31JZ V31MA V31MU V31PS V31RJ V31TP V31VP V31WI V31YB V31YN V3A V3M V3T V4/K4ZGB V4/KE1B V43Z V44KAI V47JA V47T V51/TA1HZ V51B V51WH V51WW V51YJ V53DX V55DX V55V V67A V6A V6AAA V6Z V73D V73NS V84CQ V84O V85AVE V85TL VA1AVR VA1CC VA1CHP VA1MC VA1MM VA1SEA VA1XH VA2AFH VA2AGW VA2AM VA2AN VA2ASS VA2BN VA2BOY VA2BS VA2CO VA2CT VA2CZ VA2DW VA2EI VA2EN VA2ES VA2EU VA2EW VA2HMC VA2IA VA2III VA2KF VA2KZ VA2LC VA2LGQ VA2MM VA2MO VA2MP VA2NDX VA2NQ VA2OBW VA2OKG VA2OP VA2PL VA2PR VA2QA VA2QR VA2RAC VA2RC VA2RIO VA2RWN VA2SCH VA2SG VA2SJ VA2SPO VA2SS VA2UP VA2UQ VA2WA VA2ZM VA2ZZ VA3AAA VA3AAF VA3AC VA3ADW VA3AG VA3AGZ VA3AH VA3AMX VA3AR VA3ARI VA3ASE VA3ATB VA3ATT VA3ATW VA3BD VA3BGO VA3BKM VA3BP VA3CCO VA3CD VA3CME VA3CP VA3CWT VA3DAZ VA3DBT VA3DF VA3DN VA3DP VA3DX VA3DXA VA3DXK VA3DZ VA3EC VA3ECO VA3EE VA3EEB VA3EON VA3FC VA3FLN VA3FN VA3FP VA3FS VA3FUZ VA3FV VA3GD VA3GKO VA3GUY VA3HFP VA3HJ VA3HMP VA3HNK VA3HP VA3HWC VA3IIF VA3IK VA3IPG VA3IX VA3JCL VA3JLE VA3JLF VA3JT VA3KA VA3KAI VA3KGS VA3KS VA3KSF VA3KSS VA3KVI VA3LBR VA3LL VA3LR VA3MJR VA3MLV VA3MMV VA3MO VA3MQS VA3MTT VA3MW VA3MWL VA3MYC VA3NFL VA3NGE VA3NLC VA3NU VA3NW VA3OB VA3OK VA3OL VA3ONO VA3OV VA3PC VA3PCJ VA3PDG VA3PM VA3PMM VA3PUX VA3QB VA3QR VA3QV VA3QWW VA3RAC VA3RJ VA3RKM VA3ROC VA3SB VA3SB/W2 VA3SF VA3SFM VA3SGM VA3SK VA3ST VA3SWG VA3SY VA3SZ VA3TAL VA3TIC VA3TPS VA3TPV VA3TTB VA3TTZ VA3TUR VA3UG VA3VF VA3VMD VA3VS VA3VU VA3VW VA3WLD VA3WNO VA3WR VA3WU VA3WWX VA3XDU VA3XDX VA3XFC VA3XH VA3XO VA3XOV VA3YG VA3YP VA3YV VA3YYX VA3ZAK VA3ZB VA3ZDX VA3ZNQ VA3ZNW VA3ZTZ VA3ZV VA4CQD VA4HZ VA5AA VA5CW VA5DX VA5LD VA5LF VA5RI VA6AK VA6AN VA6CV VA6MA VA6MER VA6NJK VA6OK VA6RP VA6RTB VA6SP VA6SS/W7 VA6UK VA6WV VA6XDX VA6YK VA6YMM VA7AAA VA7AD VA7ADI VA7AM VA7AQ VA7BEC VA7BS VA7BWG VA7CAB VA7CDB VA7CDQ VA7CRZ VA7CW VA7DP VA7DX VA7DXC VA7DXX VA7DZ VA7EGZ VA7EU VA7FC VA7FMR VA7GAP VA7GE VA7GEM VA7GI VA7HZ VA7IR VA7JC VA7JW VA7KK VA7KO VA7LTX VA7MG VA7MM VA7MPG VA7MPG/W4 VA7NR VA7ODX VA7OM VA7OO VA7QD VA7RI/W7 VA7RME VA7RN VA7RR VA7RRD VA7RY VA7ST VA7TF VA7VF VA7VJ VA7VK VA7VX VA7XB VA7XNL VA7YJJ VA7ZM VA7ZOO VA7ZR VA7ZT VB2P VB2T VB2W VB3E VB7A VB7TP VC1E VC1G VC2A VC2T VC2W VC3A VC3C2C VC3D VC3E VC3I VC3R VC3S VC3T VC3W/2 VC3X VC4R VC6R VC6V VC6X VC6Z VC7G VC7J VC7M VC7O VC7R VC7T VC7X VC9T VE1/K7SJ VE1AI VE1ANU VE1AOE VE1AYY VE1BAB VE1BB VE1BLX VE1BMW VE1BZI VE1CHL VE1DDD VE1DI VE1DT VE1FO VE1FOX VE1HS VE1JBC VE1JS VE1LD VE1MW VE1NSS VE1OMI VE1OP VE1PZ VE1RAC VE1RSM VE1SKY VE1SQ VE1TK VE1TTT VE1TWM VE1VOX VE1WOW VE1WT VE1YVN VE1YX VE1ZA VE1ZAC VE1ZD VE1ZJ VE1ZZ VE2/DJ7JC VE2ACP VE2AED VE2AR VE2AWR VE2AWW VE2BCH VE2BDR VE2BHN VE2BK VE2BR VE2BU VE2BVV VE2BWL VE2BZO VE2CAQ VE2CEV VE2CJR VE2COK VE2CQ VE2CUR VE2CVI VE2CWI VE2CWQ VE2CWT VE2CYJ VE2DFO VE2DJC VE2DQO VE2DSB VE2DX VE2DXY VE2EBK VE2EBL VE2EH VE2ENN VE2ER VE2ESU VE2EUK VE2EZD VE2FET VE2FK VE2FLP VE2FU VE2FWW VE2FXL VE2GHI VE2GK VE2GSO VE2GT VE2GYA VE2HAY VE2HB VE2HFQ VE2HIT VE2HJ VE2HLS VE2HOG VE2HQ VE2IDX VE2IM VE2IR VE2JCW VE2JM VE2JR VE2KH VE2KOT VE2KTA VE2LAR VE2LH VE2LX VE2MAM VE2MF VE2NCG VE2NMB VE2NTT VE2OCH VE2OJ VE2OPB VE2OPL VE2PDT VE2PIB VE2PLX VE2QA VE2QGL VE2QQ VE2QV VE2QY VE2RFI VE2RO VE2RYY VE2SCA VE2SDM VE2SG VE2SIM VE2SMS VE2SRP VE2SS VE2SSS VE2TH VE2TSM VE2UKJ VE2UMS VE2VIA VE2VN VE2VTS VE2WA VE2XX VE2ZBI VE2ZC VE2ZT VE3AAT VE3ABN VE3AD VE3ADQ VE3AHY VE3AJ VE3AQ VE3ARF VE3ARN VE3ASL VE3AT VE3AXC VE3AXC/2 VE3AXW VE3AYR VE3BFU VE3BHD VE3BI VE3BR VE3BSB VE3BW VE3BWL VE3BXI VE3BZ VE3CBK VE3CES VE3CFK VE3CH VE3CIQ VE3CKG VE3CKO VE3CNA VE3CNX VE3CPI VE3CQH VE3CR VE3CRG VE3CSK VE3CV VE3CWM VE3CWN VE3CWN/W4 VE3CWU VE3CX VE3CXT VE3DC VE3DF VE3DFR VE3DO VE3DOU VE3DQN VE3DRZ VE3DS VE3DSE VE3DTI VE3DVY VE3DX VE3DXK VE3DZ VE3DZP VE3EDX VE3EDY VE3EEI VE3EEJ VE3EH VE3EIB VE3EID VE3EJ VE3EK VE3EL VE3EP VE3ESE VE3ETP VE3EVN VE3EXT VE3EXY VE3EY VE3EZ VE3EZB VE3FAS VE3FCT VE3FCX VE3FDP VE3FGU VE3FH VE3FHM VE3FI VE3FJ VE3FJB VE3FK VE3FLT VE3FRG VE3FST VE3FTG VE3FTM VE3FU VE3FWF VE3GFM VE3GFM/W4 VE3GFN VE3GMZ VE3GN VE3GNI VE3GNO VE3GO VE3GOL VE3GPM VE3GYL VE3GYY VE3HED VE3HEU VE3HG VE3HIA VE3HLM VE3HMK VE3HR VE3HTF VE3HX VE3IC VE3ICV VE3IDT VE3IGJ VE3IGN VE3IKT VE3IPS VE3IQZ VE3ITU VE3IZS VE3JAQ VE3JAR VE3JDF VE3JDF/W4 VE3JEV VE3JI VE3JM VE3JSO VE3JSQ VE3JST/W5 VE3JVG VE3JWH VE3KAO VE3KEH VE3KI VE3KKQ VE3KL VE3KP VE3KPV VE3KQK VE3KQN VE3KRP VE3KRV VE3KS VE3KTB VE3KTB/VY0 VE3KZ VE3LC VE3LDP VE3LFN VE3LFR VE3LJQ VE3LLV/W7 VE3LMP VE3LMS VE3LNW VE3LOE VE3LS VE3LVW VE3LXL VE3MA VE3MBI VE3MCF VE3MCZ VE3MDX VE3MEW VE3MFA VE3MGY VE3MH VE3MIS VE3MM VE3MNE VE3MNX VE3MPH VE3MR VE3MSS VE3MT VE3MV VE3MW VE3MXJ VE3MZD VE3NAE VE3NB VE3NE VE3NE/2 VE3NEA VE3NEP VE3NFN VE3NI VE3NLS VE3NLW VE3NNG VE3NNT VE3NPO VE3NQM VE3NR VE3NRG VE3NRJ VE3NRT VE3NUL VE3NZ VE3OD VE3ODR VE3OGP VE3OIL VE3OJN VE3OLP VE3OM VE3ON VE3OP VE3OP/VP9 VE3OSC VE3OSZ VE3OTL VE3OU VE3OW VE3OZO VE3PCP VE3PCW VE3PGT VE3PJ VE3PK VE3PM VE3PMA VE3PN VE3PQ VE3PUX VE3PV VE3PVI VE3PYG VE3PYJ VE3QAM VE3QBH VE3QEE VE3QN VE3QO VE3QVL VE3RA VE3RB VE3RC VE3RCN VE3RDE VE3RDP VE3RIA VE3RL VE3RNK VE3ROR VE3ROV VE3RR VE3RRD VE3RRH VE3RSA VE3RSP VE3RTL VE3RUA VE3RUV VE3RVA VE3RWA VE3RX VE3RXW VE3RYI VE3RZ VE3SAO VE3SAR VE3SB VE3SBI VE3SCN VE3SD VE3SGB VE3SHO VE3SIQ VE3SIZ VE3SKX VE3SMA VE3SME VE3SMF VE3SOO VE3SR VE3SS VE3SST VE3SSV VE3STV VE3SV VE3SVQ VE3SWA VE3SXB VE3SXY VE3TAZ VE3TCV VE3TG VE3THX VE3TM VE3TMG VE3TMT VE3TMV VE3TNC VE3TU VE3TUC VE3TW VE3TWG VE3TWM VE3TXO VE3UEK VE3UNA VE3UTA VE3UTT VE3UWC VE3UZ VE3VA VE3VAW VE3VC VE3VEE VE3VEU VE3VGI VE3VHB VE3VIG VE3VJC VE3VM VE3VN VE3VOC VE3VSA VE3VSM VE3VSM/HR9 VE3VTG VE3VV VE3VY VE3WDM VE3WEJ VE3WG VE3WPV VE3WPZ VE3WRL VE3WRW VE3WVA VE3WZ VE3XAT VE3XB VE3XBH VE3XD VE3XEM VE3XKZ VE3XL VE3XN VE3XQ VE3XR VE3XT VE3XYY VE3YAA VE3YF VE3YRA VE3YT VE3YV VE3YXO VE3YYK VE3ZBM VE3ZF VE3ZF/2 VE3ZI VE3ZM VE3ZN VE3ZT VE3ZW VE3ZY VE3ZZ VE4AKF VE4AMP VE4AMU VE4ATL VE4BAE VE4BDF VE4BG VE4CDX VE4CEM VE4CWF VE4DDO VE4DDW VE4DPR VE4DRK VE4DS VE4DXR VE4EA VE4EAR VE4ET VE4EV VE4FEEL VE4FH VE4GV VE4HQ VE4JBB VE4LG VE4MAD VE4MAR VE4ME/W4 VE4MG VE4MR VE4PDD VE4PJV VE4RAC VE4RBH VE4RK VE4RW VE4SNA VE4TTH VE4TV VE4VJR VE4VT VE4XC VE4XI VE4XT VE4YU VE5AAD VE5CJB VE5CON VE5CPU VE5DLC VE5DLD VE5EI VE5EL VE5FX VE5GC VE5JL VE5KC VE5KS VE5MX VE5PK VE5PV VE5RAC VE5RC VE5RI VE5SDH VE5SF VE5SKI VE5SWL VE5TLW VE5UA VE5UF VE5UO VE5VG VE5VX VE5WI VE5XO VE5ZG VE5ZX VE6AMI VE6AO VE6ARS VE6AVK VE6AX VE6BBD VE6BBP VE6BF VE6BI VE6CCM VE6CJ VE6CMV VE6CPK VE6CSX VE6CWG VE6DDD VE6DXV VE6EC VE6EFR VE6EN VE6EX VE6FI VE6FRD VE6FT VE6GCE VE6GD VE6IKR VE6IM VE6ISH VE6IVN VE6JAZ VE6JDN VE6JF VE6JOY VE6JY VE6KC VE6KD VE6KEE VE6KQ VE6LB VE6LK VE6LNZ VE6LRR VE6MRV VE6NR VE6NS VE6OH VE6QO VE6RA VE6RAC VE6RAJ/XE3 VE6RHB VE6RST VE6RYS VE6SH VE6SKY VE6SPS VE6SQ VE6SV VE6TK VE6TL VE6TN VE6UM VE6UX VE6VS VE6VS/3 VE6VY VE6WQ VE6WR VE6WT VE6WZ VE6WZL VE6XXZ VE6YMM VE6YV VE6YZ VE6ZC VE7AB VE7ACN VE7ACN/7 VE7AFZ VE7AHA VE7AHT VE7AIJ VE7AM VE7AOV VE7AS VE7AX VE7BC VE7BEE VE7BEF VE7BGP VE7BQO VE7BST VE7BV VE7BYI VE7CA VE7CC VE7CG VE7CK VE7CKZ VE7CNW VE7CUS VE7CV VE7CW VE7DAY VE7DB VE7DDG VE7DH VE7DP VE7DS VE7DX VE7DXF VE7DXH VE7EDZ VE7EME VE7EPO VE7ETS VE7FC VE7FCO VE7FE VE7FEI VE7FO VE7FSB VE7GBO VE7GHW VE7GL VE7GTC VE7GTW VE7HBS VE7HH VE7HLW VE7IAD VE7IBV VE7IG VE7IJJ VE7IO VE7JDZ VE7JH VE7JKZ VE7JMN VE7JO VE7KCY VE7KW VE7KWA VE7LGI VE7LSE VE7MR VE7NA VE7NBQ VE7NI VE7NY VE7NY/7 VE7NZ VE7OGO VE7ON VE7OR VE7PT VE7RAC VE7RB VE7RG VE7RK VE7RSV VE7SA VE7SAR VE7SCC VE7SGW VE7SJW VE7SK VE7SL VE7SNC VE7SO VE7SQ VE7SS VE7ST VE7SV VE7SZ VE7UBC VE7UF VE7URN VE7USE VE7VAW VE7VQ VE7VR VE7VV VE7VZ VE7WF VE7WJ VE7WNK VE7WO VE7XBP VE7XF VE7XMC VE7XNC VE7XNO VE7XS VE7XT VE7XV VE7YBH VE7YE VE7YU VE7ZR VE7ZSH VE7ZZZ VE8EV VE8GER VE8NSD VE8RAC VE9AA VE9AV VE9BWK VE9CB VE9CRM VE9CX VE9DX VE9FI VE9FX VE9GCS VE9GJ VE9HF VE9JEF VE9JT VE9KC VE9KM VE9KW VE9MCG VE9ML VE9MM VE9MWA VE9MY VE9NF VE9OA VE9RAC VE9RK VE9SF VE9UNB VE9WH VE9WW VE9XA VE9XX VE9ZY VE9ZZ VER20171103 VI100TRF VK1MA VK1NS VK1OO VK1TX VK2AAH VK2ACW VK2ALR VK2ARZ VK2AU VK2AXX VK2AZ VK2BCQ VK2BFC VK2BJ VK2BO VK2BOB VK2BPL VK2BXE VK2BYI VK2CA VK2CCC VK2COW VK2CPC VK2CRI VK2CSZ VK2CZ VK2DX VK2EIR VK2EL VK2FAD VK2FCOR VK2FGLB VK2FHRK VK2FJC VK2FSAV VK2GGC VK2GR VK2GZ VK2HDX VK2HJ VK2HJW VK2HOT VK2HTM VK2IA VK2IG VK2IM VK2IO VK2IR VK2IUW VK2KDP VK2KJJ VK2KTT VK2LEE VK2LX VK2MOR VK2NSS VK2NU VK2ON VK2OQ VK2PG VK2PN VK2PWR VK2PX VK2QO VK2QV VK2RT VK2SK VK2SR VK2TTP VK2UCT VK2WFT VK2WQ VK2WWV VK2XZ VK2ZQ VK3ACT VK3AKK VK3AMK VK3AQZ VK3AUQ VK3AVV VK3AVZ VK3AWG VK3BF VK3BL VK3BY VK3DGN VK3DOG VK3EGN VK3EW VK3FM VK3GA VK3GK VK3HF VK3HXT VK3IO VK3JA VK3JL VK3JLS VK3KRH VK3LM VK3MEG VK3MH VK3MHY VK3MI VK3OT VK3OY VK3SIM VK3SQ VK3SS VK3SX VK3TJS VK3TZ VK3VH VK3VIN VK3VT VK3VTH VK3WE VK4ACN VK4AFU VK4AH VK4AN VK4ATH VK4AXM VK4BL VK4BR VK4BRT VK4CAG VK4CC VK4CL VK4COZ VK4CT VK4DH VK4DMC VK4DX VK4EJ VK4FAAS VK4FFAB VK4FNQ VK4GMH VK4GSF VK4HDY VK4HEC VK4HG VK4HH VK4JU VK4KUS VK4KW VK4KX VK4LAT VK4LMB VK4MA VK4MIT VK4MON VK4MWG VK4NDX VK4NH VK4NH/6 VK4NM VK4NW VK4OQ VK4PDX VK4QH VK4QO VK4QS VK4SDD VK4SN VK4SP VK4TJF VK4TL VK4TT VK4UC VK4UR VK4VDX VK4VI VK4WR VK4XY VK4YS VK4ZD VK4ZP VK5ARG VK5BC VK5CJC VK5FTCT VK5GR VK5LJ VK5LTD VK5MTM VK5PAS VK5SA VK5WIA VK5ZK VK5ZZ VK6AAK VK6AJ VK6DW VK6FLAB VK6GOM VK6HG VK6HP VK6HZ VK6IA VK6IR VK6IT VK6KRC VK6LC VK6LW VK6NC VK6NE VK6RT VK6RZ VK6SMK VK6VAX VK6VZ VK6WX VK6XX VK7AC VK7BEN VK7BO VK7CW VK7DW VK7GK VK7GM VK7GN VK7QP VK7XX VK8AV VK8GM VK8HLF VK8HW VK8NSB VK8RD VK9CZ VK9NX VK9NZ VO1ABN VO1AW VO1AX VO1BB VO1BBN VO1BE VO1BQ VO1CAL VO1COD VO1CRC VO1DJT VO1HP VO1HZ VO1JLB VO1KVT VO1LET VO1MP VO1NA VO1NO/VE1 VO1OK VO1QU VO1RAC VO1RCH VO1SA VO1TTT VO1TX VO1VR VO1VXC VO1XT VO2AAA VO2AC VO2DX VO2ET VO2NS VO2RAC VO3A VP2EAQ VP2EC VP2EHC VP2EIM VP2EKG VP2ESC VP2ESM VP2ETE VP2MDG VP2MMF VP2MVV VP2MWA VP2VAJ VP2VGG VP2VI VP2VVV VP5CW VP5DX VP5H VP5K VP5M VP5P VP5S VP5W VP6AH VP6EU VP8NO VP9/G3VYI VP9/K3SW VP9/N3AD VP9/W6PH VP9AD VP9GE VP9HQ VP9I VP9ID VP9NNO VQ5E VQ9X VR20CC VR20ZQZ VR2CC VR2CO VR2EH VR2HF VR2UBC VR2UU VR2VIY VR2XAN VR2XMC VR2XMT VR2ZQZ VR2ZQZ/P VU2ABS VU2AE VU2AVG VU2BL VU2CDP VU2CPL VU2CVS VU2DCC VU2DED VU2DK VU2DSI VU2GRM VU2GRR VU2IBI VU2IT VU2IVV VU2JOS VU2KWJ VU2LBW VU2LOC VU2MJE VU2MTM VU2MUD VU2NFG VU2NKS VU2NSL VU2NXM VU2PAI VU2PTT VU2RBI VU2RCT VU2SGW VU2SMN VU2SMS VU2TMP VU2TO VU2UR VU2USA VU2WE VU2WJ VU2XE VU2XO VU2YVK VU2ZMK VU3DMP VU3KPL VU3MEY VU3NPI VU3NXI VU3TYG VU3WDN VY0CF VY0ERC VY1AAA VY1EI VY1JA VY1KX VY1MAB VY1MB VY1RAC VY2/W5AJ VY2/WJ5DX VY2/WS5K VY2CDX VY2GF VY2GQ VY2HF VY2IX VY2JC VY2LI VY2MP VY2OM VY2OX VY2RAC VY2RG VY2TT VY2TTT VY2WW VY2ZM W0AAA W0AD W0AF W0AG W0AG/7 W0AH W0AI W0AIH W0AJU W0AK W0ALS W0AMK W0AO W0ARW W0ATI W0AU W0AUR W0AWL W0BAV W0BBI W0BF W0BH W0BLK W0BM W0BNW W0BR W0BV W0BVR W0CAR W0CCA W0CET W0CG W0CGH W0CGM W0CI W0CKI W0CN W0CO W0CP W0CVR W0CW W0CZ W0CZE W0DB W0DC W0DD W0DET W0DF W0DIT W0DLE W0DLE/7 W0DQ W0DSW W0DV W0DYD W0EA W0EAR W0EAR/9 W0EB W0ECS W0EEE W0EET W0ELT W0EM W0ERE W0ERH W0ERJ W0ERP W0ETT W0EWD W0EXT W0FB W0FD W0FG W0FK W0FL W0FLS W0FM W0FRC W0FRE W0FS W0FW W0FY W0FYX W0GAC W0GFE W0GFM W0GG W0GHZ W0GJ W0GKP W0GLB W0GM W0GMO W0GN W0GQ W0GRY W0GS W0GTL W0GTS W0GUY W0GXA W0GXQ W0GZI W0HBH W0HDC W0HJW W0HJW/6 W0HNV W0HT W0HUR W0HW W0HXL W0IKE W0ILO W0IRS W0IS W0ISU W0IU W0IW W0IY W0IZ W0JAY W0JAZ W0JBR W0JEC W0JEE W0JIM W0JLC W0JLF W0JM W0JPL W0JRM W0JRP W0JSL W0JTC W0JV W0JW W0JWG W0JX W0KAN W0KEU W0KFG W0KIT W0KK W0KRD W0KT W0KU W0KVA W0KX W0LAL W0LD W0LEZ W0LFA W0LI W0LL W0LM W0LMU W0LPF W0LRF W0LS W0LSB W0LSD W0LVZ W0LWK W0LWU W0LY W0MA W0MB W0MHK W0MHZ W0MI W0MJN W0MLD W0MM W0MN W0MPM W0MR W0MRM W0MTA W0MU W0MY W0NA W0NBW W0NE W0NEB W0NEO W0NFD W0NFS W0NO W0NT W0NTA W0NUH W0NY W0NYA W0ODS W0OGH W0OIZ W0OJW W0OJY W0OPW W0OR W0ORH W0OS W0OVM W0OWB W0PAN W0PB W0PC W0PC/7 W0PE W0PER W0PHX W0PI W0PNA W0PPF W0PPX W0PR W0PV W0PY W0QC W0QIK W0QKL W0QQ W0QQG W0QU W0QXR W0RAA W0RAR W0RDE W0REW W0RI W0RIC W0RJE W0RK W0RMS W0RO W0RON W0RR W0RSJ W0RSP W0RSR W0RU W0RX W0RXC W0SA W0SD W0SEB W0SEI W0SHL W0SK W0SLW W0SMS W0SO W0SRC W0SV W0SZ W0TF W0TG W0TK W0TLX W0TMW W0TOL W0TT W0TU W0TUP W0TY W0UA W0UC W0UCC W0UCE W0UD W0UJ W0UO W0UY W0VB W0VFT W0VLL W0VM W0VTT W0VX W0WAB W0WDF W0WLL W0WMM W0WP W0WR W0WTF W0WX W0XA W0XE W0XG W0XI W0XL W0XW W0XXX W0YES W0YHE W0YJT W0YK W0YL W0YSE W0YVA W0YY W0YZZ W0ZA W0ZAP W0ZC W0ZD W0ZF W0ZH W0ZP W0ZQ W0ZS W0ZT W0ZTL W0ZWS W0ZWY W0ZYX W1/CT1AGF W1/YO7ARY W1AAC W1AAX W1AD W1ADX W1AEC W1AF W1AGC W1AIR W1AJM W1AJT W1AKI W1ALV W1AMJ W1AN W1AO W1AQ W1ARY W1ASB W1AST W1ATA W1ATE W1ATV W1AVK W1AW W1BEM W1BHC W1BIM W1BJ W1BNC W1BO W1BOS W1BP W1BRS W1BRU W1BS W1BWA W1CAT W1CCE W1CEK W1CK W1CLA W1CPR W1CRK W1CSM W1CTN W1CU W1CVE W1CX W1DA W1DAD W1DBD W1DEA W1DF W1DGG W1DGL W1DIG W1DIO W1DJR W1DQ W1DQD W1DV W1DWA W1DX W1DXH W1DYJ W1EAT W1EBI W1EBM W1EBR W1ECH W1ECT W1EDH W1EE W1EG W1EGJ W1EME W1END W1EPH W1EQ W1EQO W1ES W1ESE W1EZ W1FA W1FJ W1FM W1FMR W1FNB W1FNJ W1FOX W1FQ W1FTE W1FV W1FY W1FYM W1FYO W1FZ W1GAJ W1GC W1GCI W1GD W1GF W1GIV W1GKT W1GNR W1GQ W1GQQ W1GS W1GSH W1GSS W1GUE W1GWL W1GXZ W1GZ W1HBR W1HFF W1HFG W1HI W1HIS W1HK W1HP W1HR W1HRG W1HS W1HT W1HY W1IBI W1IBN W1IBQ W1IDL W1IDP W1IE W1IKE W1IL W1IS W1ITT W1ITU W1IU W1IZZ W1JA W1JAW W1JCW W1JFK W1JGM W1JHU W1JIW W1JKS W1JN W1JNZ W1JPR W1JQ W1JR W1JTS W1JU W1JWC W1JXN W1JY W1KBN W1KDA W1KF W1KM W1KMA W1KQ W1KRS W1KU W1KV W1KX W1LAW W1LDD W1LEM W1LGU W1LQ W1LTX W1LUC W1LWH W1LX W1LXA W1LY W1LZ W1MA W1MAD W1MAT W1MAW W1MBB W1MCH W1MD W1MJ W1MK W1MLG W1MME W1MO W1MQ W1MRQ W1MSW W1MU W1MWV W1NA W1NG W1NH W1NK W1NN W1NQT W1NRG W1NSK W1NT W1NVT W1NY W1OB W1OH W1OHM W1OKH W1ONE W1OOA W1OP W1OU W1OUN W1OW W1OX W1PDI W1PEF W1PFZ W1PH W1PID W1PIT W1PL W1PR W1QA W1QED W1QG W1QH W1QJ W1QK W1QS W1RAN W1REP W1RGA W1RH W1RJ W1RK W1RM W1RMM W1RO W1RPG W1RQ W1RSN W1RTS W1SAM W1SFR W1SFS W1SJ W1SKU W1SMH W1SMS W1SNE W1SRD W1SRD/6 W1SSN W1SYE W1SZ W1TAM W1TC W1TEF W1TEN W1TI W1TJL W1TM W1TMS W1TO W1TR W1TRB W1TRK W1TSM W1TU W1TW W1TY W1UE W1UF W1UJ W1UK W1UN W1UR W1USN W1UT W1UU W1VCM W1VD W1VE W1VEM W1VIV W1VM W1VO W1VOA W1VPR W1VRY W1VT W1WBB W1WC W1WCN W1WCT W1WEF W1WH W1WIU W1WLW W1WMU W1WOW W1WQG W1WQM W1WRA W1WV W1XK W1XM W1XP W1XP/4 W1XR W1XV W1XWX W1XX W1YK W1YL/7 W1YM W1YRC W1YSM W1YU W1YV W1YW W1YY/7 W1ZC W1ZD W1ZD/7 W1ZF W1ZFG W1ZGZ W1ZIY W1ZK W1ZQ W1ZR W1ZRV W1ZS W1ZT W1ZU W1ZX W1ZY W1ZZ W2/G6CBR W2AAB W2ACH W2ACY W2AFC W2AGR W2AIV W2AMA W2AMR W2ANQ W2APF W2ARB W2ARP W2ASA W2AW W2AXR W2AYM W2BEE W2BEW W2BJN W2BK W2BT W2BUD W2BVH W2BZR W2CAW W2CCC W2CCR W2CCW W2CDO W2CG W2CM W2CO W2CR W2CS W2CSI W2CVW W2CW W2DAN W2DAS W2DFC W2DLH W2DLT W2DPT W2DSX W2DTK W2DX W2DXE W2DZ W2DZO W2EA W2EB W2EF W2EFI W2EG W2EGG W2EHR W2EJG W2ESX W2FDB W2FDJ W2FH W2FKG W2FKN W2FMB W2FU W2FV W2FV/7 W2GB W2GD W2GDJ W2GEZ W2GGI W2GHD W2GHO W2GLD W2GLQ W2GN W2GOR W2GPS W2GR W2GS W2GSA W2GSB W2GTR W2HDI W2HH W2HL W2HRY W2HTI W2HUV W2HVH W2HZ W2ID W2II W2IIT W2IJ W2IKN W2IQ W2IQK W2IR W2IRT W2IU W2IW W2IX W2IY W2JAF W2JAT W2JC W2JDB W2JEK W2JGQ W2JHP W2JJ W2JJT W2JLK W2JRO W2JSJ W2JTF W2JTM W2JU W2JV W2KAI W2KJ W2KRY W2KS W2KSW W2KV W2LB W2LC W2LCA W2LCQ W2LE W2LGA W2LGB W2LI W2LJ W2LK W2LLR W2LO W2LP W2LPL W2LU W2LV W2MEB W2MF W2MGF W2MIA W2MKW W2MMD W2MRD W2MSW W2MV W2MWH W2MYA W2NBJ W2NGC W2NJ W2NK W2NO W2NP W2NPR W2NPT W2NQ W2NQ/7 W2NRA W2NTN W2NTV W2NYW W2OB W2OF W2OIB W2OK W2OKM W2OL W2OO W2OP W2OR W2ORC W2OSR W2OT W2PA W2PBR W2PD W2PIP W2PJ W2PK W2PKY W2PMC W2PV W2QE W2QF W2RA W2RAS W2RC W2RD W2RDX W2RE W2REA W2REC W2RES W2RF W2RLK W2RM W2RME W2RQ W2RR W2RRU W2RS W2RTG W2RTV W2RTY W2RU W2RX W2RYJ W2SFD W2SJ W2SKI W2SM W2SMF W2SN W2SNX W2SO W2SPB W2SY W2SZ W2TA W2TAG W2TB W2TD W2TET W2TF W2TIN W2TKE W2TT W2TV W2TX W2TZ W2TZX W2UDT W2UP W2VDZ W2VJN W2VJN/7 W2VL W2VM W2VO W2VQ W2VS W2VT W2VTV W2VU W2VUF W2WC W2WCM W2WCR W2WGK W2WI W2WK W2WKD W2WLD W2WNC W2WW W2XB W2XI W2XK W2XL W2XM W2XO W2XRX W2XS W2XYZ W2YC W2YCI W2YD W2YE W2YK W2YMZ W2YR W2ZAC W2ZC W2ZDP W2ZQ W2ZS W3AAX W3ACO W3ADC W3ADX W3AFC W3AG W3AI W3ALG W3AO W3APL W3ARO W3ASR W3ASW W3ATT W3ATV W3AW W3AYT W3AZD W3BAY W3BBO W3BC W3BEE W3BES W3BFC W3BGN W3BMD W3BS W3BT W3BTX W3BUI W3BW W3BXX W3BZN W3C/CUM W3C/LAN W3CB W3CCX W3CDW W3CDZ W3CF W3CG W3CL W3CP W3CQB W3CRZ W3CUB W3CWC W3CWE W3CWT W3DA W3DAD W3DB W3DDF W3DDT W3DE W3DF W3DIY W3DKT W3DLM W3DNA W3DQ W3DQN W3DQT W3DRW W3DVE W3DWJ W3DYA W3DZH W3EA W3EAX W3EC W3EEE W3EEK W3EF W3EFE W3EH W3EKT W3EME W3END W3ENM W3EP W3EP/1 W3ERN W3EX W3F/BUX W3F/TIO W3FA W3FAY W3FF W3FI W3FIZ W3FJ W3FME W3FOX W3FQ W3FRC/CAR W3FRC/NHA W3FRC/SNY W3FV W3FW W3GE W3GH W3GIS W3GJN W3GK W3GLH W3GLL W3GM W3GNQ W3GOE W3GQ W3GTL W3GV W3GVX W3GW W3GWM W3GWU W3GY W3HAC W3HDH W3HGT W3HH W3HHN W3HKK W3HMS W3HRS W3HVY W3HZU W3HZZ W3IAE W3IDT W3IHY W3II W3IL W3IP W3IQ W3IUU W3IY W3IZ W3JBS W3JCB W3JEH W3JM W3JO W3JRD W3JX W3KB W3KDR W3KHQ W3KKO W3KL W3KLG W3KM W3KS W3KWH W3KX W3LA W3LES W3LH W3LIF W3LL W3LP W3LPL W3LZR W3MBC W3MC W3MDS W3MEL W3MF W3MIE W3MJ W3MKG W3MLK W3MMM W3MPG W3MR W3MRL W3MS W3MSR W3MY W3NA W3NCR W3NF W3NIH W3NO W3NR W3NRJ W3NV W3NX W3NZL W3OA W3OD W3OFD W3OFT W3OK W3OKC W3ON W3OU W3OU/3 W3PA W3PAW W3PAX W3PD W3PF W3PG W3PGA W3PH W3PHL W3PN W3PP W3PR W3PRL W3PU W3PV W3PV/VP9 W3QT W3R/BUX W3R/LEH W3R/MCK W3RBX W3RC W3RFC W3RGA W3RI W3RJW W3RL W3RLO W3RLP W3RMH W3RMS W3RPH W3RQ W3RSS W3RTY W3RW W3RX W3SA W3SC W3SCA W3SD W3SFG W3SGJ W3SK W3SM W3SO W3SQ W3SZ W3TA W3TB W3TC W3TCA W3TLN W3TM W3TMB W3TMS W3TMZ W3TN W3TOM W3TOP W3TS W3TTT W3TW W3TZ W3UA W3UC W3UDX W3UEC W3UL W3UM W3UR W3US W3USA W3UTD W3UU W3UU/CUM W3VPJ W3VPR W3VYK W3WC W3WGM W3WGW W3WH W3WHK W3WKX W3WL W3WMU W3WN W3WOR W3WOT W3WT W3WTD W3WW W3XO/5 W3XOX W3YA W3YI W3YJ W3YQ W3YR W3YY W3YZM W3ZA W3ZDF W3ZGD W3ZL W3ZMN W3ZQI W3ZR W3ZV W3ZX W3ZYF W4/CX1EK W4/DK1HL W4/G3LIK W4/GW4JUN W4/KP4Y W4/MM0LID W4AA W4AAA W4AAW W4AAX W4ABQ W4ACJ W4ACM W4ACW W4AD W4ADB W4ADI W4ADL W4AFB W4AG W4AKO W4ALA W4ALF W4ALX W4AMP W4AMW W4AN W4ANT W4AP W4APZ W4AQL W4ARK W4ARW W4AS W4ASE W4ATD W4ATG W4ATL W4AU W4AV W4AWE W4BAB W4BAI W4BAX W4BBT W4BCG W4BCU W4BFB W4BFH W4BG W4BGH W4BGT W4BH W4BK W4BLA W4BMP W4BOC W4BOH W4BPO W4BQF W4BSF W4BTA W4BTZ W4BUW W4BVH W4BW W4BXI W4BZM W4CA W4CAE W4CAN W4CAR W4CB W4CBS W4CC W4CCH W4CCS W4CDA W4CHE W4CHI W4CI W4CLJ W4CM W4CMG W4CMM W4CN W4CNA W4COH W4COV W4CQ W4CQE W4CRN W4CRV W4CSB W4CU W4CUL W4CVY W4CWM W4CZU W4DAN W4DAO W4DAS W4DCS W4DD W4DEP W4DFG W4DFR W4DHD W4DHN W4DHT W4DHT/8 W4DJL W4DKB W4DL W4DML W4DNN W4DNQ W4DO W4DOW W4DR W4DRN W4DSL W4DTA W4DTO W4DUK W4DUX W4DV W4DVE W4DVG W4DW W4DX W4DXX W4EAB W4EAE W4EB W4ECA W4ECF W4EDE W4EE W4EEH W4EEY W4EF W4EG W4EJ W4EJG W4ELP W4ELU W4EMI W4ENT W4EPM W4ER W4ES W4ESA W4ETB W4EYJ W4EZ W4FC W4FCG W4FCR W4FDS W4FEB W4FFW W4FID W4FKM W4FOA W4FOT W4FRA W4FS W4FS/2 W4FSV W4FUN W4FYT W4GAD W4GAL W4GCB W4GD W4GDG W4GE W4GEH W4GFY W4GGM W4GH W4GHS W4GHV W4GKF W4GKM W4GKR W4GMT W4GNS W4GO W4GOK W4GR W4GRC W4GRV W4GSL W4GZX W4HCW W4HFH W4HG W4HGW W4HH W4HM W4HOD W4HOG W4HRL W4HS W4HVH W4HZ W4HZD W4IHI W4II W4IIC W4IM W4IMD W4IND W4IOD W4IOP W4IR W4IT W4IWH W4IX W4IY W4JAM W4JDS W4JES W4JFL W4JHU W4JKC W4JKL W4JL W4JNB W4JNC W4JNH W4JOV W4JRJ W4JS W4JSI W4JTB W4JTP W4JUU W4JVN W4KA W4KAP W4KAZ W4KFF W4KGC W4KJ W4KJP W4KKN W4KLY W4KMR W4KPG W4KQB W4KRN W4KS W4KTR W4KVS W4KW W4KYA W4KZ W4LAN W4LBG W4LC W4LDD W4LDE W4LGR W4LHS W4LIA W4LID W4LJS W4LK W4LL W4LLJ W4LLY W4LM W4LMD W4LOS W4LSC W4LSV W4LT W4LTE W4LVH W4LWW W4LWZ W4LX W4LXM W4MAA W4MAL W4MBD W4MC W4MDF W4MEA W4MEL W4MHA W4MID W4ML W4MLB W4MPJ W4MPS W4MQC W4MR W4MRJ W4MY W4MYA W4MZ W4NA W4NBS W4NC W4NE W4NF W4NFT W4NH W4NI W4NJA W4NJK W4NL W4NNF W4NPT W4NRG W4NT W4NWS W4NX W4NZ W4NZC W4OBY W4OC W4OCO W4OEP W4OEQ W4OG W4OKT W4OLB W4OM W4OV W4OX W4OZZ W4PA W4PAY W4PBJ W4PBU W4PDX W4PF W4PFM W4PGM W4PH W4PJW W4PK W4PL W4PM W4PNY W4PR W4PV W4QK W4QN W4QNW W4QO W4QYV W4RA W4RBB W4RDX W4RER W4REX W4RGH W4RGS W4RGW W4RHB W4RIK W4RIN W4RJC W4RJF W4RJJ W4RK W4RKC W4RLC W4RM W4RQ W4RR W4RRE W4RTT W4RVU W4RWL W4RYW W4RYZ W4SAA W4SCV W4SFG W4SIG W4SJD W4SJN W4SK W4SLT W4SNF W4SNL W4SNT W4SO W4SOH W4SPR W4SVP W4SYV W4TA W4TAA W4TAC W4TBD W4TCF W4TG W4TIJ W4TIY W4TJE W4TKI W4TKZ W4TLZ W4TMD W4TMO W4TMO/VE2 W4TMR W4TOY W4TTM W4TTO W4TTY W4TTZ W4TV W4TZM W4TZX W4UA W4UAL W4UAT W4UD W4UDH W4UDX W4UEF W4UG W4UH W4UII W4UK W4UKE W4UQ W4UT W4UTX W4UV W4UW W4UWC W4UX W4VA W4VAB W4VAS W4VCF W4VG W4VIC W4VIY W4VQ W4VU W4VWS W4WAV W4WAZ W4WC W4WCC W4WCD W4WFC W4WGN W4WJ W4WLF W4WNT W4WRL W4WRS W4WT W4WW W4WWQ W4WYI W4XD W4XK W4XMT W4XO W4XR W4XXV W4YAT W4YCC W4YDY W4YE W4YFJ W4YG W4YJC W4YK W4YN W4YOK W4YPW W4YY W4ZAO W4ZE W4ZGH W4ZGR W4ZGR/1 W4ZHR W4ZN W4ZOR W4ZPR W4ZRZ W4ZV W4ZWO W4ZYT W5/MM0LID W5/WP3C W5AAZ W5AB W5ABM W5ACA W5ACC W5ACO W5AHS W5AJ W5AK W5AKU W5AMU W5ANE W5ANR W5AP W5APO W5ARB W5ART W5ASP W5AT W5AUU W5AWP W5AZ W5BCA W5BEN W5BGP W5BIB W5BK W5BKV W5BM W5BN W5BR W5BRO W5BXY W5BY W5BYH W5CBF W5CF W5CGT W5CHA W5CJF W5CMM W5CO W5COV W5CRY W5CSM W5CSQ W5CT W5CUB W5CVE W5CW W5CWT W5DAC W5DAW W5DC W5DDL W5DET W5DMT W5DRR W5DT W5DXR W5DXS W5EA W5ECJ W5EEX W5EIY W5EK W5EMC W5EN W5ETJ W5ETM W5ETZ W5EWF W5EXJ W5FBK W5FCX W5FMH W5FOR W5FP W5FZ W5GA W5GAD W5GAI W5GCX W5GDX W5GF W5GFI W5GGH W5GGO W5GIL W5GIX W5GJ W5GKP W5GN W5GND W5GOL W5GTI W5GXT W5GZ W5HEX W5HFF W5HIO W5HJJ W5HU W5HY W5IB W5IDX W5IFP W5IGE W5IOO W5IP W5IPA W5IV W5IZ W5JAW W5JDF W5JE W5JJ W5JJR W5JK W5JLH W5JMW W5JNP W5JON W5JQ W5JR W5JTF W5JWP W5JZ W5KA W5KAL W5KBW W5KFT W5KI W5KL W5KLF W5KS W5KU W5KWB W5LA W5LD W5LDK W5LE W5LL W5LMM W5LRU W5LUA W5MEL W5MF W5MIG W5MJ W5MK W5MMM W5MPZ W5MRB W5MRM W5MVM W5MX W5NAC W5NC W5NDS W5NE W5NEM W5NN W5NOR W5NQH W5NUT W5NZ W5NZK W5OBM W5ODJ W5ODX W5OG W5OM W5ON W5OOO W5OX W5OXJ W5OZI W5PAA W5PD W5PDW W5PEH W5PET W5PF W5PJW W5PKK W5PR W5PUF W5QG W5QGG W5QKN W5QLF W5QM W5QQ W5QZ W5RAA W5RAW W5RCG W5RDL W5RE W5RF W5RIR W5RJT W5RKW W5ROK W5ROS W5RPU W5RQ W5RRR W5RRW W5RTA W5RU W5RYA W5RYC W5RZ W5SE W5SG W5SGL W5SH W5SJ W5SMB W5SS W5SUM W5SWV W5TA W5TCR W5TEN W5TET W5TGK W5THT W5TI W5TJS W5TKZ W5TM W5TMC W5TMT W5TN W5TT W5TTE W5TTY W5TUF W5TV W5TWT W5TX W5TZC W5UE W5UFA W5UH W5UHQ W5ULR W5UMS W5UN W5UR W5UX W5UXE W5VE W5VEK W5VGR W5VMD W5VQ W5VS W5VUY W5VX W5VY W5VYH W5WB W5WI W5WLX W5WMU W5WOS W5WQ W5WRL W5WSS W5WTC W5WTM W5WX W5WZ W5XB W5XC W5XD W5XF W5XTX W5XU W5XX W5XXL W5XZ W5YA W5YAR W5YB W5YBT W5YDM W5YKU W5YM W5YZ W5ZAX W5ZDN W5ZE W5ZG W5ZN W5ZO W5ZPA W5ZQ W5ZR W5ZTG W5ZTX W5ZZ W6/DG1CMZ W6/K2RP W6/NH7C W6/UA3TT W6ABM W6ADF W6AEA W6AEA/7 W6AER W6AF W6AFA W6AH W6AIM W6AIY W6AMM W6AMY W6AOZ W6APH W6APZ W6AQ W6ARA W6AT W6ATV W6AUN W6AWW W6AYC W6BB W6BBS W6BDW W6BHZ W6BIV W6BJB W6BO W6BRD W6BS W6BSD W6BSY W6BVB W6BX W6BXQ W6CA W6CCP W6CHP W6CS W6CT W6CWM W6DCC W6DEF W6DEN W6DFT W6DGD W6DMR W6DOJ W6DR W6DT W6DTJ W6DVS W6DWI W6EB W6EDY W6ELA W6ENZ W6ETJ W6EU W6EZE W6EZY W6FA W6FB W6FCS W6FD W6FM W6FTA W6FUV W6FXE W6GA W6GEE W6GJB W6GL W6GMP W6GMT W6GMU W6GOK W6GRD W6GRT W6GRV W6GX W6HA W6HB W6HD W6HDG W6HGF W6HRO W6HYD W6HYI W6HYK W6IA W6IA/7 W6ICM W6IFN W6IHG W6IHG/4 W6IJ W6INO W6IR W6IYS W6IZT W6JAZ W6JBR W6JCW W6JDB W6JEO W6JGR W6JHB W6JJJ W6JJY W6JK W6JOD W6JTI W6JV W6JVA W6JWK W6JWP W6JXH W6JZH W6KA W6KAP W6KBX W6KC W6KF W6KGP W6KGP/7 W6KH W6KK W6KKO W6KLE W6KPO W6KR W6KRF W6KRK W6KW W6KY W6LAX W6LD W6LDB W6LEN W6LFB W6LG W6LMU W6LP W6LSU W6LU W6LW W6LX W6MOB W6MSB W6MXL W6MY W6MYN W6MZ W6NCO W6NEK W6NF W6NIF W6NIK W6NJB W6NL W6NS W6NT W6NUC W6NV W6NWS W6NY W6NYA W6OAR W6OAT W6OEZ W6OFM W6OLA W6OOL W6OPO W6OQI W6ORZ W6OU W6OUL W6OVP W6OWI W6PEL W6PG W6PH W6PHO W6PI W6PJ W6PJJ W6PMD W6PNG W6PU W6PZ W6PZA W6PZA/7 W6QB W6QBF W6QE W6QFU W6QO W6QR W6QU W6QUV W6RA W6RBP W6RD W6RDF W6REK W6RFL W6RFU W6RGG W6RGS W6RHY W6RJM W6RKC W6RKE W6RLL W6RLL/7 W6RMC W6RO W6ROX W6RQ W6RQR W6RR W6RS W6RW W6RWC W6RYI W6SA W6SAI W6SAN W6SC W6SDM W6SDO W6SDY W6SF W6SFG W6SFI W6SFK W6SFM W6SHM W6SIY W6SJ W6SKI W6SL W6SOK W6SQC W6SR W6ST W6SX W6SZG W6SZN W6SZN/7 W6TA W6TCP W6TDX W6TK W6TMD W6TN W6TOI W6TRH W6TRI W6TSJ W6TXK W6TYG W6UB W6UC W6UDO W6UE W6UFO W6UJ W6UM W6US W6USN W6UV W6UW W6UWR W6UZ W6VAR W6VI W6VM W6VMW W6VNR W6VXP W6VY W6VYC W6WA W6WAT W6WB W6WDY W6WF W6WG W6WGF W6WRT W6WTL W6WVW W6WYT W6XB W6XI W6XK W6XR W6XU W6YA W6YDE W6YI W6YO W6YTG W6YW W6YX W6YXY W6ZAR W6ZE W6ZL W6ZM W6ZO W6ZPE W6ZQ W6ZR W7/HB9FHV W7AAD W7AB W7ABT W7AC W7ACW W7AE W7AEB W7AGA W7AH W7AI W7AIT W7AL W7AMI W7AQK W7ASC W7ASY W7AT W7AV W7AWH W7AYY W7AZQ W7AZY W7BA W7BAK W7BBQ W7BBW W7BDB W7BGO W7BJN W7BKN W7BMC W7BO W7BP W7BRO W7BU W7BV W7BZ W7CAR W7CB W7CBE W7CCE W7CDM W7CDP W7CFR W7CH W7CI W7CJH W7CK W7CLO W7CPI W7CSA W7CT W7CTA W7CWE W7CWR W7CYL W7DCE W7DDD W7DEQ W7DFO W7DG W7DK W7DO W7DRA W7DRM W7DX W7DXX W7DY W7DZD W7EB W7ECK W7EDC W7EEE W7EF W7EJS W7EKG W7ER W7ESE W7EW W7FB W7FD W7FFF W7FI W7FIA W7FKF W7FSL W7FUN W7FW W7FYR W7FYW W7FZY W7GAB W7GB W7GDK W7GET W7GF W7GKF W7GS W7GSV W7GT W7GTF W7HB W7HDU W7HJ W7HJ/4 W7HJL W7HPW W7HRC W7HTA W7HX W7HY W7IAN W7IDG W7IDM W7IEW W7IEX W7IFG W7IGC W7IIT W7IL W7ILD W7ISG W7IUO W7IV W7IVM W7IWW W7IXZ W7IY W7IZ W7JCR W7JHN W7JHR W7JIF W7JK W7JKC W7JLC W7JOI W7JSD W7JW W7JWM W7JWW W7KAM W7KB W7KBI W7KDL W7KEY W7KF W7KFI W7KG W7KKC W7KNX W7KOA W7KPL W7KTE W7LD W7LEB W7LGG W7LKG W7LNG W7LQ W7LR W7MAD W7MAE W7MBR W7MCK W7MCM W7MCP W7MDQ W7MEM W7MJM W7MLG W7MLH W7MRF W7MRG W7MTL W7MW W7NBH W7NER W7NFN W7NIK W7NN W7NP W7NQ W7NRX W7NT W7NUW W7NY W7NZJ W7OBI W7OE W7OIL W7OL W7OLY W7OM W7ON W7ONY W7OQ W7OTV W7OXB W7OZT W7PAU W7PE W7PEB W7PHX W7PI W7PIG W7PMF W7POE W7PP W7PRA W7PSK W7PT W7PU W7PV W7PX W7PXL W7QC W7QDM W7QHZ W7QL W7QN W7QQ W7QR W7RF W7RG W7RH W7RIS W7RIV W7RM W7RN W7RNF W7RPT W7RRS W7RT W7RTL W7RTM W7RTX W7RV W7RY W7SAA W7SAG W7SE W7SLS W7SLY W7SMW W7SO W7SP W7SQ W7SUR W7SW W7SXM W7SY W7TA W7TAO W7TDZ W7TG W7TGC W7THY W7TJ W7TLV W7TNA W7TOA W7TR W7TSQ W7TST W7TVC W7TX W7TY W7UA W7UB W7UDG W7UDH W7UPF W7USA W7UUU W7UV W7UZ W7VAS W7VI W7VJ W7VM W7VO W7VP W7VSM W7VXS W7WA W7WDX W7WEC W7WES W7WH W7WHO W7WHY W7WIA W7WM W7WML W7WMO W7WND W7WOF W7WR W7WRJ W7WSB W7WSV W7WVF W7WW W7XH W7XI W7XM W7XQ W7XT W7XU W7XZ W7YAQ W7YAQ/6 W7YED W7YKM W7YKN W7YOW W7YOZ W7YP W7YPZ W7YRC W7YS W7YV W7ZAC W7ZB W7ZC W7ZCU W7ZEB W7ZF W7ZI W7ZJ W7ZOI W7ZP W7ZR W7ZRC W7ZT W7ZXQ W7ZZ W8/UR5MID W8/UT5UDX W8AB W8ACP W8ACW W8AH W8AHT W8AJK W8AJM W8AJS W8AJT W8AKS W8AL W8ALP W8AN W8ANT W8ANU W8AR W8ARC W8ARU W8ASA W8AT W8ATE W8AU W8AV W8AWE W8AYL W8AZA W8BAP W8BAQ W8BAR W8BBM W8BD W8BFX W8BG W8BHA W8BI W8BM W8BN W8BT W8BTD W8BUD W8BZA W8BZY W8CAG W8CAR W8CDX W8CHM W8CMK W8CO W8CQU W8CSX W8CT W8CUB W8CWG W8CZN W8DC W8DCQ W8DE W8DEO W8DF W8DGN W8DHG W8DLD W8DMB W8DPK W8DSN W8DW W8DWC W8DX W8DXA W8DXU W8DYY W8EDU W8EDW W8EEY W8EH W8EIR W8EMD W8ENO W8EO W8EQ W8ERN W8FAX W8FBE W8FDV W8FDX W8FHF W8FIB W8FJ W8FJ/3 W8FLT W8FN W8FNT W8FNW W8FP W8FR W8FT W8FTV W8FV W8FY W8GEG W8GEY W8GF W8GJ W8GK W8GNM W8GOC W8GP W8GPR W8GQN W8GU W8GWS W8GX W8HAP W8HC W8HCS W8HFY W8HGH W8HH W8HMK W8HN W8HOG W8HOM W8HP W8HPJ W8HW W8HY W8ICE W8ID W8IDM W8IDW W8III W8IM W8IPD W8IQ W8JA W8JBL W8JGU W8JH W8JHA W8JLR W8JLT W8JMB W8JMZ W8JRK W8JTW W8JWN W8JY W8KA W8KBW W8KEN W8KF W8KHP W8KID W8KJ W8KJP W8KMF W8KNO W8KP W8KQV W8KR W8KRS W8KRZ W8KSC W8KTQ W8KX W8LDR W8LHP W8LIG W8LJB W8LJZ W8LKY W8LLX W8LM W8LMG W8LPN W8LQD W8LRC W8LRL W8LSQ W8LVI W8LYJ W8MAA W8MAI W8MDG W8MDX W8MET W8MGM W8MHS W8MIL W8MJ W8MJM W8MKR W8MLS W8MMM W8MRC W8MRL W8MRM W8MSC W8MSK W8MSP W8NBO W8NCK W8NEO W8NFM W8NGA W8NIC W8NNC W8NNX W8NOR W8NP W8NRH W8NVC W8NWG W8OB W8OH W8OHT W8OMR W8OP W8OQ W8OTR W8OTY W8OU W8OV W8PEN W8PG W8PI W8PLZ W8PN W8PR W8PS W8PSP W8PT W8PU W8QB W8QIY W8QLY W8QR W8QZ W8RA/4 W8RD W8RES W8REW W8RF W8RGE W8RGL W8RHM W8RID W8RJL W8RLP W8RLS W8RMN W8RT W8RTJ W8RTN W8RU W8RWK W8SAW W8SDG W8SEV W8SH W8SOO W8SP W8SYD W8TA W8TAH W8TAM W8TAT W8TCM W8TDA W8TE W8TEE W8TFI W8TJM W8TK W8TM W8TNO W8TOM W8TOP W8TU W8TVO W8TWA W8TZA W8UE W8UF W8UL W8ULM W8UM W8UMH W8UN W8USA W8UV W8UVZ W8VCI W8VI W8VK W8VM W8VO W8VPV W8VS W8VVE W8VVL W8VY W8VZ W8WA W8WBW W8WCQ W8WD W8WDR W8WDW W8WE W8WEJ W8WFC W8WGT W8WKY W8WLK W8WOM W8WTD W8WTS W8WVU W8WY W8WZ W8WZZ W8XC W8XN W8XRW W8YCM/6Y5 W8YF W8YU W8YV W8ZA W8ZAC W8ZF W8ZHO W8ZJ W8ZM W8ZPF W8ZR W8ZST W8ZX W9/NP2I W9/SP8KK W9AA W9ABK W9ACB W9ADG W9AEB W9AEM W9AIU W9AJF W9AKS W9AKX W9AMM W9AN W9APE W9ARO W9ATG W9ATU W9AV W9AWE W9AX W9AZ W9BBF W9BEA W9BF W9BGJ W9BGX W9BK W9BLU W9BM W9BN W9BNO W9BS W9BU W9BWR W9CA W9CC W9CCU W9CEQ W9CF W9CHI W9CJO W9CL W9CLA W9CLQ W9CN W9CO W9CPV W9CQ W9CQQ W9CSX W9CTJ W9CYA W9DAD W9DC W9DCA W9DKB W9DLP W9DTO W9DUA W9DUP W9DX W9DYQ W9DZ W9EAU W9EBK W9EBO W9EBV W9EHQ W9ELN W9EO W9EQ W9EVT W9EWZ W9EX W9EZZ W9FAA W9FFA W9FI W9FK W9FML W9FNB W9FPZ W9FR W9FX W9FY W9FZ W9GA W9GD W9GDT W9GFB W9GG W9GIG W9GL W9GM W9GMW W9GO W9GRS W9GS W9GT W9GY W9GYK W9HAK W9HAM W9HB W9HBH W9HLY W9HM W9HRQ W9HT W9IE W9IFW W9II W9IIX W9IK W9IKU W9IL W9ILF W9ILY W9IMH W9IPR W9ITV W9IU W9JA W9JB W9JEF W9JGC W9JGV W9JH W9JI W9JJ W9JJB W9JLL W9JLW W9JOE W9JP W9JPR W9JTC W9JUG W9JWC W9JXN W9JZ W9KAY W9KAY/5 W9KG W9KHH W9KK W9KKL W9KKN W9KNI W9KVR W9KXI W9KXQ W9KY W9LC W9LDX W9LG W9LHG W9LMB W9LR W9LSD W9LSE W9LU W9LW W9LX W9MAF W9MAK W9MAR W9MC W9MCP W9MET W9MFD W9MK W9MMZ W9MNM W9MO W9MQB W9MRH W9MS W9MSE W9MSL W9MU W9MVA W9MXQ W9NC W9NE W9NED W9NF W9NJM W9NJP W9NJY W9NKV W9NWY W9NXM W9NY W9OA W9OA/9 W9OAB W9OD W9OF W9OFF W9OFQ W9OG W9OO W9OP W9OSI W9OY W9PA W9PC W9PL W9PL/7 W9POL W9PT W9QL W9QQ W9RE W9REA W9RF W9RFX W9RGB W9RIT W9RM W9RN W9RNK W9RNY W9ROG W9RTB W9RUK W9RVG W9SDX W9SE W9SGM W9SLB W9SMC W9SN W9SR W9SRW W9SUN W9SW W9SX W9SZ W9TA W9TAM W9TB W9TC W9TCH W9TE W9TH W9TMW W9TOC W9TS W9TTY W9TVX W9TW W9TY W9UAL W9UBP W9UBT W9UD W9UF W9UIH W9UK W9UM W9UUM W9UUU W9UXZ W9VA W9VCF W9VE W9VH W9VHL W9VNE W9VQ W9VW W9WAP W9WB W9WE W9WGN W9WI W9WJ W9WLX W9WO W9WS W9XA W9XS W9XT W9XX W9XY W9YA W9YAC W9YB W9YE W9YK W9YM W9YRC W9YS W9YSX W9YU W9YX W9ZCL W9ZJ W9ZJX W9ZL W9ZP W9ZR W9ZSJ W9ZV WA0ACF WA0AUX WA0BG WA0BJR WA0BSW WA0BZA WA0CED WA0CRI WA0CSL WA0CTZ WA0DDC WA0DGW WA0DIM WA0DKC WA0DX WA0E WA0EBZ WA0FAA WA0GUD WA0HHX WA0HRC WA0IIH WA0ILD WA0IYY WA0JCO WA0JTL WA0JZK WA0KDS WA0KNP WA0KWI WA0LEK WA0LIF WA0LJM WA0LPV WA0LRE WA0MHJ WA0N WA0NLK WA0OFM WA0PFC WA0PMO WA0QJE WA0QVC WA0RBW WA0RKE WA0RKQ WA0RSX WA0RVK WA0SHK WA0SMX WA0SPM WA0TTS WA0TXT WA0UAY WA0USA WA0VFE WA0VPJ WA0VQY WA0WDV WA0WOV WA0WWW WA0YAS WA0YPC WA0YSL WA0ZDE WA1AR WA1BXY WA1CQF WA1DD WA1DRQ WA1EAJ WA1EJK WA1EOX WA1F WA1FCC WA1FCN WA1FOK WA1FXK WA1GOS WA1GPO WA1GVM WA1HEW WA1HFF WA1HK WA1HRH WA1J WA1JD WA1JKR WA1JMP WA1JWJ WA1KKM WA1LSH WA1MAD WA1MPB WA1N WA1NBS WA1NPZ WA1OEJ WA1OJN WA1OTZ WA1PBU WA1PCY WA1PGB WA1PGB/6 WA1Q WA1S WA1SAY WA1SAZ WA1SKQ WA1SXK WA1SYH WA1T WA1TAC WA1TDQ WA1TOM WA1TTL WA1UJU WA1UZO WA1UZX WA1VKO WA1WK WA1YDH WA1YOF WA1YXV WA1YZN WA1Z WA1ZAM WA1ZIC WA1ZYX WA2AAW WA2ALY WA2AOG WA2AXD WA2AXO WA2BCK WA2BFW WA2BJN WA2BMH WA2BQU WA2C WA2CCN WA2CHV WA2CLX WA2CP WA2CXA WA2DHG WA2DIY WA2DNI WA2DX WA2EMF WA2EQF WA2ETU WA2EXZ WA2FAX WA2FBN WA2FGK WA2FON WA2FZB WA2GBF WA2GFN WA2HIP WA2HMM WA2HQL WA2HYO WA2HZO WA2HZS WA2IHE WA2IIE WA2IKL WA2JAL WA2JLW WA2JQK WA2JQZ WA2KEK WA2KHO WA2LOT WA2LTC WA2LTH WA2LXE WA2MAV WA2MBP WA2MCR WA2MLN WA2MZG WA2NCF WA2NDV WA2NEW WA2NHA WA2NYY WA2OAX WA2OCG WA2OMT WA2OPG WA2PCN WA2PIF WA2PNI WA2PYX WA2QAU WA2QJQ WA2QQF WA2RAS WA2RKO WA2RNM WA2RXS WA2S WA2SES WA2SON WA2SQQ WA2TDE WA2TIY WA2TMC WA2TMF WA2TP WA2TPQ WA2TPU WA2TRF WA2TYK WA2UBK WA2UFD WA2VAX WA2VJL WA2VNV WA2VQF WA2VQV WA2VQW WA2VUM WA2VUY WA2VYA WA2VZQ WA2WAP WA2WGF WA2WMJ WA2YCP WA2YLY WA2YSJ WA2ZFO WA2ZVN WA3A WA3AAN WA3AAT WA3ADI WA3AER WA3AFS WA3AUM WA3BKD WA3C WA3COM WA3CSP WA3DMD WA3DMT WA3DQS WA3DRC WA3DZS WA3EHD WA3EJL WA3EKL WA3ELQ WA3EOQ WA3EST WA3F WA3FET WA3FRP WA3FWA WA3GFZ WA3GGM WA3GM WA3GOS WA3GWK WA3GYW WA3HAE WA3HGW WA3HJJ WA3HLC WA3HSC WA3HVR WA3IEM WA3IHV WA3IIA WA3IVV WA3IWF WA3JPY WA3KVN WA3LAB WA3LKT WA3LWR WA3MD WA3MEJ WA3N WA3NAN WA3NUF WA3OFR WA3PFA WA3QWA WA3RGH WA3RHW WA3RLT WA3RNC WA3RSL WA3SEE WA3SRU WA3SWJ WA3TD WA3TFS WA3TLT WA3TMR WA3UCR WA3UFN WA3UKC WA3VSS WA3VYW WA3WAW WA3WDK WA3WNT WA3WOM WA3WSJ WA3WZR WA3YKI WA3YNF WA3YUR WA3YZD WA3ZIC WA3ZMH WA3ZSC WA3ZTR WA4AMG WA4APB WA4BCS WA4BQM WA4BUO WA4CAX WA4CHJ WA4CM WA4CQG WA4CR WA4DT WA4DXP WA4DYD WA4EEZ WA4EMU WA4EUL WA4FOM WA4GGK WA4GPM WA4GQG WA4GZK WA4HND WA4HXC WA4III WA4ILO WA4IPU WA4JA WA4JJY WA4JQS WA4JS WA4JUK WA4KNP WA4KSO WA4KXX WA4KY WA4KYI WA4LDU WA4LEX WA4LMG WA4LR WA4MFK WA4MIT WA4MLD WA4MSU WA4MYO WA4NID WA4NIV WA4NUF WA4PGI WA4PGM WA4PKL WA4PSC WA4PSO WA4PTZ WA4RNN WA4RQD WA4RTE WA4TAS WA4TCJ WA4TII WA4TMJ WA4UFG WA4UIH WA4USA WA4UWD WA4UYW WA4VGZ WA4VJK WA4WDV WA4WKL WA4WPD WA4WPG WA4WR WA4WSB WA4WTG WA4WW WA4YHA WA4YIZ WA4YJB WA4YL WA4ZOF WA4ZSQ WA4ZXV WA4ZZ WA5ABR WA5BDU WA5BJB WA5CAM WA5CAV WA5DM WA5DSS WA5DTK WA5EPF WA5FWC WA5ICA WA5IEK WA5IYX WA5JAN WA5KBH WA5KGW WA5KMH WA5LFD WA5LOU WA5LXS WA5M WA5MC WA5MS WA5MUE WA5NOM WA5OBV WA5OYU WA5PFJ WA5PMO WA5POK WA5RR WA5SAT WA5SNL WA5SOG WA5SWN WA5TRL WA5TVO WA5TYJ WA5VGI WA5WA WA5WFE WA5YNE WA5YOM WA5ZBX WA5ZFP WA5ZKO WA5ZUP WA6AAC WA6APQ WA6AUP WA6AZP WA6BFG WA6BJH WA6CAL WA6CDO WA6D WA6DBC WA6DIL WA6DPP WA6ERA WA6FFJ WA6FGV WA6FIZ WA6FXT WA6G WA6GD WA6GDU WA6HQQ WA6HZY WA6I WA6IQO WA6JRZ WA6KFI WA6KHK WA6KYR WA6LBU WA6LDI WA6LIE WA6LJS WA6LOC WA6MCL WA6MEM WA6MM WA6MMH WA6MRK WA6NFJ WA6NKM WA6NPA WA6O WA6OC WA6OSX WA6OUD WA6PKB WA6POZ WA6PPX WA6PSI WA6PWP WA6QYS WA6SCW WA6ST WA6SWM WA6SXU WA6SZE WA6TLA WA6TQT WA6URY WA6UXA WA6UYO WA6WGS WA6WXM WA6ZTY WA7AA WA7AJ WA7AMJ WA7AN WA7AR WA7AXT WA7BAM WA7BME WA7BNG WA7BNM WA7BZI WA7CC WA7DAU WA7DCG WA7DHQ WA7DIA WA7DUH WA7FXB WA7G WA7GVT WA7HJV WA7HQD WA7IIR WA7IPM WA7ITZ WA7JAW WA7JTM WA7JUJ WA7KPK WA7LAD WA7LAW WA7LNW WA7LT WA7MMM WA7NB WA7NBU WA7ND WA7NVT WA7NWL WA7OJA WA7OJY WA7OYY WA7PRC WA7QQI WA7RCT WA7RLL WA7RR WA7SHP WA7SRZ WA7TC WA7TOY WA7UTM WA7YAZ WA7YXY WA8A WA8AHZ WA8AXF WA8BMA WA8CDU WA8CLT WA8COB WA8CZD WA8DXB WA8EFK WA8EOJ WA8FOZ WA8FRD WA8FRE WA8FTA WA8IWK/4 WA8JKZ WA8JOC WA8KAN WA8KHP WA8KIW WA8KKN WA8LE WA8MCD WA8MKY WA8MOA WA8MXJ WA8NLX WA8NSS WA8NSS/4 WA8OJR WA8OLD WA8OLN WA8QYJ WA8QZS WA8RCN WA8REI WA8RFK WA8RJF WA8RPK WA8RRA WA8SDA WA8SDF WA8SHP WA8SRN WA8TJL WA8TM WA8TWM WA8UEG WA8UMT WA8UNL WA8UPB WA8VEC WA8VTD WA8WZG WA8Y WA8YVF WA8YWG WA8ZBT WA8ZHN WA8ZIP WA8ZRK WA8ZTZ WA8ZVK WA9AFM/5 WA9AGG WA9AQN WA9ASZ WA9ATT WA9AWO WA9BZW WA9CUK WA9CWX WA9DLB WA9EEE WA9ETL WA9ETW WA9FBC WA9FDO WA9FET WA9FFV WA9FIH WA9FWT WA9GBC WA9HED WA9IVH WA9JBR WA9JHH WA9JIB WA9JM WA9JOQ WA9JSI WA9JTG WA9JWL WA9KXZ WA9LEY WA9LJK WA9LKZ WA9LT WA9NJR WA9PIE WA9PWP WA9QEX WA9RCQ WA9RVM WA9S WA9SUG WA9TBA WA9TOP WA9TTC WA9URF WA9VEE WA9VGI WA9WSJ WA9YKK WA9Z WA9ZBW WA9ZEX WA9ZVF WA9ZWL/6 WB0ABM WB0AOD WB0B WB0CFF WB0CJB WB0CLL WB0DHB WB0DYZ WB0FTY WB0GAZ WB0GBI WB0GKH WB0GZR WB0HHM WB0IIS WB0IWG WB0KGN WB0KIU WB0KWJ WB0LJK WB0MCO WB0MMA WB0MNW WB0MPB WB0N WB0O WB0POH WB0POQ WB0PTO WB0PYF WB0QLU WB0RUR WB0SDW WB0SMX WB0SND WB0SND/4 WB0SNF WB0TEV WB0TEV/5 WB0TJD WB0TVY WB0U WB0UKI WB0ULX WB0USI WB0VAK WB0VPS WB0WIV WB0WQS WB0X WB0YEA WB0YXH WB0YYE WB0ZRD WB1ABQ WB1AEL WB1ASL WB1DX WB1DXD WB1FLD WB1FQW WB1FVY WB1GQR WB1J WB1KE WB1P WB1Q WB1W WB2AA WB2ABD WB2AIV WB2AKH WB2AMU WB2ART WB2ATZ WB2AWQ WB2BTJ WB2COY WB2COY/P WB2DNG WB2DX WB2ELD WB2ELW WB2EZG WB2FKO WB2FTQ WB2FUE WB2GDD WB2GHV WB2GJD WB2GMY WB2HJK WB2HJV WB2HLM WB2HRK WB2HRO WB2HTO WB2ICQ WB2IDV WB2JAY WB2JEP WB2JNA WB2JOB WB2JUF WB2JVB WB2KAO WB2KEC WB2KHE WB2KLD WB2KSP WB2KUT WB2LMA WB2LZM WB2MKX WB2MSB WB2MZI WB2NFL WB2NVR WB2NWR WB2OEE WB2OGY WB2OLJ WB2P WB2PAY WB2PEF WB2PJH WB2PKR WB2QJ WB2QMY WB2QOK WB2R WB2RAT WB2REM WB2RHM WB2RUU WB2RVX WB2RYV WB2SIH WB2SME WB2SMK WB2SVB WB2SXY WB2TPS WB2TQE WB2TSV WB2TT WB2UBW WB2UDC WB2UFO WB2UKX WB2ULR WB2UUD WB2UZE WB2VGD WB2VVV WB2VYK WB2WGH WB2WIK WB2WMF WB2WPM WB2WZC WB2YJS WB2ZAB WB2ZDD WB2ZEI WB3AAL WB3AFS WB3AGB WB3AVD WB3AVN WB3AXP WB3AZL WB3BEF WB3BGK WB3CCW WB3CII WB3CJU WB3D WB3DEL WB3DOM WB3DPS WB3DYE WB3EGD WB3EHS WB3EML WB3ESR WB3EVZ WB3EWL WB3EWP WB3FAE WB3FBL WB3FBR WB3FKP WB3FSR WB3GVT WB3IFD WB3IWC WB3J WB3JFS WB3JKQ WB3KTW WB3LGC WB3LHD WB3T WB4AAA WB4AEG WB4BLX WB4C WB4CTX WB4DKQ WB4DNL WB4E WB4EEH WB4EHG WB4EWS WB4FAY WB4FDT WB4FSF WB4FSV WB4FWQ WB4GHZ WB4GLI WB4GVZ WB4HUC WB4HXE WB4IIH WB4ILW WB4IT WB4IUY WB4JFS WB4JHS WB4JJJ WB4KDI WB4KFO WB4KLI WB4KTF WB4KTK WB4LLV WB4M WB4MDX WB4MJF WB4MM WB4MNK WB4MSG WB4MSN WB4NCT WB4NPK WB4NRE WB4OBF WB4OMG WB4OMM WB4OQL WB4OQX WB4OSS WB4OZM WB4P WB4PPW WB4PWZ WB4QIZ WB4RA WB4RRD WB4SPB WB4TDH WB4TOM WB4UHW WB4VMH WB4WTN WB4WXE WB4X WB4YDL WB4YDY WB4YZ WB4YZA WB4ZBI WB5A WB5BKL WB5EIN WB5GM WB5GWH WB5HJV WB5HOW WB5JC WB5JHY WB5JID WB5JJJ WB5K WB5KSD WB5L WB5LAI WB5LEO WB5LXJ WB5MXO WB5NHL WB5NOQ WB5OSD WB5OZA WB5Q WB5R WB5RKU WB5RR WB5RYB WB5TKI WB5TOI WB5TUF WB5UAA WB5UFR WB5VYR WB5WAH WB5WAJ WB5XX WB5ZGA WB6AAJ WB6AMY WB6BBB WB6BEE WB6BET WB6BFG WB6CKT WB6CZG WB6DJI WB6DTB WB6E WB6EGP WB6EWM WB6HFH WB6HVW WB6HYH WB6I WB6JJJ WB6JNN WB6JSB WB6JVP WB6KDH WB6KWL WB6L WB6MBF WB6MIO WB6MMQ WB6MWL WB6NBU WB6NER WB6NJA WB6NVB WB6NYR WB6OEE WB6OGD WB6OTS WB6OWZ WB6OZZ WB6POT WB6QPG WB6RAB WB6RIG WB6RJH WB6RLC WB6SKS WB6SQA WB6TYP WB6UIA WB6UOU WB6UTW WB6VGO WB6W WB7A WB7AAV WB7AEI WB7AGN WB7AKE WB7B WB7BBQ WB7BBU WB7BNE WB7CYO WB7D WB7ECS WB7FDQ WB7FJG WB7JEP WB7MT WB7OND WB7OTL WB7PMP WB7PVL WB7QDR WB7QMR WB7QXU WB7S WB7TPH WB7UBC WB7USM WB7UZO WB7VTY WB7Y WB8AHT WB8AJR WB8AKW WB8ASI WB8AXK WB8BHL WB8BPU WB8BZK WB8CKL WB8CQV WB8CTC WB8DC WB8DNO WB8EJN WB8EKG WB8FSV WB8FVB WB8FVO WB8IMY WB8JAY WB8JUI WB8K WB8LBZ WB8LCD WB8LEM WB8LZG WB8MIW WB8N WB8NUT WB8PMD WB8REI WB8RFB WB8RJY WB8ROI WB8RVK WB8SBI WB8SCT WB8SIG WB8SKP WB8TDG WB8TGP WB8TLI WB8TQZ WB8UJS WB8VGE WB8VLC WB8VLO WB8VOT WB8WKQ WB8YHD WB8YJF/4 WB8YLO WB8YQJ WB8YSQ WB8YXF WB8YYY WB8ZRL WB9AYW WB9B WB9BWP WB9CIF WB9COY WB9CTP WB9DBD WB9DKL WB9DLC WB9EDL WB9EDP WB9EEE WB9EFP WB9FBO WB9FMR WB9G WB9HFK WB9IKG WB9IRF WB9IWN WB9IXS WB9JNZ WB9JOX WB9JYZ WB9K WB9KPT WB9LBT WB9LRK WB9MMR WB9MSM WB9MYQ WB9NOO WB9O WB9OJE WB9ONU WB9QAF WB9QDL WB9QIU WB9QVR WB9RFV WB9SJZ WB9TFF WB9TFH WB9UGX WB9UJS WB9VGO WB9VKM WB9VKZ WB9WAJ WB9WHI WB9WOZ WB9WZA WB9YJE WB9YTG WB9Z WC0AAA WC0G WC0K WC0N WC0W WC0WB WC1M WC1P WC1T WC1X WC2C WC2K WC2L WC2W WC3A WC3N WC3O WC3W WC4CC WC4D WC4E WC4H WC4I WC4L WC4X WC5D WC5N WC5P WC5T WC6A WC6DX WC6H WC6K WC6YJ WC7Q WC7S WC8VOA WC9AR WC9N WD0AAH WD0ACB WD0AKZ WD0BGZ WD0CCC WD0CNZ WD0E WD0EDK WD0FYV WD0GTY WD0HHJ WD0K WD0L WD0MR WD0T WD0WD WD1DX WD1H WD1L WD1M WD1S WD1W WD2E WD2F WD3B WD3D WD3K WD4AB WD4AHZ WD4CFN WD4CVK WD4CWE WD4DXQ WD4E WD4ED WD4ERM WD4EXG WD4EXI WD4FRC WD4GBW WD4GXT WD4GXY WD4GZW WD4ISK WD4IXD WD4JJ WD4KGC WD4KTF WD4LBR WD4LSS WD4MGB WD4MRT WD4OHD WD4OIN WD4OOZ WD5ABC WD5ACR WD5BHS WD5BZN WD5CAW WD5CCA WD5CFM WD5COV WD5CSK WD5CVN WD5DAX WD5DBV WD5DFK WD5DJW WD5DW WD5F WD5FUN WD5GBS WD5GSL WD5HIO WD5HJF WD5IKX WD5IOM WD5K WD5KCA WD5R WD5RAH WD6BNY WD6DX WD6EIW WD6FIX WD6V WD7CW WD7I WD8AHR WD8ANZ WD8BAH WD8BP WD8BRJ WD8CW WD8DAS/VP9 WD8DSB WD8E WD8EOL WD8H WD8INW WD8IXC WD8JLD WD8JP WD8KDB WD8KNC WD8KND WD8KNI WD8KOB WD8M WD8NHA WD8NPL WD8NVP WD8OOJ WD8OSE WD8PBF WD8QGE WD8RIF WD8RUW WD8RYC WD8RYV WD8S WD8W WD9ABG WD9CIR WD9DZV WD9E WD9EXD WD9FJL WD9FTZ WD9FUM WD9GJK WD9GMK WD9GYM WD9HBC WD9HBF WD9HSY WD9HXC WD9HZK WD9IDS WD9IQN WD9Q WD9SEF WD9T WE0M WE0Q WE0RV WE0RV/2 WE1DER WE1P WE1SAX WE2ASS WE2ASS/NY6DX WE2N WE2W WE3C WE3C/4 WE4A WE4C WE4E WE4H WE4JL WE4M WE4RB WE4S WE5E WE5EE WE5TM WE5V WE6C WE6DX WE6EZ WE6M WE6Z WE7G WE7GV WE7H WE7K WE7OMG WE7P WE8J WE8P WE8R WE8T WE8UPJ WE9R WE9V WF0GM WF0RT WF0T WF1A WF1H WF1OC WF2B WF2D WF2S WF2V WF2W WF3A WF3C WF3H WF3J WF3M WF3T WF3T/4 WF4H WF4Q WF4U WF4W WF5E WF5K WF5O WF5X WF6C WF6F WF6Q WF7L WF7T WF8E WF9V WG0I WG0M WG0U WG0Y WG2B WG2Y WG3C WG3J WG4F WG4M WG4MC WG4P WG5D WG5F WG5G WG5H WG7H WG7X WG8AR WG8S WG8Y WG9L WH0RU WH2ACT WH6AQ WH6AQ/4 WH6AQ/W4 WH6ASW WH6EXS WH6JD WH6R WH6TT WH6W WH6WI WH6YH/4 WH6YH/W4 WH7AA WH7H WH7M WH7W WI0WA WI0Y WI1G WI1K WI1W WI2A WI2C WI2E WI2E/3 WI2G WI2W WI3M WI3R WI4J WI4L WI4MPY WI4R WI4T WI4USA WI6K WI6Q WI6R WI6S WI6T WI7J WI7N WI8G WI8L WI9B WI9H WI9P WI9P/0 WI9WI WI9X WI9Z WJ0T WJ0WE WJ0X WJ1B WJ1R WJ1T WJ1X WJ2D WJ2O WJ2R WJ4HCP WJ4VA WJ4X WJ7R WJ8Y WJ9B WJ9E WJ9X WK0I WK0P WK0V WK0W WK1DS WK1J WK1O WK1Q WK2G WK2H WK2X WK3A WK3N WK3T WK3V WK3Z WK4AA WK4DX WK4P WK4U WK4Y WK5T WK6A WK6F WK6KW WK7B WK7G WK7S WK9U WK9X WL7BKA WL7CSJ WL7CXM WL7CXP WL7E WL7F WL7OU WM0CW WM0L WM1F WM1G WM1V WM2W WM3J WM3X WM4AA WM4CH WM4I WM4P WM4Q WM4U WM5DX WM5F WM5H WM5Q WM5TS WM6A WM6H WM6P WM6Q WM7C WM7D WM7RC WM7X WM7Z WM8C WM8I WM9E WM9F WM9Q WN0L WN0R WN1E WN1G WN1GIV WN1M WN2E WN2IHJ WN2O WN3DX WN3I WN3LIF WN3N WN3R WN4AFP WN4AT WN4JC WN4N WN4R WN4S WN4VIC WN4W WN5G WN5TL WN5TS WN6K WN6M WN6W WN7J WN7RRX WN7S WN7T WN7Y WN8HCV WN8J WN8P WN8QGV WN8S WN8U WN8Y WN9O WN9VMR WN9W WO0C WO0KEE WO1I WO1N WO1X WO2H WO2N WO2Q WO2T WO2X WO2Y WO3E WO3O WO3X WO3Z WO4D WO4L WO4MW WO4O WO5S WO5W WO7G WO7I WO7R WO7T WO7V WO7Y WO8J WO8L WO8USA WO9B WO9S WO9Z WP2AA WP2B WP2E WP2NN WP2SC WP2TX WP2Z WP3C WP3CW WP3DX WP3E WP3EF WP3GW WP3Q WP3R WP3ZQ WP4CXG WP4DT WP4EHK WP4EJH WP4F WP4I WP4JCF WP4L WP4MPC WP4NXO WP4OFO WP4ONJ WP4OYN WP4PGY WP4PHY WP4RF WP4SD WP4SK WP4U WP4WV WP4WW WP4X WP4YL WQ0P WQ1C WQ1H WQ2N WQ2N/2 WQ2N/4 WQ3E WQ3N WQ3U WQ3X WQ4O WQ4RP WQ5C WQ5L WQ5MM WQ5O WQ5OO WQ5R WQ5RP WQ6C WQ6K WQ6O WQ6SL WQ6X WQ7A WQ7O WQ7X WQ8RP WQ8T WQ9A WQ9H WQ9T WR0F WR0N WR0U WR1B WR1Q WR1ST WR1TC WR1TR WR2G WR2K WR3A WR3L WR3O WR3R WR3Y WR3Z WR4A WR4B WR4F WR4I WR4JW WR4K WR4U WR5J WR5O WR5TX WR5U WR6K WR6M/VP9 WR6Y WR7J WR7K WR7Q WR7X WR8AA WR8O WR9AN WR9ARC WR9D WR9L WR9Y WS0I WS0TA WS0Z WS1C WS1F WS1L WS1SM WS2D WS2E WS2U WS3C WS3M WS3O WS4AM WS4C WS4H WS4NC WS4WW WS5ADV WS5C WS5W WS6K WS6K/8 WS6X WS7I WS7I/4 WS7L WS7M WS7V WS7X WS8D WS8KCC WS8O WS9H WS9I WS9M WS9V WS9W WS9X WT0A WT0O WT1A WT1L WT1M WT2P WT2P/9 WT3W WT3Z WT4BT WT4F WT4KY WT4O WT5L WT5RZ WT6A WT6K WT6P WT7S WT7TT WT7V WT8E WT8O WT8V WT8WV WT9B WT9Q WT9U WU0A WU0B WU0L WU1ITU WU1U WU2B WU2G WU2M WU2SWS WU2T WU2X WU2Z WU3A WU3D WU3H WU3Z WU4B WU4F WU4G WU4NC WU5E WU5X WU6C WU6D WU6K WU6TT WU6W WU6X WU6X/0 WU6X/4 WU6X/XE2 WU7F WU7H WU7Q WU8P WU8R WU9B WU9B/7 WU9D WV0CQ WV0H WV0Q WV1H WV1K WV1M WV2C WV2H WV2M WV2NY WV2ZOW WV3P WV4L WV4R WV4TN WV4V WV5Y WV6E WV6I WV6N WV7G WV7H WV7S WV8A WV8AR WV8DOH WV8ED WV8FKG WV8P WV8SW WV8WG WV9E WV9L WW0WWW WW0Z WW1DX WW1I WW1ME WW1ME/3 WW1WW WW2CW WW2DX WW2E WW2L WW2NC WW2NJ WW2P WW2V WW2Y WW3A WW3N WW3QB WW3S WW4A WW4B WW4CB WW4E WW4EN WW4JL WW4LL WW4N WW4OK WW4R WW4SF WW5DX WW5NX WW5RED WW5TT WW5XX WW6CC WW6D WW6G WW6M WW6O WW6OR WW7B WW7D WW7LW WW7Q WW7XX WW7Y WW8RT WW9DX WW9F WW9R WW9S WX0B WX0EK WX0ND WX0ST WX0V WX0Z WX1E WX1S WX1X WX2CX WX2F WX2N WX2S WX2T WX2U WX3A WX3B WX3G WX3K WX3P WX3SKY WX4CAZ WX4ET WX4F WX4G WX4MLB WX4MT WX4NFL WX4Q WX4RM WX4SKY WX4TC WX4TV WX4US WX4W WX4X WX5CW WX5S WX6B WX6V WX7B WX7JM WX7M WX7MB WX7P WX7SJ WX7T WX8C WX8DX WX8G WX8NN WX8P WX8V WX9EP WX9U WY0A WY0Q WY0V WY1C WY1G WY1U WY3A WY3P WY4I WY4Y WY5I WY5Y WY7AA WY7AC WY7FD WY7GC WY7I WY7JR WY7KY WY7QP WY7SS WY7VAF WY7YL WY8DX WY8I WY9S WY9V WZ0W WZ1F WZ1V WZ2J WZ2L WZ2N WZ2T WZ2Z WZ4F WZ4K WZ4L WZ4M WZ4P WZ5H WZ5TM WZ6G WZ6J WZ6ZZ WZ7E WZ7J WZ7ZR WZ8C WZ8D WZ8DX WZ8N WZ8P WZ8T WZ8T/7 WZ9B WZ9Z XE1AY XE1AY/2 XE1B XE1BY XE1CQ XE1CRG XE1CT XE1CTJ XE1CWJ XE1DES XE1EE XE1GK XE1GZU XE1H XE1HG XE1HON XE1IB XE1J XE1KK XE1LCG XE1LM XE1MEX XE1MM XE1NVA XE1OGG XE1RBV XE1RCS XE1REW/2 XE1RF XE1RK XE1RP XE1RZL XE1SGW XE1SIX XE1SOV XE1SVT XE1TD XE1USG XE1VY XE1XR XE1XZQ XE1ZTW XE1ZW XE2AA XE2AD XE2AU XE2B XE2BY XE2CQ XE2DN XE2ES XE2EX XE2FGC XE2G XE2HQI XE2I XE2IC XE2IF XE2JS XE2K XE2KHS XE2KJ XE2LVM XE2MVY XE2MX XE2N XE2NBL XE2NBW XE2NK XE2O XE2OK XE2PDZ XE2PMG XE2PXZ XE2S XE2ST XE2TH XE2TZP XE2WK XE2X XE2YWB XE2YWH XE3ARV XE3D XE3DX XE3MAS XE3N XE3RCC XE3TT XE3WAO XE3WM XE3WMA XF2L XK150YUKON XL2I XL3A XL3T XO1X XP3A XQ1CR XQ1KZ XQ1TUW XQ3PC XQ3UP XQ5CIE XQ6OA XR0YS XR1B XR1H XR1T XR2K XR3HQ XR3P XR6N XR6T XR90IARU XU7AJA XV1X XV2CJB XV2D XV4Y XV5HS XV9NPS XW0YO XW1IC XX9D XX9O XX9TIH XX9TXN YB0ANJ YB0ANN YB0AR YB0AZ YB0COU YB0COX YB0DJ YB0ECT YB0IBM YB0JS YB0JZS YB0MWM YB0MZI YB0NDT YB0NSI YB0OHG YB0PDZ YB0VB YB1AR YB1BGI YB1BML YB1BRS YB1C YB1CYD YB1EGP YB1FWO YB1HDR YB1JYL YB1KI YB1LUE YB1OZ YB1RUS YB1TIA YB1TJ YB1UUN YB2BOB YB2CPO YB2DX YB2ECG YB2LSR YB2TJV YB2TX YB2VMC YB2WWW YB3BX YB3EDD YB3FBZ YB3GXS YB3HJM YB3IZK YB3JOS YB3LZ YB3MM YB3TET YB3VI YB3VO YB3ZBN YB4IR YB5BOY YB5C YB5OUB YB5QZ YB6DE YB6HAI YB6IXJ YB6LAY YB6LBH YB6UAK YB7GRN YB7MRK YB7NUS YB7SKM YB8BRI YB8EL YB8FL YB8HI YB8HZ YB8IBD YB8NT YB8QF YB8ROP YB8RW YB8SNX YB8SX YB8TK YB8TM YB8UTI YB8XM YB8ZQP YB9GV YB9GWR YB9KA YB9WAN YB9WIC YB9WZJ YC0KBE YC0OSX YC1BET YC1BJX YC1CWK YC1CZZ YC1DOL YC1DPM YC1DTE YC1ELP YC1GI YC1HLT YC1KA YC1ME YC1PRF YC1UUU YC1ZAD YC2GV YC2JPO YC2MDU YC2NDX YC2OBI YC2OMY YC2TAN YC2TDA YC2VOC YC2YIZ YC3ARY YC3BFX YC3DY YC3ISB YC6BDD YC6GV YC6JRT/0 YC6MYO YC7JYD YC7TUU YC7UDD YC8HBN YC8HU/1 YC8QT YC8RBI YC8UM YC8UP YC8UTI YC8VRA YC9DEB YC9FAR YC9GWR YC9SCN YC9VMJ YC9WIC YC9XYP YD1DGZ YD1DMK YD1DTE YD1IMK YD1SDL/2 YD2YIZ YD2YQE YD4GBN YD4IRS YD8CPZ YD8GAR YD8UXV YD9SBP YD9SCN YD9YSS YE0HQ YE0PO YE0X YE1AR YE1C YE1GD YE1K YE1R YE1ZAL YE1ZAT YE2A YE2R YE3AA YE4IJ YE5XY YF1DO YF3BPL YF3CIF YF9CDL YG3CNU YG3CYS YG7SPN YJ0GA YL/ES5ZF YL0A YL0Y YL1S YL1XN YL1ZF YL1ZS YL1ZT YL1ZX YL2AG YL2BJ YL2BR YL2CI YL2CV YL2CZ YL2GD YL2GP YL2HB YL2II YL2IP YL2JR YL2JZ YL2KF YL2KO YL2LW YL2NK YL2NN YL2ON YL2PJ YL2PP YL2PZ YL2QG YL2QN YL2QV YL2SM YL2SW YL2TD YL2TQ YL2UI YL2VW YL3AD YL3AJI YL3CU YL3CW YL3DJ YL3FP YL3FT YL3FW YL3FX YL3GAO YL3GAZ YL3GDM YL3GQ YL3GV YL3GX YL3GY YL3HE YL3ID YL3IR YL3IZ YL3JM YL4HQ YL4U YL5T YL5W YL5X YL6W YL6Z YL7A YL9T YL9W YM1KD YM2KY YM3KB YM3VBR YM4KT YM7KA YM7KK YM9KM YN2CC YN2KW YN2RP YN2SX YN5Z YN7SU YN9SU YO/OM6TY YO11IPA YO12IPA YO2ADQ YO2AQB YO2AQO YO2BBX YO2BLX YO2BPZ YO2CEQ YO2CJX YO2CMI YO2DFA YO2GL YO2II YO2IS YO2KHK YO2LAN YO2LCP YO2LDU YO2LEA YO2LEL YO2LIW YO2LLL YO2LSP YO2LXW YO2MBU YO2MFC YO2MHJ YO2MJZ YO2MKI YO2MLS YO2MNZ YO2MOH YO2MSP YO2MTG YO2NAA YO2QY YO2RR YO3AAJ YO3AIS YO3APJ YO3AS YO3BA YO3BIZ YO3BY YO3CBZ YO3CCC YO3CIY YO3CVG YO3DAC YO3FF YO3FFF YO3FGO YO3FOM YO3FRI YO3GA YO3GCL YO3GD YO3GFH YO3GGO YO3GJC YO3GNF YO3HOT YO3IPA YO3IPR YO3IRM YO3IYO YO3JAV YO3JF YO3JOS YO3JR YO3JW YO3KST YO3LP YO3LW YO3ND YO3RU YO3VU YO3XX YO3YR YO4AAC YO4AJ YO4AR YO4ASD YO4ATW YO4BEW YO4BEX YO4BXX YO4CAH YO4CAI YO4CAS YO4CSL YO4CVV YO4DCF YO4DI YO4DW YO4FKO YO4FTE YO4FYQ YO4FZX YO4GM YO4GPC YO4GVC YO4JNX YO4JQ YO4KAK YO4KCA YO4KCC YO4MM YO4NF YO4PX YO4RDW YO4RIW YO4RST YO4RYU YO4SI YO4TL YO4UQ YO5AIR YO5AJR YO5AXF YO5AYT YO5BLA YO5BQQ YO5BRE YO5BRZ YO5BYV YO5CBX YO5CDF YO5COG YO5CRQ YO5CUQ YO5DAE YO5DAS YO5FMT YO5KAI YO5KDS YO5KFG YO5KLD YO5KMM YO5LD YO5NI YO5NY YO5OAC YO5OAW YO5OBA YO5ODT YO5OED YO5OHO YO5OHY YO5PBF YO5PCB YO5PQQ YO5TC YO5TI YO5TP YO6BHN YO6BJG YO6CFB YO6DBA YO6DBL YO6EV YO6EX YO6FGZ YO6FPW YO6FUG YO6GUU YO6HOY YO6HSU YO6KNE YO6KNY YO6KNZ YO6KPT YO6LA YO6LB YO6LV YO6MP/P YO6MT YO6OBK YO6ODP YO6OEK YO6PJR YO6PVK YO6QT YO6ZS YO7ARY YO7ARZ YO7AWZ YO7BPC YO7CDB YO7CJB YO7CKQ YO7CVL YO7DAA YO7DBR YO7DFC YO7DJ YO7FB YO7FEY YO7HGM YO7JBB YO7KFA YO7LDT YO7LGI YO7LHE YO7LID YO7LPZ YO7LYM YO7MPI YO7NE YO7NSP YO7SR YO7YO YO8/LZ4UU YO8AXP YO8BBU YO8BDQ YO8BDW YO8BFB YO8BFC YO8BGD YO8BGE YO8BIG/P YO8BOD YO8BPK YO8BSE YO8CIY YO8COQ YO8CRU YO8DAR YO8DHA YO8DOH YO8KGL YO8KOS YO8KRR YO8MF YO8MI YO8OU YO8PN YO8PS YO8RAA YO8RAW YO8RFS YO8RIX YO8RKP YO8RNI YO8ROO YO8RZJ YO8SAO YO8SBQ YO8SEP YO8SGQ YO8SJR YO8SMM YO8SS YO8ST YO8SXX YO8THG YO8TNB YO8TND YO8TTT YO8WW YO9ADN YO9AGI YO9AGN YO9AYN YO9BCM YO9BLY YO9BNP YO9BPX YO9BXE YO9CB YO9CKJ YO9CNU YO9CPJ YO9CWY YO9DL YO9FEB YO9FLD YO9FLL YO9FNP YO9FOC YO9FYP YO9GDN YO9GSB YO9GVN YO9GVS YO9HG YO9HP YO9HRB YO9IAB YO9IF YO9IJP YO9IKW YO9IOE YO9IPF YO9IXC YO9KPD YO9RIJ YO9WF YO9XC YO9XC/P YP0C YP0IPA YP3A YP5A YP5C YP6Z YP7A YP7P YP8A YP8T YP8VS YP8W YP9J YP9W YQ6A YR0HQ YR0S YR0W YR0WL YR1A YR1C YR2X YR30A YR31A YR32A YR55GC YR56GC YR5N YR5W YR7J YR8D YR8E YR8I YR8V YR9F YS1YS YT0A YT0B YT0HQ YT0I YT0T YT0W YT0Z YT15YOTA YT160NT YT16YOTA YT1A YT1AA YT1AD YT1AU YT1BX YT1CI YT1CS YT1FZ YT1HA YT1ML YT1R YT1RK YT1S YT1T YT1TM YT1TU YT1UM YT1WA YT1X YT1XN YT2AAA YT2AZD YT2B YT2C YT2DDK YT2ISM YT2NOD YT2PFR YT2R YT2RX YT2SMS YT2T YT2U YT2VP YT2X YT2ZZ YT3E YT3EE YT3EW YT3H YT3J YT3PL YT3T YT3TA YT3TPS YT3W YT3X YT45N YT4A YT4B YT4RA YT4T YT4TT YT4W YT5A YT5AAA YT5C YT5CQ YT5CT YT5DEY YT5FD YT5IVN YT5L YT5LD YT5M YT5MM YT5N YT5R YT5RA YT5T YT5W YT5X YT65A YT6A YT6HA YT6M YT6T YT6W YT7A YT7AR YT7AT YT7AW YT7B YT7DB YT7DQ YT7E YT7EC YT7EE YT7HA YT7KM YT7M YT7P YT7R YT7W YT7YT YT7Z YT8A YT8T YT8WW YT90IARU YT9A YT9M YT9VM YT9W YT9X YU/S56A YU0A YU0T YU0TESLA YU0U YU0W YU1AAV YU1AAX YU1AB YU1AFV YU1AHW YU1AM YU1ANO YU1AR YU1AST YU1BAU YU1BBV YU1BFG YU1BM YU1BN YU1BV YU1CC YU1DW YU1DX YU1EA YU1ED YU1EL YU1EW YU1EXY YU1FG YU1FJK YU1FW YU1GN YU1GU YU1HFG YU1IG YU1JF YU1JF/P YU1JW YU1KK YU1KN YU1KT YU1LA YU1LG YU1LM YU1M YU1MI YU1ML YU1NIM YU1NR YU1NT YU1OGA YU1RA YU1RH YU1RK YU1RM YU1RSV YU1SB YU1SMA YU1SMR YU1SS YU1TR YU1TY YU1UN YU1UO YU1USA YU1VG YU1W YU1WC YU1WN YU1XA YU1XX YU1YV YU1ZZ YU2A YU2AA YU2DBZ YU2DOC YU2FG YU2M YU2STR YU2U YU2ZZ YU3A YU3AWA YU3EEA YU3MMM YU3VIP YU3W YU4DEY YU4DX YU4SSR YU4ZZ YU5A YU5B YU5BDP YU5C YU5D YU5M YU5MOL YU5R YU5RY YU5T YU5W YU6AW YU6DX YU7AOP YU7AU YU7BL YU7BW YU7D YU7KM YU7KMN YU7KR YU7KW YU7NW YU7OM YU7U YU7UX YU7WW YU7XX YU7YZ YU7ZZ YU8A YU8NU YU9A YU9CF YU9MBA YU9XMC YV1AVO YV1DIG YV1KK YV1MAV YV1SW YV1YL YV2CAR YV2IF YV4ABR YV4AW YV4DX YV4ET YV4ET/5 YV4IVB YV4MT YV4MY YV4NN YV4NR YV4NY YV4RDC YV4VMT YV4YC YV50ARV YV5AAB YV5AAX YV5AJ YV5AM YV5ARM YV5COR YV5EAH YV5EED YV5EMG YV5EN YV5ENI YV5GJC YV5GPA YV5HNJ YV5IAL YV5IAL/7 YV5IUA YV5JBI YV5JDP YV5KAJ YV5KG YV5LAY YV5LMW YV5MYC YV5NI YV5NWG YV5OIE YV5PM YV5TNT YV6BXN YV6CA YV6CR YV6IA YV6YV YV7BMZ YV7DX YV7MAY YV8AD YV8ER YW315MCY YW4D YW4V YW5T YY1AFL YY1JLV YY1MTX YY2EDF YY2GAL YY2JAB YY4AJL YY4BDC YY4FJF YY4GRO YY4HMR YY4KCV YY4TSS YY4TSS/1 YY5JAK YY5OAO YY7MAY YY8HBO YY9JDT Z30A Z30HQ Z310ID Z31A Z31MM Z31NA Z31RA Z31WW Z32AJA Z32LM Z32TO Z32U Z32ZM Z33A Z33B Z33C Z33F Z33RW Z33SS Z33ST Z33Z Z35A Z35F Z35G Z35M Z35M/P Z35O Z35T Z35U Z35W Z35Z Z36N Z36T Z36W Z370M Z37CPR Z37M Z37V Z37Y Z39A Z3B Z3Y Z60A Z60WW Z61DX Z62FB Z68BB Z68BH Z81X ZA/IW2JOP ZA/OG1N ZA/OH2BH ZA/OH2YY ZA/OU2I ZA/PA2LS ZA/YT5Z ZA/YT7DQ ZA/YU7CM ZA/Z61DX ZA/ZA1P ZA1E ZA1F ZA1G ZA1W ZA1WW ZA5G ZB2CW ZB2EO ZB2TT ZB2X ZD7VC ZD7W ZD8V ZD8W ZF1A ZF2AE ZF2AH ZF2AM ZF2BJ ZF2CA ZF2DO ZF2ET ZF2EZ ZF2FL ZF2LC ZF2LL ZF2MJ ZF2NT ZF2PG ZF2SC ZF2TC ZF2ZE ZF9CW ZL1AA ZL1AAW ZL1AIH ZL1AIX ZL1ALA ZL1AM ZL1AQ ZL1BBW ZL1BHQ ZL1BXA ZL1BYZ ZL1CDX ZL1DK ZL1EL ZL1FTH ZL1GKB ZL1HD ZL1IF ZL1JV ZL1KEN ZL1M ZL1MRC ZL1N ZL1NZ ZL1OE ZL1OGX ZL1PO ZL1RQ ZL1SLO ZL1T ZL1TM ZL1WN ZL1X ZL1YE ZL2ACG ZL2AFT ZL2AGY ZL2AIM ZL2AJ ZL2AUA ZL2AUB ZL2AYZ ZL2AZ ZL2BCO ZL2CC ZL2EM ZL2FT ZL2GLG ZL2GR ZL2IFB ZL2JU ZL2MF ZL2MM ZL2MY ZL2OK ZL2RX ZL2ST ZL2UO ZL2W ZL2X ZL3AB ZL3ADT ZL3CC ZL3GA ZL3JAS ZL3JT ZL3LF ZL3NB ZL3PAH ZL3RN ZL3TE ZL3VZ ZL3X ZL40BQD ZL4AS ZL4FZ ZL4IR ZL4NR ZL4OL ZL4PW ZL4TT ZL4YL ZL5ZED ZL6HQ ZL7/W1XGI ZL7G ZL90IARU ZM1A ZM1M ZM2B ZM2IO ZM3T ZM4G ZM4M ZM4T ZP/N3BNA ZP3DYA ZP5AA ZP5AJR ZP5BVK ZP5CGL ZP5DBC ZP5DNB ZP5DVD ZP5MAL ZP5RPO ZP5WBM ZP6A ZP6AKY ZP6ARO ZP6DEM ZP6DYA ZP6VLA ZP9MCE ZR6DX ZR6GR ZR6K ZR9C ZS1/R3HD ZS1BHJ ZS1C ZS1EL ZS1LS ZS1OIN ZS1PZ ZS1RJQ ZS1ROM ZS1S ZS1SA ZS1TMJ ZS1VV ZS1X ZS1XG ZS1ZS ZS2ABE ZS2DL ZS2EZ ZS2GH ZS2HR ZS2I ZS2JV ZS2NF ZS2PE ZS2XD ZS3D ZS4/OH1JD ZS4AZ ZS4BM ZS4JAN ZS4TX ZS5J ZS5JY ZS5NK ZS5SAM ZS6A ZS6AF ZS6AI ZS6BAF ZS6BK ZS6BNS ZS6BRZ ZS6BYD ZS6C ZS6CCY ZS6EZ ZS6GU ZS6JP ZS6MAR ZS6NL ZS6RI ZS6RJ ZS6RKE ZS6TAN ZS6TVB ZS6UT ZS6WB ZS6WN ZS9HQ ZS9Z ZT6T ZT7T ZV10M ZV1AA ZV2C ZV2K ZV2O ZV5A ZV5D ZV5O ZV8P ZW0HQ ZW1A ZW1CML ZW1M ZW2F ZW3A ZW5B ZW5T ZW75FAB ZW8T ZX2B ZX2F ZX2V ZX5J ZY2A ZY2B ZY2WCI ZY3X ZY5A ZY8T ZZ2T ZZ5T ZZ7ZZ ZZ90IARU 7QNL 7QAA XE3/K5ENS OZ/DJ1XT OZ/DJ5LA XM1150CAN KH6/AI6DO W1UE/HR9 K1XM/HR9 tlf-1.4.0/share/ssamults0000644000175000017500000000006613562576621012141 00000000000000A B C D E F G H I K L M N O P R S T U W X Y Z AC BD tlf-1.4.0/share/help.txt0000644000175000017500000000637713562576621012047 00000000000000Keys (shortcuts) to be used in TLF If you want to see some of the start up parameters try: 'tlf -h'. Alt-a Cluster info Alt-b Band up Alt-t Tune Alt-n Note in log Alt-v Band down (CW Speed?) Alt-p turn PTT on/off Alt-h show help.txt Alt-w CW Weight Alt-i See talk messages Alt-j See QRG's Alt-k CW from Keyboard Alt-x exit program (Alt-q) Alt-m Multi display (Alt-c) Alt-s Score window (Alt-r) Alt-, show Bandmap Alt-j show frequency Alt-z show worked zones Alt-g grab Call (min. 2 letters from bandmap) Ctrl-a add a spot to list Ctrl-c Quit tlf Ctrl-b Cluster send Ctrl-g Grab a bandmap spot Ctrl-p MUF display Ctrl-page-up Auto CQ delay + Ctrl-page-down Auto CQ delay - Ctrl-k CW from keyboard Ctrl-f frequency control window Ctrl-t Send message Ctrl-r LPT0 pin 14 on/off (SSB mic) '+' Switch RUN/S&P (default, TR Log mode) '+' Send exchange (CT log mode) 'Insert' Log QSO (CT log mode) PG-UP CW + 2wpm PG-DWN CW - 2wpm ',' CW from Keyboard '.' filter bandmap content ';' Note in log F1 - F12 Send F1 - F12 msg TAB Switch fields ENTER Log qso, call cq SPACE Switch from call input to exchange field '\' Log qso w/o CW Up-arrow Edit prev qso '-' Delete last qso '_' confirm last serial nr '=' confirm last call L-arrow Edit call L/R Arrow Band change ESCAPE stop TX '"' Talk message '#' save/go to a MEM Frequency ! New shell :ssb Switch to ssb :cwm Switch to cw :dig Switch to rtty :hel Help :mes Set cw messages :set Edit config file :cfg Edit config file :sim CW CQWW Simulator :ZONes show list of zones to be worked :cty list of coutries to be worked :cqd CW delay :rit reset RIT after QSO is logged :VIEw show complete log :EDIt edit the log :LISt list CW messages :MESsage change CW messages :CHEck open Check window :NOCheck close Check window :pac open Terminal :CLUster open Terminal :SPOts only DX spots sorted by time :FILter filter DX Cluster content :map filter band map content :SYNc synchronize log in network :EXIt exit program :MULt toggle remaing multi display :CONtest toggle contest mode on/off :SCOre toggle score window on/off :FREq show frequency :CLOff Cluster off :INFo network status :TRXcont toggle TRX control on/off :CHAR Autosend: number of chars before starting to send :DEBug_tty test rig link :SOUnd record sound files :wri Write cabrillo :adi Write Adif :exi Exit tlf :inf Network info : Telnet window :ton Set sidetone (0 = off) :res Rescore :sou Sound utility tlf-1.4.0/share/cty.dat0000644000175000017500000023261413562576621011642 00000000000000Sov Mil Order of Malta: 15: 28: EU: 41.90: -12.43: -1.0: 1A: 1A; Spratly Islands: 26: 50: AS: 9.88: -114.23: -8.0: 1S: 9M0,BM9S,BN9S,BO9S,BP9S,BQ9S,BU9S,BV9S,BW9S,BX9S; Monaco: 14: 27: EU: 43.73: -7.40: -1.0: 3A: 3A; Agalega & St. Brandon: 39: 53: AF: -10.45: -56.67: -4.0: 3B6: 3B6,3B7; Mauritius: 39: 53: AF: -20.35: -57.50: -4.0: 3B8: 3B8; Rodriguez Island: 39: 53: AF: -19.70: -63.42: -4.0: 3B9: 3B9; Equatorial Guinea: 36: 47: AF: 1.70: -10.33: -1.0: 3C: 3C; Annobon Island: 36: 52: AF: -1.43: -5.62: -1.0: 3C0: 3C0; Fiji: 32: 56: OC: -17.78: -177.92: -12.0: 3D2: 3D2; Conway Reef: 32: 56: OC: -22.00: -175.00: -12.0: 3D2/c: 3D2C; Rotuma Island: 32: 56: OC: -12.48: -177.08: -12.0: 3D2/r: 3D2RI; Swaziland: 38: 57: AF: -26.65: -31.48: -2.0: 3DA: 3DA; Tunisia: 33: 37: AF: 35.40: -9.32: -1.0: 3V: 3V,TS,3V8CB/J; Vietnam: 26: 49: AS: 15.80: -107.90: -7.0: 3W: 3W,XV; Guinea: 35: 46: AF: 11.00: 10.68: 0.0: 3X: 3X; Bouvet: 38: 67: AF: -54.42: -3.38: -1.0: 3Y/b: 3Y0E; Peter 1 Island: 12: 72: SA: -68.77: 90.58: 4.0: 3Y/p: 3Y0X; Azerbaijan: 21: 29: AS: 40.45: -47.37: -4.0: 4J: 4J,4K; Georgia: 21: 29: AS: 42.00: -45.00: -4.0: 4L: 4L; Montenegro: 15: 28: EU: 42.50: -19.28: -1.0: 4O: 4O; Sri Lanka: 22: 41: AS: 7.60: -80.70: -5.5: 4S: 4P,4Q,4R,4S; ITU HQ: 14: 28: EU: 46.17: -6.05: -1.0: 4U1I: 4U1ITU,4U1WRC; United Nations HQ: 05: 08: NA: 40.75: 73.97: 5.0: 4U1U: 4U1UN; Vienna Intl Ctr: 15: 28: EU: 48.20: -16.30: -1.0: *4U1V: 4U0R,4U1A,4U1VIC,4U2U,4Y1A,C7A; Timor - Leste: 28: 54: OC: -8.80: -126.05: -9.0: 4W: 4W; Israel: 20: 39: AS: 31.32: -34.82: -2.0: 4X: 4X,4Z; Libya: 34: 38: AF: 27.20: -16.60: -2.0: 5A: 5A; Cyprus: 20: 39: AS: 35.00: -33.00: -2.0: 5B: 5B,C4,H2,P3; Tanzania: 37: 53: AF: -5.75: -33.92: -3.0: 5H: 5H,5I; Nigeria: 35: 46: AF: 9.87: -7.55: -1.0: 5N: 5N,5O; Madagascar: 39: 53: AF: -19.00: -46.58: -3.0: 5R: 5R,5S,6X; Mauritania: 35: 46: AF: 20.60: 10.50: 0.0: 5T: 5T; Niger: 35: 46: AF: 17.63: -9.43: -1.0: 5U: 5U; Togo: 35: 46: AF: 8.40: -1.28: 0.0: 5V: 5V; Samoa: 32: 62: OC: -13.93: 171.70: -13.0: 5W: 5W; Uganda: 37: 48: AF: 1.92: -32.60: -3.0: 5X: 5X; Kenya: 37: 48: AF: 0.32: -38.15: -3.0: 5Z: 5Y,5Z; Senegal: 35: 46: AF: 15.20: 14.63: 0.0: 6W: 6V,6W; Jamaica: 08: 11: NA: 18.20: 77.47: 5.0: 6Y: 6Y; Yemen: 21: 39: AS: 15.65: -48.12: -3.0: 7O: 7O; Lesotho: 38: 57: AF: -29.22: -27.88: -2.0: 7P: 7P; Malawi: 37: 53: AF: -14.00: -34.00: -2.0: 7Q: 7Q; Algeria: 33: 37: AF: 28.00: -2.00: -1.0: 7X: 7R,7T,7U,7V,7W,7X,7Y; Barbados: 08: 11: NA: 13.18: 59.53: 4.0: 8P: 8P; Maldives: 22: 41: AS: 4.15: -73.45: -5.0: 8Q: 8Q; Guyana: 09: 12: SA: 6.02: 59.45: 4.0: 8R: 8R; Croatia: 15: 28: EU: 45.18: -15.30: -1.0: 9A: 9A; Ghana: 35: 46: AF: 7.70: 1.57: 0.0: 9G: 9G; Malta: 15: 28: EU: 35.88: -14.42: -1.0: 9H: 9H,9H9PSG/J; Zambia: 36: 53: AF: -14.22: -26.73: -2.0: 9J: 9I,9J; Kuwait: 21: 39: AS: 29.38: -47.38: -3.0: 9K: 9K,NLD; Sierra Leone: 35: 46: AF: 8.50: 13.25: 0.0: 9L: 9L; West Malaysia: 28: 54: AS: 3.95: -102.23: -8.0: 9M2: 9M,9W; East Malaysia: 28: 54: OC: 2.68: -113.32: -8.0: 9M6: 9M6,9M8,9W6,9W8,9M4CCB,9M4SAB,9M4SJO,9M4SJSD,9M4SJSL,9M4SJST, 9M4SJSW; Nepal: 22: 42: AS: 27.70: -85.33: -5.75: 9N: 9N; Dem. Rep. of the Congo: 36: 52: AF: -3.12: -23.03: -1.0: 9Q: 9O,9P,9Q,9R,9S,9T; Burundi: 36: 52: AF: -3.17: -29.78: -2.0: 9U: 9U; Singapore: 28: 54: AS: 1.37: -103.78: -8.0: 9V: 9V,S6; Rwanda: 36: 52: AF: -1.75: -29.82: -2.0: 9X: 9X; Trinidad & Tobago: 09: 11: SA: 10.38: 61.28: 4.0: 9Y: 9Y,9Z; Botswana: 38: 57: AF: -22.00: -24.00: -2.0: A2: 8O,A2; Tonga: 32: 62: OC: -21.22: 175.13: -13.0: A3: A3; Oman: 21: 39: AS: 23.60: -58.55: -4.0: A4: A4; Bhutan: 22: 41: AS: 27.40: -90.18: -6.0: A5: A5; United Arab Emirates: 21: 39: AS: 24.00: -54.00: -4.0: A6: A6,A61FK/FD,A61Q/FD,A65DC/FD; Qatar: 21: 39: AS: 25.25: -51.13: -3.0: A7: A7; Bahrain: 21: 39: AS: 26.03: -50.53: -3.0: A9: A9; Pakistan: 21: 41: AS: 30.00: -70.00: -5.0: AP: 6P,6Q,6R,6S,AP,AQ,AR,AS; Scarborough Reef: 27: 50: AS: 15.08: -117.72: -8.0: BS7: BS7H; Taiwan: 24: 44: AS: 23.72: -120.88: -8.0: BV: BM,BN,BO,BP,BQ,BU,BV,BW,BX; Pratas Island: 24: 44: AS: 20.70: -116.70: -8.0: BV9P: BM9P,BN9P,BO9P,BP9P,BQ9P,BU9P,BV9P,BW9P,BX9P; China: 24: 44: AS: 36.00: -102.00: -8.0: BY: 3H,3H0(23)[42],3H9(23)[43],3I,3I0(23)[42],3I9(23)[43],3J,3J0(23)[42], 3J9(23)[43],3K,3K0(23)[42],3K9(23)[43],3L,3L0(23)[42],3L9(23)[43],3M, 3M0(23)[42],3M9(23)[43],3N,3N0(23)[42],3N9(23)[43],3O,3O0(23)[42], 3O9(23)[43],3P,3P0(23)[42],3P9(23)[43],3Q,3Q0(23)[42],3Q9(23)[43],3R, 3R0(23)[42],3R9(23)[43],3S,3S0(23)[42],3S9(23)[43],3T,3T0(23)[42], 3T9(23)[43],3U,3U0(23)[42],3U9(23)[43],B0(23)[42],B2,B3,B4,B5,B6,B7,B8, B9(23)[43],BA,BA0(23)[42],BA9(23)[43],BD,BD0(23)[42],BD9(23)[43],BG, BG0(23)[42],BG9(23)[43],BH,BH0(23)[42],BH9(23)[43],BI,BI0(23)[42], BI9(23)[43],BJ,BJ0(23)[42],BJ9(23)[43],BL,BL0(23)[42],BL9(23)[43],BT, BT0(23)[42],BT9(23)[43],BY,BY0(23)[42],BY9(23)[43],BZ,BZ0(23)[42], BZ9(23)[43],XS,XS0(23)[42],XS9(23)[43],B1,B2A[33],B2B[33],B2C[33],B2D[33], B2E[33],B2F[33],B2G[33],B2H[33],B2I[33],B2J[33],B2K[33],B2L[33],B2M[33], B2N[33],B2O[33],B2P[33],B3G(23)[33],B3H(23)[33],B3I(23)[33],B3J(23)[33], B3K(23)[33],B3L(23)[33],B6Q[43],B6R[43],B6S[43],B6T[43],B6U[43],B6V[43], B6W[43],B6X[43],B7A[43],B7B[43],B7C[43],B7D[43],B7E[43],B7F[43],B7G[43], B7H[43],B7Q[43],B7R[43],B7S[43],B7T[43],B7U[43],B7V[43],B7W[43],B7X[43], B8A[43],B8B[43],B8C[43],B8D[43],B8E[43],B8F[43],B8G[43],B8H[43],B8I[43], B8J[43],B8K[43],B8L[43],B8M[43],B8N[43],B8O[43],B8P[43],B8Q[43],B8R[43], B8S[43],B8T[43],B8U[43],B8V[43],B8W[43],B8X[43],B9A(24)[43],B9B(24)[43], B9C(24)[43],B9D(24)[43],B9E(24)[43],B9F(24)[43],B9S(23)[42],B9T(23)[42], B9U(23)[42],B9V(23)[42],B9W(23)[42],B9X(23)[42],BA2A[33],BA2B[33], BA2C[33],BA2D[33],BA2E[33],BA2F[33],BA2G[33],BA2H[33],BA2I[33],BA2J[33], BA2K[33],BA2L[33],BA2M[33],BA2N[33],BA2O[33],BA2P[33],BA3G(23)[33], BA3H(23)[33],BA3I(23)[33],BA3J(23)[33],BA3K(23)[33],BA3L(23)[33],BA6Q[43], BA6R[43],BA6S[43],BA6T[43],BA6U[43],BA6V[43],BA6W[43],BA6X[43],BA7A[43], BA7B[43],BA7C[43],BA7D[43],BA7E[43],BA7F[43],BA7G[43],BA7H[43],BA7Q[43], BA7R[43],BA7S[43],BA7T[43],BA7U[43],BA7V[43],BA7W[43],BA7X[43],BA8A[43], BA8B[43],BA8C[43],BA8D[43],BA8E[43],BA8F[43],BA8G[43],BA8H[43],BA8I[43], BA8J[43],BA8K[43],BA8L[43],BA8M[43],BA8N[43],BA8O[43],BA8P[43],BA8Q[43], BA8R[43],BA8S[43],BA8T[43],BA8U[43],BA8V[43],BA8W[43],BA8X[43], BA9A(24)[43],BA9B(24)[43],BA9C(24)[43],BA9D(24)[43],BA9E(24)[43], BA9F(24)[43],BA9S(23)[42],BA9T(23)[42],BA9U(23)[42],BA9V(23)[42], BA9W(23)[42],BA9X(23)[42],BD2A[33],BD2B[33],BD2C[33],BD2D[33],BD2E[33], BD2F[33],BD2G[33],BD2H[33],BD2I[33],BD2J[33],BD2K[33],BD2L[33],BD2M[33], BD2N[33],BD2O[33],BD2P[33],BD3G(23)[33],BD3H(23)[33],BD3I(23)[33], BD3J(23)[33],BD3K(23)[33],BD3L(23)[33],BD6Q[43],BD6R[43],BD6S[43], BD6T[43],BD6U[43],BD6V[43],BD6W[43],BD6X[43],BD7A[43],BD7B[43],BD7C[43], BD7D[43],BD7E[43],BD7F[43],BD7G[43],BD7H[43],BD7Q[43],BD7R[43],BD7S[43], BD7T[43],BD7U[43],BD7V[43],BD7W[43],BD7X[43],BD8A[43],BD8B[43],BD8C[43], BD8D[43],BD8E[43],BD8F[43],BD8G[43],BD8H[43],BD8I[43],BD8J[43],BD8K[43], BD8L[43],BD8M[43],BD8N[43],BD8O[43],BD8P[43],BD8Q[43],BD8R[43],BD8S[43], BD8T[43],BD8U[43],BD8V[43],BD8W[43],BD8X[43],BD9A(24)[43],BD9B(24)[43], BD9C(24)[43],BD9D(24)[43],BD9E(24)[43],BD9F(24)[43],BD9S(23)[42], BD9T(23)[42],BD9U(23)[42],BD9V(23)[42],BD9W(23)[42],BD9X(23)[42],BG2A[33], BG2B[33],BG2C[33],BG2D[33],BG2E[33],BG2F[33],BG2G[33],BG2H[33],BG2I[33], BG2J[33],BG2K[33],BG2L[33],BG2M[33],BG2N[33],BG2O[33],BG2P[33], BG3G(23)[33],BG3H(23)[33],BG3I(23)[33],BG3J(23)[33],BG3K(23)[33], BG3L(23)[33],BG6Q[43],BG6R[43],BG6S[43],BG6T[43],BG6U[43],BG6V[43], BG6W[43],BG6X[43],BG7A[43],BG7B[43],BG7C[43],BG7D[43],BG7E[43],BG7F[43], BG7G[43],BG7H[43],BG7Q[43],BG7R[43],BG7S[43],BG7T[43],BG7U[43],BG7V[43], BG7W[43],BG7X[43],BG8A[43],BG8B[43],BG8C[43],BG8D[43],BG8E[43],BG8F[43], BG8G[43],BG8H[43],BG8I[43],BG8J[43],BG8K[43],BG8L[43],BG8M[43],BG8N[43], BG8O[43],BG8P[43],BG8Q[43],BG8R[43],BG8S[43],BG8T[43],BG8U[43],BG8V[43], BG8W[43],BG8X[43],BG9A(24)[43],BG9B(24)[43],BG9C(24)[43],BG9D(24)[43], BG9E(24)[43],BG9F(24)[43],BG9S(23)[42],BG9T(23)[42],BG9U(23)[42], BG9V(23)[42],BG9W(23)[42],BG9X(23)[42],BH2A[33],BH2B[33],BH2C[33], BH2D[33],BH2E[33],BH2F[33],BH2G[33],BH2H[33],BH2I[33],BH2J[33],BH2K[33], BH2L[33],BH2M[33],BH2N[33],BH2O[33],BH2P[33],BH3G(23)[33],BH3H(23)[33], BH3I(23)[33],BH3J(23)[33],BH3K(23)[33],BH3L(23)[33],BH6Q[43],BH6R[43], BH6S[43],BH6T[43],BH6U[43],BH6V[43],BH6W[43],BH6X[43],BH7A[43],BH7B[43], BH7C[43],BH7D[43],BH7E[43],BH7F[43],BH7G[43],BH7H[43],BH7Q[43],BH7R[43], BH7S[43],BH7T[43],BH7U[43],BH7V[43],BH7W[43],BH7X[43],BH8A[43],BH8B[43], BH8C[43],BH8D[43],BH8E[43],BH8F[43],BH8G[43],BH8H[43],BH8I[43],BH8J[43], BH8K[43],BH8L[43],BH8M[43],BH8N[43],BH8O[43],BH8P[43],BH8Q[43],BH8R[43], BH8S[43],BH8T[43],BH8U[43],BH8V[43],BH8W[43],BH8X[43],BH9A(24)[43], BH9B(24)[43],BH9C(24)[43],BH9D(24)[43],BH9E(24)[43],BH9F(24)[43], BH9S(23)[42],BH9T(23)[42],BH9U(23)[42],BH9V(23)[42],BH9W(23)[42], BH9X(23)[42],BI2A[33],BI2B[33],BI2C[33],BI2D[33],BI2E[33],BI2F[33], BI2G[33],BI2H[33],BI2I[33],BI2J[33],BI2K[33],BI2L[33],BI2M[33],BI2N[33], BI2O[33],BI2P[33],BI3G(23)[33],BI3H(23)[33],BI3I(23)[33],BI3J(23)[33], BI3K(23)[33],BI3L(23)[33],BI6Q[43],BI6R[43],BI6S[43],BI6T[43],BI6U[43], BI6V[43],BI6W[43],BI6X[43],BI7A[43],BI7B[43],BI7C[43],BI7D[43],BI7E[43], BI7F[43],BI7G[43],BI7H[43],BI7Q[43],BI7R[43],BI7S[43],BI7T[43],BI7U[43], BI7V[43],BI7W[43],BI7X[43],BI8A[43],BI8B[43],BI8C[43],BI8D[43],BI8E[43], BI8F[43],BI8G[43],BI8H[43],BI8I[43],BI8J[43],BI8K[43],BI8L[43],BI8M[43], BI8N[43],BI8O[43],BI8P[43],BI8Q[43],BI8R[43],BI8S[43],BI8T[43],BI8U[43], BI8V[43],BI8W[43],BI8X[43],BI9A(24)[43],BI9B(24)[43],BI9C(24)[43], BI9D(24)[43],BI9E(24)[43],BI9F(24)[43],BI9S(23)[42],BI9T(23)[42], BI9U(23)[42],BI9V(23)[42],BI9W(23)[42],BI9X(23)[42],BJ2A[33],BJ2B[33], BJ2C[33],BJ2D[33],BJ2E[33],BJ2F[33],BJ2G[33],BJ2H[33],BJ2I[33],BJ2J[33], BJ2K[33],BJ2L[33],BJ2M[33],BJ2N[33],BJ2O[33],BJ2P[33],BJ3G(23)[33], BJ3H(23)[33],BJ3I(23)[33],BJ3J(23)[33],BJ3K(23)[33],BJ3L(23)[33],BJ6Q[43], BJ6R[43],BJ6S[43],BJ6T[43],BJ6U[43],BJ6V[43],BJ6W[43],BJ6X[43],BJ7A[43], BJ7B[43],BJ7C[43],BJ7D[43],BJ7E[43],BJ7F[43],BJ7G[43],BJ7H[43],BJ7Q[43], BJ7R[43],BJ7S[43],BJ7T[43],BJ7U[43],BJ7V[43],BJ7W[43],BJ7X[43],BJ8A[43], BJ8B[43],BJ8C[43],BJ8D[43],BJ8E[43],BJ8F[43],BJ8G[43],BJ8H[43],BJ8I[43], BJ8J[43],BJ8K[43],BJ8L[43],BJ8M[43],BJ8N[43],BJ8O[43],BJ8P[43],BJ8Q[43], BJ8R[43],BJ8S[43],BJ8T[43],BJ8U[43],BJ8V[43],BJ8W[43],BJ8X[43], BJ9A(24)[43],BJ9B(24)[43],BJ9C(24)[43],BJ9D(24)[43],BJ9E(24)[43], BJ9F(24)[43],BJ9S(23)[42],BJ9T(23)[42],BJ9U(23)[42],BJ9V(23)[42], BJ9W(23)[42],BJ9X(23)[42],BL2A[33],BL2B[33],BL2C[33],BL2D[33],BL2E[33], BL2F[33],BL2G[33],BL2H[33],BL2I[33],BL2J[33],BL2K[33],BL2L[33],BL2M[33], BL2N[33],BL2O[33],BL2P[33],BL3G(23)[33],BL3H(23)[33],BL3I(23)[33], BL3J(23)[33],BL3K(23)[33],BL3L(23)[33],BL6Q[43],BL6R[43],BL6S[43], BL6T[43],BL6U[43],BL6V[43],BL6W[43],BL6X[43],BL7A[43],BL7B[43],BL7C[43], BL7D[43],BL7E[43],BL7F[43],BL7G[43],BL7H[43],BL7Q[43],BL7R[43],BL7S[43], BL7T[43],BL7U[43],BL7V[43],BL7W[43],BL7X[43],BL8A[43],BL8B[43],BL8C[43], BL8D[43],BL8E[43],BL8F[43],BL8G[43],BL8H[43],BL8I[43],BL8J[43],BL8K[43], BL8L[43],BL8M[43],BL8N[43],BL8O[43],BL8P[43],BL8Q[43],BL8R[43],BL8S[43], BL8T[43],BL8U[43],BL8V[43],BL8W[43],BL8X[43],BL9A(24)[43],BL9B(24)[43], BL9C(24)[43],BL9D(24)[43],BL9E(24)[43],BL9F(24)[43],BL9S(23)[42], BL9T(23)[42],BL9U(23)[42],BL9V(23)[42],BL9W(23)[42],BL9X(23)[42],BT2A[33], BT2B[33],BT2C[33],BT2D[33],BT2E[33],BT2F[33],BT2G[33],BT2H[33],BT2I[33], BT2J[33],BT2K[33],BT2L[33],BT2M[33],BT2N[33],BT2O[33],BT2P[33], BT3G(23)[33],BT3H(23)[33],BT3I(23)[33],BT3J(23)[33],BT3K(23)[33], BT3L(23)[33],BT6Q[43],BT6R[43],BT6S[43],BT6T[43],BT6U[43],BT6V[43], BT6W[43],BT6X[43],BT7A[43],BT7B[43],BT7C[43],BT7D[43],BT7E[43],BT7F[43], BT7G[43],BT7H[43],BT7Q[43],BT7R[43],BT7S[43],BT7T[43],BT7U[43],BT7V[43], BT7W[43],BT7X[43],BT8A[43],BT8B[43],BT8C[43],BT8D[43],BT8E[43],BT8F[43], BT8G[43],BT8H[43],BT8I[43],BT8J[43],BT8K[43],BT8L[43],BT8M[43],BT8N[43], BT8O[43],BT8P[43],BT8Q[43],BT8R[43],BT8S[43],BT8T[43],BT8U[43],BT8V[43], BT8W[43],BT8X[43],BT9A(24)[43],BT9B(24)[43],BT9C(24)[43],BT9D(24)[43], BT9E(24)[43],BT9F(24)[43],BT9S(23)[42],BT9T(23)[42],BT9U(23)[42], BT9V(23)[42],BT9W(23)[42],BT9X(23)[42],BY2A[33],BY2B[33],BY2C[33], BY2D[33],BY2E[33],BY2F[33],BY2G[33],BY2H[33],BY2I[33],BY2J[33],BY2K[33], BY2L[33],BY2M[33],BY2N[33],BY2O[33],BY2P[33],BY3G(23)[33],BY3H(23)[33], BY3I(23)[33],BY3J(23)[33],BY3K(23)[33],BY3L(23)[33],BY6Q[43],BY6R[43], BY6S[43],BY6T[43],BY6U[43],BY6V[43],BY6W[43],BY6X[43],BY7A[43],BY7B[43], BY7C[43],BY7D[43],BY7E[43],BY7F[43],BY7G[43],BY7H[43],BY7Q[43],BY7R[43], BY7S[43],BY7T[43],BY7U[43],BY7V[43],BY7W[43],BY7X[43],BY8A[43],BY8B[43], BY8C[43],BY8D[43],BY8E[43],BY8F[43],BY8G[43],BY8H[43],BY8I[43],BY8J[43], BY8K[43],BY8L[43],BY8M[43],BY8N[43],BY8O[43],BY8P[43],BY8Q[43],BY8R[43], BY8S[43],BY8T[43],BY8U[43],BY8V[43],BY8W[43],BY8X[43],BY9A(24)[43], BY9B(24)[43],BY9C(24)[43],BY9D(24)[43],BY9E(24)[43],BY9F(24)[43], BY9S(23)[42],BY9T(23)[42],BY9U(23)[42],BY9V(23)[42],BY9W(23)[42], BY9X(23)[42],BZ2A[33],BZ2B[33],BZ2C[33],BZ2D[33],BZ2E[33],BZ2F[33], BZ2G[33],BZ2H[33],BZ2I[33],BZ2J[33],BZ2K[33],BZ2L[33],BZ2M[33],BZ2N[33], BZ2O[33],BZ2P[33],BZ3G(23)[33],BZ3H(23)[33],BZ3I(23)[33],BZ3J(23)[33], BZ3K(23)[33],BZ3L(23)[33],BZ6Q[43],BZ6R[43],BZ6S[43],BZ6T[43],BZ6U[43], BZ6V[43],BZ6W[43],BZ6X[43],BZ7A[43],BZ7B[43],BZ7C[43],BZ7D[43],BZ7E[43], BZ7F[43],BZ7G[43],BZ7H[43],BZ7Q[43],BZ7R[43],BZ7S[43],BZ7T[43],BZ7U[43], BZ7V[43],BZ7W[43],BZ7X[43],BZ8A[43],BZ8B[43],BZ8C[43],BZ8D[43],BZ8E[43], BZ8F[43],BZ8G[43],BZ8H[43],BZ8I[43],BZ8J[43],BZ8K[43],BZ8L[43],BZ8M[43], BZ8N[43],BZ8O[43],BZ8P[43],BZ8Q[43],BZ8R[43],BZ8S[43],BZ8T[43],BZ8U[43], BZ8V[43],BZ8W[43],BZ8X[43],BZ9A(24)[43],BZ9B(24)[43],BZ9C(24)[43], BZ9D(24)[43],BZ9E(24)[43],BZ9F(24)[43],BZ9S(23)[42],BZ9T(23)[42], BZ9U(23)[42],BZ9V(23)[42],BZ9W(23)[42],BZ9X(23)[42],BD7MQ/9(23); Nauru: 31: 65: OC: -0.52: -166.92: -12.0: C2: C2; Andorra: 14: 27: EU: 42.58: -1.62: -1.0: C3: C3; The Gambia: 35: 46: AF: 13.40: 16.38: 0.0: C5: C5; Bahamas: 08: 11: NA: 24.25: 76.00: 5.0: C6: C6; Mozambique: 37: 53: AF: -18.25: -35.00: -2.0: C9: C8,C9; Chile: 12: 14: SA: -30.00: 71.00: 4.0: CE: 3G,CA,CB,CC,CD,CE,XQ,XR,3G7[16],3G8[16],CA7[16],CA8[16],CB7[16],CB8[16], CC7[16],CC8[16],CD7[16],CD8[16],CE7[16],CE8[16],XQ7[16],XQ8[16],XR7[16], XR8[16]; San Felix & San Ambrosio: 12: 14: SA: -26.28: 80.07: 4.0: CE0X: 3G0X,CA0X,CB0X,CC0X,CD0X,CE0X,XQ0X,XR0X; Easter Island: 12: 63: SA: -27.10: 109.37: 6.0: CE0Y: 3G0,CA0,CB0,CC0,CD0,CE0,XQ0,XR0; Juan Fernandez Islands: 12: 14: SA: -33.60: 78.85: 4.0: CE0Z: 3G0Z,CA0Z,CB0Z,CC0Z,CD0Z,CE0I,CE0Z,XQ0Z,XR0Z; Antarctica: 13: 74: SA: -90.00: 0.00: 0.0: CE9: 3Y[73],AX0(39)[69],AY1Z[73],AY2Z[73],AY3Z[73],AY4Z[73],AY5Z[73],AY6Z[73], AY7Z[73],AY8Z[73],AY9Z[73],FT0Y(30)[70],FT1Y(30)[70],FT2Y(30)[70], FT3Y(30)[70],FT4Y(30)[70],FT5Y(30)[70],FT6Y(30)[70],FT7Y(30)[70], FT8Y(30)[70],LU1Z[73],LU2Z[73],LU3Z[73],LU4Z[73],LU5Z[73],LU6Z[73], LU7Z[73],LU8Z[73],LU9Z[73],RI1AN(29)[69],VI0(39)[69],VK0(39)[69], ZL5(30)[71],ZM5(30)[71],ZS7(38)[67],8J1RL(39)[67],8J60JARE(39)[67], DP0GVN(38)[67],DP1POL(38)[67],KC4AAA(39),KC4AAC[73],KC4USV(30)[71], OJ1ABOA(38)[67],RI1ANC(29)[70],RI1ANP(39)[69],RI1ANR(38)[67], RI1ANZ(39)[69],VP8ADE[73],VP8ADE/B[73],VP8DPE[73],VP8DPJ[73], VU3LBP(39)[69],VU3LBP/P(39)[69]; Cuba: 08: 11: NA: 21.50: 80.00: 5.0: CM: CL,CM,CO,T4; Morocco: 33: 37: AF: 32.00: 5.00: 0.0: CN: 5C,5D,5E,5F,5G,CN; Bolivia: 10: 12: SA: -17.00: 65.00: 4.0: CP: CP,CP2[14],CP3[14],CP4[14],CP5[14],CP6[14],CP7[14]; Portugal: 14: 37: EU: 39.50: 8.00: 0.0: CT: CQ,CR,CS,CT,VERSION; Madeira Islands: 33: 36: AF: 32.75: 16.95: 0.0: CT3: CQ2,CQ3,CQ9,CR3,CR9,CS3,CS9,CT3,CT9; Azores: 14: 36: EU: 38.70: 27.23: 1.0: CU: CQ1,CQ8,CR1,CR2,CR8,CS4,CS8,CT8,CU; Uruguay: 13: 14: SA: -33.00: 56.00: 3.0: CX: CV,CW,CX; Sable Island: 05: 09: NA: 43.93: 59.90: 4.0: CY0: CY0; St. Paul Island: 05: 09: NA: 47.00: 60.00: 4.0: CY9: CY9; Angola: 36: 52: AF: -12.50: -18.50: -1.0: D2: D2,D3; Cape Verde: 35: 46: AF: 16.00: 24.00: 1.0: D4: D4; Comoros: 39: 53: AF: -11.63: -43.30: -3.0: D6: D6; Fed. Rep. of Germany: 14: 28: EU: 51.00: -10.00: -1.0: DL: DA,DB,DC,DD,DE,DF,DG,DH,DI,DJ,DK,DL,DM,DN,DO,DP,DQ,DR; Philippines: 27: 50: OC: 13.00: -122.00: -8.0: DU: 4D,4E,4F,4G,4H,4I,DU,DV,DW,DX,DY,DZ; Eritrea: 37: 48: AF: 15.00: -39.00: -3.0: E3: E3; Palestine: 20: 39: AS: 31.28: -34.27: -2.0: E4: E4; North Cook Islands: 32: 62: OC: -10.02: 161.08: 10.0: E5/n: E51PT,E51WL[63]; South Cook Islands: 32: 63: OC: -21.90: 157.93: 10.0: E5/s: E5; Niue: 32: 62: OC: -19.03: 169.85: 11.0: E6: E6; Bosnia-Herzegovina: 15: 28: EU: 44.32: -17.57: -1.0: E7: E7; Spain: 14: 37: EU: 40.37: 4.88: -1.0: EA: AM,AN,AO,EA,EB,EC,ED,EE,EF,EG,EH,AN92EXPO,EA3HSD/P,EA5CC/P,EA5EZ/P, EA5IKT/P,EA9HU,EA9HU/7; Balearic Islands: 14: 37: EU: 39.60: -2.95: -1.0: EA6: AM6,AN6,AO6,EA6,EB6,EC6,ED6,EE6,EF6,EG6,EH6,EA3CBH/6; Canary Islands: 33: 36: AF: 28.32: 15.85: 0.0: EA8: AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8; Ceuta & Melilla: 33: 37: AF: 35.90: 5.27: -1.0: EA9: AM9,AN9,AO9,EA9,EB9,EC9,ED9,EE9,EF9,EG9,EH9; Ireland: 14: 27: EU: 53.13: 8.02: 0.0: EI: EI,EJ; Armenia: 21: 29: AS: 40.40: -44.90: -4.0: EK: EK; Liberia: 35: 46: AF: 6.50: 9.50: 0.0: EL: 5L,5M,6Z,A8,D5,EL; Iran: 21: 40: AS: 32.00: -53.00: -3.5: EP: 9B,9C,9D,EP,EQ; Moldova: 16: 29: EU: 47.00: -29.00: -2.0: ER: ER; Estonia: 15: 29: EU: 59.00: -25.00: -2.0: ES: ES; Ethiopia: 37: 48: AF: 9.00: -39.00: -3.0: ET: 9E,9F,ET; Belarus: 16: 29: EU: 54.00: -28.00: -2.0: EU: EU,EV,EW; Kyrgyzstan: 17: 30: AS: 41.70: -74.13: -6.0: EX: EX,EX0P[31],EX0Q[31],EX2P[31],EX2Q[31],EX6P[31],EX6Q[31],EX7P[31], EX7Q[31],EX8P[31],EX8Q[31]; Tajikistan: 17: 30: AS: 38.82: -71.22: -5.0: EY: EY; Turkmenistan: 17: 30: AS: 38.00: -58.00: -5.0: EZ: EZ; France: 14: 27: EU: 46.00: -2.00: -1.0: F: F,HW,HX,HY,TH,TM,TP,TQ,TV; Guadeloupe: 08: 11: NA: 16.13: 61.67: 4.0: FG: FG,TO2E; Mayotte: 39: 53: AF: -12.88: -45.15: -3.0: FH: FH; St. Barthelemy: 08: 11: NA: 17.90: 62.83: 4.0: FJ: FJ,TO2SP; New Caledonia: 32: 56: OC: -21.50: -165.50: -11.0: FK: FK; Chesterfield Islands: 30: 56: OC: -19.87: -158.32: -11.0: FK/c: TX3X; Martinique: 08: 11: NA: 14.70: 61.03: 4.0: FM: FM,TO5A,TO5T,TO5W,TO7A; French Polynesia: 32: 63: OC: -17.65: 149.40: 10.0: FO: FO; Austral Islands: 32: 63: OC: -23.37: 149.48: 10.0: FO/a: FO/JI1JKW; Clipperton Island: 07: 10: NA: 10.28: 109.22: 8.0: FO/c: TX5P; Marquesas Islands: 31: 63: OC: -8.92: 140.07: 9.5: FO/m: FO/IZ2ZTQ; St. Pierre & Miquelon: 05: 09: NA: 46.77: 56.20: 3.0: FP: FP; Reunion Island: 39: 53: AF: -21.12: -55.48: -4.0: FR: FR; St. Martin: 08: 11: NA: 18.08: 63.03: 4.0: FS: FS; Glorioso Islands: 39: 53: AF: -11.55: -47.28: -4.0: FT/g: FT0G,FT1G,FT2G,FT3G,FT4G,FT5G,FT6G,FT7G,FT8G,FT9G; Juan de Nova, Europa: 39: 53: AF: -17.05: -42.72: -3.0: FT/j: FT0E,FT0J,FT1E,FT1J,FT2E,FT2J,FT3E,FT3J,FT4E,FT4J,FT6E,FT6J,FT7E,FT7J, FT8E,FT8J,FT9E,FT9J; Tromelin Island: 39: 53: AF: -15.88: -54.50: -4.0: FT/t: FT0T,FT1T,FT2T,FT3T,FT4T,FT5T,FT6T,FT7T,FT8T,FT9T; Crozet Island: 39: 68: AF: -46.42: -51.75: -5.0: FT/w: FT0W,FT4W,FT5W,FT8W; Kerguelen Islands: 39: 68: AF: -49.00: -69.27: -5.0: FT/x: FT0X,FT2X,FT4X,FT5X,FT8X; Amsterdam & St. Paul Is.: 39: 68: AF: -37.85: -77.53: -5.0: FT/z: FT0Z,FT1Z,FT2Z,FT3Z,FT4Z,FT5Z,FT6Z,FT7Z,FT8Z; Wallis & Futuna Islands: 32: 62: OC: -13.30: 176.20: -12.0: FW: FW,TW; French Guiana: 09: 12: SA: 4.00: 53.00: 3.0: FY: FY,TO1A,TO2A; England: 14: 27: EU: 52.77: 1.47: 0.0: G: 2E,G,M; Isle of Man: 14: 27: EU: 54.20: 4.53: 0.0: GD: 2D,GD,GT,MD,MT; Northern Ireland: 14: 27: EU: 54.73: 6.68: 0.0: GI: 2I,GI,GN,MI,MN,GB0GPF,GB3NGI,GB4PS,GB4UAS; Jersey: 14: 27: EU: 49.22: 2.18: 0.0: GJ: 2J,GH,GJ,MH,MJ; Shetland Islands: 14: 27: EU: 60.50: 1.50: 0.0: *GM/s: GZ,MZ,2M0BDR,2M0BDT,2M0CPN,2M0GFC,2M0SEG,2M0SPX,2M0ZET,GB2ELH, GB3LER,GB3LER/B,GB4LER,GM0AVR,GM0CXQ,GM0EKM,GM0GFL,GM0ILB,GM0JDB, GM1FGN,GM1KKI,GM1ZNR,GM3WHT,GM3ZET,GM4IPK,GM4JPI,GM4LBE,GM4LER, GM4PXG,GM4SLV,GM4SSA,GM4WXQ,GM4ZHL,GM6RQW,GM6YQA,GM7AFE,GM7GWW, GM8LNH,GM8MMA,GM8YEC,GS3ZET,MM0LSM,MM0NQY,MM0XAU,MM0ZAL,MM0ZCG, MM0ZRC,MM1FJM,MM3VQO,MM5PSL,MM5YLO,MM6BDU,MM6BZQ,MM6IKB,MM6IMB, MM6MFA,MM6PTE,MM6SJK,MM6YLO,MM6ZBG,MM6ZDW,MM8A,MS0ZCG,MS0ZET; Scotland: 14: 27: EU: 56.82: 4.18: 0.0: GM: 2A,2M,GA,GM,GS,GZ,MA,MM,MS,MZ,GB0DBS,GB0GDS,GB1MSG,GB2CM,GB2ELH, GB2OL,GB2OWM,GB2WLS,GB3ANG,GB3LER,GB3LER/B,GB4LER; Guernsey: 14: 27: EU: 49.45: 2.58: 0.0: GU: 2U,GP,GU,MP,MU,GB2GU; Wales: 14: 27: EU: 52.28: 3.73: 0.0: GW: 2W,GC,GW,MC,MW,GB0MPA,GB1BSW,GB2GGM,GB2IMD,GB2TD,GB4GSS,GB4SDD, GB60SPS,GB6BLB; Solomon Islands: 28: 51: OC: -9.00: -160.00: -11.0: H4: H4; Temotu Province: 32: 51: OC: -10.72: -165.80: -11.0: H40: H40; Hungary: 15: 28: EU: 47.12: -19.28: -1.0: HA: HA,HG; Switzerland: 14: 28: EU: 46.87: -8.12: -1.0: HB: HB,HE; Liechtenstein: 14: 28: EU: 47.13: -9.57: -1.0: HB0: HB0,HE0; Ecuador: 10: 12: SA: -1.40: 78.40: 5.0: HC: HC,HD; Galapagos Islands: 10: 12: SA: -0.78: 91.03: 6.0: HC8: HC8,HD8; Haiti: 08: 11: NA: 19.02: 72.18: 5.0: HH: 4V,HH; Dominican Republic: 08: 11: NA: 19.13: 70.68: 4.0: HI: HI; Colombia: 09: 12: SA: 5.00: 74.00: 5.0: HK: 5J,5K,HJ,HK; San Andres & Providencia: 07: 11: NA: 12.55: 81.72: 5.0: HK0/a: 5J0,5K0,HJ0,HK0; Malpelo Island: 09: 12: SA: 3.98: 81.58: 5.0: HK0/m: HJ0M,HK0M,HK0TU; Republic of Korea: 25: 44: AS: 36.23: -127.90: -9.0: HL: 6K,6L,6M,6N,D7,D8,D9,DS,DT,HL,KL9K; Panama: 07: 11: NA: 9.00: 80.00: 5.0: HP: 3E,3F,H3,H8,H9,HO,HP; Honduras: 07: 11: NA: 15.00: 87.00: 6.0: HR: HQ,HR; Thailand: 26: 49: AS: 12.60: -99.70: -7.0: HS: E2,HS; Vatican City: 15: 28: EU: 41.90: -12.47: -1.0: HV: HV; Saudi Arabia: 21: 39: AS: 24.20: -43.83: -3.0: HZ: 7Z,8Z,HZ; Italy: 15: 28: EU: 42.82: -12.58: -1.0: I: I,4U0WFP,4U1GSC,4U24OCT,4U5F,4U7F,4U7FOC,I2AZ/CA,I6HWD/CA, IK2SOE/CA,IQ6VP/J,IQ7ML/J,IZ4AIH/J; African Italy: 33: 37: AF: 35.67: -12.67: -1.0: *IG9: IG9,IH9; Sardinia: 15: 28: EU: 40.15: -9.27: -1.0: IS: IM0,IS,IW0U,IW0V,IW0W,IW0X,IW0Y,IW0Z,II0ICH,II0IDP,II0M,II0SB,IQ0AG, IQ0AH,IQ0AH/P,IQ0AI,IQ0AK,IQ0AK/P,IQ0AL,IQ0AM,IQ0AM/P,IQ0EH, IQ0HO,IQ0ID,IQ0NU,IQ0NU/P,IQ0NV,IQ0NV/P,IQ0OG,IQ0QP,IQ0SS,IY0GA; Sicily: 15: 28: EU: 37.50: -14.00: -1.0: *IT9: IB9,ID9,IE9,IF9,II9,IJ9,IO9,IQ9,IR9,IT9,IU9,IW9,IY9,IT9CKA/CA; Djibouti: 37: 48: AF: 11.75: -42.35: -3.0: J2: J2; Grenada: 08: 11: NA: 12.13: 61.68: 4.0: J3: J3; Guinea-Bissau: 35: 46: AF: 12.02: 14.80: 0.0: J5: J5; St. Lucia: 08: 11: NA: 13.87: 61.00: 4.0: J6: J6; Dominica: 08: 11: NA: 15.43: 61.35: 4.0: J7: J7; St. Vincent: 08: 11: NA: 13.23: 61.20: 4.0: J8: J8; Japan: 25: 45: AS: 36.40: -138.38: -9.0: JA: 7J,7K,7L,7M,7N,8J,8K,8L,8M,8N,JA,JE,JF,JG,JH,JI,JJ,JK,JL,JM,JN,JO,JP,JQ, JR,JS; Minami Torishima: 27: 90: OC: 24.28: -153.97: -10.0: JD/m: JD1YAA,JG8NQJ/JD1; Ogasawara: 27: 45: AS: 27.05: -142.20: -9.0: JD/o: JD1; Mongolia: 23: 32: AS: 46.77: -102.17: -7.0: JT: JT,JU,JV,JT2[33],JT3[33],JU2[33],JU3[33],JV2[33],JV3[33]; Svalbard: 40: 18: EU: 78.00: -16.00: -1.0: JW: JW; Bear Island: 40: 18: EU: 74.43: -19.08: -1.0: *JW/b: JW2US; Jan Mayen: 40: 18: EU: 71.05: 8.28: 1.0: JX: JX; Jordan: 20: 39: AS: 31.18: -36.42: -2.0: JY: JY; United States: 05: 08: NA: 37.53: 91.67: 5.0: K: AA,AB,AC,AD,AE,AF,AG,AI,AJ,AK,K,N,W,4U1WB(5)[8],AA2IL(3)[6], AA4DD(4)[8],AA4NU(4)[8],AA4QE(4)[8],AA4R(4)[8],AB4B(4)[8], AB4GG(4)[8],AB4IQ(4)[8],AB4KJ(4)[8],AB5OR(4)[8],AB8RL(5)[8], AB8YZ(4)[7],AB9DU(4)[7],AC4CA(4)[7],AC4G(4)[8],AC4YD(4)[8], AC7P(4)[7],AD1C(4)[7],AD4EB(4)[8],AD8J(5)[8],AE7AP(4)[6], AG1RL(3)[6],AG4M(4)[8],AG4W(4)[8],AH0U(3)[6],AH2O(5)[8],AH6AX(5)[8], AI8F(5)[8],AI9K(4)[7],AJ4A(4)[8],AJ4F(4)[7],AJ5E(5)[8],AK9D(4)[7], AL4B(4)[8],AL5M(4)[7],AL7RF(3)[6],K0ACP(4)[8],K0AU(3)[6], K0BAK(5)[8],K0DQ(5)[8],K0DTJ(3)[6],K0EJ(4)[8],K0IP(3)[6],K0JJ(3)[6], K0LUZ(5)[8],K0MP(3)[6],K0PJ(4)[8],K0SDW(3)[6],K0SN(4)[6],K0TQ(4)[8], K0ZR(5)[8],K1DW(4)[7],K1GJQ(3)[6],K1GU(4)[8],K1KD(4)[7],K1LT(4)[8], K1USA(4)[7],K2DRH(4)[7],K2DSW(4)[7],K2GMY(3)[6],K2PM(4)[8], K2PO(3)[6],K2RD(3)[6],K2UR(4)[8],K2VV(4)[7],K3DMG(4)[8],K3EST(3)[6], K3IE(4)[8],K3JWI(4)[8],K3PA(4)[7],K3WA(4)[8],K3WT(4)[7],K3WYC(3)[6], K3YP(4)[8],K4AB(4)[8],K4AFE(4)[8],K4AMC(4)[8],K4BX(4)[8], K4CMS(4)[8],K4CWW(4)[8],K4DG(4)[7],K4DXV(4)[8],K4EDI(4)[8], K4FT(4)[8],K4FXN(4)[8],K4HAL(4)[8],K4IE(4)[8],K4IQJ(4)[8], K4IU(4)[7],K4LPQ(4)[8],K4LTA(4)[8],K4OAQ(4)[8],K4OWR(4)[8], K4RO(4)[8],K4TCG(4)[8],K4UB(3)[6],K4VOZ(4)[8],K4WI(4)[8], K4WLG(4)[8],K4WW(4)[8],K4XU(3)[6],K4YJ(4)[8],K4ZGB(4)[8],K5EK(5)[8], K5GDX(4)[8],K5KG(5)[8],K5OA(3)[6],K5ROE(5)[8],K5RR(3)[6], K5TRI(3)[6],K5VIP(5)[8],K5WK(4)[8],K5ZD(5)[8],K6ND(5)[8],K6XT(4)[7], K6ZB(4)[7],K7ABV(4)[6],K7BG(4)[6],K7BV(5)[8],K7DR(4)[8],K7GM(5)[8], K7IA(4)[7],K7LTV(4)[7],K7MKL(4)[7],K7MOA(5)[8],K7OM(5)[8], K7QA(4)[6],K7SCX(4)[7],K7SV(5)[8],K7TD(4)[7],K7VU(4)[7],K7ZYV(4)[8], K8AC(5)[8],K8ARY(5)[8],K8CN(5)[8],K8FC(5)[8],K8FU(4)[7],K8GU(5)[8], K8IA(3)[6],K8JQ(5)[8],K8LS(4)[7],K8MN(5)[8],K8NY(5)[8],K8NYG(5)[8], K8PO(5)[8],K8SYH(5)[8],K8TE(4)[7],K9CQ(4)[7],K9DR(4)[7],K9DU(4)[7], K9ES(5)[8],K9JF(3)[6],K9JM(3)[6],K9OM(5)[8],K9OZ(4)[7],K9QJS(3)[6], K9RS(5)[8],K9WA(4)[7],K9WM(4)[7],K9WZB(3)[6],K9YC(3)[6], KA1KIX(4)[8],KA3DRR(3)[6],KA3MTT(4)[8],KA4GAV(4)[7],KA5DWI(3)[6], KA7PNH(4)[7],KA8HDE(4)[7],KA8Q(5)[8],KA9A(3)[6],KA9FOX(4)[7], KB5EZ(4)[8],KB7H(4)[8],KB7Q(4)[6],KB8KMH(5)[8],KB8V(5)[8], KB9S(4)[7],KC2LM(4)[7],KC4HW(4)[8],KC4SAW(4)[8],KC4TEO(4)[8], KC4WQ(4)[8],KC7QY(4)[7],KD0EE(4)[8],KD0PZ(3)[6],KD5DD(4)[8], KD5M(5)[8],KD5UVV(4)[8],KD9LA(5)[8],KE0L(4)[8],KE1B(3)[6], KE2VB(3)[6],KE4ETY(4)[8],KE4KY(4)[8],KE4YVD(4)[8],KE5PRL(4)[8], KE7X(4)[6],KE8FT(3)[6],KE9B(4)[7],KF2T(3)[6],KG4CUY(4)[8], KG6MC(5)[8],KH2D(5)[8],KH2N(5)[8],KH2SR(3)[6],KH6M(5)[8], KH6VM(3)[6],KI6DY(4)[7],KI6QDH(4)[7],KI7MT(4)[6],KJ4AOM(4)[8], KJ4IWZ(4)[8],KJ4KKD(4)[8],KJ4LTA(4)[8],KK4TE(4)[8],KK5OQ(4)[8], KK6L(5)[8],KK6MC(4)[7],KK7JS(4)[7],KK9A(5)[8],KL0MP(5)[8], KL7IKV(3)[6],KL7QW(4)[7],KL7SG(4)[7],KL8X(4)[8],KM4FO(4)[8], KM4FRM(4)[8],KM4JA(4)[8],KM7W(4)[6],KM9R(3)[6],KO0Z(4)[8], KO4OL(4)[8],KO6UW(4)[6],KO8SCA(5)[8],KO9V(5)[8],KP2X(3)[6], KP4KD(5)[8],KQ0J(5)[8],KR4F(4)[8],KS0CW(5)[8],KS4L(4)[8],KS4X(4)[8], KS7T(4)[6],KS9A(4)[7],KT3M(4)[7],KT4RR(4)[8],KU1CW(3)[6],KU8E(5)[8], KV8S(4)[7],KW4J(4)[8],KW7D(4)[7],KW7Q(4)[7],KX4X(4)[8],KY0W(3)[6], KY4F(4)[8],KY4XX(4)[8],KY6AA(4)[8],KZ1W(3)[6],KZ9V(4)[7],N0EF(4)[6], N0KQ(3)[6],N0QQ(5)[8],N1CC(4)[7],N1JM(3)[6],N1KEZ(3)[6],N2BJ(4)[8], N2CJN(3)[6],N2IC(4)[7],N2NS(3)[6],N3BB(4)[7],N3BBQ(4)[7], N3BUO(4)[7],N3KCJ(3)[6],N3RC(3)[6],N3ZZ(3)[6],N4AB(4)[8], N4ARO(4)[8],N4AU(4)[8],N4BCD(4)[8],N4DW(4)[8],N4FR(4)[8], N4HAI(4)[8],N4IJ(4)[7],N4JRG(4)[8],N4KG(4)[8],N4KH(4)[8],N4NA(4)[8], N4NO(4)[8],N4OGW(4)[8],N4QS(4)[8],N4RZ(4)[8],N4TZ(4)[8],N4UW(4)[8], N4VI(4)[7],N4VV(4)[8],N4WE(4)[8],N4XH(4)[8],N4ZI(4)[8],N4ZZ(4)[8], N5CR(3)[6],N5CW(4)[8],N5DX(5)[8],N5FPW(5)[8],N5PU(4)[8],N5RP(4)[8], N5SMQ(5)[8],N5TF(4)[8],N5TOO(5)[8],N5YT(4)[8],N5ZO(3)[6],N6AR(5)[8], N6FS(4)[8],N7BD(4)[7],N7DF(4)[7],N7DR(4)[7],N7FLT(4)[6],N7FUL(4)[7], N7IP(4)[6],N7IV(4)[7],N7MZW(4)[7],N7NG(4)[7],N7US(4)[8],N7WY(4)[7], N8AID(5)[8],N8CL(5)[8],N8II(5)[8],N8NA(5)[8],N8OO(4)[7],N8OQ(5)[8], N8PR(5)[8],N8TUT(4)[7],N8WXQ(5)[8],N9CIQ(4)[7],N9JF(4)[7], N9NA(3)[6],N9NB(5)[8],N9NC(5)[8],N9NM(4)[7],N9RV(4)[6],N9SB(4)[7], N9VPV(4)[7],NA4C(4)[8],NA4K(4)[8],NA5NN(4)[8],NA9RB(4)[7], NB4M(4)[8],ND2T(3)[6],ND4X(4)[8],ND4Y(4)[8],NE8P(5)[8],NH6T(4)[8], NI7R(5)[8],NJ8J(5)[8],NJ8M(4)[7],NK4P(4)[8],NK8Q(5)[8],NL7CQ(4)[7], NL7D(3)[6],NL7QC(4)[7],NL7XM(5)[8],NN4MM(4)[8],NN5O(4)[8], NN7A(4)[7],NN7CW(5)[8],NO9E(5)[8],NP2GG(5)[8],NQ6N(4)[8], NR7DX(4)[6],NS4X(4)[8],NV4B(4)[8],NW7R(5)[8],NW8U(5)[8],NX1P(3)[6], NY6DX(5)[8],W0BR(5)[8],W0CN(5)[8],W0GG(3)[6],W0JX(4)[8],W0NA(5)[8], W0PAN(3)[6],W0PV(5)[8],W0QQG(5)[8],W0RIC(3)[6],W0YK(3)[6], W0ZP(4)[8],W1DGL(3)[6],W1GKT(4)[8],W1JCW(4)[7],W1NN(4)[8], W1PR(3)[6],W1RH(3)[6],W1SRD(3)[6],W1WMU(4)[7],W1ZD(3)[6],W2GS(4)[7], W2VJN(3)[6],W3DQN(4)[7],W3HDH(4)[8],W3HKK(4)[8],W4BCG(4)[8], W4CQE(4)[8],W4DAN(4)[8],W4DVG(4)[8],W4ER(4)[8],W4GKM(4)[8], W4GZX(4)[8],W4HOD(4)[8],W4II(4)[7],W4JSI(4)[8],W4JUU(4)[8], W4KW(4)[8],W4LC(4)[8],W4LID(4)[8],W4NBS(4)[8],W4NI(4)[8],W4NZ(4)[8], W4PF(4)[8],W4TTM(4)[8],W4TZX(4)[8],W4UAL(4)[8],W4UAT(3)[6], W4UT(4)[8],W4YPW(4)[8],W4ZN(4)[8],W5BEN(4)[8],W5JR(5)[8],W5MX(4)[8], W5NZ(4)[8],W5PET(4)[8],W5THT(4)[8],W5VE(5)[8],W5XB(5)[8], W6GMT(4)[7],W6IHG(5)[8],W6KGP(4)[7],W6LFB(4)[7],W6NF(4)[7], W6NWS(5)[8],W6RLL(3)[7],W6UB(4)[8],W6XR(5)[8],W7DO(5)[8], W7DXX(4)[7],W7HJ(5)[8],W7IWW(4)[7],W7KAM(4)[7],W7KF(4)[6], W7RY(4)[7],W7SE(4)[7],W8AKS(5)[8],W8AT(5)[8],W8FJ(5)[8],W8FN(4)[7], W8HAP(5)[8],W8HGH(5)[8],W8KA(3)[6],W8KX(3)[6],W8LYJ(5)[8], W8OV(4)[7],W8TK(3)[6],W8WEJ(5)[8],W8WOM(3)[6],W8ZA(5)[8],W9CF(3)[6], W9JEF(4)[7],W9KKN(3)[6],W9LHG(4)[7],W9MAF(4)[7],W9PL(3)[6], W9RNY(4)[7],WA0WWW(3)[6],WA1FCN(4)[8],WA1UJU(4)[8],WA2VYA(4)[7], WA3C(4)[8],WA4JA(4)[8],WA5POK(4)[8],WA5VGI(3)[6],WA8KAN(5)[8], WA8OJR(5)[8],WA8QYJ(5)[8],WA8WZG(3)[6],WA8ZBT(4)[7],WB2JEP(3)[6], WB3JFS(3)[6],WB4IT(4)[8],WB4YDL(4)[8],WB4YDY(4)[8],WB7PVL(4)[7], WB7S(4)[7],WB8CQV(5)[8],WB8IMY(5)[8],WB8YQJ(3)[6],WB8YSQ(5)[8], WB8YYY(5)[8],WB9KPT(4)[7],WB9QAF(4)[7],WC7S(4)[7],WD5CCA(4)[8], WD5F(5)[8],WE6EZ(4)[7],WF4U(3)[6],WF7T(4)[8],WG8Y(5)[8], WH2ACT(4)[7],WH6AQ(5)[8],WH6W(3)[6],WH7R(4)[7],WJ9B(3)[6], WK4AA(4)[8],WK7G(4)[7],WL7OU(4)[7],WM5DX(4)[8],WN7Y(4)[7], WP3ME(5)[8],WP3Q(5)[8],WQ5L(4)[8],WQ9T(4)[7],WR3O(4)[8],WR5J(3)[6], WS6K(4)[8],WS6X(5)[8],WS7X(4)[7],WS9M(5)[8],WT2P(4)[8],WT5L(5)[8], WU0B(5)[8],WU6C(5)[8],WU9B(3)[6],WW4R(4)[8],WX5S(3)[6],WY7FD(4)[7], WY7I(4)[8],WY7KY(4)[7],WY7SS(4)[7],WZ4F(4)[8],WZ7I(5)[8]; Guantanamo Bay: 08: 11: NA: 20.00: 75.00: 5.0: KG4: KG4; Mariana Islands: 27: 64: OC: 15.18: -145.72: -10.0: KH0: AH0,KH0,NH0,WH0,NH2B,W3FM; Baker & Howland Islands: 31: 61: OC: 0.00: 176.00: 12.0: KH1: AH1,KH1,NH1,WH1; Guam: 27: 64: OC: 13.37: -144.70: -10.0: KH2: AH2,KH2,NH2,WH2,AH0F,KG6DX,KG6JDX,N2MI,NH7WC,W6KV; Johnston Island: 31: 61: OC: 16.72: 169.53: 10.0: KH3: AH3,KH3,NH3,WH3; Midway Island: 31: 61: OC: 28.20: 177.37: 11.0: KH4: AH4,KH4,NH4,WH4; Palmyra & Jarvis Islands: 31: 61: OC: 5.87: 162.07: 11.0: KH5: AH5,KH5,NH5,WH5; Hawaii: 31: 61: OC: 21.12: 157.48: 10.0: KH6: AH6,AH7,KH6,KH7,NH6,NH7,WH6,WH7,AC7N,AH0A,K0LUC,K2FFT,K2GT,K3UNS, K4XS,K6AMA,K6GUY,K7NRJ,K8EUT,K9FD,KA7RKW,KA9DMP,KB3SEV,KB6EGA, KB7DDX,KB7G,KB7JB,KB7VUR,KC0ZER,KC2HL,KC2PGW,KC3GZT,KC7I,KC7VHF, KC7VWU,KC9SBG,KD0ZSP,KD5ACN,KD7UV,KD8GVO,KE7IZS,KE7KRQ,KE7PEQ, KE7PIZ,KF4OOB,KG6EFD,KH0WJ,KI6FTE,KI6HBZ,KI6LPT,KI7FUT,KJ4BHO, KK4YIT,N0PJV,N1YLH,N2KLQ,N3ZFY,N6AI,N7AMY,N9CRQ,W0UNI,W3ZRT, W5FJG,W6MRJ,W7EHP,W7NX,WB4JTT,WB9SMM; Kure Island: 31: 61: OC: 29.00: 178.00: 10.0: KH7K: AH7K,KH7K,NH7K,WH7K; American Samoa: 32: 62: OC: -14.32: 170.78: 11.0: KH8: AH8,KH8,NH8,WH8,W3HG; Swains Island: 32: 62: OC: -11.05: 171.25: 11.0: KH8/s: KH8S/NA6M; Wake Island: 31: 65: OC: 19.28: -166.63: -12.0: KH9: AH9,KH9,NH9,WH9; Alaska: 01: 01: NA: 61.40: 148.87: 8.0: KL: AL,KL,NL,WL,AD0ZL,AD7MF,AE1DJ,AE5FN,AE7ES,K1MAT,K5DOW,K6ANE, KA2ZSD,KB1PHP,KB3JFK,KC0CYR,KC0TK,KC1DL,KC2KMU,KC8NMN,KD0DHU, KD7MGO,KD7ZTJ,KD8WMX,KE5GEB,KE5NLG,KE5VPO,KE7KYU,KE7PXV,KF4TBD, KF6UWT,KF7PCJ,KG5EQN,KG5MIB,KG7CUR,KH7DA,KI4NGY,KI7COR,KN4CCY, N0XS,N1QFE,N4AVX,N4CM,N5WPR,N9AIG,NE7EK,NJ7H,W2KRZ,W4BMR,W7ZWT, WB7QWM,WH7AK; Navassa Island: 08: 11: NA: 18.40: 75.00: 5.0: KP1: KP1,NP1,WP1; US Virgin Islands: 08: 11: NA: 17.73: 64.80: 4.0: KP2: KP2,NP2,WP2,K8RF,K9VV,KB3ZUD,KG5KHO,KV4BT,KV4FZ,KV4KW; Puerto Rico: 08: 11: NA: 18.18: 66.55: 4.0: KP4: KP3,KP4,NP3,NP4,WP3,WP4,KC1IHB,KC2TE,KC2UXP,KI4WOA,KI4WOB,KP2Z, W9JS; Desecheo Island: 08: 11: NA: 18.08: 67.88: 4.0: KP5: KP5,NP5,WP5; Norway: 14: 18: EU: 61.00: -9.00: -1.0: LA: LA,LB,LC,LD,LE,LF,LG,LH,LI,LJ,LK,LL,LM,LN; Argentina: 13: 14: SA: -34.80: 65.92: 3.0: LU: AY,AZ,L1,L2,L3,L4,L5,L6,L7,L8,L9,LO,LP,LQ,LR,LS,LT,LU,LV,LW,AY0V[16], AY0W[16],AY0X[16],AY0Y[16],AY1V[16],AY1W[16],AY1X[16],AY1Y[16],AY2V[16], AY2W[16],AY2X[16],AY2Y[16],AY3V[16],AY3W[16],AY3X[16],AY3Y[16],AY4V[16], AY4W[16],AY4X[16],AY4Y[16],AY5V[16],AY5W[16],AY5X[16],AY5Y[16],AY6V[16], AY6W[16],AY6X[16],AY6Y[16],AY7V[16],AY7W[16],AY7X[16],AY7Y[16],AY8V[16], AY8W[16],AY8X[16],AY8Y[16],AY9V[16],AY9W[16],AY9X[16],AY9Y[16],AZ0V[16], AZ0W[16],AZ0X[16],AZ0Y[16],AZ1V[16],AZ1W[16],AZ1X[16],AZ1Y[16],AZ2V[16], AZ2W[16],AZ2X[16],AZ2Y[16],AZ3V[16],AZ3W[16],AZ3X[16],AZ3Y[16],AZ4V[16], AZ4W[16],AZ4X[16],AZ4Y[16],AZ5V[16],AZ5W[16],AZ5X[16],AZ5Y[16],AZ6V[16], AZ6W[16],AZ6X[16],AZ6Y[16],AZ7V[16],AZ7W[16],AZ7X[16],AZ7Y[16],AZ8V[16], AZ8W[16],AZ8X[16],AZ8Y[16],AZ9V[16],AZ9W[16],AZ9X[16],AZ9Y[16],L20V[16], L20W[16],L20X[16],L20Y[16],L21V[16],L21W[16],L21X[16],L21Y[16],L22V[16], L22W[16],L22X[16],L22Y[16],L23V[16],L23W[16],L23X[16],L23Y[16],L24V[16], L24W[16],L24X[16],L24Y[16],L25V[16],L25W[16],L25X[16],L25Y[16],L26V[16], L26W[16],L26X[16],L26Y[16],L27V[16],L27W[16],L27X[16],L27Y[16],L28V[16], L28W[16],L28X[16],L28Y[16],L29V[16],L29W[16],L29X[16],L29Y[16],L30V[16], L30W[16],L30X[16],L30Y[16],L31V[16],L31W[16],L31X[16],L31Y[16],L32V[16], L32W[16],L32X[16],L32Y[16],L33V[16],L33W[16],L33X[16],L33Y[16],L34V[16], L34W[16],L34X[16],L34Y[16],L35V[16],L35W[16],L35X[16],L35Y[16],L36V[16], L36W[16],L36X[16],L36Y[16],L37V[16],L37W[16],L37X[16],L37Y[16],L38V[16], L38W[16],L38X[16],L38Y[16],L39V[16],L39W[16],L39X[16],L39Y[16],L40V[16], L40W[16],L40X[16],L40Y[16],L41V[16],L41W[16],L41X[16],L41Y[16],L42V[16], L42W[16],L42X[16],L42Y[16],L43V[16],L43W[16],L43X[16],L43Y[16],L44V[16], L44W[16],L44X[16],L44Y[16],L45V[16],L45W[16],L45X[16],L45Y[16],L46V[16], L46W[16],L46X[16],L46Y[16],L47V[16],L47W[16],L47X[16],L47Y[16],L48V[16], L48W[16],L48X[16],L48Y[16],L49V[16],L49W[16],L49X[16],L49Y[16],L50V[16], L50W[16],L50X[16],L50Y[16],L51V[16],L51W[16],L51X[16],L51Y[16],L52V[16], L52W[16],L52X[16],L52Y[16],L53V[16],L53W[16],L53X[16],L53Y[16],L54V[16], L54W[16],L54X[16],L54Y[16],L55V[16],L55W[16],L55X[16],L55Y[16],L56V[16], L56W[16],L56X[16],L56Y[16],L57V[16],L57W[16],L57X[16],L57Y[16],L58V[16], L58W[16],L58X[16],L58Y[16],L59V[16],L59W[16],L59X[16],L59Y[16],L60V[16], L60W[16],L60X[16],L60Y[16],L61V[16],L61W[16],L61X[16],L61Y[16],L62V[16], L62W[16],L62X[16],L62Y[16],L63V[16],L63W[16],L63X[16],L63Y[16],L64V[16], L64W[16],L64X[16],L64Y[16],L65V[16],L65W[16],L65X[16],L65Y[16],L66V[16], L66W[16],L66X[16],L66Y[16],L67V[16],L67W[16],L67X[16],L67Y[16],L68V[16], L68W[16],L68X[16],L68Y[16],L69V[16],L69W[16],L69X[16],L69Y[16],L70V[16], L70W[16],L70X[16],L70Y[16],L71V[16],L71W[16],L71X[16],L71Y[16],L72V[16], L72W[16],L72X[16],L72Y[16],L73V[16],L73W[16],L73X[16],L73Y[16],L74V[16], L74W[16],L74X[16],L74Y[16],L75V[16],L75W[16],L75X[16],L75Y[16],L76V[16], L76W[16],L76X[16],L76Y[16],L77V[16],L77W[16],L77X[16],L77Y[16],L78V[16], L78W[16],L78X[16],L78Y[16],L79V[16],L79W[16],L79X[16],L79Y[16],L80V[16], L80W[16],L80X[16],L80Y[16],L81V[16],L81W[16],L81X[16],L81Y[16],L82V[16], L82W[16],L82X[16],L82Y[16],L83V[16],L83W[16],L83X[16],L83Y[16],L84V[16], L84W[16],L84X[16],L84Y[16],L85V[16],L85W[16],L85X[16],L85Y[16],L86V[16], L86W[16],L86X[16],L86Y[16],L87V[16],L87W[16],L87X[16],L87Y[16],L88V[16], L88W[16],L88X[16],L88Y[16],L89V[16],L89W[16],L89X[16],L89Y[16],L90V[16], L90W[16],L90X[16],L90Y[16],L91V[16],L91W[16],L91X[16],L91Y[16],L92V[16], L92W[16],L92X[16],L92Y[16],L93V[16],L93W[16],L93X[16],L93Y[16],L94V[16], L94W[16],L94X[16],L94Y[16],L95V[16],L95W[16],L95X[16],L95Y[16],L96V[16], L96W[16],L96X[16],L96Y[16],L97V[16],L97W[16],L97X[16],L97Y[16],L98V[16], L98W[16],L98X[16],L98Y[16],L99V[16],L99W[16],L99X[16],L99Y[16],LO0V[16], LO0W[16],LO0X[16],LO0Y[16],LO1V[16],LO1W[16],LO1X[16],LO1Y[16],LO2V[16], LO2W[16],LO2X[16],LO2Y[16],LO3V[16],LO3W[16],LO3X[16],LO3Y[16],LO4V[16], LO4W[16],LO4X[16],LO4Y[16],LO5V[16],LO5W[16],LO5X[16],LO5Y[16],LO6V[16], LO6W[16],LO6X[16],LO6Y[16],LO7V[16],LO7W[16],LO7X[16],LO7Y[16],LO8V[16], LO8W[16],LO8X[16],LO8Y[16],LO9V[16],LO9W[16],LO9X[16],LO9Y[16],LP0V[16], LP0W[16],LP0X[16],LP0Y[16],LP1V[16],LP1W[16],LP1X[16],LP1Y[16],LP2V[16], LP2W[16],LP2X[16],LP2Y[16],LP3V[16],LP3W[16],LP3X[16],LP3Y[16],LP4V[16], LP4W[16],LP4X[16],LP4Y[16],LP5V[16],LP5W[16],LP5X[16],LP5Y[16],LP6V[16], LP6W[16],LP6X[16],LP6Y[16],LP7V[16],LP7W[16],LP7X[16],LP7Y[16],LP8V[16], LP8W[16],LP8X[16],LP8Y[16],LP9V[16],LP9W[16],LP9X[16],LP9Y[16],LQ0V[16], LQ0W[16],LQ0X[16],LQ0Y[16],LQ1V[16],LQ1W[16],LQ1X[16],LQ1Y[16],LQ2V[16], LQ2W[16],LQ2X[16],LQ2Y[16],LQ3V[16],LQ3W[16],LQ3X[16],LQ3Y[16],LQ4V[16], LQ4W[16],LQ4X[16],LQ4Y[16],LQ5V[16],LQ5W[16],LQ5X[16],LQ5Y[16],LQ6V[16], LQ6W[16],LQ6X[16],LQ6Y[16],LQ7V[16],LQ7W[16],LQ7X[16],LQ7Y[16],LQ8V[16], LQ8W[16],LQ8X[16],LQ8Y[16],LQ9V[16],LQ9W[16],LQ9X[16],LQ9Y[16],LR0V[16], LR0W[16],LR0X[16],LR0Y[16],LR1V[16],LR1W[16],LR1X[16],LR1Y[16],LR2V[16], LR2W[16],LR2X[16],LR2Y[16],LR3V[16],LR3W[16],LR3X[16],LR3Y[16],LR4V[16], LR4W[16],LR4X[16],LR4Y[16],LR5V[16],LR5W[16],LR5X[16],LR5Y[16],LR6V[16], LR6W[16],LR6X[16],LR6Y[16],LR7V[16],LR7W[16],LR7X[16],LR7Y[16],LR8V[16], LR8W[16],LR8X[16],LR8Y[16],LR9V[16],LR9W[16],LR9X[16],LR9Y[16],LS0V[16], LS0W[16],LS0X[16],LS0Y[16],LS1V[16],LS1W[16],LS1X[16],LS1Y[16],LS2V[16], LS2W[16],LS2X[16],LS2Y[16],LS3V[16],LS3W[16],LS3X[16],LS3Y[16],LS4V[16], LS4W[16],LS4X[16],LS4Y[16],LS5V[16],LS5W[16],LS5X[16],LS5Y[16],LS6V[16], LS6W[16],LS6X[16],LS6Y[16],LS7V[16],LS7W[16],LS7X[16],LS7Y[16],LS8V[16], LS8W[16],LS8X[16],LS8Y[16],LS9V[16],LS9W[16],LS9X[16],LS9Y[16],LT0V[16], LT0W[16],LT0X[16],LT0Y[16],LT1V[16],LT1W[16],LT1X[16],LT1Y[16],LT2V[16], LT2W[16],LT2X[16],LT2Y[16],LT3V[16],LT3W[16],LT3X[16],LT3Y[16],LT4V[16], LT4W[16],LT4X[16],LT4Y[16],LT5V[16],LT5W[16],LT5X[16],LT5Y[16],LT6V[16], LT6W[16],LT6X[16],LT6Y[16],LT7V[16],LT7W[16],LT7X[16],LT7Y[16],LT8V[16], LT8W[16],LT8X[16],LT8Y[16],LT9V[16],LT9W[16],LT9X[16],LT9Y[16],LU0V[16], LU0W[16],LU0X[16],LU0Y[16],LU1V[16],LU1W[16],LU1X[16],LU1Y[16],LU2V[16], LU2W[16],LU2X[16],LU2Y[16],LU3V[16],LU3W[16],LU3X[16],LU3Y[16],LU4V[16], LU4W[16],LU4X[16],LU4Y[16],LU5V[16],LU5W[16],LU5X[16],LU5Y[16],LU6V[16], LU6W[16],LU6X[16],LU6Y[16],LU7V[16],LU7W[16],LU7X[16],LU7Y[16],LU8V[16], LU8W[16],LU8X[16],LU8Y[16],LU9V[16],LU9W[16],LU9X[16],LU9Y[16],LV0V[16], LV0W[16],LV0X[16],LV0Y[16],LV1V[16],LV1W[16],LV1X[16],LV1Y[16],LV2V[16], LV2W[16],LV2X[16],LV2Y[16],LV3V[16],LV3W[16],LV3X[16],LV3Y[16],LV4V[16], LV4W[16],LV4X[16],LV4Y[16],LV5V[16],LV5W[16],LV5X[16],LV5Y[16],LV6V[16], LV6W[16],LV6X[16],LV6Y[16],LV7V[16],LV7W[16],LV7X[16],LV7Y[16],LV8V[16], LV8W[16],LV8X[16],LV8Y[16],LV9V[16],LV9W[16],LV9X[16],LV9Y[16],LW0V[16], LW0W[16],LW0X[16],LW0Y[16],LW1V[16],LW1W[16],LW1X[16],LW1Y[16],LW2V[16], LW2W[16],LW2X[16],LW2Y[16],LW3V[16],LW3W[16],LW3X[16],LW3Y[16],LW4V[16], LW4W[16],LW4X[16],LW4Y[16],LW5V[16],LW5W[16],LW5X[16],LW5Y[16],LW6V[16], LW6W[16],LW6X[16],LW6Y[16],LW7V[16],LW7W[16],LW7X[16],LW7Y[16],LW8V[16], LW8W[16],LW8X[16],LW8Y[16],LW9V[16],LW9W[16],LW9X[16],LW9Y[16],LU1AET/D, LU1BCE/D,LU1FMC/F,LU1GQQ/GP,LU1JCE/J,LU1JMV/J,LU1JN/J,LU1JP/J, LU1SF/S,LU1VPH/V[16],LU1YY/Y[16],LU2AAS/D,LU2AMM/D,LU2CDE/D, LU2DRT/D,LU2DT/D,LU2DVI/H,LU2EE/D,LU2EGA/D,LU2EIT/D,LU2FGD/F, LU2FNH/D,LU2JCI/J,LU2JNV/J,LU2LDB/L,LU2VA/Y[16],LU2VCR/V[16], LU2WA/W[16],LU3CRA/D,LU3CT/D,LU3DK/D,LU3DPH/D,LU3DY/D,LU3DYN/D, LU3EBS/D,LU3ELR/D,LU3ESY/D,LU3JVO/J,LU3VE/V[16],LU3XAP/XA[16], LU4AAO/D,LU4CMF/D,LU4DLN/D,LU4DQ/D,LU4GF/GA,LU4JEA/J,LU4JLX/J, LU4LMA/L,LU4XEG/XA[16],LU5BDS/D,LU5DA/D,LU5DDH/D,LU5DLH/D,LU5FB/F, LU5JAH/D,LU5JB/J,LU5JCL/J,LU5JIB/D,LU5JLX/J,LU5LAE/L,LU5UEA/U, LU5UFM/U,LU5VIE/V[16],LU6DAX/D,LU6DIE/D,LU6DO/V[16],LU6EEG/D, LU6EPE/D,LU6FE/F,LU6JRA/J,LU6UBM/U,LU6UO/U,LU6VEK/W[16],LU7DAC/D, LU7DAF/D,LU7DHG/D,LU7DLN/D,LU7DNM/D,LU7EO/D,LU7HCS/H,LU7JRM/J, LU8BV/V[16],LU8EHV/D,LU8EMC/D,LU8JOP/J,LU8LFV/L,LU8VCC/V[16], LU8XBS/XA[16],LU9DAD/D,LU9DKO/D,LU9EI/D,LU9EJM/D,LU9EZX/D, LU9GRE/GP,LU9JMG/J,LU9JPR/J,LU9LZZ/L,LUVES/V[16],LW1ECE/D,LW1ECO/D, LW2DJM/D,LW2DSM/D,LW2DYA/D,LW2EQS/D,LW2EUA/D,LW3DAB/D,LW3DC/D, LW3DED/D,LW3DGC/D,LW3DN/D,LW3DTD/D,LW4ERO/D,LW5DR/D,LW7DGT/D, LW7EDH/D,LW7EOJ/D,LW8DMC/D,LW9DRD/D,LW9DTQ/D; Luxembourg: 14: 27: EU: 50.00: -6.00: -1.0: LX: LX; Lithuania: 15: 29: EU: 55.45: -23.63: -2.0: LY: LY; Bulgaria: 20: 28: EU: 42.83: -25.08: -2.0: LZ: LZ; Peru: 10: 12: SA: -10.00: 76.00: 5.0: OA: 4T,OA,OB,OC; Lebanon: 20: 39: AS: 33.83: -35.83: -2.0: OD: OD; Austria: 15: 28: EU: 47.33: -13.33: -1.0: OE: OE,4U0R,4U1A,4U1VIC,4U2U,4Y1A,C7A; Finland: 15: 18: EU: 63.78: -27.08: -2.0: OH: OF,OG,OH,OI,OJ; Aland Islands: 15: 18: EU: 60.13: -20.37: -2.0: OH0: OF0,OG0,OH0,OI0; Market Reef: 15: 18: EU: 60.00: -19.00: -2.0: OJ0: OJ0; Czech Republic: 15: 28: EU: 50.00: -16.00: -1.0: OK: OK,OL,OK1KCR/J; Slovak Republic: 15: 28: EU: 49.00: -20.00: -1.0: OM: OM; Belgium: 14: 27: EU: 50.70: -4.85: -1.0: ON: ON,OO,OP,OQ,OR,OS,OT; Greenland: 40: 05: NA: 74.00: 42.78: 3.0: OX: OX,XP; Faroe Islands: 14: 18: EU: 62.07: 6.93: 0.0: OY: OW,OY; Denmark: 14: 18: EU: 56.00: -10.00: -1.0: OZ: 5P,5Q,OU,OV,OZ; Papua New Guinea: 28: 51: OC: -9.50: -147.12: -10.0: P2: P2; Aruba: 09: 11: SA: 12.53: 69.98: 4.0: P4: P4; DPR of Korea: 25: 44: AS: 39.78: -126.30: -9.0: P5: P5,P6,P7,P8,P9; Netherlands: 14: 27: EU: 52.28: -5.47: -1.0: PA: PA,PB,PC,PD,PE,PF,PG,PH,PI,PA1FJ/J,PA4WK/J,PA6HYG/J,PA6JAM/J, PA6RCG/J,PA6SJS/J,PD1JSH/J,PE18KA/J,PH50GFB/J,PH6BB/J,PI4CQ/J; Curacao: 09: 11: SA: 12.17: 69.00: 4.0: PJ2: PJ2; Bonaire: 09: 11: SA: 12.20: 68.25: 4.0: PJ4: PJ4; Saba & St. Eustatius: 08: 11: NA: 17.57: 63.10: 4.0: PJ5: PJ5,PJ6; Sint Maarten: 08: 11: NA: 18.07: 63.07: 4.0: PJ7: PJ7; Brazil: 11: 15: SA: -10.00: 53.00: 3.0: PY: PP,PQ,PR,PS,PT,PU,PV,PW,PX,PY,ZV,ZW,ZX,ZY,ZZ,PP6[13],PP7[13],PP8[12], PQ2[13],PQ8[13],PR7[13],PR8[13],PS7[13],PS8[13],PT2[13],PT7[13],PT8[12], PV8[12],PW8[12],PY6[13],PY7[13],PY8[13],PY9[13]; Fernando de Noronha: 11: 13: SA: -3.85: 32.43: 2.0: PY0F: PP0F,PP0ZF,PQ0F,PQ0ZF,PR0F,PR0ZF,PS0F,PS0ZF,PT0F,PT0ZF,PU0F,PU0ZF,PV0F, PV0ZF,PW0F,PW0ZF,PX0F,PX0ZF,PY0F,PY0Z,ZV0F,ZV0ZF,ZW0F,ZW0ZF,ZX0F,ZX0ZF, ZY0F,ZY0Z,ZZ0F,ZZ0ZF,PP0R,PP0ZR,PQ0R,PQ0ZR,PR0R,PR0ZR,PS0R,PS0ZR,PT0R, PT0ZR,PU0R,PU0ZR,PV0R,PV0ZR,PW0R,PW0ZR,PX0R,PX0ZR,PY0R,ZV0R,ZV0ZR,ZW0R, ZW0ZR,ZX0R,ZX0ZR,ZY0R,ZZ0R,ZZ0ZR; St. Peter & St. Paul: 11: 13: SA: 0.00: 29.00: 2.0: PY0S: PP0S,PP0ZS,PQ0S,PQ0ZS,PR0S,PR0ZS,PS0S,PS0ZS,PT0S,PT0ZS,PU0S,PU0ZS,PV0S, PV0ZS,PW0S,PW0ZS,PX0S,PX0ZS,PY0S,PY0ZS,ZV0S,ZV0ZS,ZW0S,ZW0ZS,ZX0S,ZX0ZS, ZY0S,ZY0ZS,ZZ0S,ZZ0ZS; Trindade & Martim Vaz: 11: 15: SA: -20.50: 29.32: 2.0: PY0T: PP0T,PP0ZT,PQ0T,PQ0ZT,PR0T,PR0ZT,PS0T,PS0ZT,PT0T,PT0ZT,PU0T,PU0ZT,PV0T, PV0ZT,PW0T,PW0ZT,PX0T,PX0ZT,PY0T,PY0ZT,ZV0T,ZV0ZT,ZW0T,ZW0ZT,ZX0T,ZX0ZT, ZY0T,ZY0ZT,ZZ0T,ZZ0ZT; Suriname: 09: 12: SA: 4.00: 56.00: 3.0: PZ: PZ; Franz Josef Land: 40: 75: EU: 80.68: -49.92: -3.0: R1FJ: RI1F,UA4RX/1; Western Sahara: 33: 46: AF: 24.82: 13.85: 0.0: S0: S0; Bangladesh: 22: 41: AS: 24.12: -89.65: -6.0: S2: S2,S3; Slovenia: 15: 28: EU: 46.00: -14.00: -1.0: S5: S5; Seychelles: 39: 53: AF: -4.67: -55.47: -4.0: S7: S7; Sao Tome & Principe: 36: 47: AF: 0.22: -6.57: 0.0: S9: S9; Sweden: 14: 18: EU: 61.20: -14.57: -1.0: SM: 7S,8S,SA,SB,SC,SD,SE,SF,SG,SH,SI,SJ,SK,SL,SM; Poland: 15: 28: EU: 52.28: -18.67: -1.0: SP: 3Z,HF,SN,SO,SP,SQ,SR; Sudan: 34: 48: AF: 14.47: -28.62: -3.0: ST: 6T,6U,ST; Egypt: 34: 38: AF: 26.28: -28.60: -2.0: SU: 6A,6B,SS,SU; Greece: 20: 28: EU: 39.78: -21.78: -2.0: SV: J4,SV,SW,SX,SY,SZ,SV2CLJ/J,SV2JAO/J,SV2KBB/J,SZ2TSL/J; Mount Athos: 20: 28: EU: 40.00: -24.00: -2.0: SV/a: SV2ASP/A; Dodecanese: 20: 28: EU: 36.17: -27.93: -2.0: SV5: J45,SV5,SW5,SX5,SY5,SZ5,SV0XCA/5; Crete: 20: 28: EU: 35.23: -24.78: -2.0: SV9: J49,SV9,SW9,SX9,SY9,SZ9; Tuvalu: 31: 65: OC: -8.50: -179.20: -12.0: T2: T2; Western Kiribati: 31: 65: OC: 1.42: -173.00: -12.0: T30: T30; Central Kiribati: 31: 62: OC: -2.83: 171.72: -13.0: T31: T31; Eastern Kiribati: 31: 61: OC: 1.80: 157.35: -14.0: T32: T32; Banaba Island: 31: 65: OC: -0.88: -169.53: -12.0: T33: T33; Somalia: 37: 48: AF: 2.03: -45.35: -3.0: T5: 6O,T5; San Marino: 15: 28: EU: 43.95: -12.45: -1.0: T7: T7; Palau: 27: 64: OC: 7.45: -134.53: -9.0: T8: T8; Asiatic Turkey: 20: 39: AS: 39.18: -35.65: -2.0: TA: TA,TB,TC,YM,TA1BZ/2; European Turkey: 20: 39: EU: 41.02: -28.97: -2.0: *TA1: TA1,TB1,TC1,YM1,TA6CQ/1; Iceland: 40: 17: EU: 64.80: 18.73: 0.0: TF: TF; Guatemala: 07: 11: NA: 15.50: 90.30: 6.0: TG: TD,TG; Costa Rica: 07: 11: NA: 10.00: 84.00: 6.0: TI: TE,TI; Cocos Island: 07: 11: NA: 5.52: 87.05: 6.0: TI9: TE9,TI9; Cameroon: 36: 47: AF: 5.38: -11.87: -1.0: TJ: TJ; Corsica: 15: 28: EU: 42.00: -9.00: -1.0: TK: TK; Central African Republic: 36: 47: AF: 6.75: -20.33: -1.0: TL: TL; Republic of the Congo: 36: 52: AF: -1.02: -15.37: -1.0: TN: TN; Gabon: 36: 52: AF: -0.37: -11.73: -1.0: TR: TR; Chad: 36: 47: AF: 15.80: -18.17: -1.0: TT: TT; Cote d'Ivoire: 35: 46: AF: 7.58: 5.80: 0.0: TU: TU; Benin: 35: 46: AF: 9.87: -2.25: -1.0: TY: TY; Mali: 35: 46: AF: 18.00: 2.58: 0.0: TZ: TZ; European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: R,U,R1N[19],R1O[19],R1P[20],R1Z[19],R4H[30],R4I[30],R4W[30],R8F(17)[30], R8G(17)[30],R8X(17)[20],R9F(17)[30],R9G(17)[30],R9X(17)[20],RA1N[19], RA1O[19],RA1P[20],RA1Z[19],RA4H[30],RA4I[30],RA4W[30],RA8F(17)[30], RA8G(17)[30],RA8X(17)[20],RA9F(17)[30],RA9G(17)[30],RA9X(17)[20],RC1N[19], RC1O[19],RC1P[20],RC1Z[19],RC4H[30],RC4I[30],RC4W[30],RC8F(17)[30], RC8G(17)[30],RC8X(17)[20],RC9F(17)[30],RC9G(17)[30],RC9X(17)[20],RD1N[19], RD1O[19],RD1P[20],RD1Z[19],RD4H[30],RD4I[30],RD4W[30],RD8F(17)[30], RD8G(17)[30],RD8X(17)[20],RD9F(17)[30],RD9G(17)[30],RD9X(17)[20],RE1N[19], RE1O[19],RE1P[20],RE1Z[19],RE4H[30],RE4I[30],RE4W[30],RE8F(17)[30], RE8G(17)[30],RE8X(17)[20],RE9F(17)[30],RE9G(17)[30],RE9X(17)[20],RF1N[19], RF1O[19],RF1P[20],RF1Z[19],RF4H[30],RF4I[30],RF4W[30],RF8F(17)[30], RF8G(17)[30],RF8X(17)[20],RF9F(17)[30],RF9G(17)[30],RF9X(17)[20],RG1N[19], RG1O[19],RG1P[20],RG1Z[19],RG4H[30],RG4I[30],RG4W[30],RG8F(17)[30], RG8G(17)[30],RG8X(17)[20],RG9F(17)[30],RG9G(17)[30],RG9X(17)[20], RI8X(17)[20],RI9X(17)[20],RJ1N[19],RJ1O[19],RJ1P[20],RJ1Z[19],RJ4H[30], RJ4I[30],RJ4W[30],RJ8F(17)[30],RJ8G(17)[30],RJ8X(17)[20],RJ9F(17)[30], RJ9G(17)[30],RJ9X(17)[20],RK1N[19],RK1O[19],RK1P[20],RK1Z[19],RK4H[30], RK4I[30],RK4W[30],RK8F(17)[30],RK8G(17)[30],RK8X(17)[20],RK9F(17)[30], RK9G(17)[30],RK9X(17)[20],RL1N[19],RL1O[19],RL1P[20],RL1Z[19],RL4H[30], RL4I[30],RL4W[30],RL8F(17)[30],RL8G(17)[30],RL8X(17)[20],RL9F(17)[30], RL9G(17)[30],RL9X(17)[20],RM1N[19],RM1O[19],RM1P[20],RM1Z[19],RM4H[30], RM4I[30],RM4W[30],RM8F(17)[30],RM8G(17)[30],RM8X(17)[20],RM9F(17)[30], RM9G(17)[30],RM9X(17)[20],RN1N[19],RN1O[19],RN1P[20],RN1Z[19],RN4H[30], RN4I[30],RN4W[30],RN8F(17)[30],RN8G(17)[30],RN8X(17)[20],RN9F(17)[30], RN9G(17)[30],RN9X(17)[20],RO1N[19],RO1O[19],RO1P[20],RO1Z[19],RO4H[30], RO4I[30],RO4W[30],RO8F(17)[30],RO8G(17)[30],RO8X(17)[20],RO9F(17)[30], RO9G(17)[30],RO9X(17)[20],RQ1N[19],RQ1O[19],RQ1P[20],RQ1Z[19],RQ4H[30], RQ4I[30],RQ4W[30],RQ8F(17)[30],RQ8G(17)[30],RQ8X(17)[20],RQ9F(17)[30], RQ9G(17)[30],RQ9X(17)[20],RT1N[19],RT1O[19],RT1P[20],RT1Z[19],RT4H[30], RT4I[30],RT4W[30],RT8F(17)[30],RT8G(17)[30],RT8X(17)[20],RT9F(17)[30], RT9G(17)[30],RT9X(17)[20],RU1N[19],RU1O[19],RU1P[20],RU1Z[19],RU4H[30], RU4I[30],RU4W[30],RU8F(17)[30],RU8G(17)[30],RU8X(17)[20],RU9F(17)[30], RU9G(17)[30],RU9X(17)[20],RV1N[19],RV1O[19],RV1P[20],RV1Z[19],RV4H[30], RV4I[30],RV4W[30],RV8F(17)[30],RV8G(17)[30],RV8X(17)[20],RV9F(17)[30], RV9G(17)[30],RV9X(17)[20],RW1N[19],RW1O[19],RW1P[20],RW1Z[19],RW4H[30], RW4I[30],RW4W[30],RW8F(17)[30],RW8G(17)[30],RW8X(17)[20],RW9F(17)[30], RW9G(17)[30],RW9X(17)[20],RX1N[19],RX1O[19],RX1P[20],RX1Z[19],RX4H[30], RX4I[30],RX4W[30],RX8F(17)[30],RX8G(17)[30],RX8X(17)[20],RX9F(17)[30], RX9G(17)[30],RX9X(17)[20],RY1N[19],RY1O[19],RY1P[20],RY1Z[19],RY4H[30], RY4I[30],RY4W[30],RY8F(17)[30],RY8G(17)[30],RY8X(17)[20],RY9F(17)[30], RY9G(17)[30],RY9X(17)[20],RZ1N[19],RZ1O[19],RZ1P[20],RZ1Z[19],RZ4H[30], RZ4I[30],RZ4W[30],RZ8F(17)[30],RZ8G(17)[30],RZ8X(17)[20],RZ9F(17)[30], RZ9G(17)[30],RZ9X(17)[20],U1N[19],U1O[19],U1P[20],U1Z[19],U4H[30],U4I[30], U4W[30],U8F(17)[30],U8G(17)[30],U8X(17)[20],U9F(17)[30],U9G(17)[30], U9X(17)[20],UA1N[19],UA1O[19],UA1P[20],UA1Z[19],UA4H[30],UA4I[30], UA4W[30],UA8F(17)[30],UA8G(17)[30],UA8X(17)[20],UA9F(17)[30],UA9G(17)[30], UA9X(17)[20],UB1N[19],UB1O[19],UB1P[20],UB1Z[19],UB4H[30],UB4I[30], UB4W[30],UB8F(17)[30],UB8G(17)[30],UB8X(17)[20],UB9F(17)[30],UB9G(17)[30], UB9X(17)[20],UC1N[19],UC1O[19],UC1P[20],UC1Z[19],UC4H[30],UC4I[30], UC4W[30],UC8F(17)[30],UC8G(17)[30],UC8X(17)[20],UC9F(17)[30],UC9G(17)[30], UC9X(17)[20],UD1N[19],UD1O[19],UD1P[20],UD1Z[19],UD4H[30],UD4I[30], UD4W[30],UD8F(17)[30],UD8G(17)[30],UD8X(17)[20],UD9F(17)[30],UD9G(17)[30], UD9X(17)[20],UE1N[19],UE1O[19],UE1P[20],UE1Z[19],UE4H[30],UE4I[30], UE4W[30],UE8F(17)[30],UE8G(17)[30],UE8X(17)[20],UE9F(17)[30],UE9G(17)[30], UE9X(17)[20],UF1N[19],UF1O[19],UF1P[20],UF1Z[19],UF4H[30],UF4I[30], UF4W[30],UF8F(17)[30],UF8G(17)[30],UF8X(17)[20],UF9F(17)[30],UF9G(17)[30], UF9X(17)[20],UG1N[19],UG1O[19],UG1P[20],UG1Z[19],UG4H[30],UG4I[30], UG4W[30],UG8F(17)[30],UG8G(17)[30],UG8X(17)[20],UG9F(17)[30],UG9G(17)[30], UG9X(17)[20],UH1N[19],UH1O[19],UH1P[20],UH1Z[19],UH4H[30],UH4I[30], UH4W[30],UH8F(17)[30],UH8G(17)[30],UH8X(17)[20],UH9F(17)[30],UH9G(17)[30], UH9X(17)[20],UI1N[19],UI1O[19],UI1P[20],UI1Z[19],UI4H[30],UI4I[30], UI4W[30],UI8F(17)[30],UI8G(17)[30],UI8X(17)[20],UI9F(17)[30],UI9G(17)[30], UI9X(17)[20],R4HAT[29],R4HC[29],R4HCE[29],R4HCZ[29],R4HD[29], R4HDC[29],R4HDR[29],R4HL[29],R4IC[29],R4ID[29],R4II[29],R4IK[29], R4IM[29],R4IN[29],R4IO[29],R4IT[29],R80ORL,R8FF/3,R8MB/1(17)[20], R9JO/6,R9KW/4,R9SAO/1[20],RA4HL[29],RA9KD/6,RC4HT[29],RC4I[29], RJ4I[29],RJ4P[30],RK4HM[29],RM4I[29],RM4R[30],RN4HFJ[29], RN4HIF[29],RT9K/6,RT9K/6/P,RT9T/3,RU4HD[29],RU4HP[29],RU4I[29], RU80TO,RW4HM[29],RW4HTK[29],RW4HW[29],RW4HZ[29],RW9WJ/4[30],RZ5D/4, UA4H[29],UA4HBM[29],UA4HGL[29],UA4HIP[29],UA4HRZ[29],UA4HY[29], UA4NF[30],UA4PN[30],UC4I[29],UE80O,UE80OL,UE98WS,UI4I[29]; Kaliningrad: 15: 29: EU: 54.72: -20.52: -3.0: UA2: R2F,R2K,RA2,RC2F,RC2K,RD2F,RD2K,RE2F,RE2K,RF2F,RF2K,RG2F,RG2K,RJ2F,RJ2K, RK2F,RK2K,RL2F,RL2K,RM2F,RM2K,RN2F,RN2K,RO2F,RO2K,RQ2F,RQ2K,RT2F,RT2K, RU2F,RU2K,RV2F,RV2K,RW2F,RW2K,RX2F,RX2K,RY2F,RY2K,RZ2F,RZ2K,U2F,U2K,UA2, UB2,UC2,UD2,UE2,UF2,UG2,UH2,UI2,R2MWO; Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: R0,R8(17)[30],R9,RA0,RA8(17)[30],RA9,RC0,RC8(17)[30],RC9,RD0,RD8(17)[30], RD9,RE0,RE8(17)[30],RE9,RF0,RF8(17)[30],RF9,RG0,RG8(17)[30],RG9,RI0, RI8(17)[30],RI9,RJ0,RJ8(17)[30],RJ9,RK0,RK8(17)[30],RK9,RL0,RL8(17)[30], RL9,RM0,RM8(17)[30],RM9,RN0,RN8(17)[30],RN9,RO0,RO8(17)[30],RO9,RQ0, RQ8(17)[30],RQ9,RT0,RT8(17)[30],RT9,RU0,RU8(17)[30],RU9,RV0,RV8(17)[30], RV9,RW0,RW8(17)[30],RW9,RX0,RX8(17)[30],RX9,RY0,RY8(17)[30],RY9,RZ0, RZ8(17)[30],RZ9,U0,U8(17)[30],U9,UA0,UA8(17)[30],UA9,UB0,UB8(17)[30],UB9, UC0,UC8(17)[30],UC9,UD0,UD8(17)[30],UD9,UE0,UE8(17)[30],UE9,UF0, UF8(17)[30],UF9,UG0,UG8(17)[30],UG9,UH0,UH8(17)[30],UH9,UI0,UI8(17)[30], UI9,R0T(18)[32],R8H(18)[31],R8I(18)[31],R8O(18)[31],R8P(18)[31], R8S(16)[30],R8T(16)[30],R8U(18)[31],R8V(18)[31],R8W(16)[30],R8Y(18)[31], R8Z(18)[31],R9I(18)[31],R9M(17)[30],R9P(18)[31],R9S(16),R9T(16), R9V(18)[31],R9W(16),RA0T(18)[32],RA8H(18)[31],RA8I(18)[31],RA8O(18)[31], RA8P(18)[31],RA8S(16)[30],RA8T(16)[30],RA8U(18)[31],RA8V(18)[31], RA8W(16)[30],RA8Y(18)[31],RA8Z(18)[31],RA9I(18)[31],RA9M(17)[30], RA9P(18)[31],RA9S(16),RA9T(16),RA9V(18)[31],RA9W(16),RC0T(18)[32], RC8H(18)[31],RC8I(18)[31],RC8O(18)[31],RC8P(18)[31],RC8S(16)[30], RC8T(16)[30],RC8U(18)[31],RC8V(18)[31],RC8W(16)[30],RC8Y(18)[31], RC8Z(18)[31],RC9I(18)[31],RC9M(17)[30],RC9P(18)[31],RC9S(16),RC9T(16), RC9V(18)[31],RC9W(16),RD0T(18)[32],RD8H(18)[31],RD8I(18)[31],RD8O(18)[31], RD8P(18)[31],RD8S(16)[30],RD8T(16)[30],RD8U(18)[31],RD8V(18)[31], RD8W(16)[30],RD8Y(18)[31],RD8Z(18)[31],RD9I(18)[31],RD9M(17)[30], RD9P(18)[31],RD9S(16),RD9T(16),RD9V(18)[31],RD9W(16),RE0T(18)[32], RE8H(18)[31],RE8I(18)[31],RE8O(18)[31],RE8P(18)[31],RE8S(16)[30], RE8T(16)[30],RE8U(18)[31],RE8V(18)[31],RE8W(16)[30],RE8Y(18)[31], RE8Z(18)[31],RE9I(18)[31],RE9M(17)[30],RE9P(18)[31],RE9S(16),RE9T(16), RE9V(18)[31],RE9W(16),RF0T(18)[32],RF8H(18)[31],RF8I(18)[31],RF8O(18)[31], RF8P(18)[31],RF8S(16)[30],RF8T(16)[30],RF8U(18)[31],RF8V(18)[31], RF8W(16)[30],RF8Y(18)[31],RF8Z(18)[31],RF9I(18)[31],RF9M(17)[30], RF9P(18)[31],RF9S(16),RF9T(16),RF9V(18)[31],RF9W(16),RG0T(18)[32], RG8H(18)[31],RG8I(18)[31],RG8O(18)[31],RG8P(18)[31],RG8S(16)[30], RG8T(16)[30],RG8U(18)[31],RG8V(18)[31],RG8W(16)[30],RG8Y(18)[31], RG8Z(18)[31],RG9I(18)[31],RG9M(17)[30],RG9P(18)[31],RG9S(16),RG9T(16), RG9V(18)[31],RG9W(16),RJ0T(18)[32],RJ8H(18)[31],RJ8I(18)[31],RJ8O(18)[31], RJ8P(18)[31],RJ8S(16)[30],RJ8T(16)[30],RJ8U(18)[31],RJ8V(18)[31], RJ8W(16)[30],RJ8Y(18)[31],RJ8Z(18)[31],RJ9I(18)[31],RJ9M(17)[30], RJ9P(18)[31],RJ9S(16),RJ9T(16),RJ9V(18)[31],RJ9W(16),RK0T(18)[32], RK8H(18)[31],RK8I(18)[31],RK8O(18)[31],RK8P(18)[31],RK8S(16)[30], RK8T(16)[30],RK8U(18)[31],RK8V(18)[31],RK8W(16)[30],RK8Y(18)[31], RK8Z(18)[31],RK9I(18)[31],RK9M(17)[30],RK9P(18)[31],RK9S(16),RK9T(16), RK9V(18)[31],RK9W(16),RL0T(18)[32],RL8H(18)[31],RL8I(18)[31],RL8O(18)[31], RL8P(18)[31],RL8S(16)[30],RL8T(16)[30],RL8U(18)[31],RL8V(18)[31], RL8W(16)[30],RL8Y(18)[31],RL8Z(18)[31],RL9I(18)[31],RL9M(17)[30], RL9P(18)[31],RL9S(16),RL9T(16),RL9V(18)[31],RL9W(16),RM0T(18)[32], RM8H(18)[31],RM8I(18)[31],RM8O(18)[31],RM8P(18)[31],RM8S(16)[30], RM8T(16)[30],RM8U(18)[31],RM8V(18)[31],RM8W(16)[30],RM8Y(18)[31], RM8Z(18)[31],RM9I(18)[31],RM9M(17)[30],RM9P(18)[31],RM9S(16),RM9T(16), RM9V(18)[31],RM9W(16),RN0T(18)[32],RN8H(18)[31],RN8I(18)[31],RN8O(18)[31], RN8P(18)[31],RN8S(16)[30],RN8T(16)[30],RN8U(18)[31],RN8V(18)[31], RN8W(16)[30],RN8Y(18)[31],RN8Z(18)[31],RN9I(18)[31],RN9M(17)[30], RN9P(18)[31],RN9S(16),RN9T(16),RN9V(18)[31],RN9W(16),RO0T(18)[32], RO8H(18)[31],RO8I(18)[31],RO8O(18)[31],RO8P(18)[31],RO8S(16)[30], RO8T(16)[30],RO8U(18)[31],RO8V(18)[31],RO8W(16)[30],RO8Y(18)[31], RO8Z(18)[31],RO9I(18)[31],RO9M(17)[30],RO9P(18)[31],RO9S(16),RO9T(16), RO9V(18)[31],RO9W(16),RQ0T(18)[32],RQ8H(18)[31],RQ8I(18)[31],RQ8O(18)[31], RQ8P(18)[31],RQ8S(16)[30],RQ8T(16)[30],RQ8U(18)[31],RQ8V(18)[31], RQ8W(16)[30],RQ8Y(18)[31],RQ8Z(18)[31],RQ9I(18)[31],RQ9M(17)[30], RQ9P(18)[31],RQ9S(16),RQ9T(16),RQ9V(18)[31],RQ9W(16),RT0T(18)[32], RT8H(18)[31],RT8I(18)[31],RT8O(18)[31],RT8P(18)[31],RT8S(16)[30], RT8T(16)[30],RT8U(18)[31],RT8V(18)[31],RT8W(16)[30],RT8Y(18)[31], RT8Z(18)[31],RT9I(18)[31],RT9M(17)[30],RT9P(18)[31],RT9S(16),RT9T(16), RT9V(18)[31],RT9W(16),RU0T(18)[32],RU8H(18)[31],RU8I(18)[31],RU8O(18)[31], RU8P(18)[31],RU8S(16)[30],RU8T(16)[30],RU8U(18)[31],RU8V(18)[31], RU8W(16)[30],RU8Y(18)[31],RU8Z(18)[31],RU9I(18)[31],RU9M(17)[30], RU9P(18)[31],RU9S(16),RU9T(16),RU9V(18)[31],RU9W(16),RV0T(18)[32], RV8H(18)[31],RV8I(18)[31],RV8O(18)[31],RV8P(18)[31],RV8S(16)[30], RV8T(16)[30],RV8U(18)[31],RV8V(18)[31],RV8W(16)[30],RV8Y(18)[31], RV8Z(18)[31],RV9I(18)[31],RV9M(17)[30],RV9P(18)[31],RV9S(16),RV9T(16), RV9V(18)[31],RV9W(16),RW0T(18)[32],RW8H(18)[31],RW8I(18)[31],RW8O(18)[31], RW8P(18)[31],RW8S(16)[30],RW8T(16)[30],RW8U(18)[31],RW8V(18)[31], RW8W(16)[30],RW8Y(18)[31],RW8Z(18)[31],RW9I(18)[31],RW9M(17)[30], RW9P(18)[31],RW9S(16),RW9T(16),RW9V(18)[31],RW9W(16),RX0T(18)[32], RX8H(18)[31],RX8I(18)[31],RX8O(18)[31],RX8P(18)[31],RX8S(16)[30], RX8T(16)[30],RX8U(18)[31],RX8V(18)[31],RX8W(16)[30],RX8Y(18)[31], RX8Z(18)[31],RX9I(18)[31],RX9M(17)[30],RX9P(18)[31],RX9S(16),RX9T(16), RX9V(18)[31],RX9W(16),RY0T(18)[32],RY8H(18)[31],RY8I(18)[31],RY8O(18)[31], RY8P(18)[31],RY8S(16)[30],RY8T(16)[30],RY8U(18)[31],RY8V(18)[31], RY8W(16)[30],RY8Y(18)[31],RY8Z(18)[31],RY9I(18)[31],RY9M(17)[30], RY9P(18)[31],RY9S(16),RY9T(16),RY9V(18)[31],RY9W(16),RZ0T(18)[32], RZ8H(18)[31],RZ8I(18)[31],RZ8O(18)[31],RZ8P(18)[31],RZ8S(16)[30], RZ8T(16)[30],RZ8U(18)[31],RZ8V(18)[31],RZ8W(16)[30],RZ8Y(18)[31], RZ8Z(18)[31],RZ9I(18)[31],RZ9M(17)[30],RZ9P(18)[31],RZ9S(16),RZ9T(16), RZ9V(18)[31],RZ9W(16),U0T(18)[32],U8H(18)[31],U8I(18)[31],U8O(18)[31], U8P(18)[31],U8S(16)[30],U8T(16)[30],U8U(18)[31],U8V(18)[31],U8W(16)[30], U8Y(18)[31],U8Z(18)[31],U9I(18)[31],U9M(17)[30],U9P(18)[31],U9S(16), U9T(16),U9V(18)[31],U9W(16),UA0T(18)[32],UA8H(18)[31],UA8I(18)[31], UA8O(18)[31],UA8P(18)[31],UA8S(16)[30],UA8T(16)[30],UA8U(18)[31], UA8V(18)[31],UA8W(16)[30],UA8Y(18)[31],UA8Z(18)[31],UA9I(18)[31], UA9M(17)[30],UA9P(18)[31],UA9S(16),UA9T(16),UA9V(18)[31],UA9W(16), UB0T(18)[32],UB8H(18)[31],UB8I(18)[31],UB8O(18)[31],UB8P(18)[31], UB8S(16)[30],UB8T(16)[30],UB8U(18)[31],UB8V(18)[31],UB8W(16)[30], UB8Y(18)[31],UB8Z(18)[31],UB9I(18)[31],UB9M(17)[30],UB9P(18)[31],UB9S(16), UB9T(16),UB9V(18)[31],UB9W(16),UC0T(18)[32],UC8H(18)[31],UC8I(18)[31], UC8O(18)[31],UC8P(18)[31],UC8S(16)[30],UC8T(16)[30],UC8U(18)[31], UC8V(18)[31],UC8W(16)[30],UC8Y(18)[31],UC8Z(18)[31],UC9I(18)[31], UC9M(17)[30],UC9P(18)[31],UC9S(16),UC9T(16),UC9V(18)[31],UC9W(16), UD0T(18)[32],UD8H(18)[31],UD8I(18)[31],UD8O(18)[31],UD8P(18)[31], UD8S(16)[30],UD8T(16)[30],UD8U(18)[31],UD8V(18)[31],UD8W(16)[30], UD8Y(18)[31],UD8Z(18)[31],UD9I(18)[31],UD9M(17)[30],UD9P(18)[31],UD9S(16), UD9T(16),UD9V(18)[31],UD9W(16),UE0T(18)[32],UE8H(18)[31],UE8I(18)[31], UE8O(18)[31],UE8P(18)[31],UE8S(16)[30],UE8T(16)[30],UE8U(18)[31], UE8V(18)[31],UE8W(16)[30],UE8Y(18)[31],UE8Z(18)[31],UE9I(18)[31], UE9M(17)[30],UE9P(18)[31],UE9S(16),UE9T(16),UE9V(18)[31],UE9W(16), UF0T(18)[32],UF8H(18)[31],UF8I(18)[31],UF8O(18)[31],UF8P(18)[31], UF8S(16)[30],UF8T(16)[30],UF8U(18)[31],UF8V(18)[31],UF8W(16)[30], UF8Y(18)[31],UF8Z(18)[31],UF9I(18)[31],UF9M(17)[30],UF9P(18)[31],UF9S(16), UF9T(16),UF9V(18)[31],UF9W(16),UG0T(18)[32],UG8H(18)[31],UG8I(18)[31], UG8O(18)[31],UG8P(18)[31],UG8S(16)[30],UG8T(16)[30],UG8U(18)[31], UG8V(18)[31],UG8W(16)[30],UG8Y(18)[31],UG8Z(18)[31],UG9I(18)[31], UG9M(17)[30],UG9P(18)[31],UG9S(16),UG9T(16),UG9V(18)[31],UG9W(16), UH0T(18)[32],UH8H(18)[31],UH8I(18)[31],UH8O(18)[31],UH8P(18)[31], UH8S(16)[30],UH8T(16)[30],UH8U(18)[31],UH8V(18)[31],UH8W(16)[30], UH8Y(18)[31],UH8Z(18)[31],UH9I(18)[31],UH9M(17)[30],UH9P(18)[31],UH9S(16), UH9T(16),UH9V(18)[31],UH9W(16),UI0T(18)[32],UI8H(18)[31],UI8I(18)[31], UI8O(18)[31],UI8P(18)[31],UI8S(16)[30],UI8T(16)[30],UI8U(18)[31], UI8V(18)[31],UI8W(16)[30],UI8Y(18)[31],UI8Z(18)[31],UI9I(18)[31], UI9M(17)[30],UI9P(18)[31],UI9S(16),UI9T(16),UI9V(18)[31],UI9W(16),RD17CW, RL19WF,RM19WF,RN17CW,RO19WF,RQ17CW,UA0ZDY/9,R0LY/9(18)[31], R6UAE/9,R9PS/9(18)[32],RA0UF/8(17)[30],RA3ET/9(18)[31],RK9DR/N, RL5G/0(19)[34],RL5G/0/P(19)[34],RL5G/8(17)[30],RL5G/9(18)[32], RN9S(16),RO9S(16),RT9S(16),RV3DSA/0(19)[34],RX15RX(19)[34], RZ5D/9(18)[31],UE80AL(18)[31],UE80NSO(18)[31]; Uzbekistan: 17: 30: AS: 41.40: -63.97: -5.0: UK: UJ,UK,UL,UM; Kazakhstan: 17: 30: AS: 48.17: -65.18: -5.0: UN: UN,UO,UP,UQ,UN0F[31],UN0G[31],UN0J[31],UN0Q[31],UN2F[31],UN2G[31], UN2J[31],UN2Q[31],UN3F[31],UN3G[31],UN3J[31],UN3Q[31],UN4F[31],UN4G[31], UN4J[31],UN4Q[31],UN5F[31],UN5G[31],UN5J[31],UN5Q[31],UN6F[31],UN6G[31], UN6J[31],UN6Q[31],UN7F[31],UN7G[31],UN7J[31],UN7Q[31],UN8F[31],UN8G[31], UN8J[31],UN8Q[31],UN9F[31],UN9G[31],UN9J[31],UN9Q[31],UO0F[31],UO0G[31], UO0J[31],UO0Q[31],UO1F[31],UO1G[31],UO1J[31],UO1Q[31],UO2F[31],UO2G[31], UO2J[31],UO2Q[31],UO3F[31],UO3G[31],UO3J[31],UO3Q[31],UO4F[31],UO4G[31], UO4J[31],UO4Q[31],UO5F[31],UO5G[31],UO5J[31],UO5Q[31],UO6F[31],UO6G[31], UO6J[31],UO6Q[31],UO7F[31],UO7G[31],UO7J[31],UO7Q[31],UO8F[31],UO8G[31], UO8J[31],UO8Q[31],UO9F[31],UO9G[31],UO9J[31],UO9Q[31],UP0F[31],UP0G[31], UP0J[31],UP0Q[31],UP1F[31],UP1G[31],UP1J[31],UP1Q[31],UP2F[31],UP2G[31], UP2J[31],UP2Q[31],UP3F[31],UP3G[31],UP3J[31],UP3Q[31],UP4F[31],UP4G[31], UP4J[31],UP4Q[31],UP5F[31],UP5G[31],UP5J[31],UP5Q[31],UP6F[31],UP6G[31], UP6J[31],UP6Q[31],UP7F[31],UP7G[31],UP7J[31],UP7Q[31],UP8F[31],UP8G[31], UP8J[31],UP8Q[31],UP9F[31],UP9G[31],UP9J[31],UP9Q[31],UQ0F[31],UQ0G[31], UQ0J[31],UQ0Q[31],UQ1F[31],UQ1G[31],UQ1J[31],UQ1Q[31],UQ2F[31],UQ2G[31], UQ2J[31],UQ2Q[31],UQ3F[31],UQ3G[31],UQ3J[31],UQ3Q[31],UQ4F[31],UQ4G[31], UQ4J[31],UQ4Q[31],UQ5F[31],UQ5G[31],UQ5J[31],UQ5Q[31],UQ6F[31],UQ6G[31], UQ6J[31],UQ6Q[31],UQ7F[31],UQ7G[31],UQ7J[31],UQ7Q[31],UQ8F[31],UQ8G[31], UQ8J[31],UQ8Q[31],UQ9F[31],UQ9G[31],UQ9J[31],UQ9Q[31]; Ukraine: 16: 29: EU: 50.00: -30.00: -2.0: UR: EM,EN,EO,U5,UR,US,UT,UU,UV,UW,UX,UY,UZ; Antigua & Barbuda: 08: 11: NA: 17.07: 61.80: 4.0: V2: V2; Belize: 07: 11: NA: 16.97: 88.67: 6.0: V3: V3; St. Kitts & Nevis: 08: 11: NA: 17.37: 62.78: 4.0: V4: V4; Namibia: 38: 57: AF: -22.00: -17.00: -1.0: V5: V5; Micronesia: 27: 65: OC: 6.88: -158.20: -10.0: V6: V6; Marshall Islands: 31: 65: OC: 9.08: -167.33: -12.0: V7: V7; Brunei Darussalam: 28: 54: OC: 4.50: -114.60: -8.0: V8: V8; Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,CF2[4],CG2[4],CH1,CH2(2), CI0(2)[4],CI1(1)[2],CI2,CJ2[4],CK2[4],CY1,CY2(2),CZ0(2)[4],CZ1(1)[2],CZ2, VA2[4],VB2[4],VC2[4],VD1,VD2(2),VE2[4],VF0(2)[4],VF1(1)[2],VF2,VG2[4],VO1, VO2(2),VX2[4],VY0(2)[4],VY1(1)[2],VY2,XJ1,XJ2(2),XK0(2)[4],XK1(1)[2],XK2, XL2[4],XM2[4],XN1,XN2(2),XO0(2)[4],XO1(1)[2],XO2,VER20171122, CF2RC(2)[4],CF2VVV(2)[4],VA2ZM(2)[4],VE2CSI(2)[4],VE2EKA(2)[4], VE2FK[9],VE2IDX(2)[4],VE2IM(2)[4],VY0PW(4)[3]; Australia: 30: 59: OC: -23.70: -132.33: -10.0: VK: AX,VH,VI,VJ,VK,VL,VM,VN,VZ,AX4[55],VH4[55],VI4[55],VJ4[55],VK4[55], VL4[55],VM4[55],VN4[55],VZ4[55],VK5CE/8(29)[55],VK5CE/9(29)[58], VK9AR(29)[58],VK9AR/6(29)[58]; Heard Island: 39: 68: AF: -53.08: -73.50: -5.0: VK0H: VK0EK; Macquarie Island: 30: 60: OC: -54.60: -158.88: -10.0: VK0M: AX/VK0TH; Cocos (Keeling) Islands: 29: 54: OC: -12.15: -96.82: -6.5: VK9C: AX9C,AX9Y,VH9C,VH9Y,VI9C,VI9Y,VJ9C,VJ9Y,VK9C,VK9FC,VK9KC,VK9Y,VK9ZY,VL9C, VL9Y,VM9C,VM9Y,VN9C,VN9Y,VZ9C,VZ9Y,VK9FISH; Lord Howe Island: 30: 60: OC: -31.55: -159.08: -10.5: VK9L: AX9L,VH9L,VI9L,VJ9L,VK9FL,VK9L,VK9ZL,VL9L,VM9L,VN9L,VZ9L; Mellish Reef: 30: 56: OC: -17.40: -155.85: -10.0: VK9M: AX9M,VH9M,VI9M,VJ9M,VK9M,VL9M,VM9M,VN9M,VZ9M; Norfolk Island: 32: 60: OC: -29.03: -167.93: -11.5: VK9N: AX9,VH9,VI9,VJ9,VK9,VL9,VM9,VN9,VZ9; Willis Island: 30: 55: OC: -16.22: -150.02: -10.0: VK9W: AX9W,AX9Z,VH9W,VH9Z,VI9W,VI9Z,VJ9W,VJ9Z,VK9FW,VK9W,VK9Z,VL9W,VL9Z,VM9W, VM9Z,VN9W,VN9Z,VZ9W,VZ9Z; Christmas Island: 29: 54: OC: -10.48: -105.63: -7.0: VK9X: AX9X,VH9X,VI9X,VJ9X,VK9FX,VK9KX,VK9X,VL9X,VM9X,VN9X,VZ9X,VK9VKL; Anguilla: 08: 11: NA: 18.23: 63.00: 4.0: VP2E: VP2E; Montserrat: 08: 11: NA: 16.75: 62.18: 4.0: VP2M: VP2M; British Virgin Islands: 08: 11: NA: 18.33: 64.75: 4.0: VP2V: VP2V; Turks & Caicos Islands: 08: 11: NA: 21.77: 71.75: 5.0: VP5: VP5,VQ5; Pitcairn Island: 32: 63: OC: -25.07: 130.10: 8.0: VP6: VP6; Ducie Island: 32: 63: OC: -24.70: 124.80: 8.0: VP6/d: VP6DX; Falkland Islands: 13: 16: SA: -51.63: 58.72: 4.0: VP8: VP8; South Georgia Island: 13: 73: SA: -54.48: 37.08: 2.0: VP8/g: VP8CA; South Shetland Islands: 13: 73: SA: -62.08: 58.67: 4.0: VP8/h: CE9,XR9,HF0ARC,HF0POL,RI1ANF,RI1ANO; South Orkney Islands: 13: 73: SA: -60.60: 45.55: 3.0: VP8/o: LU1ZA; South Sandwich Islands: 13: 73: SA: -58.43: 26.33: 2.0: VP8/s: VP8DXU; Bermuda: 05: 11: NA: 32.32: 64.73: 4.0: VP9: VP9; Chagos Islands: 39: 41: AF: -7.32: -72.42: -6.0: VQ9: VQ9; Hong Kong: 24: 44: AS: 22.28: -114.18: -8.0: VR: VR; India: 22: 41: AS: 22.50: -77.58: -5.5: VU: 8T,8U,8V,8W,8X,8Y,AT,AU,AV,AW,VT,VU,VV,VW; Andaman & Nicobar Is.: 26: 49: AS: 12.37: -92.78: -5.5: VU4: VU4; Lakshadweep Islands: 22: 41: AS: 11.23: -72.78: -5.5: VU7: VU7; Mexico: 06: 10: NA: 21.32: 100.23: 6.0: XE: 4A,4B,4C,6D,6E,6F,6G,6H,6I,6J,XA,XB,XC,XD,XE,XF,XG,XH,XI; Revillagigedo: 06: 10: NA: 18.77: 110.97: 7.0: XF4: 4A4,4B4,4C4,6D4,6E4,6F4,6G4,6H4,6I4,6J4,XA4,XB4,XC4,XD4,XE4,XF0,XF4,XG4, XH4,XI4; Burkina Faso: 35: 46: AF: 12.00: 2.00: 0.0: XT: XT; Cambodia: 26: 49: AS: 12.93: -105.13: -7.0: XU: XU; Laos: 26: 49: AS: 18.20: -104.55: -7.0: XW: XW; Macao: 24: 44: AS: 22.10: -113.50: -8.0: XX9: XX9; Myanmar: 26: 49: AS: 20.00: -96.37: -6.5: XZ: XY,XZ; Afghanistan: 21: 40: AS: 34.70: -65.80: -4.5: YA: T6,YA; Indonesia: 28: 51: OC: -7.30: -109.88: -7.0: YB: 7A,7B,7C,7D,7E,7F,7G,7H,7I,8A,8B,8C,8D,8E,8F,8G,8H,8I,PK,PL,PM,PN,PO,YB, YC,YD,YE,YF,YG,YH,YB0[54],YB1[54],YB2[54],YB3[54],YB4[54],YB5[54],YB6[54], YB7[54],YB8[54],YC0[54],YC1[54],YC2[54],YC3[54],YC4[54],YC5[54],YC6[54], YC7[54],YC8[54],YD0[54],YD1[54],YD2[54],YD3[54],YD4[54],YD5[54],YD6[54], YD7[54],YD8[54],YE0[54],YE1[54],YE2[54],YE3[54],YE4[54],YE5[54],YE6[54], YE7[54],YE8[54],YF0[54],YF1[54],YF2[54],YF3[54],YF4[54],YF5[54],YF6[54], YF7[54],YF8[54],YG0[54],YG1[54],YG2[54],YG3[54],YG4[54],YG5[54],YG6[54], YG7[54],YG8[54],YH0[54],YH1[54],YH2[54],YH3[54],YH4[54],YH5[54],YH6[54], YH7[54],YH8[54]; Iraq: 21: 39: AS: 33.92: -42.78: -3.0: YI: HN,YI; Vanuatu: 32: 56: OC: -17.67: -168.38: -11.0: YJ: YJ; Syria: 20: 39: AS: 35.38: -38.20: -2.0: YK: 6C,YK; Latvia: 15: 29: EU: 57.03: -24.65: -2.0: YL: YL; Nicaragua: 07: 11: NA: 12.88: 85.05: 6.0: YN: H6,H7,HT,YN; Romania: 20: 28: EU: 45.78: -24.70: -2.0: YO: YO,YP,YQ,YR; El Salvador: 07: 11: NA: 14.00: 89.00: 6.0: YS: HU,YS; Serbia: 15: 28: EU: 44.00: -21.00: -1.0: YU: YT,YU,YU1BBA/J; Venezuela: 09: 12: SA: 8.00: 66.00: 4.5: YV: 4M,YV,YW,YX,YY; Aves Island: 08: 11: NA: 15.67: 63.60: 4.0: YV0: 4M0,YV0,YW0,YX0,YY0; Zimbabwe: 38: 53: AF: -18.00: -31.00: -2.0: Z2: Z2; Macedonia: 15: 28: EU: 41.60: -21.65: -1.0: Z3: Z3; Kosovo: 15: 28: EU: 42.67: -21.17: -1.0: *Z6: Z6; Republic of South Sudan: 34: 48: AF: 4.85: -31.60: -3.0: Z8: Z8; Albania: 15: 28: EU: 41.00: -20.00: -1.0: ZA: ZA; Gibraltar: 14: 37: EU: 36.15: 5.37: -1.0: ZB: ZB,ZG; UK Base Areas on Cyprus: 20: 39: AS: 35.32: -33.57: -2.0: ZC4: ZC4; St. Helena: 36: 66: AF: -15.97: 5.72: 0.0: ZD7: ZD7; Ascension Island: 36: 66: AF: -7.93: 14.37: 0.0: ZD8: ZD8; Tristan da Cunha & Gough: 38: 66: AF: -37.13: 12.30: 0.0: ZD9: ZD9; Cayman Islands: 08: 11: NA: 19.32: 81.22: 5.0: ZF: ZF; Tokelau Islands: 31: 62: OC: -9.40: 171.20: -13.0: ZK3: ZK3; New Zealand: 32: 60: OC: -41.83: -173.27: -12.0: ZL: ZK,ZL,ZL50,ZM; Chatham Islands: 32: 60: OC: -43.85: 176.48: -12.75: ZL7: ZL7,ZM7; Kermadec Islands: 32: 60: OC: -29.25: 177.92: -12.0: ZL8: ZL8,ZM8; N.Z. Subantarctic Is.: 32: 60: OC: -51.62: -167.62: -12.0: ZL9: ZL9; Paraguay: 11: 14: SA: -25.27: 57.67: 4.0: ZP: ZP; South Africa: 38: 57: AF: -29.07: -22.63: -2.0: ZS: H5,S4,S8,V9,ZR,ZS,ZT,ZU; Pr. Edward & Marion Is.: 38: 57: AF: -46.88: -37.72: -3.0: ZS8: ZR8,ZS8,ZT8,ZU8; tlf-1.4.0/share/spdxmults0000644000175000017500000000004713562576621012330 00000000000000B C D F G R J K L M O P S U W Z -end- tlf-1.4.0/share/arrlsections0000644000175000017500000000043513562576621012776 00000000000000AB AK AL AR AZ BC CO CT DE EB EMA ENY EPA EWA GA GTA IA ID IL IN KS KY LA LAX MAR MB MDC ME MI MN MO MS MT NC ND NE NFL NH NL NLI NM NNJ NNY NTX NV NT OH OK ONE ONN ONS OR ORG PAC PR QC RI SB SC SCV SD SDG SF SFL SJV SK SNJ STX SV TN UT VA VI VT WCF WI WMA WNY WPA WTX WV WWA WY -end- tlf-1.4.0/install-sh0000755000175000017500000003601013562576653011250 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2018-03-11.20; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # 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. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # Note that $RANDOM variable is not portable (e.g. dash); Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p' feature. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # 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 $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: tlf-1.4.0/test-driver0000755000175000017500000001104213562576653011440 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-2018 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: tlf-1.4.0/configure0000755000175000017500000102003313562576652011151 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Tlf 1.4.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: tlf-devel@nongnu.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Tlf' PACKAGE_TARNAME='tlf' PACKAGE_VERSION='1.4.0' PACKAGE_STRING='Tlf 1.4.0' PACKAGE_BUGREPORT='tlf-devel@nongnu.org' PACKAGE_URL='https://github.com/Tlf/tlf' ac_unique_file="src/tlf.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS AM_CFLAGS LIBXMLRPC_UTIL_LIB LIBXMLRPC_CLIENT_LIB LIBXMLRPC_LIB HAMLIB_LIBS HAMLIB_CFLAGS PANEL_LIBS CURSES_CFLAGS CURSES_LIBS CMOCKA_LIBS CMOCKA_CFLAGS GLIB_COMPILE_RESOURCES GLIB_MKENUMS GOBJECT_QUERY GLIB_GENMARSHAL GLIB_LIBS GLIB_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC ax_pthread_config host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBM_LIB EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_glibtest with_ncurses with_ncursesw enable_fldigi_xmlrpc ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GLIB_CFLAGS GLIB_LIBS GLIB_GENMARSHAL GOBJECT_QUERY GLIB_MKENUMS GLIB_COMPILE_RESOURCES CMOCKA_CFLAGS CMOCKA_LIBS CURSES_LIBS CURSES_CFLAGS PANEL_LIBS HAMLIB_CFLAGS HAMLIB_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= 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=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -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_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$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 ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$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 | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$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 ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) 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 | -n) 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 ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$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_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=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 ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # 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 the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` 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 test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # 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 <<_ACEOF \`configure' configures Tlf 1.4.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/tlf] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --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 System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Tlf 1.4.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-glibtest do not try to compile and run a test GLIB program --enable-fldigi-xmlrpc Add support for XMLRPC to read Fldigi's carrier (usually in RTTY/DIGIMODE) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-ncurses force the use of Ncurses or NcursesW --without-ncursesw do not use NcursesW (wide character support) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config GLIB_GENMARSHAL value of glib_genmarshal for glib-2.0, overriding pkg-config GOBJECT_QUERY value of gobject_query for glib-2.0, overriding pkg-config GLIB_MKENUMS value of glib_mkenums for glib-2.0, overriding pkg-config GLIB_COMPILE_RESOURCES value of glib_compile_resources for gio-2.0, overriding pkg-config CMOCKA_CFLAGS C compiler flags for CMOCKA, overriding pkg-config CMOCKA_LIBS linker flags for CMOCKA, overriding pkg-config CURSES_LIBS linker library for Curses, e.g. -lcurses CURSES_CFLAGS preprocessor flags for Curses, e.g. -I/usr/include/ncursesw PANEL_LIBS linker library for Curses Panel, e.g. -lpanel HAMLIB_CFLAGS C compiler flags for HAMLIB, overriding pkg-config HAMLIB_LIBS linker flags for HAMLIB, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . Tlf home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Tlf configure 1.4.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ----------------------------------- ## ## Report this to tlf-devel@nongnu.org ## ## ----------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* 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_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Tlf $as_me 1.4.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' 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 elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # 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 # AmigaOS /C/install, which installs bootblocks on floppy discs # 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" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /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 for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir 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. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&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}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $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". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file 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" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='tlf' VERSION='1.4.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' # Checks for programs. DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 $as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_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 $# != 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 ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; 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; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : fi # Checks for header files. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #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)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in arpa/inet.h fcntl.h netdb.h netinet/in.h \ sys/ioctl.h sys/socket.h sys/time.h syslog.h termios.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi # Checks for library functions. for ac_func in bzero floor ftruncate gethostbyname memset mkfifo putenv \ select socket sqrt strcasecmp strchr strcspn strdup strpbrk strspn \ strstr do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Checks for libraries. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atan in -lm" >&5 $as_echo_n "checking for atan in -lm... " >&6; } if ${ac_cv_lib_m_atan+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char atan (); int main () { return atan (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_atan=yes else ac_cv_lib_m_atan=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_atan" >&5 $as_echo "$ac_cv_lib_m_atan" >&6; } if test "x$ac_cv_lib_m_atan" = xyes; then : $as_echo "#define HAVE_LIBM 1" >>confdefs.h LIBM_LIB=-lm else as_fn_error $? "m library not found..." "$LINENO" 5 fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5 $as_echo_n "checking if compiler needs -Werror to reject unknown flags... " >&6; } save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void); int main () { foo() ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else ax_pthread_extra_flags= { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ax_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 $as_echo "$ax_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; } int main () { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr = $attr; return attr /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : attr_name=$attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 $as_echo "$attr_name" >&6; } if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $attr_name _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag" >&5 $as_echo "$flag" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 $as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int i = PTHREAD_PRIO_INHERIT; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_PRIO_INHERIT=yes else ax_cv_PTHREAD_PRIO_INHERIT=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 $as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then : $as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: compile with *_r variant if test "x$GCC" != xyes; then case $host_os in aix*) case "x/$CC" in #( x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : if as_fn_executable_p ${CC}_r; then : PTHREAD_CC="${CC}_r" fi ;; #( *) : for ac_prog in ${CC}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" ;; esac ;; #( *) : ;; esac ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h : else ax_pthread_ok=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ##----------------------------------## ## Third party library tests follow ## ##----------------------------------## if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi if test "x$PKG_CONFIG" = x; then : as_fn_error $? "pkg-config is required to configure $PACKAGE_NAME" "$LINENO" 5 fi # Check whether --enable-glibtest was given. if test "${enable_glibtest+set}" = set; then : enableval=$enable_glibtest; else enable_glibtest=yes fi min_glib_version=2.0.0 pkg_config_args="glib-2.0 >= $min_glib_version" for module in . do case "$module" in gmodule) pkg_config_args="$pkg_config_args gmodule-2.0" ;; gmodule-no-export) pkg_config_args="$pkg_config_args gmodule-no-export-2.0" ;; gobject) pkg_config_args="$pkg_config_args gobject-2.0" ;; gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; gio*) pkg_config_args="$pkg_config_args $module-2.0" ;; esac done if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi no_glib="" if test "x$PKG_CONFIG" = x ; then no_glib=yes PKG_CONFIG=no fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $pkg_config_args" >&5 $as_echo_n "checking for $pkg_config_args... " >&6; } if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pkg_config_args\""; } >&5 ($PKG_CONFIG --exists --print-errors "$pkg_config_args") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "$pkg_config_args" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLIB_LIBS"; then pkg_cv_GLIB_LIBS="$GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pkg_config_args\""; } >&5 ($PKG_CONFIG --exists --print-errors "$pkg_config_args") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "$pkg_config_args" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$pkg_config_args" 2>&1` else GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$pkg_config_args" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLIB_PKG_ERRORS" >&5 : elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : fi if test -n "$GLIB_GENMARSHAL"; then pkg_cv_GLIB_GENMARSHAL="$GLIB_GENMARSHAL" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_GENMARSHAL=`$PKG_CONFIG --variable="glib_genmarshal" "glib-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi GLIB_GENMARSHAL=$pkg_cv_GLIB_GENMARSHAL if test "x$GLIB_GENMARSHAL" = x""; then : fi if test -n "$GOBJECT_QUERY"; then pkg_cv_GOBJECT_QUERY="$GOBJECT_QUERY" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOBJECT_QUERY=`$PKG_CONFIG --variable="gobject_query" "glib-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi GOBJECT_QUERY=$pkg_cv_GOBJECT_QUERY if test "x$GOBJECT_QUERY" = x""; then : fi if test -n "$GLIB_MKENUMS"; then pkg_cv_GLIB_MKENUMS="$GLIB_MKENUMS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_MKENUMS=`$PKG_CONFIG --variable="glib_mkenums" "glib-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi GLIB_MKENUMS=$pkg_cv_GLIB_MKENUMS if test "x$GLIB_MKENUMS" = x""; then : fi if test -n "$GLIB_COMPILE_RESOURCES"; then pkg_cv_GLIB_COMPILE_RESOURCES="$GLIB_COMPILE_RESOURCES" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gio-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable="glib_compile_resources" "gio-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi GLIB_COMPILE_RESOURCES=$pkg_cv_GLIB_COMPILE_RESOURCES if test "x$GLIB_COMPILE_RESOURCES" = x""; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB - version >= $min_glib_version" >&5 $as_echo_n "checking for GLIB - version >= $min_glib_version... " >&6; } if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" enable_glibtest=no fi if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then : else no_glib=yes fi fi if test x"$no_glib" = x ; then glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_glibtest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$GLIB_LIBS $LIBS" rm -f conf.glibtest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (void) { unsigned int major, minor, micro; fclose (fopen ("conf.glibtest", "w")); if (sscanf("$min_glib_version", "%u.%u.%u", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_glib_version"); exit(1); } if ((glib_major_version != $glib_config_major_version) || (glib_minor_version != $glib_config_minor_version) || (glib_micro_version != $glib_config_micro_version)) { printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, glib_major_version, glib_minor_version, glib_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GLib. 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 pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((glib_major_version != GLIB_MAJOR_VERSION) || (glib_minor_version != GLIB_MINOR_VERSION) || (glib_micro_version != GLIB_MICRO_VERSION)) { printf("*** GLIB header files (version %d.%d.%d) do not match\n", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", glib_major_version, glib_minor_version, glib_micro_version); } else { if ((glib_major_version > major) || ((glib_major_version == major) && (glib_minor_version > minor)) || ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GLIB (%u.%u.%u) was found.\n", glib_major_version, glib_minor_version, glib_micro_version); printf("*** You need a version of GLIB newer than %u.%u.%u. The latest version of\n", major, minor, micro); printf("*** GLIB 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 pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-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; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_glib=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_glib" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&5 $as_echo "yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://www.freedesktop.org/software/pkgconfig/" else if test -f conf.glibtest ; then : else echo "*** Could not run GLIB test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$LIBS $GLIB_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GLIB or finding the wrong" echo "*** version of GLIB. If it is not finding GLIB, 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" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GLIB is incorrectly installed." fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GLIB_CFLAGS="" GLIB_LIBS="" GLIB_GENMARSHAL="" GOBJECT_QUERY="" GLIB_MKENUMS="" GLIB_COMPILE_RESOURCES="" : fi rm -f conf.glibtest have_cmocka="yes" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmocka >= 1.0.1" >&5 $as_echo_n "checking for cmocka >= 1.0.1... " >&6; } if test -n "$CMOCKA_CFLAGS"; then pkg_cv_CMOCKA_CFLAGS="$CMOCKA_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cmocka >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "cmocka >= 1.0.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CMOCKA_CFLAGS=`$PKG_CONFIG --cflags "cmocka >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CMOCKA_LIBS"; then pkg_cv_CMOCKA_LIBS="$CMOCKA_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cmocka >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "cmocka >= 1.0.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CMOCKA_LIBS=`$PKG_CONFIG --libs "cmocka >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then CMOCKA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cmocka >= 1.0.1" 2>&1` else CMOCKA_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cmocka >= 1.0.1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CMOCKA_PKG_ERRORS" >&5 have_cmocka="no" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_cmocka="no" else CMOCKA_CFLAGS=$pkg_cv_CMOCKA_CFLAGS CMOCKA_LIBS=$pkg_cv_CMOCKA_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi ac_fn_c_check_header_mongrel "$LINENO" "setjmp.h" "ac_cv_header_setjmp_h" "$ac_includes_default" if test "x$ac_cv_header_setjmp_h" = xyes; then : fi ac_fn_c_check_header_compile "$LINENO" "cmocka.h" "ac_cv_header_cmocka_h" "#include #include #include " if test "x$ac_cv_header_cmocka_h" = xyes; then : else have_cmocka="no" fi if test "${have_cmocka}" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: you will need cmocka for running unit tests" >&5 $as_echo "$as_me: WARNING: you will need cmocka for running unit tests" >&2;} fi # ncurses and panel required, if not found exit with error message. # Check whether --with-ncurses was given. if test "${with_ncurses+set}" = set; then : withval=$with_ncurses; else with_ncurses=check fi # Check whether --with-ncursesw was given. if test "${with_ncursesw+set}" = set; then : withval=$with_ncursesw; else with_ncursesw=check fi ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS if test "x$with_ncurses" = xyes || test "x$with_ncursesw" = xyes; then : ax_with_plaincurses=no else ax_with_plaincurses=check fi ax_cv_curses_which=no # Test for NcursesW if test "x$CURSES_LIBS" = x && test "x$with_ncursesw" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw via pkg-config" >&5 $as_echo_n "checking for ncursesw via pkg-config... " >&6; } if test -n "$_ax_cv_ncursesw_libs"; then pkg_cv__ax_cv_ncursesw_libs="$_ax_cv_ncursesw_libs" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncursesw_libs=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$_ax_cv_ncursesw_cppflags"; then pkg_cv__ax_cv_ncursesw_cppflags="$_ax_cv_ncursesw_cppflags" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncursesw_cppflags=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } # No suitable .pc file found, have to find flags via fallback { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw via fallback" >&5 $as_echo_n "checking for ncursesw via fallback... " >&6; } if ${ax_cv_ncursesw+:} false; then : $as_echo_n "(cached) " >&6 else $as_echo pkg_cv__ax_cv_ncursesw_libs="-lncursesw" pkg_cv__ax_cv_ncursesw_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncursesw_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncursesw_cppflags" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr() with $pkg_cv__ax_cv_ncursesw_libs" >&5 $as_echo_n "checking for initscr() with $pkg_cv__ax_cv_ncursesw_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs" >&5 $as_echo_n "checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nodelay (); int main () { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_ncursesw=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } pkg_cv__ax_cv_ncursesw_libs="$pkg_cv__ax_cv_ncursesw_libs -ltinfow" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncursesw_libs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs" >&5 $as_echo_n "checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nodelay (); int main () { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_ncursesw=yes else ax_cv_ncursesw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else ax_cv_ncursesw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_ncursesw" >&5 $as_echo "$ax_cv_ncursesw" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # Found .pc file, using its information LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncursesw_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncursesw_cppflags" ax_cv_ncursesw=yes fi if test "x$ax_cv_ncursesw" = xno && test "x$with_ncursesw" = xyes; then : as_fn_error $? "--with-ncursesw specified but could not find NcursesW library" "$LINENO" 5 fi if test "x$ax_cv_ncursesw" = xyes; then : ax_cv_curses=yes ax_cv_curses_which=ncursesw CURSES_LIBS="$pkg_cv__ax_cv_ncursesw_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncursesw_cppflags" $as_echo "#define HAVE_NCURSESW 1" >>confdefs.h $as_echo "#define HAVE_CURSES 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncursesw/curses.h" >&5 $as_echo_n "checking for working ncursesw/curses.h... " >&6; } if ${ax_cv_header_ncursesw_curses_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncursesw_curses_h=yes else ax_cv_header_ncursesw_curses_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncursesw_curses_h" >&5 $as_echo "$ax_cv_header_ncursesw_curses_h" >&6; } if test "x$ax_cv_header_ncursesw_curses_h" = xyes; then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSESW_CURSES_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncursesw.h" >&5 $as_echo_n "checking for working ncursesw.h... " >&6; } if ${ax_cv_header_ncursesw_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncursesw_h=yes else ax_cv_header_ncursesw_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncursesw_h" >&5 $as_echo "$ax_cv_header_ncursesw_h" >&6; } if test "x$ax_cv_header_ncursesw_h" = xyes; then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSESW_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncurses.h" >&5 $as_echo_n "checking for working ncurses.h... " >&6; } if ${ax_cv_header_ncurses_h_with_ncursesw+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncurses_h_with_ncursesw=yes else ax_cv_header_ncurses_h_with_ncursesw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_h_with_ncursesw" >&5 $as_echo "$ax_cv_header_ncurses_h_with_ncursesw" >&6; } if test "x$ax_cv_header_ncurses_h_with_ncursesw" = xyes; then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSES_H 1" >>confdefs.h fi if test "x$ax_cv_header_ncursesw_curses_h" = xno && test "x$ax_cv_header_ncursesw_h" = xno && test "x$ax_cv_header_ncurses_h_with_ncursesw" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h" >&5 $as_echo "$as_me: WARNING: could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h" >&2;} fi fi fi unset pkg_cv__ax_cv_ncursesw_libs unset pkg_cv__ax_cv_ncursesw_cppflags # Test for Ncurses if test "x$CURSES_LIBS" = x && test "x$with_ncurses" != xno && test "x$ax_cv_curses_which" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncurses via pkg-config" >&5 $as_echo_n "checking for ncurses via pkg-config... " >&6; } if test -n "$_ax_cv_ncurses_libs"; then pkg_cv__ax_cv_ncurses_libs="$_ax_cv_ncurses_libs" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncurses_libs=`$PKG_CONFIG --libs "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$_ax_cv_ncurses_cppflags"; then pkg_cv__ax_cv_ncurses_cppflags="$_ax_cv_ncurses_cppflags" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncurses_cppflags=`$PKG_CONFIG --cflags "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } # No suitable .pc file found, have to find flags via fallback { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncurses via fallback" >&5 $as_echo_n "checking for ncurses via fallback... " >&6; } if ${ax_cv_ncurses+:} false; then : $as_echo_n "(cached) " >&6 else $as_echo pkg_cv__ax_cv_ncurses_libs="-lncurses" pkg_cv__ax_cv_ncurses_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncurses_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncurses_cppflags" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr() with $pkg_cv__ax_cv_ncurses_libs" >&5 $as_echo_n "checking for initscr() with $pkg_cv__ax_cv_ncurses_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs" >&5 $as_echo_n "checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nodelay (); int main () { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_ncurses=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } pkg_cv__ax_cv_ncurses_libs="$pkg_cv__ax_cv_ncurses_libs -ltinfo" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncurses_libs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs" >&5 $as_echo_n "checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nodelay (); int main () { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_ncurses=yes else ax_cv_ncurses=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else ax_cv_ncurses=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_ncurses" >&5 $as_echo "$ax_cv_ncurses" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # Found .pc file, using its information LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncurses_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncurses_cppflags" ax_cv_ncurses=yes fi if test "x$ax_cv_ncurses" = xno && test "x$with_ncurses" = xyes; then : as_fn_error $? "--with-ncurses specified but could not find Ncurses library" "$LINENO" 5 fi if test "x$ax_cv_ncurses" = xyes; then : ax_cv_curses=yes ax_cv_curses_which=ncurses CURSES_LIBS="$pkg_cv__ax_cv_ncurses_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncurses_cppflags" $as_echo "#define HAVE_NCURSES 1" >>confdefs.h $as_echo "#define HAVE_CURSES 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncurses/curses.h" >&5 $as_echo_n "checking for working ncurses/curses.h... " >&6; } if ${ax_cv_header_ncurses_curses_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncurses_curses_h=yes else ax_cv_header_ncurses_curses_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_curses_h" >&5 $as_echo "$ax_cv_header_ncurses_curses_h" >&6; } if test "x$ax_cv_header_ncurses_curses_h" = xyes; then : ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSES_CURSES_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncurses.h" >&5 $as_echo_n "checking for working ncurses.h... " >&6; } if ${ax_cv_header_ncurses_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncurses_h=yes else ax_cv_header_ncurses_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_h" >&5 $as_echo "$ax_cv_header_ncurses_h" >&6; } if test "x$ax_cv_header_ncurses_h" = xyes; then : ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSES_H 1" >>confdefs.h fi if test "x$ax_cv_header_ncurses_curses_h" = xno && test "x$ax_cv_header_ncurses_h" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find a working ncurses/curses.h or ncurses.h" >&5 $as_echo "$as_me: WARNING: could not find a working ncurses/curses.h or ncurses.h" >&2;} fi fi fi unset pkg_cv__ax_cv_ncurses_libs unset pkg_cv__ax_cv_ncurses_cppflags # Test for plain Curses (or if CURSES_LIBS was set by user) if test "x$with_plaincurses" != xno && test "x$ax_cv_curses_which" = xno; then : if test "x$CURSES_LIBS" != x; then : LIBS="$ax_saved_LIBS $CURSES_LIBS" else LIBS="$ax_saved_LIBS -lcurses" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses library" >&5 $as_echo_n "checking for Curses library... " >&6; } if ${ax_cv_plaincurses+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_plaincurses=yes else ax_cv_plaincurses=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses" >&5 $as_echo "$ax_cv_plaincurses" >&6; } if test "x$ax_cv_plaincurses" = xyes; then : ax_cv_curses=yes ax_cv_curses_which=plaincurses if test "x$CURSES_LIBS" = x; then : CURSES_LIBS="-lcurses" fi $as_echo "#define HAVE_CURSES 1" >>confdefs.h # Check for base conformance (and header file) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working curses.h" >&5 $as_echo_n "checking for working curses.h... " >&6; } if ${ax_cv_header_curses_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; initscr(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_curses_h=yes else ax_cv_header_curses_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_curses_h" >&5 $as_echo "$ax_cv_header_curses_h" >&6; } if test "x$ax_cv_header_curses_h" = xyes; then : $as_echo "#define HAVE_CURSES_H 1" >>confdefs.h # Check for X/Open Enhanced conformance { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X/Open Enhanced Curses conformance" >&5 $as_echo_n "checking for X/Open Enhanced Curses conformance... " >&6; } if ${ax_cv_plaincurses_enhanced+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifndef _XOPEN_CURSES #error "this Curses library is not enhanced" "this Curses library is not enhanced" #endif int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_plaincurses_enhanced=yes else ax_cv_plaincurses_enhanced=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses_enhanced" >&5 $as_echo "$ax_cv_plaincurses_enhanced" >&6; } if test "x$ax_cv_plaincurses_enhanced" = xyes; then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes $as_echo "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h fi # Check for color functions { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses color functions" >&5 $as_echo_n "checking for Curses color functions... " >&6; } if ${ax_cv_plaincurses_color+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_plaincurses_color=yes else ax_cv_plaincurses_color=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses_color" >&5 $as_echo "$ax_cv_plaincurses_color" >&6; } if test "x$ax_cv_plaincurses_color" = xyes; then : ax_cv_curses_color=yes $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h fi # Check for obsolete functions { $as_echo "$as_me:${as_lineno-$LINENO}: checking for obsolete Curses functions" >&5 $as_echo_n "checking for obsolete Curses functions... " >&6; } if ${ax_cv_plaincurses_obsolete+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_plaincurses_obsolete=yes else ax_cv_plaincurses_obsolete=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses_obsolete" >&5 $as_echo "$ax_cv_plaincurses_obsolete" >&6; } if test "x$ax_cv_plaincurses_obsolete" = xyes; then : ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h fi fi if test "x$ax_cv_header_curses_h" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find a working curses.h" >&5 $as_echo "$as_me: WARNING: could not find a working curses.h" >&2;} fi fi fi if test "x$ax_cv_curses" != xyes; then : ax_cv_curses=no fi if test "x$ax_cv_curses_enhanced" != xyes; then : ax_cv_curses_enhanced=no fi if test "x$ax_cv_curses_color" != xyes; then : ax_cv_curses_color=no fi if test "x$ax_cv_curses_obsolete" != xyes; then : ax_cv_curses_obsolete=no fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS if test "x$ax_cv_curses" != xyes || test "x$ax_cv_curses_color" != xyes; then : as_fn_error $? "a Curses library with color support is required" "$LINENO" 5 fi if test "x$PANEL_LIBS" != x; then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with panel.h" >&5 $as_echo_n "checking for Curses Panel library with panel.h... " >&6; } if ${ax_cv_header_panel_h+:} false; then : $as_echo_n "(cached) " >&6 else LIBS="$ax_saved_LIBS $PANEL_LIBS $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_panel_h=yes else ax_cv_header_panel_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_panel_h" >&5 $as_echo "$ax_cv_header_panel_h" >&6; } if test "x$ax_cv_header_panel_h" = xyes; then : ax_cv_panel=yes $as_echo "#define HAVE_PANEL 1" >>confdefs.h $as_echo "#define HAVE_PANEL_H 1" >>confdefs.h else if test "x$ax_cv_panel" = xyes; then : else ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS else if test "x$ax_cv_curses_which" = xncursesw; then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with ncursesw/panel.h" >&5 $as_echo_n "checking for Curses Panel library with ncursesw/panel.h... " >&6; } if ${ax_cv_header_ncursesw_panel_h+:} false; then : $as_echo_n "(cached) " >&6 else LIBS="$ax_saved_LIBS -lpanelw $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncursesw_panel_h=yes else ax_cv_header_ncursesw_panel_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncursesw_panel_h" >&5 $as_echo "$ax_cv_header_ncursesw_panel_h" >&6; } if test "x$ax_cv_header_ncursesw_panel_h" = xyes; then : ax_cv_panel=yes PANEL_LIBS="-lpanelw" $as_echo "#define HAVE_PANEL 1" >>confdefs.h $as_echo "#define HAVE_NCURSESW_PANEL_H 1" >>confdefs.h else if test "x$ax_cv_panel" = xyes; then : else ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS if test x$ax_cv_panel != "xyes"; then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with panel.h" >&5 $as_echo_n "checking for Curses Panel library with panel.h... " >&6; } if ${ax_cv_header_panel_h+:} false; then : $as_echo_n "(cached) " >&6 else LIBS="$ax_saved_LIBS -lpanel $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_panel_h=yes else ax_cv_header_panel_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_panel_h" >&5 $as_echo "$ax_cv_header_panel_h" >&6; } if test "x$ax_cv_header_panel_h" = xyes; then : ax_cv_panel=yes PANEL_LIBS="-lpanel" $as_echo "#define HAVE_PANEL 1" >>confdefs.h $as_echo "#define HAVE_PANEL_H 1" >>confdefs.h else if test "x$ax_cv_panel" = xyes; then : else ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS fi elif test "x$ax_cv_curses_which" = xncurses; then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with panel.h" >&5 $as_echo_n "checking for Curses Panel library with panel.h... " >&6; } if ${ax_cv_header_panel_h+:} false; then : $as_echo_n "(cached) " >&6 else LIBS="$ax_saved_LIBS -lpanel $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_panel_h=yes else ax_cv_header_panel_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_panel_h" >&5 $as_echo "$ax_cv_header_panel_h" >&6; } if test "x$ax_cv_header_panel_h" = xyes; then : ax_cv_panel=yes PANEL_LIBS="-lpanel" $as_echo "#define HAVE_PANEL 1" >>confdefs.h $as_echo "#define HAVE_PANEL_H 1" >>confdefs.h else if test "x$ax_cv_panel" = xyes; then : else ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS if test x$ax_cv_panel != "xyes"; then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with ncurses/panel.h" >&5 $as_echo_n "checking for Curses Panel library with ncurses/panel.h... " >&6; } if ${ax_cv_header_ncurses_panel_h+:} false; then : $as_echo_n "(cached) " >&6 else LIBS="$ax_saved_LIBS -lpanel $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncurses_panel_h=yes else ax_cv_header_ncurses_panel_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_panel_h" >&5 $as_echo "$ax_cv_header_ncurses_panel_h" >&6; } if test "x$ax_cv_header_ncurses_panel_h" = xyes; then : ax_cv_panel=yes PANEL_LIBS="-lpanel" $as_echo "#define HAVE_PANEL 1" >>confdefs.h $as_echo "#define HAVE_NCURSES_PANEL_H 1" >>confdefs.h else if test "x$ax_cv_panel" = xyes; then : else ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS fi elif test "x$ax_cv_curses_which" = xplaincurses; then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with panel.h" >&5 $as_echo_n "checking for Curses Panel library with panel.h... " >&6; } if ${ax_cv_header_panel_h+:} false; then : $as_echo_n "(cached) " >&6 else LIBS="$ax_saved_LIBS -lpanel $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_panel_h=yes else ax_cv_header_panel_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_panel_h" >&5 $as_echo "$ax_cv_header_panel_h" >&6; } if test "x$ax_cv_header_panel_h" = xyes; then : ax_cv_panel=yes PANEL_LIBS="-lpanel" $as_echo "#define HAVE_PANEL 1" >>confdefs.h $as_echo "#define HAVE_PANEL_H 1" >>confdefs.h else if test "x$ax_cv_panel" = xyes; then : else ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS fi fi if test "x$ax_cv_panel" != xyes; then : as_fn_error $? "the Curses Panel library is required" "$LINENO" 5 fi hamlib_modules="hamlib >= 1.2.8" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $hamlib_modules" >&5 $as_echo_n "checking for $hamlib_modules... " >&6; } if test -n "$HAMLIB_CFLAGS"; then pkg_cv_HAMLIB_CFLAGS="$HAMLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$hamlib_modules\""; } >&5 ($PKG_CONFIG --exists --print-errors "$hamlib_modules") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_HAMLIB_CFLAGS=`$PKG_CONFIG --cflags "$hamlib_modules" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$HAMLIB_LIBS"; then pkg_cv_HAMLIB_LIBS="$HAMLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$hamlib_modules\""; } >&5 ($PKG_CONFIG --exists --print-errors "$hamlib_modules") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_HAMLIB_LIBS=`$PKG_CONFIG --libs "$hamlib_modules" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then HAMLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$hamlib_modules" 2>&1` else HAMLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$hamlib_modules" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$HAMLIB_PKG_ERRORS" >&5 as_fn_error $? "Hamradio control libraries 1.2.8 or later not found..." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Hamradio control libraries 1.2.8 or later not found..." "$LINENO" 5 else HAMLIB_CFLAGS=$pkg_cv_HAMLIB_CFLAGS HAMLIB_LIBS=$pkg_cv_HAMLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi tlf_saved_LIBS=$LIBS LIBS="$LIBS $HAMLIB_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rig_open in -lhamlib" >&5 $as_echo_n "checking for rig_open in -lhamlib... " >&6; } if ${ac_cv_lib_hamlib_rig_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lhamlib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rig_open (); int main () { return rig_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_hamlib_rig_open=yes else ac_cv_lib_hamlib_rig_open=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hamlib_rig_open" >&5 $as_echo "$ac_cv_lib_hamlib_rig_open" >&6; } if test "x$ac_cv_lib_hamlib_rig_open" = xyes; then : $as_echo "#define HAVE_LIBHAMLIB 1" >>confdefs.h else as_fn_error $? "Hamradio control libraries not found!" "$LINENO" 5 fi LIBS=$tlf_saved_LIBS tlf_saved_CFLAGS=$CFLAGS tlf_saved_CPPFLAGS=$CPPFLAGS CFLAGS="$CFLAGS $HAMLIB_CFLAGS" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags-only-I hamlib 2>&1`" for ac_header in hamlib/rig.h do : ac_fn_c_check_header_mongrel "$LINENO" "hamlib/rig.h" "ac_cv_header_hamlib_rig_h" "$ac_includes_default" if test "x$ac_cv_header_hamlib_rig_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_HAMLIB_RIG_H 1 _ACEOF else as_fn_error $? "Hamlib headers not found..." "$LINENO" 5 fi done CPPFLAGS=$tlf_saved_CPPFLAGS CFLAGS=$tlf_saved_CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build Fldigi XML RPC support" >&5 $as_echo_n "checking whether to build Fldigi XML RPC support... " >&6; } # Check whether --enable-fldigi-xmlrpc was given. if test "${enable_fldigi_xmlrpc+set}" = set; then : enableval=$enable_fldigi_xmlrpc; wantfldigixmlrpc=true else wantfldigixmlrpc=false fi if test "x$wantfldigixmlrpc" = xtrue; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlrpc_read_int in -lxmlrpc" >&5 $as_echo_n "checking for xmlrpc_read_int in -lxmlrpc... " >&6; } if ${ac_cv_lib_xmlrpc_xmlrpc_read_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxmlrpc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char xmlrpc_read_int (); int main () { return xmlrpc_read_int (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xmlrpc_xmlrpc_read_int=yes else ac_cv_lib_xmlrpc_xmlrpc_read_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xmlrpc_xmlrpc_read_int" >&5 $as_echo "$ac_cv_lib_xmlrpc_xmlrpc_read_int" >&6; } if test "x$ac_cv_lib_xmlrpc_xmlrpc_read_int" = xyes; then : $as_echo "#define HAVE_LIBXMLRPC 1" >>confdefs.h LIBXMLRPC_LIB=-lxmlrpc else as_fn_error $? "xmlrpc library not found..." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlrpc_client_cleanup in -lxmlrpc_client" >&5 $as_echo_n "checking for xmlrpc_client_cleanup in -lxmlrpc_client... " >&6; } if ${ac_cv_lib_xmlrpc_client_xmlrpc_client_cleanup+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxmlrpc_client $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char xmlrpc_client_cleanup (); int main () { return xmlrpc_client_cleanup (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xmlrpc_client_xmlrpc_client_cleanup=yes else ac_cv_lib_xmlrpc_client_xmlrpc_client_cleanup=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xmlrpc_client_xmlrpc_client_cleanup" >&5 $as_echo "$ac_cv_lib_xmlrpc_client_xmlrpc_client_cleanup" >&6; } if test "x$ac_cv_lib_xmlrpc_client_xmlrpc_client_cleanup" = xyes; then : $as_echo "#define HAVE_LIBXMLRPC_CLIENT 1" >>confdefs.h LIBXMLRPC_CLIENT_LIB=-lxmlrpc_client else as_fn_error $? "xmlrpc-client library not found..." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlrpc_env_init in -lxmlrpc_util" >&5 $as_echo_n "checking for xmlrpc_env_init in -lxmlrpc_util... " >&6; } if ${ac_cv_lib_xmlrpc_util_xmlrpc_env_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxmlrpc_util $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char xmlrpc_env_init (); int main () { return xmlrpc_env_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xmlrpc_util_xmlrpc_env_init=yes else ac_cv_lib_xmlrpc_util_xmlrpc_env_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xmlrpc_util_xmlrpc_env_init" >&5 $as_echo "$ac_cv_lib_xmlrpc_util_xmlrpc_env_init" >&6; } if test "x$ac_cv_lib_xmlrpc_util_xmlrpc_env_init" = xyes; then : $as_echo "#define HAVE_LIBXMLRPC_UTIL 1" >>confdefs.h LIBXMLRPC_UTIL_LIB=-lxmlrpc_util else as_fn_error $? "xmlrpc-util library not found..." "$LINENO" 5 fi for ac_header in xmlrpc-c/base.h do : ac_fn_c_check_header_mongrel "$LINENO" "xmlrpc-c/base.h" "ac_cv_header_xmlrpc_c_base_h" "$ac_includes_default" if test "x$ac_cv_header_xmlrpc_c_base_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_XMLRPC_C_BASE_H 1 _ACEOF else as_fn_error $? "xmlrpc-c/base.h header not found..." "$LINENO" 5 fi done for ac_header in xmlrpc-c/client.h do : ac_fn_c_check_header_mongrel "$LINENO" "xmlrpc-c/client.h" "ac_cv_header_xmlrpc_c_client_h" "$ac_includes_default" if test "x$ac_cv_header_xmlrpc_c_client_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_XMLRPC_C_CLIENT_H 1 _ACEOF else as_fn_error $? "xmlrpc-c/client.h header not found..." "$LINENO" 5 fi done else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # macros/ax_cflags_warn_all.m4 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking AM_CFLAGS for maximum warnings" >&5 $as_echo_n "checking AM_CFLAGS for maximum warnings... " >&6; } if ${ac_cv_cflags_warn_all+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_cflags_warn_all="no, unknown" ac_save_CFLAGS="$CFLAGS" for ac_arg in "-warn all % -warn all" "-pedantic % -Wall" "-xstrconst % -v" "-std1 % -verbose -w0 -warnprotos" "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" "-ansi -ansiE % -fullwarn" "+ESlit % +w1" "-Xc % -pvctl,fullmsg" "-h conform % -h msglevel 2" # do CFLAGS="$ac_save_CFLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cflags_warn_all=`echo $ac_arg | sed -e 's,.*% *,,'` ; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done CFLAGS="$ac_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags_warn_all" >&5 $as_echo "$ac_cv_cflags_warn_all" >&6; } case ".$ac_cv_cflags_warn_all" in .ok|.ok,*) ;; .|.no|.no,*) ;; *) if ${AM_CFLAGS+:} false; then : case " $AM_CFLAGS " in #( *" $ac_cv_cflags_warn_all "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : AM_CFLAGS already contains \$ac_cv_cflags_warn_all"; } >&5 (: AM_CFLAGS already contains $ac_cv_cflags_warn_all) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append AM_CFLAGS " $ac_cv_cflags_warn_all" { { $as_echo "$as_me:${as_lineno-$LINENO}: : AM_CFLAGS=\"\$AM_CFLAGS\""; } >&5 (: AM_CFLAGS="$AM_CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else AM_CFLAGS=$ac_cv_cflags_warn_all { { $as_echo "$as_me:${as_lineno-$LINENO}: : AM_CFLAGS=\"\$AM_CFLAGS\""; } >&5 (: AM_CFLAGS="$AM_CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_files="$ac_config_files Makefile doc/Makefile rules/Makefile scripts/Makefile share/Makefile src/Makefile test/Makefile tlf.1" cat >confcache <<\_ACEOF # 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, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # 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. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Tlf $as_me 1.4.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . Tlf home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Tlf config.status 1.4.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "rules/Makefile") CONFIG_FILES="$CONFIG_FILES rules/Makefile" ;; "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; "share/Makefile") CONFIG_FILES="$CONFIG_FILES share/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "tlf.1") CONFIG_FILES="$CONFIG_FILES tlf.1" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #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. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo \ "---------------------------------------------------------------------- ${PACKAGE_NAME} Version ${PACKAGE_VERSION} configuration: Prefix ${prefix} Preprocessor ${CPP} ${CPPFLAGS} C Compiler ${CC} ${CFLAGS} Package features: With XML RPC $wantfldigixmlrpc -----------------------------------------------------------------------" tlf-1.4.0/macros/0000755000175000017500000000000013562576670010607 500000000000000tlf-1.4.0/macros/ax_require_defined.m40000644000175000017500000000230113562576621014603 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_require_defined.html # =========================================================================== # # SYNOPSIS # # AX_REQUIRE_DEFINED(MACRO) # # DESCRIPTION # # AX_REQUIRE_DEFINED is a simple helper for making sure other macros have # been defined and thus are available for use. This avoids random issues # where a macro isn't expanded. Instead the configure script emits a # non-fatal: # # ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found # # It's like AC_REQUIRE except it doesn't expand the required macro. # # Here's an example: # # AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) # # LICENSE # # Copyright (c) 2014 Mike Frysinger # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 1 AC_DEFUN([AX_REQUIRE_DEFINED], [dnl m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) ])dnl AX_REQUIRE_DEFINED tlf-1.4.0/macros/ax_with_curses_extra.m40000644000175000017500000002404113562576621015220 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_with_curses_extra.html # =========================================================================== # # SYNOPSIS # # AX_WITH_CURSES_PANEL # AX_WITH_CURSES_MENU # AX_WITH_CURSES_FORM # # DESCRIPTION # # These macros try to find additional libraries that often come with # SysV-compatible Curses. In particular, the Panel, Menu and Form # libraries are searched, along with their header files. These macros # depend on AX_WITH_CURSES. # # The following preprocessor symbols may be defined by these macros: # # By AX_WITH_CURSES_PANEL: # # HAVE_PANEL - if the Panel library is present # HAVE_PANEL_H - if is present and should be used # HAVE_NCURSES_PANEL_H - if should be used # HAVE_NCURSESW_PANEL_H - if should be used # # By AX_WITH_CURSES_MENU: # # HAVE_MENU - if the Menu library is present # HAVE_MENU_H - if is present and should be used # HAVE_NCURSES_MENU_H - if should be used # HAVE_NCURSESW_MENU_H - if should be used # # By AX_WITH_CURSES_FORM: # # HAVE_FORM - if the Form library is present # HAVE_FORM_H - if is present and should be used # HAVE_NCURSES_FORM_H - if should be used # HAVE_NCURSESW_FORM_H - if should be used # # The following output variables may be defined by these macros; these are # precious and may be overridden on the ./configure command line: # # PANEL_LIBS - library to add to xxx_LDADD before CURSES_LIBS # MENU_LIBS - library to add to xxx_LDADD before CURSES_LIBS # FORM_LIBS - library to add to xxx_LDADD before CURSES_LIBS # # In previous versions of this macro, the flags PANEL_LIB, MENU_LIB and # FORM_LIB were defined. These have been renamed, in keeping with the # variable scheme of PKG_CHECK_MODULES, which should eventually supersede # the use of AX_WITH_CURSES and AX_WITH_CURSES_* macros. These libraries # are NOT added to LIBS by default. You need to add them to the # appropriate xxx_LDADD line in your Makefile.am in front of the # equivalent CURSES_LIBS incantation. For example: # # prog_LDADD = @PANEL_LIBS@ @CURSES_LIBS@ # # If one of the xxx_LIBS variables is set on the configure command line # (such as by running "./configure PANEL_LIBS=-lmypanel"), then the header # file searched must NOT contain a subpath. In this case, in other words, # only would be searched for. The user may use the CPPFLAGS # precious variable to override the standard #include search path. # # The following shell variables may be defined by these macros: # # ax_cv_panel - set to "yes" if Panels library is present # ax_cv_menu - set to "yes" if Menu library is present # ax_cv_form - set to "yes" if Form library is present # # These variables can be used in your configure.ac to determine whether a # library you require is actually present. For example: # # AX_WITH_CURSES # if test "x$ax_cv_curses" != xyes; then # AC_MSG_ERROR([requires a SysV or X/Open-compatible Curses library]) # fi # AX_WITH_CURSES_PANEL # if test "x$ax_cv_panel" != xyes; then # AC_MSG_ERROR([requires the Curses Panel library]) # fi # # To use the HAVE_xxx_H preprocessor symbols, insert the following into # your system.h (or equivalent) header file: # # For AX_WITH_CURSES_PANEL: # # #if defined HAVE_NCURSESW_PANEL_H # # include # #elif defined HAVE_NCURSES_PANEL_H # # include # #elif defined HAVE_PANEL_H # # include # #else # # error "SysV-compatible Curses Panel header file required" # #endif # # For AX_WITH_CURSES_MENU: # # #if defined HAVE_NCURSESW_MENU_H # # include # #elif defined HAVE_NCURSES_MENU_H # # include # #elif defined HAVE_MENU_H # # include # #else # # error "SysV-compatible Curses Menu header file required" # #endif # # For AX_WITH_CURSES_FORM: # # #if defined HAVE_NCURSESW_FORM_H # # include # #elif defined HAVE_NCURSES_FORM_H # # include # #elif defined HAVE_FORM_H # # include # #else # # error "SysV-compatible Curses Form header file required" # #endif # # LICENSE # # Copyright (c) 2011 John Zaitseff # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 4 AC_DEFUN([_AX_WITH_CURSES_CHECKEXTRA], [ dnl Parameter 1 is the variable name component, using uppercase letters only dnl Parameter 2 is the printable library name dnl Parameter 3 is the C code to try compiling and linking dnl Parameter 4 is the header filename dnl Parameter 5 is the library command line AS_VAR_PUSHDEF([_AX_WITH_CURSES_CHECKEXTRA_have_var], [HAVE_$1])dnl AS_VAR_PUSHDEF([_AX_WITH_CURSES_CHECKEXTRA_cv_var], [ax_cv_[]m4_tolower($1)])dnl AS_VAR_PUSHDEF([_AX_WITH_CURSES_CHECKEXTRA_header_var], [ax_cv_header_$4])dnl AS_VAR_PUSHDEF([_AX_WITH_CURSES_CHECKEXTRA_have_header_var], [HAVE_[]m4_toupper($4)])dnl ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS AC_CACHE_CHECK([for Curses $2 library with $4], [_AX_WITH_CURSES_CHECKEXTRA_header_var], [ LIBS="$ax_saved_LIBS $5 $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include <$4> ]], [$3])], [_AX_WITH_CURSES_CHECKEXTRA_header_var=yes], [_AX_WITH_CURSES_CHECKEXTRA_header_var=no]) ]) AS_IF([test "x$[]_AX_WITH_CURSES_CHECKEXTRA_header_var" = xyes], [ _AX_WITH_CURSES_CHECKEXTRA_cv_var=yes AS_LITERAL_IF([$5], [$1_LIBS="$5"]) AC_DEFINE([_AX_WITH_CURSES_CHECKEXTRA_have_var], [1], [Define to 1 if the Curses $2 library is present]) AC_DEFINE([_AX_WITH_CURSES_CHECKEXTRA_have_header_var], [1], [Define to 1 if <$4> is present]) ], [ AS_IF([test "x$[]_AX_WITH_CURSES_CHECKEXTRA_cv_var" = xyes], [], [_AX_WITH_CURSES_CHECKEXTRA_cv_var=no]) ]) LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS AS_VAR_POPDEF([_AX_WITH_CURSES_CHECKEXTRA_have_header_var])dnl AS_VAR_POPDEF([_AX_WITH_CURSES_CHECKEXTRA_header_var])dnl AS_VAR_POPDEF([_AX_WITH_CURSES_CHECKEXTRA_cv_var])dnl AS_VAR_POPDEF([_AX_WITH_CURSES_CHECKEXTRA_have_var])dnl ])dnl AC_DEFUN([_AX_WITH_CURSES_EXTRA], [ dnl Parameter 1 is the variable name component, using uppercase letters only dnl Parameter 2 is the printable library name dnl Parameter 3 is the C code to try compiling and linking dnl Parameter 4 is the header filename component dnl Parameter 5 is the NCursesW library command line dnl Parameter 6 is the NCurses library command line dnl Parameter 7 is the plain Curses library command line AC_REQUIRE([AX_WITH_CURSES]) AC_ARG_VAR([$1_LIBS], [linker library for Curses $2, e.g. $7]) AS_IF([test "x$[]$1_LIBS" != x], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [$4], [$[]$1_LIBS]) ], [ AS_IF([test "x$ax_cv_curses_which" = xncursesw], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [ncursesw/$4], [$5]) AS_IF([test x$[]ax_cv_[]m4_tolower($1) != "xyes"], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [$4], [$6]) ]) ], [test "x$ax_cv_curses_which" = xncurses], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [$4], [$6]) AS_IF([test x$[]ax_cv_[]m4_tolower($1) != "xyes"], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [ncurses/$4], [$6]) ]) ], [test "x$ax_cv_curses_which" = xplaincurses], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [$4], [$7]) ]) ]) ])dnl AC_DEFUN([AX_WITH_CURSES_PANEL], [ _AX_WITH_CURSES_EXTRA([PANEL], [Panel], [[ WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ]], [panel.h], [-lpanelw], [-lpanel], [-lpanel]) ])dnl AC_DEFUN([AX_WITH_CURSES_MENU], [ _AX_WITH_CURSES_EXTRA([MENU], [Menu], [[ ITEM **mi; MENU *m = new_menu(mi); ]], [menu.h], [-lmenuw], [-lmenu], [-lmenu]) ])dnl AC_DEFUN([AX_WITH_CURSES_FORM], [ _AX_WITH_CURSES_EXTRA([FORM], [Form], [[ FIELD **ff; FORM *f = new_form(ff); ]], [form.h], [-lformw], [-lform], [-lform]) ])dnl tlf-1.4.0/macros/ax_with_curses.m40000644000175000017500000006642313562576621014027 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_with_curses.html # =========================================================================== # # SYNOPSIS # # AX_WITH_CURSES # # DESCRIPTION # # This macro checks whether a SysV or X/Open-compatible Curses library is # present, along with the associated header file. The NcursesW # (wide-character) library is searched for first, followed by Ncurses, # then the system-default plain Curses. The first library found is the # one returned. Finding libraries will first be attempted by using # pkg-config, and should the pkg-config files not be available, will # fallback to combinations of known flags itself. # # The following options are understood: --with-ncursesw, --with-ncurses, # --without-ncursesw, --without-ncurses. The "--with" options force the # macro to use that particular library, terminating with an error if not # found. The "--without" options simply skip the check for that library. # The effect on the search pattern is: # # (no options) - NcursesW, Ncurses, Curses # --with-ncurses --with-ncursesw - NcursesW only [*] # --without-ncurses --with-ncursesw - NcursesW only [*] # --with-ncursesw - NcursesW only [*] # --with-ncurses --without-ncursesw - Ncurses only [*] # --with-ncurses - NcursesW, Ncurses [**] # --without-ncurses --without-ncursesw - Curses only # --without-ncursesw - Ncurses, Curses # --without-ncurses - NcursesW, Curses # # [*] If the library is not found, abort the configure script. # # [**] If the second library (Ncurses) is not found, abort configure. # # The following preprocessor symbols may be defined by this macro if the # appropriate conditions are met: # # HAVE_CURSES - if any SysV or X/Open Curses library found # HAVE_CURSES_ENHANCED - if library supports X/Open Enhanced functions # HAVE_CURSES_COLOR - if library supports color (enhanced functions) # HAVE_CURSES_OBSOLETE - if library supports certain obsolete features # HAVE_NCURSESW - if NcursesW (wide char) library is to be used # HAVE_NCURSES - if the Ncurses library is to be used # # HAVE_CURSES_H - if is present and should be used # HAVE_NCURSESW_H - if should be used # HAVE_NCURSES_H - if should be used # HAVE_NCURSESW_CURSES_H - if should be used # HAVE_NCURSES_CURSES_H - if should be used # # (These preprocessor symbols are discussed later in this document.) # # The following output variables are defined by this macro; they are # precious and may be overridden on the ./configure command line: # # CURSES_LIBS - library to add to xxx_LDADD # CURSES_CFLAGS - include paths to add to xxx_CPPFLAGS # # In previous versions of this macro, the flags CURSES_LIB and # CURSES_CPPFLAGS were defined. These have been renamed, in keeping with # AX_WITH_CURSES's close bigger brother, PKG_CHECK_MODULES, which should # eventually supersede the use of AX_WITH_CURSES. Neither the library # listed in CURSES_LIBS, nor the flags in CURSES_CFLAGS are added to LIBS, # respectively CPPFLAGS, by default. You need to add both to the # appropriate xxx_LDADD/xxx_CPPFLAGS line in your Makefile.am. For # example: # # prog_LDADD = @CURSES_LIBS@ # prog_CPPFLAGS = @CURSES_CFLAGS@ # # If CURSES_LIBS is set on the configure command line (such as by running # "./configure CURSES_LIBS=-lmycurses"), then the only header searched for # is . If the user needs to specify an alternative path for a # library (such as for a non-standard NcurseW), the user should use the # LDFLAGS variable. # # The following shell variables may be defined by this macro: # # ax_cv_curses - set to "yes" if any Curses library found # ax_cv_curses_enhanced - set to "yes" if Enhanced functions present # ax_cv_curses_color - set to "yes" if color functions present # ax_cv_curses_obsolete - set to "yes" if obsolete features present # # ax_cv_ncursesw - set to "yes" if NcursesW library found # ax_cv_ncurses - set to "yes" if Ncurses library found # ax_cv_plaincurses - set to "yes" if plain Curses library found # ax_cv_curses_which - set to "ncursesw", "ncurses", "plaincurses" or "no" # # These variables can be used in your configure.ac to determine the level # of support you need from the Curses library. For example, if you must # have either Ncurses or NcursesW, you could include: # # AX_WITH_CURSES # if test "x$ax_cv_ncursesw" != xyes && test "x$ax_cv_ncurses" != xyes; then # AC_MSG_ERROR([requires either NcursesW or Ncurses library]) # fi # # If any Curses library will do (but one must be present and must support # color), you could use: # # AX_WITH_CURSES # if test "x$ax_cv_curses" != xyes || test "x$ax_cv_curses_color" != xyes; then # AC_MSG_ERROR([requires an X/Open-compatible Curses library with color]) # fi # # Certain preprocessor symbols and shell variables defined by this macro # can be used to determine various features of the Curses library. In # particular, HAVE_CURSES and ax_cv_curses are defined if the Curses # library found conforms to the traditional SysV and/or X/Open Base Curses # definition. Any working Curses library conforms to this level. # # HAVE_CURSES_ENHANCED and ax_cv_curses_enhanced are defined if the # library supports the X/Open Enhanced Curses definition. In particular, # the wide-character types attr_t, cchar_t and wint_t, the functions # wattr_set() and wget_wch() and the macros WA_NORMAL and _XOPEN_CURSES # are checked. The Ncurses library does NOT conform to this definition, # although NcursesW does. # # HAVE_CURSES_COLOR and ax_cv_curses_color are defined if the library # supports color functions and macros such as COLOR_PAIR, A_COLOR, # COLOR_WHITE, COLOR_RED and init_pair(). These are NOT part of the # X/Open Base Curses definition, but are part of the Enhanced set of # functions. The Ncurses library DOES support these functions, as does # NcursesW. # # HAVE_CURSES_OBSOLETE and ax_cv_curses_obsolete are defined if the # library supports certain features present in SysV and BSD Curses but not # defined in the X/Open definition. In particular, the functions # getattrs(), getcurx() and getmaxx() are checked. # # To use the HAVE_xxx_H preprocessor symbols, insert the following into # your system.h (or equivalent) header file: # # #if defined HAVE_NCURSESW_CURSES_H # # include # #elif defined HAVE_NCURSESW_H # # include # #elif defined HAVE_NCURSES_CURSES_H # # include # #elif defined HAVE_NCURSES_H # # include # #elif defined HAVE_CURSES_H # # include # #else # # error "SysV or X/Open-compatible Curses header file required" # #endif # # For previous users of this macro: you should not need to change anything # in your configure.ac or Makefile.am, as the previous (serial 10) # semantics are still valid. However, you should update your system.h (or # equivalent) header file to the fragment shown above. You are encouraged # also to make use of the extended functionality provided by this version # of AX_WITH_CURSES, as well as in the additional macros # AX_WITH_CURSES_PANEL, AX_WITH_CURSES_MENU and AX_WITH_CURSES_FORM. # # LICENSE # # Copyright (c) 2009 Mark Pulford # Copyright (c) 2009 Damian Pietras # Copyright (c) 2012 Reuben Thomas # Copyright (c) 2011 John Zaitseff # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 17 # internal function to factorize common code that is used by both ncurses # and ncursesw AC_DEFUN([_FIND_CURSES_FLAGS], [ AC_MSG_CHECKING([for $1 via pkg-config]) AX_REQUIRE_DEFINED([PKG_CHECK_EXISTS]) _PKG_CONFIG([_ax_cv_$1_libs], [libs], [$1]) _PKG_CONFIG([_ax_cv_$1_cppflags], [cflags], [$1]) AS_IF([test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried"],[ AC_MSG_RESULT([no]) # No suitable .pc file found, have to find flags via fallback AC_CACHE_CHECK([for $1 via fallback], [ax_cv_$1], [ AS_ECHO() pkg_cv__ax_cv_$1_libs="-l$1" pkg_cv__ax_cv_$1_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags" AC_MSG_CHECKING([for initscr() with $pkg_cv__ax_cv_$1_libs]) AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])], [ AC_MSG_RESULT([yes]) AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs]) AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[ ax_cv_$1=yes ],[ AC_MSG_RESULT([no]) m4_if( [$1],[ncursesw],[pkg_cv__ax_cv_$1_libs="$pkg_cv__ax_cv_$1_libs -ltinfow"], [$1],[ncurses],[pkg_cv__ax_cv_$1_libs="$pkg_cv__ax_cv_$1_libs -ltinfo"] ) LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs" AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs]) AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[ ax_cv_$1=yes ],[ ax_cv_$1=no ]) ]) ],[ ax_cv_$1=no ]) ]) ],[ AC_MSG_RESULT([yes]) # Found .pc file, using its information LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags" ax_cv_$1=yes ]) ]) AU_ALIAS([MP_WITH_CURSES], [AX_WITH_CURSES]) AC_DEFUN([AX_WITH_CURSES], [ AC_ARG_VAR([CURSES_LIBS], [linker library for Curses, e.g. -lcurses]) AC_ARG_VAR([CURSES_CFLAGS], [preprocessor flags for Curses, e.g. -I/usr/include/ncursesw]) AC_ARG_WITH([ncurses], [AS_HELP_STRING([--with-ncurses], [force the use of Ncurses or NcursesW])], [], [with_ncurses=check]) AC_ARG_WITH([ncursesw], [AS_HELP_STRING([--without-ncursesw], [do not use NcursesW (wide character support)])], [], [with_ncursesw=check]) ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS AS_IF([test "x$with_ncurses" = xyes || test "x$with_ncursesw" = xyes], [ax_with_plaincurses=no], [ax_with_plaincurses=check]) ax_cv_curses_which=no # Test for NcursesW AS_IF([test "x$CURSES_LIBS" = x && test "x$with_ncursesw" != xno], [ _FIND_CURSES_FLAGS([ncursesw]) AS_IF([test "x$ax_cv_ncursesw" = xno && test "x$with_ncursesw" = xyes], [ AC_MSG_ERROR([--with-ncursesw specified but could not find NcursesW library]) ]) AS_IF([test "x$ax_cv_ncursesw" = xyes], [ ax_cv_curses=yes ax_cv_curses_which=ncursesw CURSES_LIBS="$pkg_cv__ax_cv_ncursesw_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncursesw_cppflags" AC_DEFINE([HAVE_NCURSESW], [1], [Define to 1 if the NcursesW library is present]) AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) AC_CACHE_CHECK([for working ncursesw/curses.h], [ax_cv_header_ncursesw_curses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_header_ncursesw_curses_h=yes], [ax_cv_header_ncursesw_curses_h=no]) ]) AS_IF([test "x$ax_cv_header_ncursesw_curses_h" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSESW_CURSES_H], [1], [Define to 1 if is present]) ]) AC_CACHE_CHECK([for working ncursesw.h], [ax_cv_header_ncursesw_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_header_ncursesw_h=yes], [ax_cv_header_ncursesw_h=no]) ]) AS_IF([test "x$ax_cv_header_ncursesw_h" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSESW_H], [1], [Define to 1 if is present]) ]) AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h_with_ncursesw], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_header_ncurses_h_with_ncursesw=yes], [ax_cv_header_ncurses_h_with_ncursesw=no]) ]) AS_IF([test "x$ax_cv_header_ncurses_h_with_ncursesw" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSES_H], [1], [Define to 1 if is present]) ]) AS_IF([test "x$ax_cv_header_ncursesw_curses_h" = xno && test "x$ax_cv_header_ncursesw_h" = xno && test "x$ax_cv_header_ncurses_h_with_ncursesw" = xno], [ AC_MSG_WARN([could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h]) ]) ]) ]) unset pkg_cv__ax_cv_ncursesw_libs unset pkg_cv__ax_cv_ncursesw_cppflags # Test for Ncurses AS_IF([test "x$CURSES_LIBS" = x && test "x$with_ncurses" != xno && test "x$ax_cv_curses_which" = xno], [ _FIND_CURSES_FLAGS([ncurses]) AS_IF([test "x$ax_cv_ncurses" = xno && test "x$with_ncurses" = xyes], [ AC_MSG_ERROR([--with-ncurses specified but could not find Ncurses library]) ]) AS_IF([test "x$ax_cv_ncurses" = xyes], [ ax_cv_curses=yes ax_cv_curses_which=ncurses CURSES_LIBS="$pkg_cv__ax_cv_ncurses_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncurses_cppflags" AC_DEFINE([HAVE_NCURSES], [1], [Define to 1 if the Ncurses library is present]) AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) AC_CACHE_CHECK([for working ncurses/curses.h], [ax_cv_header_ncurses_curses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ]])], [ax_cv_header_ncurses_curses_h=yes], [ax_cv_header_ncurses_curses_h=no]) ]) AS_IF([test "x$ax_cv_header_ncurses_curses_h" = xyes], [ ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSES_CURSES_H], [1], [Define to 1 if is present]) ]) AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ]])], [ax_cv_header_ncurses_h=yes], [ax_cv_header_ncurses_h=no]) ]) AS_IF([test "x$ax_cv_header_ncurses_h" = xyes], [ ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSES_H], [1], [Define to 1 if is present]) ]) AS_IF([test "x$ax_cv_header_ncurses_curses_h" = xno && test "x$ax_cv_header_ncurses_h" = xno], [ AC_MSG_WARN([could not find a working ncurses/curses.h or ncurses.h]) ]) ]) ]) unset pkg_cv__ax_cv_ncurses_libs unset pkg_cv__ax_cv_ncurses_cppflags # Test for plain Curses (or if CURSES_LIBS was set by user) AS_IF([test "x$with_plaincurses" != xno && test "x$ax_cv_curses_which" = xno], [ AS_IF([test "x$CURSES_LIBS" != x], [ LIBS="$ax_saved_LIBS $CURSES_LIBS" ], [ LIBS="$ax_saved_LIBS -lcurses" ]) AC_CACHE_CHECK([for Curses library], [ax_cv_plaincurses], [ AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])], [ax_cv_plaincurses=yes], [ax_cv_plaincurses=no]) ]) AS_IF([test "x$ax_cv_plaincurses" = xyes], [ ax_cv_curses=yes ax_cv_curses_which=plaincurses AS_IF([test "x$CURSES_LIBS" = x], [ CURSES_LIBS="-lcurses" ]) AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) # Check for base conformance (and header file) AC_CACHE_CHECK([for working curses.h], [ax_cv_header_curses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; initscr(); ]])], [ax_cv_header_curses_h=yes], [ax_cv_header_curses_h=no]) ]) AS_IF([test "x$ax_cv_header_curses_h" = xyes], [ AC_DEFINE([HAVE_CURSES_H], [1], [Define to 1 if is present]) # Check for X/Open Enhanced conformance AC_CACHE_CHECK([for X/Open Enhanced Curses conformance], [ax_cv_plaincurses_enhanced], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include @%:@ifndef _XOPEN_CURSES @%:@error "this Curses library is not enhanced" "this Curses library is not enhanced" @%:@endif ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_plaincurses_enhanced=yes], [ax_cv_plaincurses_enhanced=no]) ]) AS_IF([test "x$ax_cv_plaincurses_enhanced" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ]) # Check for color functions AC_CACHE_CHECK([for Curses color functions], [ax_cv_plaincurses_color], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ]])], [ax_cv_plaincurses_color=yes], [ax_cv_plaincurses_color=no]) ]) AS_IF([test "x$ax_cv_plaincurses_color" = xyes], [ ax_cv_curses_color=yes AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ]) # Check for obsolete functions AC_CACHE_CHECK([for obsolete Curses functions], [ax_cv_plaincurses_obsolete], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); ]])], [ax_cv_plaincurses_obsolete=yes], [ax_cv_plaincurses_obsolete=no]) ]) AS_IF([test "x$ax_cv_plaincurses_obsolete" = xyes], [ ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) ]) ]) AS_IF([test "x$ax_cv_header_curses_h" = xno], [ AC_MSG_WARN([could not find a working curses.h]) ]) ]) ]) AS_IF([test "x$ax_cv_curses" != xyes], [ax_cv_curses=no]) AS_IF([test "x$ax_cv_curses_enhanced" != xyes], [ax_cv_curses_enhanced=no]) AS_IF([test "x$ax_cv_curses_color" != xyes], [ax_cv_curses_color=no]) AS_IF([test "x$ax_cv_curses_obsolete" != xyes], [ax_cv_curses_obsolete=no]) LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS ])dnl tlf-1.4.0/macros/ax_cflags_warn_all.m40000644000175000017500000001170113562576621014573 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_cflags_warn_all.html # =========================================================================== # # SYNOPSIS # # AX_CFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] # AX_CXXFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] # AX_FCFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] # # DESCRIPTION # # Try to find a compiler option that enables most reasonable warnings. # # For the GNU compiler it will be -Wall (and -ansi -pedantic) The result # is added to the shellvar being CFLAGS, CXXFLAGS, or FCFLAGS by default. # # Currently this macro knows about the GCC, Solaris, Digital Unix, AIX, # HP-UX, IRIX, NEC SX-5 (Super-UX 10), Cray J90 (Unicos 10.0.0.8), and # Intel compilers. For a given compiler, the Fortran flags are much more # experimental than their C equivalents. # # - $1 shell-variable-to-add-to : CFLAGS, CXXFLAGS, or FCFLAGS # - $2 add-value-if-not-found : nothing # - $3 action-if-found : add value to shellvariable # - $4 action-if-not-found : nothing # # NOTE: These macros depend on AX_APPEND_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2010 Rhys Ulerich # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 15 AC_DEFUN([AX_FLAGS_WARN_ALL],[dnl AS_VAR_PUSHDEF([FLAGS],[_AC_LANG_PREFIX[]FLAGS])dnl AS_VAR_PUSHDEF([VAR],[ac_cv_[]_AC_LANG_ABBREV[]flags_warn_all])dnl AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], VAR,[VAR="no, unknown" ac_save_[]FLAGS="$[]FLAGS" for ac_arg dnl in "-warn all % -warn all" dnl Intel "-pedantic % -Wall" dnl GCC "-xstrconst % -v" dnl Solaris C "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX "-ansi -ansiE % -fullwarn" dnl IRIX "+ESlit % +w1" dnl HP-UX C "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) "-h conform % -h msglevel 2" dnl Cray C (Unicos) # do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) done FLAGS="$ac_save_[]FLAGS" ]) AS_VAR_POPDEF([FLAGS])dnl AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) case ".$VAR" in .ok|.ok,*) m4_ifvaln($3,$3) ;; .|.no|.no,*) m4_default($4,[m4_ifval($2,[AX_APPEND_FLAG([$2], [$1])])]) ;; *) m4_default($3,[AX_APPEND_FLAG([$VAR], [$1])]) ;; esac AS_VAR_POPDEF([VAR])dnl ])dnl AX_FLAGS_WARN_ALL dnl implementation tactics: dnl the for-argument contains a list of options. The first part of dnl these does only exist to detect the compiler - usually it is dnl a global option to enable -ansi or -extrawarnings. All other dnl compilers will fail about it. That was needed since a lot of dnl compilers will give false positives for some option-syntax dnl like -Woption or -Xoption as they think of it is a pass-through dnl to later compile stages or something. The "%" is used as a dnl delimiter. A non-option comment can be given after "%%" marks dnl which will be shown but not added to the respective C/CXXFLAGS. AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl AC_LANG_PUSH([C]) AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) AC_LANG_POP([C]) ]) AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl AC_LANG_PUSH([C++]) AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) AC_LANG_POP([C++]) ]) AC_DEFUN([AX_FCFLAGS_WARN_ALL],[dnl AC_LANG_PUSH([Fortran]) AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) AC_LANG_POP([Fortran]) ]) tlf-1.4.0/macros/ax_append_flag.m40000644000175000017500000000533113562576621013717 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_append_flag.html # =========================================================================== # # SYNOPSIS # # AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) # # DESCRIPTION # # FLAG is appended to the FLAGS-VARIABLE shell variable, with a space # added in between. # # If FLAGS-VARIABLE is not specified, the current language's flags (e.g. # CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains # FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly # FLAG. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 6 AC_DEFUN([AX_APPEND_FLAG], [dnl AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])]) AS_VAR_SET_IF(FLAGS,[ AS_CASE([" AS_VAR_GET(FLAGS) "], [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])], [ AS_VAR_APPEND(FLAGS,[" $1"]) AC_RUN_LOG([: FLAGS="$FLAGS"]) ]) ], [ AS_VAR_SET(FLAGS,[$1]) AC_RUN_LOG([: FLAGS="$FLAGS"]) ]) AS_VAR_POPDEF([FLAGS])dnl ])dnl AX_APPEND_FLAG tlf-1.4.0/macros/ax_pthread.m40000644000175000017500000003267613562576621013122 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. e.g. you should link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threads programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name # (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 21 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) AC_MSG_RESULT([$ax_pthread_ok]) if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], [AC_MSG_RESULT([yes])], [ax_pthread_extra_flags= AC_MSG_RESULT([no])]) CFLAGS="$save_CFLAGS" if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [int attr = $attr; return attr /* ; */])], [attr_name=$attr; break], []) done AC_MSG_RESULT([$attr_name]) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac AC_MSG_RESULT([$flag]) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: compile with *_r variant if test "x$GCC" != xyes; then case $host_os in aix*) AS_CASE(["x/$CC"], [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD