tlf-1.4.1/0000755000175000017500000000000013651752622007314 500000000000000tlf-1.4.1/config.h.in0000644000175000017500000001346513651752613011270 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.1/configure.ac0000644000175000017500000001272113651752573011532 00000000000000# Process this file with autoconf to produce a configure script. AC_INIT([Tlf], [1.4.1], [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(2.40.0,,[AC_MSG_ERROR([GLib 2.40 or later not found])]) 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.1/Makefile.in0000644000175000017500000007066213651752614011315 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.1/ChangeLog0000644000175000017500000051000113651752573011010 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.1/depcomp0000755000175000017500000005602013651752614010615 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.1/rules/0000755000175000017500000000000013651752622010446 500000000000000tlf-1.4.1/rules/contest0000644000175000017500000000163513651752573012002 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.1/rules/Makefile.in0000644000175000017500000005161713651752614012446 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 cwops_mini_cwt \ dxped eusprint focmarathon lzdx pacc_pa pacc_dx \ okom 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.1/rules/aadx_as0000644000175000017500000000224313651752573011717 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.1/rules/stewperry0000644000175000017500000000165013651752573012364 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.1/rules/arrl160m_usa0000644000175000017500000000176713651752573012545 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.1/rules/template0000644000175000017500000000415113651752573012132 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.1/rules/arrl10m_dx0000644000175000017500000000173513651752573012275 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.1/rules/arrldx_usa0000644000175000017500000000165113651752573012465 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.1/rules/spdx_sp0000644000175000017500000000216413651752573012001 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.1/rules/Makefile.am0000644000175000017500000000065413651752573012434 00000000000000RULES_FILES = arrl10m_dx arrl160m_usa arrldx_dx arrldx_usa arrlfd arrlss \ contest cqww cwops_mini_cwt \ dxped eusprint focmarathon lzdx pacc_pa pacc_dx \ okom 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.1/rules/waedc_eu0000644000175000017500000000341413651752573012074 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.1/rules/pacc_dx0000644000175000017500000000225313651752573011721 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.1/rules/wpx0000644000175000017500000000162513651752573011140 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.1/rules/dxped0000644000175000017500000000160213651752573011421 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.1/rules/pacc_pa0000644000175000017500000000171313651752573011706 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.1/rules/focmarathon0000644000175000017500000000265113651752573012623 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.1/rules/waedc_dx_rtty0000644000175000017500000000242113651752573013155 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.1/rules/lzdx0000644000175000017500000000176713651752573011312 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.1/rules/aadx_dx0000644000175000017500000000231313651752573011725 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.1/rules/waedc_dx0000644000175000017500000000271413651752573012100 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.1/rules/okom0000644000175000017500000000131013651752573011256 00000000000000################## # OK-OM Contest # ################## # CONTEST=okom LOGFILE=okom.log CONTEST_MODE # MULT_LIST=okommults COUNTRYLIST=okom:OK,OM COUNTRY_LIST_POINTS=1 USE_COUNTRYLIST_ONLY SERIAL_OR_SECTION SECTION_MULT ################################## # # # Messages F1= to F12= # # Message CW_TU_MSG= # # Message S&P_TU_MSG= # # # # % = call # # @ = hiscall # # # = serial # # [ = RST # # + = increase cw speed # # - = decrease cw speed # # (works only with parport # # interface) # # # ################################## # F1=+TEST -% %+TEST- F2=% F3=+@ 5NN -# # F4=TU 73 F5=@ F6=% F7=@ SRI QSO B4 GL F8=AGN F9=? F10=QRZ? F11=PSE K F12=+TEST -% %+ TEST- # CQ_TU_MSG=+TU -%+ TEST- S&P_TU_MSG=+TU 5NN -# # tlf-1.4.1/rules/qso0000644000175000017500000000207413651752573011123 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.1/rules/eusprint0000644000175000017500000000170213651752573012167 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.1/rules/arrlfd0000644000175000017500000000317713651752573011600 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.1/rules/spdx_dx0000644000175000017500000000225113651752573011767 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.1/rules/waedc_eu_rtty0000644000175000017500000000245213651752573013157 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.1/rules/ssa_mt0000644000175000017500000000202113651752573011577 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.1/rules/cwops_mini_cwt0000644000175000017500000000245613651752573013351 00000000000000CONTEST=cwops_mini_cwt LOGFILE=cwops_mini_cwt.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 % % CWT F2=@ DE % F3=@ JO 2225 F4=TU 73 F5= @ F6=% F7=@ SRI QSO B4 GL F8=AGN F9= ? F10= QRZ? F11= PSE K F12= TEST % % CWT # CQ_TU_MSG=TU % S&P_TU_MSG=TU JO 2225 ################################# # # # POINTS LIST # # # ################################# ONE_POINT ################################# # # # MULIPLIER # # # ################################# UNIQUE_CALL_MULTI=ALL RECALL_MULTS ################################# # # # EXCHANGE # # # ################################# INITIAL_EXCHANGE=cwops.txt tlf-1.4.1/rules/cqww0000644000175000017500000000306413651752573011302 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.1/rules/arrldx_dx0000644000175000017500000000201213651752573012300 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.1/rules/arrlss0000644000175000017500000000244013651752573011624 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.1/README0000644000175000017500000000240213651752622010112 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.1/scripts/0000755000175000017500000000000013651752622011003 500000000000000tlf-1.4.1/scripts/Makefile.in0000644000175000017500000003577313651752614013010 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.1/scripts/soundlog0000755000175000017500000000032413651752573012507 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.1/scripts/Makefile.am0000644000175000017500000000015713651752573012767 00000000000000SCRIPT_FILES = soundlog play_vk bin_SCRIPTS = $(SCRIPT_FILES) EXTRA_DIST = $(SCRIPT_FILES) CLEANFILES = *~ tlf-1.4.1/scripts/play_vk0000755000175000017500000000206013651752573012321 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.1/doc/0000755000175000017500000000000013651752622010061 500000000000000tlf-1.4.1/doc/README.cabrillo0000644000175000017500000001075613651752573012465 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.1/doc/Makefile.in0000644000175000017500000003461213651752614012055 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.1/doc/README_QTC_RTTY.txt0000644000175000017500000001403513651752573013100 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.1/doc/Xresources0000644000175000017500000000206613651752573012077 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.1/doc/README0000644000175000017500000000415613651752573010674 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.1/doc/Makefile.am0000644000175000017500000000030413651752573012037 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.1/doc/FAQ0000644000175000017500000000550713651752573010347 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 https://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: * For version before TLF-1.3.1 you have to use the old style CTY.DAT file with no embedded '=' character. * For newer versions you can also use the newer file format also used by >=CT9.91. It allows to give informations not only for call areas but for single stations with a call sign preceded by a '=' character. (See http://www.country-files.com/cty-dat-format/ for details). 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. Q: How can I use a K1EL series of Winkeyers or similar devices (e.g. the K3NG arduino based ones)? A: Yes. You can use one of the UDP related keying daemons out there for it. At the moment there are at least three different versions: * The Perl based 'Winkeydaemon' at https://github.com/N0NB/winkeydaemon * CQRLOG comes with 'Winkeyer USB' (see the link at https://github.com/ok2cqr/winkeyer_server) * The Python based 'pywinkeyerdaemon' at https://github.com/drewarnett/pywinkeyerdaemon Q: The generated ADIF file misses some entries, e.g. the CONTEST_ID which is used by my log program during import. Any idea to work around it? A: You can use 'adifmerg' from OH7BF for it. It allows to post process the ADIF file. For instance you can add the missing CONTEST_ID with adifmerg -f qso.adi -A CONTEST_ID= -o > file.adi Have a look at www.adif.org for the already standardized contest IDs. tlf-1.4.1/doc/New_Bandmap.txt0000644000175000017500000000703613651752573012730 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.1/doc/README.RTTY0000644000175000017500000001267213651752573011477 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.1/doc/README.ssb0000644000175000017500000001407013651752573011456 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.1/doc/README_QTC.txt0000644000175000017500000003127013651752573012216 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.1/config.sub0000755000175000017500000007613113651752614011230 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2019 Free Software Foundation, Inc. timestamp='2019-06-30' # 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-2019 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 ;; *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 # Split fields of configuration type # shellcheck disable=SC2162 IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 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*) basic_machine=$field1 os=$maybe_os ;; android-linux) basic_machine=$field1-unknown os=linux-android ;; *) basic_machine=$field1-$field2 os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | 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* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 os= ;; *) basic_machine=$field1 os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc os=bsd ;; a29khif) basic_machine=a29k-amd os=udi ;; adobe68k) basic_machine=m68010-adobe os=scout ;; alliant) basic_machine=fx80-alliant os= ;; altos | altos3068) basic_machine=m68k-altos os= ;; am29k) basic_machine=a29k-none os=bsd ;; amdahl) basic_machine=580-amdahl os=sysv ;; amiga) basic_machine=m68k-unknown os= ;; 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 ;; aux) basic_machine=m68k-apple os=aux ;; balance) basic_machine=ns32k-sequent os=dynix ;; blackfin) basic_machine=bfin-unknown os=linux ;; 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) basic_machine=j90-cray os=unicos ;; crds | unos) basic_machine=m68k-crds os= ;; da30) basic_machine=m68k-da30 os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec os= ;; delta88) basic_machine=m88k-motorola os=sysv3 ;; dicos) basic_machine=i686-pc os=dicos ;; djgpp) basic_machine=i586-pc os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=ose ;; gmicro) basic_machine=tron-gmicro os=sysv ;; go32) basic_machine=i386-pc os=go32 ;; 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 | hp300hpux) basic_machine=m68k-hp os=hpux ;; hp300bsd) basic_machine=m68k-hp os=bsd ;; hppaosf) basic_machine=hppa1.1-hp os=osf ;; hppro) basic_machine=hppa1.1-hp os=proelf ;; i386mach) basic_machine=i386-mach os=mach ;; isi68 | isi) basic_machine=m68k-isi os=sysv ;; m68knommu) basic_machine=m68k-unknown os=linux ;; magnum | m3230) basic_machine=mips-mips os=sysv ;; merlin) basic_machine=ns32k-utek os=sysv ;; mingw64) basic_machine=x86_64-pc os=mingw64 ;; mingw32) basic_machine=i686-pc os=mingw32 ;; mingw32ce) basic_machine=arm-unknown os=mingw32ce ;; 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 ;; 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-pc 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 ;; necv70) basic_machine=v70-nec os=sysv ;; 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 ;; os400) basic_machine=powerpc-ibm os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=ose ;; os68k) basic_machine=m68k-none os=os68k ;; paragon) basic_machine=i860-intel os=osf ;; parisc) basic_machine=hppa-unknown os=linux ;; 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 ;; sa29200) basic_machine=a29k-amd os=udi ;; sei) basic_machine=mips-sei os=seiux ;; sequent) basic_machine=i386-sequent os= ;; sps7) basic_machine=m68k-bull os=sysv2 ;; st2000) basic_machine=m68k-tandem os= ;; stratus) basic_machine=i860-stratus os=sysv4 ;; sun2) basic_machine=m68000-sun os= ;; sun2os3) basic_machine=m68000-sun os=sunos3 ;; sun2os4) basic_machine=m68000-sun os=sunos4 ;; sun3) basic_machine=m68k-sun os= ;; sun3os3) basic_machine=m68k-sun os=sunos3 ;; sun3os4) basic_machine=m68k-sun os=sunos4 ;; sun4) basic_machine=sparc-sun os= ;; sun4os3) basic_machine=sparc-sun os=sunos3 ;; sun4os4) basic_machine=sparc-sun os=sunos4 ;; sun4sol2) basic_machine=sparc-sun os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun os= ;; 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 ;; toad1) basic_machine=pdp10-xkl os=tops20 ;; 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 ;; vsta) basic_machine=i386-pc os=vsta ;; vxworks960) basic_machine=i960-wrs os=vxworks ;; vxworks68) basic_machine=m68k-wrs os=vxworks ;; vxworks29k) basic_machine=a29k-wrs os=vxworks ;; xbox) basic_machine=i686-pc os=mingw32 ;; ymp) basic_machine=ymp-cray os=unicos ;; *) basic_machine=$1 os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # 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) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi os=${os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray os=${os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $os in irix*) ;; *) os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari os=mint ;; mipsEE* | ee) cpu=mips64r5900el vendor=scei case $os in linux*) ;; *) os=elf ;; esac ;; iop) cpu=mipsel vendor=scei os=irx ;; dvp) cpu=dvp vendor=scei os=elf ;; news-3600 | risc-news) cpu=mips vendor=sony os=newsos ;; next | m*-next) cpu=m68k vendor=next case $os in openstep*) ;; nextstep*) ;; ns2*) os=nextstep2 ;; *) os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde os=${os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=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 ;; bluegene*) os=cnk ;; solaris1 | solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; solaris) os=solaris2 ;; unixware*) os=sysv4.2uw ;; gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) es1800*) os=ose ;; # Some version numbers need modification chorusos*) os=chorusos ;; isc) os=isc2.2 ;; sco6) os=sco5v6 ;; sco5) os=sco3.2v5 ;; sco4) os=sco3.2v4 ;; sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` ;; sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; scout) # Don't match below ;; sco*) os=sco3.2v2 ;; psos*) os=psos ;; # 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* | esix* | 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* | twizzler* \ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ | knetbsd* | mirbsd* | netbsd* \ | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* \ | cygwin* | msys* | pe* | 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* \ | openstep* | oskit* | conix* | pw32* | nonstopux* \ | storm-chaos* | tops10* | tenex* | tops20* | its* | irx* \ | os2* | vos* | palmos* | uclinux* | nucleus* \ | morphos* | superux* | rtmk* | windiss* \ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix) # Remember, each alternative MUST END IN *, to match a version number. ;; qnx*) case $cpu in x86 | i*86) ;; *) os=nto-$os ;; esac ;; hiux*) os=hiuxwe2 ;; nto-qnx*) ;; nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; sim | xray | os68k* | v88r* \ | windows* | osx | abug | netware* | os9* \ | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) ;; linux-dietlibc) os=linux-dietlibc ;; linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; lynx*) os=lynxos ;; mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; opened*) os=openedition ;; os400*) os=os400 ;; sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; wince*) os=wince ;; 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 ;; # 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 ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; 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 $cpu in arm*) os=eabi ;; *) os=elf ;; esac ;; nacl*) ;; ios) ;; none) ;; *-eabi) ;; *) 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 $cpu-$vendor 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 ;; clipper-intergraph) os=clix ;; 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 ;; *-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 ;; *-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 ;; *-wrs) os=vxworks ;; *) 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. case $vendor 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 ;; clix*) vendor=intergraph ;; 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 ;; esac echo "$cpu-$vendor-$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tlf-1.4.1/README.md0000644000175000017500000000254413651752573010525 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.1/Makefile.am0000644000175000017500000000030013651752573011266 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.1/missing0000755000175000017500000001533613651752614010644 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.1/test/0000755000175000017500000000000013651752622010273 500000000000000tlf-1.4.1/test/run_bands.c0000644000175000017500000000270113651752614012333 00000000000000// generated on Tue Apr 28 09:04:44 2020 #include #include #include #include void test_IsWarcIndex(void **state); void test_bandindex2nr(void **state); void test_bandnr2index(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_bandnr2index, NULL, NULL), cmocka_unit_test_setup_teardown(test_bandindex2nr, 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.1/test/test.h0000644000175000017500000000130313651752573011345 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.1/test/run_recallexchange.c0000644000175000017500000000155013651752614014212 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/run_addmult.c0000644000175000017500000001022413651752614012675 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/Makefile.in0000644000175000017500000017004713651752614012272 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 Apr 28 09:04:44 2020 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_logutils$(EXEEXT) \ run_prefix$(EXEEXT) run_readcalls$(EXEEXT) \ run_recallexchange$(EXEEXT) run_score$(EXEEXT) \ run_searchlog$(EXEEXT) run_sendbuf$(EXEEXT) run_wwv$(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_logutils$(EXEEXT) \ run_prefix$(EXEEXT) run_readcalls$(EXEEXT) \ run_recallexchange$(EXEEXT) run_score$(EXEEXT) \ run_searchlog$(EXEEXT) run_sendbuf$(EXEEXT) run_wwv$(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/dxcc.o ../src/focm.o ../src/getctydata.o \ ../src/getpx.o ../src/get_time.o ../src/locator2longlat.o \ ../src/log_utils.o ../src/qrb.o ../src/score.o \ ../src/searchcallarray.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_logutils_OBJECTS = run_logutils.$(OBJEXT) \ test_logutils.$(OBJEXT) data.$(OBJEXT) functions.$(OBJEXT) run_logutils_OBJECTS = $(am_run_logutils_OBJECTS) run_logutils_DEPENDENCIES = ../src/log_utils.o ../src/bands.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_readcalls_OBJECTS = run_readcalls.$(OBJEXT) \ test_readcalls.$(OBJEXT) data.$(OBJEXT) functions.$(OBJEXT) run_readcalls_OBJECTS = $(am_run_readcalls_OBJECTS) run_readcalls_DEPENDENCIES = ../src/log_utils.o ../src/addmult.o \ ../src/addpfx.o ../src/bands.o ../src/dxcc.o \ ../src/getctydata.o ../src/getpx.o ../src/locator2longlat.o \ ../src/readcalls.o ../src/searchcallarray.o ../src/score.o \ ../src/zone_nr.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/getpx.o ../src/locator2longlat.o ../src/qrb.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 ../src/ui_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_wwv_OBJECTS = run_wwv.$(OBJEXT) test_wwv.$(OBJEXT) \ data.$(OBJEXT) functions.$(OBJEXT) run_wwv_OBJECTS = $(am_run_wwv_OBJECTS) run_wwv_DEPENDENCIES = ../src/getwwv.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_logutils.Po \ ./$(DEPDIR)/run_prefix.Po ./$(DEPDIR)/run_readcalls.Po \ ./$(DEPDIR)/run_recallexchange.Po ./$(DEPDIR)/run_score.Po \ ./$(DEPDIR)/run_searchlog.Po ./$(DEPDIR)/run_sendbuf.Po \ ./$(DEPDIR)/run_wwv.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_logutils.Po ./$(DEPDIR)/test_prefix.Po \ ./$(DEPDIR)/test_readcalls.Po \ ./$(DEPDIR)/test_recallexchange.Po ./$(DEPDIR)/test_score.Po \ ./$(DEPDIR)/test_searchlog.Po ./$(DEPDIR)/test_sendbuf.Po \ ./$(DEPDIR)/test_wwv.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_logutils_SOURCES) $(run_prefix_SOURCES) \ $(run_readcalls_SOURCES) $(run_recallexchange_SOURCES) \ $(run_score_SOURCES) $(run_searchlog_SOURCES) \ $(run_sendbuf_SOURCES) $(run_wwv_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_logutils_SOURCES) $(run_prefix_SOURCES) \ $(run_readcalls_SOURCES) $(run_recallexchange_SOURCES) \ $(run_score_SOURCES) $(run_searchlog_SOURCES) \ $(run_sendbuf_SOURCES) $(run_wwv_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/dxcc.o ../src/focm.o ../src/getctydata.o ../src/getpx.o ../src/get_time.o ../src/locator2longlat.o ../src/log_utils.o ../src/qrb.o ../src/score.o ../src/searchcallarray.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_logutils_SOURCES = run_logutils.c test_logutils.c data.c functions.c run_logutils_LDADD = ../src/log_utils.o ../src/bands.o run_prefix_SOURCES = run_prefix.c test_prefix.c data.c functions.c run_prefix_LDADD = ../src/getpx.o run_readcalls_SOURCES = run_readcalls.c test_readcalls.c data.c functions.c run_readcalls_LDADD = ../src/log_utils.o ../src/addmult.o ../src/addpfx.o ../src/bands.o ../src/dxcc.o ../src/getctydata.o ../src/getpx.o ../src/locator2longlat.o ../src/readcalls.o ../src/searchcallarray.o ../src/score.o ../src/zone_nr.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/getpx.o ../src/locator2longlat.o ../src/qrb.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 ../src/ui_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_wwv_SOURCES = run_wwv.c test_wwv.c data.c functions.c run_wwv_LDADD = ../src/getwwv.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 \ generate_defs.pl 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_logutils$(EXEEXT): $(run_logutils_OBJECTS) $(run_logutils_DEPENDENCIES) $(EXTRA_run_logutils_DEPENDENCIES) @rm -f run_logutils$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_logutils_OBJECTS) $(run_logutils_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_readcalls$(EXEEXT): $(run_readcalls_OBJECTS) $(run_readcalls_DEPENDENCIES) $(EXTRA_run_readcalls_DEPENDENCIES) @rm -f run_readcalls$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_readcalls_OBJECTS) $(run_readcalls_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_wwv$(EXEEXT): $(run_wwv_OBJECTS) $(run_wwv_DEPENDENCIES) $(EXTRA_run_wwv_DEPENDENCIES) @rm -f run_wwv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_wwv_OBJECTS) $(run_wwv_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_logutils.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_readcalls.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_wwv.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_logutils.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_readcalls.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_wwv.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_logutils.log: run_logutils$(EXEEXT) @p='run_logutils$(EXEEXT)'; \ b='run_logutils'; \ $(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_readcalls.log: run_readcalls$(EXEEXT) @p='run_readcalls$(EXEEXT)'; \ b='run_readcalls'; \ $(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_wwv.log: run_wwv$(EXEEXT) @p='run_wwv$(EXEEXT)'; \ b='run_wwv'; \ $(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_logutils.Po -rm -f ./$(DEPDIR)/run_prefix.Po -rm -f ./$(DEPDIR)/run_readcalls.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_wwv.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_logutils.Po -rm -f ./$(DEPDIR)/test_prefix.Po -rm -f ./$(DEPDIR)/test_readcalls.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_wwv.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_logutils.Po -rm -f ./$(DEPDIR)/run_prefix.Po -rm -f ./$(DEPDIR)/run_readcalls.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_wwv.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_logutils.Po -rm -f ./$(DEPDIR)/test_prefix.Po -rm -f ./$(DEPDIR)/test_readcalls.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_wwv.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.1/test/test_initial_exchange.c0000644000175000017500000000667513651752573014734 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.1/test/run_checklogfile.c0000644000175000017500000000214513651752614013665 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/test_zone_nr.c0000644000175000017500000000103513651752573013074 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.1/test/run_locator2longlat.c0000644000175000017500000000120413651752614014347 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/run_cabrillo.c0000644000175000017500000000326213651752614013036 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/test_addpfx.c0000644000175000017500000000511313651752573012671 00000000000000#include "test.h" #include "../src/addpfx.h" #include "../src/tlf.h" // OBJECT ../src/addpfx.o // OBJECT ../src/bands.o extern 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, 3); 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, 3); 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.1/test/data/0000755000175000017500000000000013651752622011204 500000000000000tlf-1.4.1/test/data/ie_empty_call.txt0000644000175000017500000000001113651752573014470 00000000000000 ,123 tlf-1.4.1/test/data/ie_long_line.txt0000644000175000017500000000014513651752573014315 00000000000000a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789 tlf-1.4.1/test/data/ie_ok.txt0000644000175000017500000000010713651752573012756 00000000000000 #!!Order!!, Call, Exch1 # 2E0BBB ,51N00W 2E0AAA, 51N3W YU5T,43N22O tlf-1.4.1/test/data/ie_ok_multi_column.txt0000644000175000017500000000011513651752573015544 000000000000002E0BBB, 51N00W,comment1 2E0AAA,51N3W , comment2 YU5T,43N22O,,,comment3, tlf-1.4.1/test/data/ie_no_comma.txt0000644000175000017500000000002213651752573014131 00000000000000A1AA,123 A2BB 456 tlf-1.4.1/test/data/ie_ok_tab.txt0000644000175000017500000000013413651752573013604 00000000000000# leading tab 2E0BBB, 51N00W # tab after call 2E0AAA ,51N3W # tab after comma YU5T, 43N22O tlf-1.4.1/test/data/ie_ok_dos.txt0000644000175000017500000000011713651752573013624 00000000000000 #!!Order!!, Call, Exch1 # 2E0BBB ,51N00W 2E0AAA, 51N3W YU5T,43N22O tlf-1.4.1/test/test_clusterinfo.c0000644000175000017500000001621513651752573013765 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]; extern char call[20]; extern 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.1/test/run_clusterinfo.c0000644000175000017500000000177313651752614013611 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/run_dxcc.c0000644000175000017500000000277213651752614012175 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/test_addcall.c0000644000175000017500000002770213651752573013017 00000000000000#include "test.h" #include "../src/addcall.h" #include "../src/dxcc.h" #include "../src/getctydata.h" #include "../src/globalvars.h" #include "../src/score.h" // OBJECT ../src/addcall.o // OBJECT ../src/addmult.o // OBJECT ../src/bands.o // OBJECT ../src/dxcc.o // OBJECT ../src/focm.o // OBJECT ../src/getctydata.o // OBJECT ../src/getpx.o // OBJECT ../src/get_time.o // OBJECT ../src/locator2longlat.o // OBJECT ../src/log_utils.o // OBJECT ../src/qrb.o // OBJECT ../src/score.o // OBJECT ../src/searchcallarray.o // OBJECT ../src/zone_nr.o /* these are missing from globalvars */ extern int excl_add_veto; extern int dupe; extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern char continent_multiplier_list[7][3]; extern char countrylist[][6]; extern bool continentlist_only; extern bool countrylist_only; extern int exclude_multilist_type; 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], "DL"); strcpy(countrylist[1], "CE"); strcpy(countrylist[2], ""); countrylist_only = false; strcpy(continent_multiplier_list[0], "EU"); strcpy(continent_multiplier_list[1], "NA"); strcpy(continent_multiplier_list[2], ""); continentlist_only = false; exclude_multilist_type = EXCLUDE_NONE; 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); } void test_addcall_continentlistonly(void **state) { continentlist_only = true; strcpy(hiscall, "LZ1AB"); addcall(); assert_int_equal(excl_add_veto, false); strcpy(hiscall, "PY2BBB"); addcall(); assert_int_equal(excl_add_veto, true); } void test_addcall_exclude_continent(void **state) { exclude_multilist_type = EXCLUDE_CONTINENT; strcpy(hiscall, "LZ1AB"); addcall(); assert_int_equal(excl_add_veto, true); strcpy(hiscall, "PY2BBB"); addcall(); assert_int_equal(excl_add_veto, false); } void test_addcall_exclude_country (void **state) { exclude_multilist_type = EXCLUDE_COUNTRY; strcpy(hiscall, "LZ1AB"); addcall(); assert_int_equal(excl_add_veto, false); strcpy(hiscall, "DL1AAA"); addcall(); assert_int_equal(excl_add_veto, true); } /* addcall2 */ char logline[] = "160CW 08-Feb-11 17:06 0025 LZ1AB 599 599 20 LZ 20 1 "; char logline_HA[] = "160CW 08-Feb-11 17:06 0025 HA1AB 599 599 19 LZ 20 1 "; char logline_PY[] = "160CW 08-Feb-11 17:06 0025 PY1AB 599 599 19 PY 20 1 "; char logline_DL[] = "160CW 08-Feb-11 17:06 0025 DL1AB 599 599 19 PY 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_HA); 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_HA); 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_HA); 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); } void test_addcall2_continentlistonly(void **state) { continentlist_only = true; strcpy(lan_logline, logline_PY); addcall2(); assert_int_equal(excl_add_veto, true); strcpy(lan_logline, logline); addcall2(); assert_int_equal(excl_add_veto, false); } void test_addcall2_exclude_continent(void **state) { exclude_multilist_type = EXCLUDE_CONTINENT; strcpy(lan_logline, logline); addcall2(); assert_int_equal(excl_add_veto, true); strcpy(lan_logline, logline_PY); addcall2(); assert_int_equal(excl_add_veto, false); } void test_addcall2_exclude_country (void **state) { exclude_multilist_type = EXCLUDE_COUNTRY; strcpy(lan_logline, logline); addcall2(); assert_int_equal(excl_add_veto, false); strcpy(lan_logline, logline_DL); addcall2(); assert_int_equal(excl_add_veto, true); } tlf-1.4.1/test/run_cw_utils.c0000644000175000017500000000071413651752614013077 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/functions.c0000644000175000017500000000230413651752573012373 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.1/test/test_recallexchange.c0000644000175000017500000000261713651752573014376 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.1/test/Makefile.am0000644000175000017500000000122513651752573012254 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 \ generate_defs.pl EXTRA_DIST = $(DATA_FILES) tlf-1.4.1/test/run_wwv.c0000644000175000017500000000242313651752614012070 00000000000000// generated on Tue Apr 28 09:04:44 2020 #include #include #include #include int setup_default(void **state); void test_wwv_check(void **state); void test_wwv_check_not_wwv(void **state); void test_wwv_check_wcy(void **state); void test_wwv_check_wcy_no_gmt(void **state); void test_wwv_check_wcy_sa(void **state); void test_wwv_check_wcy_sa_aur(void **state); void test_wwv_check_wcy_sa_gmf(void **state); void test_wwv_check_wcy_sa_gmf_aur(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_wwv_check_not_wwv, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wwv_check, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wwv_check_wcy, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wwv_check_wcy_sa, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wwv_check_wcy_sa_gmf, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wwv_check_wcy_sa_gmf_aur, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wwv_check_wcy_sa_aur, setup_default, NULL), cmocka_unit_test_setup_teardown(test_wwv_check_wcy_no_gmt, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.1/test/test_dxcc.c0000644000175000017500000000413413651752573012346 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.1/test/test_cw_utils.c0000644000175000017500000000060613651752573013256 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.1/test/test_addmult.c0000644000175000017500000002243213651752573013060 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 extern struct mults_t multis[MAX_MULTS]; extern 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.1/test/test_checklogfile.c0000644000175000017500000000516213651752573014046 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.1/test/run_zone_nr.c0000644000175000017500000000132613651752614012720 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/data.c0000644000175000017500000003226013651752573011300 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 #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; char *editor_name = NULL; 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 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]; bool countrylist_only = false; int countrylist_points = -1; char continent_multiplier_list[7][3]; // SA, NA, EU, AF, AS and OC int continentlist_points = -1; bool continentlist_only = false; int exclude_multilist_type = EXCLUDE_NONE; bool mult_side = false; /* 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; cqmode_t cqmode = CQ; 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 */ 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[10] = { 1830000.0, 3525000.0, 5352000.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"; const char *backgrnd_str = " "; 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.; 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, 1}; int bandweight_multis[NBANDS] = {1, 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.1/test/run_initial_exchange.c0000644000175000017500000000237713651752614014550 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/test_wwv.c0000644000175000017500000000553613651752573012257 00000000000000#include "test.h" #include "../src/getwwv.h" // OBJECT ../src/getwwv.o int setup_default(void **state) { ssn_r = 10.0; lastwwv[0] = 0; return 0; } void test_wwv_check_not_wwv(void **state) { char *s = "DX de DL3DTH-#: 1816.5 ON7PQ CW 30 dB 23 WPM CQ 2201Z"; wwv_add(s); assert_int_equal(0, strlen(lastwwv)); assert_in_range(ssn_r, 9.99, 10.01); // unchanged } void test_wwv_check(void **state) { char *s = "WWV de VA6AAA <18>: SFI=74, A=5, K=0, No Storms -> No Storms"; wwv_add(s); assert_in_range(ssn_r, 4.43, 4.45); // 74 --> 4.44 g_strchomp(lastwwv); assert_string_equal(lastwwv, "Condx: 18 GMT SFI=74"); } void test_wwv_check_wcy(void **state) { char *s = "WCY de DK0WCY-1 <07> : K=3 expK=4 A=10 R=0 SFI=71 SA=qui GMF=qui Au=no"; wwv_add(s); assert_in_range(ssn_r, 1.10, 1.12); // 71 --> 1.11 g_strchomp(lastwwv); assert_string_equal(lastwwv, "Condx: 07 GMT R=0 SFI=71"); } void test_wwv_check_wcy_sa(void **state) { char *s = "WCY de DK0WCY-1 <17> : K=3 expK=4 A=10 R=11 SFI=71 SA=eru GMF=qui Au=no"; wwv_add(s); assert_in_range(ssn_r, 1.10, 1.12); // 71 --> 1.11 g_strchomp(lastwwv); assert_string_equal(lastwwv, "Condx: 17 GMT R=11 SFI=71 eruptive"); } void test_wwv_check_wcy_sa_gmf(void **state) { char *s = "WCY de DK0WCY-1 <17> : K=3 expK=4 A=10 R=11 SFI=71 SA=eru GMF=act Au=no"; wwv_add(s); assert_in_range(ssn_r, 1.10, 1.12); // 71 --> 1.11 g_strchomp(lastwwv); assert_string_equal(lastwwv, "Condx: 17 GMT R=11 SFI=71 eruptive act"); } void test_wwv_check_wcy_sa_gmf_aur(void **state) { char *s = "WCY de DK0WCY-1 <17> : K=3 expK=4 A=10 R=0 SFI=71 SA=eru GMF=act Au=au"; wwv_add(s); assert_in_range(ssn_r, 1.10, 1.12); // 71 --> 1.11 g_strchomp(lastwwv); assert_int_equal(70, strlen(lastwwv)); assert_string_equal(lastwwv, "Condx: 17 GMT R=0 SFI=71 eruptive act AURORA!"); // original: "Condx: 17 GMT R=0 S SFI=71 eruptive act AURORA!" } void test_wwv_check_wcy_sa_aur(void **state) { char *s = "WCY de DK0WCY-1 <17> : K=3 expK=4 A=10 R=11 SFI=71 SA=eru GMF=qui Au=au"; wwv_add(s); assert_in_range(ssn_r, 1.10, 1.12); // 71 --> 1.11 g_strchomp(lastwwv); assert_int_equal(70, strlen(lastwwv)); assert_string_equal(lastwwv, "Condx: 17 GMT R=11 SFI=71 eruptive AURORA!"); } void test_wwv_check_wcy_no_gmt(void **state) { char *s = "WCY de DK0WCY-1 #### : K=3 expK=4 A=10 R=0 SFI=71 SA=qui GMF=qui Au=no"; wwv_add(s); assert_in_range(ssn_r, 1.10, 1.12); // 71 --> 1.11 g_strchomp(lastwwv); assert_string_equal(lastwwv, "Condx: R=0 SFI=71"); } tlf-1.4.1/test/test_logutils.c0000644000175000017500000000300613651752573013264 00000000000000#include "test.h" #include "../src/log_utils.h" #include "../src/globalvars.h" // OBJECT ../src/log_utils.o // OBJECT ../src/bands.o #define QSO1 " 40SSB 12-Jan-18 16:34 0006 SP9ABC 599 599 15 10 " #define QSO2 " 60SSB 12-Jan-18 16:34 0006 SP9ABC 599 599 15 1 " #define QSO_BAD1 "180SSB 12-Jan-18 16:34 0006 SP9ABC 599 599 15 1 " /* check test for commented logline */ void test_iscomment(void **state) { assert_int_equal(log_is_comment(";Hi"), 1); } void test_isnocomment(void **state) { assert_int_equal(log_is_comment("Hi"), 0); } /* test reading used band index */ void test_getband_ok(void **state) { assert_int_equal(log_get_band(QSO1), BANDINDEX_40); assert_int_equal(log_get_band(QSO2), BANDINDEX_60); } void test_getband_wrongband(void **state) { assert_int_equal(log_get_band(QSO_BAD1), BANDINDEX_OOB); } /* test reading mode */ void test_getmode_ok (void **state) { assert_int_equal(log_get_mode(QSO1), SSBMODE); } void test_getmode_ignores_case (void **state) { char *tmp = g_strdup(QSO1); memcpy(tmp + 3, "ssb", 3); assert_int_equal(log_get_mode(tmp), SSBMODE); g_free(tmp); } void test_getmode_error (void **state) { char *tmp = g_strdup(QSO1); memcpy(tmp + 3, "x y", 3); assert_int_equal(log_get_mode(tmp), -1); g_free(tmp); } /* test reading points */ void test_getpoints (void **state) { assert_int_equal(log_get_points(QSO1), 10); } tlf-1.4.1/test/test_searchlog.c0000644000175000017500000002577613651752573013413 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 // OBJECT ../src/ui_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 int mixedmode; 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; } // clear_display.c void clear_display() { } // clusterinfo.c void clusterinfo() { } // splitscreen.c void refresh_splitlayout() { } // 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; mixedmode = 0; 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\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], QSO5, 80), 0); } void test_searchlog_pickup_call_mixedmode(void **state) { mixedmode = 1; 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], " 80CW 0009 UA9LM 17 "); } void test_searchlog_extract_data_mixedmode(void **state) { mixedmode = 1; 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\nLA3AA\nA3BB\n"); load_callmaster(); use_part = 1; strcpy(hiscall, "A3"); filterLog(); handlePartials(); assert_string_equal( hiscall, "A3"); } void test_UsePartialNotUnique_only_callmaster(void **state) { // 2 matches for HG write_callmaster("callmaster", "# data\nA1AA\nA2HG\nHG3BB\n"); load_callmaster(); use_part = 1; strcpy(hiscall, "HG"); // not in log yet filterLog(); handlePartials(); assert_string_equal( hiscall, "HG"); } /* test if partials display checks callmaster even if match was found in log */ void test_displayPartials_exact_callmaster(void **state) { // callmaster has also some UA3JKx calls write_callmaster("callmaster", "# data\nA1AA\nUA3JK\nUA3JKA\nUA3JKB\n"); load_callmaster(); strcpy(hiscall, "UA3JK"); // already in log filterLog(); handlePartials(); check_mvprintw_output(2, 1, 1, "UA3JK"); // first - from log check_mvprintw_output(1, 1, 6, " UA3JKA"); // second - from callmaster check_mvprintw_output(0, 1, 13, " UA3JKB"); // third - from callmaster } /* test if partials display overflows */ void test_displayPartials(void **state) { // add a bunch of UA QSOs so that they fill up available space for (int i = 0; i <= 'Z' - 'A'; ++i) { sprintf(qsos[6 + i], " 80CW 12-Jan-18 16:34 0009 UA9%cAA 599 599 17 UA9 17 3 ", 'A' + i); } // callmaster has also some UAs write_callmaster("callmaster", "# data\nA1AA\nF2UAA\nGW3UAB\n"); load_callmaster(); strcpy(hiscall, "UA"); filterLog(); handlePartials(); // check selected displayed values only (F2UAA must not be shown) // (note the leading space) check_mvprintw_output(24, 1, 1, "OE3UAI"); // first check_mvprintw_output(23, 1, 7, " UA9LM"); // second check_mvprintw_output(0, 5, 28, " UA9WAA"); // last } /* 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, "K4D"); filterLog(); assert_int_equal (getZone(), 5); } void test_ZoneFromLog_mixedmode(void **state) { mixedmode = 1; 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, 11, 4, "test"); } tlf-1.4.1/test/run_readcalls.c0000644000175000017500000000213413651752614013176 00000000000000// generated on Tue Apr 28 09:04:44 2020 #include #include #include #include int setup_default (void **state); void test_lookup_in_pfxnummult(void **state); void test_lookup_not_in_pfxnummult(void **state); void test_veto_eclude_none (void **state); void test_veto_exclude_continent (void **state); void test_veto_exclude_continent_contlist_only (void **state); void test_veto_exclude_country (void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_lookup_not_in_pfxnummult, setup_default, NULL), cmocka_unit_test_setup_teardown(test_lookup_in_pfxnummult, setup_default, NULL), cmocka_unit_test_setup_teardown(test_veto_eclude_none, setup_default, NULL), cmocka_unit_test_setup_teardown(test_veto_exclude_country, setup_default, NULL), cmocka_unit_test_setup_teardown(test_veto_exclude_continent_contlist_only, setup_default, NULL), cmocka_unit_test_setup_teardown(test_veto_exclude_continent, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.1/test/run_sendbuf.c0000644000175000017500000000451613651752614012700 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/run_searchlog.c0000644000175000017500000001013313651752614013211 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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_UsePartialNotUnique_only_callmaster(void **state); void test_ZoneFromCountry(void **state); void test_ZoneFromExchange(void **state); void test_ZoneFromLog(void **state); void test_ZoneFromLog_mixedmode(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_displayPartials(void **state); void test_displayPartials_exact_callmaster(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_extract_data_mixedmode(void **state); void test_searchlog_pickup_call(void **state); void test_searchlog_pickup_call_mixedmode(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_pickup_call_mixedmode, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_searchlog_extract_data, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_searchlog_extract_data_mixedmode, 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_UsePartialNotUnique_only_callmaster, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_displayPartials_exact_callmaster, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_displayPartials, 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_ZoneFromLog_mixedmode, 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.1/test/run_addpfx.c0000644000175000017500000000263213651752614012515 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/run_getctydata.c0000644000175000017500000000305013651752614013373 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/test_score.c0000644000175000017500000002036013651752573012537 00000000000000#include "test.h" #include "../src/dxcc.h" #include "../src/getctydata.h" #include "../src/score.h" #include "../src/tlf.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/getpx.o // OBJECT ../src/locator2longlat.o // OBJECT ../src/qrb.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 bool countrylist_only; extern int countrylist_points; extern char countrylist[][6]; extern bool 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 = false; countrylist_points = -1; strcpy(countrylist[0], ""); continentlist_only = false; 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], ""); } /* test is_in_countrylist() */ void test_in_countrylist(void **state) { init_countrylist(); assert_int_equal(is_in_countrylist(getctynr("DL")), true); } void test_not_in_countrylist(void **state) { init_countrylist(); assert_int_equal(is_in_countrylist(getctynr("CE")), false); } void test_in_countrylist_keeps_countrynr(void **state) { init_countrylist(); countrynr = 42; assert_int_equal(is_in_countrylist(getctynr("DL")), true); assert_int_equal(is_in_countrylist(getctynr("CE")), false); assert_int_equal(countrynr, 42); } 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); } static void init_continentlist() { strcpy(continent_multiplier_list[0], "EU"); strcpy(continent_multiplier_list[1], "NA"); strcpy(continent_multiplier_list[2], ""); } void test_empty_continentlist(void **state) { assert_int_equal(is_in_continentlist(""), false); assert_int_equal(is_in_continentlist("SA"), false); } void test_not_in_continnetlist(void ** state) { init_continentlist(); assert_int_equal(is_in_continentlist("SA"), false); } void test_in_continentlist(void **state) { init_continentlist(); assert_int_equal(is_in_continentlist("NA"), true); } void test_scoreByCorC_countrylistOnly(void **state) { countrylist_only = true; 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_continentlistOnly(void **state) { continentlist_only = true; check_call_points("LZ1AB", 0); init_continentlist(); my_cont_points = 1; check_call_points("LZ1AB", 1); continentlist_points = 2; check_call_points("XE2AAA", 2); } 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.1/test/test_getctydata.c0000644000175000017500000000571313651752573013562 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); extern 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.1/test/test_prefix.c0000644000175000017500000000275013651752573012724 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.1/test/run_prefix.c0000644000175000017500000000175213651752614012546 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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.1/test/run_score.c0000644000175000017500000000536113651752614012364 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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_empty_continentlist(void **state); void test_in_continentlist(void **state); void test_in_countrylist(void **state); void test_in_countrylist_keeps_countrynr(void **state); void test_not_in_continnetlist(void ** state); void test_not_in_countrylist(void **state); void test_scoreByCorC_InList(void **state); void test_scoreByCorC_continentlistOnly(void **state); void test_scoreByCorC_countrylistOnly(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_in_countrylist, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_not_in_countrylist, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_in_countrylist_keeps_countrynr, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_country_found, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_empty_continentlist, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_not_in_continnetlist, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_in_continentlist, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_scoreByCorC_countrylistOnly, setup_default, teardown_default), cmocka_unit_test_setup_teardown(test_scoreByCorC_continentlistOnly, 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.1/test/run_logutils.c0000644000175000017500000000213613651752614013110 00000000000000// generated on Tue Apr 28 09:04:44 2020 #include #include #include #include void test_getband_ok(void **state); void test_getband_wrongband(void **state); void test_getmode_error (void **state); void test_getmode_ignores_case (void **state); void test_getmode_ok (void **state); void test_getpoints (void **state); void test_iscomment(void **state); void test_isnocomment(void **state); int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_iscomment, NULL, NULL), cmocka_unit_test_setup_teardown(test_isnocomment, NULL, NULL), cmocka_unit_test_setup_teardown(test_getband_ok, NULL, NULL), cmocka_unit_test_setup_teardown(test_getband_wrongband, NULL, NULL), cmocka_unit_test_setup_teardown(test_getmode_ok, NULL, NULL), cmocka_unit_test_setup_teardown(test_getmode_ignores_case, NULL, NULL), cmocka_unit_test_setup_teardown(test_getmode_error, NULL, NULL), cmocka_unit_test_setup_teardown(test_getpoints, NULL, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.1/test/generate_defs.pl0000644000175000017500000000564513651752573013362 00000000000000use strict; use Getopt::Std; our $opt_v; # -v verbose mode getopts("v"); my @files; if ($#ARGV >= 0) { @files = @ARGV; $opt_v = 1; # switch to verbose if files were specified } else { @files = glob 'test_*.c'; } my %groups; # # scan test sources # for my $c (@files) { my $group_name = substr($c, 5, -2); print "\n$c\n" if $opt_v; open(my $SRC, $c) or die "Can't open $c: $!\n"; while (<$SRC>) { if (/\/\/\s+OBJECT\s+(\S+)/) { print " OBJECT $1\n" if $opt_v; push @{$groups{$group_name}{OBJECTS}}, $1; next; } if (/^\s*((int|void)\s+((setup|teardown|test)(_\w+)?)\s*\(\s*void\s+\*\*\s*\w+\s*\))/) { ${$groups{$group_name}{FUNCTIONS}}{$3} = $1; # check if it's a test function if ($2 eq 'void') { my $name = substr($3, 5); print " TEST $name\n" if $opt_v; push @{$groups{$group_name}{TESTS}}, $name; } else { print " FUNCTION $3\n" if $opt_v; } next; } } close($SRC); } # # generate defs.am and sources for run's # open(my $AM, '> defs.am') or die; my $ts = scalar(localtime); print $AM "# generated on $ts\n\n"; my $tests = ''; for my $g (sort keys %groups) { $tests .= " run_$g"; } print $AM "TESTS =$tests\n\n"; print $AM "check_PROGRAMS =$tests\n\n"; for my $g (sort keys %groups) { my $objects = join(' ',@{$groups{$g}{OBJECTS}}); print $AM < run_${g}.c") or die; print $C < #include #include #include EOT for my $f (sort keys %{$groups{$g}{FUNCTIONS}}) { print $C "${$groups{$g}{FUNCTIONS}}{$f};\n"; } print $C < #include "../src/tlf.h" #include "../src/dxcc.h" #include "../src/readctydata.h" #include "../src/globalvars.h" #include "../src/getctydata.h" #include "../src/readcalls.h" // OBJECT ../src/log_utils.o // OBJECT ../src/addmult.o // OBJECT ../src/addpfx.o // OBJECT ../src/bands.o // OBJECT ../src/dxcc.o // OBJECT ../src/getctydata.o // OBJECT ../src/getpx.o // OBJECT ../src/locator2longlat.o // OBJECT ../src/readcalls.o // OBJECT ../src/searchcallarray.o // OBJECT ../src/score.o // OBJECT ../src/zone_nr.o /* missing from globalvar.h */ extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern char continent_multiplier_list[7][3]; extern char countrylist[][6]; extern int exclude_multilist_type; extern bool continentlist_only; // dummy functions void get_time(void) {} void readqtccalls() {} void shownr(char *msg, int x) {} void spaces(int n) {} /* needs more care */ int qrb(double a, double b, double c, double d) { return 1; } int foc_score(char *a) { return 1; } int pacc_pa(void) { return 0; } /* private prototypes */ bool check_veto(); int setup_default (void **state) { char filename[100]; strcpy(filename, TOP_SRCDIR); strcat(filename, "/share/cty.dat"); assert_int_equal(load_ctydata(filename), 0); strcpy(countrylist[0], "DL"); strcpy(countrylist[1], "CE"); strcpy(countrylist[2], ""); strcpy(continent_multiplier_list[0], "EU"); strcpy(continent_multiplier_list[1], "NA"); strcpy(continent_multiplier_list[2], ""); exclude_multilist_type = EXCLUDE_NONE; continentlist_only = false; memset(pfxnummulti, 0, sizeof(pfxnummulti)); pfxnummulti[0].countrynr = 12; pfxnummulti[1].countrynr = 42; pfxnummultinr = 2; return 0; } /* test lookup country in pfxnummult */ void test_lookup_not_in_pfxnummult(void **state) { assert_int_equal(lookup_country_in_pfxnummult_array(1), -1); } void test_lookup_in_pfxnummult(void **state) { assert_int_equal(lookup_country_in_pfxnummult_array(42), 1); } /* test check_veto() */ void test_veto_eclude_none (void **state) { assert_int_equal(check_veto(), false); } void test_veto_exclude_country (void **state) { exclude_multilist_type = EXCLUDE_COUNTRY; countrynr = getctynr("HB9ABC"); assert_int_equal(check_veto(), false); countrynr = getctynr("DL1AAA"); assert_int_equal(check_veto(), true); } void test_veto_exclude_continent_contlist_only (void **state) { continentlist_only = true; exclude_multilist_type = EXCLUDE_CONTINENT; strcpy(continent, "EU"); assert_int_equal(check_veto(), false); strcpy(continent, "AF"); assert_int_equal(check_veto(), false); } void test_veto_exclude_continent (void **state) { exclude_multilist_type = EXCLUDE_CONTINENT; strcpy(continent, "EU"); assert_int_equal(check_veto(), true); strcpy(continent, "AF"); assert_int_equal(check_veto(), false); } tlf-1.4.1/test/test_sendbuf.c0000644000175000017500000001367013651752573013060 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; extern char call[20]; extern char message[25][80]; extern char buffer[]; extern char wkeyerbuffer[400]; extern int demode; char *SPcall; extern 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.1/test/test_locator2longlat.c0000644000175000017500000000064413651752573014535 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.1/test/run_addcall.c0000644000175000017500000001146713651752614012641 00000000000000// generated on Tue Apr 28 09:04:44 2020 #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_continentlistonly(void **state); void test_addcall2_exclude_continent(void **state); void test_addcall2_exclude_country (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_continentlistonly(void **state); void test_addcall_exclude_continent(void **state); void test_addcall_exclude_country (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_addcall_continentlistonly, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addcall_exclude_continent, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addcall_exclude_country, setup_default, 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), cmocka_unit_test_setup_teardown(test_addcall2_continentlistonly, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addcall2_exclude_continent, setup_default, NULL), cmocka_unit_test_setup_teardown(test_addcall2_exclude_country, setup_default, NULL), }; return cmocka_run_group_tests(tests, NULL, NULL); } tlf-1.4.1/tlf.1.in0000644000175000017500000015211013651752573010515 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 \-? 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 PageUp/PageDown 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. Be careful! . .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 Shift-F1 Restore previous CQ frequency from MEM and send message F1 (CQ). . .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 $\ (Dollar) Pop MEM frequency: MEM \(-> transceiver VFO frequency and clear MEM. . .TP .BR %\ (Percent) Swap transceiver VFO frequency and MEM. . .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 Ctrl-C , and .BR Ctrl-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. . .TP .B Alt-W Set CW weight. . .TP .B Alt-Z Show zones worked. . .SS CT Compatible Mode . @PACKAGE_NAME@ has limited support for the logging sequence keys used in the once popular CT logging program. Unlike the default .I Enter \ Sends \ Message .RI ( ESM ) mode, the CT Compatible mode uses the .B Insert and .B + keys in the logging sequence and .B Enter logs a complete QSO. Unlike ESM mode, CT mode does not have separate .B CQ or .B S&P modes. . .P CT Compatible mode is enabled with the .B CTCOMPATIBLE keyword in .I logcfg.dat (see the .B PREFERENCES section below). . .P The following keys differ in behavior in CT Compatible mode. . .TP .B Enter Log the complete QSO without sending any message macro. . .IP If the callsign field is empty, pressing .B Enter will activate the .B Auto-CQ function. If the exchange field is empty, pressing .B Enter in either the callsign or exchange field will result in no action. . .TP .B Insert Send the .B RST (F3) macro. . .IP Since the .B RST macro includes the other station's callsign by default, the .B HIS macro is not sent first. This differs from classic CT, but is a compromise to use the default @PACKAGE_NAME@ macros. . .TP .BR + \ (Plus) Send the .B TU macro and log the QSO. . .IP The .B + key checks if the exchange field is empty and if it is nothing is sent or logged. In rare cases where nothing needs to be entered in the exchange field, e.g. working DX from USA in ARRL 160, simply enter a space to allow the .B + key to send the .B TU message and log the QSO. . .TP .B Alt-V Change CW speed. . . .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 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=\fInano\fR | \fIvi\fR[\fIm\fR] | \fI\fR Editor used to modify the QSO log or logcfg.dat. The command specified receives the file name as an argument. . .IP When using a GUI editor that runs in the background (e.g. gvim) make sure to exit the editor before logging new stations. You also have to use :RES command to reread the log and correct scoring. . .IP Best is to force the editor to stay in foreground (e.g. with 'gvim -f'). . .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.1/aclocal.m40000644000175000017500000016643113651752613011107 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.1/compile0000755000175000017500000001632713651752614010624 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.1/AUTHORS0000644000175000017500000000040213651752573010305 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 Joerg DL8DTL and others tlf-1.4.1/NEWS0000644000175000017500000020776613651752573007762 00000000000000tlf-1.4.1 ========= Bug fixes and minor improvements. Changes: - From TLF-1.3.1 on we can use the CT9 cty.dat files with full call sign exceptions (marked by =). Starting from Jan2020 Jim reiser AD1C presents the CT9 format file as default file format for TLF. If you use TLF-1.3.0 or older you should look for the old format files. - Rework display of partials - more stations displayed, bugs fixed (tnx HA5CQZ) - Log will automatically be rescored after deleting a QSO - Update ADIF write function to V3.10 New features: - Add rules, multipliers and initial exchange for OKOM contest (tnx SP3RXO) - Add rules and initial exchange for CWOPS minitest (tnx Joop PG4I) - TLF supports now the 60m band (Tnx Joerg DL8DTL). - Drop hard coded editor programs. You can name any editor program to use in the EDITOR= keyword. If none set TLF uses the $EDITOR from environment. The Logfile gets automaticlly reloaded after editing. - HA5CQZ provided a good solution to extend the memory TX functionality. Besides frequency the memory now also remembers the working mode. That allows to just grab a announced station, work it in S&P mode and switch back to running CQ on your old QRG with very few key strokes. From the commit message: "In addition to the frequency memory now holds the mode (CQ/SP) and the entered call (if any) - % swaps TRX and MEM (swap) - $ moves MEM to TRX (pop) - in SP mode Shift-F1 makes a swap if memory holds a previous CQ frequency and then executes F1 (calls CQ). Mode and entered call are also restored. After the "switch back" using Shift-F1 the previous frequency and entered call are not lost, pressing % restores the state, so one can continue SP and also move around or grab new stations." Bug fixes: - There are two major fixes for bugs in the scoring logic: - For US/VE stations runnin ARRLDX contest intra W/VE qso were counted which was wrong. New code correctly scores these contacts with 0 points and does not count it as multi. - If you running TLF in CQWW 2 TX mode QSO from other stations on LAN would be counted wrong. Fixed. - Fix a lot of minor inconsistencies in handling of keyer, partial display and other (Mostly done by HA5CQZ) - Fix handling of CT compatible keys and correct handling of CTCOMPATIBLE keyword (tnx N0NB) - Add missing generated_defs.pl to distributed files. Need for regeneration of test code. - Fix compile errors with GCC-10. tlf-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.1/config.guess0000755000175000017500000013706613651752614011572 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2019 Free Software Foundation, Inc. timestamp='2019-09-10' # 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-2019 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 # 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. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { : "${TMPDIR=/tmp}" # shellcheck disable=SC2039 { 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" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$driver" 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 } # 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 ; 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 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'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; 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) 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 ;; *:OS108:*:*) echo "$UNAME_MACHINE"-unknown-os108_"$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 ;; *:Twizzler:*:*) echo "$UNAME_MACHINE"-unknown-twizzler 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.*:*) 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) 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 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 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 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:*:*) 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 ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi else echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf fi 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-pc-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 ;; *:Minix:*:*) echo "$UNAME_MACHINE"-unknown-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:*:*) 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:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; 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:*:*) 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` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi 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 elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE 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 ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-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. # shellcheck disable=SC2154 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 ;; *:Unleashed:*:*) echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" exit ;; esac # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } 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 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tlf-1.4.1/COPYING0000644000175000017500000004311013651752573010273 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.1/src/0000755000175000017500000000000013651752622010103 500000000000000tlf-1.4.1/src/deleteqso.h0000644000175000017500000000175713651752573012200 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.1/src/qsonr_to_str.c0000644000175000017500000000246413651752573012736 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 #include #include void qsonr_to_str(void) { extern int qsonum; extern char qsonrstr[5]; if (qsonum < 0 || qsonum > 9999) { // should in fact never happen ... strcpy(qsonrstr, "????"); return; } sprintf(qsonrstr, "%04d", qsonum); } tlf-1.4.1/src/getsummary.h0000644000175000017500000000172713651752573012405 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.1/src/addcall.c0000644000175000017500000002552713651752573011573 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 #ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE #endif #include #include #include #include #include "addcall.h" #include "addmult.h" #include "addpfx.h" #include "bands.h" #include "dxcc.h" #include "getctydata.h" #include "getpx.h" #include "get_time.h" #include "log_utils.h" #include "paccdx.h" #include "score.h" #include "searchcallarray.h" #include "tlf.h" #include "zone_nr.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. */ 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 bool continentlist_only; extern char continent[]; extern int exclude_multilist_type; 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) { if (!is_in_continentlist(continent)) { add_ok = 0; addcty = 0; addcallarea = 0; excl_add_veto = 1; } } if (!continentlist_only && exclude_multilist_type == EXCLUDE_CONTINENT) { if (is_in_continentlist(continent)) { add_ok = 0; addcty = 0; addcallarea = 0; excl_add_veto = 1; } } if (exclude_multilist_type == EXCLUDE_COUNTRY) { if (is_in_countrylist(j)) { add_ok = 0; addcty = 0; addcallarea = 0; excl_add_veto = 1; } } 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 bool continentlist_only; extern char continent[]; extern int pfxmultab; extern int exclude_multilist_type; 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 = log_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) { if (!is_in_continentlist(dxcc_by_index(j)->continent)) { excl_add_veto = 1; } } if (!continentlist_only && exclude_multilist_type == EXCLUDE_CONTINENT) { if (is_in_continentlist(dxcc_by_index(j)->continent)) { excl_add_veto = 1; } } if (exclude_multilist_type == EXCLUDE_COUNTRY) { if (is_in_countrylist(j)) { excl_add_veto = 1; } } if (add_ok == 1) { bandinx = log_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 = log_get_band(lan_logline); add_pfx(lancopy, bandinx); } } addmult2(); /* for wysiwyg from LAN */ return j; } tlf-1.4.1/src/paccdx.h0000644000175000017500000000212513651752573011443 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.1/src/recall_exchange.c0000644000175000017500000000571413651752573013307 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.1/src/keystroke_names.h0000644000175000017500000000442113651752573013405 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2019 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 */ /* ------------------------------------------------------------ * Keystroke magic numbers and names as symbolic * constants. Values are decimal ordinals provided * by the ncurses library. See doc/keynames.txt. * *--------------------------------------------------------------*/ #define CTRL_A 1 #define CTRL_B 2 #define CTRL_E 5 #define CTRL_F 6 #define CTRL_G 7 /* Bell */ #define CTRL_H 8 /* Backspace */ #define CTRL_I 9 /* Tab */ #define CTRL_J 10 /* Newline/Linefeed */ #define CTRL_K 11 #define CTRL_L 12 #define CTRL_M 13 /* Return */ #define CTRL_N 14 #define CTRL_P 16 #define CTRL_Q 17 #define CTRL_R 18 #define CTRL_S 19 #define CTRL_T 20 /* Keyboard characters */ #define ESCAPE 27 #define SPACE 32 #define BACKSLASH 92 #define DELETE 127 #define ALT_A 225 #define ALT_B 226 #define ALT_C 227 #define ALT_E 229 #define ALT_G 231 #define ALT_H 232 #define ALT_I 233 #define ALT_J 234 #define ALT_K 235 #define ALT_M 237 #define ALT_N 238 #define ALT_P 240 #define ALT_Q 241 #define ALT_R 242 #define ALT_S 243 #define ALT_T 244 #define ALT_V 246 #define ALT_W 247 #define ALT_X 248 #define ALT_Z 250 /* Common name macros. */ #define TAB CTRL_I #define LINEFEED CTRL_J #define RETURN CTRL_M #define SHIFT_F(n) (KEY_F(n) + 12) tlf-1.4.1/src/logview.h0000644000175000017500000000164313651752573011661 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.1/src/getexchange.h0000644000175000017500000000175313651752573012471 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.1/src/set_tone.h0000644000175000017500000000172513651752573012026 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.1/src/showinfo.c0000644000175000017500000000737213651752573012041 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 #include "dxcc.h" #include "getwwv.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; 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) { if (dx->cq > MAX_ZONES) dx->cq = MAX_ZONES; snprintf(zonestr, sizeof(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); mvaddstr(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); } else { wwv_show_footer(); } attron(modify_attr(COLOR_PAIR(NORMCOLOR))); move(cury, curx); } tlf-1.4.1/src/zone_nr.c0000644000175000017500000000230213651752573011643 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.1/src/note.c0000644000175000017500000000472413651752573011150 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 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(); 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); g_strlcpy(qsos[nr_qsos], buffer2, LOGLINELEN); nr_qsos++; scroll_log(); g_strlcpy(logline4, buffer2, 81); /* 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.1/src/sunup.h0000644000175000017500000000173713651752573011363 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.1/src/zone_nr.h0000644000175000017500000000165413651752573011661 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.1/src/checkqtclogfile.c0000644000175000017500000000463613651752573013334 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.1/src/addpfx.c0000644000175000017500000000527713651752573011455 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, 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.1/src/sunup.c0000644000175000017500000000355413651752573011355 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.1/src/background_process.h0000644000175000017500000000222613651752573014060 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.1/src/writeparas.h0000644000175000017500000000171213651752573012363 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.1/src/rules.h0000644000175000017500000000174213651752573011337 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.1/src/store_qso.h0000644000175000017500000000166713651752573012231 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.1/src/addpfx.h0000644000175000017500000000211413651752573011445 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.1/src/gettxinfo.h0000644000175000017500000000214013651752573012205 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.1/src/Makefile.in0000644000175000017500000012347113651752614012101 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) \ log_utils.$(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) trx_memory.$(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)/log_utils.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)/trx_memory.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 log_utils.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\ trx_memory.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 \ 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 keystroke_names.h \ lancode.h last10.h listmessages.h log_utils.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 rtty.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 \ time_update.h tlf.h tlf_curses.h tlf_panel.h trx_memory.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)/log_utils.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)/trx_memory.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)/log_utils.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)/trx_memory.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)/log_utils.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)/trx_memory.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.1/src/addspot.h0000644000175000017500000000175113651752573011643 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); void addspot(void); #endif /* ADDSPOT_H */ tlf-1.4.1/src/showinfo.h0000644000175000017500000000173213651752573012040 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.1/src/rtty.c0000644000175000017500000001605413651752573011204 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 ---------------------------------- */ void show_rtty(void) { extern int miniterm; extern int commentfield; extern char comment[]; if (!miniterm) { return; } attroff(A_STANDOUT); attron(modify_attr(COLOR_PAIR(C_HEADER))); mvprintw(1, 0, spaces(40)); mvprintw(1, 0, "%s", ry_term[0]); mvprintw(2, 0, spaces(40)); mvprintw(2, 0, "%s", ry_term[1]); mvprintw(3, 0, spaces(40)); mvprintw(3, 0, "%s", ry_term[2]); mvprintw(4, 0, spaces(40)); mvprintw(4, 0, "%s", ry_term[3]); mvprintw(5, 0, spaces(40)); mvprintw(5, 0, "%s", ry_term[4]); if (commentfield == 0) { printcall(); } else { mvprintw(12, 54, comment); } refreshp(); attron(A_STANDOUT); } /* --------------------- 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.1/src/fldigixmlrpc.h0000644000175000017500000000274713651752573012677 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.1/src/showzones.h0000644000175000017500000000166313651752573012246 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.1/src/sockserv.h0000644000175000017500000000553313651752573012046 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.1/src/cabrillo_utils.h0000644000175000017500000000521513651752573013213 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.1/src/setparameters.c0000644000175000017500000001157613651752573013065 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 #include "background_process.h" #include "clear_display.h" #include "checklogfile.h" #include "getmessages.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[15] = ""; 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); g_strlcpy(callcpy, call, sizeof(callcpy)); g_strchomp(callcpy); 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 */ scroll_log(); /* read the last 5 log lines and set the qso number */ /* read the logfile for score and dupe */ log_read_n_score(); 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.1/src/setcontest.c0000644000175000017500000001215413651752573012372 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" void 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 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; w_cty = getctynr(wcall); ve_cty = getctynr(vecall); 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; } 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; 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; 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) { 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; } if (strcmp(whichcontest, "qso") == 0) { contest = 0; searchflg = 1; } else { searchflg = 1; //dxpedition contest = 1; showscore_flag = 1; universal = 1; } } tlf-1.4.1/src/readqtccalls.c0000644000175000017500000000761013651752573012642 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.1/src/readctydata.h0000644000175000017500000000166413651752573012475 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.1/src/qtcwin.c0000644000175000017500000014145713651752573011515 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 "keystroke_names.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 */ g_strlcpy(prevqtccall, qtcreclist.callsign, sizeof(prevqtccall)); 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 */ g_strlcpy(prevqtccall, qtclist.callsign, sizeof(prevqtccall)); 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 != ESCAPE) { while (x < 1) { usleep(5000); time_update(); if (trxmode == DIGIMODE && digikeyer != NO_KEYER) { show_rtty(); } x = key_poll(); } switch (x) { // Ctrl-T (^T) case CTRL_T: 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); g_strlcpy(qtcreclist.qtclines[currqtc].receivedtime, tempc, 16); 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 = ESCAPE; // 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); g_strlcpy(qtclist.qtclines[activefield - 3].senttime, tempc, 16); 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) { g_strlcpy(tempc, qtc_send_msgs[1], tlen); 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; g_strlcpy(qtclist.qtclines[ql].senttime, timec, 16); 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 CTRL_S: 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 = ESCAPE; // 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 CTRL_E: 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[60]; tmess[0] = '\0'; if (tlen > 0 && strncmp(qtc_send_msgs[x - KEY_F(1)] + tlen, "sr/nr", 5) == 0) { g_strlcpy(tempc, qtc_send_msgs[x - KEY_F(1)], tlen); 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 TAB: 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 SPACE: 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 CTRL_L: 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 CTRL_N: 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 CTRL_F: if (activefield > 2) { fill_qtc_times(qtcreclist.qtclines[(activefield - 3) / 3].time); showfield(activefield); } break; // Ctrl-R (^R), start/stop recording case CTRL_R: if (direction == RECV) { if (record_run < 0) { start_qtc_recording(); showfield(activefield); } else { stop_qtc_recording(); } } } refreshp(); if (x != ESCAPE) { 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); g_strlcpy(qtccallsign, fieldval, QTC_CALL_SIZE); 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) { g_strlcpy(buff, qtc_recv_msgs[i], sizeof(buff)); 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) { g_strlcpy(buff, qtc_send_msgs[i], sizeof(buff)); 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; } g_strlcpy(lline, line, sizeof(lline)); 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 != ESCAPE) { 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 CTRL_R: 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 CTRL_S: qtc_ry_capture = 1; mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); break; // Ctrl-E (^E), end capture case CTRL_E: qtc_ry_capture = 0; mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); break; // , add to qtc case LINEFEED: 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 != ESCAPE) { 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(); } } g_strlcpy(prevqtccall, qtccallsign, sizeof(prevqtccall)); } tlf-1.4.1/src/fldigixmlrpc.c0000644000175000017500000004332513651752573012667 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 #include #include #include // need for abs() #include #include // need for va_list... #include #include #ifdef HAVE_LIBXMLRPC # include # include # include #endif #include #include "err_utils.h" #include "fldigixmlrpc.h" #include "getctydata.h" #include "logit.h" #include "printcall.h" #include "searchlog.h" #include "startmsg.h" #include "tlf_curses.h" #include "ui_utils.h" #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(); 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.1/src/readqtccalls.h0000644000175000017500000000171213651752573012644 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.1/src/readcabrillo.c0000644000175000017500000003277713651752573012637 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 #include #include #include #include #include "addcall.h" #include "addmult.h" #include "bands.h" #include "cabrillo_utils.h" #include "cleanup.h" #include "getexchange.h" #include "globalvars.h" #include "makelogline.h" #include "qtc_log.h" #include "readcabrillo.h" #include "startmsg.h" #include "store_qso.h" #include "tlf_curses.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[24]; char output_logfile[80], temp_logfile[80]; char logline[MAX_CABRILLO_LEN]; char *tempstrp; 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 { tempstrp = g_strdup_printf("CABRILLO format: %s", cabrillo); show_readcab_msg(mode, tempstrp); g_free (tempstrp); sleep(1); } strcpy(temp_logfile, logfile); strcpy(input_logfile, call); g_strchomp(input_logfile); /* drop \n */ strcat(input_logfile, ".cbr"); strcpy(output_logfile, "IMPORT_"); strcat(output_logfile, logfile); strcpy(logfile, output_logfile); if ((fp2 = fopen(output_logfile, "w")) == NULL) { tempstrp = g_strdup_printf("Can't open output logfile: %s.", output_logfile); show_readcab_msg(mode, tempstrp); g_free (tempstrp); sleep(2); do_cabrillo = 0; free_cabfmt(cabdesc); return (1); } fclose(fp2); if ((fp1 = fopen(input_logfile, "r")) == NULL) { tempstrp = g_strdup_printf("Can't open input logfile: %s.", input_logfile); show_readcab_msg(mode, tempstrp); g_free (tempstrp); 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.1/src/parse_logcfg.c0000644000175000017500000013155413651752573012640 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 #include "bandmap.h" #include "cw_utils.h" #include "fldigixmlrpc.h" #include "getctydata.h" #include "getpx.h" #include "getwwv.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 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; extern int ctcomp; bool exist_in_country_list(); 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; /* Disable CT Mode until CTCOMPATIBLE is defined. */ ctcomp = 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", "60", "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 char *editor_cmd; 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 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 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 my_country_points; extern int my_cont_points; extern int dx_cont_points; extern int countrylist_points; extern bool countrylist_only; extern int continentlist_points; extern bool continentlist_only; char c_temp[11]; extern bool 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", /* deprecated */ "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]; int ii; 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); wwv_set_r(atoi(fields[1])); break; } case 43: { PARAMETER_NEEDED(teststring); wwv_set_sfi(atoi(fields[1])); break; } case 45: { PARAMETER_NEEDED(teststring); buff[0] = '\0'; editor_cmd = g_strdup(g_strchomp(fields[1])); } 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 = true; if (mult_side == 1) countrylist_only = false; 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 = true; 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 = EXCLUDE_CONTINENT; } 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 = EXCLUDE_COUNTRY; } 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[128]; sprintf(msgbuffer, "Keyword '%s' repeated more than once.\n", keyword); Complain(msgbuffer); } /** Complain about not supported keyword */ void KeywordNotSupported(char *keyword) { char msgbuffer[192]; sprintf(msgbuffer, "Keyword '%s' not supported. See man page.\n", keyword); Complain(msgbuffer); } /** Complain about missing parameter */ void ParameterNeeded(char *keyword) { char msgbuffer[192]; 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[192]; sprintf(msgbuffer, "Wrong parameter format for keyword '%s'. See man page.\n", keyword); Complain(msgbuffer); } tlf-1.4.1/src/printcall.c0000644000175000017500000000365713651752573012177 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 cqmode_t 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.1/src/getexchange.c0000644000175000017500000006267213651752573012473 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 "keystroke_names.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 CTRL_Q: { // 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 CTRL_A: { // Ctrl-A (^A) addspot(); *comment = '\0'; x = TAB; // break; } case KEY_BACKSPACE: { // Erase (^H or ) if (i >= 1) { comment[strlen(comment) - 1] = '\0'; i -= 1; } break; } case ESCAPE: { // 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 = TAB; // } break; } /* I cannot find any reference for this key combination in my * CT ver 9 documentation. As it is, most X window managers * will trap this combination for the window menu so would * only be useful on the console. * * - N0NB */ /* case 160: { // For CT compatibility Meta- (M- ) */ /* if (ctcomp != 0) { */ /* send_standard_message(1); // F2 */ /* } */ /* break; */ /* } */ /* '+', send TU and log in CT mode */ case '+': { if ((ctcomp != 0) && (strlen(hiscall) > 2)) { if (comment[0] == '\0') { x = -1; } else { /* F4 (TU macro) */ send_standard_message(3); /* log without additional message */ x = BACKSLASH; } } break; } /* , send exchange in CT mode */ case KEY_IC: { if (ctcomp != 0) { /* F3 (RST macro) */ send_standard_message(2); } 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 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 CTRL_K: { // 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)) { /* Don't log if exchange field is empty. */ if (comment[0] == '\0') { x = -1; } else { /* Log without sending a message. */ x = BACKSLASH; } } 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 == TAB || x == CTRL_K || x == BACKSLASH) { 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 != TAB) && (strlen(section) < 2)) { mvprintw(13, 54, "section?"); mvprintw(12, 54, comment); x = 0; } else if (((serial_section_mult == 1) || (sectn_mult == 1)) && ((x != TAB) && (strlen(section) < 1))) { if (serial_or_section == 0 || (serial_or_section == 1 && country_found(hiscall))) { 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 == BACKSLASH) { 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 != ESCAPE) && (b <= strlen(comment))) { attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 54, spaces(80 - 54)); mvprintw(12, 54, comment); mvprintw(12, 54 + b, ""); i = key_get(); // Ctrl-A (^A) or , move to beginning of comment field. if (i == CTRL_A || i == KEY_HOME) { b = 0; // Ctrl-E (^E) or , move to end of comment field, exit edit mode. } else if (i == CTRL_E || 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 != ESCAPE) { // 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 = ESCAPE; } } attron(A_STANDOUT); refresh_comment(); } tlf-1.4.1/src/speedupndown.h0000644000175000017500000000207313651752573012716 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.1/src/sendqrg.h0000644000175000017500000000201313651752573011640 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.1/src/store_qso.c0000644000175000017500000000310513651752573012211 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.1/src/makelogline.c0000644000175000017500000002573713651752573012501 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) | freq (7 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", ((unsigned 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, " "); /* goes till 29 */ g_strlcat(logline4, hiscall, 44 + 1); 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.1/src/ui_utils.c0000644000175000017500000001567113651752573012043 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 #include "clear_display.h" #include "clusterinfo.h" #include "keystroke_names.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 (Backspace) and Delete with KEY_BACKSPACE */ if (x == CTRL_H || x == DELETE) x = KEY_BACKSPACE; if (x == ESCAPE) { nodelay(stdscr, TRUE); x = getch(); /* Escape pressed, not an escaped key. */ if (x == ERR) { stoptx(); return x = ESCAPE; } 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(); } #define MAX_SPACES 1000 static char *spaces_buffer = NULL; const char *spaces(int n) { if (spaces_buffer == NULL) { spaces_buffer = g_strnfill(MAX_SPACES, ' '); } if (n < 0) { n = 0; } else if (n > MAX_SPACES) { n = MAX_SPACES; } return spaces_buffer + (MAX_SPACES - n); } tlf-1.4.1/src/log_to_disk.h0000644000175000017500000000167513651752573012507 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 void log_to_disk(int from_lan); #endif /* LOG_TO_DISK_H */ tlf-1.4.1/src/sendbuf.h0000644000175000017500000000213013651752573011623 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.1/src/splitscreen.h0000644000175000017500000000355513651752573012544 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.1/src/qtcvars.h0000644000175000017500000001020113651752573011656 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 #define QTC_CALL_SIZE 15 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[QTC_CALL_SIZE]; // 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[QTC_CALL_SIZE]; // 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[QTC_CALL_SIZE]; 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.1/src/recall_exchange.h0000644000175000017500000000170313651752573013306 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.1/src/rtty.h0000644000175000017500000000224213651752573011203 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() ; void show_rtty(void); #endif /* end of include guard: RTTY_H */ tlf-1.4.1/src/clear_display.h0000644000175000017500000000173113651752573013016 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 show_header_line(void); void clear_display(void); #endif /* CLEAR_DISPLAY_H */ tlf-1.4.1/src/keyer.c0000644000175000017500000001625513651752573011324 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 #include "clear_display.h" #include "keystroke_names.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); void keyer(void) { extern cqmode_t cqmode; 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 keyerstring[KEYER_LINE_WIDTH + 1] = ""; int keyerstringpos = 0; char weightbuf[15]; const char txcontrolstring[2] = { 20, '\0' }; // ^t const char rxcontrolstring[2] = { CTRL_R, '\0' }; // ^r const char crcontrolstring[2] = { RETURN, '\0' }; // cr const char ctl_c_controlstring[2] = { BACKSLASH, '\0' }; // '\' if ((trxmode == CWMODE && cwkeyer == NO_KEYER) || (trxmode == DIGIMODE && digikeyer == NO_KEYER)) { return; /* no keyer present */ } const cqmode_t cqmode_save = cqmode; cqmode = KEYBOARD; show_header_line(); 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; panel = new_panel(win); if (panel == NULL) { delwin(win); return; } } 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 == '"') { x = ' '; } // Send space instead of newline or return. if (x == '\n' || x == KEY_ENTER) { x = ' '; } // , Ctrl-K (^K), Alt-k (M-k) if (x == ESCAPE || x == CTRL_K || x == ALT_K) { 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; } } x = toupper(x); if ((x >= ' ' && x <= 'Z') || x == LINEFEED) { /* ~printable or LF */ if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { mfj1278_control(x); } else if (cwkeyer == NET_KEYER) { keyer_append_char(x); } /* 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 RETURN case RETURN: // Will never happen (converted to space above) case KEY_ENTER: { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(crcontrolstring); } break; } case '{': { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(txcontrolstring); } break; } case '}': { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(rxcontrolstring); } break; } case '\\': { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(ctl_c_controlstring); } break; } case ALT_W: { // 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(); show_header_line(); break; } // , decrease CW speed. case KEY_NPAGE: { speeddown(); show_header_line(); 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: { keyer_append_char('\b'); /* ASCII BS */ break; } } show_panel(panel); } } hide_panel(panel); cqmode = cqmode_save; clear_display(); } /* ---------------- convert input for 1278 ctrl -----------------------*/ void mfj1278_control(int x) { extern int trxmode; if (trxmode == CWMODE || trxmode == DIGIMODE) { if (trxmode == DIGIMODE) { if (x == LINEFEED) x = RETURN; // tnc needs CR instead of LF } keyer_append_char(x); } } tlf-1.4.1/src/sendbuf.c0000644000175000017500000002132213651752573011622 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 "keystroke_names.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 */ } rst_out[0] = his_rst[0]; rst_out[1] = short_number(his_rst[1]); rst_out[2] = short_number(his_rst[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 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; // } } g_strlcpy(printlinebuffer, termbuf, sizeof(printlinebuffer)); 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] = RETURN; 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] = CTRL_R; /* 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] = RETURN; } 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.1/src/logit.h0000644000175000017500000000171713651752573011325 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.1/src/write_keyer.c0000644000175000017500000000660513651752573012534 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); } /** append char to key buffer*/ void keyer_append_char(const char c) { const char buf[] = {c, 0}; keyer_append(buf); } /** 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 */ void 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; pthread_mutex_lock(&keybuffer_mutex); if (data_ready && wkeyerbuffer[0] != 0) { /* allocate a copy of the data and clear the buffer */ tosend = g_strdup(wkeyerbuffer); wkeyerbuffer[0] = '\0'; } data_ready = 0; pthread_mutex_unlock(&keybuffer_mutex); if (tosend == NULL) { return; // nothing to do } 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); } tlf-1.4.1/src/callinput.c0000644000175000017500000007244613651752573012204 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 #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 "keystroke_names.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 "trx_memory.h" #include "ui_utils.h" #include "writeparas.h" #include "showzones.h" #include "bands.h" #include "fldigixmlrpc.h" #define TUNE_UP 6 /* tune up for 6 s (no more than 10) */ typedef enum { STORE_OR_POP, POP, SWAP } memory_op_t; void send_bandswitch(freq_t freq); int autosend(void); int plain_number(char *str); void handle_bandswitch(int direction); void handle_memory_operation(memory_op_t op); 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 cqmode_t cqmode; extern int trxmode; extern char lastcall[]; extern int cqdelay; extern char his_rst[]; extern int cluster; extern int announcefilter; extern char ph_message[14][80]; 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(); 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 (fabs(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(); 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 (fabs(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 == ALT_E) { 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; } } // Shift-F1: switch back (swap) to CQ frequency if it's in memory // and start a CQ if (x == SHIFT_F(1)) { if (cqmode == S_P && memory_get_cqmode() == CQ) { handle_memory_operation(SWAP); } x = KEY_F(1); // continue as F1 } switch (x) { // Plus (+) // - in non-CT mode switch to other mode (CQ <-> S&P) // - in CT mode send TU and log QSO. case '+': { if (!ctcomp) { /* switch to other mode */ if (cqmode == CQ) { cqmode = S_P; } else cqmode = CQ; /* and show new mode */ show_header_line(); } else { if (strlen(hiscall) > 2) { if (((cqww == 1) || (wazmult == 1)) && (*comment == '\0')) strcpy(comment, cqzone); if ((itumult == 1) && (*comment == '\0')) strcpy(comment, ituzone); if (*comment == '\0') { x = -1; } else { /* F4 (TU macro) */ send_standard_message(3); x = '\\'; // key for logging QSO without message } } } break; } // Ctrl-Q (^Q), open QTC window for receiving or sending QTCs. case CTRL_Q: { 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 CTRL_S: { 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 ALT_W: { 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 ALT_V: { if (ctcomp == 1) { while (x != 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 = ESCAPE; 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, log it in CT mode but only if * the exchange field is not empty. */ if (comment[0] == '\0') { x = -1; break; } else { /* Log without sending message. */ x = BACKSLASH; 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(); 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) { /* F3 (RST macro) */ send_standard_message(2); /* Set to space to move cursor to exchange field * which will trigger autofill if available. */ x = ' '; } 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 '#': { handle_memory_operation(STORE_OR_POP); break; } // Dollar, pop memory (MEM -> TRX) case '$': { handle_memory_operation(POP); break; } // Percent, swap memory (MEM <-> TRX) case '%': { handle_memory_operation(SWAP); break; } // Minus, delete previous QSO from log. case '-': { delete_qso(); break; } // Semicolon or Alt-n (M-n), insert note in log. case ';': case ALT_N: { 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 == S_P) { sendspcall(); } else { send_standard_message(0); /* CQ */ } if (simulator != 0) { simulator_mode = 1; } } else { if (cqmode == S_P) 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(); refreshp(); } x = -1; break; } break; } // Alt-r (M-r) or Alt-s (M-s), toggle score window. case ALT_R: case ALT_S: { if (showscore_flag == 0) showscore_flag = 1; else { showscore_flag = 0; } clear_display(); break; } // Alt-k (M-k), synonym for Ctrl-K (^K). case ALT_K: { x = CTRL_K; // Ctrl-K break; } // Alt-a (M-a), cycle cluster window. case ALT_A: { 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 ALT_B: { if (ctcomp == 0) { handle_bandswitch(BAND_UP); } break; } // Alt-j (M-j), show station frequencies. case ALT_J: { if (cluster != FREQWINDOW) { lastwindow = cluster; cluster = FREQWINDOW; } else cluster = lastwindow; break; } // Alt-h (M-h), show help. case ALT_H: { 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 ALT_C: { if (searchflg != SEARCHWINDOW) searchflg = SEARCHWINDOW; else searchflg = 0; break; } // Alt-m (M-m), show multipliers. case ALT_M: { show_mults(); refreshp(); break; } // Alt-p (M-p), toggle PTT via cwdaemon case ALT_P: { 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 == ALT_P) // Alt-P (M-p) netkeyer(K_PTT, "0"); // ptt off k_ptt = 0; show_header_line(); refreshp(); } else netkeyer(K_PTT, "0"); // ptt off in any case. break; } // Alt-t (M-t), tune xcvr via cwdaemon. case ALT_T: { 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 show_header_line(); refreshp(); break; } // Alt-z (M-z), show zones worked. case ALT_Z: { 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 ALT_Q: case ALT_X: { 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 = ESCAPE; break; } // , clear call input or stop sending. case ESCAPE: { 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 CTRL_L: { endwin(); set_term(mainscreen); clear_display(); break; } // Ctrl-P (^P), show MUF display. case CTRL_P: { int currentterm = miniterm; miniterm = 0; muf(); miniterm = currentterm; clear_display(); break; } // Ctrl-A (^A), add a spot and share on LAN. case CTRL_A: { addspot(); HideSearchPanel(); showinfo(SHOWINFO_DUMMY); grab.state = REACHED; grab.spotfreq = freq; break; } // Ctrl-B (^B), send spot to DX cluster. case CTRL_B: { announcefilter = 0; cluster = CLUSTER; send_cluster(); break; } // Ctrl-F (^F), change frequency dialog. case CTRL_F: { change_freq(); break; } // Ctrl-G (^G), grab next DX spot from bandmap. case CTRL_G: { freq_t f = grab_next(); if (f > 0.0) { grab.state = IN_PROGRESS; grab.spotfreq = f; show_header_line(); freqstore = 0; } break; } // Alt-g (M-g), grab first spot matching call field chars. case ALT_G: { double f = grabspot(); if (f > 0.0) { grab.state = IN_PROGRESS; grab.spotfreq = f; show_header_line(); 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 CTRL_R: { 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 CTRL_T: case ALT_I: { 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(); } 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 == SPACE || x == TAB || x == CTRL_K || x == 44 || x == BACKSLASH) { 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 != ESCAPE) && (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 == ESCAPE) { 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); } /** handle TRX memory operation and update screen * **/ void handle_memory_operation(memory_op_t op) { const freq_t newfreq = memory_get_freq(); switch (op) { case STORE_OR_POP: memory_store_or_pop(); break; case POP: memory_pop(); break; case SWAP: memory_swap(); break; } show_header_line(); showinfo(getctydata_pfx(hiscall)); searchlog(); move(12, 29 + strlen(hiscall)); if (newfreq <= 0) { return; // freq not changed } // wait until change is reported back from the rig (timeout: 1 sec) for (int i = 0; i < 20; i++) { if (fabs(freq - newfreq) < 100) { break; } usleep(50000); } } tlf-1.4.1/src/calledit.c0000644000175000017500000001305613651752573011762 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011 Thomas Beierlein #include "getctydata.h" #include "keystroke_names.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 != ESCAPE) && (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 != ESCAPE) cnt = 0; } // if (i == TAB) block_part = 1; else block_part = 0; // Ctrl-A (^A) or , move to head of callsign field. if (i == CTRL_A || i == KEY_HOME) { b = 0; x = 0; } // Ctrl-E (^E) or , move to end of callsign field, exit edit mode. if (i == CTRL_E || 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(); // } 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(); } // } else if (i == KEY_IC) { if (insertflg == 0) insertflg = 1; else insertflg = 0; // Any character left other than . } else if (i != ESCAPE) { // 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(); } else if (x != 0) i = ESCAPE; } else i = ESCAPE; } attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 29, " "); mvprintw(12, 29, hiscall); refreshp(); attron(A_STANDOUT); searchlog(); } 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 != ESCAPE) { ichr = key_get(); // Leave insert mode if , , or are received. if ((ichr == TAB) || (ichr == '\n') || (ichr == KEY_ENTER) || (ichr == DELETE)) 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 = ESCAPE; return (ichr); } tlf-1.4.1/src/nicebox.h0000644000175000017500000000207313651752573011632 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.1/src/logview.c0000644000175000017500000000302013651752573011643 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[]; 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.1/src/last10.h0000644000175000017500000000163713651752573011314 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.1/src/muf.h0000644000175000017500000000167513651752573011001 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 extern int month; void muf(void); #endif /* end of include guard: MUF_H */ tlf-1.4.1/src/addarea.c0000644000175000017500000000523213651752573011557 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.1/src/write_keyer.h0000644000175000017500000000202513651752573012531 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_append_char(const char c); void keyer_flush(); void write_keyer(void); #endif /* WRITE_KEYER_H */ tlf-1.4.1/src/stoptx.c0000644000175000017500000000304013651752573011532 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.1/src/ignore_unused.h0000644000175000017500000000017413651752573013051 00000000000000#ifndef IGNORE_UNUSED_H #define IGNORE_UNUSED_H #define IGNORE(x) do { \ if (x) \ (void)0; \ } while(0) #endif tlf-1.4.1/src/displayit.h0000644000175000017500000000200413651752573012177 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.1/src/audio.c0000644000175000017500000001370213651752573011300 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 #include "ignore_unused.h" #include "keystroke_names.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, backgrnd_str); 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() == ESCAPE) { //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++; } g_strlcpy(printname, soundfilename->d_name, 7); 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 ESCAPE: runnit = 0; } } } tlf-1.4.1/src/background_process.c0000644000175000017500000002343413651752573014057 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.1/src/muf.c0000644000175000017500000002665213651752573010776 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 #include "dxcc.h" #include "get_time.h" #include "globalvars.h" #include "getwwv.h" #include "sunup.h" #include "qrb.h" #include "tlf_panel.h" #include "ui_utils.h" // message splitters: // line[0] - original line, content can be modified in-place // line[1],line[2] - pointers to subsequent lines within line[0], initially NULL static void split_condx(const int len, char **line) { if (len < 40) { return; } char *p = line[0] + 39; while (*p != ' ' && p > line[0]) { // find a space before index 39 --p; } if (p > line[0]) { *p = 0; line[1] = p + 1; } else { // no space found, truncate (should not happen) line[0][40] = 0; } } /* WCY de DK0WCY-1 <12> : K=2 expK=0 A=19 R=11 SFI=74 SA=qui GMF=qui Au=no ^ ^ WCY de DK0WCY-1 <12> : K=2 expK=0 A=19 R=11 SFI=74 SA=qui GMF=qui Au=no */ static void split_wcy(const int len, char **line) { char *p = strchr(line[0], ':'); // first colon if (p != NULL && p + 2 < line[0] + len) { p[1] = 0; line[1] = p + 2; p = strstr(line[1], "SFI"); if (p != NULL) { p = strchr(p, ' '); // the space after SFI } if (p != NULL) { p[0] = 0; line[2] = p + 1; } } } /* WWV de VE7CC <21>: SFI=74, A=9, K=1, No Storms -> No Storms ^ ^ WWV de VE7CC <21>: SFI=74, A=9, K=1, No Storms -> No Storms */ static void split_wwv(const int len, char **line) { char *p = strstr(line[0], "SFI"); if (p != NULL && p - 1 >= line[0]) { p[-1] = 0; // the space before SFI line[1] = p; p = strstr(line[1], "K="); if (p != NULL) { p = strchr(p, ' '); // the space after K } if (p != NULL) { p[0] = 0; line[2] = p + 1; } } } static void show_condx(WINDOW *win) { if (lastwwv[0] == 0) { mvwaddstr(win, 10, 40, "Condx: n/a"); // no data return; } static GRegex *squash_regex = NULL; if (squash_regex == NULL) { squash_regex = g_regex_new(" {2,}", 0, 0, NULL); } // squash spaces and show condx gchar *condx = g_regex_replace_literal(squash_regex, lastwwv, -1, 0, " ", 0, NULL); char *line[3] = {condx, NULL, NULL}; split_condx(strlen(condx), line); mvwaddstr(win, 10, 40, line[0]); if (line[1] != NULL) { mvwaddstr(win, 11, 40, line[1]); } g_free(condx); // show original WWV message, split into up to 3 lines if needed line[0] = g_strdup(lastwwv_raw); line[1] = line[2] = NULL; const int len = strlen(lastwwv_raw); if (strncmp(lastwwv_raw, "WCY", 3) == 0) { split_wcy(len, line); } else { split_wwv(len, line); } for (int i = 0; i < 3; ++i) { if (line[i] != NULL) { mvwaddstr(win, 14 + i, 40, line[i]); } } g_free(line[0]); } /********************************************************************* Code below is based on MICROMUF.PAS http://www.classiccmp.org/cpmarchives/cpm/Software/WalnutCD/cpm/hamradio/micromuf.pas Original attribution: --------------------------------------------------------------------- This program uses 'MINI-F2' devised by R. Fricker (BBC external services) for FO-F calculations and L.M. Muggleton's formula for FO-E calculations. For the L.U.F. a minimum useable fieldstrength of 30 DBUV at the receiver and 250 KW of transmitter power (aerial gain: 18 DBI) are assumed. The L.U.F. is derived from absorption calculations based on the work of Piggot, George, Samuel, and Bradley. In spite of the program's simplicity it gives a good impression of the ionosphere's behaviour and can be used for propagation predictions. Hans Bakhuizen Propagation Unit; Frequency Bureau Radio Netherlands P.O. Box 222 1200 JG Hilversum Holland (C) Copyright Media Network June 1984 Translation from Basic into TURBO Pascal by Jonathan D Ogden on September 26, 1986. Jonathan D Ogden 402 e Daniel Champaign, Il 61820 USA --------------------------------------------------------------------- *********************************************************************/ int month; extern struct tm *time_ptr; double yt; double xt; double yr; double xr; int t; double xn, xs, ls, h, ff, x, yn_, k, lm, u, a; static double power(man, ex) double man, ex; { return exp(ex * log(man)); } static void interlat() { double yi, q; /* 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 = month; 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 - ssn_r / 175.0) * (7.0 - sx * 3.0 + wx * 4.0 - ssn_r / (150.0 - wx * 75.0)); if (fabs(yf) > 60.0) yf = 60.0; x = 1 + ssn_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; 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 * ssn_r) * power(cos(xz / RADIAN), ex); } else { ex = -0.5; fe = 3.4 * (1.0 + 0.0016 * ssn_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; } void muf(void) { extern double QTH_Lat; extern double QTH_Long; extern double DEST_Lat; extern double DEST_Long; double sunrise; double sundown; int row; double la, l, mf, lh; dxcc_data *dx; char country[40]; int i; char time_buf[25]; int su, sd, su_min, sd_min; double ab; double n; double td; double q; n = 0.0; xt = QTH_Lat; yt = QTH_Long; xr = DEST_Lat; yr = DEST_Long; dx = dxcc_by_index(countrynr); strncpy(country, dx->countryname, 25); get_time(); 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 = ARC_IN_KM * 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 + ssn_r / 2; xs = 23.4 * cos(30 * (month - 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; } WINDOW *win = newwin(LINES, 80, 0, 0); PANEL *pan = new_panel(win); 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, 0, " SSN: %3.0f ", ssn_r); if (countrynr != 0) { mvwprintw(win, 1, 40, "%s", country); mvwprintw(win, 3, 40, "Dist : %5.0f km", l); mvwprintw(win, 4, 40, "Azim : %3.0f degrees", u); 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); } show_condx(win); // show frequency chart 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"); if (countrynr != 0) { 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; double ve = 21 - (long) floor(mf / 2.0 + 0.5); double 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(); key_get(); hide_panel(pan); del_panel(pan); delwin(win); } tlf-1.4.1/src/initial_exchange.h0000644000175000017500000000320313651752573013472 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.1/src/trx_memory.c0000644000175000017500000000426513651752573012410 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2020 Zoltan Csahok * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public 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 "callinput.h" #include "gettxinfo.h" #include "globalvars.h" #include "time_update.h" #include "tlf.h" extern cqmode_t cqmode; typedef struct { freq_t freq; cqmode_t cqmode; char hiscall[20]; } mem_t; static mem_t trxmem = {.freq = 0, .cqmode = NONE}; void memory_store() { trxmem.freq = freq; trxmem.cqmode = cqmode; strcpy(trxmem.hiscall, hiscall); force_show_freq = true; } void memory_recall() { if (trxmem.freq <= 0) { return; } set_outfreq(trxmem.freq); send_bandswitch(trxmem.freq); cqmode = trxmem.cqmode; strcpy(hiscall, trxmem.hiscall); force_show_freq = true; } void memory_pop() { if (trxmem.freq <= 0) { return; } memory_recall(); trxmem.freq = 0; trxmem.cqmode = NONE; } void memory_store_or_pop() { if (trxmem.freq <= 0) { memory_store(); } else { memory_pop(); } } void memory_swap() { if (trxmem.freq <= 0) { return; } freq_t tmp_freq = freq; cqmode_t tmp_cqmode = cqmode; char tmp_hiscall[sizeof(trxmem.hiscall)]; strcpy(tmp_hiscall, hiscall); memory_recall(); trxmem.freq = tmp_freq; trxmem.cqmode = tmp_cqmode; strcpy(trxmem.hiscall, tmp_hiscall); } freq_t memory_get_freq() { return trxmem.freq; } cqmode_t memory_get_cqmode() { return trxmem.cqmode; } tlf-1.4.1/src/listmessages.h0000644000175000017500000000171613651752573012711 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.1/src/qtc_log.c0000644000175000017500000001730313651752573011630 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.1/src/genqtclist.c0000644000175000017500000000706213651752573012356 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; g_strlcpy(qtclist.callsign, callsign, sizeof(qtclist.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 */ g_strlcpy(tstring, qsoline + 54, sizeof(tstring)); nr = atoi(tstring); // 3 digit if ((nr >= 0) && (nr < 1000)) { sprintf(tstring, "%03d ", nr); } // 4 digit else if ((nr >= 0) && (nr < 10000)) { sprintf(tstring, "%d", nr); } else { // ignore all other exchange values strcpy(tstring, " "); } strcpy(qtc + qpos, tstring); qpos += 4; qtc[qpos] = '\0'; } tlf-1.4.1/src/writeparas.c0000644000175000017500000001046313651752573012361 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 const 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.1/src/score.c0000644000175000017500000002325413651752573011315 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 #include #include "focm.h" #include "getctydata.h" #include "locator2longlat.h" #include "qrb.h" #include "tlf.h" extern char countrylist[][6]; extern char continent_multiplier_list[7][3]; int calc_continent(int zone); /* check if countrynr is in countrylist */ bool is_in_countrylist(int countrynr) { int i = 0; while (strlen(countrylist[i]) != 0) { if (getctynr(countrylist[i]) == countrynr) { return true; } i++; } return false; } /* check if hiscall is in COUNTRY_LIST from logcfg.dat */ bool country_found(char prefix[]) { extern int countrynr; extern char hiscall[]; extern char call[]; char tmpcall[15]; if (strlen(hiscall) == 0) { strcpy(tmpcall, call); } else strcpy(tmpcall, hiscall); countrynr = getctydata(tmpcall); return is_in_countrylist(countrynr); } bool exist_in_country_list() { extern char pxstr[]; char prefix[10]; strcpy(prefix, pxstr); if (country_found(prefix)) { return true; } if (!isdigit(prefix[strlen(prefix) - 1])) { /* last char '0'..'9' */ return false; } prefix[strlen(prefix) - 1] = '\0'; /* strip trailing digit */ if (country_found(prefix)) { /* and try again */ return true; } if (!isdigit(prefix[strlen(prefix) - 1])) { return false; } prefix[strlen(prefix) - 1] = '\0'; /* last try */ return country_found(prefix); } /* HA2OS - check if continent is in CONTINENT_LIST from logcfg.dat */ bool is_in_continentlist(char *continent) { int i = 0; while (strlen(continent_multiplier_list[i]) != 0) { if (strcmp(continent_multiplier_list[i], continent) == 0) { return true; } i++; } return false; } /* 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 bool countrylist_only; extern bool 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) { 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 */ if (continentlist_only) { // only continent list allowed if (is_in_continentlist(continent)) { // are we are on DX continent or not 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.1/src/rules.c0000644000175000017500000000637013651752573011334 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.1/src/get_time.c0000644000175000017500000000271313651752573011774 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.1/src/tlf_panel.h0000644000175000017500000000251713651752573012152 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.1/src/err_utils.c0000644000175000017500000000275313651752573012213 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 #include #include #include #include "err_utils.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" 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.1/src/netkeyer.h0000644000175000017500000000304413651752573012030 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.1/src/qtc_log.h0000644000175000017500000000230213651752573011626 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.1/src/readcabrillo.h0000644000175000017500000000172013651752573012624 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.1/src/Makefile.am0000644000175000017500000000600713651752573012067 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 log_utils.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\ trx_memory.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 \ 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 keystroke_names.h \ lancode.h last10.h listmessages.h log_utils.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 rtty.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 \ time_update.h tlf.h tlf_curses.h tlf_panel.h trx_memory.h \ ui_utils.h \ write_keyer.h writecabrillo.h writeparas.h \ zone_nr.h tlf-1.4.1/src/dxcc.h0000644000175000017500000000320513651752573011122 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; unsigned short cq; unsigned short itu; short dxcc_index; float lat; float lon; char *continent; float timezone; bool exact; } prefix_data; typedef struct { char *countryname; unsigned short cq; unsigned 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.1/src/log_to_disk.c0000644000175000017500000000744313651752573012501 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 */ void 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 cqmode_t 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 */ strcpy(last_rst, his_rst); /* remember last report */ cleanup_qso(); /* reset qso related parameters */ } else { // qso from lan strncpy(lan_logline, lan_message + 2, 87); strcat(lan_logline, spaces(78)); if (cqwwm2 == 1) { if (lan_message[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, spaces(80 - 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); } tlf-1.4.1/src/changepars.c0000644000175000017500000005565013651752573012322 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 "keystroke_names.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 packetinterface; extern int nopacket; extern int cqdelay; extern int ctcomp; extern char *config_file; extern int miniterm; extern int simulator; extern int cwkeyer; extern char synclogfile[]; extern char sc_volume[]; extern int cwstart; extern int digikeyer; extern cqmode_t cqmode; char parameterstring[20] = ""; char parameters[52][19]; 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(); 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(); edit(config_file); 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 */ log_read_n_score(); clear_display(); break; } case 42: { /* RESCORE */ /** \todo register return value */ log_read_n_score(); 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 == ESCAPE) break; x = x - '0'; } /* remember new setting */ if (x != ESCAPE) { 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 < LINES - 2; 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(LINES - 2, 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; attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 0; j < LINES; j++) mvprintw(j, 0, backgrnd_str); } tlf-1.4.1/src/addcall.h0000644000175000017500000000203713651752573011567 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.1/src/dxcc.c0000644000175000017500000001266313651752573011125 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.1/src/set_tone.c0000644000175000017500000000445113651752573012020 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.1/src/sockserv.c0000644000175000017500000003223413651752573012037 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.1/src/ui_utils.h0000644000175000017500000000233113651752573012035 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(); const char *spaces(int); #endif /* UI_UTILS_H */ tlf-1.4.1/src/clear_display.c0000644000175000017500000001063313651752573013012 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 "getwwv.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "muf.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 show_header_line() { extern cqmode_t cqmode; extern int cqdelay; extern const char headerline[]; char *mode = ""; switch (cqmode) { case CQ: mode = "Log"; break; case S_P: mode = "S&P"; break; case AUTO_CQ: mode = "AUTO_CQ"; break; case KEYBOARD: mode = "Keyboard"; break; default: ; // should not happen } attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvaddstr(0, 0, spaces(29)); mvprintw(0, 0, " %-8s S=%2i D=%i ", mode, GetCWSpeed(), cqdelay); mvaddstr(0, 21, headerline); } void clear_display(void) { extern char terminal1[]; extern char terminal2[]; extern char terminal3[]; extern char terminal4[]; 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 int searchflg; extern struct tm *time_ptr; extern char whichcontest[]; extern int no_rst; char time_buf[80]; int cury, curx; getyx(stdscr, cury, curx); show_header_line(); 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); month = time_ptr->tm_mon; /* month for muf calc */ mvaddstr(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(); printcall(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvaddstr(LINES - 1, 0, backgrnd_str); wwv_show_footer(); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); move(cury, curx); refreshp(); } tlf-1.4.1/src/showzones.c0000644000175000017500000000424513651752573012240 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.1/src/qtcwin.h0000644000175000017500000000170713651752573011513 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.1/src/getpx.h0000644000175000017500000000164713651752573011340 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.1/src/lancode.h0000644000175000017500000000262313651752573011611 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.1/src/searchlog.c0000644000175000017500000005411113651752573012145 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 #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] = {' ', ' ', ' ', ' ', ' ', ' '}; 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, spaces(37)); 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); } } #define PARTIALS_ROWS 5 #define PARTIALS_COLS 40 // including margins (1+1 columns) #define PARTIALS_Y0 1 #define PARTIALS_X0 0 // // return: true if display is full // static bool show_partial(int *row, int *col, char *call, GHashTable *callset, int *nr_suggested, char *suggested_call) { const int len = strlen(call); bool space = (*col > 1); // whether to put leading space int new_col = *col + (space ? 1 : 0) + len; if (new_col >= PARTIALS_COLS) { // doesn't fit on this line *row += 1; // start next one *col = 1; space = false; new_col = *col + len; } if (*row >= PARTIALS_ROWS) { return true; // display full } if (!g_hash_table_add(callset, call)) { return false; // already shown } mvprintw(PARTIALS_Y0 + *row, PARTIALS_X0 + *col, "%s%s", (space ? " " : ""), call); *col = new_col; if (*nr_suggested == 0) { // remember first partial call strcpy(suggested_call, call); } *nr_suggested += 1; return false; // assume it's not full yet } int displayPartials(char *suggested_call) { extern int dupe; int row, col, k; char *loc; char printres[14] = ""; int suggested = 0; const int hislen = strlen(hiscall); if (hislen < 2) { return 0; // input too short } row = 0; col = 1; // 1 column left margin attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); for (k = 0; k < PARTIALS_ROWS; k++) { mvprintw(PARTIALS_Y0 + k, 0, "%*s", PARTIALS_COLS, ""); } 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. */ if (dupe == ISDUPE) { attrset(COLOR_PAIR(C_DUPE)); } else { attron(modify_attr(COLOR_PAIR(C_BORDER) | A_STANDOUT)); } GHashTable *callset = g_hash_table_new(g_str_hash, g_str_equal); int full = 0; for (k = 0; k < srch_index && !full; k++) { if (strlen(searchresult[k]) <= 2) { continue; // too short (unlikely) } if (strstr(searchresult[k], hiscall) == NULL) { continue; // not matching } printres[0] = '\0'; strncat(printres, searchresult[k] + 29, 12); /* cut string just at first space after call */ loc = strchr(printres, ' '); if (loc) *loc = '\0'; full = show_partial(&row, &col, printres, callset, &suggested, suggested_call); } attron(COLOR_PAIR(C_LOG) | A_STANDOUT); attroff(A_BOLD); /* and now check callmaster database */ attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); // make 2 runs: fist look for calls starting with // then the ones containing 'hiscall' for (int run = 1; run <= 2; run++) { for (k = 0; k < callmaster->len && !full; k++) { char *mastercall = CALLMASTERARRAY(k); int match; if (run == 1) { // starts with match = (strncmp(mastercall, hiscall, hislen) == 0); } else { // contains match = (strstr(mastercall, hiscall) != NULL); } if (!match) { continue; // not matching } full = show_partial(&row, &col, mastercall, callset, &suggested, suggested_call); } } g_hash_table_destroy(callset); return suggested; } /* Display list of partials and handle USEPARTIALS 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); /* 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 && !block_part && 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; } // // return true if the qso was in the same mode as the current one // static bool is_current_mode(const char *qso) { extern int trxmode; extern int mixedmode; if (mixedmode) { return true; // always true in mixed mode } if (qso[3] == 'S') { return trxmode == SSBMODE; } if (qso[3] == 'D') { return trxmode == DIGIMODE; } return trxmode == CWMODE; // default } /* search complete Log for 'hiscall' as substring in callsign field and * copy found QSO to 'searchresults'. Extract relevant data to 'result'. * */ void filterLog() { extern char qsos[MAX_QSOS][LOGLINELEN + 1]; char s_inputbuffer[LOGLINELEN + 1] = ""; srch_index = 0; for (int qso_index = 0; strlen(qsos[qso_index]) > 4; qso_index++) { if (!is_current_mode(qsos[qso_index])) { continue; // different mode } g_strlcpy(s_inputbuffer, qsos[qso_index] + 29, 13); /* call */ if (strstr(s_inputbuffer, hiscall) == 0) { continue; // no match } g_strlcpy(searchresult[srch_index], qsos[qso_index], 81); extractData(srch_index); if (srch_index++ > MAX_CALLS - 1) { break; } } } // // check if station was worked in the current minitest period // it takes into account actual mode/band info // bool worked_in_current_minitest_period(int found) { if (found < 0) { return false; } if (!minitest) { return true; // minitest is off, so the answer is yes } long currtime = (long) mktime(time_ptr); long period_start = (currtime / minitest) * minitest; return worked[found].qsotime[trxmode][bandinx] >= period_start; } void displaySearchResults(void) { extern int dupe; extern int ignoredupe; extern int qso_once; extern int mixedmode; extern int ignoredupe; extern int bandinx; extern char band[NBANDS][4]; int r_index; char s_inputbuffer[LOGLINELEN + 1] = ""; char qtccall[15]; // temp str for qtc search bool display_dupe; int z, l, j; 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? */ int found = searchcallarray(hiscall); display_dupe = worked_in_current_minitest_period(found); if (display_dupe && is_current_mode(s_inputbuffer)) { 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() { 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; } } GHashTable *callset = g_hash_table_new(g_str_hash, g_str_equal); 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; } char *call = g_ascii_strup(s_inputbuffer, 11); if (arrlss) { /* keep only NA stations */ if (strchr("AKWVCN", call[0]) == NULL) { g_free(call); continue; } } if (g_hash_table_contains(callset, call)) { // already have this call g_free(call); continue; } g_hash_table_add(callset, call); g_ptr_array_add(callmaster, call); } g_hash_table_destroy(callset); 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, spaces(37)); 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() ? 10 : 6); wattrset(search_win, modify_attr(COLOR_PAIR(C_BORDER))); mvwprintw(search_win, y, x, str); } tlf-1.4.1/src/clusterinfo.h0000644000175000017500000000201513651752573012534 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.1/src/focm.c0000644000175000017500000001526113651752573011125 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.1/src/showscore.c0000644000175000017500000002374613651752573012224 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 "bands.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" #include "ui_utils.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 }; 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, spaces(80 - 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, spaces(80 - 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", bandindex2nr(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, spaces(80 - START_COL)); mvprintw(4, START_COL, spaces(80 - START_COL)); mvprintw(5, START_COL, spaces(80 - 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' */ void 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) { return; } /* 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, spaces(19)); 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(); } /** 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.1/src/log_utils.c0000644000175000017500000000410113651752573012171 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 */ /* ------------------------------------------------------------------------ * util functions to work with lines from log * ---------------------------------------------------------------------------*/ #include #include #include #include #include #include "bands.h" /* for the following code we assume that we have well formatted log lines, * which has to be checked separately if needed */ /** check if logline is only a comment */ bool log_is_comment(char *buffer) { if (buffer[0] != ';') return 0; else return 1; } /** read bandindex from logline */ int log_get_band(char *logline) { int nr = 0; char band[4]; g_strlcpy(band, logline, 4); nr = atoi(band); return bandnr2index(nr); } /** read mode from logline * -1 if no recognized mode */ int log_get_mode(char *logline) { if (strncasecmp("CW ", logline + 3, 3) == 0) { return CWMODE; } if (strncasecmp("SSB", logline + 3, 3) == 0) { return SSBMODE; } if (strncasecmp("DIG", logline + 3, 3) == 0) { return DIGIMODE; } return -1; } /** read points from logline */ int log_get_points(char *logline) { char tmpbuf[3]; g_strlcpy(tmpbuf, logline + 76, 3); return atoi(tmpbuf); } tlf-1.4.1/src/changepars.h0000644000175000017500000000201513651752573012312 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.1/src/log_utils.h0000644000175000017500000000234313651752573012204 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 */ /* ------------------------------------------------------------------------ * util functions to work with lines from log * ---------------------------------------------------------------------------*/ #ifndef LOG_UTILS_H #define LOG_UTILS_H #include bool log_is_comment(char *buffer); int log_get_band(char *logline); int log_get_mode(char *logline); int log_get_points(char *logline); #endif tlf-1.4.1/src/logit.c0000644000175000017500000001305613651752573011317 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 "keystroke_names.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 int trxmode; extern char hiscall[]; extern cqmode_t 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; cleanup(); 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 = BACKSLASH; strcpy(comment, cqzone); } if ((callreturn == TAB || callreturn == SPACE)) { 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 == BACKSLASH) && (*hiscall != '\0')) { defer_store = 0; log_to_disk(false); if (sprint_mode == 1) { change_mode(); } HideSearchPanel(); } if (callreturn == CTRL_K || 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, spaces(80 - 54)); mvprintw(12, 54, comment); } void change_mode(void) { extern cqmode_t cqmode; /* switch to other mode */ if (cqmode == CQ) { cqmode = S_P; } else { cqmode = CQ; } /* and show new mode */ show_header_line(); } tlf-1.4.1/src/splitscreen.c0000644000175000017500000006341713651752573012542 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 "getwwv.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" 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 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); wwv_add(s); 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 { *t++ = *s & 0x7f; } } *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, spaces(43)); get_time(); 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.1/src/showscore.h0000644000175000017500000000212213651752573012212 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(); void showscore(void); #endif /* SHOWSCORE_H */ tlf-1.4.1/src/qsonr_to_str.h0000644000175000017500000000167013651752573012741 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 void qsonr_to_str(void); #endif /* QSONR_TO_STR_H */ tlf-1.4.1/src/edit_last.c0000644000175000017500000001373413651752573012154 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 "keystroke_names.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 != ESCAPE && j != '\n' && j != KEY_ENTER) { highlight_line(editline, editbuffer, b); j = key_get(); // Ctrl-A (^A) or , beginning of line. if (j == CTRL_A || j == KEY_HOME) { b = 1; // Ctrl-E (^E) or , end of line. } else if (j == CTRL_E || j == KEY_END) { b = 77; // , next field. } else if (j == TAB) { 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 = ESCAPE; } // 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 = 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 != ESCAPE) { // 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.1/src/addmult.h0000644000175000017500000000252713651752573011641 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.1/src/displayit.c0000644000175000017500000000342013651752573012175 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 "tlf.h" #include "clear_display.h" #include "tlf_curses.h" void displayit(void) { extern char termbuf[]; 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.1/src/addmult.c0000644000175000017500000002703413651752573011634 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.1/src/getctydata.h0000644000175000017500000000203013651752573012325 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.1/src/genqtclist.h0000644000175000017500000000174713651752573012367 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.1/src/qtcutil.h0000644000175000017500000000262713651752573011675 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.1/src/changefreq.h0000644000175000017500000000166113651752573012310 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.1/src/readcalls.c0000644000175000017500000003112013651752573012123 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 * *--------------------------------------------------------------*/ #ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE #endif #include #include #include #include #include #include "addmult.h" #include "addpfx.h" #include "bands.h" #include "cabrillo_utils.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 "log_utils.h" #include "paccdx.h" #include "readqtccalls.h" #include "score.h" #include "searchcallarray.h" #include "startmsg.h" #include "tlf_curses.h" #include "zone_nr.h" extern bool continentlist_only; extern int pfxnummultinr; extern t_pfxnummulti pfxnummulti[]; extern int exclude_multilist_type; void init_scoring(void) { /* reset counter and score anew */ for (int i = 0; i < MAX_QSOS; i++) qsos[i][0] = '\0'; for (int i = 0; i < MAX_CALLS; i++) { *worked[i].exchange = '\0'; *worked[i].call = '\0'; worked[i].band = 0; worked[i].country = -1; for (int l = 0; l < 3; l++) { for (int n = 0; n < NBANDS; n++) { worked[i].qsotime[l][n] = 0; } } } nr_worked = 0; for (int i = 1; i <= MAX_DATALINES - 1; i++) countries[i] = 0; for (int i = 0; i < NBANDS; i++) band_score[i] = 0; for (int i = 0; i < NBANDS; i++) countryscore[i] = 0; for (int n = 1; n < MAX_ZONES; n++) zones[n] = 0; for (int n = 0; n < NBANDS; n++) zonescore[n] = 0; init_mults(); InitPfx(); if (pfxnummultinr > 0) { for (int i = 0; i < pfxnummultinr; i++) { for (int n = 0; n < NBANDS; n++) { pfxnummulti[i].qsos[n] = 0; } } } } void show_progress(int linenr) { if (((linenr + 1) % 100) == 0) { printw("*"); refreshp(); } } // lookup the current country 'n' from the outer loop // pfxnummulti[I].countrynr contains the country codes, // I:=[0..pfxnummultinr] // according to 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 int lookup_country_in_pfxnummult_array(int n) { int found = -1; for (int i = 0; i < pfxnummultinr; i++) { if (pfxnummulti[i].countrynr == n) { found = i; break; } } return found; } bool check_veto() { bool excl_add_veto = false; if (!continentlist_only && exclude_multilist_type == EXCLUDE_CONTINENT) { if (is_in_continentlist(continent)) { excl_add_veto = true; } } if (exclude_multilist_type == EXCLUDE_COUNTRY) { if (is_in_countrylist(countrynr)) { excl_add_veto = true; } } return excl_add_veto; } /* pick up multi string from logline * * ATTENTION! return value needs to be freed */ char *get_multi_from_line(char *logline) { char *multbuffer = g_malloc(20); if (arrlss == 1) { if (logline[63] == ' ') g_strlcpy(multbuffer, logline + 64, 4); else g_strlcpy(multbuffer, logline + 63, 4); } else if (serial_section_mult == 1) { g_strlcpy(multbuffer, logline + 68, 4); g_strchomp(multbuffer); } else if (sectn_mult == 1) { g_strlcpy(multbuffer, logline + 68, 4); g_strchomp(multbuffer); } else if (serial_grid4_mult == 1) { g_strlcpy(multbuffer, logline + 59, 5); } else if (unique_call_multi != 0) { g_strlcpy(multbuffer, logline + 68, 10); g_strchomp(multbuffer); } else { g_strlcpy(multbuffer, logline + 54, 11); // normal case g_strchomp(multbuffer); } return multbuffer; } void count_if_worked(int check, unsigned int bandindex, int *count) { if (bandindex >= NBANDS) return; if ((check & inxes[bandindex]) != 0) count[bandindex]++; } void count_contest_bands(int check, int *count) { count_if_worked(check, BANDINDEX_160, count); count_if_worked(check, BANDINDEX_80, count); count_if_worked(check, BANDINDEX_40, count); count_if_worked(check, BANDINDEX_20, count); count_if_worked(check, BANDINDEX_15, count); count_if_worked(check, BANDINDEX_10, count); } int readcalls(void) { char inputbuffer[LOGLINELEN + 1]; char tmpbuf[20]; char checkcall[20]; int z = 0; bool add_ok; char presentcall[20]; // copy of call.. char *tmpptr; int pfxnumcntidx; int pxnr; bool excl_add_veto; struct tm qsotime; int qsomode; int linenr = 0; int bandindex = BANDINDEX_OOB; FILE *fp; showmsg("Reading logfile... "); refreshp(); init_scoring(); if ((fp = fopen(logfile, "r")) == NULL) { showmsg("Error opening logfile "); refreshp(); sleep(2); exit(1); } while (fgets(inputbuffer, LOGLINELEN + 1, fp) != NULL) { int l = 0; // drop trailing newline inputbuffer[LOGLINELEN - 1] = '\0'; // remember logline in qsos[] field g_strlcpy(qsos[linenr], inputbuffer, sizeof(qsos[0])); linenr++; show_progress(linenr); if (log_is_comment(inputbuffer)) continue; /* skip note in log */ // prepare helper variables pfxnumcntidx = -1; pxnr = 0; /* get bandindex */ bandindex = log_get_band(inputbuffer); /* get the country number, not known at this point */ g_strlcpy(presentcall, inputbuffer + 29, 14); tmpptr = strchr(presentcall, ' '); if (tmpptr) *tmpptr = '\0'; strcpy(tmpbuf, presentcall); countrynr = getctydata(tmpbuf); if (continentlist_only) { if (!is_in_continentlist(continent)) { band_score[bandindex]++; continue; } } if (contest == 1) { // get points total = total + log_get_points(inputbuffer); if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) { // get the zone z = zone_nr(inputbuffer + 54); } 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)))) { // get multi info char *multbuffer = get_multi_from_line(inputbuffer); remember_multi(multbuffer, bandindex, 0); g_free(multbuffer); } } /* lookup worked stations */ l = searchcallarray(presentcall); if (l == -1) { /* if not found, use next free slot */ l = nr_worked; nr_worked++; } /* and fill in according entry */ g_strlcpy(worked[l].call, presentcall, sizeof(worked[0].call)); worked[l].country = countrynr; g_strlcpy(worked[l].exchange, inputbuffer + 54, 12); g_strchomp(worked[l].exchange); /* strip trailing spaces */ qsomode = log_get_mode(inputbuffer); if (qsomode == -1) { 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)); strptime(inputbuffer + 7, "%d-%b-%y %H:%M", &qsotime); worked[l].qsotime[qsomode][bandindex] = mktime(&qsotime); if (pfxmultab == 1) { getpx(presentcall); add_pfx(pxstr, bandindex); } /* look if calls are excluded */ add_ok = true; if ((arrldx_usa == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) add_ok = false; if (pacc_pa_flg == 1) { strcpy(hiscall, presentcall); add_ok = pacc_pa(); if (add_ok == false) { band_score[bandindex]++; } hiscall[0] = '\0'; } if (pfxnummultinr > 0) { getpx(presentcall); pxnr = pxstr[strlen(pxstr) - 1] - 48; getctydata(presentcall); pfxnumcntidx = lookup_country_in_pfxnummult_array(countrynr); add_ok = true; } excl_add_veto = check_veto(); if (add_ok) { worked[l].band |= inxes[bandindex]; /* mark band as worked */ band_score[bandindex]++; /* qso counter per band */ if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) zones[z] |= inxes[bandindex]; if (pfxnumcntidx < 0) { if (!excl_add_veto) { countries[countrynr] |= inxes[bandindex]; } } else { pfxnummulti[pfxnumcntidx].qsos[pxnr] |= inxes[bandindex]; } } } fclose(fp); /* all lines red, now build other statistics */ if (wpx == 1) { /* build prefixes_worked array from list of worked stations */ InitPfx(); for (int n = 0; n < nr_worked; n++) { strcpy(checkcall, worked[n].call); getpx(checkcall); /* FIXME: wpx is counting pfx only once so bandindex is not * really needed here. If you have wpx and pfxmultab set the * count for the last read band wil be wrong as all pfx will be * counted for that band. * Maybe better use BANDINDEX_OOB here: * - Will count pfx for wpx correctly * - but will not change counts for pfxmultab on contest bands */ add_pfx(pxstr, BANDINDEX_OOB); } } if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) { for (int n = 1; n < MAX_ZONES; n++) { count_contest_bands(zones[n], zonescore); } } if (cqww == 1) { for (int n = 1; n <= MAX_DATALINES - 1; n++) { count_contest_bands(countries[n], countryscore); } } if (dx_arrlsections == 1) { for (int cntr = 1; cntr < MAX_DATALINES; cntr++) { if (cntr != w_cty && cntr != ve_cty) { // W and VE don't count here... count_contest_bands(countries[cntr], countryscore); } } } if (arrldx_usa == 1) { for (int cntr = 1; cntr < MAX_DATALINES; cntr++) { if (cntr != w_cty && cntr != ve_cty) { // W and VE don't count here... count_contest_bands(countries[cntr], countryscore); } } } if (pacc_pa_flg == 1) { for (int n = 1; n < MAX_DATALINES; n++) { count_contest_bands(countries[n], countryscore); } } if (country_mult == 1 || pfxnummultinr > 0) { for (int n = 1; n <= MAX_DATALINES - 1; n++) { pfxnumcntidx = -1; if (pfxnummultinr > 0) { pfxnumcntidx = lookup_country_in_pfxnummult_array(n); } if (pfxnumcntidx >= 0) { /* found in array */ /* count all possible pfx numbers * eg: K0, K1, K2, ..., K9 */ for (int pfxnr = 0; pfxnr < 10; pfxnr++) { count_contest_bands(pfxnummulti[pfxnumcntidx].qsos[pfxnr], countryscore); } } else { // simple 'country_mult', but works together with pfxnummulti count_contest_bands(countries[n], countryscore); } } } return linenr; // nr of lines in log } int log_read_n_score() { int nr_qsolines; total = 0; nr_qsolines = readcalls(); if (qtcdirection > 0) { readqtccalls(); } return nr_qsolines; } //------------------------------------------------------------------------ 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.1/src/getmessages.h0000644000175000017500000000171713651752573012516 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.1/src/cleanup.c0000644000175000017500000000325313651752573011626 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 "globalvars.h" #include "tlf_curses.h" #include "ui_utils.h" #include "write_keyer.h" void cleanup_qso(void) { hiscall[0] = '\0'; /* reset hiscall and comment */ comment[0] = '\0'; his_rst[1] = '9'; /* reset to 599 */ my_rst[1] = '9'; countrynr = 0; } void cleanup(void) { extern int defer_store; attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvaddstr(12, 29, spaces(12)); attron(COLOR_PAIR(C_WINDOW)); mvaddstr(12, 54, spaces(24)); attron(COLOR_PAIR(C_LOG | A_STANDOUT)); for (int k = 1; k <= 5; k++) { mvaddstr(k, 0, spaces(40)); } refreshp(); cleanup_qso(); defer_store = 0; keyer_flush(); } tlf-1.4.1/src/tlf.h0000644000175000017500000001061013651752573010764 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 */ typedef enum { CQ, // Run S_P, // Search and Pounce AUTO_CQ, // temporary, used in autocq.c KEYBOARD, // temporary, used in keyer.c NONE // used in trx_memory to signal empty memory } cqmode_t; #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 BAND60 512 #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_60, 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 UNIQUECALL_ALL 1 #define UNIQUECALL_BAND 2 #define EXCLUDE_NONE 0 #define EXCLUDE_CONTINENT 1 #define EXCLUDE_COUNTRY 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 bands the multi was worked */ }; #define MAXPFXNUMMULT 30 typedef struct { int countrynr; int qsos[NBANDS]; } t_pfxnummulti; void refreshp(); extern const char *backgrnd_str; #endif /* TLF_H */ tlf-1.4.1/src/scroll_log.h0000644000175000017500000000166013651752573012343 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.1/src/searchcallarray.c0000644000175000017500000000314413651752573013336 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.1/src/bands.h0000644000175000017500000000404013651752573011266 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) || \ (index == BANDINDEX_60)) /* 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]; /** \brief converts bandnumber to bandindex * * \parameter bandnumber * \return bandindex or BANDINDEX_OOB if no ham radio band */ int bandnr2index(int nr); /** \brief converts bandindex to bandnumber */ int bandindex2nr(int index); /** 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.1/src/globalvars.h0000644000175000017500000000601013651752573012332 00000000000000 #include #include #include "tlf.h" 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 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 freq_t freq; 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 int minitest; // minitest period length in seconds, 0 if not used extern char message[][80]; extern char *digi_message[]; tlf-1.4.1/src/callinput.h0000644000175000017500000000200713651752573012173 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.1/src/edit_last.h0000644000175000017500000000175613651752573012162 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.1/src/writecabrillo.c0000644000175000017500000005525113651752573013046 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 #include "getsummary.h" #include "log_utils.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[]; 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); /** 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 (!log_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)): "); g_strlcpy(exchange, buffer, 11); 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; } /* write ADIF header to open file */ void write_adif_header(FILE* fp) { extern char whichcontest[]; time_t now = time(0); struct tm *time_ptr = gmtime(&now); char timebuf[100]; fputs ("################################################################################\n", fp); fputs ("# ADIF v3.10 data file exported by TLF\n", fp); fputs ("# according to specifications on http://www.adif.org\n", fp); fputs ("################################################################################\n", fp); strftime(timebuf, sizeof(timebuf), "%d-%b-%y at %H:%Mz", time_ptr); fprintf(fp, "Created %s for %s\n", timebuf, call); /* Write contest name */ fprintf(fp, "Contest Name: %s\n", whichcontest); fputs("3.10\n", fp); fputs("TLF\n", fp); fprintf(fp, "%s\n", strlen(VERSION), VERSION); fputs("\n", fp); } /* 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)): "); g_strlcpy(standardexchange, buffer, 11); } info("Writing ADIF file"); write_adif_header(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.1/src/clusterinfo.c0000644000175000017500000002316313651752573012536 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 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[20]; FILE *fp; char marker_out[60]; char color[sizeof("Magenta")]; 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++) { g_strlcpy(thisline, spot_ptr[j], sizeof(thisline)); 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.1/src/grabspot.c0000644000175000017500000000504613651752573012022 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 "gettxinfo.h" #include "globalvars.h" #include "searchlog.h" // Includes glib.h #include "showinfo.h" #include "tlf.h" #include "tlf_curses.h" #include "trx_memory.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; 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 cqmode_t cqmode; freq_t f = data->freq - fldigi_get_carrier(); set_outfreq(f); send_bandswitch(f); strcpy(hiscall, data->call); showinfo(getctydata_pfx(hiscall)); searchlog(); /* if in CQ mode switch to S&P and remember QRG */ if (cqmode == CQ) { memory_store(); cqmode = S_P; } refreshp(); g_free(data->call); g_free(data); return f; } tlf-1.4.1/src/tlf_curses.h0000644000175000017500000000463613651752573012363 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.1/src/getsummary.c0000644000175000017500000000775713651752573012411 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.1/src/deleteqso.c0000644000175000017500000001160113651752573012160 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 #include "addcall.h" #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 "readcalls.h" #include "readqtccalls.h" #include "scroll_log.h" #include "tlf_curses.h" #include "ui_utils.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) { struct stat statbuf; int lfile; char logline[100]; char call[15], bandmode[6]; mvprintw(13, 29, "OK to delete last qso (y/n)?"); if (toupper(key_get()) == '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); nr_qsos = log_read_n_score(); } scroll_log(); } attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(13, 29, " "); clear_display(); } tlf-1.4.1/src/bandmap.c0000644000175000017500000006411213651752573011602 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 "searchlog.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 spaces 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); } /** check if call is new multi * * \return true if new multi */ bool bm_ismulti(char *call, spot *data, int band) { if (data == NULL || data->cqzone <= 0 || data->ctynr <= 0) { return false; // no data } if (cqww == 1) { if ((zones[data->cqzone] & inxes[band]) == 0 || (countries[data->ctynr] & inxes[band]) == 0) { return true; } } return false; } /** check if call is a dupe * * \return true if is dupe */ /** \todo should check band AND mode if already worked.... */ bool bm_isdupe(char *call, int band) { /* spots for warc bands are never dupes */ if (IsWarcIndex(band)) return false; int found = searchcallarray(call); if (found == -1) /* new call */ return false; if (qtcdirection > 0) { struct t_qtc_store_obj *qtc_obj = qtc_get(call); if (qtc_obj->total > 0 && qtc_obj->total < 10) { return false; } if (qtc_obj->total == 0 && qtc_obj->capable > 0) { return false; } } if (worked[found].band & inxes[band]) { return worked_in_current_minitest_period(found); } return false; } 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; bool 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.1/src/speedupndown.c0000644000175000017500000000536313651752573012716 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.1/src/trx_memory.h0000644000175000017500000000226113651752573012407 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2020 Zoltan Csahok * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public 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 TRX_MEMORY_H #define TRX_MEMORY_H #include "time_update.h" #include "tlf.h" extern freq_t memory_get_freq(); // returns 0 if memory is empty extern cqmode_t memory_get_cqmode(); // returns NONE if memory is empty extern void memory_store_or_pop(); extern void memory_store(); extern void memory_pop(); extern void memory_swap(); #endif tlf-1.4.1/src/freq_display.h0000644000175000017500000000167013651752573012667 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.1/src/getwwv.c0000644000175000017500000000522713651752573011525 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" double ssn_r = 50; time_t lastwwv_time = 0; char lastwwv[100] = ""; char lastwwv_raw[100] = ""; void wwv_set_r(double r) { ssn_r = (r > 0 ? r : 0); } void wwv_set_sfi(double sfi) { wwv_set_r((sfi - 70.0) * (200.0 / 180.0)); } void wwv_add(const char *s) { if (strncmp(s, "WWV", 3) != 0 && strncmp(s, "WCY", 3) != 0) { return; // not a WWV message } // save message skipping control chars char *dest = lastwwv_raw; while (*s) { if (*s >= ' ') {*dest = *s; ++dest;} ++s; } *dest = 0; lastwwv_time = time(NULL); char gmt[10] = ""; char *p = strstr(lastwwv_raw, "<"); if (p != NULL) { sprintf(gmt, "%02d GMT", atoi(p + 1)); } // Sunspot Number char rstr[10] = ""; p = strstr(lastwwv_raw, "R="); if (p != NULL) { wwv_set_r(atof(p + 2)); sprintf(rstr, "R=%.0f", ssn_r); } // Solar Flux Index char sfistr[20] = ""; p = strstr(lastwwv_raw, "SFI="); if (p != NULL) { double sfi = atof(p + 4); sprintf(sfistr, "SFI=%.0f", sfi); wwv_set_sfi(sfi); } // Solar Activity (SA) char *sa = ""; p = strstr(lastwwv_raw, "eru"); if (p != NULL) { sa = "eruptive"; } // Geomagnetic Field (GMF) char *gmf = ""; p = strstr(lastwwv_raw, "act"); if (p != NULL) { gmf = "act"; } // Aurora char *au = ""; p = strstr(lastwwv_raw, "Au=au"); if (p != NULL) { au = "AURORA!"; } sprintf(lastwwv, "Condx: %-18s %-8s %-10s %-9s %-5s %s", gmt, rstr, sfistr, sa, gmf, au); } // // show footer if WWV was received not later than 3 mins ago // void wwv_show_footer() { if (lastwwv_time > time(NULL) - 3 * 60) { mvprintw(LINES - 1, 0, lastwwv); } } tlf-1.4.1/src/prevqso.h0000644000175000017500000000177613651752573011713 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.1/src/setcontest.h0000644000175000017500000000166013651752573012377 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 void setcontest(void); #endif /* SETCONTEST_H */ tlf-1.4.1/src/setparameters.h0000644000175000017500000000167313651752573013067 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.1/src/show_help.c0000644000175000017500000000375713651752573012200 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.1/src/startmsg.c0000644000175000017500000000401413651752573012037 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.1/src/locator2longlat.c0000644000175000017500000000710113651752573013301 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.1/src/netkeyer.c0000644000175000017500000001053413651752573012025 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), 0, (struct sockaddr *) &address, sizeof(address)); if (sendto_rc == -1) { TLF_LOG_WARN("Keyer send failed...!"); return -1; } return 0; } tlf-1.4.1/src/last10.c0000644000175000017500000000412113651752573011276 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.1/src/cw_utils.c0000644000175000017500000001243013651752573012025 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.1/src/addspot.c0000644000175000017500000000457613651752573011646 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" #include "ui_utils.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, spaces(43)); 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; } void addspot(void) { extern freq_t freq; extern char hiscall[]; extern int trx_control; char frequency[8]; if (strlen(hiscall) < 3) { return; } 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'; } tlf-1.4.1/src/score.h0000644000175000017500000000223013651752573011311 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 #include int score(void); int score2(char *line); bool country_found(char prefix[]); bool is_in_countrylist(int countrynr); bool is_in_continentlist(char *continent); #endif /* end of include guard: _SCORE_H */ tlf-1.4.1/src/qrb.c0000644000175000017500000001016613651752573010764 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" /* 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.1/src/time_update.h0000644000175000017500000000175013651752573012504 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 #include extern bool force_show_freq; void time_update(void); #endif /* TIME_UPDATE_H */ tlf-1.4.1/src/sendspcall.c0000644000175000017500000000530313651752573012325 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.1/src/makelogline.h0000644000175000017500000000171613651752573012475 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.1/src/audio.h0000644000175000017500000000233313651752573011303 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.1/src/checkparameters.h0000644000175000017500000000170313651752573013343 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.1/src/getwwv.h0000644000175000017500000000232013651752573011521 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 #include extern double ssn_r; // sunspot number for MUF calculation extern char lastwwv[]; // processed WWV message extern char lastwwv_raw[]; // raw WWV message extern time_t lastwwv_time; void wwv_add(const char *s); void wwv_set_r(double r); void wwv_set_sfi(double sfi); void wwv_show_footer(); #endif /* GETWWV_H */ tlf-1.4.1/src/cleanup.h0000644000175000017500000000167413651752573011640 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); void cleanup(void); #endif /* CLEANUP_H */ tlf-1.4.1/src/editlog.c0000644000175000017500000000440313651752573011624 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 #include "background_process.h" #include "checklogfile.h" #include "clear_display.h" #include "err_utils.h" #include "ignore_unused.h" #include "readqtccalls.h" #include "readcalls.h" #include "scroll_log.h" #include "tlf.h" #include "tlf_curses.h" void edit(char *filename) { extern char *editor_cmd; char *cmdstr; const char *editor = editor_cmd; int retval; if (editor_cmd == NULL) { editor = g_getenv("EDITOR"); } if (editor == NULL) { return; } endwin(); cmdstr = g_strdup_printf("%s %s", editor, filename); retval = (system(cmdstr));; refreshp(); if (WEXITSTATUS(retval) == 127) { TLF_LOG_WARN("Can not start editor, check EDITOR= command"); } g_free(cmdstr); } void logedit(void) { extern char logfile[]; int j; stop_background_process(); edit(logfile); checklogfile(); log_read_n_score(); start_background_process(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); erase(); refreshp(); scroll_log(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j < LINES - 1; j++) { mvprintw(j, 0, backgrnd_str); } refreshp(); } tlf-1.4.1/src/note.h0000644000175000017500000000163713651752573011155 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.1/src/nicebox.c0000644000175000017500000000345313651752573011630 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.1/src/editlog.h0000644000175000017500000000167713651752573011643 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 void edit(char *filename); void logedit(void); #endif /* EDITLOG_H */ tlf-1.4.1/src/bands.c0000644000175000017500000000611213651752573011263 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 }, { 5250000, 5450000 }, // 5351500-5356500 worldwide { 7000000, 7300000 }, { 10100000, 10150000 }, { 14000000, 14350000 }, { 18068000, 18168000 }, { 21000000, 21450000 }, { 24890000, 24990000 }, { 28000000, 29700000 }, { 0, 0 } }; const unsigned int cwcorner[NBANDS] = { 1838000, 3580000, 5354000, 7040000, 10140000, 14070000, 18095000, 21070000, 24915000, 28070000, 0 }; const unsigned int ssbcorner[NBANDS] = { 1840000, 3600000, 5354000, 7040000, 10150000, 14100000, 18120000, 21150000, 24930000, 28300000, 0 }; /** Converts bandindex to bandmask */ int inxes[NBANDS] = \ { BAND160, BAND80, BAND60, BAND40, BAND30, BAND20, BAND17, BAND15, BAND12, BAND10, BANDOOB }; /** Converts bandnumber to bandindex */ int bandnr2index(int nr) { switch (nr) { case 160: return BANDINDEX_160; case 80: return BANDINDEX_80; case 40: return BANDINDEX_40; case 60: return BANDINDEX_60; case 20: return BANDINDEX_20; case 15: return BANDINDEX_15; case 10: return BANDINDEX_10; case 12: return BANDINDEX_12; case 17: return BANDINDEX_17; case 30: return BANDINDEX_30; default: return BANDINDEX_OOB; } } /* converts bandindex to bandnumber */ static int bandnr[NBANDS] = { 160, 80, 60, 40, 30, 20, 17, 15, 12, 10, 0 }; int bandindex2nr(int index) { return bandnr[index]; } 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.1/src/messagechange.h0000644000175000017500000000167513651752573013004 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 void message_change(void); #endif /* MESSAGECHANGE_H */ tlf-1.4.1/src/checkqtclogfile.h0000644000175000017500000000201513651752573013326 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.1/src/qtcutil.c0000644000175000017500000001204213651752573011660 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.1/src/qrb.h0000644000175000017500000000214013651752573010762 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 #define ARC_IN_KM 111.2 #define RADIAN (180.0 / M_PI) 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.1/src/readctydata.c0000644000175000017500000000317213651752573012464 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.1/src/show_help.h0000644000175000017500000000200313651752573012164 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.1/src/showpxmap.h0000644000175000017500000000165513651752573012236 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 void show_mults(void); #endif /* SHOWPXMAP_H */ tlf-1.4.1/src/prevqso.c0000644000175000017500000000262113651752573011674 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.1/src/writecabrillo.h0000644000175000017500000000172713651752573013052 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.1/src/searchcallarray.h0000644000175000017500000000171413651752573013344 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.1/src/calledit.h0000644000175000017500000000167613651752573011774 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.1/src/focm.h0000644000175000017500000000212513651752573011125 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.1/src/readcalls.h0000644000175000017500000000213513651752573012134 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 lookup_country_in_pfxnummult_array(int n); int readcalls(void); int log_read_n_score(); int synclog(char *synclogfile); #endif /* READCALLS_H */ tlf-1.4.1/src/showpxmap.c0000644000175000017500000000603013651752573012221 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 #include "dxcc.h" #include "focm.h" #include "changepars.h" #include "keystroke_names.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #include "bands.h" void 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; } if (cqww == 1) { mvprintw(12, 29, "E,A,F,N,S,O"); refreshp(); ch = key_get(); while (ch != '\n' && ch != KEY_ENTER) { if (ch == ESCAPE) 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, backgrnd_str); 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) { strncpy(prefix, dxcc_by_index(i)->pfx, 3); g_strlcat(prefix, " ", sizeof(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, backgrnd_str); } else multiplierinfo(); } tlf-1.4.1/src/gettxinfo.c0000644000175000017500000001611713651752573012211 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.1/src/err_utils.h0000644000175000017500000000250413651752573012212 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.1/src/getpx.c0000644000175000017500000000543513651752573011332 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.1/src/sendspcall.h0000644000175000017500000000201213651752573012324 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.1/src/checklogfile.h0000644000175000017500000000173613651752573012627 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.1/src/checklogfile.c0000644000175000017500000001377313651752573012626 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 == 60) || (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.1/src/keyer.h0000644000175000017500000000166213651752573011325 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 void keyer(void); #endif /* end of include guard: KEYER_H */ tlf-1.4.1/src/checkparameters.c0000644000175000017500000000230713651752573013337 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.1/src/main.c0000644000175000017500000006510013651752573011122 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 #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 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; char *editor_cmd = NULL; 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 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]; bool countrylist_only = false; int countrylist_points = -1; char continent_multiplier_list[7][3]; // SA, NA, EU, AF, AS and OC int continentlist_points = -1; bool continentlist_only = false; int exclude_multilist_type = EXCLUDE_NONE; bool mult_side = false; /* 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; cqmode_t cqmode = CQ; 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", " 60", " 40", " 30", " 20", " 17", " 15", " 12", " 10", "???" }; char comment[80]; 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 */ 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; int logfrequency = 0; int rit; int trx_control = 0; freq_t bandfrequency[NBANDS] = { 1830000, 3525000, 5352000, 7010000, 10105000, 14025000, 18070000, 21025000, 24900000, 28025000, 0. }; const char headerline[] = " 1=CQ 2=DE 3=RST 4=73 5=HIS 6=MY 7=B4 8=AGN 9=? "; const char *backgrnd_str; 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.; 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, 1, 0}; int bandweight_multis[NBANDS] = {1, 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]; backgrnd_str = spaces(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 next serial 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(); 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.1/src/getmessages.c0000644000175000017500000000420013651752573012477 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" extern char call[]; extern int mycountrynr; extern char mycqzone[]; extern char mycontinent[]; extern double QTH_Lat; extern double QTH_Long; /* get countrynumber, QTH, CQ zone and continent for myself */ void getstationinfo() { 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) { getstationinfo(); printw("\n Call = "); printw(call); printw(" My Zone = "); printw(mycqzone); printw(" My Continent = "); printw(mycontinent); printw("\n\n"); refreshp(); } tlf-1.4.1/src/listmessages.c0000644000175000017500000000473213651752573012705 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]; /* 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) { 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.1/src/startmsg.h0000644000175000017500000000220613651752573012045 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.1/src/cw_utils.h0000644000175000017500000000210313651752573012026 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.1/src/paccdx.c0000644000175000017500000000733613651752573011447 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.1/src/scroll_log.c0000644000175000017500000000621413651752573012336 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 #include "err_utils.h" #include "ui_utils.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "log_utils.h" #include "ignore_unused.h" #include "qsonr_to_str.h" #include "tlf_curses.h" /** find out highest used serial number and prepare next one in qsonum * and qsonumstr * * \Todo needs to be cleaned up, to make more clear how it works, especially * if LAN is active*/ void get_next_serial(void) { int mm; mm = qsonum - 1; if (!log_is_comment(logline4)) { strncpy(qsonrstr, logline4 + 23, 4); mm = atoi(qsonrstr); } if (!log_is_comment(logline3)) { if (atoi(logline3 + 23) > mm) { strncpy(qsonrstr, logline3 + 23, 4); mm = atoi(qsonrstr); } } if (!log_is_comment(logline2)) { if (atoi(logline2 + 23) > mm) { strncpy(qsonrstr, logline2 + 23, 4); mm = atoi(qsonrstr); } } if (!log_is_comment(logline1)) { if (atoi(logline1 + 23) > mm) { strncpy(qsonrstr, logline1 + 23, 4); mm = atoi(qsonrstr); } } if ((lan_active == 1) && (exchange_serial == 1)) { if (lan_mutex == 2) { /* last stored message is 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 (!log_is_comment(logline4)) qsonum++; else qsonum = mm + 1; qsonr_to_str(); } /** read the last 5 log lines and set the next qso number */ void scroll_log(void) { char inputbuffer[800]; FILE *fp; if ((fp = fopen(logfile, "r")) == NULL) { TLF_LOG_ERR("Error opening logfile."); } for (int i = 5; i >= 1; i--) { if (fseek(fp, -1L * i * LOGLINELEN, SEEK_END) == 0) IGNORE(fgets(inputbuffer, 90, fp)); else strcpy(inputbuffer, spaces(80)); if (strlen(inputbuffer) <= 10) /* log repair */ IGNORE(fgets(inputbuffer, 90, fp));; g_strlcpy(logline_edit[5 - i], inputbuffer, 81); } fclose(fp); get_next_serial(); } tlf-1.4.1/src/locator2longlat.h0000644000175000017500000000367513651752573013322 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.1/src/autocq.c0000644000175000017500000000553113651752573011474 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); // // get estimated CQ length in milliseconds // returns 0 if can't be determined // static int get_autocq_time() { if (trxmode != CWMODE) { return 0; // unknown } const int cw_message_len = cw_message_length(message[11]); return (int)(1200.0 / GetCWSpeed()) * cw_message_len; } int auto_cq(void) { extern char message[][80]; extern int cqdelay; extern cqmode_t cqmode; #define NO_KEY -1 int key = NO_KEY; const cqmode_t cqmode_save = cqmode; cqmode = AUTO_CQ; show_header_line(); const long message_time = get_autocq_time(); while (key == NO_KEY) { send_standard_message(11); mvprintw(12, 29, ""); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); // if length of message is known then wait until its end // key press terminates auto CQ loop if (message_time > 0) { for (int j = 0; j < 10 && key == NO_KEY; j++) { usleep(message_time * 100); time_update(); const int inchar = key_poll(); if (inchar > 0) { key = inchar; } } } // wait between calls for (int delayval = cqdelay; delayval > 0 && key == NO_KEY; delayval--) { mvprintw(12, 29, "Auto CQ %-2d ", delayval - 1); refreshp(); usleep(500000); // 500 ms time_update(); const int inchar = key_poll(); if (inchar > 0) { key = inchar; } } mvprintw(12, 29, spaces(13)); mvprintw(12, 29, ""); refreshp(); } stoptx(); cqmode = cqmode_save; show_header_line(); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 29, spaces(13)); printcall(); return toupper(key); } tlf-1.4.1/src/sendqrg.c0000644000175000017500000001374113651752573011645 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 - 1); 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.1/src/get_time.h0000644000175000017500000000165013651752573012000 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.1/src/grabspot.h0000644000175000017500000000173313651752573012026 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.1/src/printcall.h0000644000175000017500000000202213651752573012165 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.1/src/freq_display.c0000644000175000017500000002242613651752573012664 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, spaces(35)); } } tlf-1.4.1/src/autocq.h0000644000175000017500000000166713651752573011507 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.1/src/lancode.c0000644000175000017500000002315013651752573011602 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 */ //---------------------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.1/src/getctydata.c0000644000175000017500000001463313651752573012334 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, sizeof(strippedcall)); 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'; g_strlcpy(checkcall, strippedcall, sizeof(checkcall)); 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) { strcpy(checkcall, call2); g_strlcat(checkcall, "/", sizeof(checkcall)); g_strlcat(checkcall, call1, sizeof(checkcall)); 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 */ } /* ------------------------------------------------------------ */ 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.1/src/addarea.h0000644000175000017500000000165013651752573011564 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.1/src/messagechange.c0000644000175000017500000000537013651752573012773 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/DIGI messages *--------------------------------------------------------------*/ #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" #include "keystroke_names.h" static void enter_message(int bufnr) { char printbuf[80]; char *msg; if (trxmode == DIGIMODE) msg = digi_message[bufnr]; else msg = message[bufnr]; g_strlcpy(printbuf, msg, sizeof(printbuf)); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvaddstr(15, 4, printbuf); refreshp(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(16, 4, ""); echo(); getnstr(printbuf, 60); noecho(); if (printbuf[0] == ESCAPE) { return; // user didn't wish to change the message } for (char *p = printbuf; *p; p++) { *p = toupper(*p); } if (trxmode == DIGIMODE) { free(digi_message[bufnr]); digi_message[bufnr] = strdup(printbuf); } else strcpy(message[bufnr], printbuf); } void message_change() { int bufnr; clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (int y = 13; y < LINES - 1; y++) { mvprintw(y, 0, backgrnd_str); } nicebox(14, 3, 2, 60, "Enter message (F1-12, C, S)"); while (1) { bufnr = toupper(key_get()); if ((bufnr == 'C') || (bufnr == 'S')) break; if (bufnr >= KEY_F(1) && bufnr <= KEY_F(12)) break; if (bufnr == ESCAPE) break; } if (bufnr == 'S') { bufnr = 12; } else if (bufnr == 'C') { bufnr = 13; } else if (bufnr == ESCAPE) { bufnr = -1; } else { bufnr = bufnr - KEY_F(1); } if (bufnr >= 0) { enter_message(bufnr); } mvprintw(12, 29, ""); refreshp(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); writeparas(); } tlf-1.4.1/src/cabrillo_utils.c0000644000175000017500000001515013651752573013205 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.1/src/initial_exchange.c0000644000175000017500000000744013651752573013474 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.1/src/parse_logcfg.h0000644000175000017500000000206713651752573012641 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.1/src/time_update.c0000644000175000017500000001173613651752573012504 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 #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 "trx_memory.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; 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; char time_buf[40]; attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); mvaddstr(12, 0, band[bandinx]); strncpy(time_buf, timestr, 8); mvaddstr(12, 17, time_buf); strftime(time_buf, 60, "%d-%b-%y", time_ptr); mvaddstr(12, 7, time_buf); } const char *FREQ_DISPLAY_FORMAT = " %s: %7.1f"; bool force_show_freq = false; /** show frequency and memory if rig control is active */ void show_freq(void) { extern int trx_control; attron(modify_attr(COLOR_PAIR(C_LOG))); freq_t memfreq = 0; if (trx_control) { mvprintw(13, 67, FREQ_DISPLAY_FORMAT, "TRX", freq / 1000.0); memfreq = memory_get_freq(); } else { mvprintw(13, 67, spaces(80 - 67)); } if (memfreq > 0) { mvprintw(14, 67, FREQ_DISPLAY_FORMAT, "MEM", memfreq / 1000.0); } else { mvprintw(14, 67, spaces(80 - 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 bm_timeout = 0; static int oldsecs = -1; /* trigger immediate update */ get_time(); this_second = time_ptr->tm_sec; /* seconds */ // used in background_process system_secs = time_ptr->tm_min * 60 + time_ptr->tm_sec; // force frequency display if it has changed (don't wait until next second) static freq_t old_freq = 0; if (freq > 0 && fabs(freq - old_freq) >= 100) { force_show_freq = true; old_freq = freq; } if (force_show_freq) { show_freq(); clusterinfo(); } if (this_second == oldsecs) { // still in the same second, no action force_show_freq = false; return; } /* do it every second */ oldsecs = this_second; if (wpx == 1) { if (minute_timer > 0) minute_timer--; } if (!force_show_freq) { // do not show again if it was forced show_freq(); } force_show_freq = false; 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'; static time_t prev_wwv_time = 0; if (lastwwv_time > prev_wwv_time) { // is there a newer WWV message? prev_wwv_time = lastwwv_time; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(LINES - 1, 0, backgrnd_str); wwv_show_footer(); // print WWV info } 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, spaces(67)); attron(COLOR_PAIR(C_WINDOW)); mvprintw(12, 23, qsonrstr); printcall(); showscore(); /* update score window every 2 seconds */ miniterm = currentterm; } } tlf-1.4.1/src/bandmap.h0000644000175000017500000000715713651752573011615 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(); /** 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.1/src/searchlog.h0000644000175000017500000000262613651752573012156 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 #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); /* search 'hiscall' in the log */ void searchlog(void); bool worked_in_current_minitest_period(int found); void InitSearchPanel(void); void ShowSearchPanel(void); void HideSearchPanel(void); void OnLowerSearchPanel(int x, char *str); #endif /* SEARCHLOG_H */ tlf-1.4.1/src/stoptx.h0000644000175000017500000000163713651752573011551 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.1/src/changefreq.c0000644000175000017500000000432613651752573012304 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.1/INSTALL0000644000175000017500000000326313651752573010276 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.1/share/0000755000175000017500000000000013651752622010416 500000000000000tlf-1.4.1/share/cabrillo.fmt0000644000175000017500000000217713651752573012651 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.1/share/Makefile.in0000644000175000017500000003475713651752614012424 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 cwops.txt \ logcfg.dat arrl10m_mults \ arrldx_mults arrlsections ea_sections okommults ok_om.txt \ 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.1/share/logcfg.dat0000644000175000017500000000764313651752573012310 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 # ################################# # # # 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.1/share/arrldx_mults0000644000175000017500000000027513651752573013012 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.1/share/ok_om.txt0000644000175000017500000001563413651752573012221 00000000000000#OK_OM_CallHistory_2016.txt (by UR7QM 21.10.2017) #Corrected Nov 09 2018 VE2FK #Corrected Oct 14 2019 OK1DWQ #!!Order!!, Call, Exch1, # OKOMDX OK/LZ3SF,APD OK1ABF,ELO OK1AD,CTA OK1AE,FTR OK1AGE,BPZ OK1AHV,EUL OK1AIT,FPA OK1AJR,FSV OK1AMF,ECH OK1ANN,BME OK1AOU,CBU OK1AOV,FHK OK1APY,GBM OK1ARO,APD OK1ASG,BBE OK1AUC,CPR OK1AVV,BBN OK1AVY,FHB OK1AWC,APC OK1AXB,BPV OK1AY,DDO OK1AYD,CST OK1AYW,BME OK1AYY,APD OK1BA,BPB OK1BJ,APF OK1BLU,FUO OK1CEL,API OK1CF,ECH OK1CO,FRK OK1CRM,DDO OK1CSS,APD OK1CZ,BKO OK1DAM,BPB OK1DBE,BPZ OK1DBS,CJH OK1DCS,CCK OK1DDQ,BPZ OK1DDV/P,CPI OK1DEK,BPB OK1DEZ,FUO OK1DG,BNY OK1DGT,APJ OK1DGU,ELT OK1DJQ,CJH OK1DJS,DKL OK1DKO,ETE OK1DKR,APH OK1DLB,BNY OK1DLX,FNA OK1DM,ELT OK1DMP,BPV OK1DO,DSO OK1DOL,DPS OK1DOR,APD OK1DOY,ETE OK1DOZ,FPA OK1DPU,ETE OK1DQT,API OK1DRQ,DPM OK1DRU,EUL OK1DRX,BPZ OK1DSA,ELT OK1DSZ,BBE OK1DTC,ECH OK1DUG,ETE OK1DUT,FSE OK1DVA,BBE OK1DWF,BKO OK1DWQ,DPM OK1DX,DKL OK1DXE,EDE OK1EC,GUH OK1ES,BRA OK1EV,FTR OK1EW,FNA OK1FAO,BKH OK1FAQ,BKD OK1FBH,BBN OK1FC,BPB OK1FCA,APH OK1FCR,FCR OK1FDY,EUL OK1FFA,BNY OK1FFU,CJH OK1FGD,FSE OK1FHD,BNY OK1FHP,BPB OK1FIA,CJH OK1FIM,BKH OK1FJD,DDO OK1FKD,ECH OK1FLC,BRA OK1FLT,EJA OK1FMG,EMO OK1FMX,EMO OK1FNT,BMB OK1FOG,FHK OK1FPQ,ETE OK1FPS,APD OK1FR,APJ OK1FRO,APJ OK1FRT,BKD OK1FUU,BPZ OK1FV,FSV OK1FWG,FPA OK1GK,BME OK1GPC,FUO OK1GS,EJA OK1GTH,CST OK1HCG,APF OK1HEH,FCR OK1HFP,DTA OK1HMP,APF OK1HWB,CPE OK1HWS,EUL OK1HX,BNY OK1IBP,DDO OK1IC,BPB OK1ICJ,DPS OK1IE,GTR OK1IF,ELI OK1ITK,BBN OK1JAX,ETE OK1JD,FRK OK1JDJ,EUL OK1JFP,EUL OK1JMJ,ELT OK1JOC,DPS OK1JPO,EUL OK1JST,EUL OK1K,GUH OK1KA,FNA OK1KC,BPV OK1KCW,FHK OK1KDO,DDO OK1KFB,CST OK1KI,APJ OK1KJV,BRA OK1KKI,CJH OK1KMU,DTA OK1KRJ,BME OK1KSL,BKD OK1KUO,FUO OK1KZ,APH OK1LL,BKO OK1LO,BBN OK1LST,CCK OK1LV,DPM OK1MAC,FHB OK1MAW,FSV OK1MCQ,BKO OK1MCW,FHK OK1MDK,FHB OK1MGW,FHK OK1MI,ELT OK1MJA,ECH OK1MKI,FTR OK1MKU,FNA OK1MKX,APG OK1MLP,BBE OK1MNV,FJI OK1MQY,ECH OK1MSL,FHB OK1MSP,FHB OK1MU,FRK OK1MV,FPA OK1MZO,FJI OK1NE,FPA OK1NF,DPM OK1NR,FTR OK1NS,BME OK1OA,ELI OK1OEA,FRK OK1OFM,DPM OK1OTM,DPM OK1OX,BMB OK1P,FRK OK1PCB,CTA OK1PFM,BBE OK1PI,FCR OK1PMA,FNA OK1PX,APJ OK1QA,CPI OK1QM,ELI OK1RCX,DKL OK1RF,CJH OK1RI,CJH OK1RZ,FHB OK1SI,API OK1SRD,FTR OK1TA,BMB OK1TC,FTR OK1TD,ECL OK1TE,GBM OK1TFH,API OK1TN,FJI OK1UBA,FRK OK1UHU,API OK1UKV,APD OK1ULL,FPA OK1UXH,EDE OK1VBA,BMB OK1VD,FHK OK1VHF,APE OK1VHV,BKO OK1VK,BPB OK1WF,ECH OK1XBF,DDO OK1XC,CTA OK1XKK,ECL OK1XQ,BBN OK1XV,BPB OK1XW,EJA OK1XZ/P,GPR OK1YM,BKH OK1YR,CPI OK1YZ,BPZ OK1ZP,FRK OK1ZVL,BRA OK2AA,HPR OK2AB,GKR OK2ABU,GZS OK2AF,GZS OK2AN,GBL OK2APY,GBM OK2AU,GUH OK2BAU,GZS OK2BBR,HBR OK2BDF,GBM OK2BEN,GZS OK2BFN,GZL OK2BGN,HVS OK2BH,GZL OK2BHD,GBV OK2BHS,HKA OK2BIQ,HFM OK2BJK,HOL OK2BLD,HOS OK2BME,HNJ OK2BMI,HOL OK2BMU,HOS OK2BNC,GZL OK2BND,HPR OK2BNF,GUH OK2BPU,GPR OK2BQL,HJE OK2BQZ,HVS OK2BRQ,GZL OK2BRS,HVS OK2BRX,HOL OK2BSQ,HOP OK2BUT,GHO OK2BUZ,HVS OK2BV,HOL OK2BWB,GZS OK2BWJ,GBV OK2BXA,HVS OK2BXE,HPR OK2BYH,GHO OK2BYW,HNJ OK2BZE,HNJ OK2BZM,GKR OK2CMZ,HSU OK2COU,HPR OK2CQR,BME OK2CZ,APF OK2D,HVS OK2DIK,HNJ OK2DM,HVS OK2DU,HOS OK2DW,HVS OK2EA,HVS OK2EC,GUH OK2EQ,HOP OK2ER,HOS OK2EW,GBV OK2FB,GUH OK2FD,CJH OK2FUG,HKA OK2GG,GUH OK2GU,GJI OK2GZ,HOL OK2HBR,HOL OK2HBY,GZS OK2HIJ,HKA OK2HZ,HOS OK2IL,HSU OK2IT,GBV OK2JJA,HSU OK2KEA,GBL OK2KFK,GZS OK2KG,GBL OK2KJU,HPR OK2KOJ,GBM OK2KOU,HPR OK2KP,HKA OK2KPS,HVS OK2KR,GBL OK2KRT,HVS OK2KUB,GVY OK2KYD,GUH OK2LF,HOP OK2LW,GBR OK2MBP,HNJ OK2ME,BBE OK2MG,BBE OK2MI,FHK OK2MPB,GUH OK2MRJ,GBV OK2NAJ,HOL OK2NMA,GTR OK2NO,HBR OK2OCT,GPR OK2ODL,HOL OK2ODM,HNJ OK2OLD,HOL OK2ON,GZL OK2PAY,GZS OK2PBR,HBR OK2PDN,GBM OK2PDT,GZS OK2PEM,GZS OK2PFY,GVY OK2PIM,GKR OK2PJO,GPR OK2PRM,GPR OK2PVE,HVS OK2PVX,HVS OK2PYA,GJI OK2QA,HPR OK2QX,HPR OK2RJC,HNJ OK2RN,HOS OK2RRR,HNJ OK2RZ,HNJ OK2SAR,HSU OK2SG,GBV OK2SGW,HVS OK2SGY,GKR OK2SLS,HSU OK2SPS,GBM OK2SSJ,HOP OK2SV,HOL OK2SWD,HOS OK2TBC,GHO OK2TRN,GHO OK2TW,GVY OK2UNC,HOL OK2UQ,GZL OK2UR,HKA OK2VAZ,HNJ OK2VD,FHK OK2VIR,HOS OK2VK,HPR OK2VVN,GPR OK2VX,GBM OK2W,HVS OK2WA,HFM OK2WED,GTR OK2ZA,GTR OK2ZDL,GJI OK2ZI,GTR OK2ZO,GBL OK2ZR,GBM OK2ZV,GUH OK3A,DDO OK3AR,DPJ OK3C,GBL OK3CV,ECH OK3D,HOS OK3DM,BBE OK3EQ,EMO OK3NR,ELT OK3PVL,GBR OK3RM,PAR OK3TM,BPB OK4A,DDO OK4AS,FUO OK4FF,GHO OK4KOP,GBL OK4M,APH OK4RQ,DPM OK4Z,GTR OK5D,ETE OK5E,FPA OK5ET,FHK OK5HW,EMO OK5M,GVY OK5MK,FTR OK5MM,GVY OK5N,FHK OK5OK,EUL OK5R,CJH OK5SE,GBM OK5SWL,HOS OK5T,ELT OK5TFC,BMB OK5TM,GBV OK5W,ECH OK5XX,HJE OK5Z,GTR OK5ZH,APH OK5ZZ,HPR OK6C,FUO OK6D,HVS OK6DJ,DDO OK6DX,FNA OK6K,FHK OK6O,GUH OK6OK,HNJ OK6RW,GZS OK6T,FNA OK6Y,GVY OK7AN,BME OK7AW,GPR OK7AZ,GZL OK7FL,BMB OK7GU,DPM OK7K,BME OK7KW,EDE OK7L,CPR OK7MT,GHO OK7N,APF OK7PM,GBM OK7PN,HFM OK7PY,CJH OK7SX,BPB OK7T,ECL OK7U,FPA OK7W,FRK OK7Y,EUL OK7Z,GTR OK8AEP,HOL OK8DD,APJ OK8GG,APJ OK8KM,FUO OK8NM,CJH OK8WW,BPZ OL0F,HKA OL0M,FRK OL0W,BBE OL100BOB,HOL OL1A,BPV OL1B,FUO OL1C,ETE OL1M,FNA OL1X,CPE OL1Z,GZN OL2A,GZS OL2FD,GTR OL2J,GJI OL2M,FUO OL2N,CPE OL2U,EMO OL2W,API OL2X,GTR OL3A,DDO OL3E,DPS OL3M,FUO OL3R,BKD OL3Z,APD OL4,ELI OL4A,CJH OL4M,FHK OL4N,ETE OL4W,ELI OL5A,HKA OL5E,GBM OL5J,FHB OL5M,FUO OL5Q,ELO OL5W,BPB OL5Y,BKO OL6A,APC OL6D,DPJ OL6P,GVY OL6T,FNA OL7C,DKV OL7M,FRK OL7O,DKV OL7P,DDO OL7R,DTA OL8M,DPM OL9M,APF OL9R,DTA OL9S,BPB OL9Z,HKA OM/HA6PJ,DET OM0AD,BAR OM0AM,KED OM0AS,SNI OM0CS,BAR OM0DC,BAR OM0FL,BAR OM0MW,PRE OM0R,LEV OM0TM/QRP,PRE OM0TT,MIC OM0WR,SNI OM1AX,MAL OM1BD,BAB OM1II,TRN OM1XQ,BAE OM2AAZ,DST OM2AGN,DST OM2AK,DST OM2AM,DST OM2IV,MYJ OM2JU,PIE OM2MBP,HNJ OM2MP,SAL OM2RA,GAL OM2RC,MAL OM2ZZ,MAL OM3AG,KED OM3BA,BAB OM3BH,DST OM3BY,ZIL OM3CAZ,KEZ OM3CDN,BAC OM3CFR,SEA OM3CGN,KEO OM3CM,MAL OM3CMK,NIT OM3CND,KNM OM3COR,PBY OM3CPF,NIT OM3CW,DST OM3CWY,KEO OM3DX,KED OM3ED,BAB OM3EY,BAN OM3FZ,KEO OM3GI,POP OM3IAD,ILA OM3IAG,ZIL OM3KCM,LVC OM3KFF,BAD OM3KFO,TOP OM3KFV,MAR OM3KFY,BAB OM3KKF,DET OM3KWZ,ZVO OM3LL,NIT OM3LU,MAL OM3MW,TNC OM3PA,PAR OM3PQ,GEL OM3R,SEA OM3RKA,KOM OM3RM,DST OM3RMM,DST OM3ROM,PBY OM3RP,BAE OM3RRC,PBY OM3RWB,SLU OM3SEM,KOM OM3TB,TRN OM3TBG,NIT OM3TIX,NMV OM3TLE,BAN OM3TPN,ZIL OM3TSZ,LVC OM3TU,BAN OM3TWM,KEO OM3TZO,NMV OM3WGR,ZMO OM3WTB,LVC OM3WZ,KEO OM3YAD,ILA OM3YCA,BAE OM3YFT,ZIL OM3ZCK,SLU OM3ZWA,PRE OM4A,PRI OM4AA,ZIL OM4AFJ,PRI OM4AIK,TNC OM4ANJ,TNC OM4DN,ILA OM4F,PUC OM4J,TNC OM4KW,PUC OM4M,NMV OM4MM,PAR OM4MO,PRI OM4O,TNC OM4Q,PBY OM4TN,TNC OM4UU,NMV OM4WW,MYJ OM4X,TNC OM50CND,KNM OM5A,BBY OM5ARA,LVC OM5ARI,NZA OM5AW,NIT OM5CD,BAB OM5CM,NIT OM5DX,LVC OM5KM,NIT OM5LR,LVC OM5MI,NZA OM5NA,PEZ OM5NL,KOM OM5RM,PAR OM5TZ,KOM OM5VS,LVC OM5WW,LVC OM5XX,KOM OM5ZW,BAN OM685RADOLA,KNM OM6AC,MAR OM6AL,MAR OM6AMR,MAR OM6AR,ZIL OM6AT,MAR OM6DN,CAD OM6FM,ZIL OM6MS,LMI OM6NM,BAB OM6PR,LMI OM6RM,SEN OM6TU,MAR OM6TX,CAD OM6VF,ZIL OM6WW,CAD OM7AB,ZVO OM7AES,LUC OM7AG,ZVO OM7AT,KRU OM7AX,BBY OM7CG,BBY OM7DX,BAN OM7JG,VKR OM7LM,ZVO OM7LW,DST OM7LW/P,DET OM7M,PAR OM7OM,POL OM7PY,LUC OM7PY/P,DET OM7RC,ZVO OM7RU,BBY OM7SR,BBY OM7WL,DST OM7ZM,TOP OM8AA,POP OM8ADU,KED OM8API,KEB OM8AQ,KEO OM8AT,KEA OM8DD,RSO OM8EL,RSO OM8FF,KEO OM8FR,KEZ OM8GT,KEB OM8HG,SNV OM8JP,KED OM8KT,KEB OM8KW,KEO OM8LA,KEZ OM8LD,RSO OM8LM,POP OM8ON,KEB OM8PG,POP OM8ST,KEA OM8VL,SNV tlf-1.4.1/share/paccmults0000644000175000017500000000004413651752573012257 00000000000000DR FL FR GD GR LB NB NH OV UT ZH ZL tlf-1.4.1/share/ea_sections0000644000175000017500000000022013651752573012554 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.1/share/Makefile.am0000644000175000017500000000045213651752573012400 00000000000000TLF_FILES = cabrillo.fmt callmaster cty.dat cwops.txt \ logcfg.dat arrl10m_mults \ arrldx_mults arrlsections ea_sections okommults ok_om.txt \ paccmults spdxmults ssamults help.txt darcmults tlfdir = $(pkgdatadir) tlf_DATA = $(TLF_FILES) EXTRA_DIST = $(TLF_FILES) CLEANFILES = *~ tlf-1.4.1/share/darcmults0000644000175000017500000011046313651752573012271 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.1/share/arrl10m_mults0000644000175000017500000000050513651752573012770 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.1/share/callmaster0000644000175000017500000075321613651752573012433 00000000000000# # Release 2020.04.02.00 # by Stu Phillips, K6TU # 1N5N 2E0BPP 2E0CNL 2E0CVN 2E0EBM 2E0EGS 2E0EIC 2E0EVM 2E0FFT 2E0FNU 2E0FTD 2E0GBD 2E0GBK 2E0GXQ 2E0HSP 2E0IFC 2E0IHX 2E0IQD 2E0JTS 2E0KPD 2E0LKC 2E0LSB 2E0LYF 2E0MNG 2E0MTP 2E0MTR 2E0MVH 2E0NPL 2E0OBO 2E0OLN 2E0PKH 2E0PLA 2E0PTZ 2E0RET 2E0RMV 2E0RNM 2E0SPS 2E0TWG 2E0UDX 2E0UGE 2E0VCC 2E0WBW 2E0WET 2E0WWU 2E0XNV 2E0XRD 2E0YAO 2E0YLR 2E1FVS 2E1PAW 2I0HGI 2I0WMN 2M0BHR 2M0SQL 2M0WEV 2W0DOE 3A2MG 3B8CW 3B8M 3B8XF 3C0W 3D2AG 3D2EU 3D2FD 3E1FP 3E3E 3G1B 3G1D 3G3N 3G3O 3G3PR 3G3W 3G5A 3V8CB 3V8SF 3V8SS 3W1T 3W9A 3Z0R 3Z0X 3Z100I 3Z100K 3Z100M 3Z100PIP 3Z1K 3Z50DVP 3Z50GR 3Z50KP 3Z5A 3Z6I 3Z6O 3Z6V 3Z7H 3Z9K 3Z9M 4A15DXXE 4A5E 4A60A 4A7S 4A7T 4D2X 4D3X 4E1A 4E3X 4F1BYN 4F2KWT 4F3BZ 4F3FSK 4F3OM 4F7FLO 4H1T 4I1BNC 4I1LCP 4J3DJ 4J4K 4J5A 4J6R 4K4K 4K6FO 4K9W 4L/LY4ZZ 4L/RC5A 4L0A 4L1MA 4L2M 4L5P 4L6QL 4L7AA 4L8A 4L9M 4M1F 4M1K 4M1Y 4M6R 4M8E 4O1HQ 4O3A 4O3RAB 4O3RB 4O4A 4O4O 4O4T 4O4YCP 4O6ZD 4O7CC 4O9TTT 4S7AB 4S7KM 4T4O 4U13FEB 4U1A 4U1ITU 4U1UN 4U1WB 4U25B 4U29MAY 4U2HB 4U73B 4U80FOC 4X0A 4X0T 4X1DX 4X1EL 4X1IM 4X1KS 4X1OM 4X1ST 4X1VE 4X1VF 4X2M 4X4DZ 4X4LF 4X4WN 4X6DK 4X6FR 4X6GP 4X6TT 4X70A 4X70I 4X7R 4Z1AC 4Z1DZ 4Z1TL 4Z4AK 4Z4DX 4Z4KX 4Z4UO 4Z5AD 4Z5AF 4Z5FI 4Z5FW 4Z5KU 4Z5LA 4Z5LU 4Z5LY 4Z5ML 4Z5MU 4Z5MV 4Z5OI 4Z5OZ 4Z5SL 4Z5TK 4Z5UN 4Z70IARC 4Z7Z 5B/RN3QO 5B/UT5UT 5B4AAB 5B4AGN 5B4AGU 5B4AHJ 5B4AIF 5B4AIX 5B4AJC 5B4ALJ 5B4ALN 5B4AMM 5B4AMX 5B4AOF 5B4KH 5C5W 5H3EE 5H3MB 5H3UA 5H4WZ 5I5TT 5J18FWC 5J500D 5J500V 5K0K 5K2J 5N7Q 5P1KZX 5P1V 5P5CW 5P5X 5P6G 5P8W 5P8X 5P8Z 5P9R 5P9X 5Q0X 5Q1A 5Q2A 5Q2J 5Q5R 5Q5W 5Q6EE 5Q8B 5R8UI 5R8UM 5T0AA 5T5PA 5U9AMO 5V7SM 5W1SA 5W2TB 5X1XA 5X2B 5Z4/G3AB 5Z4/LZ4NM 5Z4LS 6E2TAM 6F3A 6K2DIO 6K2ILX 6K2IXF 6K5BXQ 6K5XZE 6L0NJ 6M0NR/4 6M6M 6V7A 6W/IV3FSG 6W1PZ 6W1RY 6W1SU 6W7PCT 6Y3M 6Y3T 6Y5IC 6Y5PA 6Y5WJ 6Y6N 7A0D 7A1A 7A1B 7A2A 7B1B 7C1B 7I1A 7J1AAI 7J1ABD 7J3AOZ 7K1CPT 7K1EQG 7K1III 7K1JFM 7K1MAG/2 7K1PYG 7K1VKU 7K2PZG 7K3BKZ 7K4AEA 7K4GUR 7K4VPV 7K4XNN 7L1FFH 7L1WII 7L2OHM 7L3KJV 7L3PFH 7L4FCN 7L4IOU 7M2VPR 7M3URL 7M4CLF 7N1GMK 7N1PRD/0 7N2JZT/6 7N2SPK 7N2TNI 7N2UQC 7N3GWD 7N3ORC 7N3WRE 7N4GIB 7N4JXR 7N4LNK 7N4WPY 7N4XTA 7Q6M 7Q7EI 7Q7M 7S5S 7W7W 7X2ARA 7X2VFK 7X5QB 7Z1IS 7Z1SJ 8J1ITU 8J75RS 8J7M 8N1T 8N1UEC 8N2HQ 8N3HQ 8N3UV 8N6HQ 8N7HQ 8N8HQ 8P0P 8P1W 8P2K 8P5A 8P6DR 8P6NW 8P9AE 8Q7DX 8R1/AG6UT 8R1AK 8S0C 8S0DX 8S0W 8S8S 8T8A 8T8S 8Z88ND 9A/AI6V 9A/DK2RO 9A/DL3NCI 9A/F4HWS 9A/OM2ZZ 9A/OM5AW 9A/OM8AA 9A/S51TA/P 9A/S57KM 9A/UX1HW 9A0AA 9A0BB 9A0HQ 9A0Z 9A1A 9A1AA 9A1AD 9A1AR 9A1BST 9A1CBM 9A1CC 9A1CCY 9A1CFR 9A1CKH 9A1CMA 9A1CMC 9A1CPB 9A1CRT 9A1CVG 9A1DR 9A1EA 9A1EZA 9A1FL 9A1HBC 9A1HDE 9A1KDE 9A1LAF 9A1MM 9A1P 9A1PKC 9A1RBZ 9A1SZ 9A1TT 9A1UN 9A2AA 9A2AE 9A2AJ 9A2B 9A2BW 9A2C 9A2DS 9A2EU 9A2EY 9A2F 9A2G 9A2GA 9A2GF 9A2JG 9A2JK 9A2KD 9A2KI 9A2L/P 9A2LM 9A2MF 9A2MM 9A2N 9A2NA 9A2NO 9A2R 9A2SW 9A2T 9A2TD 9A2TN 9A2TX 9A2U 9A2UI 9A2UN 9A2UU 9A2UV 9A2V 9A2VQ 9A2VX 9A2W 9A2X 9A2Z 9A2ZI 9A36W 9A3AAU 9A3AG 9A3AJU 9A3B 9A3CJW 9A3CX 9A3DML 9A3DOS 9A3EJZ 9A3GPH 9A3GZI 9A3IH 9A3JB 9A3JH 9A3K 9A3KG 9A3LG 9A3LUC 9A3LYL 9A3MA 9A3MR 9A3NC 9A3ND 9A3PM 9A3QB 9A3R 9A3SM 9A3SMS 9A3ST 9A3TN 9A3TR 9A3TU 9A3TY 9A3VM 9A3W 9A3WX 9A3XM 9A3XU 9A3XV 9A3YT 9A3ZI 9A4AA 9A4C 9A4CC 9A4J 9A4KJ 9A4M 9A4MF 9A4NA 9A4OP 9A4R 9A4T 9A4TX 9A4U 9A4W 9A4WY 9A5AAX 9A5ALC 9A5AX 9A5CW 9A5CZK 9A5D 9A5D/P 9A5F 9A5FM 9A5G 9A5HZ 9A5K 9A5KIR 9A5M 9A5MI 9A5MX 9A5O 9A5SM 9A5ST 9A5VS 9A5W 9A5X 9A5Y 9A60KDE 9A6A 9A6AR 9A6DJX 9A6KX 9A6KZH 9A6M 9A6NA 9A6OY 9A6RT 9A6TT 9A6W 9A6XX 9A6ZZ 9A70A 9A73A 9A775O 9A7A 9A7B 9A7BGU 9A7C 9A7DD 9A7DX 9A7JCY 9A7KR 9A7OA 9A7R 9A7RA 9A7T 9A7V 9A7Y 9A7Z 9A7ZA 9A7ZZ 9A8A 9A8CV 9A8DV 9A8M 9A9A 9A9CW 9A9D 9A9EE 9A9I 9A9J 9A9K 9A9R 9A9RR 9A9TT 9A9XX 9A9Z 9A9ZG 9G2HO 9G5W 9H1AE 9H1CG 9H1ES 9H1MRL 9H1PI 9H1TT 9H1XT 9H3AY 9H3EE 9H3HZ 9H3TX 9H5BZ 9H5DX 9H5JO 9H6A 9H6YB 9J2BO 9K2GS 9K2GV 9K2HN 9K2K 9K2MU 9K2NO 9K2OD 9K9A 9K9C 9L1YXJ 9M2CNC 9M2FUL 9M2IDJ 9M2KDX 9M2M 9M2MDX 9M2MRS 9M2MSL 9M2PUL 9M2R 9M2SAF 9M2SDX 9M2SJK 9M2TDX 9M2TO 9M2YDX 9M2ZAK 9M4CCH 9M4CHS 9M4CKT 9M4COO 9M4CRX 9M4DX 9M4DXX 9M6BOB 9M6GOH 9M6MI 9M6NA 9M6ZAE 9M8DEN 9M8YY 9Q6BB 9V1OW 9V1SV 9V1VV 9V1XX 9V1YC 9W2DCW 9W2JST 9W2SAF 9W2VCK 9W2VIR 9W6EZ 9W6MUL 9W6VAT 9W8ZZK 9X0TA 9X4XX 9X9PJ 9Y4/KE1B 9Y4/LY2IJ 9Y4/VE3EY 9Y4D 9Y4HQ 9Y4W 9Z4A 9Z4CT 9Z4DZ 9Z4Y A35EU A41CK A41NN A42K A44A A45XR A47HQ A47RS A61BK A61EK A61FK A61HA A61QQ A61ZX A65BR A65CA A65CR A65DC A65DR A71AE A71AM A71EM A71GO A71UN A73A A75GA A92AA A92FQ A92GE A92GR A96A AA0AC AA0AI AA0AO AA0AW AA0B AA0CW AA0FO AA0FT AA0K AA0KW AA0MN AA0MZ AA0NK AA0O AA0Q AA0QA AA0RS AA0RX AA0U AA0W AA0WA AA0YY AA0Z AA1AR AA1CA AA1FB AA1JD AA1JM AA1K AA1LS AA1O AA1ON AA1QD AA1RB AA1SU AA1V AA1W AA1WA AA1ZT AA2AD AA2AS AA2AW AA2BJ AA2DC AA2EQ AA2FD AA2GF AA2GS AA2HJ AA2IA AA2IL AA2MF AA2MF/4 AA2MU AA2MX AA2Q AA2UK AA2VG AA2Y AA2ZW AA3AZ AA3B AA3C AA3EE AA3I AA3K AA3LX AA3P AA3RQ AA3S AA3T AA4AK AA4AK/1 AA4AQ AA4BD AA4CF AA4CS AA4CW AA4DD AA4EA AA4EH AA4GA AA4GT AA4H AA4IB AA4JQ AA4JS AA4JT AA4LR AA4LS AA4MB AA4MF AA4MY AA4MZ AA4NC AA4NN AA4NP AA4NU AA4Q AA4QE AA4R AA4RP AA4RV AA4RX AA4SB AA4SD AA4SS AA4TE AA4TI AA4TL AA4UC AA4UJ AA4V AA4VT AA4VV AA4W AA4WO AA4XA AA4XG AA4YL AA4ZU AA4ZZ AA5AD AA5AH AA5AM AA5AT AA5AU AA5B AA5BT AA5DX AA5FX AA5JF AA5LH AA5OY AA5SH AA5TB AA5TL AA5TL/7 AA5UK AA5UY AA5UZ AA5VE AA5VN AA5VU AA5W AA5WH AA5XA AA5ZT AA6AA AA6CV AA6DB AA6DX AA6DY AA6FD AA6G AA6IO AA6MK AA6MU AA6OC AA6PP AA6PW AA6RE AA6TQ AA6VB AA6VO AA6VX AA6W AA6XA AA6XV AA6XX AA7A AA7AV AA7CQ AA7CR AA7CT AA7DK AA7DP AA7E AA7EA AA7EW AA7FY AA7G AA7GT AA7IH AA7JV AA7MM AA7TU AA7TV AA7UN AA7V AA7VR AA7WB AA7WG AA7WM AA8BV AA8CS AA8CY AA8DC AA8DF AA8EN AA8GP AA8LF AA8MA AA8OY AA8P AA8R AA8SW AA8TA AA8TK AA8UK AA8UL AA8V AA8WH AA8WZ AA8XR AA8YC AA9A AA9BD AA9BL AA9D AA9DL AA9DU AA9F AA9GG AA9GL AA9HB AA9HQ AA9JS AA9K AA9L AA9LC AA9NN AA9RK AA9RR AA9SJ AA9UF AA9VI AA9WJ AA9WP AA9WS AA9YP AB0BM AB0BX AB0LR AB0O AB0P AB0QN AB0RE AB0RX AB0S AB0TO AB0TX AB0VD AB0X AB0YM AB1A AB1BX AB1EP AB1HL AB1J AB1JV AB1NS AB1RZ AB1U AB1UT AB1WG AB1WQ AB1XB AB1XW AB1XX AB1ZQ AB2CX AB2DE AB2E AB2EZ AB2KL AB2KX AB2TB AB2TC AB2VI AB2ZT AB2ZY AB3AH AB3AI AB3C AB3CV AB3CX AB3DC AB3GY AB3JF AB3SX AB3XJ AB3YH AB3ZI AB3ZJ AB4AM AB4B AB4BA AB4BJ AB4EH AB4EJ AB4ER AB4FR AB4GG AB4GO AB4I AB4IQ AB4JI AB4KA AB4KJ AB4KY AB4SF AB4TT AB4UF AB4V AB4VV AB4WL AB4YK AB4Z AB5A AB5CC AB5EB AB5GG AB5GI AB5GQ AB5J AB5KM AB5NX AB5OR AB5SS AB5TH AB5VJ AB5XM AB5XP AB5XS AB5XZ AB5ZA AB5ZA/7 AB6BT AB6MB AB6SO AB7E AB7HP AB7MP AB7NK AB7Q AB7RW AB7YQ AB8AJ AB8DD AB8DF AB8DS AB8FE AB8FJ AB8KP AB8M AB8O AB8OU AB8RC AB8RL AB8RM AB8UL AB8YK AB8YZ AB9CA AB9CD AB9CN AB9DG AB9DU AB9H AB9HH AB9IO AB9LF AB9M AB9NA AB9PF AB9PM AB9PN AB9QH AB9RP AB9TA AB9TE AB9TS AB9V AB9YC AC0C AC0DK AC0DQ AC0E AC0EK AC0IG AC0KK AC0PP AC0PR AC0RA AC0RL AC0VB AC0W AC0WL AC0ZM AC1AA AC1DC AC1DR AC1EB AC1EG AC1EN AC1EV AC1EW AC1GF AC1J AC1U AC2AA AC2AC AC2BI AC2C AC2FA AC2IK AC2K AC2N AC2OC AC2OY AC2QH AC2RJ AC2RL AC2T AC2UK AC2VE AC2XC AC2YI AC3BQ AC3BU AC3EK AC3M AC3TM AC3U AC3V AC4BV AC4CA AC4CA/5 AC4DP AC4G AC4GW AC4MC AC4MG AC4SJ AC4SR AC4TO AC4VM AC4YD AC4YL AC4ZH AC5AA AC5D AC5EZ AC5K AC5O AC5Q AC5RN AC5TU AC6BF AC6BW AC6DD AC6EE AC6JA AC6MW AC6NN AC6NT AC6SL AC6T AC6WI AC6YY AC6ZM AC7A AC7AF AC7B AC7CA AC7FD AC7FF AC7GG AC7GL AC7JM AC7JW AC7MX AC7NK AC7NU AC7P AC7S AC7SG AC7T AC8AG AC8AP AC8AZ AC8CE AC8E AC8FG AC8G AC8JT AC8JW AC8LE AC8LJ AC8MR AC8NP AC8PL AC8RJ AC8S AC8SI AC8TN AC8UW AC8VU AC8WC AC8XZ AC8Y AC8ZT AC8ZU AC8ZX AC9BJ AC9CP AC9DZ AC9EM AC9EZ AC9FL AC9GK AC9HP AC9JU AC9KW AC9LF AC9NE AC9PG AC9PR AC9QM AC9S AC9SJ AC9TN AC9TO AD0AB AD0BI AD0CI AD0DB AD0FB AD0FL AD0H AD0HL AD0K AD0KI AD0LI AD0MQ AD0PE AD0RW AD0S AD0TA AD0TR AD0TZ AD0WB AD0WX AD0YM AD0ZC AD1C AD1I AD1L AD1T AD2L AD2P AD3CX AD3PA AD3Y AD4CJ AD4DN AD4EB AD4EM AD4ES AD4ET AD4IE AD4KJ AD4OS AD4PK AD4SM AD4TA AD4TJ AD4TR AD4TT AD4UL AD4WG AD4XT AD4YQ AD4Z AD4Z/DAD AD5A AD5CQ AD5EN AD5HS AD5IN AD5LU AD5MD AD5NL AD5TT AD5UJ AD5VC AD5WB AD5X AD5XD AD5XI AD5YJ AD6DM AD6E AD6GE AD6HF AD6HV AD6LV AD6OE AD6RH AD6SF AD6YS AD6ZR AD7AF AD7GL AD7HI AD7KG AD7KI AD7L AD7LL AD7OG AD7OV AD7SF AD7UP AD7XG AD7Z AD8AL AD8B AD8BV AD8C AD8CW AD8DM AD8J AD8P AD8RL AD8Y AD9AT AD9I AE0A AE0AF AE0AX AE0DC AE0DM AE0EE AE0FA AE0FO AE0G AE0IB AE0JM AE0JR AE0L AE0MT AE0S AE0TT AE0X AE0XI AE1EZ AE1N AE1P AE1T AE2DX AE2JL AE2KP AE2L AE2T AE2U AE2W AE3D AE3J AE3RM AE3RT AE3T AE4CC AE4CW AE4DD AE4ED AE4FQ AE4M AE4MQ AE4NT AE4NY AE4PM AE4TH AE4TI AE4TX AE4VJ AE4WG AE4Y AE5E AE5GT AE5MM AE5NA AE5NW AE5O AE5P AE5SB AE5TR AE5X AE5YP AE5ZZ AE6BH AE6C AE6DB AE6JV AE6PL AE6XC AE6Y AE6YB AE7AA AE7AP AE7CG AE7DW AE7EE AE7EU AE7H AE7ID AE7JW AE7K AE7KI AE7LT AE7LT/P AE7S AE7U AE7VA AE7W AE8EA AE8J AE8M AE8S AE8TF AE8U AE9LL AF0E AF0S AF0U AF0Y AF0Z AF1R AF1T AF1U AF1US AF2D AF2F AF2M AF2T AF3D AF3I AF3IF AF3K AF3Z AF4AI AF4CD AF4D AF4HX AF4K AF4NJ AF4NW AF4O AF4RK AF4T AF4VA AF4Z AF5CC AF5DM AF5EH AF5FX AF5HE AF5MR AF5Q AF5SW AF5UX AF5XF AF5Z AF6F AF6GA AF6GQ AF6N AF6O AF6PH AF6SA AF7EL AF7HJ AF7KE AF7LZ AF7MD AF7MM AF7NX AF7O AF7QD AF7QJ AF7RS AF7TR AF7UK AF7WH AF7Z AF8A AF8C AF8RH AF9FA AF9J AF9W AG0DX AG1A AG1C AG1RL AG1T AG2AA AG2J AG2K AG2T AG2V AG3G AG3I AG3R AG4I AG4P AG4W AG4WY AG4YL AG4Z AG4ZA AG4ZL AG5AT AG5BA AG5DB AG5DT AG5EK AG5GN AG5HW AG5JW AG5KI AG5MS AG5QH AG5QX AG5RR AG5S AG5SO AG5SU AG5VE AG5VX AG5W AG5WK AG5Z AG6AG AG6AU AG6AY AG6BJ AG6GE AG6GL AG6JA AG6V AG6VH AG6WG AG7AA AG7CC AG7GB AG7GP AG7HA AG7HP AG7HX AG7HY AG7IK AG7KO AG7KU AG7N AG7QL AG7T AG7WI AG7YX AG9A AG9C AG9G AG9S AH2AV AH2O AH2O/W2 AH2R AH6/AD6E AH6EZ/W7 AH6FC AH6FX/W4 AH6KO AH6KW AH6NM AH6RE AH6SZ AH6U AH6V AH7C AI0M AI0Y AI0Y/9 AI1TT AI1V AI1W AI2I AI2N AI2P AI2S AI2T AI3KS AI3Q AI3Z AI4CJ AI4CO AI4DB AI4FR AI4GR AI4IC AI4MI AI4MS AI4QQ AI4RF AI4RJ AI4SV AI4UN AI4VE AI4WL AI4WU AI4WW AI4X AI5AA AI5IN AI5M AI5P AI5SF AI6CX AI6DG AI6DO AI6DR AI6EC AI6EY AI6IE AI6JB AI6LY AI6LY/7 AI6O AI6OS AI6OZ AI6PW AI6QZ AI6SL AI6US AI6UW AI6V AI6XN AI6YN AI6Z AI6ZV AI7C AI8F AI8IA AI8O AI8Y AI9I AI9K AI9L AI9R AI9T AJ0CM AJ0IM AJ1DM AJ1G AJ1I AJ1R AJ2T AJ2Y AJ3C AJ3DI AJ3O AJ3T AJ4A AJ4AY AJ4EN AJ4F AJ4LN AJ4MW AJ4NI AJ4S AJ4TF AJ4UQ AJ4VE AJ5F AJ5ZX AJ6BV AJ6CE AJ6EX AJ6FK AJ6MQ AJ6O AJ6T AJ6V AJ7F AJ7G AJ8B AJ9C AJ9K AK0BC AK0DX AK0F AK0M AK0MR AK0SK AK1K AK1MD AK1N AK1W AK1WM AK1X AK2B AK2G AK2S AK2U AK3B AK3KA AK3Q AK3V AK3Y AK4AO AK4AT AK4BB AK4FL AK4HB AK4JA AK4LL AK4NC AK4NL AK4NY AK4QR AK4SQ AK4TW AK4VQ AK4Z AK5CT AK5DX AK5X AK5Y AK6A AK6A/7 AK6DV AK6M AK6R AK6W AK7AA AK7AT AK7G/6 AK7MG AK7O AK7RM AK7RO AK8A AK9B AK9D AK9S AL0A AL1G AL3W AL4B AL4Y AL7AF AL7JK AL7JX AL7KC AL7L AL7LO AL7RF AL7TC AM170YO AM370KU AM470AAZ AM70C AM70D AM70E AM70I AM770TG AM770ZY AN1PM AN1WHS AT3A AT5M AY1D AY7D AY8A B1HQ B1Z B4HQ B4T B6HQ B7HQ B7P B7Q B9K BA1PK BA1RB BA2BI BA3MM BA3OM BA4DL BA4EO BA4II BA4MY BA4SD BA4TB BA4VE BA4WR BA5AB BA5AJ BA7IO BA7JA BA7JT BA7NO BA7NQ BA7QT BA8BA BD0AAI BD1GO BD1IIJ BD1LT BD1RCR BD1RX BD2BT BD2RJ BD3CB BD3MV BD3PXM BD3QA BD3QT BD4AKC BD4QA BD4QB BD4RWR BD4SS BD4TS BD4UJ BD4WE BD4WN BD5BPA BD5FFK BD5XM BD5XX BD6RD BD7AL BD7BW BD7DT BD7IS BD7JNA BD7JPC BD7JZC BD7LMA BD7LMD BD7LNI BD7LPD BD7MNI BD7MQ BD7NWZ BD7OB BD7OXR BD8ASG BD8SZ BG0AXS BG0BAC BG1DX BG1QJE BG1REN BG1SZT BG1VFD BG1WNU BG2AUE BG2QMO BG2VIA BG2WRJ BG3GEF BG3IAY BG3ITB BG3UPA BG4AHK BG4CMI BG4GOV BG4HUL BG4NMT BG4OP BG4QNE BG4TRN BG4UQX BG5BAA BG5BDY BG5BWZ BG5EFD BG5HEK BG5JND BG5JNT BG5OA BG6GQE BG6LQV BG6LQZ BG6SNJ BG6SZD BG7BES BG7IWZ BG7JJW BG7NRG BG7OAJ BG7SAZ BG8BXM BG8FT BG8INK BG8NKX BG8NNG BG8PM BG8SRK BG8SXC BG8TFN BG9NJY BG9OF BG9XD BG9XD/7 BH1BIP BH1DYK BH1EBF BH1IGG BH1NGG BH1RGL BH1TTE BH2RO BH3SCC BH4AYG BH4BFS BH4BIN BH4BJP BH4BWX BH4DBP BH4DEG BH4ESB BH4EUJ BH4LLP BH4OUF BH4PVP BH4PYC BH4SKP BH4TQX BH4TVU BH4UTT BH6IC BH6JFR BH6KOK BH6KWC BH6MWC BH7JFR BH7JUO BH7PFH BH7QP BH8ASZ BI1EIH BI4KKC BI4RYH BI4SCC BI4SDT BI4SSB BI4TGL BI4VIP BI4WOP BI4WRI BI4XDT BI7KCD BI8CZM BI8FZA BP0P BU2BE BU2BO BU2EC BU2EO BU2EP BU2EQ BV0HQ BV0J BV0WPX BV1EK BV1EL BV2A/3 BV2B BV2LA BV30R BV3UF BW2/JP1RIW BX2AFR BX2AFS BX2AGF BX2AK BX3AA BX3AC BX5AA BY1AA BY1AS BY1CW BY1CY BY1HAM BY1OK BY3GA BY4DX BY4QA BY4SZ BY4TC BY5EA BY6LY BY7KP BY8AC BY8DX BY8MA C31CT C31LK C31MF C37AC C37N C37NL C37URA C44C C4A C4T C4W C51RR C56/G2YT C56DF C56XA C5DX C5YK C63R C6AEI C6AGU C6ANM C6AQQ C6ARW C6ATF C7A C93PA CA2CEV CA3JBD CA3KRM CA3SOC CA4PSH CA4UFC CA5GRF CA6CGX CB1H CB1HQ CB1S CB3ET CB3LR CB3PR CB3R CB3UP CB3W CB5T CB6F CB6P CB6WW CB8E CD2ANK CD4PSH CE1BF CE1DN CE1DY CE1LTL CE1OEB CE1TT CE1UGE CE2AWW CE2BMW CE2CT CE2LE CE2LR CE2ML CE2MT CE2MVF CE2SQE CE2SV CE2WNW CE3AA CE3BC CE3BN CE3CBM CE3CT CE3DNP CE3GCA CE3JBD CE3LI CE3NR CE3OP CE3OP/2 CE3PA CE3TL CE3WW CE3WYZ CE4CBJ CE4CBK CE4JZO CE4KTM CE4SFG CE5AUC CE5JZO CE5PHI CE6CGX CE6PGO CE6SAX CE6TK CE6TRA CE6UFF CE6VMO CE7KF CE7VPQ CJ2CZ CJ3A CJ3CCO CJ3RA CJ7DZO CK1RSM CK2I CK2Z CK3LRL CK3RUA CK4EV CK6LB CK7CC CK9ML CM2HYR CM2RSV CM2XN CM3EFM CM6RK CM7OK CM8CF CM8JY CM8NMN CM8RBD CN2A CN2AA CN2AM CN2CO CN2DD CN2JJ CN3A CN4P CN6A CN8BHA CN8CE CN8KD CN8MAA CN8PA CN8SG CN8VO CN8WW CN8YR CN8YZ CO0CHE CO2AJ CO2AME CO2AN CO2CW CO2GG CO2GL CO2JD CO2KY CO2MM CO2RQ CO2SG CO2VDD CO2VE CO2WL CO2XK CO2YQ CO3GD CO3JA CO3JN CO3LC CO3VR CO5LB CO6EC CO6HLP CO6HZ CO6LC CO6LE CO6LP CO6OV CO6RD CO6SRS CO6WYR CO6YI CO7MS CO7OK CO7RR CO8AW CO8BYT CO8CY CO8HF CO8IH CO8LY CO8NMN CO8OH CO8RB CO8RBD CO8RCP CO8RH CO8RRM CO8SJ CO8TH CO8WN CO8ZZ CO8ZZF CO9AAA CO9CTT CO9LAA CP5HK CP6UA CQ3HQ CQ3J CQ3W CQ7A CQ7R CQ8M CR140AA CR2L CR2S CR2W CR2X CR3A CR3DX CR3EE CR3S CR3V CR3W CR3WW CR3X CR5A CR5C CR5CW CR5D CR5E CR5HQ CR5K CR5N CR5O CR5T CR6A CR6K CR6P CR6T CR7ATQ CS25ARR CS25FOQ CS2C CS2I CS2T CS5CC CS5CRE CS5CT CS5LX CS5MAR CS5SS CS7AMH CS7AMN CS7AOL CS7AOM CS7APD CS9ABE CT1AGS CT1AHU CT1AL CT1AOZ CT1BLE CT1BOH CT1BOL CT1BOP CT1BQH CT1BWU CT1BWW CT1BXE CT1BXT CT1DBS CT1DJE CT1DRB CT1DSV CT1DVV CT1DZY CT1EBM CT1EGF CT1EGW CT1EHK CT1EKD CT1EKU CT1ELP CT1ELZ CT1ENV CT1EOD CT1ESV CT1EWA CT1EXR CT1FAC CT1FHL CT1FKN CT1FOQ CT1FPQ CT1GFQ CT1HIX CT1HXB CT1HXJ CT1ILT CT1IQI CT1JGA CT2GSN CT2HKN CT2HOV CT2HTM CT2IQK CT2ITR CT2JBD CT2JMR CT2JVP CT2JXU CT3BD CT3DL CT3EN CT3FW CT3HF CT3HY CT3IQ CT3KN CT3MD CT4QB CT5KAO CT7/DJ7PR CT7/F6HBR CT7/G4BJM CT7/G4ERW CT7/HB9AAP CT7/LY1FW CT7ABG CT7ABP CT7ACG CT7AGI CT7AGZ CT7AHV CT7AIU CT7AIX CT7AJL CT7AKW CT7ANO CT7AOL CT7APD CT7AQS CT7AUP CT8/DF6PB CT8/DJ5MW CT8/R9BB CT8/S51TA CT9/CT1BWU CT9/DJ2YA CT9/DL3KWF CT9/DL3KWR CT9/OM2KW CT9/SP6GJY CT9ABN CT9ABO CT9ABP CT9ABR CU2AP CU2ARA CU2CE CU2CR CU2DX CU2KG CU3/OK1DX CU3AA CU3AK CU3AN CU3DX CU3EQ CU3HN CU4DX CU8FN CV7S CW4MAX CW7C CX1AA CX1AV CX1CAN CX1CW CX2AQ CX2BR CX2CC CX2DK CX3AL CX3AT CX4AD CX4SS CX5A CX5ABM CX5CBA CX5FK CX5UA CX6VM CX7ACH CX7BBR CX7CO CX7RT CX7SS CX8DS CX9AU CY1R CZ1Z D1A D1AZ D1CTT D1DNR D1DX D1HQ D1M D1WA D41CV D4C D4CC D4Z D68C D68CCC D70LW D73G D90M DA0A DA0AA DA0C DA0CCC DA0DOM DA0DX DA0HEL DA0HQ DA0N DA0RC DA0T DA0WRTC DA0Y DA1DX DA2A DA2C DA2D DA2X DA3MHA DA3T DA9A DB0DH DB0HY DB1BAC DB1BAN DB1CD DB1HCL DB1HEF DB1KK DB1RLE DB1VQ DB25ONN DB2B DB2BJT DB2HG DB2KT DB2MJ DB3KE DB4BJ DB4LI DB4LL DB4MM DB4RG DB5ABS DB5DY DB6NT DB8AH DB8DT DB8MG DB9OH DC0HD DC0NAC DC1GUN DC1HR DC1JAG DC1LEX DC1MAR DC2AN DC2CB DC2CL DC2CW DC2VE DC2YY DC3PH DC4A DC5GA DC6MY DC7DX DC8SP DC8TT DC8XV DC8YZ DC9ZP DD0CC DD0DRK DD0VE DD0VS DD0VU DD1A DD1FLO DD1JN DD1LD DD1OP DD1TT DD1UN DD2BU DD2CW DD2EG DD2ML DD2VO DD3FH DD3SF DD4DA DD5A DD5AJ DD5DD DD5KD DD5KG DD5M DD5MA DD5XX DD5ZZ DD6DR DD7CW DD7NT DD7UW DD8PU DD8VX DD9WL DF0BLM DF0BV DF0BW DF0CHE DF0CI DF0DG DF0DIG DF0GEB DF0HG DF0HQ DF0IT DF0NG DF0RW DF0S DF0SQ DF0SX DF0TU DF0UK DF0VK/P DF13MUC DF1BV DF1DT DF1DX DF1GN DF1GRA DF1HF DF1IW DF1KG DF1LON DF1LX DF1MM DF1OE DF1PY DF1QR DF1SD DF1SZ DF1TB DF1WR DF1WS DF1XC DF1ZN DF2AJ DF2AP DF2BO DF2CH DF2CK DF2DJ DF2DR DF2F DF2FM DF2FR DF2GW DF2IAX DF2IY DF2KD DF2KK DF2LH DF2PI DF2PY DF2QZ DF2RG DF2SD DF2TH DF2UA DF2UD DF2WF DF2WZ DF3AX DF3CB DF3CE DF3EC DF3EH DF3FS DF3HD DF3IS DF3MC DF3NBM DF3NW DF3OL DF3PN DF3QG DF3SM DF3TE DF3UB DF3VM DF3XZ DF4BV DF4IAR DF4JM DF4LB DF4PD DF4SR DF4TD DF4TS DF4U DF4UM DF4WC DF4WG DF4WX DF4XF DF4XG DF4XX DF4ZK DF4ZL DF4ZS DF5A DF5A/P DF5AN DF5AU DF5BM DF5BX DF5DG DF5DW DF5DY DF5EG DF5EM DF5FS DF5LW DF5MA DF5QC DF5RA DF5RF DF5SI DF5TR DF5UL DF5WBA DF5WN DF6FQ DF6JC DF6JF DF6KA DF6LI DF6LQ DF6PB DF6QC DF6QE DF6QV DF6RI DF6RK DF6WE DF6XE DF6YC DF70DARC DF7AT DF7BA DF7BL DF7CB DF7DC DF7DR DF7EE DF7EF DF7EM DF7GG DF7JC DF7LA DF7LS DF7NS DF7OA DF7RG DF7TV DF7XH DF7XR DF7ZS DF80FOC DF8AA DF8AE DF8AN DF8DU DF8DX DF8HS DF8IU DF8JD DF8JK DF8KY DF8LY DF8QB DF8TM DF8TY DF8UO DF8V DF8VO DF8XC DF8ZH DF9CY DF9DH DF9EY DF9GH DF9GR DF9IX DF9JS DF9LJ DF9LW DF9ME DF9OO DF9PG DF9PX DF9TF DF9VJ DF9YC DF9ZV DG0CG DG0CH DG0KS DG0LFG DG0OBU DG0OKW DG0RO DG0YS DG1AAE DG1ATN DG1BHA DG1EAD DG1ELG DG1FN DG1HXJ DG1IU DG1KJG DG1LS DG1NPM DG1PM DG1RPU DG1RZH DG1VL DG1YBN DG2BAR DG2BHB DG2BWG DG2FDD DG2GAW DG2GG DG2GTG DG2JA DG2NCE DG2NMH DG3BCZ DG3FAW DG3FK DG3IS DG4CG DG4DX DG4EJ DG4FCN DG4FDQ DG4KAL DG4MB DG4R DG4SBZ DG4YIF DG5BQ DG5E DG5FF DG5LC/P DG5LP DG5MLA DG5NBS DG5NGS DG6DAF/P DG6KL DG6ME DG6SA DG6TOM DG7BST DG7CF DG7DBR DG7EE DG7FB DG7JB DG7LAN DG7LAN/P DG7MA DG7NFX DG7RO DG8EV DG8HJ DG8KAD DG8LG DG8NCO DG8NCY DG8OBN DG8RCN DG8ZN DG9BEO DG9FBA DG9KB DG9MDM DG9MEH DG9NAV DG9NED DG9NGO DG9SEH DG9VH DG9YFB DH0F DH0GHU DH0GSU DH0JAE DH0MB DH1AHL DH1AKY DH1DAC DH1HHR DH1KGO DH1NBE DH1PAL DH1RK DH1TST DH1TT DH2AAK DH2DAM DH2FW DH2PA DH2PAF DH2PG DH2URF DH2VC DH3KBI DH3RD DH3SBB DH4JQ DH4PSG DH5MK DH5MM DH5NT DH5PK DH5WB DH6BH DH6DAO DH6KM DH6MES DH6RAE DH6RS DH6YAG DH7ACI DH7KU DH7NK DH7PR DH7SA DH7TNO DH7TS DH8BAO DH8BQA DH8DR DH8KV DH8LAW DH8MS DH8WE DH8WR DH9DX/P DH9ET DH9OK DJ0AH DJ0AJ DJ0BE DJ0DX DJ0FX DJ0IF DJ0MDR DJ0MY DJ0SP DJ0YI DJ1AA DJ1DB DJ1FZ DJ1HR DJ1KJ DJ1LJ DJ1MM DJ1ND DJ1OJ DJ1PQ DJ1RK DJ1SL DJ1TO DJ1TU DJ1XT DJ1YF DJ1YFK DJ2AX DJ2BC DJ2FR DJ2GMS DJ2IA DJ2IO DJ2KD DJ2PR DJ2QV DJ2RG DJ2SEA DJ2SX DJ2XC DJ2YA DJ2YE DJ3AA DJ3CQ DJ3CS DJ3DQ DJ3EF DJ3EI DJ3GE DJ3HW DJ3IW DJ3JB DJ3JD DJ3NG DJ3NJ DJ3NK DJ3RA DJ3TU DJ3UN DJ3WE DJ3XA DJ3XD DJ3XM DJ3ZF DJ4BO DJ4DN DJ4IP DJ4KW DJ4MH DJ4MO DJ4MX DJ4MZ DJ4OQ DJ4RP DJ4WM DJ4WS DJ4WT DJ4XR DJ5AN DJ5AZ DJ5BV DJ5BWD DJ5CL DJ5CT DJ5I DJ5IW DJ5KW DJ5KX DJ5LA DJ5MF DJ5MN DJ5MO DJ5MW DJ5MY DJ5NN DJ5PM DJ5QE DJ5TD DJ5TT DJ5UZ DJ5WW DJ6AU DJ6CX DJ6DO DJ6FO DJ6GI DJ6HR DJ6JH DJ6MK DJ6NL DJ6OI DJ6OK DJ6OV DJ6OZ DJ6RN DJ6TB DJ6TK DJ6UP DJ6ZJ DJ6ZM DJ70WAE DJ7A DJ7BU DJ7EC DJ7EO DJ7HH DJ7IK DJ7JC DJ7MH DJ7OM DJ7OQ DJ7PR DJ7PRM DJ7R DJ7RL DJ7TO DJ7TW DJ7UC DJ7UD DJ7UO DJ7WG DJ7WW DJ7YP DJ8ES DJ8EW DJ8KW DJ8KZ DJ8MP DJ8OG DJ8QA DJ8QP DJ8RS DJ8UL DJ8VC DJ8VH DJ8WK DJ8XB DJ9AO DJ9BM DJ9BO DJ9CN DJ9DJ DJ9DZ DJ9EG DJ9ER DJ9HX DJ9IE DJ9KH DJ9KM DJ9MH DJ9RR DJ9SN DJ9SO DJ9UN DJ9XB DJ9YL DJ9ZB DK0AE DK0AN DK0BM DK0BN DK0DI DK0ED DK0EE DK0EP/P DK0FC DK0FD DK0FL DK0HAT DK0HR DK0IU DK0IW DK0JA DK0KC DK0KG DK0KKB DK0MM DK0MN DK0MN/P DK0OD DK0OF DK0PO DK0RA DK0RX DK0SB DK0SU DK0TP DK0TU DK0UM DK0WK/P DK1A DK1AC DK1AUP DK1AX DK1BN DK1CE DK1EI DK1FE DK1FT DK1FW DK1GW DK1IP DK1K DK1KC DK1LRS DK1MAX DK1MIR DK1MM DK1NO DK1OM DK1PG DK1PP DK1RU DK1TW DK1TX DK1VB DK1VD DK1VP DK1WA DK1WI DK1WU DK1WZ DK1X DK1XC DK1YH DK1YP DK200MARX DK2AMS DK2AT DK2AY DK2BJ DK2BK DK2BU DK2CC DK2CF DK2CX DK2DQ DK2DW DK2FG DK2FL DK2GZ DK2HZ DK2LO DK2MC DK2MX DK2NPM DK2OY DK2PP DK2RO DK2SG DK2TG DK2TX DK2VM DK2WC DK2WU DK2YL DK2ZO DK3A DK3ABM DK3AX DK3BK DK3BN DK3CC DK3DUA DK3EE DK3GG DK3GI DK3HM DK3HV DK3LJ DK3NU DK3PM DK3QN DK3QZ DK3R DK3RA DK3RY DK3SJ DK3T DK3TA DK3TG DK3UA DK3WE DK3WJ DK3WM DK3WN DK3WW DK3XO DK3YD DK4AA DK4CU DK4DS DK4EF DK4EI DK4FP DK4FT DK4FZ DK4IO DK4JA DK4KK DK4LEH DK4LI DK4LX DK4MDA DK4MT DK4PE DK4QT DK4RL DK4SG DK4VF DK4VW DK4WA DK4WK DK4WW DK4YB DK4YF DK4YJ DK5AD DK5AX DK5CF DK5D DK5DC DK5DQ DK5EZ DK5FF DK5GB DK5HZ DK5IR DK5JM DK5KF DK5KK DK5KMA DK5LC DK5LY DK5MJ DK5OS DK5OZ DK5PF DK5PQ DK5PR DK5QN DK5RK DK5RL DK5SF DK5TRI DK5TX DK5WB DK5WN DK5WO DK5XG DK5ZX DK6AH DK6BA DK6CQ DK6CS DK6DL DK6FX DK6HN DK6IM DK6JU DK6MO DK6MP DK6MT DK6NJ DK6OK DK6OR DK6PT DK6QW DK6SP DK6TA DK6VCO DK6WH DK6WL DK6XZ DK7A DK7AC DK7AM DK7CX DK7FH DK7FS DK7FZ DK7GH DK7HA DK7IF DK7JL DK7JQ DK7LJ DK7LX DK7MCX DK7MD DK7NO DK7OB DK7OG DK7SP DK7SS DK7TM DK7TX DK7TY DK7UY DK7VW DK7YY DK7ZH DK7ZT DK8AX DK8EY DK8FA DK8FD DK8HE DK8IF DK8IT DK8MZ DK8OL DK8RE DK8SR DK8TA DK8WG DK8ZB DK8ZZ DK9BM DK9CG DK9ETM DK9FEC DK9HE DK9HN DK9IP DK9KW DK9MH DK9MS DK9OY DK9PY DK9TN DK9VA DK9VZ DK9WI DK9ZE DK9ZQ DL0ABT DL0AH DL0AO DL0AS DL0AVH DL0AZ DL0BOR DL0BSK DL0BX DL0CG DL0CS DL0CS/P DL0DWD DL0DX DL0ESA DL0FA DL0FR DL0FTL DL0FUL DL0GC DL0GE/P DL0GEL DL0GEO DL0GL DL0GMH DL0GRH DL0GTH DL0GX DL0HDB DL0HFC DL0HGW DL0HH DL0HMK DL0HN DL0ICH DL0IH DL0II DL0IL DL0JR DL0KC DL0KJ DL0KWH/P DL0LA/P DL0LK DL0LU DL0LW DL0MBG DL0MBO DL0MCM DL0MFL DL0NG DL0NS DL0OVA DL0PB DL0PS DL0RD DL0RL DL0RM DL0RTA DL0SKCC DL0SLG DL0SN DL0SOP DL0TDS DL0UM DL0VBG DL0VG DL0WAE DL0WM DL0WW DL0WX DL0XM DL0XX DL0ZDD DL0ZZ DL100BKW DL19RIC DL1A DL1AH DL1AI DL1AIW DL1AKL DL1AKP DL1ALN DL1AOB DL1AQU DL1AQU/P DL1AQY DL1ARJ DL1ARK DL1ARS DL1ASA DL1ATZ DL1AUZ DL1AVF DL1AWC DL1AWM DL1AXX DL1BA DL1BFR DL1BSN DL1BUG DL1BWU DL1CBQ DL1CC DL1CG DL1CW DL1D DL1DAW DL1DBR DL1DCT DL1DF DL1DQJ DL1DQW DL1DSW DL1DTL DL1DUO DL1DUS DL1DV DL1DWR DL1DXA DL1DY DL1EAL DL1EFW DL1EHG DL1EHR DL1EJD DL1EJM DL1EK DL1EKO DL1EKQ DL1EMA DL1EMY DL1FCU DL1FMG DL1FY DL1GBQ DL1GKC DL1GLH DL1GME DL1GO DL1GWS DL1GZW DL1HAA DL1HAZ DL1HBT DL1HDL DL1HSI DL1HTB DL1HUH DL1HWS DL1HZM DL1IAO DL1IAV DL1II DL1JCM DL1JDT DL1JGO DL1JHW DL1JML DL1JNA DL1JPF DL1KAS DL1KVN DL1KVS DL1KWK DL1LAF DL1LH DL1LOD DL1LRI DL1LSH DL1LSW DL1LTK DL1LZ DL1M DL1MAJ DL1MBG DL1MGB DL1MHJ DL1MP DL1NEK DL1NEO DL1NHW DL1NKB DL1NKS DL1NUX DL1OD DL1OJ DL1ONI DL1PAN DL1PSK DL1PT DL1QQ DL1QW DL1RAP DL1REM DL1RG DL1RGA DL1RH DL1RI DL1RNN DL1RNT DL1ROJ DL1ROT DL1RPR DL1RTD DL1RTL DL1RTO DL1RTS DL1SA DL1SAN DL1SBF DL1SCZ DL1SDX DL1SEH DL1SKK DL1SL DL1SMA DL1SO DL1SR DL1STG DL1SVA DL1SWB DL1SWT DL1SXB DL1T DL1THB DL1TRK DL1TS DL1TSM DL1VDL DL1VF DL1VJL DL1WA DL1WM DL1XP DL1YAB DL1YAF DL1YAW DL1YBI DL1YCF DL1YEG DL1YM DL1YPF DL1ZAX DL1ZBO DL1ZM DL1ZU DL20IKT DL2A DL2AAZ DL2ADI DL2AJB DL2AK DL2AL DL2AMD DL2ANM DL2AOM DL2ARD DL2ARN DL2ART DL2AWA DL2AWW DL2AXM DL2AYK DL2BBL DL2BDA DL2BIS DL2BQV DL2BRN DL2CC DL2DCX DL2DQL DL2DRM DL2DRU DL2DTJ DL2DVE DL2DWP DL2DX DL2DXA DL2DYL DL2F DL2FCA DL2FDL DL2FK DL2FQ DL2GAN DL2GMK DL2GPK DL2HRF DL2HWB DL2HWI DL2HYH DL2IC DL2JAA DL2JX DL2KBX DL2KCK DL2KMS DL2KWA DL2LBK DL2LDE DL2LFH DL2LI DL2LMS DL2LQC DL2LRT DL2LSM DL2LVM DL2MDU DL2MDZ DL2MHO DL2MIH DL2MM DL2NBB DL2NBU DL2NBW DL2NBY DL2NFC DL2OBN DL2OE DL2OM DL2PK DL2QT DL2RH DL2RMC DL2RNF DL2RPS DL2RSA DL2RTJ DL2RUG DL2RUM DL2RZG DL2SAX DL2SAX/P DL2SBA DL2SWR DL2SWW DL2TG DL2TM DL2TOS DL2TR DL2VA DL2VBN DL2VE DL2VK DL2VM DL2VN DL2VNL DL2VPF DL2VWR DL2XC DL2YBG DL2YET DL2YL DL2ZA DL2ZAY DL2ZBO DL2ZN DL3ABY DL3ALI DL3AMB DL3AMI DL3ANK DL3AO DL3ARK DL3ARM DL3ARS DL3ASM DL3AVI DL3AZ DL3BCR DL3BCU DL3BQA DL3BRE DL3BVA DL3BWF DL3BY DL3CA DL3CB DL3CX DL3DQL DL3DRN DL3DTH DL3DUE DL3DW DL3DXX DL3EAZ DL3FBB DL3FCG DL3FF DL3FSC DL3GA DL3GD DL3HAA DL3HAE DL3HAH DL3HQN DL3HRZ DL3HTF DL3HXS DL3IAC DL3IAS DL3JAN DL3JON DL3JRA DL3JXN DL3KUD DL3KVR DL3KWF DL3KWR DL3LA DL3LAB DL3LAR DL3LBM DL3LBP DL3LE DL3LJ DL3LK DL3MB DL3MBE DL3MF DL3MVC DL3NAA DL3NCR DL3NDD DL3NEY DL3OAU DL3OH DL3OR DL3PWR DL3RAH DL3RAR DL3RDM DL3RHN DL3SDN DL3SKF DL3SM DL3SWS DL3SYA DL3TC DL3TU DL3TVI DL3UB DL3VTA DL3VZL DL3XM DL3YCX DL3YM DL3ZZA DL4A DL4AAE DL4ABR DL4AC DL4ALI DL4AUE DL4BBJ DL4CF DL4CH DL4CW DL4DBM DL4DCE DL4DQA DL4DRW DL4DW DL4DXX DL4DZ DL4EAM DL4EAX DL4EBW DL4EDB DL4EPM DL4FAP DL4FCH DL4FDI DL4FDM DL4FF DL4FI DL4FN DL4FNM DL4HBF DL4HCF DL4HG DL4HRM DL4HWM DL4IAZ DL4IB DL4IW DL4JLM DL4JU DL4JWU DL4KCA DL4KG DL4KUG DL4KW DL4KWA DL4LAM DL4LBK DL4LT DL4MA DL4MAK DL4ME DL4MFM DL4MFR DL4MHA DL4MP DL4NAC DL4NER DL4OCF DL4PT DL4RAK DL4RCE DL4RDJ DL4RDP DL4ROB DL4SCZ DL4SDT DL4SDW DL4SEW DL4SKF DL4SL DL4SUN DL4SZB DL4TJ DL4UCS DL4UL DL4UNY DL4VAI DL4WA DL4WG DL4XU DL4YAO DL4YR DL4ZA DL4ZAA DL4ZB DL4ZBY DL50IFM DL50NFA DL5AAZ DL5ALW DL5AN DL5ANE DL5ANS DL5ANT DL5ARM DL5ASK DL5AWE DL5AWI DL5AXX DL5AYI DL5AZZ DL5BAW DL5BAW/P DL5CAT DL5CC DL5CD DL5CF DL5CH DL5CL DL5CT DL5DBY DL5DM DL5DQZ DL5DSB DL5DTG DL5DWF DL5DXS DL5EE DL5FBB DL5FCZ DL5FDP DL5FU DL5GAC DL5GBG DL5HAI DL5IAH DL5IC DL5IF DL5JAB DL5JAG DL5JAN DL5JBW DL5JH DL5JQ DL5JS DL5KBO DL5KCX DL5KUD DL5KUT DL5KVV DL5KVV/P DL5KW DL5L DL5LB DL5LED DL5LYM DL5M DL5MAE DL5MAM DL5ME DL5MEL DL5MEV DL5MFF DL5MK DL5ML DL5MO DL5NAM DL5NAV DL5NO DL5OAB DL5OCR DL5OE DL5PW DL5QS DL5RBW DL5RDO DL5RDP DL5RFK DL5RJ DL5RK DL5RMH DL5RU DL5SDN DL5SE DL5SFC DL5ST DL5TW DL5UG DL5UZ DL5WS DL5WW DL5X DL5XAT DL5XJ DL5XL DL5XX DL5YCI DL5YL DL5YM DL5ZB DL5ZBE DL5ZK DL5ZL DL6AAF DL6ABB DL6ABN DL6AG DL6AH DL6ATM DL6AWJ DL6BBT DL6BS DL6CT DL6DBP DL6DCD DL6DCX DL6DG DL6DH DL6DJ DL6DQW DL6DQW/P DL6DVU DL6ED DL6EZ DL6FA DL6FAX DL6FBK DL6FBL DL6FBR DL6FCB DL6FCK DL6GCE DL6HBQ DL6HCC DL6IAK DL6JV DL6JZ DL6KAC DL6KO DL6KVA DL6KWN DL6LBI DL6MDG DL6MFK DL6MHW DL6MIG DL6MWG DL6NAL DL6NAV DL6NBS DL6NCY DL6NDW DL6NWA DL6OCH DL6OCM DL6ON DL6PO DL6QW DL6RAI DL6RBH DL6RDE DL6RDM DL6RDR DL6SBD DL6SFR DL6SRD DL6UAA DL6UD DL6UGF DL6UHA DL6UHD DL6UKL DL6UM DL6WA DL6WT DL6YFG DL6YRM DL6ZB DL6ZBN DL6ZXG DL70AFUG DL70BRD DL7A DL7ACN DL7ALM DL7ANR DL7AOJ DL7AOS DL7APT DL7ARJ DL7ARV DL7AT DL7ATR DL7AU DL7AWO DL7BC DL7BO DL7BQ DL7CO DL7CX DL7DZ DL7ED DL7EM DL7FB DL7FCQ DL7FE DL7FUA DL7GEM DL7GP DL7GW DL7HU DL7HZ DL7JAN DL7JOM DL7JV DL7LAM DL7LE DL7LG DL7LIN DL7LX DL7NDS DL7NS DL7NV DL7NX DL7OD DL7ON DL7PA DL7PV DL7QU DL7RKK DL7RV DL7SI DL7SX DL7TG DL7UCW DL7UDA DL7UG DL7UGN DL7UKA DL7UKT DL7UM DL7UMK DL7UN DL7UPN DL7URB DL7URH DL7USM DL7USY DL7UVO DL7UXG DL7VBJ DL7VEE DL7VFM DL7VHP DL7VMM DL7VOG DL7VRG DL7VX DL7X/P DL7YAD DL7YS DL80FOC DL8AAE DL8AAI DL8AAV DL8AWK DL8AX DL8BEG DL8BFV DL8BH DL8BV DL8CA DL8CN DL8CO DL8DBW DL8DSL DL8DUL DL8DWL DL8DWW DL8DXL DL8DXW DL8DYL DL8FBH DL8HK DL8IH DL8JDX DL8KAC DL8KFO DL8KX DL8L DL8LAQ DL8LAS DL8LBK DL8LR DL8MAS DL8MBS DL8MDW DL8MF DL8MKG DL8MV DL8NBJ DL8NCS DL8NFA DL8NU DL8OAZ DL8OH DL8PG DL8QS DL8RB DL8RBR DL8RDL DL8SAO DL8SCG DL8SDC DL8TG DL8TN DL8TR DL8TV DL8UAT DL8UD DL8UI DL8UIL DL8UKE DL8UKW DL8ULF DL8ULO DL8UP DL8USA DL8UV DL8WAA DL8WEM DL8WN DL8WX DL8YAU DL8ZAJ DL8ZP DL8ZU DL9ABM DL9AJ DL9BBE DL9CHR DL9CI DL9CP DL9CW DL9DAJ DL9DAN DL9DBZ DL9EAH DL9EE DL9EJ DL9FB DL9FBF DL9FCQ DL9FCR DL9GCG DL9GFB DL9GK DL9GMC DL9GRE DL9GS DL9GTB DL9GWA DL9GWD DL9HB DL9IU DL9JBN DL9JON DL9JSO DL9LM DL9MDI DL9MDW DL9MFY DL9MKN DL9MRF DL9MS DL9MWG DL9NCR DL9NDM DL9NDV DL9NDW DL9NEI DL9NO DL9OCG DL9OE DL9OHA DL9OLI DL9PB DL9PR DL9RAR DL9RBT DL9RDW DL9SAS DL9SCO DL9SEV DL9SUB DL9UJF DL9UO DL9UP DL9USA DL9WO DL9YAJ DL9YCS DL9ZAL DL9ZOG DL9ZP DL9ZWG DM0Y DM18ARDF DM1AA DM1AOK DM1DE DM1FS DM1LAN DM1LM DM1YS DM2025C DM2AWM DM2BPG DM2BR DM2C DM2DLG DM2DMI DM2DXA DM2DZM DM2FEH DM2GG DM2M DM2MF DM2MX DM2ORI DM2RM DM2RN DM2TO DM2TS DM2W DM2X DM2XM DM30RSV DM3A DM3B DM3BJ DM3BN DM3C DM3CW DM3F DM3HZN DM3M DM3MM DM3PKK DM3PYA DM3SCK DM3VPJ DM3X DM3XI DM3XRF DM3Y DM3Y/P DM3ZF DM3ZM DM460DA DM4CM DM4CW DM4EAX DM4EE DM4IM DM4JK DM4KM DM4L DM4M DM4MN DM4NF DM4VPF DM4X DM5A DM5AA DM5B DM5CQ DM5DM DM5DX DM5EE DM5EL DM5EM DM5HF DM5JBN DM5JBN/P DM5JL DM5KK DM5M DM5MM DM5P DM5RC DM5RS DM5SB DM5TI DM5TS DM5WGL DM5WH DM5WT DM5Z DM65MVP DM6A DM6CS DM6DX DM6V DM6WAN DM70GER DM7C DM7CW DM7PQ DM7T DM7W DM80FOC DM8T DM90AIW DM9EE DM9KC DM9KT DN1PIA DN1QP DN1TOS DN2VHF DN4KS DN5HR DO1CS DO1CVM DO1EMA DO1GM DO1HGS DO1ISE DO1KUB DO1MGN DO1MH DO1PE DO1RWM DO1SJF DO1SSB DO1TOM DO2MS DO2UDX DO2XX DO3GLM DO3ME DO4DXA DO4FB DO4JS DO4JUF DO4OD DO4PA DO4TP DO4WLL DO5HCS DO5NU DO5ZX DO6LE DO6NI DO6PA DO7DOC DO7ES DO7JLF DO8ABS DO8CW/P DO8GF DO8JL DO8KAS DO8MA DO8WA DO9SR DO9ST DO9YJ DP3E DP4D DP4E DP4G DP4M DP4X DP5A DP5L DP5M DP5N DP5W DP6A DP6K DP6M DP6M/P DP6P DP6T DP7D DP7X DP80FOC DP8M DP9A DP9I DQ0A DQ0U DQ0X DQ0Z DQ100SL DQ1200ASP DQ1IGRY DQ1P DQ1V DQ2C DQ3F DQ4Q DQ4W DQ4X DQ5M DQ5T DQ600UNI DQ6Q DQ7A DQ7Y DQ800HRO DQ8N DQ9A DQ9Y DR0W DR0W/P DR175CW DR19RGD DR1A DR1D DR1F DR1X DR2C DR2P DR2Q DR3I DR3W DR3X/P DR4A DR4K DR4U DR4W DR50DIG DR5E DR5K DR5L DR5N DR5X DR6C DR6J DR6K DR6N DR6R DR7A DR7B DR7T DR8A DR8M DR9W DS1AFL DS1STV DS2JJV DS3BNU DS3EXX DS3HWS DS4AOW DS4EOI DS4GQR DS5DNO DS5TOS DS5USH DS5VTG DT8A DU1/A61M DU1AV DU1AVC DU1EG DU1EV DU1IST DU1IVT DU1JM DU1KA DU1LAV DU1R DU1RB DU1VGX DU1WBX DU1Y DU30R DU3DW DU3JH DU3LA DU3T DU3ZX DU4DXT DU6/N6SS DU7JAY DU7P DU9WTZ DV1CV DV1VGX DV1YAI DV8/KH7EA DW3TRZ DX0HQ DX1ARC/3 DX1DL DX1EVM DX1J DX1L DX1MGS DX1MK DX2R DX3H DX4EVM DX7EVM DX9EVM DX9M DY0MK DY1T DZ1Z DZ3X E20AX E20HHK E20NGF E20PFE E20WUE E20YLM E21EIC E21FYK E21YDP E22UUW E23HSW E24NQN E27AZ E27EK E28AD E28AI E2A E2HQ E2X E44WE E51DWC E51JD E6Y E70A E70EA E70R E70T E70W E71A E71AZ E71CQ E71EEE E72A E72KB E72M E72MD E72NA E72U E72X E73AA E73B E73CV E73ECT E73ENS E73ESP E73FDE E73JO E73KM E73KT E73M E73PS E73PY E73RB E73RV E73X E73Y E74A E74BMN E74E E74HJ E74KM E74O E74R E74SL E74UK E74X E74Y E74YM E75M E76C E76WO E770D E77A E77B E77C E77D E77DX E77E E77EA E77EE E77F E77G E77M E77O E77T E77W E77Y E78AX E78CB E78IW E78T E78WW E78ZX E79D E79EA E79Q E7CW E7DX E7OT E7TT EA1A EA1AA EA1ACP EA1AER EA1AF EA1AKS EA1ANB EA1AOQ EA1AP EA1ASG EA1AW EA1B EA1BAF EA1BDX EA1BLI EA1BNF EA1BP EA1C EA1CBX EA1CF EA1CGK EA1CJ EA1CK EA1CM EA1CRK EA1CS EA1DA EA1DAV EA1DAX EA1DBX EA1DHB EA1DLU EA1DOB EA1DR EA1DWI EA1DZ EA1EH EA1EHW EA1EJ EA1EPM EA1EWY EA1EXE EA1EYG EA1FBU EA1FCR EA1FEB EA1FGN EA1FW EA1G EA1GQ EA1GT EA1GTX EA1GY EA1HO EA1HRR EA1HTF EA1IMP EA1IOW EA1IQM EA1ITX EA1IXQ EA1IYK EA1JO EA1L EA1MV EA1MW EA1ND EA1NE EA1NK EA1NL EA1O EA1OL EA1OT EA1P EA1Q EA1R EA1RKA EA1RN EA1S EA1SA EA1SI EA1TG EA1TI EA1TL EA1TX EA1U EA1URS EA1VT EA1W EA1WD EA1WH EA1WS EA1WX EA1X EA1YG EA1YT EA1YW EA1Z EA2AAZ EA2AFV EA2AJB EA2ASB EA2AZ EA2BD EA2BJM EA2BNU EA2CCG EA2CE EA2CIA EA2CMF EA2CP EA2CW EA2CYJ EA2DDE EA2DLX EA2DMH EA2DNR EA2DPA EA2DT EA2DUX EA2DVR EA2DWG EA2ECA EA2ELS EA2ENG EA2ESZ EA2GM EA2J EA2K EA2KK EA2KR EA2KU EA2KV EA2LMI EA2LU EA2NA EA2NN EA2OK EA2PA EA2RC EA2RCA EA2RCF EA2RCP EA2RKO EA2RW EA2RY EA2SN EA2SS EA2T EA2TT EA2VE EA2W EA2WD EA2WX EA2XG EA2XR EA2Z EA3A EA3AER EA3AIZ EA3AKA EA3AQ EA3AQR EA3AVV EA3AYK EA3AYQ EA3B EA3BBA EA3BOW EA3BRL EA3BV EA3CA EA3CCN EA3CI EA3CS EA3CV EA3CW EA3CWT EA3D EA3DJL EA3DN EA3DNC EA3E EA3EAN EA3EO EA3ERD EA3EVL EA3EW EA3EZD EA3F EA3FAJ EA3FCQ EA3FF EA3FHP EA3FP EA3FUJ EA3FZT EA3GBU EA3GCT EA3GE EA3GOM EA3GZA EA3H EA3HAB EA3HCJ EA3HDZ EA3HJO EA3HK EA3HKA EA3HLT EA3HSO EA3HWC EA3HWE EA3HZM EA3HZY EA3HZZ EA3IAA EA3IAZ EA3IBS EA3IBV EA3ICJ EA3IFY EA3IN EA3J EA3JE EA3JW EA3KE EA3KN EA3KT EA3LS EA3M EA3MR EA3NA EA3NN EA3NO EA3NT EA3NY EA3O EA3OH EA3OW EA3PP EA3PT EA3QC EA3QP EA3RCB EA3RCI EA3RR EA3T EA3TB EA3URE EA3V EA3W EA3WX EA3X EA3XL EA3XR EA3YM EA4A EA4AA EA4AAI EA4AOC EA4AW EA4BAS EA4BT EA4C EA4CFT EA4CWW EA4CX EA4D EA4DB EA4DFE EA4DUT EA4DW EA4DXP EA4EER EA4EF EA4EJR EA4EMC EA4EPY EA4ESP EA4ETF EA4ETN EA4EUI EA4FET EA4FIT EA4FJX EA4FL EA4FLY EA4FTA EA4FVG EA4FVT EA4GIB EA4GMX EA4GOY EA4GPZ EA4GRZ EA4GUU EA4GWL EA4GZD EA4HAM EA4I EA4IL EA4JJ EA4K EA4KD EA4L EA4M EA4MY EA4NI EA4OA EA4OR EA4R EA4RY EA4S EA4T EA4TA EA4TK EA4TX EA4U EA4URE EA4UV EA4XT EA4Z EA4ZK EA5/LN2G EA5/OG55W EA5/OG5HW EA5/PA3FOC EA5/PA3GCU EA5/R3AR EA5/RN3AM EA5/RV2A EA5AER EA5ASF EA5ASM EA5AVL EA5B EA5BCQ EA5BM EA5BY EA5BZ EA5C EA5CI EA5CP EA5CTE EA5D EA5DB EA5DF EA5DFV EA5DO EA5DZ EA5E EA5EJ EA5EL EA5EL/P EA5EN EA5EOR EA5ERA EA5EX EA5EZA EA5FCW EA5FID EA5FL EA5FQ EA5GI EA5GIE EA5GPQ EA5GS EA5GUL EA5GX EA5HEU EA5HEW EA5HJO EA5HRT EA5HRV EA5HYJ EA5I EA5IAG EA5ICL EA5ICS EA5IFY EA5IGO EA5IHK EA5IIK EA5IIX EA5IJG EA5IKJ EA5IQO EA5IQX EA5ITG EA5ITT EA5ITW EA5IUN EA5J EA5JA EA5JN EA5JX EA5K EA5KA EA5KB EA5KL EA5KM EA5KO EA5L EA5LD EA5M EA5ME EA5NK EA5O EA5P EA5RC EA5RM EA5RS EA5RU EA5S EA5SM EA5SR EA5TS EA5U EA5VK EA5WU EA5XA EA5XC EA5Y EA5YI EA5YU EA5Z EA6/DL2JRM EA6/EI6DX EA6A EA6AKN EA6AMM EA6B EA6BH EA6DX EA6EA EA6EE EA6FO EA6GP EA6NB EA6NP EA6R EA6SX EA6UP EA6VQ EA6ZS EA7/G4BJM EA7A EA7AAW EA7AFO EA7AH EA7AKK EA7AN EA7AQR EA7ATX EA7AYF EA7AZA EA7BD EA7BJ EA7BUU EA7C EA7CIX EA7CU EA7CZS EA7E EA7EGU EA7EU EA7FRX EA7G EA7GSU EA7GV EA7GX EA7GXD EA7GZQ EA7HAB EA7HCB EA7HLU EA7I EA7IA EA7ITL EA7IZ EA7JF EA7JOY EA7JQO EA7JQT EA7JTT EA7JW EA7JWT EA7JXZ EA7JZZ EA7K EA7KE EA7KHB EA7KI EA7LH EA7LL EA7MT EA7NW EA7OR EA7OT EA7PP EA7Q EA7QW EA7R EA7RCS EA7RM EA7RU EA7TG EA7TR EA7TS EA7URO EA7VJ EA7W EA7X EA7Z EA7ZC EA8/DH2MS EA8/DK5AN EA8/DL2DXA EA8/DL3ASM EA8/EA4BQ EA8/GU4YOX EA8/HB9FIH EA8/IK1PMR EA8/M0EDX EA8/OK2GG EA8/OK5D EA8/OL1A EA8/UA5C EA8A EA8ACW EA8AH EA8AM EA8AOC EA8AQM EA8AQV EA8ARI EA8AUW EA8AXT EA8BGO EA8BQM EA8CMX EA8CMY EA8CN EA8CNR EA8CQS EA8CQW EA8CTK EA8CUU EA8CXY EA8CYU EA8CZK EA8DDS EA8DED EA8DEG EA8DGH EA8DGS EA8DHH EA8DHV EA8DIG EA8DO EA8DP EA8DSB EA8F EA8HE EA8KC EA8KW EA8KY EA8L EA8LG EA8NF EA8OG EA8OM EA8PT EA8RM EA8RP EA8TR EA8TX EA8TZ EA8W EA8ZS EA8ZT EA9/DJ4MF EA9/DL1MGB EA9/DL2JRM EA9ACD EA9EU EA9KB EA9LZ EA9RY EB1A EB1AC EB1ADD EB1BCG EB1DJ EB1DMQ EB1EB EB1IC EB1RL EB1TR EB1Y EB2AM EB2DJ EB2RA EB3A EB3CW EB3DYS EB3JT EB3TR EB4A EB4B EB4ERS EB4GOO EB4Z EB5A EB5AQ EB5CS EB5CUZ EB5F EB5GBE EB5KT EB7A EB7DX EB7KA EB8AC EB8AH EC1A EC1DD EC1DJ EC1KR EC1R EC1RCB EC1RS EC1T EC1YP EC2DX EC3A EC3AIT EC3CVD EC3DX EC3E EC3UA EC4A EC4AHH EC4C EC4T EC4TA EC4TR EC5A EC5AC EC5AGM EC5AN EC5APA EC5C EC5CSW EC5EA EC5K EC5M EC5NJ EC5P EC5R EC5T EC5V EC5W EC5Y EC6AAE EC6DX EC6FK EC6PG EC7AKV EC7AT EC7CW EC7D EC7DWP EC7DZZ EC7E EC7K EC7KW EC7WA EC7WR EC7ZR EC8AQQ ED1A ED1B ED1D ED1K ED1LO ED1MK ED1N ED1R ED1S ED1T ED2A ED2C ED2M ED2R ED2V ED2W ED3B ED3C ED3D ED3M ED3O ED3ST ED3T ED3W ED3X ED3Y ED4A ED4N ED4T ED4W ED5K ED5N ED5O ED5R ED5S ED5T ED5W ED5X ED7B ED7C ED7K ED7O ED7P ED7R ED7W ED7X ED8B ED8G ED8H ED8K ED8M ED8W ED9B ED9E EE100V EE1B EE1D EE1G EE1I EE1Y EE2A EE2E EE2K EE2W EE3A EE3E EE3X EE4A EE4CC EE4E EE4R EE5AA EE5H EE5J EE5O EE5T EE5V EE5X EE7L EE7P EE7R EE7Y EE8A EE8K EE8V EF0F EF1A EF1C EF1L EF1T EF1W EF1X EF1Z EF2A EF2O EF2X EF3A EF3C EF3R EF3W EF4HQ EF4R EF5F EF5M EF5R EF5SP EF5T EF5U EF5Y EF7A EF7D EF7DX EF7X EF8F EF8I EF8L EF8O EF8P EF8R EF8S EF8U EF8W EF9R EF9Z EI/DK5GB EI/W5GN EI0CZ EI0HQ EI0R EI0W EI19RE EI1A EI1E EI20C EI2CN EI2FG EI2IDB EI2II EI2IJB EI2ILB EI2KA EI3CTB EI3ENB EI3GC EI3GRB EI3HDB EI3IEB EI3JE EI3KD EI3KE EI3Z EI4CF EI4GAB EI4GNB EI4GYB EI4HH EI4HQ EI4II EI4JY EI4KF EI4KN EI5DI EI5GUB EI5IX EI5JC EI5JF EI5KF EI5KG EI5KO EI6DX EI6FR EI6GF EI6GI EI6JK EI6KO EI7CC EI7GSB EI7GY EI7HBB EI7HDB EI7HVB EI7KD EI7M EI7T EI8CE EI8GS EI8IU EI8JB EI8JR EI8JX EI8KF EI9CN EI9E EI9HC EI9HSB EI9HX EI9JF EJ3Z EJ6KP EK3GM EK3SA EK6RL EK6SI EK7DX EL2DT EM0I EM0X EM2G EM2Q EM30UCC EM5HQ EM5K EM7KAA EM9Q EN4U EN5V EN7P EO27U EO3Q ER1FF ER1JA ER1MM ER1OO ER1PB ER3CT ER3DX ER3R ER4A ER4DX ER4LX ER5DX ER5LL ER7HQ ES0DJ ES0IA ES100A ES100C ES100O ES100Q ES100R ES100U ES100X ES1ACS ES1BH ES1BVG ES1CN ES1QD ES1TAR ES1TI ES1TU ES2DJ ES2MA ES2MC ES2QX ES2TT ES30WAY ES3AX ES3BM ES3BQ ES3TI ES3V ES3VI ES3VL ES4MM ES4NY ES4QR ES4RD ES5DB ES5EP ES5G ES5GP ES5KJ ES5MG ES5NHC ES5OW ES5Q ES5RIM ES5RR ES5RW ES5RY ES5TV ES5YG ES6DO ES6PA ES6Q ES6RMR ES6RQ ES6RW ES7A ES7AM ES7GM ES7GN ES7XX ES8DJ/8 ES8GP ES8SX ES9A ES9C ES9YOTA ET3AA EU1A EU1AA EU1ADY EU1AI EU1DX EU1EU EU1FQ EU1KY EU1LR EU1R EU1ST EU1TL EU1U EU1W EU1WW EU1XA EU1XX EU2EU EU3A EU3AA EU4A EU4AX EU4E EU4T EU4U EU5C EU6A EU6AA EU6AF EU6DX EU6O EU6RO EU8A EU8F EU8N EU8R EU8U EV1P EV1R EV5A EV6Z EW/R1AT EW1AFM EW1D EW1EA EW1FM EW1I EW1KT EW1NM EW1P EW1SM EW1TO EW1TZ EW2A EW2ES EW2O EW2QQ EW2R EW2W EW2WW EW3EO EW3LN EW3M EW3W EW4C EW4GL EW4R EW4RF EW4W EW4WE EW4WR EW5Z EW6DM EW6EN EW6EW EW6F EW6FW EW6M EW6W EW7A EW7BA EW7DK EW7LO EW7M EW7R EW8AP EW8AX EW8C EW8DX EW8G EW8LM EW8M EW8MZ EW8OM EW8OP EW8R EW8W EW8Y EW8Z EW8ZO EX8M EX8MAT EX8MJ EX9A EY7AD EY8MM F/E72T F/G0PZA F/OM2ZA F/OO4O F/PA2JWN F/PA2S F/PB8DX F1ADG F1AGR F1AKK F1AKX F1BFC F1BRV F1DHX F1EBN F1EOY F1EST F1FPL F1GKS F1GRH F1GYX F1GZV F1HMR F1HTU F1ICR F1ICS F1IEH F1IGY F1IKA F1ISM F1IWH F1MKG F1MNQ F1NZC F1OKV F1PNJ F1PSX F1PYN F1RAF F1RCH F1RHS F1ROA F1SIU F1TIO F1TRE F1TXI F1UDC F1UIJ F1UOD F1UVN F1VEV F2AI F2AR F2CT F2CW F2FZ F2GL F2IL F2JD F2NY F2VX F2YT F3OA F3PZ F3QW F3WT F4ADZ F4AEL F4AKH F4AYI F4BCG F4BDG F4BHW F4BIT F4BIV F4BKT F4BKV F4BND F4BRZ F4BWJ F4BXY F4CDR F4CIB F4CUI F4CVQ F4CWN F4CYH F4CZV F4DBD F4DIA F4DLL F4DPW F4DRT F4DSD F4DSK F4DVX F4DXP F4DXW F4DXX F4DZG F4DZR F4EFI F4EGA F4EIH F4EIK F4ELR F4EMI F4ENK F4EPM F4EPP F4EPU F4EQA F4ERS F4ESV F4ETG F4EUG F4FAO F4FCE F4FDR F4FEP F4FET F4FFH F4FFN F4FFZ F4FGB F4FHV F4FLF F4FLO F4FLQ F4FNK F4FNT F4FPG F4FQZ F4FRC F4FRF F4FRG F4FRQ F4FSB F4FSV F4FSY F4FTA F4FXH F4GAJ F4GBW F4GDI F4GDO F4GFT F4GGQ F4GKR/P F4GOT F4GOU F4GTB F4GTD F4GTT F4GVE F4GVP F4GWM F4GWO F4GWY F4GYG F4GYI F4GYM F4GYW F4HAB F4HAU F4HBV F4HEC F4HER F4HGF F4HGV F4HHL F4HHY F4HIK F4HJC F4HJO F4HMV F4HMX F4HMX/P F4HNP F4HPZ F4HQO F4HQZ F4HRM F4HRR F4HRU F4HSB F4HSN F4HTA F4HTV F4HTZ F4HUA F4HXC F4HXJ F4HYY F4HZJ F4HZQ F4HZS F4HZZ F4IAR F4IAY F4IDJ F4IEX F4IFO F4IVV F4KIY F4KKE F4KKZ F4TTR F4VIQ F4VPC F4VPL F4VSE F4VSM F4VSQ F4VSR F4WBL F4WBN F4WCE F5AAR F5ABV F5AIB F5ASD F5AUZ F5BBD F5BEG F5BLC F5BMI F5BSB F5BTH F5BZB F5CBP F5CBQ F5CCX F5CQ F5CT F5DBT F5DM F5DRD F5DYD F5ELL F5EQR F5FDC F5FJ F5FLN F5GFA F5GGL F5GHP F5GN F5HB F5HIJ F5HRH F5HRY/P F5HTR F5HX F5IAE F5ICC F5IDJ F5IGF F5ILS F5IN F5INJ F5IPE F5IQA F5IQJ F5ISG F5ITN F5IYC F5IYJ F5IYU F5JFU F5JJA F5JKK F5JLV F5JMI F5JNE F5JNV F5JNX F5JOT F5JQF F5JQQ F5JRC F5JSK F5JU F5JVP F5JY F5JYC F5JYD F5KBM F5KDC F5KDK F5KDK/P F5KEK F5KEQ F5KHP F5KKD F5KKE F5KMB F5KMY F5KOK F5KOU F5KSE F5LBL F5LDY F5LEN F5LIW F5LLN F5LMG F5LMJ F5LOW F5LPY F5LQ F5LQE F5LRL F5LTH F5LWF F5MA F5MAA/P F5MAI F5MBM F5MDB F5MFI F5MFO F5MKD F5MLJ F5MMB F5MMF F5MMX F5MNK F5MNO F5MOG F5MSE F5MUX F5MVB F5MWA F5MXH F5MXQ F5MYH F5MZE F5NBX F5NJF F5NKP F5NKX F5NLX F5NTV F5NTZ F5NUI F5NWG F5NZ F5NZY F5OAM F5OEV F5OGL F5OHH F5OHM F5OQK F5OQL F5ORB F5OWL F5OYC F5OYM F5OZC F5PAC F5PAL F5PBG F5PBL F5PBM F5PCV F5PHW F5PHY F5PLC F5PNI F5POJ F5PRH F5PTI F5PVJ F5PVX F5PWK F5PZR F5QE F5RAB F5RAG F5RAV F5RD F5RDS F5RJW F5RMK F5ROW F5ROX F5SDD F5SGI F5SIH F5SJC F5TFW F5TGR F5TGW F5TLZ F5TPO F5TRB F5TRO F5UAY F5UB F5UMP F5UOW F5UQE F5USK F5UTN F5VAI F5VBU F5VFU F5VHQ F5VHY F5VJC F5VKF F5VKT F5VMN F5VV F5XX F5ZV F6AAP F6ACD F6ACV F6AEW F6AGM F6APE F6API F6ARC F6ARS F6AUS F6AWU F6AXN F6BBO F6BBQ F6BCW F6BEE F6BFH F6BGC F6BGG F6BGV F6BHK F6BIA F6BKD F6BLK F6BLP F6BLZ F6BNH F6BNX F6BQG F6BUL F6BVY F6BWO F6BYJ F6BYZ F6CAX F6CBL F6CEL F6CKD F6CKE F6CLQ F6COA F6CSO F6CSQ F6CTT F6CUW F6CWA F6CXJ F6CYT F6CZQ F6CZV F6CZV/P F6DBA F6DCQ F6DEV F6DKQ F6DMQ F6DRP F6DWX F6DYA F6DYX F6DZD F6DZU F6ECS F6EKJ F6EKR F6EKX F6EPO F6EPQ F6EQD F6EQZ F6EWX F6EXV F6EYB F6EYD F6EZV F6FDR F6FET F6FFA F6FGB F6FLU F6FNA F6FTB F6FTI F6FYA F6FYY F6GCI F6GCP F6GCT F6GEU F6GGA F6GGO F6GHG F6GLQ F6GLZ F6GOE F6GOX F6GPT F6GTH F6GUF F6GWV F6GYF F6HBR F6HDI F6HHR F6HJO F6HKA F6HLC F6HMQ F6HQP F6HRP F6IFJ F6IGS F6IIT F6IPQ F6IPT F6IRA F6IRE F6IRO F6IRS F6ITD F6JOE F6JSZ F6KBF F6KBR F6KCS F6KCZ F6KDL F6KED F6KEH F6KEX F6KFH F6KFI F6KFV F6KHM F6KJG F6KJJ F6KJS F6KJX F6KKH F6KLO F6KMB F6KMX F6KNB F6KNL F6KOH F6KOP F6KPQ F6KQL F6KRK/P F6KSV F6KUQ F6REF F6UGW F8AAN F8ABB F8AEE F8AKC F8ATM F8ATS F8AUF F8BBL F8BCU F8BDQ F8BDX F8BJE/P F8BJO F8BNV F8BPN F8BUI F8BUO F8CDM F8CED F8CGL F8CJS F8CMF F8CPA F8CRH F8CRS F8DBF F8DCZ F8DFP F8DGF F8DGY F8DHE F8DJV F8DRE F8DSN F8DVD F8DWH F8EBY F8EMH F8ETK F8FBB F8FHI F8FLK F8FQJ F8FSC F8GQO F8GSV F8IJV F8JU F8KCF F8KGH F8KGS F8KGW F8KGZ F8KHO/P F8KKH F8KLY F8NAN F8NJ F8NUH F8OOI F8PDR F8VNU F9CI F9EW F9OE FG4KH FG4NN FG5DH FG5GP FG8NY FG8OJ FJ/W2RE FK/JG1XMV FK4QX FK8CP FK8IK FM1HN FM4LV FM5AN FM5BH FM5DN FM5FJ FM5KC FM5WD FM5WE FN30B FN31A FO/F6BCW FO/K5PI FP5AC FR4NT FR4QT FR4SC FS4WBS FY5FY FY5KE G0AAA G0AJH G0AJJ G0AOJ G0ATR G0AWV G0AZE G0AZH G0AZS G0BBO G0BFJ G0BKL G0BKU G0BNR G0BRC G0BVD G0BWB G0BWG G0C G0CBO G0CER G0CKP G0CNN G0CPA G0CWH G0CXW G0DRM G0DTX G0DWV G0ECJ G0EFO G0EIG G0EUN G0FBB/P G0FGI G0FOG G0FUV G0FVH G0FYX G0GDA G0GDU G0GLJ G0GWA G0HDB G0HDV G0HEU G0HGH G0HSA G0HUH G0HZG G0IBN G0IIQ G0JHC G0JJG G0JKY G0JPS G0JSP G0JWQ G0KLD G0KPE G0KPH G0KYA G0KYS G0LHZ G0LRD G0LTG G0LZL G0MBA G0MCV G0MDR G0MEE G0MFR G0MGM G0MGX G0MNN G0MTN G0MUD G0NBI G0NUZ G0NZI G0OFD G0OIK G0OKF G0OOF G0OOR G0ORC G0ORH G0PHY G0PZA G0RAH G0RPM G0SPF G0SUQ G0TFT G0TKZ G0TPH G0TSM G0TZZ G0UCH G0UIQ G0UJA G0UVX G0UWK G0VAX G0VDZ G0VJG G0VLF G0VQR G0VVM G0VWL G0WKH G0WRS G0WSA G0WWD G0YCE G1A G1GEY G1HYD G1IBS G1ILJ G1IPU G1IZQ G1JCC G1JDT G1M G1MZD G1OCN G1P G1PCR G1PPA G1RVD G1SCT G1SDK G1SQY G1T G1TPA G1VDP G1WHP G1XKZ G1YLE G2AA G2BKZ G2C G2D G2EC G2LO/P G2NF G2NV G2U G2W G2X G2YT G3AB G3ASR/P G3B G3BJ G3CO G3DR G3EUE G3GLL G3HEJ G3HRH G3HTA G3IGU G3IGZ G3IJA G3ILO G3ILO/P G3IZD G3JDT G3JFS G3JIR G3JKL G3JMJ G3JNB G3JRM G3JUL G3K G3KAF G3KDP G3KHZ G3KIP G3KLH G3KMA G3KMG G3KMQ G3KNU G3KSU G3KTZ G3KZR G3L G3LDI G3LHJ G3LIK G3LKZ G3LPU G3LRS G3LUW G3LVP G3M G3MLO G3MPN G3MUO G3MXH G3NDC G3NKQ G3NKS G3NSM G3NWG G3NYY G3OAG G3OGP G3OKA G3OLB G3OMB G3OND G3OOU G3OQT G3ORY G3OTK G3P G3PDH G3PHO G3PJT G3PLE G3PLP G3PND G3PPR G3PQA G3PXT G3PYE G3Q G3RAU G3RCM G3RFH G3RGD G3RIK G3RIR G3RKF G3RLE G3RSD G3RTE G3RTU G3RTU/P G3RTY G3RVM G3RWF G3RXP G3RXQ G3SBI G3SBM G3SED G3SEN G3SET G3SEY G3SHF G3SJH G3SJJ G3SJX G3SNN G3SNT G3SNU G3SQU G3SVD G3SVK G3SVL G3SWC G3SWH G3SXW G3SYM G3SZG G3T G3TA G3TBK G3TBK/P G3TDH G3TEV G3TGB G3TJE G3TKF G3TQZ G3TXF G3TZM G3U G3UES/P G3UFY G3UHU G3UJE G3ULN G3UML G3UUV G3UVR G3V G3VCA G3VDB G3VGZ G3VIP G3VKW G3VM G3VMW G3VMY G3VNC G3VPS G3VPW G3VQO G3VSL G3VSQ G3VYI G3WBB G3WCB G3WEF G3WGV G3WIR G3WKL G3WNQ G3WPF G3WPH G3WRJ G3WRR G3WVG G3WYN G3WYW G3WZD G3WZT G3XAQ G3XGC G3XHZ G3XKT G3XLG G3XMM G3XOV G3XPO G3XSD G3XSV G3XTT G3XTZ G3XUD G3XYC G3XYF G3XZG G3Y G3YAJ G3YBO G3YCH G3YEU G3YFE G3YGG G3YHV G3YJQ G3YLA G3YMC G3YPE G3YQA G3YQD G3YRO G3YRZ G3YSX G3YXX G3YZO G3ZAY G3ZBU G3ZFC G3ZGC G3ZHE G3ZHL G3ZJF G3ZNR G3ZQH G3ZRJ G3ZSS G3ZVW G4ABX G4ADJ G4AFJ G4AFS G4AFU G4AHK G4ALD G4ALE G4ALE/P G4AMT G4ANT G4APD G4AQG G4ARI G4ASR G4ATH G4AWA G4AWP G4AYU G4BEE G4BJM G4BLI G4BSW G4BUE G4BUO G4BVY G4BWP G4BYE G4BYG G4BYY G4BZP G4C G4CCQ G4CCX G4CIB G4CLN G4CMQ G4CMZ G4CRF G4CTY G4CUS G4CWH G4CXQ G4CXT G4CZB G4DBW G4DDL G4DDX G4DJJ G4DJX G4DOQ G4DRS G4DYC G4EBK G4EDG G4EHN G4EKT/P G4ELI G4ELJ G4ELW G4ELZ G4ENZ G4ERW G4ETS G4EUW G4EZT G4F G4FAD G4FAL G4FEV G4FJK G4FJW G4FKA G4FMO G4FNL G4FNL/P G4FOC G4FPA G4FVK G4FVZ G4G G4GA G4GIR G4GVB G4GZG G4HBI G4HCC G4HIV G4HJE G4HOM G4HSO G4HUN G4HVC G4HYG G4HZV G4IAR G4IDF G4IIY G4IKR G4ILW G4IRN G4IUF G4IWO G4IZZ G4JBA G4JED G4KFT G4KIV G4KMH G4KNO G4KQY G4KZD G4L G4LFB G4LJU G4LKD G4LPD G4LPP G4LYM G4LZD G4MBC G4MDR G4MEM G4MSA G4MUL G4NBS G4NDM G4NIF G4NKT G4NVR G4NXG G4OBB G4OCO G4OEC G4OGB G4OSB G4OTU G4OTV G4OWT G4OZG G4P G4PDF G4PFK G4PIQ G4PLY G4PNC G4POF G4PVM G4PWO G4Q G4R G4RCD G4RCG G4RGK G4RGV G4RHR G4RKO G4RLS G4RMV G4RQI G4RRM G4RS G4RUJ G4RUW G4S G4SDM G4SEN G4SGI G4SGX G4SIE G4SJX G4SOF G4TCI G4TGJ G4TNI G4TPO G4TXF G4U G4UEL G4UFK G4UJS G4USI G4UZE G4VMM G4VMX G4VUD G4VVP G4VZR G4WAC/P G4WGE G4WGE/P G4WGR G4WJS G4WPD G4WQI G4WUG G4WWG G4WWG/P G4WWS G4XEE G4XEX G4XWR G4YBU G4YCA G4YCS G4YPC G4YUP G4ZBA G4ZCS G4ZFE G4ZIB G4ZOB G4ZOY G4ZVB G5BBL G5D G5EA G5HY G5K G5LP G5N G5O G5O/P G5PI G5Q G5TM G5TO G5U G5UM G5W G5XV G5YL G5Z G6ASK G6AY G6BDV G6EES G6EVD G6GLP G6HUI G6KWA G6LD G6M G6MC G6N G6OKU G6RAQ G6RC G6SSN G6T G6UBM G6UW G6X G6XX G7AEY G7BHU G7BXU G7C G7H G7HJX G7HYS G7NOI G7NOT G7PVZ G7RAU G7RHF G7RTI G7SQW G7SSE G7SYW G7T G7TGK G7TWC G7TYT G7UQN G7VJR G7VKK G7VTU G7VVE G7WHI G7Y G8A G8AFN G8AJM G8APB G8ATO G8BCG G8CMU G8CRB G8CYK G8D G8DX G8EQD G8FCQ G8FDR G8FMC G8GFF G8GHD G8GNI G8HBS G8KEK G8MIA G8N G8NRY G8NT G8NVX G8OO G8RZ G8UBJ G8VPE G8X G8XTJ G8XXJ G8ZRE G8ZZK G9D G9F G9P G9W G9Y GB0GGR GB0GPF GB100GP GB1FOC GB1MC GB2FWW GB2GP GB2IWM GB3RS GB5CC GB60ATG GB60OT GD0AMD GD1JNB GD4EIP GD5F GD7RVP GD9W GG88CS GI0LDI GI0MXT GI0RQK GI0UVD GI1GKI GI3KVD GI3OQR GI3PDN GI3SG GI4EBS GI4FUE GI4H GI4JTF GI4MBM GI4SJQ GI4SNA GI4SZW GI4T GI4VHO GI5I GI5NI GI6XX GI7AXB GI7VXC GJ0KYZ GJ2A GJ3YHU GJ4YOX GJ7LJJ GM0AXY GM0EGI GM0ELP GM0EUL GM0GAV GM0GMN GM0HKS GM0HVS GM0KWW GM0LIR GM0OGN GM0OPS GM0TKB GM0UKZ GM0V GM0WED GM1J GM2T GM2TT GM2V GM3A GM3BSQ/P GM3C GM3DR GM3F GM3JKS GM3MZX GM3NHQ GM3PIL GM3POI GM3PPE GM3PPG GM3TAL GM3W GM3WIJ GM3WOJ GM3WUX GM3X GM3YEH GM3YOR GM3YTS GM3ZRT GM4AFF GM4AGL GM4AKC GM4BRN GM4EVS GM4FDM GM4GTV GM4JKZ GM4JR GM4JYB GM4M GM4NNC GM4O GM4OSS GM4SID GM4UQG GM4UYZ GM4X GM4YLN GM4YSN GM4YXI GM4Z GM4ZUK GM5A GM5CX GM5G GM5M GM5X GM6DX GM6NX GM6VVG GM6X GM6XX GM7A GM7NYB GM7R GM7TUD GM7V GM7WCO GM7WCO/P GM8OFQ GM9A GM9C GN4FOC GN5DX GP6UW GS7V GS8VL GU0SUP GU0UVH GU3HFN GU4CHY GU4EON GU4WTN GU4YBW GU4YOX GU6EFB GU7DAI GW0A GW0ARK GW0FOL GW0FRE GW0FZY GW0JWC GW0RHC GW0RYT GW0TAU GW0VSW GW0WGK GW1PJP GW1YQM GW2CWO GW3NAS GW3YDX GW4AYJ GW4BKG GW4BVJ GW4BZD GW4CC GW4D GW4HBK GW4J GW4LWZ GW4MVA GW4OGO GW4OKT GW4SHF GW4TSG GW4W GW4ZAR GW4ZCM GW5D GW5L GW5NF GW5R GW6PMC GW6XX GW7APP GW7BZR GW7ERI GW7GWT GW7N GW8C GW8KBO GW9J GW9T GW9Z GX0MWT GX3CO GX3YNN GX4MBC GX4RFR GX5DX H2T H2X H33K H40TT H44MS H72DX H88X HA/S57WJ HA01FF HA0BW HA0DR HA0GK HA0HV HA0HW HA0IL HA0IM HA0IV HA0LC HA0LP HA0LW HA0LZ HA0MK HA0MS HA0NAR HA0VI HA1A HA1AD HA1AG HA1AR HA1AS HA1BC HA1DAE HA1DD HA1IO HA1LZ HA1RJ HA1SN HA1SU HA1TD HA1TI HA1TIB HA1TJ HA1TNX HA1TV HA1VG HA1VHF HA1WA HA1WD HA1ZN HA1ZY HA1ZZ HA2DX HA2EOD HA2EOU HA2G HA2KMR HA2MM HA2MN HA2MV HA2NA HA2NM HA2NP HA2OS HA2PP HA2RQ HA2SK HA2VR HA3DX HA3FHH HA3FMR HA3FTA HA3FUT HA3GO HA3HK HA3HO HA3HX HA3JB HA3JO HA3KNA HA3LN HA3MG HA3MQ HA3MU HA3NU HA3OK HA3OU HA3PT HA3PV HA3UH HA3UU HA3YE HA3YGD HA4AA HA4FB HA4FY HA4GE HA4UC HA4XC HA4XH HA4YF HA5AGP HA5AQ HA5ARX HA5BA HA5BGL HA5BI HA5BO HA5BVG HA5CLF HA5CRT HA5DDX HA5GG HA5GY HA5JI HA5JP HA5KY HA5MA HA5MO HA5NB HA5NR HA5OB HA5OM HA5OO HA5OW HA5PL HA5PP HA5PT HA5T HA5TOP HA5UA HA5UK HA5VZ HA5WG HA5X HA5ZG HA6A HA6AA HA6DX HA6FQ HA6G HA6I HA6IAM HA6NF HA6NL HA6NN HA6NW HA6OI HA6ON HA6P HA6PJ HA6PQ HA6PX HA6VH HA6VV HA7A HA7GN HA7HQ HA7I HA7JQK HA7JVV HA7KRE HA7LW HA7MB HA7ME HA7MF HA7MS HA7MW HA7NK HA7PL HA7PO HA7RY HA7SBQ HA7SG HA7UI HA7VK HA8A HA8AP HA8AR HA8AT HA8BE HA8BQ HA8BT HA8CQ HA8DT HA8DU HA8DZ HA8EN HA8ES HA8EV HA8FK HA8GY HA8IB HA8IC HA8JV HA8KW HA8LLK HA8LNN HA8M HA8MZ HA8QB HA8QZ HA8RM HA8TJ HA8TKS HA8TP HA8UT HA8V HA8VV HA8VX HA8WY HA8WZ HA8ZB HA90AM HA9A HA9MDN HA9PP HA9RC HA9RP HA9RT HA9TA HB0/DL5SE HB0/DL5YM HB0/DM7XX HB0/HB9LCW HB0A HB0HQ HB0WR HB2C HB2K HB2NW HB2S HB2U HB3YFC HB3YGD HB4FG HB5E HB7X HB90AFI HB90AWS HB90BXE HB90CSA HB90CXZ HB90GKM HB90IQY HB90TOC HB90TTK HB90TUD HB90W HB9A HB9AA HB9AAI HB9AAL HB9AAZ HB9ABB HB9AEP HB9AFI HB9AFZ HB9AGA HB9AGO HB9AJ HB9AJM HB9AJP HB9AJY HB9ALM HB9ALO HB9AMO HB9ANF/P HB9AOF HB9AQA HB9ARF HB9ATG HB9AUK HB9AUS HB9AVK HB9AW HB9AWS HB9AYQ HB9AYZ HB9AZZ HB9BA HB9BAS HB9BC HB9BFQ HB9BHW HB9BJL HB9BLQ HB9BMY HB9BOI HB9BOS HB9BPH HB9BQP HB9BS HB9BTI HB9BUN HB9BXE HB9BYQ HB9CA HB9CAL HB9CAT HB9CBR HB9CC HB9CEX HB9CEY HB9CGL HB9CIC HB9CIN HB9CIP HB9CNU HB9CNV HB9CNY HB9COF HB9CPS HB9CQL HB9CRV HB9CTU HB9CVD HB9CVN HB9CVQ HB9CVT HB9CW HB9CXK HB9CXZ HB9CZF HB9DAI HB9DAQ HB9DAX HB9DCM HB9DD HB9DDE HB9DDO HB9DDZ HB9DGZ HB9DHG HB9DHK HB9DHZ HB9DND HB9DOS HB9DPO HB9DQJ HB9DQL HB9DQP HB9DSE HB9DSG HB9DUR HB9DUS HB9DVH HB9DVZ HB9EAR HB9EBC HB9EBT HB9EFJ HB9EFK HB9EGA HB9EI HB9EOU HB9EP HB9ERU HB9ETR HB9EYP HB9F HB9FAI HB9FAN HB9FAP HB9FBA HB9FBG HB9FBM HB9FBU HB9FEX HB9FHV HB9FKK HB9FKL HB9FLX HB9FMJ HB9FMN HB9FOM HB9FUV HB9FUX HB9FXU HB9FXW HB9G HB9GCE HB9GFP HB9GFW HB9GHR HB9GIF HB9GIL HB9GIS HB9GKM HB9GL HB9GNP HB9GUK HB9GUR HB9GWJ HB9GXX HB9H HB9HBY HB9HC HB9HFA HB9HFM HB9HI HB9HLM HB9HQ HB9HQX HB9HSLU HB9HTC HB9HVG HB9IAB HB9IIO HB9IIY HB9IJC HB9IQB HB9IQY HB9IRF HB9JA HB9JOE HB9JW HB9KBG HB9KG HB9KNY HB9KOG HB9LF HB9LG HB9MH HB9MM HB9MXY HB9NBG HB9NE HB9NFB HB9OAB HB9OAU HB9OCR HB9ODK HB9ODP HB9OK HB9ON HB9PKP HB9PUE HB9QO HB9RDD HB9RDE HB9RF HB9RYZ HB9S HB9T HB9TG HB9TOC HB9TPN HB9TRR HB9TST HB9TSW HB9TTK HB9TUD HB9TWM HB9TWU HB9TZU HB9VQQ HB9ZY HB9ZZ HC0E HC0T HC1/KW8N HC1DW HC1DX HC1JQ HC2AO HC2AP HC2E HC2GRC HC2PY HC2SL HC2TKV HC2TMZ HC3E HC5DBT HC5DX HC5M HC5TLM HC5UDT HC5VF HC7AE HD2G HD8M HF0DKI HF100I HF100N HF100PIP HF100PS HF100S HF100TPN HF1D HF40CUF HF40STOK HF5L HF5WIM HF60PKI HF6C HF80TG HF85LD HF95IARU HF9ZPM HG0DQR HG0HQ HG0M HG0R HG0Y HG170VA HG1A HG1G HG1R HG1S HG1VN HG1W HG2A HG2DX HG315VA HG3C HG3FMZ HG3IPA HG3N HG3O HG3R HG3X HG4F HG4I HG5A HG5C HG5D HG5DX HG5N HG5O HG5P HG5R HG5S HG6C HG6IA HG6L HG6N HG6O HG6R HG6T HG6V HG6Y HG72QRP HG7T HG8C HG8DX HG8K HG8N HG8R HG8W HG8X HG8YKO HG8Z HG90NK HG90NS HH2AA HH70A HI0LT HI1LT HI3/KC1XX HI3/WJ2O HI3AA HI3CC HI3K HI3LT HI3T HI3TT HI3Y HI8A HI8DL HI8ESF HI8JSG HI8KW HI8PAP HI8PJP HI8PLE HI8RD HK0RMR HK1MW HK1N HK1R HK1T HK1W HK1X HK3C HK3EA HK3J HK3JJB HK3JJH HK3Q HK3TK HK3TU HK3UA HK3W HK3ZD HK4GOO HK4KM HK4L HK4OBA HK4T HK4W HK5NLJ/3 HK6CF HK6F HK6J HK6P HL0HQ HL1/LZ4AX HL1IWD HL1LUA HL1OVG HL1OYF HL1TKF HL1VAU HL2BQG HL2CFY HL2DBP HL2IDT HL2KV HL2SU HL2VXK HL2WA HL2ZED HL3AMO HL3EHK HL3EPH HL4CBI HL4CCM HL4CEL HL4CFN HL4RBR HL5BLI HL5FUA HL5IVL HL5JZ HL5QY HL5YI HL5ZII HP1AC HP1ALX HP1AVS HP1ELV HP1RIS HP1STB HP1XT HP2BWJ HP2DX HP3AK HP3SS HP8/NC6Q HP8X HP9SAM HQ2DDL HQ9M HQ9X HR1AAB HR1LEO HR2DDL HR2DMR HR2WW HR5/F2JD HR9/N3AD HS0AC HS0ACS HS0ZAR HS0ZBS HS0ZCW HS0ZED HS0ZLM HS0ZLN HS0ZME HS0ZNV HS0ZOJ HS3ANP HS3LSE HS3NBR HS3XVP HS4UEL HS5NMF HS5SRH HS5ZLD HS6MYW HS6VW HS8HEX HS8JKY HS8JWH HU1DL HV0A HZ1BL HZ1FI HZ1HZ HZ1LG HZ1SK HZ1TL HZ1TT HZ7C HZ7Z I0/PB0SJX I0/S58Y/P I0/YO3XX I06A I0AAF I0BYR I0GIA I0GOJ I0GUM I0IA I0IJ I0JBL I0KHY I0KWK I0LYO I0MOM I0OSI I0PYP I0UZF I0WBX I0YQV I0ZUT I1BEP I1BPU I1CHC I1DXD I1EIS I1FLC I1HJT I1HLP I1JQJ I1JTQ I1MRH I1NVU I1POR I1RB I1RJP I1SAF I1SOP I1WQR I1WXY I1XSG I1YGQ I1YRL I1ZDW I2/HB9FIH I2AT I2AZ I2BPP I2BRT I2BZN I2CZQ I2DJX I2EAY I2FUM I2GPT I2HIZ I2IFT I2IWM I2JIN I2JSB I2KBD I2MOV I2OGV I2ORX I2PJA I2RBR I2ROO I2RVW I2SVA I2TZK I2VRN I2VXJ I2WIJ I2WIJ/1 I2XIP I2XLF I2YPY I2YYO I3CRW I3EVK I3FDZ I3FGX I3FIY I3GKK I3JUK I3LGP I3LTT I3MDU I3PVB I3PXN I3TXV I3VJW I3VRD I3ZSX I4AUM I4AVG I4BMJ I4EUM I4GAD I4HRH I4IKW I4JED I4JEE I4JUQ I4LCK I4MKN I4PZP I4TJE I4UUL I4VEQ I4VIL I4VOS I4WYE I4XNN I4YSS I4ZSQ I5CDF I5ECW I5GJK I5JVA I5MXX I5NSR I5OYY I5QMT I5SOD I5WNN I5YKQ I5ZUF I6CBI I6FCR I6FDJ I6FLD I6FPN I6PZ I6WJB I7BNX I7CSB I7PHH I8CZW I8IEQ I8JIT I8QJU I8QLS I8UZA I8VJK I8YAV IB1B IB1C IB2A IB2LV IB2M IB2RT IB2T IB3C IB3N IB3X IB4A IB4K IB4P IB4X IB5A IB5B IB8R IB9A IB9O IB9T IC8AJU IC8CUQ IC8FBU IC8FJX IC8POF IC8R IC8SQS IC8TEM IC8WIC IF9/IT9PPG IF9A IG9/LZ2SX IG9/S59A IH9/IV3NVN IH9/LZ1UQ IH9/OK6RA IH9/OL3R IH9P II0FOC II0I II1A II1IGG II2M II2RR II2S II30CJ II3AC II3B II3E II3R II3W II3Y II4A II4HNR II4TES II4TSB II4VAL II5A II7P II8K II8M II8T II9L II9P II9Y IK0AGU IK0BAL IK0CHU IK0CNA IK0EFR IK0EIE IK0FMB IK0FUX IK0FVC IK0GDG IK0HBN IK0HFO IK0HTP IK0ISD IK0IXI IK0JFW IK0LNN IK0NOJ IK0PEA IK0PHU IK0PHY IK0PRP IK0PXD IK0SXU IK0TUM IK0UTM IK0UXO IK0VVG IK0VVP IK0VWH IK0WRB IK0XBX IK0XFD IK0YUO IK0YUT IK0YVV IK1BPL IK1BQD IK1DFH IK1DPA IK1DTO IK1GEY IK1HGE IK1JJM IK1LZF IK1MEG IK1NEG IK1ODN IK1PMR IK1QBT IK1QFP IK1QHB IK1RAC IK1RAE IK1RAG IK1RDN IK1RGK IK1RQQ IK1SOW IK1TAZ IK1TTD IK1UGX IK1VHR IK1VQY IK1WEG IK1WGX IK1WGZ IK1XPK IK1YDB IK1YEK IK1YFE IK1YRA IK1ZFO IK1ZOD IK1ZOF IK1ZOF/3 IK1ZYY IK2AHB IK2AIT IK2ANI IK2AOO IK2AQZ IK2AUK IK2AVH IK2BUF IK2CAW IK2CFD IK2CIO IK2CKR IK2CLB IK2CMI IK2CMN IK2CZQ IK2DIA IK2DJV IK2DKX IK2EAD IK2EBP IK2EGL IK2FIR IK2FYH IK2GVS IK2GWH IK2GZU IK2HAB IK2HKT IK2HTY IK2IKW IK2ILH IK2IQD IK2JTS IK2JUB IK2LFF IK2LOL IK2LTR IK2MMM IK2MXM IK2NUX IK2ODD IK2OFS IK2OHG IK2OLJ IK2OVT IK2PFL IK2PZC IK2QEI IK2QIK IK2QIN IK2QLX IK2QPR IK2REA IK2RGT IK2RLS IK2RZG IK2RZP IK2SAI IK2SAR IK2SAU IK2SBB IK2SGF IK2SND IK2SYI IK2TDM IK2TKX IK2TYL IK2UEX IK2UJF IK2ULM IK2ULV IK2UZQ IK2VFR IK2WAD IK2WSO IK2WXQ IK2WYI IK2XDE IK2XSL IK2XYI IK2YCW IK2YFT IK2YGZ IK2YLV IK2YSJ IK2ZEC IK3ASM IK3BVD IK3DVY IK3EDT IK3ELC IK3HHX IK3IUE IK3JBP IK3JLS IK3MLF IK3OBX IK3OCD IK3OII IK3ORD IK3OYY IK3PCZ IK3QAR IK3RIY IK3SCB IK3SSG IK3SSJ IK3SSO IK3SSW IK3SWB IK3TPP IK3TZB IK3UNA IK3VUT IK3XJP IK3XTT IK3XTV IK3XTY IK3YBX IK3YCW IK3ZAQ IK3ZBM IK4ALM IK4AUY IK4CIE IK4CLF IK4DCT IK4DCX IK4DKO IK4EWX IK4GNI IK4GRO IK4HLQ IK4HLU IK4HPS IK4ICS IK4IDP IK4JQQ IK4JQS IK4LZH IK4MGP IK4MTF IK4NQW IK4NYV IK4NZD IK4OMO IK4OMU IK4QJF IK4RQE IK4RQF IK4RQJ IK4RVG IK4TVP IK4UOA IK4UPB IK4UXB IK4VET IK4WMH IK4XQT IK4ZGO IK4ZHH IK4ZHV IK4ZIF IK5AFJ IK5AMB IK5BCM IK5BDG IK5BOH/2 IK5BSC IK5CRH IK5EKB IK5EKL IK5FCK IK5FKF IK5FQX IK5IFH IK5MEJ IK5MEP IK5MES IK5OJB IK5OWC IK5PWQ IK5PWS IK5RLP IK5RUN IK5SRF IK5TBI IK5TBK IK5UAN IK5VQI IK5WGK IK5ZQC IK5ZWU IK6BAK IK6EIW IK6FTZ IK6FWJ IK6GPZ IK6HIR IK6LBT IK6NUZ IK6OGZ IK6PTH IK6QON IK6QOP IK6SBW IK6UBY IK6VXO IK6XEJ IK7CMY IK7EES IK7EOT IK7HPG IK7JTF IK7JVE IK7JWY IK7LMX IK7MIY IK7NXU IK7RVY IK7UKF IK7WUI IK7XNF IK7YTT IK7YZG IK8ARF IK8BIZ IK8CNT IK8DNJ IK8IOO IK8NBE IK8NSR IK8OFW IK8OLM IK8QQO IK8SCR IK8SEU IK8SVQ IK8UND IK8VRP IK8YDP IK8YFU IM0SDX IN3ADW IN3AHO IN3BFW IN3BJS IN3EIS IN3ELX IN3EMI IN3EOM IN3EQD IN3EYI IN3FHE IN3FOI IN3FOX IN3FSR IN3HDE IN3HJA IN3HUU IN3JJI IN3JRZ IN3KMY IN3MDR IN3MNS IN3OWY IN3UFW IN3VVK IN3VZE IN3XUG IN3ZNR IN3ZWF IO1HQ IO1NGM IO1T IO2A IO2HQ IO2M IO2O IO2R IO2X IO3A IO3F IO3T IO3X IO3Y IO4C IO4HQ IO4R IO4T IO4X IO5HQ IO5O IO5P IO6A IO6HQ IO7T IO8HQ IO8T IO8V IO9A IO9HQ IO9O IO9R IO9Z IP9IPY IQ0ID IQ0NU IQ0RM IQ0RU IQ0SS IQ0WV IQ1BD IQ1FS IQ1LA IQ1RY IQ2CJ IQ2CU IQ2CY IQ2DB IQ2DN IQ2LS IQ2MG IQ2MI IQ2VA IQ2XI IQ2XZ IQ2XZ/8 IQ2ZY IQ3BM IQ3GA IQ3JX IQ3KU IQ3MB IQ3ME IQ3ME/P IQ3MF IQ3PN IQ3QU IQ3RK IQ3UD IQ3UV IQ3VE IQ3VI IQ3VO IQ3VV IQ4AX IQ4BQ IQ4FA IQ4FC IQ4RN IQ5JA IQ5NN IQ5OX/5 IQ5PJ IQ5PO IQ5ZP IQ5ZR IQ6AN IQ6SE IQ7DV IQ7YP IQ8MD IQ8PH IQ8SN IQ8UW IQ8XE IQ8XF IQ9SY IQ9UI IQ9YV IR1G IR1X IR1Y IR2C IR2L IR2Q IR2R IR3C IR3R IR3X IR3Z IR4B IR4E IR4K IR4M IR4P IR4T IR4X IR4Y IR6T IR7A IR7MT IR7MT/7 IR7R IR7T IR8D IR8P IR8SRE IR8W IR9D IR9K IR9P IR9R IR9W IR9Z IS0/I2GPT IS0/IK2FDV IS0/LZ5F IS0/OM8A IS0AFM IS0AML IS0ANT IS0BRQ IS0BSR IS0BWM IS0ESG IS0GQX IS0GRB IS0HNW IS0HQJ IS0HXK IS0LYN IS0NHT IS0SWW IS0URA IS0ZOD IT9AAI IT9ACJ IT9ACN IT9AEQ IT9AUH IT9AXZ IT9BDM IT9BLB IT9BUN IT9BXR IT9BYS IT9CAR IT9CFP IT9CHU IT9CIL IT9CKA IT9CLN IT9CTG IT9DBF IT9DFI IT9DGG IT9DGZ IT9DKI IT9DVZ IT9ESW IT9EWR IT9FRD IT9FRX IT9FUN IT9FXY IT9GHW IT9GQB IT9GQH IT9GSF IT9IMJ IT9IQQ IT9IZY IT9KCD IT9KXK IT9LKX IT9MBZ IT9MUO IT9NAN IT9OPR IT9PPG IT9PZM IT9QQP IT9RBW IT9RDG IT9RGY IT9RGY/4 IT9RWB IT9RZU IT9SSI IT9STX IT9UFP IT9VCE IT9VDQ IT9VJO IT9WDC IT9WKU IT9XTP IT9YMM IT9YVO IT9ZAQ IT9ZMX IT9ZTX IT9ZZO IU0APV IU0DMP IU0DUM IU0DZA IU0HMB IU0ITX IU0JFZ IU0KAH IU0KRR IU0KTT IU0LFQ IU0LJD IU0LRV IU0MBJ IU1AUG IU1CQS IU1DSU IU1DUB IU1FIB IU1FSL IU1GHC IU1GNA IU1HCC IU1HJF IU1IMC IU1JCZ IU1KAE IU1KGS IU1LCU IU2ABV IU2BEE IU2BHI IU2EFB IU2FRL IU2GFT IU2GGD IU2GLK IU2HEE IU2IBU IU2IDO IU2IGX IU2IHM IU2ILQ IU2JMZ IU3BTY IU3EDK IU3FBL IU3FCR IU3GJD IU3GKJ IU3GNB IU3KGO IU3KHI IU3LYJ IU3LZP IU3MDI IU3QJZ IU4APB IU4AZC IU4BIP IU4CHE IU4CSS IU4CZW IU4DAF IU4DTV IU4FIT IU4FJI IU4FKR IU4FLO IU4FNO IU4HMP IU4HMY IU4HRJ IU4IBC IU4JIC IU4JJP IU4MEP IU5ASA IU5BKR IU5CJP IU5CTX IU5FFM IU5GBQ IU5HIV IU5HWS IU5ICR IU5IWS IU5JHK IU6AIG IU6FUB IU6KVP IU7BSE IU7BSH IU7CUE IU7DUU IU7EDX IU7FKP IU8CEC IU8CNE IU8DKG IU8DSP IU8GWJ IU8GYT IU8HEP IU8HPD IU8HRV IU8JCQ IU8JPG IU8LCS IU8LMC IV3AEB IV3AOL IV3ARJ IV3AVQ IV3AZV IV3BCA IV3BMV IV3BTY IV3CGJ IV3CNZ IV3CTS IV3CYT IV3DCZ IV3DDN IV3DLW/P IV3DLZ IV3DRP IV3DSG IV3DSH IV3DXW IV3EAD IV3ELR IV3EPO IV3EWO IV3FPX IV3FSG IV3GOS IV3HAX IV3IDP IV3IFY IV3IPS IV3IXN IV3IYH IV3IZU IV3JCC IV3JVJ IV3JWY IV3KKW IV3KVC IV3NTI IV3NVN IV3OKO IV3ONZ IV3PRK IV3SKB IV3TIQ IV3TMV IV3TRK IV3UHL IV3UJT IV3UT IV3UTV IV3VBM IV3WMS IV3XNF IV3XPP IV3XZG IV3YIB IV3YNB IV3YND IV3ZNK IV3ZUY IV3ZXQ IW0AEN IW0BLW IW0BNW IW0GPW IW0GTA IW0GYC IW0HBY IW0HK IW0HLZ IW0QO IW0SAF IW1ARB IW1BCO IW1BND IW1CBG IW1CHX IW1CQ IW1DFU IW1FGY IW1FRD IW1FRU IW1PDP IW1PNJ IW1QIF IW1QN IW1RBI IW1RGP IW1RHR IW1RLC IW1RLS IW2BZY IW2CAM IW2CNM IW2CXJ IW2EAB IW2EDU IW2EVH IW2FLB IW2FUT IW2HAJ IW2HUS IW2JRV IW2MXY IW2MYH IW2MZX IW2NEF IW2NRI IW2NUI IW3BAS IW3FVZ IW3GGU IW3GXW IW3HXR IW3ILM IW3IOD IW3QRM IW3RQT IW3RUA IW3SSD IW4CLJ IW4CNY IW4ECF IW4EGX IW4EJK IW5ADB IW5DPF IW5ECP IW5EDI IW5EIJ IW5EKR IW5ELA IW6ASD IW6DRH IW6PWC IW7DBM IW7DHC IW7DMH IW7DOL IW7EBE IW8PJI IW9FDD IW9FI IW9GRL IW9GTD IX1BFL/6 IX1CLD IX1FIT IX1HPN IX1IIU IY3A IY4FGM IY5PIS IY7GMB IZ0AXF IZ0BVU IZ0COG IZ0CUV IZ0DXD IZ0EHL IZ0EUX IZ0FUW IZ0GMS IZ0GVZ IZ0HAP IZ0HLY IZ0IRH IZ0KBR IZ0LZC IZ0MQN IZ0OTV IZ0OVW IZ0PAU IZ0PMV IZ0TTE IZ0TWI IZ0TWS IZ0TZI IZ0UME IZ0VXY IZ0XZD IZ1ANK IZ1ANU IZ1AVA IZ1AZA IZ1BDQ IZ1CJZ IZ1CLA IZ1DLU IZ1DXS IZ1ESM IZ1FKS IZ1GAR IZ1GCV IZ1GLT IZ1GLX IZ1GRH IZ1GSO IZ1JMN IZ1LAY IZ1LBG IZ1MHY IZ1OSP IZ1PKV IZ1PLH IZ1PNT IZ1QLT IZ1RDQ IZ1RRJ IZ1TEJ IZ1TRG IZ1UJE IZ1UKF IZ1UKX IZ1WTO IZ1XEE IZ1YPF IZ2ABI IZ2ABZ IZ2AJE IZ2AVK IZ2BHQ IZ2BKA IZ2BKC IZ2BKP IZ2BVC IZ2BVL IZ2BZP IZ2BZT IZ2CSX IZ2DII IZ2DJP IZ2DLV IZ2DPX IZ2DVI IZ2EAS IZ2FDU IZ2FLX IZ2FME IZ2FOS IZ2GMT IZ2GRG IZ2JCD IZ2JPN IZ2JQP IZ2KTE IZ2KXC IZ2LQD IZ2MGN IZ2NZQ IZ2ODM IZ2OOS IZ2QDC IZ2QXG IZ2QZH IZ2SDK IZ2SMQ IZ2SNI IZ2SNY IZ2SQS IZ2SXZ IZ2WTZ IZ2ZPH IZ2ZQP IZ3AYQ IZ3BGL IZ3CLE IZ3DVU IZ3EAW IZ3EAX IZ3EIN IZ3ENH IZ3ETC IZ3ETU IZ3GFZ IZ3GHP IZ3GNG IZ3GOG IZ3GOM IZ3GOO IZ3GYS IZ3IBL IZ3KGI IZ3KKE IZ3KMY IZ3KUY IZ3LUF IZ3NUI IZ3NVR IZ3NXC IZ3NXC/P IZ3NYG IZ3PZI IZ3QCH IZ3QFG IZ3QHA IZ3SQW IZ3VTH IZ3WUW IZ3XEF IZ3XNJ IZ3ZLG IZ4AIF IZ4AKO IZ4BOY IZ4BQV IZ4COT IZ4COW IZ4DIW IZ4DYX IZ4DZD IZ4EFP IZ4EKI IZ4FUE IZ4GOL IZ4IRO IZ4IRX IZ4ISL IZ4JMA IZ4JMU IZ4JUK IZ4NIC IZ4NSV IZ4ORF IZ4OSH IZ4REF IZ4TOA IZ4UFB IZ4UFG IZ4VQS IZ4VSD IZ4XAI IZ4YAB IZ4YUE IZ4ZZB IZ5AHB IZ5ASZ IZ5BBS IZ5CMI IZ5CML IZ5DIY IZ5DKJ IZ5EAF IZ5EBL IZ5EKV IZ5EME IZ5FDD IZ5FSA IZ5FSO IZ5GST IZ5HQB IZ5ICH IZ5ILC IZ5ILF IZ5ILK IZ5IMB IZ5IMD IZ5IOM IZ5IOS IZ5MMB IZ5MMK IZ5MOQ IZ5NFD IZ5OQX IZ5OVP IZ5RLK IZ5TJD/7 IZ5VCI IZ5WTV IZ5YGZ IZ6AAW IZ6BXQ IZ6BXV IZ6BYS IZ6ERS IZ6FXP IZ6HYR IZ6IOC IZ6JPK IZ6OUX IZ6WSJ IZ7BAS IZ7DJR IZ7DJS IZ7ECL IZ7EUB IZ7FLP IZ7GEG IZ7KHR IZ7NLJ IZ7NMD IZ7SJV IZ7UMS IZ7WWY IZ7XIB IZ7XNB IZ7XUQ IZ8AJU IZ8BRI IZ8CCW IZ8CKY IZ8DBJ IZ8DFO IZ8DVD IZ8EFD IZ8EPX IZ8EQF IZ8EQG IZ8EWD IZ8EYP IZ8FFA IZ8FFZ IZ8FWN IZ8GBT IZ8GCB IZ8GNR IZ8GUQ IZ8IEV IZ8JAI IZ8JFL IZ8JHD IZ8LKL IZ8MXB IZ8NWA IZ8QNS IZ8VYU IZ8WDH IZ8XXE J32FIFA J35X J41J J41L J42L J49A J6/NG7E J68GD J68GU J68HZ J68MD J68SS J69DS J69MV J69Z J75Y J79WTA J8/WJ2O J88HF J8NY JA0AOQ JA0ARF JA0AVS JA0BJY JA0BOV JA0BZY JA0CGJ JA0CJK JA0CLB JA0CXQ JA0DAI JA0DCB JA0DCQ JA0DOM JA0DOW JA0EKI JA0ELW JA0EME JA0FIL JA0FVU JA0GCI JA0GCY JA0IKP JA0IOF JA0IXW JA0JHA JA0JWQ JA0LBE JA0MOQ JA0MVW JA0NFP JA0QNJ JA0RUG JA0UR JA1AAA JA1ADU JA1AFR JA1AHS JA1AKL JA1AVI/1 JA1AYO JA1AZR JA1AZW JA1BBC JA1BFN JA1BJI JA1BNW JA1BPA JA1BVY JA1BWA JA1CCH JA1CCH/1 JA1CCN JA1CHY JA1CJP JA1COU JA1CP JA1CPU JA1CQD JA1CQK JA1CRJ JA1CTZ JA1DCK JA1DCO JA1DDZ JA1DKT JA1DOF JA1DOT JA1DSW JA1DVN JA1EMQ JA1EOG JA1EPJ JA1ERB JA1EZK JA1FFB JA1FVE JA1FWS JA1GFD JA1GHR JA1GLE JA1GQC JA1GQL JA1GVM JA1GZK JA1GZV JA1HFY JA1HGY JA1HLR JA1HNW JA1HXJ JA1IAW JA1IAZ JA1IE JA1IHD JA1IRH JA1IXY JA1IZ JA1JEX JA1JLP JA1JNM JA1JXT JA1KEB JA1KEV JA1KGV JA1KIH JA1KJC JA1KZP JA1LLY JA1LNZ JA1MJN JA1MSS JA1MZM JA1NEJ JA1NFD JA1NFM JA1NRQ JA1OGM JA1OHD JA1OHP JA1OVD JA1OWP JA1OYD JA1PCM JA1PIG JA1PNA JA1PTJ JA1PTO JA1PVX JA1QDB JA1QIF JA1QJE JA1QOP JA1QOW JA1QWT JA1RAC JA1RPK JA1RRA JA1RTX JA1RYC JA1SCE JA1SIM JA1SJV JA1SKE JA1SKM JA1SVP JA1TBA JA1TGO JA1TJS JA1TLK JA1TMG JA1UHJ JA1UII JA1UOA JA1UOC JA1UTQ JA1UTZ JA1UXV JA1UYJ JA1VDJ JA1VJQ JA1VKV JA1VND JA1VSL JA1WQD JA1WQX JA1WRI JA1WSK JA1WSX JA1WTI JA1WWE JA1WWO JA1XEC JA1XGI JA1XPQ JA1XRA JA1XS JA1XTT JA1XUY JA1YNE JA1YPA JA1YYE JA1ZGO JA1ZGP JA2ATE JA2AXB JA2BHQ JA2BIV JA2CJE JA2CKT JA2DGQ/3 JA2DHF JA2DHX JA2DPQ JA2FMN JA2FNY JA2FSM JA2FUA JA2FXV JA2GAL JA2GHP JA2GRX JA2GTW JA2HNP JA2HO JA2HYD JA2ICB JA2ITK JA2JKT JA2JNC JA2JNC/1 JA2JWH JA2KCY JA2KKA JA2KOG JA2KPW JA2KQE JA2KVB JA2KVD JA2LMA JA2MOG JA2MWV JA2MWX JA2OAW JA2ODB JA2OLJ JA2PFO JA2QQC JA2QVP JA2QWN JA2QXY JA2RJE JA2VHO JA2VQF JA2VZL JA2XCR JA2XYO JA2YGP JA3AIC JA3ALO JA3AOP JA3AVO JA3BXF JA3DAY JA3DLE/1 JA3EBT JA3ENN JA3EQC JA3FKP JA3FRI JA3FYC JA3GZE/1 JA3HBC JA3HBF JA3HDM JA3HKR JA3HPD JA3IBU JA3JM JA3JND JA3JOT JA3JRI JA3KDJ JA3KKE JA3LCR JA3LEB JA3LIL JA3LKU JA3MAT JA3MEV JA3MIB JA3MIX JA3NFA JA3ONB JA3OOK JA3PFY JA3PJL JA3QCM JA3QOS JA3RAZ JA3UCO JA3UWB JA3VLD JA3VOV JA3VQW JA3XOG JA3YBK JA3YEA JA4AVO JA4BRS JA4BSZ JA4CQS JA4CUU JA4CZM JA4DC JA4DNC JA4DND JA4DWG JA4DZ JA4ENY JA4ESR JA4FFZ JA4FSH JA4FWI JA4GQD JA4IYY JA4JKO JA4JSV JA4JY/3 JA4LCI JA4MOK JA4OPW JA4RED JA4RMX JA4SRG JA4TEG JA4TUJ JA4VNE JA4XHF/3 JA4XY JA5AQC JA5BEN JA5BIN JA5BXG JA5BZL JA5CBU JA5CDL JA5CEX JA5CIC JA5DPL JA5DQH JA5DX JA5EWQ JA5EXN/5 JA5EXW JA5FDJ JA5FMP JA5FNX JA5GCI JA5IVG JA5JWQ JA5JZL JA5KGM JA5KJD/7 JA5KPO JA5MHD JA5NSR JA5OXV JA5PXG JA5QAH JA5QJX/0 JA5QYR JA5RB JA5RVN JA5SUD JA5TX JA5WIO JA5WNH JA5WU JA6BCV JA6BDB JA6BWB JA6BWH JA6BXA JA6BZI JA6CTN JA6CVR JA6CYL JA6ELV JA6EML JA6FCL JA6FEG JA6FFK JA6FFO JA6FIO JA6FUV JA6GCE JA6GMC JA6GPR JA6GT JA6GVF JA6HOI JA6IGO JA6IWU JA6JNF JA6LCJ JA6LJN JA6MWW JA6NQC JA6ONQ JA6REX JA6SHL JA6UDI JA6WFM JA6XMM JA6ZPR JA7ACM JA7ACV JA7AKH JA7AMK JA7ARW JA7AUM JA7AXP JA7BEW JA7BOB JA7BWT JA7BXS JA7CDV JA7COI JA7CPW JA7CVL JA7DPC JA7EPO JA7EVH JA7FAS JA7FFN JA7FLI JA7FSB JA7FVA JA7GBS JA7GUT JA7GYP JA7HYS JA7IC JA7IL JA7JAA JA7KED JA7KPI JA7KQC JA7LCL JA7LLL JA7MAD JA7MBT JA7MQM JA7MSQ JA7MVX JA7MVX/7 JA7MWC JA7NI JA7NPV JA7NVF JA7ODY JA7OWD JA7OYF JA7QVI JA7RIE JA7RPC JA7RRU JA7SFD JA7SPJ JA7SUR JA7TJ JA7UES JA7VEI JA7WTC JA7WXL JA7XRH JA7XZZ JA7YRR JA7ZFN JA7ZP JA8ABZ JA8AHA JA8AJE JA8BKI JA8BMD JA8CLS JA8CMC JA8CNF JA8COE JA8CXY JA8DJY JA8DKJ JA8DNV JA8EAT JA8FFM JA8FXO JA8GAK JA8GWK JA8HBO JA8IAF JA8IDS JA8IJI JA8IZP JA8JLC JA8KSF JA8KSW/1 JA8NFV JA8NRS JA8RRF JA8RWU JA8TGD JA8TR JA8XOK JA8ZZZ JA9BCV JA9BFN JA9CCG JA9CWJ JA9DTV/1 JA9EJG JA9ESZ JA9FAI JA9FFS JA9FHB JA9KRO JA9LJS JA9LNZ JA9LX JA9MAT JA9NFO JA9PAK JA9PHV JA9RPU JA9SBI JA9ZMQ JD1BIA JD1BOI JD1BON JE1AEX JE1AON JE1BJT JE1BMJ JE1CAC JE1CKA JE1COB JE1CPB JE1CSW JE1DRU JE1DVJ JE1FQV JE1FUX JE1GWO JE1GZB JE1HRC JE1IFV JE1JNJ JE1KEY JE1LET JE1LFX JE1LOI JE1LRT JE1NVD JE1PMQ JE1REU JE1RRK JE1RXJ JE1RZR JE1SGH JE1SLP JE1SPY JE1TSD JE1VMZ JE1VTZ JE1WBA JE1YEM JE2BOM JE2CPI JE2DJC JE2DLR JE2DOD JE2EHP JE2FDH JE2FUP JE2GUV JE2HCJ JE2HXL JE2LPC JE2LUN JE2OTM JE2OVG JE2PCY JE2VFX JE2VYM JE2WTX JE2YRB JE3DJB JE3ECD JE3EDJ JE3MAS JE3RMQ JE3TAT JE3UHV JE3VRJ JE4ADO JE4CIL JE4IVN JE4JPQ JE4MHL JE4NAN JE4USZ JE5HTN JE5JHZ JE6CMG JE6EFG JE6IEQ JE6JNC JE6JZP JE6LZN JE6RPM JE6TUP JE6URC JE6WGT JE6WOQ JE7CJL JE7HYK JE7JDL JE7JIS JE7JZT JE7KJG JE7LHT JE7MAY JE7RHT JE7WBI JE7WWU JE8AGX JE8CLT JE8FYE JE8KGH JE8KKX JE8TGI JE8URC JF1AGB JF1CCH JF1CKO JF1EHM JF1EPL JF1GZZ JF1JDG JF1KML JF1KWG JF1LLB JF1LMB JF1MIA JF1NHD JF1NZW JF1OJC JF1OPL JF1OPO JF1OQM JF1OVA JF1RYU JF1SEK JF1TEU JF1UOX JF1VNR JF1VVR JF1VYX JF1WCK JF1WLK JF1WNT JF2AIA/4 JF2FIU JF2IWL JF2KOZ JF2MBF JF2OZH JF2PKL JF2QNM JF2RLD JF2RYX JF2SKV JF2UPM JF2VAX JF2VHS JF2WKE JF2WXS JF2XGF JF3BFS JF3BHV JF3DCH JF3EIG JF3GFH JF3GFH/1 JF3ITH JF3IYW JF3IYW/2 JF3KCH JF3LOP JF3MYU JF3NKA JF3PGW JF3PNQ JF3VAX JF4XUT JF5SIM JF5VSW JF7GDF JF7PHE JF7XKY JF8QNF JF9JTS JF9PPM JG0CQK JG0EXP JG0HEW JG1BBD JG1BKX JG1CFO JG1EIQ JG1FMA JG1FML JG1GOY JG1HKC JG1IEF JG1IGX JG1IJP JG1ITH JG1LEU JG1LFR JG1LHB JG1OGM JG1RET JG1STB JG1SXP JG1TGQ JG1THV JG1UKW JG1UZD JG1VGX JG1VHA JG1XIO JG2REJ JG2RFJ JG2RZF JG2TSL JG3CQJ JG3EWE JG3FEA JG3LDD JG3LGD JG3PTB JG3SUQ JG3SVP JG3VWI JG3WDN JG3WJN JG3XDR JG4AKL JG4QFG JG4WTY/1 JG5DHX JG5JXW JG5UWK JG6JAV JG6OZC JG6QFC JG6QHE JG6SRB JG6SRL JG6XYS JG6YLY JG7AMD JG7EHM JG7PSJ JG8NKJ JH0AHI JH0BBA JH0EPI JH0EQN JH0GHZ JH0HBC JH0HDL JH0IEY JH0ILL JH0INP JH0KHR JH0MJY JH0MUC JH0MUC/0 JH0MXV JH0NEC JH0OXS JH0RNN JH0ROS/1 JH0SPE JH0TIS JH0UUY/1 JH1ACA JH1AEP JH1AHU JH1AJT JH1APE JH1APK JH1APZ JH1ASG JH1AWJ JH1BHW JH1BIU JH1BNC JH1BZJ JH1CCN JH1CDR JH1CML JH1CTV JH1DGJ JH1DRF JH1DXM JH1DYV JH1EAQ JH1EEB JH1ERJ JH1ESR JH1EVD JH1EYM JH1FNU JH1FQW JH1FSF JH1FTL JH1GBO JH1GBZ JH1GCR JH1GEX JH1GNU JH1GTU JH1GTV JH1HFE JH1HGI JH1HIC JH1HLC JH1IHG JH1ILX JH1IVD JH1JCQ JH1JNJ JH1KMC JH1KRC JH1KYA JH1LEM JH1LMG JH1LNL JH1LYE JH1MDJ JH1MFN JH1MTR/4 JH1NXU JH1OAI JH1OBS JH1OGC JH1OGT JH1OHZ JH1OLB JH1ORA JH1OTD JH1OTZ JH1PCE JH1PXH JH1QAX JH1QDB JH1QDF JH1RDU JH1RFM JH1RFZ JH1RGG JH1RNI JH1RRP JH1RZY JH1SAJ JH1SCD JH1SJN JH1SJS JH1TFE JH1TJH JH1TXG/9 JH1UBK JH1VHU JH1VIG JH1VIX JH1VRM JH1WFS JH1WHA JH1WHZ JH1WOY JH1XEF JH1XUM JH1XUP JH1YAK JH2BAX JH2BTM JH2BUF JH2CMH JH2DFJ JH2EUV/1 JH2FXK JH2GSW JH2GZY JH2IQJ JH2KKW JH2LMH JH2LTL JH2MYN JH2NYZ JH2RMU JH2UVB JH2XQY JH3AIU JH3CUL JH3DMQ JH3EQP JH3EUJ JH3FGI JH3FUK JH3GMI JH3JSJ JH3JUB JH3LCX JH3PAS JH3QFY JH3RGD JH3SIF JH3TCC JH3WKE JH4ADK JH4CES JH4CPC JH4DIT JH4FUF JH4IFF JH4PHW JH4PUL/3 JH4PUS JH4RNY JH4SZY JH4UTP JH4UYB JH5AVM JH5FXP JH5GEN JH5HDA JH5KAC JH5MXB JH6BMA JH6DUI JH6QFJ JH6QIL JH6RON JH6RTO JH6SCA JH6WHN JH6XOD JH7BMF JH7BVH JH7GLT JH7GZF JH7IHT JH7IQQ JH7IXX JH7MQD JH7NTW JH7NXV JH7OYV JH7QOM JH7QXJ JH7RTQ JH7SSJ JH7SSY JH7UJU JH7VHZ JH7VTE JH7XGN JH7XMO JH7XRG JH8BKP JH8CXW JH8CZB JH8DBJ JH8DHV JH8GEU JH8JYV JH8KYU/1 JH8OCV JH8RNY JH8RXM JH8TRY JH8XVT JH8YHH JH8YOH JH9AUB JH9CEN JH9DRL JH9FCP JH9KVF JH9URT JI0WVQ JI1ALP JI1AQY JI1AVY JI1BBN JI1BDQ JI1BHO JI1BJB JI1BNU JI1CNA JI1DCW JI1EOY JI1FLB JI1FOE JI1FXS JI1HFJ JI1HNC JI1HSV JI1ICF JI1JPJ JI1LAI JI1LET JI1LNR JI1MUT JI1NZA JI1PBK JI1QEW JI1RFB JI1RSF JI1RXQ JI1SVY JI1TBA JI1TBQ JI1TSH JI1UPL JI1VAH JI1XGA JI2FBG JI2FYR JI2HVT JI2IWB JI2IXA JI2KUJ JI2OSC JI2TKX JI2ZEY JI2ZJS JI3BFC JI3CJP JI3KDH JI3MJK JI4WAO JI4WHS JI5KGQ JI7EMD JI7GBI JI7GYU JI7RRS JI7UUO JI7VNJ JJ0AEB JJ0AWX JJ0JML JJ0NSL JJ0PJD JJ0TIY JJ0UJW/1 JJ1AZX JJ1CBY JJ1CKN JJ1CZR JJ1ENZ JJ1EPE JJ1GXY JJ1IMG JJ1KZZ JJ1LBJ JJ1NYH JJ1ONI JJ1PLS JJ1QLT JJ1QUV JJ1RXC JJ1RZG JJ1VEZ JJ1VFE JJ1XBQ JJ2CJB JJ2HCM JJ2ICA JJ2IJU JJ2LPV JJ2ONH JJ2QWN JJ2QXI JJ2YDV JJ2YRE JJ3JJL JJ3KTW JJ3PRT JJ3TBB JJ3TBB/3 JJ3TQO JJ5GMJ JJ5GSY JJ5HUD JJ6CRH JJ7ATA JJ7GCL JJ7SRA JK1BQS JK1BSU JK1FFB JK1FNN JK1FUP JK1GOK JK1HIX JK1HIY JK1HWQ JK1JHU JK1KFO JK1LSE JK1LUY JK1NJH JK1NSR JK1OLT JK1OZS JK1PIU JK1PQI JK1QAY JK1TCV JK1THF JK1UVL JK1WSH JK1XDB JK2EIJ/0 JK2RCP JK2UYX JK2VOC JK3AGC JK3GWT JK3HFN JK3HLP JK3NSD JK4KSD JK6SEW JK7BEJ JK7CJM JK7DWD JK7QJK JK7UST JK8CEE JK8NIP JK8PBO JK8VPQ JL1CNY JL1EEI JL1EHU JL1EUP JL1HOV JL1IEO JL1JJD JL1KBS JL1KLK JL1MUT JL1MWY JL1MYP JL1OXH JL1QDO JL1QOC JL1QQA JL1SAM JL1UCH JL1UTS JL1VAL JL2LPX JL3AMK JL3DQX JL3JRY JL3MCM JL3RDC JL3RNZ JL3SZP JL3VUL JL3VUL/3 JL3ZHU JL6USD JL7CTR JL8TZJ JL8XSO JM1AHX JM1DPL JM1DUI JM1EKM JM1FHL JM1GAW JM1IQX JM1KNI JM1LAW JM1LWY JM1MTE JM1NKT JM1PIH JM1TUY JM1VDM JM1XCW JM1XMH JM2LEI JM2LHB JM3AAN JM3ERL JM3ROY JM3UGA JM4WUZ JM7EJW JM7GTK JM7OLW JM7SKE JM7UBI JM8FEI JM8LND JN1BMX JN1ILK JN1MSO JN1NOP JN1THL JN2AMD JN2OWE JN2QYN JN3DSH JN3LQP JN3MXT JN3ONX JN3SAC JN3TMW JN3TSY JN4MMO JN7FAH JN7TAN JO01DC JO1BPF JO1COV JO1DZA JO1WIZ JO1WXO JO2BWZ JO2FBV JO2MHN JO3DDD JO3IEE JO3JIS JO3JYE JO3PSJ JO3QVT JO3TAP JO4CFV JO4JDU JO4JFH JO4JKL JO65MR JO7BTV JO7GVC JO7KMB JO7RAA JO7WXN JP1AEG JP1BVR JP1GUW JP1KLR JP1KSI JP1SRG JP3BEE JP3EXE JP3FTA JP3KCX JP3MFV JP3NSJ JP3RMB JP3WEL JP6VTI JP7BRB JP7DKQ JP7GRU JP7KUE JP7SZL JP7TAW JQ1ABC JQ1ARQ JQ1BVI JQ1CIV JQ1COB JQ1EPD JQ1EPD/1 JQ1HYB JQ1NGT JQ1PCT JQ1RKI JQ1TIV JQ1VDJ JQ1ZYQ JQ3PPC JR0BNF JR0BQD JR0DZH JR0GFM JR0GXA JR0WZR JR1ABS JR1AIA JR1AQI JR1BAS JR1BTG JR1CBC JR1CCT JR1CEP JR1CJD JR1CVU JR1DUP JR1EEU JR1EMO JR1EMT JR1FBX JR1GFX JR1GJP JR1GSE JR1IJV JR1IZM JR1JCB JR1JGA JR1JRW JR1KVN JR1LEV JR1LFT JR1LLD JR1MEG/1 JR1NHD JR1NKN JR1QBA JR1UJX/2 JR1VAY JR1VLW JR1WCT JR1WYW JR1YRI JR1ZTI JR1ZTT JR2ALA JR2ATZ JR2AWS JR2BCF JR2EKD JR2GBY JR2GRX JR2IOB JR2MCN JR2MIN JR2MIO JR2NMJ JR2NTC/2 JR2PAU JR2PMT JR2SCJ JR2TZJ JR2UBS JR2WLQ JR3AAZ JR3BOT JR3EOI JR3EQG JR3GPP JR3HZW JR3IIR JR3JFZ JR3JRI JR3JXM JR3KQJ JR3NZC JR3RIU JR3RIY JR3XEX JR3XUH JR4CTF JR4CZM JR4DAH JR4GPA JR4ISF/3 JR4NMV JR4OFU JR4OZR JR4PMW JR4VEV JR4XME JR5XPG JR6CSY JR6EZE JR6FRV JR6GIM JR6HK JR6IKD JR6RLV JR6YTX JR7AMZ JR7ASO JR7COP JR7DUT JR7FNT JR7FVO JR7IWC JR7IWL JR7RZK JR7XKN JR8AMF JR8ECU JR8NOD JR8ORC JR8QFG JR8QVT/1 JR9CPT JR9GMS JR9NVB JR9TUG JS1BKR JS1BXH JS1IFK JS1KKY JS1MRA JS1MZV JS1NDM JS1OYN JS1WWR JS1YAJ JS2AAV JS2AZO JS2CTY JS2DLR JS2LGN JS3CTF JS3CTQ JS3EOE JS3QWI JS6TSE JT1BU JT1BV JT1CO JT1CS JT1DX JT1KAI JT5DX JT5LZ JT7AA JU1DX JW2US JW5E K0ACP K0AD K0AE K0AJW K0AL K0AOZ K0AP K0APT K0ARG K0ARS K0ARY K0ATZ K0AU K0AV K0AVN K0AWU K0BAK K0BBB K0BBC K0BEE K0BIU K0BJ K0BMC K0BQB K0BRO K0BS K0BWQ K0BX K0CD K0CF K0CHK K0CMH K0CN K0COM K0COY K0CRF K0CV K0CYA K0DCK K0DD K0DDD K0DEQ K0DGX K0DI K0DIT K0DPT K0DSL K0DTJ K0DVY K0EA K0EAP K0EG K0EIA K0EJ K0EJ/6 K0EKL K0EOU K0EU K0FBP K0FCL K0FD K0FG K0FHG K0FJ K0FLY K0FRY K0FVF K0FX K0GDI K0GEO K0GG K0GLT K0GOB K0GQ K0GUN K0GUR K0GUZ K0GV K0GWR K0GXI K0HB K0HC K0HCV K0HD K0HMZ K0HNC K0HNL K0HPY K0HS K0HT K0HUU K0HVR K0HX K0IDX K0IIT K0IL K0IMP K0INN K0INR K0IP K0IR K0IS K0ITC K0IUQ K0IUZ K0IZ K0JEM K0JFJ K0JJ K0JJM K0JJR K0JM K0JP K0JPL K0JSC K0JU K0JV K0JVX K0JY K0KB K0KC K0KE K0KEX K0KJT K0KKV K0KP K0KPH K0KR K0KRC K0KT K0KX K0LAF K0LB K0LBR K0LD K0LDS K0LIR K0LMD K0LMF K0LTC K0LU K0LUZ K0LWC K0MAJ K0MB K0MD K0MF K0MGA K0MHP K0MJS K0MKL K0MKL/VE3 K0MLD K0MO K0MP K0MPH K0MUF K0MZN K0NE K0NEB K0NLE K0NM K0NR K0NUK K0NW K0NXA K0NXV K0NZ K0OB K0ODF K0OMH K0ON K0OO K0OO/3 K0OP K0OU K0PB K0PC K0PD K0PFX K0PG K0PHP K0PIR K0PJ K0PK K0PT K0PV K0QB K0QC K0QEI K0QMU K0QQ K0QU K0RC K0RCJ K0RDP K0RF K0RJW K0RK K0RON K0RS K0RUS K0RV K0SCO K0SDW K0SDZ K0SEK K0SF K0SIX K0SJ K0SM K0SN K0SN/7 K0SPU K0SR K0SRL K0STH K0STP K0SV K0SW K0SWT K0SX K0TAL K0TC K0TDC K0TEA K0TF K0TG K0THN K0TI K0TLG K0TLW K0TNT K0TPP K0TQ K0TRL K0TSA K0TT K0TWB K0UA K0UAS K0UH K0UK K0UM K0USA K0UU K0VAB K0VBU K0VC K0VG K0VH K0VM K0VN K0VR K0VW K0VXU K0WA K0WB K0WD K0WEW K0WIU K0WJ K0WKT K0WML K0WOI K0WPM K0WRY K0WWV K0XB K0XG K0XM K0XN K0XP K0XP/6 K0XTR K0XU K0XX K0YA K0YB K0YL K0YQ K0YQX K0YR K0YY K0ZK K0ZN K0ZR K0ZU K0ZX K1AC K1AJ K1APJ K1AR K1ARO K1ARR K1AUS K1AV K1AY K1BDC K1BG K1BIF K1BUK K1BV K1BW K1BX K1BZ K1BZM K1CAL K1CB K1CC K1CDX K1CGZ K1CL K1CN K1CPJ K1CTR K1CX K1DAT/1 K1DBO K1DC K1DCT K1DDN K1DG K1DGW K1DJ K1DJB K1DM K1DPB K1DQZ K1DS K1DT K1DVL K1DW K1DX K1EA K1EAR K1EBY K1EC K1ECU K1EEE K1EFI K1EIC K1EJL K1EO K1EP K1ESE K1ETA K1FE K1FFX K1FJG K1FM K1FQL K1FR K1FXY K1GD K1GG K1GJQ K1GMM K1GND K1GNP K1GQ K1GRC K1GU K1GU/0 K1GUP K1GX K1HC K1HG K1HL K1HT K1HTV K1HZ K1IB K1IDX K1IEB K1IFJ K1IG K1IIG K1IM K1IMI K1IR K1IT K1IX K1JB K1JE K1JHS K1JIV K1JLC K1JRF K1JSM K1JT K1JX K1KA K1KD K1KDG K1KG K1KI K1KK K1KNQ K1KP K1KRN K1KX K1KXN K1LD K1LDO K1LEE K1LGM K1LGQ K1LHO K1LK K1LKP K1LKR K1LO K1LOG K1LOK K1LOL K1LOZ K1LT K1LT/8 K1LTJ K1LU K1LZ K1MAA K1MC K1MD K1MJM K1MK K1MLP K1MM K1MMI K1MR K1MT K1MTD K1MZM K1NA K1ND K1NMF K1NR K1NS K1NTR K1NU K1NY K1NZ K1OA K1OJ K1OR K1OT K1OU K1OYQ K1PAD K1PAM K1PDY K1PGV K1PL K1PLL K1PPE K1PQS K1PX K1PXE K1QA K1QO K1QR K1QS K1QVX K1QX K1RCT K1RF K1RGO K1RH K1RI K1RID K1RK K1RKX K1RLB K1RM K1RMN K1RO K1RQ K1RR K1RTA K1RU K1RV K1RX K1RZ K1SA K1SCE K1SE K1SEC K1SFA K1SLR K1SM K1SN K1SND K1SO K1SOC K1SPD K1ST K1SUU K1SWL K1SX K1TA K1TCP K1TEO K1TGF K1TGX K1TH K1TN K1TN/4 K1TO K1TOB K1TR K1TTT K1TU K1TW K1UK K1USA K1USN K1UU K1VDF K1VI K1VLB K1VLU K1VMT K1VO K1VOI K1VR K1VRF K1VSJ K1VU K1VUT K1VW K1VWJ K1VWQ K1WAS K1WB K1WCC K1WGM K1WHS K1WHY K1WJL K1WMC K1WR K1WY K1XM K1XS K1XV K1XX K1YR K1YT K1YWW K1YY K1ZE K1ZJH K1ZK K1ZM K1ZO K1ZPZ K1ZW K1ZZ K2AA K2ABB K2ADA K2AE K2AEI K2AF K2AK K2AKA K2AL K2AL/1 K2AMF K2AMI K2AN K2ANT K2ANZ K2APD K2AR K2ATZ K2AUW K2AV K2AX K2AYA K2AZ K2BAR K2BIO K2BQ K2BR K2BX K2BY K2CAB K2CAF K2CBI K2CD K2CF K2CIB K2CIB/GLA K2CJ K2CJB K2CJS K2CM K2CNN K2CPU K2CQW K2CR K2CT K2CUB K2CYE K2CYS K2DAR K2DB K2DBK K2DEG K2DEL K2DFC K2DFE K2DH K2DJL K2DLS K2DM K2DM/4 K2DMG K2DO K2DP K2DRH K2DSW K2EC K2EDW K2EJ K2EK K2ELV K2EP K2EQ K2ERG K2EYS K2FD K2FEO K2FF K2FN K2FOC K2FTP K2GAV K2GC K2GER K2GG K2GJJ K2GLS K2GMT K2GMY K2GT K2GTC K2HA K2HL K2HNL K2HRO K2HT K2HVE K2HVN K2HYD K2HZN K2HZO K2IL K2ITT K2IW K2IY K2IZ K2JAY K2JB K2JF K2JK K2JPV K2JSB K2JT K2JVB K2JVX K2KA K2KJD K2KMC K2KN K2KQ K2KR K2KRG K2KU K2KW K2KXK K2LCT K2LE K2LE/1 K2LED K2LEH K2LF K2LIM K2LLC K2LML K2LNS K2LS K2LTE K2LXC K2LYV K2MA K2MAX K2MEN K2MFW K2MFY K2MGR K2MIJ K2MJ K2MK K2MK/4 K2MMO K2MMW K2MO K2MP K2MRK K2MTG K2MV K2MYQ K2MYQ/1 K2ND K2NEL K2NG K2NJ K2NNY K2NP K2NPN K2NPT K2NRN K2NV K2NV/2 K2NV/VE3 K2NY K2NYG K2OAK K2OEK K2OID K2OK K2OQA K2OS K2PAL K2PI K2PJC K2PK K2PLF K2PM K2PMC K2PMD K2PN K2PO K2POF K2PQ K2PS K2QB K2QBN K2QDY K2QMF K2QNU K2QO K2QPN K2QS K2QU K2QY K2RB K2RD K2RE K2RET K2RH K2RK K2RKD K2RLF K2RNY K2RP K2RPM K2RR K2RSB K2RSK K2RU K2RW K2RYD K2SAN K2SCH K2SD K2SDX K2SE K2SFS K2SG K2SG/4 K2SGH K2SHZ K2SI K2SJ K2SJB K2SLZ K2SQS K2SS K2SSS K2SX K2TAX K2TD K2TE K2TER K2TL K2TQC K2TRD K2TT K2TTM K2TTT K2TV K2TW K2TWI K2UA K2UCW K2UF K2UIO K2UM K2UNI K2UQT K2UR K2UT K2UU K2UV K2VN K2VPX K2VTT K2VV K2WJ K2WJL K2WK K2WLS K2WOP K2WPM K2WR K2WW K2XA K2XE K2XN K2XR K2YAZ K2YG K2YG/1 K2YGM K2YNY K2YR K2YY K2YY/6 K2YYY K2ZBA K2ZC K2ZD K2ZF K2ZJ K2ZL K2ZP K2ZR K2ZR/4 K2ZWI K3ABE K3AE K3AJ K3AQ K3ATO K3AU K3AXR K3BBB K3BFQ K3BHX K3BLN K3BVQ K3BYU K3CCR K3CDZ K3CGG K3CLT K3CS K3CT K3CWF K3CWO K3DCW K3DMG K3DMG/8 K3DMH K3DNE K3DOS K3DQB K3DVF K3DY K3EA K3EDM K3EDP K3EJJ K3EK K3EL K3EP K3EQ K3ESE K3EST K3EW K3EWZ K3EYJ K3FAZ K3FH K3FI K3FK K3FLY K3FMF K3FMQ K3FRG K3FS K3FWG K3GC K3GHH K3GMQ K3GP K3GP/8 K3GSP K3GT K3GTS K3GW K3GWK K3HCR K3HR K3HVT K3HW K3HWH K3HX K3IA K3IB K3IE K3II K3IN K3IRV K3ISH K3IU K3IU/1 K3IW K3JA K3JAG K3JGJ K3JHT K3JJG K3JJJ K3JO K3JPT K3JT K3JWI K3KG K3KKH K3KN K3KO K3KU K3KV K3KYR K3KZU K3LAB K3LB K3LKS K3LNZ K3LR K3LT K3LU K3LUE K3MA K3MAW K3MD K3MD/1 K3MEC K3MJW K3MM K3MOV K3MR K3MSB K3MSP K3MTO K3MTR K3NC K3ND K3NDM K3NEM K3NF K3NG K3NGV K3NK K3NP K3NQ K3NRX K3NT K3NUI K3OCW K3ODX K3OJK K3OK K3OMI K3OO K3OQ K3OQF K3ORC K3ORS K3OX K3OXL K3PA K3PG K3PH K3PI K3PNI K3PP K3PRC K3QF K3QH K3QIA K3QID K3QP K3QQN K3RA K3RH K3RKC K3RL K3RLC K3RMB K3RN K3ROG K3RON K3RR K3RRP K3RRR K3RSJ K3RSS K3RV K3RWN K3RY K3SAE K3SEN K3SEW K3SF K3SFX K3SG K3SK K3SMT K3SOM K3SSS K3STL K3STX K3SU K3SV K3SW K3SWZ K3SX K3TBD K3TC K3TCE K3TCO K3TCR K3TD K3TEF K3TEJ K3TM K3TN K3TP K3TUF K3TW K3TX K3TXW K3TYL K3UA K3UHU K3UK K3UKO K3UL K3UQ K3URT K3USC K3UU K3UW K3VA K3VAN K3VAR K3VED K3VIG K3VJ K3VN K3VR K3VX K3VZ K3WA K3WA/KP4 K3WD K3WDT K3WEB K3WGR K3WHC K3WI K3WJV K3WR K3WT K3WU K3WW K3WWP K3WWT K3WYC K3XA K3XO K3XR K3XT K3YBN K3YDX K3YEO K3YGX K3YH K3YNY K3YP K3YTL K3ZA K3ZCY K3ZGA K3ZJ K3ZK K3ZM K3ZO K3ZU K3ZV K3ZYK K4/RU4W K4AAP K4AB K4ADB K4ADR K4ADY K4AEN K4AFE K4AGL K4AJA K4AJA/VP9 K4AKK K4AKY K4AL K4ALE K4AMC K4AOQ K4AR K4AVX K4AW K4AWM K4AX K4BAD K4BAI K4BBH K4BBH/AE K4BC K4BCH K4BFT K4BGV K4BLP K4BNC K4BSK K4BT K4BTA K4BU K4BWP K4BX K4BYN K4CAE K4CAQ K4CEB K4CG K4CGA K4CGY K4CMC K4CMS K4COX K4CPM K4CQ K4CUE K4CV K4CWW K4CYP K4DCP K4DCS K4DES K4DET K4DG K4DGJ K4DJG K4DME K4DPF K4DS K4DTR K4DXV K4DXX K4DY K4DZR K4EA K4EC K4EDI K4EES K4EET K4EFJ K4EG K4EGA K4EHI K4EI K4EJ K4EJQ K4EKD K4ELI K4EOR K4EPC K4EQ K4ESE K4EU K4EWG K4FAN K4FB K4FBI K4FC K4FCG K4FF K4FHI K4FJ K4FJU K4FJW K4FL K4FN K4FOY K4FS K4FT K4FTO K4FTP K4FTU K4FU K4FX K4FYM K4GAR K4GDF K4GHS K4GJF K4GK K4GM K4GMH K4GOP K4GSO K4GTF K4GTR K4GUF K4GWK K4GYD K4HA K4HAL K4HC K4HDW K4HH K4HMB K4HOG K4HPP K4HQK K4HR K4HRK K4HTA K4HTO K4HUD K4HWS K4HX K4HY K4HYJ K4HZF K4IA K4IDD K4IDT K4IE K4IEE K4IG K4IHY K4II K4IIE K4IIY K4IO K4IQJ K4ISV K4ITV K4IU K4IZN K4JAF K4JC K4JDF K4JDP K4JHR K4JJ K4JJW K4JKB K4JKL K4JLD K4JNT K4JP K4JPD K4JSK K4JSS K4JTN K4JTT K4JUO K4JVK K4JWF K4JZQ K4KAY K4KDX K4KE K4KEW K4KG K4KG/VOL K4KGG K4KGM K4KIU K4KJQ K4KKC K4KKL K4KLB K4KNN K4KNO K4KO K4KRW K4KSR K4KSV K4KUS K4KWB K4KZ K4KZF K4KZZ K4LAC K4LAW K4LD K4LDC K4LDI K4LE K4LEJ K4LFJ K4LG K4LJE K4LKL K4LPQ K4LQ K4LRA K4LSK K4LXX K4LY K4MCG K4MF K4MGE K4MI K4MIA K4MIG K4MIL K4MJA K4ML K4MM K4MMW K4MN K4MOG K4MPE K4MQM K4MSR K4MTS K4MUS K4MV K4MVM K4MWK K4MWM K4MWW K4MX K4MY K4MZE K4MZU K4NAB K4NAU K4NAX K4NC K4NGR K4NM K4NMR K4NN K4NO K4NPC K4NRA K4NRB K4NTO K4NV K4NWX K4NYX K4OAQ K4OCY K4OJ K4OJ/CIT K4ONC K4OO K4OP K4OQ K4OR K4ORD K4OSO K4OV K4OW K4OWR K4OY K4OZ K4PAR K4PDM K4PI K4PIM K4PKM K4POP K4PP K4PPK K4PPX K4PV K4PY K4PZC K4PZZ K4QD K4QE K4QET K4QFM K4QPL K4QR K4QS K4QXX K4QY K4QZB K4RC K4RCA K4RCG K4RCW K4RDU K4REB K4RES K4RG K4RIP K4RKY K4RLC K4RM K4RO K4ROZ K4RST K4RT K4RTS K4RU K4RUM K4RUM/IDR K4RZR K4SBZ K4SFC K4SFP K4SGR K4SHA K4SHW K4SIR K4SN K4SO K4SOG K4SPE K4SQC K4SQK K4SQL K4SR K4SRB K4SRD K4SV K4SWE K4SWJ K4SX K4SXT K4TCG K4TCT K4TG K4THL K4TJA K4TJF K4TK K4TKT K4TLH K4TMC K4TN K4TNN K4TO K4TR K4TRT K4TS K4TXJ K4TXL K4TXX K4TZ K4TZZ K4UB K4UB/7 K4UEE K4UK K4UN K4UU K4UY K4VBM K4VD K4VHL K4VIG K4VOZ K4VQ K4VRC K4VRT K4VX K4WBG K4WCF K4WCL K4WDY K4WES K4WFO K4WG K4WHM K4WI K4WIP K4WK K4WLS K4WMS K4WOW K4WQ K4WRX K4WS K4WTL K4WW K4WY K4WZV K4XB K4XD K4XDX K4XI K4XL K4XP K4XR K4XU K4XY K4YCR K4YDE K4YDN K4YEH K4YFH K4YFR K4YJ K4YL K4YT K4YTZ K4YYL K4YYM K4ZDH K4ZDM K4ZGB K4ZHM K4ZIN K4ZM K4ZMV K4ZMW K4ZNC K4ZO K4ZRJ K4ZW K4ZZ K5AAD K5ABB K5ACL K5AEB K5AF K5ALU K5AM K5AND K5APL K5ATW K5AUP K5AV K5AVY K5AX K5AXZ K5BAT K5BCN K5BEZ K5BG K5BGL K5BHS K5BIU K5BJM K5BZH K5CAO K5CD K5CGH K5CGR K5CI K5CKS K5CM K5COW K5CRJ K5CS K5DA K5DB K5DC K5DCX K5DD K5DDE K5DEU K5DHY K5DKW K5DMC K5DOX K5DR K5DSM K5DU K5EDM K5EEE K5EK K5ELF K5EM K5EMU K5EOK K5EPD K5EWS K5EYH K5FD K5FDH K5FG K5FNQ K5FO K5FOC K5FP K5FUV K5FVO K5FZ K5GA K5GAT K5GDX K5GKC K5GM K5GN K5GNR K5GQ K5GS K5GZR K5HAB K5HDU K5HEM K5HGX K5HK K5HML K5HTE K5HX K5IB K5IC K5ICW K5IJ K5IMC K5IS K5ITO K5IX K5IZO K5JAZ K5JC K5JDB K5JEF K5JPB K5JRW K5JTH K5JX K5JYD K5KB K5KBG K5KC K5KDG K5KG K5KJ K5KKM K5KLA K5KMB K5KND K5KOS K5KPE K5KQ K5KRM K5KT K5KTK K5KU K5KUA K5KUA/5 K5KV K5KVN K5LAD K5LC K5LG K5LGP K5LGX K5LH K5LJ K5LLA K5LN K5LRK K5LRW K5LSU K5LSZ K5LVL K5LXP K5LY K5LZ K5MAF K5MBA K5ME K5MGB K5MGO K5MH K5ML K5MM K5MMH K5MO K5MSI K5MUG K5MV K5MVP K5MW K5MWP K5MWR K5MXG K5NA K5NB K5ND K5NE K5NMT K5NOF K5NOW K5NTT K5NV K5NZ K5OA K5OH K5OLV K5OMC K5OO K5OY K5PDC K5PE K5PI K5PK K5PN K5PO K5POU K5PQ K5PS K5PSN K5PXP K5QB K5QE K5QEA K5QR K5QY K5RAR K5RBI K5RC K5RHZ K5RM K5RPD K5RQ K5RT K5RWD K5RWK K5RX K5RZA K5SAA K5SBR K5SDB K5SES K5SEU K5SGE K5SL K5SLD K5SM K5SNA K5SS K5SVV K5TA K5TBA K5TC K5TCD K5TCJ K5TCP K5TDA K5TDF K5TDW K5TED K5TER K5TF K5TIA K5TLJ K5TMN K5TMT K5TO K5TOT K5TQ K5TR K5TRI K5TT K5TU K5TWH K5TXB K5TXE K5TXM K5TYR K5UA K5UR K5UTM K5UV K5UZ K5VI K5VIP K5VJV K5VJZ K5VOP K5VP K5VPQ K5VR K5VSD K5VV K5VWW K5VZD K5WA K5WAF K5WBM K5WDW K5WE K5WK K5WL K5WNH K5WO K5WP K5WPH K5WPN K5WQG K5WSW K5WW K5WX K5WXY K5WZS K5XH K5XI K5XK K5XQ K5XS K5XU K5YAC K5YDR K5YE K5YM K5YU K5YVY K5YY K5YZW K5ZB K5ZD K5ZE K5ZG K5ZM K5ZMM K5ZMR K5ZO K5ZQ K5ZRA K5ZRO K5ZX K5ZXJ K6AA K6AAI K6AAM K6AAN K6ACV K6AER K6AF K6AFW K6AJA K6AKW K6ALF K6AM K6AO K6AOQ K6AQL K6AR K6AVP K6AW K6BBQ K6BEW K6BF K6BFL K6BHH K6BIG K6BIR K6BLY K6BOS K6BSR K6BUM K6BV K6BY K6BZZ K6CEL K6CES K6CN K6CPR K6CQP K6CSH K6CSL K6CTA K6CTW K6CZH K6DBS K6DBX K6DDJ K6DDS K6DF K6DGQ K6DGW K6DGW/7 K6DJ K6DLB K6DMZ K6DSA K6DSB K6DTT K6DTT/1 K6DTT/2 K6DTT/4 K6DU K6DWI K6EE K6EEE K6EGF K6EI K6EID K6EIE K6EKV K6EL K6ELE K6EM K6ERF K6ERI K6ERT K6EU K6EVR K6EZ K6FA K6FEU K6FG K6FVC K6FX K6GCN K6GFJ K6GGO K6GHA K6GPB K6GRD K6HF K6HGF K6HL K6HR K6HRT K6HRU K6HS K6HUB K6ICS K6IF K6III K6IJ K6IR K6IT K6JAD K6JAJ K6JAT K6JBH K6JDC K6JF K6JJR K6JL K6JMQ K6JO K6JQ K6JS K6JTA K6JX K6KAL K6KDB K6KHB K6KII K6KKM K6KM K6KQV K6KR K6KS K6KW K6KWI K6KY K6LA K6LDQ K6LG K6LIE K6LIZ K6LJ K6LL K6LN K6LPM K6LPO K6LR K6LRN K6LSJ K6LZ K6MBD K6MCS K6ME K6MI K6MKF K6MM K6MMM K6MR K6MTU K6MUG K6MWK K6MXA K6MYC K6NA K6NBA K6ND K6NGN K6NLC K6NML K6NO K6NR K6NR/3 K6NV K6NYK K6ODS K6OK K6OO K6OPD K6ORJ K6OWS K6OY K6PA K6PAD K6PB K6PBF K6PBQ K6PGH K6PJ K6PKT K6PLR K6PO K6PSR K6PV K6QAZ K6QCB K6QK K6QU K6RAH K6RB K6RBS K6RC K6RCW K6RDW K6RIM K6RKY K6RLA K6RLQ K6RM K6RNK K6RO K6RP K6RR K6RUV K6RV K6RWM K6SBA K6SEM K6SIS K6SJT K6SK K6SON K6SQL K6SRZ K6SSS K6SSX K6ST K6SZQ K6TAR K6TB K6TD K6TET K6TJ K6TOP K6TQ K6TU K6TUJ K6TUO K6TVT K6TZ K6UF K6UFO K6UIP K6UJ K6UKK K6UM K6UN K6UNR K6USN K6VDO K6VFR K6VGP K6VHF K6VMV K6VO K6VOX K6VV K6VVA K6VWL K6VXI K6WDE K6WDE/7 K6WFV K6WIS K6WM K6WSC K6WSC/7 K6WV K6WWL K6XC K6XG K6XM K6XN K6XT K6XV K6XX K6YA K6YK K6YP K6YR K6YRA K6ZB K6ZD K6ZH K6ZI K6ZMF K6ZP K6ZTW K6ZWS K6ZY K6ZZ K6ZZD K7AAO K7ABC K7ABV K7ACT K7ACZ K7AEZ K7AFA K7AHF K7AJG K7AMB K7ANE K7AR K7ARJ K7ART K7AWB K7AYW K7AZT K7BA K7BAB K7BDB K7BFI K7BG K7BNY K7BOA K7BTW K7BUY K7BV K7BVT K7BWC K7BX/VP9 K7CA K7CAH K7CAR K7CCC K7CCH K7CF K7CMP K7CMT K7CS K7CST K7CW K7DAA K7DAV K7DBM K7DBN K7DD K7DDM/P K7DF K7DIP K7DJL K7DLX K7DPS K7DQH K7DR K7DSE K7DSG K7DWI K7DXX K7EA K7EAZ K7EFS K7EG K7EKD K7ENA K7EPH K7ER K7FA K7FB K7FD K7FRS K7FU K7FX K7FYI K7GA K7GGG K7GK K7GM K7GMX K7GQ K7GS K7GSB K7GT K7GYB K7HBN K7HC K7HD K7HI K7HIL K7HJE K7HKR K7HMB K7HP K7HPN K7HPT K7HRT K7HV K7IA K7ICE K7IDX K7IDX/7 K7IE K7II K7IM K7INA K7INA/1 K7ING K7IOC K7IR K7IU K7JA K7JA/6 K7JAN K7JE K7JEO K7JF K7JG K7JH K7JKM K7JKZ K7JNA K7JNX K7JOE K7JPF K7JPX K7JQ K7JR K7JRP K7JSG K7JW K7KAR K7KB K7KC K7KHC K7KL K7KMR K7KRZ K7KV K7KVH K7KXO K7LDB K7LED K7LES K7LFY K7LLC K7LR K7LSX K7LTV K7LVJ K7MFM K7MIX K7MK K7MKA K7MKL K7MKL/0 K7MM K7MOA K7MOE K7MOK K7MQV K7MS K7MSO K7MTD K7MWK K7MY K7MZ K7MZM K7NCK K7NG K7NJ K7NLF K7NN K7NNV K7NWR K7NWS K7ODX K7OED K7OJL K7OM K7OM/4 K7ONP K7ONY K7OOS K7OP K7OPP K7OVG K7OVW K7PAC K7PCB K7PDW K7PEO K7PI K7PIA K7PJT K7PPY K7PVT K7PVV K7PWL K7QA K7QBO K7QDX K7QXG K7RB K7RB/1 K7RBT K7RC K7RDL K7RE K7RF K7RFW K7RI K7RJ K7RL K7RLD K7RLN K7RLW K7RQN K7RR K7RU K7RVX K7SAI K7SCX K7SEL K7SEN K7SI K7SID K7SML K7SP K7SS K7STO K7STU K7SV K7SW K7SWS K7TAR K7TCM K7TD K7TLD K7TM K7TOP K7TQ K7TRB K7TRF K7TTF K7TTU K7TYE K7UA K7UAZ K7UC K7UI K7UK K7ULS K7UM K7UOT K7UPJ K7UPP K7UT K7UVA K7VAP K7VAY K7VIC K7VIT K7VIZ K7VNE K7VOA K7VU K7VZ K7WA K7WDA K7WE K7WK K7WLX K7WP K7WWR K7WXK K7XB K7XC K7XE K7XFM K7XH K7XV K7YB K7YCI K7YDL K7YH K7YIC K7YK K7YMA K7YMG K7YUR K7ZD K7ZG K7ZI K7ZKM K7ZOV K7ZOX K7ZS K7ZUM K7ZV K7ZX K7ZYV K8AAX K8AC K8AC/4 K8ACM K8AEF K8AG K8AH K8AI K8AJA K8AJJ K8AJS K8AJX K8ALH K8ALM K8AO K8ARY K8ATG K8AXX K8AZ K8AZT K8BAT K8BF K8BHS K8BKM K8BL K8BTU K8BZ K8CC K8CGS K8CI K8CJM K8CMO K8CMR K8CN K8CR K8CU K8CVM K8CX K8CXM K8CY K8DAA K8DAC K8DDT K8DE K8DET K8DF K8DGW K8DJC K8DJR K8DP K8DSS K8DTW K8DV K8DZC K8EAW K8ED K8EEE K8EEN K8EET K8EG K8EJU K8EK K8EMR K8EO K8ER K8ERS K8ES K8ESQ K8EST K8ET K8EWM K8FAM K8FC K8FF K8FH K8FL K8FU K8GG K8GI K8GIB K8GL K8GLB K8GM K8GQ K8GT K8GU K8GVK K8GVZ K8GW K8HB K8HC K8HMS K8HSY K8IA K8IFK K8IJ K8IKW K8IR K8IRB K8IS K8IV K8JA K8JEH K8JH K8JHD K8JI K8JLW K8JPM K8JQ K8JT K8JYG K8KDD K8KEM K8KGX K8KI K8KR K8KSM K8KT K8KWT K8LBQ K8LBT K8LEE K8LEF K8LES K8LF K8LGY K8LJ K8LN K8LS K8LSB K8LX K8LY K8MAJ K8MCN K8MEG K8MFO K8MH K8MJH K8MJZ K8MM K8MOT K8MP K8MQP K8MR K8MRD K8MRT K8MSH K8MU K8MW K8MWO K8NAP K8ND K8NDM/0 K8NS K8NU K8NVR K8NWD K8NY K8NYG K8NYM K8NYY K8NZ K8OD K8OM K8OOK K8OSF K8OZ K8PAO K8PGJ K8PI K8PJK K8PK K8PO K8PP K8PVD K8PX K8QH K8QKY K8QR K8QS K8QWY K8RCT K8RD K8RDG K8RDJ K8RGB K8RGI K8RGI/4 K8RJW K8RO K8ROK K8ROX K8RQX K8RR K8RU K8RWL K8RYU K8SAS K8SB K8SCH K8SD K8SDX K8SEM K8SIA K8SJP K8SQB K8ST K8SVT K8SYH K8TAH K8TAO K8TCS K8TE K8TED K8TJM K8TL K8TLC K8TR K8TRB K8TS K8TV K8TW K8UE K8UGG K8ULT K8UNS K8UO K8UPR K8UR K8UT K8UYC K8VA K8VB K8VBL K8VEB K8VGL K8VOX K8VT K8VUS K8WAR K8WFL K8WHA K8WSN K8WU K8WV K8WWN K8XF K8XJ K8XS K8XXX K8YC K8YE K8YFM K8YLK K8YR K8YU K8YYY K8ZO K8ZR K8ZT K8ZW K8ZZU K9AAD K9ABL K9ABR K9ACM K9ALP K9AMB K9AMP K9AN K9ANN K9ARZ K9ASE K9ATX K9AVE K9AWM K9BAR K9BAY K9BBQ K9BEC K9BGL K9BIZ K9BO K9BTQ K9BY K9CC K9CDR K9CG K9CHP K9CJ K9CJM K9COT K9CPO K9CQ K9CS K9CT K9CU K9CW K9CY K9DA K9DD K9DEB K9DJ K9DJT K9DN K9DP K9DR K9DR/7 K9DU K9DUR K9DX K9DX/7 K9DXA K9DY K9EA K9EDD K9EE K9EEH K9EGS K9EL K9ELF K9EMF K9ES K9ESV K9EXY K9EZ K9FA K9FD K9FF K9FI K9FN K9FO K9FRO K9FW K9GA K9GB K9GDF K9GL K9GLS K9GPV K9GRP K9GS K9GVM K9GWH K9GWS K9GX K9GY K9HA K9HCW K9HMX K9HWL K9HXO K9IA K9IBM K9ID K9IDQ K9IDX K9IG K9IJ K9IL K9ILS K9IMM K9ING K9IQP K9IR K9IU K9IUQ K9IY K9IZ K9JAI K9JDP K9JDV K9JF K9JM K9JN K9JT K9JWI K9JWP K9KA K9KDE K9KDS K9KE K9KEU K9KGM K9KK K9KM K9KMD K9KQX K9KSG K9KU K9LA K9LAE K9LC K9LGU K9LJN K9LOF K9LOF/5 K9LZJ K9LZR K9MA K9MBQ K9MCE K9MCK K9MDK K9MK K9MM K9MMS K9MOT K9MU K9MWM K9NB K9NN K9NO K9NR K9NU K9NW K9NYO K9NZ K9OB K9OM K9OM/4 K9ONA K9OO K9OQ K9OR K9OT K9OW K9OZ K9PG K9PMV K9PPY K9PW K9PY K9QCK K9QH K9QJ K9QJS K9QLL K9QM K9QQ K9QVB K9QVB/9 K9RA K9RAF K9RBH K9RJ K9RJH K9RJO K9RL K9RM K9RN K9RQ K9RR K9RS K9RU K9RX K9RZ K9SE K9SEX K9SG K9SH K9SM K9SO K9SS K9SW K9THB K9TJ K9TM K9TMS K9TOM K9TRY K9TVG K9TWW K9TY K9UC K9UCX K9UIY K9UK K9UQN K9UWA K9VD K9VER K9VFU K9VIS K9VIT K9VM K9VS K9VSW K9VT K9WA K9WD K9WFM K9WIS K9WM K9WOC K9WPV K9WWT K9WWW K9WX K9WZB K9XD K9XN K9XW K9YC K9YII K9YX K9ZA K9ZIB K9ZM K9ZMI K9ZMU K9ZO K9ZU K9ZVZ KA0AIG KA0AL KA0BOJ KA0BWH KA0CSW KA0HZP KA0KVW KA0LDG KA0NES KA0NRZ KA0PQW KA0REN KA0RID KA0RVL KA0RYT KA0X KA0ZWV KA1AF KA1AL KA1API KA1C KA1DBE KA1EFD KA1EKR KA1ERL KA1F KA1FSX KA1GIJ KA1IOR KA1IS KA1J KA1JBE KA1JY KA1LOR KA1O KA1PGI KA1QBO KA1QYP KA1R KA1SAW KA1SNP KA1TWX KA1VF KA1VGM KA1VMG KA1W KA1WPM KA1YQC KA1ZD KA1ZT KA2ABA KA2AEY KA2BKG KA2C KA2D KA2DDX KA2ENE KA2ETG KA2F KA2FHN KA2FIR KA2GQQ KA2HTV KA2HZP KA2ISM KA2K KA2KGP KA2KON KA2LIM KA2MGE KA2MLH KA2NFG KA2NVF KA2OFM KA2OSV KA2OUS KA2PBT KA2QOD KA2QWC KA2WIK KA2YDW KA2YRA KA2ZOH KA3BMU KA3CFX KA3CRC KA3CZY KA3D KA3DCO KA3DRR KA3DRR/6 KA3E KA3EEO KA3EHL KA3EQU KA3FQS KA3FZN KA3GIK KA3HPM KA3IHR KA3JNN KA3JVW KA3KSP KA3KST KA3LKM KA3MLS KA3MTT KA3MZR KA3NAM KA3NCR KA3PCX KA3PMW KA3QLF KA3RWP KA3S KA3SVK KA3UJE KA3UOL KA3WZY KA3YGL KA3YJM KA3YJU KA3ZLS KA4AQM KA4BVG KA4CDN KA4FDM KA4FVE KA4GAV KA4GFY KA4J KA4JAH KA4JON KA4JRY KA4NXP KA4OAA KA4OTB KA4PNE KA4R KA4RRU KA4SQN KA4TOM KA4UPI KA4W KA4YTX KA4ZDR KA5ABS KA5CJJ KA5COW KA5DJS KA5DWI KA5GEX KA5M KA5MWB KA5NDH KA5PTG KA5QMA KA5S KA5TCF KA5UVN KA5VZG KA5W KA5YED KA5ZDE KA5ZHG KA6BIL KA6BIM KA6JLT KA6KKE KA6MIB KA6RLQ KA6U KA6U/VY2 KA6USA KA6W KA6WKE KA6Y KA7A KA7ADF KA7BMK KA7HBH KA7IGN KA7KSP KA7LJQ KA7MDM KA7NPQ KA7PNH KA7RON KA7RRA KA7T KA7X KA8BSA KA8CNI KA8DKT KA8EZT KA8G KA8HDE KA8HQL KA8IIM KA8JBK KA8JHD KA8JZR KA8LCW KA8MMI KA8NJW KA8O KA8Q KA8SBI KA8SMA KA8SYV KA8WQL KA8YGL KA8YNW KA8ZEP KA9A KA9BHD KA9CAR KA9CFD KA9EKJ KA9FON KA9FOX KA9FQG KA9GDW KA9GLA KA9IVY KA9J KA9JCP KA9KLR KA9KQH KA9LMK KA9NNR KA9NOK KA9O KA9OZP KA9P KA9TBU KA9VLC KA9VVQ KA9YKB KA9Z KA9ZAI KA9ZPL KA9ZZT KB0ARZ KB0BED KB0BQQ KB0BRO KB0CH KB0DD KB0DUR KB0EO KB0FD KB0FJU KB0GI KB0GUS KB0HAZ KB0HP KB0HVB KB0HXL KB0IG KB0JIT KB0JSH KB0KFH KB0LF KB0MDQ KB0MK KB0MPV KB0NES KB0OGI KB0PAT KB0PPQ KB0QEF KB0R KB0RIF KB0SNI KB0UPC KB0USA KB0VHA KB0VXN KB0WZI KB0XY KB0YH KB0ZJD KB1AWM KB1BCT KB1BSR KB1CL KB1DK KB1DMX KB1DN KB1EFS KB1EFS/2 KB1EHE KB1FRK KB1FY KB1GKN KB1HXO KB1HY KB1IKC KB1IKD KB1IRB KB1JDY KB1JL KB1JZR KB1KKW KB1KUK KB1LRL KB1NA KB1NYT KB1ODO KB1OIQ KB1OQH KB1OY KB1PQB KB1QU KB1REQ KB1SF KB1TCD KB1TUR KB1VP KB1VUN KB1VZY KB1W KB1WEA KB1WSR KB1WXM KB1WY KB1YAP KB1YFH KB1YO KB1YSY KB1YXN KB1ZHU KB1ZQ KB2AMY KB2AS KB2CKN KB2DMD KB2E KB2ELA KB2FCV KB2FJD KB2FMH KB2HSH KB2IAU KB2IPH KB2KOL KB2LOI KB2MMI KB2MMU KB2MN KB2MS KB2NB KB2OYI KB2QCJ KB2RHN KB2RSK KB2S KB2SXT KB2SYD KB2URI KB2UUL KB2ZPB KB2ZVP KB3AAY KB3AWQ KB3AY KB3BSA KB3BYW KB3CAB KB3CMT KB3CS KB3CWQ KB3DC KB3HJK KB3IBT KB3IHX KB3ILS KB3IPZ KB3ITA KB3IWV KB3IZA KB3LIX KB3LR KB3MHB KB3MI KB3ML KB3MP KB3NXT KB3OK KB3OMJ KB3OQI KB3P KB3PCA KB3RC KB3RCT KB3RM KB3SPH KB3SQX KB3UVG KB3VHC KB3VQC KB3VQU KB3WAV KB3WFV KB3Z KB3ZZJ KB4BNQ KB4BYH KB4CAU KB4DE KB4DPY KB4EE KB4EUZ KB4FLC KB4FOS KB4GEY KB4GNP KB4GYT KB4IRR KB4ISV KB4KBS KB4LA KB4LHP KB4MG KB4MRX KB4OI KB4OLM KB4PIX KB4QXI KB4QZH KB4S KB4UPI KB4XO KB4YPK KB5AAB KB5AAM KB5AEB KB5BEK KB5CUS KB5DRJ KB5EDR KB5FLA KB5GA KB5GH KB5GLV KB5IMK KB5IRH KB5IRL KB5KYX KB5MRT KB5OIL KB5PGY KB5QR KB5REX KB5RF KB5RHE KB5SFL KB5TX KB5VJY KB5VLU KB5VP KB5WWW KB5YN KB6A KB6C KB6DRB KB6E KB6EGA KB6HI KB6J KB6JFL KB6LFM KB6LZW KB6MW KB6NU KB6NVA KB6OJE KB6TAZ KB6UNC KB6YYH KB7AA KB7ABJ KB7AK KB7AZ KB7CW KB7DXN KB7EEG KB7FSC KB7GFL KB7HDX KB7HH KB7JJG KB7KLT KB7KYK KB7KZ KB7LMT KB7LRZ KB7MGC KB7MM KB7N KB7NAS KB7OGE KB7PKC KB7Q KB7QFE KB7QPS KB7RJ KB7RUQ KB7SAT KB7XL KB8ABJ KB8BIP KB8CR KB8DEX KB8DNQ KB8ECG KB8GAE KB8GDF KB8HOC KB8KB KB8KDR KB8KMH KB8MRC KB8NNU KB8NVJ KB8O KB8OEJ KB8OTK KB8PGW KB8PXM KB8RC KB8RJ KB8RTB KB8RY KB8SB KB8SRQ KB8TL KB8TPT KB8TYJ KB8U KB8UHN KB8UMD KB8UUZ KB8V KB8VAO KB8VMO KB8VND KB8W KB8WPZ KB8WV KB8YBG KB8ZR KB8ZUN KB8ZWT KB8ZYE KB9AFW KB9AVX KB9AX KB9BVL KB9DAK KB9DED KB9DFE KB9DKR KB9DVC KB9ENS KB9FKO KB9GKG KB9GN KB9IE KB9ILT KB9JHU KB9JJF KB9KCT KB9KHM KB9KLC KB9LBP KB9LQA KB9MEJ KB9NHZ KB9NKM KB9O KB9ORH KB9OWD KB9OZI KB9RDS KB9REV KB9RKK KB9RPG KB9RPS KB9RUG KB9S KB9SJD KB9SWI KB9TVR KB9UMT KB9UWR KB9WZH KB9ZJ KC0BRA KC0CC KC0CCR KC0COU KC0DAS KC0DDZ KC0DX KC0DZP KC0FEZ KC0GL KC0GU KC0INP KC0JFY KC0JGE KC0JQO KC0JRW KC0KHA KC0KMO KC0LDH KC0LFQ KC0M KC0MJY KC0MO KC0NFB KC0OIO KC0ONP KC0OW KC0PLZ KC0QIK KC0RET KC0RF KC0URL KC0UUT KC0UXC KC0V KC0VDY KC0VKN KC0VRV KC0VTJ KC0W KC0WCF KC0WCM KC0WTT KC0ZNI KC0ZVN KC1ACL KC1AFA KC1AMZ KC1AQQ KC1ARO KC1BB KC1BB/7 KC1BD KC1BJG KC1BOH KC1CBQ KC1CIL KC1CJD KC1CRS KC1CUE KC1CWW KC1DLF KC1DPM KC1DQR KC1DVT KC1DWP KC1EDE KC1ELF KC1ERO KC1FD KC1FOZ KC1FTJ KC1GGP KC1GTK KC1GWX KC1HMN KC1HTB KC1HXX KC1I KC1IH KC1IIS KC1ILT KC1ILX KC1ISK KC1JSY KC1KUG KC1LEC KC1LEP KC1LKO KC1MBX KC1ME KC1NBD KC1NS KC1NY KC1SA KC1SQ KC1SS KC1VX KC1XX KC2AZM KC2BBI KC2BPP KC2DPF KC2DZT KC2EGL KC2EKE KC2FKM KC2FZG KC2G KC2GFA KC2GOW KC2HRO KC2ICQ KC2JMS KC2JRQ KC2KGV KC2KJO KC2KZJ KC2LM KC2LRC KC2LSD KC2LST KC2LXD KC2MBV KC2NVG KC2OSR KC2P KC2PDO KC2PJH KC2QJB KC2QNK KC2QYM KC2RG KC2RXS KC2SGV KC2SST KC2SZ KC2TN KC2TVJ KC2VAE KC2VIC KC2VMS KC2VPE KC2VRY KC2VVZ KC2WLR KC2WUF KC2WVX KC2WYU KC2YEA KC2ZQK KC3ASN KC3AZT KC3BDF KC3BPM KC3BSA KC3BVL KC3BXN KC3D KC3DA KC3DAD KC3DGM KC3DRU KC3DRZ KC3EF KC3EPA KC3ERD KC3ESH KC3EWJ KC3FQF KC3GJW KC3GUU KC3GYN KC3HJP KC3HRV KC3HXF KC3IBH KC3INR KC3IVK KC3JAS KC3JDJ KC3JNW KC3JPP KC3JVE KC3KBE KC3KFW KC3KJQ KC3KOP KC3KSC KC3KWA KC3KYF KC3KZ KC3LEE KC3LOJ KC3LZT KC3MAL KC3MIO KC3MLC KC3MRT KC3MSE KC3NIE KC3NQB KC3ODW KC3OOL KC3OSK KC3RN KC3SWL KC3TOM KC3WX KC3X KC3Y KC3YG KC4CL KC4D KC4DUA KC4EOG KC4EZN KC4FE KC4FLB KC4FLT KC4FWS KC4G KC4GL KC4GUL KC4HW KC4IM KC4JD KC4JNW KC4JOE KC4KEZ KC4LNX KC4LZN KC4M KC4NAP KC4NX KC4PVW KC4PX KC4QX KC4RAC KC4SAW KC4SOT KC4TEO KC4TNQ KC4TVN KC4UPR KC4VBE KC4VLO KC4WCY KC4WPS KC4WQ KC4X KC4YDD KC4YLV KC4ZA KC4ZPB KC4ZWA KC5BA KC5CMX KC5DCT KC5DI KC5F KC5HWB KC5LK KC5LL KC5LT KC5NGX KC5OMC KC5PL KC5QIH KC5R KC5RFU KC5RGQ KC5RPF KC5RUO KC5SB KC5SDY KC5SLQ KC5TT KC5TTY KC5VZP KC5WX KC5ZFZ KC6AWX KC6JQU KC6KGL KC6MIE KC6R KC6RZW KC6SWL KC6WOT KC6X KC6ZBE KC6ZWT KC7AR KC7BEY KC7CM KC7CS KC7DM KC7DXT KC7EFP KC7ES KC7FCW KC7HVM KC7IEC KC7IGT KC7ITP KC7JN KC7KFF KC7KNY KC7PFR KC7QR KC7QY KC7REJ KC7RH KC7SDA KC7TAK KC7TBR KC7TCH KC7TCO KC7V KC7XE KC7YE KC7YE/7 KC8AMH KC8CB KC8CC KC8EVS KC8FZH KC8GCR KC8GTX KC8HQS KC8J KC8JNL KC8MUE KC8PKY KC8QDQ KC8R KC8RMR KC8RYO KC8UR KC8VC KC8VWM KC8WH KC8WSM KC8YDS KC8YEJ KC8YRK KC8YTV KC8YVP KC8ZMN KC9AH KC9ARP KC9BG KC9BXX KC9BZL KC9CLO KC9CND KC9CRM KC9CRV KC9CSQ KC9DDF KC9DFK KC9DK KC9DKC KC9ECI KC9EE KC9EI KC9EOQ KC9FFV KC9FNM KC9GBX KC9GFR KC9HFV KC9HHT KC9HYL KC9IL KC9IPL KC9JBU KC9JML KC9JYF KC9K KC9KBB KC9KLA KC9KRF KC9LA KC9LBO KC9LFD KC9LVT KC9MRW KC9MZ KC9NBV KC9NKI KC9NUW KC9NVN KC9NZR KC9OYE KC9PCP KC9PIF KC9PKF KC9PL KC9PWE KC9PYV KC9QFH KC9QOJ KC9QQ KC9RF KC9RP KC9SFQ KC9SQW KC9TQR KC9TQU KC9TZO KC9UDL KC9UJS KC9UL KC9UMS KC9UNL KC9UPE KC9UQR KC9UR KC9VFI KC9VYX KC9W KC9WAV KC9WC KC9WIB KC9WOM KC9WWM KC9WZ KC9YAV KC9YDV KC9YL KC9YRA KC9YS KC9YTT KC9ZAS KC9ZGY KC9ZZU KD0B KD0CAV KD0CUD KD0CVZ KD0DK KD0EE KD0EZS KD0GN KD0GY KD0IRW KD0JHW KD0JLE KD0JUX KD0LHI KD0MEI KD0MKE KD0NEO KD0NMZ KD0OEC KD0OIX KD0OYC KD0PYF KD0PZ KD0Q KD0QG KD0QJY KD0RIY KD0RSX KD0S KD0SBN KD0UN KD0UNI KD0UXO KD0UYF KD0VHD KD0VNQ KD0WAN KD0WF KD0WKB KD0WUQ KD0WXT KD0XD KD0YSW KD0YXI KD0ZDU KD0ZGW KD0ZV KD0ZXI KD0ZYA KD1BA KD1GA KD1J KD1O KD1TF KD1UU KD1YV KD2A KD2AGW KD2BDA KD2BGM KD2BS KD2BXD KD2CFG KD2CTZ KD2DC KD2DKB KD2DLL KD2DNB KD2DQX KD2DVW KD2DWX KD2DXJ KD2E KD2EFR KD2EIM KD2EJ KD2ELY KD2EPM KD2ETP KD2FIQ KD2FSH KD2FSI KD2FWG KD2GIK KD2GJJ KD2GUD KD2GXL KD2HRD KD2HZI KD2IBP KD2INN KD2IQN KD2ITW KD2IWW KD2IZQ KD2JC KD2JF KD2JOE KD2JQG KD2JQK KD2KEH KD2KOG KD2KOS KD2KSG KD2KUB KD2KW KD2KYN KD2LGX KD2LUK KD2MBF KD2MEN KD2MKJ KD2MLV KD2MLY KD2MSA KD2NCS KD2NE KD2NFE KD2NOM KD2NXM KD2OAM KD2OGR KD2OHM KD2OUQ KD2PII KD2QQR KD2QWO KD2QYD KD2RD KD2RDL KD2RKA KD2RMD KD2RPX KD2RVW KD2SC KD2SEM KD2T KD2TT KD3D KD3FG KD3G KD3GC KD3HN KD3RF KD3TB KD3VN KD4AA KD4ADC KD4BWM KD4CQZ KD4CR KD4CX KD4D KD4DRJ KD4EE KD4FJ KD4FV KD4HNN KD4ISM KD4IZ KD4JO KD4JRX KD4LEM KD4MPN KD4MV KD4POJ KD4QFT KD4QMS KD4QMY KD4RE KD4RH KD4S KD4SEV KD4TRG KD4TT KD4TTP KD4ULD KD4VRY KD4VRZ KD4WKP KD4Y KD4YDD KD5AFS KD5BUC KD5C KD5CFB KD5DD KD5DLZ KD5EJG KD5EW KD5EWF KD5FBA KD5FHW KD5FOY KD5FVZ KD5HZ KD5I KD5ILA KD5J KD5JHE KD5JRY KD5JXF KD5M KD5MMM KD5ORW KD5QAQ KD5QHV KD5R KD5RR KD5RXP KD5WBW KD5YPH KD6BIS KD6BQ KD6C KD6DKC KD6GWH KD6HOF KD6IRI KD6KHK KD6L KD6ME KD6OAT KD6RMS KD6ST KD6SX KD6TR KD6UY KD6WKY KD6WW KD6X KD6ZP KD7AKE KD7DCR KD7EX KD7F KD7FQI KD7H KD7HCW KD7JB KD7JG KD7KL KD7LRK KD7MPA KD7OED KD7OR KD7P KD7PCE KD7QAS KD7QDL KD7QOO KD7RCJ KD7RF KD7RMB KD7RUS KD7SU KD7UO KD7VIK KD8AJK KD8BB KD8BBK KD8BXE KD8CGH KD8COO KD8CQC KD8DEU KD8DNS KD8DQS KD8DX KD8ECG KD8EDC KD8EDN KD8FBS KD8FO KD8FS KD8GBK KD8HAM KD8HNF KD8IK KD8IZZ KD8JAM KD8KEO KD8KVO KD8KYK KD8LDS KD8LW KD8MQ KD8MQY KD8MRL KD8MXE KD8NJ KD8NKY KD8NOM KD8NX KD8NYO KD8NYP KD8NZF KD8OBW KD8ONC KD8OOT KD8ORN KD8OSD KD8OSI KD8OSM KD8OVQ KD8PPH KD8QBV KD8QDL KD8QYE KD8RDH KD8RGJ KD8RQE KD8RSH KD8RUC KD8SNZ KD8SZZ KD8TNF KD8TNS KD8TTM KD8UBL KD8UVN KD8UWF KD8VMK KD8VMM KD8VRL KD8VRX KD8VSQ KD8VT KD8VTT KD8VUX KD8VUY KD8VYA KD8W KD8WCJ KD8WJB KD8YNG KD8YQX KD8YWF KD8ZQG KD8ZQZ KD8ZXM KD8ZYD KD9AC KD9ADB KD9AKQ KD9ARD KD9AZW KD9BBB KD9BGY KD9BPB KD9BSO KD9BVD KD9BWP KD9CLH KD9CQQ KD9CZQ KD9DBQ KD9DGS KD9DHT KD9DXF KD9DZT KD9EBS KD9EFO KD9ELU KD9EOT KD9ERS KD9EVF KD9FAP KD9FOF KD9GDY KD9GJV KD9GRI KD9GY KD9GZJ KD9HAV KD9HFW KD9HLD KD9HPN KD9HQD KD9HRB KD9INP KD9INX KD9IPO KD9IWX KD9JBY KD9JCF KD9JFH KD9JJE KD9JJR KD9JKP KD9JKU KD9JLL KD9JSY KD9JUQ KD9JWG KD9KHK KD9KHZ KD9KJX KD9KMV KD9KNJ KD9KNN KD9KUI KD9KZ KD9KZS KD9LA KD9LOM KD9LQY KD9LVR KD9MDO KD9MEU KD9MIF KD9MQV KD9MS KD9NGT KD9NHZ KD9QS KD9RG KD9VV KE0A KE0AHM KE0ANG KE0BAQ KE0BRZ KE0CRP KE0CZP KE0CZQ KE0DFA KE0EBS KE0EBW KE0EJS KE0EK KE0EKD KE0ERT KE0FDC KE0FQM KE0GXN KE0GYA KE0HKV KE0HQZ KE0HTG KE0IAA KE0IAT KE0IGK KE0IRU KE0IS KE0ITC KE0JBT KE0JMK KE0JRS KE0JWK KE0JYJ KE0JYU KE0KDX KE0KKD KE0KLY KE0KOT KE0KZ KE0L KE0LBI KE0LCW KE0LHX KE0LRD KE0MAD KE0ME KE0MHJ KE0MM KE0N KE0NLL KE0NNE KE0NRE KE0NRY KE0NWG KE0NXV KE0OC KE0OJE KE0OPG KE0OR KE0OVX KE0OZU KE0PAP KE0PCI KE0PCK KE0PX KE0QHA KE0QKF KE0QMF KE0QPG KE0ROG KE0RPU KE0RYF KE0SHD KE0SIS KE0SRL KE0SRM KE0SSM KE0STO KE0STT KE0TFY KE0TL KE0TLC KE0TQI KE0TT KE0TUI KE0TWB KE0UI KE0VRT KE0YI KE0Z KE1B KE1DX KE1F KE1GV KE1IH KE1IU KE1J KE1JF KE1LI KE1NZY KE1Q KE1R KE1S KE1VT KE2A KE2CWO KE2D KE2DN KE2DX KE2IL KE2NN KE2QI KE2R KE2SX KE2T KE2TR KE2VB KE2VB/7 KE2WY KE2YK KE3BK KE3D KE3FG KE3GK KE3I KE3JP KE3K KE3K/8 KE3KD KE3KK KE3L KE3MX KE3NP KE3QZ KE3TW KE3VN KE3VV KE3X KE3ZT KE4AAP KE4AER KE4AZZ KE4BZJ KE4D KE4EM KE4ET KE4ETY KE4GOI KE4H KE4I KE4JDH KE4JXF KE4KMG KE4KY KE4ONN KE4PLT KE4Q KE4QCM KE4QCY KE4REJ KE4RG KE4RLA KE4RUN KE4S KE4TP KE4TTS KE4TWI KE4UW KE4VA KE4WLL KE4XT KE4YD KE4YOG KE4YVD KE4YZF KE4ZIP KE4ZUN KE5AL KE5AX KE5AZ KE5BZ KE5CDE KE5DPE KE5ES KE5FNB KE5FVC KE5GL KE5HDF KE5ISO KE5JSY KE5KQU KE5LQ KE5MIS KE5MMT KE5MUJ KE5NJ KE5OG KE5Q KE5RS KE5RTI KE5RX KE5TC KE5TD KE5UGH KE5XX KE5YTA KE5YYC KE6FQC KE6GFI KE6GG KE6GLA KE6GLR KE6K KE6LL KE6MT KE6PLA KE6PY KE6QEY KE6QR KE6RGB KE6SHL KE6TE KE6TUH KE6WC KE6YLH KE6ZLY KE6ZSN KE7AH KE7AU KE7AUB KE7CF KE7DX KE7F KE7FEI KE7FIY KE7FST KE7GKI KE7HOP KE7JBK KE7LBB KE7NYS KE7PLK KE7RW KE7SW KE7UIU KE7VE KE7VN KE7W KE7XE KE7ZAC KE8AE KE8AME KE8BHP KE8BKP KE8BLN KE8BPS KE8BPZ KE8BYM KE8C KE8CCD KE8CEW KE8COQ KE8CRT KE8CTQ KE8DI KE8DMB KE8DNV KE8EAS KE8ETI KE8EZT KE8FD KE8FLU KE8FT KE8G KE8GDD KE8GII KE8GKG KE8GKO KE8GME KE8GOM KE8GX KE8HAF KE8HBV KE8HEA KE8HZZ KE8ICM KE8IDH KE8IHX KE8ILK KE8INO KE8IVY KE8JIO KE8JIT KE8JKU KE8JNH KE8JNQ KE8JNU KE8KES KE8KMX KE8KNI KE8KUF KE8KVD KE8KW KE8LNP KE8LUE KE8LVA KE8LVV KE8LXN KE8M KE8NBC KE8NN KE8RU KE8RV KE8USA KE8VC KE8Y KE9EX KE9L KE9N KE9SA KE9UA KE9UR KE9V KE9YK KF0AX KF0GV KF0IQ KF0IR KF0JB KF0M KF0N KF0SJ KF0UR KF0XO KF0XV KF1C KF1D KF1P KF1SH KF1V KF1Y KF2B KF2E KF2FK KF2GQ KF2O KF2OG KF2T KF2TI KF2TV KF2UJ KF2VX KF2Y KF2ZO KF3B KF3C KF3CP KF3DI KF3DJ KF3EB KF3F KF3FRK KF3G KF3P KF4AV KF4DUE KF4DX KF4EKA KF4EWO KF4FC KF4GDX KF4GTA KF4JEY KF4LAR KF4LHN KF4LXS KF4NMK KF4QFJ KF4RAL KF4RWA KF4THL KF4VV KF4WLS KF4WZ KF4ZGZ KF4ZS KF5ALL KF5BA KF5CRF KF5DDV KF5GTX KF5HIQ KF5INR KF5ITM KF5IZS KF5KWO KF5MU KF5NRS KF5OMH KF5PAL KF5PDF KF5PLA KF5PSE KF5RLL KF5RSA KF5RUW KF5SM KF5THB KF5TP KF5TXU KF5VDX KF5VM KF5VRD KF5WCP KF5WVJ KF5XV KF5YNN KF5YSH KF5YUB KF5ZBL KF5ZH KF5ZNQ KF5ZPL KF6CRW KF6D KF6DL KF6E KF6F KF6HI KF6I KF6JKC KF6JRE KF6JXM KF6LU KF6MIQ KF6MK KF6NCX KF6RY KF6YU KF6ZYD KF7BDI KF7CAH KF7CYG KF7DUR KF7DX KF7E KF7EB KF7F KF7GMV KF7GPO KF7HIL KF7JQV KF7LCH KF7MAX KF7MD KF7NN KF7PBM KF7PK KF7R KF7RO KF7RSP KF7RU KF7TCK KF7TTM KF7U KF7UUM KF7WMM KF7WNS KF7WRS KF7YED KF7ZN KF7ZZ KF8IY KF8J KF8MZ KF8O KF8UN KF8VS KF8YC KF8YO KF9D KF9FH KF9LI KF9R KF9U KF9UP KF9US KF9VV KG0AQ KG0DX KG0EW KG0J KG0KG KG0KP KG0SY KG0TS KG0US KG0YL KG1D KG1E KG1K KG1V KG1Z KG2C KG2CS KG2DT KG2DWS KG2E KG2EY KG2GL KG2H KG2IS KG2MD KG2MS KG2NF KG2PK KG2RA KG2RY KG2S KG2U KG3L KG3V KG3W KG4CMS KG4CNZ KG4CRJ KG4CUY KG4EHL KG4IGC KG4IKQ KG4IXS KG4JSK KG4JYB KG4KOW KG4LIK KG4LST KG4OCJ KG4OLE KG4OLG KG4Q KG4QIV KG4SRK KG4SS KG4UPO KG4USN KG4V KG4W KG4WOJ KG4Y KG4YUS KG4Z KG4ZDS KG4ZOI KG4ZXN KG5AUU KG5AUW KG5AXZ KG5BF KG5BQQ KG5BZR KG5CIJ KG5CIK KG5CJA KG5DIJ KG5DKG KG5DWS KG5EE KG5EG KG5FRR KG5GCC KG5GJT KG5GNV KG5HDI KG5HTH KG5HVO KG5IEE KG5IIS KG5IPA KG5JBC KG5JCK KG5JIM KG5KPU KG5KRZ KG5LKU KG5LRP KG5MGN KG5OHO KG5OIB KG5OSX KG5OUH KG5OVI KG5OYK KG5PBJ KG5PJG KG5PYU KG5REW KG5RJ KG5RRX KG5RUY KG5RXG KG5SD KG5SER KG5SFT KG5SJL KG5SRO KG5SVO KG5SW KG5TBT KG5TEF KG5TFQ KG5THG KG5TKF KG5TLK KG5TOD KG5TRV KG5U KG5UDY KG5UFR KG5UHY KG5UMH KG5VHT KG5VK KG5VLT KG5WAW KG5WIV KG5WJZ KG5WPE KG5WPZ KG5WR KG5WRZ KG5WVK KG5WXI KG5WZD KG5YFQ KG5YOV KG5YTY KG5ZLE KG5ZMQ KG5ZUF KG6AO KG6AY KG6BOU KG6CIH KG6DQL KG6EID KG6J KG6KGP KG6LHW KG6LS KG6MC KG6MZS KG6N KG6O KG6OKI KG6SVF KG6WIK KG7A KG7ASQ KG7BAN KG7CKO KG7CUI KG7CW KG7D KG7DAB KG7DMI KG7EZP KG7H KG7JRA KG7JWD KG7KWG KG7MRA KG7MVH KG7MZE KG7NAD KG7NV KG7OH KG7OQY KG7P KG7PDC KG7QIM KG7QXE KG7RZD KG7SXF KG7TFI KG7TQV KG7TUO KG7UAV KG7ULE KG7V KG7VCL KG7VDX KG7VIZ KG7WPM KG7YJA KG7YZK KG8CO KG8CW KG8D KG8I KG8OU KG8P KG8V KG9AP KG9D KG9DW KG9FA KG9FB KG9IL KG9IO KG9JP KG9LB KG9N KG9R KG9X KG9Y KG9Z KH1/KH7Z KH2JU KH2KY KH2L KH6AQ KH6AT KH6B KH6BB KH6CC KH6CJJ KH6CT KH6DD KH6DH KH6DHK KH6DK KH6DV KH6FHI KH6GMP KH6HI KH6HT KH6J KH6KG/5 KH6KG/W5 KH6KR KH6LC KH6M KH6MOI KH6ND KH6ND/NZ7 KH6ND/W7 KH6OO KH6PE KH6QH KH6RC KH6RS KH6TU KH6U KH6VM KH6VM/W7 KH6XL KH6XS KH6Y KH6ZM KH7A KH7B KH7HI KH7LC KH7M KH7T KH7X KH7X/W7 KH7XS KH7Y KI0AD KI0E KI0EB KI0F KI0G KI0HA KI0I KI0J KI0KN KI0R KI1G KI1P KI1U KI2N KI2P KI3F KI4ASK KI4AX KI4BIY KI4BXU KI4CUX KI4DK KI4DNO KI4DT KI4FCQ KI4FH KI4FON KI4FSZ KI4GGJ KI4HIX KI4IO KI4KGK KI4LA KI4LXH KI4MJK KI4MYL KI4MZC KI4MZS KI4NBE KI4NSP KI4OBG KI4ODO KI4P KI4PHE KI4PS KI4PW KI4RGD KI4RKM KI4RUG KI4SA KI4SP KI4SWB KI4TYK KI4TZ KI4US KI4UVE KI4UX KI4VPD KI4WCQ KI4YY KI4ZRH KI5AFY KI5AHH KI5AIE KI5AUX KI5AXG KI5BEG KI5BFQ KI5BLU KI5BMT KI5BYN KI5CHB KI5CSX KI5DAR KI5DDO KI5DOF KI5DXF KI5DYI KI5DYJ KI5EE KI5EYA KI5F KI5FJ KI5FUY KI5HPW KI5II KI5JF KI5LR KI5MM KI5O KI5OO KI5SF KI5X KI6BWO KI6DY KI6DY/0 KI6EAB KI6IT KI6KFB KI6LDM KI6M KI6MQX KI6MUH KI6NAZ KI6OY KI6PMD KI6QDH KI6QDH/7 KI6RRD KI6RRN KI6SCT KI6SMX KI6SYM KI6UJH KI6VC KI6WJ KI6YAA KI6YYT KI7AAY KI7ACZ KI7AY KI7BH KI7BJS KI7DAN KI7DG KI7DV KI7FXJ KI7ID KI7IOC KI7LDC KI7M KI7MD KI7MZH KI7N KI7O KI7OIY KI7PKL KI7PMQ KI7PPV KI7PXR KI7PYH KI7RHJ KI7RM KI7RUF KI7SJC KI7SPW KI7SRQ KI7T KI7TPX KI7TRF KI7TYH KI7UIN KI7VWP KI7WGA KI7Y KI8B KI8DU KI8EM KI8L KI8N KI8R KI9A KI9S KI9S/8 KI9T KJ0B KJ0D KJ0I KJ0P KJ1J KJ1RE KJ2D KJ2G KJ3L KJ3LR KJ3T KJ3X KJ4ADN KJ4AOM KJ4AUQ KJ4DVR KJ4EU KJ4FZ KJ4GK KJ4HZ KJ4IWZ KJ4IZW KJ4JPV KJ4KKD KJ4KPW KJ4KTG KJ4KVC KJ4LEN KJ4LPI KJ4LQX KJ4LTA KJ4M KJ4MHD KJ4MSR KJ4MZ KJ4ND KJ4NNB KJ4NQA KJ4OAP KJ4PV KJ4PZP KJ4QHL KJ4RV KJ4TFU KJ4TLC KJ4UAU KJ4UC KJ4UGO KJ4WNW KJ4YEM KJ4YKG KJ4YLR KJ4YM KJ4Z KJ4ZML KJ4ZMV KJ5CI KJ5FA KJ5MA KJ5NJ KJ5RC KJ5T KJ5Y KJ6AP KJ6CM KJ6DQ KJ6EBW KJ6GHN KJ6JEP KJ6LJB KJ6LV KJ6OHI KJ6PTX KJ6RMM KJ6RVK KJ6TRT KJ6TSX KJ6TTR KJ6UD KJ6UVQ KJ6WH KJ6Y KJ6YXI KJ6ZCR KJ7AFI KJ7BBN KJ7BBS KJ7BDA KJ7DVN KJ7EP KJ7ERO KJ7G KJ7GD KJ7GUI KJ7I KJ7JZG KJ7M KJ7MEB KJ7MX KJ7V KJ8DO KJ8N KJ8O KJ8U KJ9B KJ9C KJ9P KJ9X KJ9Z KK0ECT KK0L KK0SD KK0U KK1C KK1D KK1L KK1TLS KK1W KK1Z KK2A KK2U KK2V KK3F KK3T KK3Z KK4AC KK4ADQ KK4AMR KK4AND KK4BNC KK4BQ KK4BZ KK4CQN KK4CS KK4DAS KK4DCX/KP4 KK4DDT KK4DMW KK4DPM KK4E KK4ENI KK4FKH KK4FYV KK4GC KK4HEG KK4HEQ KK4HFG KK4HUK KK4ISJ KK4JFM KK4JHG KK4JS KK4JYO KK4KHS KK4MA KK4MJA KK4NAW KK4NZH KK4ODQ KK4ONT KK4OVW KK4OWZ KK4PH KK4PIV KK4PUX KK4QAM KK4R KK4RDI KK4RT KK4RV KK4RWB KK4RXC KK4RXU KK4SMM KK4TCE KK4TJP KK4TSS KK4ULL KK4VA KK4VCH KK4VIB KK4VPT KK4WL KK4WPR KK4WS KK4WTW KK4WU KK4WX KK4XA KK4XO KK4XX KK4YKS KK4YOK KK4ZDR KK4ZT KK4ZWC KK5DNA KK5HT KK5I KK5IB KK5II KK5JD KK5JY KK5KLK KK5LO KK5LX KK5MT KK5NC KK5NO KK5OQ KK5OV KK5QS KK5RX KK5W KK5XX KK6CSO KK6CY KK6DHA KK6DOA KK6I KK6ILV KK6JOL KK6KE KK6KMU KK6L KK6LE KK6M KK6MC KK6MU KK6NCU KK6NON KK6NTL KK6OJR KK6P KK6PXT KK6QCV KK6RBH KK6RKY KK6RQI KK6TBN KK6TV KK6UHE KK6USY KK6VIX KK6YB KK6YRU KK6ZHK KK6ZIZ KK6ZM KK6ZUU KK7A KK7AC KK7CO KK7DP KK7JS KK7L KK7LEW KK7MA KK7MD KK7PR KK7PW KK7TV KK7VL KK7X KK7Y KK7YC KK8D KK8MM KK8XX KK9A KK9DX KK9EJ KK9G KK9H KK9I KK9JEF KK9M KK9N KK9O KK9V KL0MP KL0OZ KL0R KL1JP KL2AX/5 KL2R KL2RA KL2S KL2SB KL2SX KL2T KL2YE KL2ZZ KL3JY KL4CZ KL4HX KL4OB KL7AA KL7AIR KL7AN KL7CW KL7HRO KL7IEH KL7IWC KL7J KL7JR KL7JRC KL7JVD KL7KK KL7LT KL7NC KL7QOW KL7QW KL7RA KL7SB KL7SK KL7TC KL7WG KL7YK KM0DX KM0I KM0O KM1D KM1G KM1MM KM1P KM1R KM1W KM1Z KM2B KM2C KM2E KM2G KM2L KM2O KM2Q KM2S KM2T KM3C KM3M KM3T KM3U KM4AAH KM4AEM KM4ALL KM4ALP KM4ATT KM4BLH KM4BUN KM4C KM4CH KM4COG KM4CRC KM4DAY KM4DNU KM4DR KM4DVA KM4EBT KM4EOG KM4F KM4FO KM4FOC KM4FVF KM4GBM KM4GSL KM4HFB KM4HI KM4HQE KM4HQL KM4HVE KM4IAJ KM4IK KM4IKO KM4IYW KM4IZZ KM4JA KM4JAK KM4JAR KM4JLM KM4JWW KM4JZJ KM4LAO KM4LHG KM4LKC KM4LMA KM4LMG KM4LS KM4LZM KM4MK KM4MWE KM4NAP KM4NHN KM4NOW KM4NXI KM4NXW KM4NYI KM4ODS KM4OKU KM4OQO KM4OZH KM4PFF KM4POP KM4PPF KM4QE KM4QER KM4RK KM4RKT KM4RO KM4RT KM4SEG KM4SFF KM4SII KM4TC KM4TDC KM4TIN KM4TLR KM4TWE KM4TYV KM4VAD KM4VBA KM4VHS KM4VIU KM4VTE KM4VWD KM4WII KM4WW KM4ZDM KM4ZJZ KM4ZQE KM4ZZ KM4ZZQ KM5FW KM5G KM5JV KM5K KM5LY KM5MS KM5TW KM5VI KM5YL KM6AFW KM6AGE KM6CND KM6CNF KM6CQ KM6CR KM6CSY KM6EMP KM6ERJ KM6FAK KM6FOY KM6FWT KM6G KM6HB KM6HRD KM6I KM6IFL KM6JD KM6JUR KM6KFW KM6KJI KM6KRO KM6KSQ KM6LDD KM6MEF KM6NQH KM6PFE KM6PHB KM6PRP KM6RHC KM6RI KM6RKX KM6SDM KM6SZQ KM6T KM6TJ KM6TVV KM6VBT KM6VVW KM6WSI KM6Z KM7DX KM7N KM7Q KM7R KM7S KM7W KM8AM KM8L KM8Q KM8R KM8V KM9G KM9M KM9P KM9R KN0A KN0R KN0V KN0W KN0WCW/2 KN1CBR KN1DX KN1H KN1M KN1UM KN1V KN1W KN2M KN2T KN2U KN2X KN3A KN3ILZ KN3X KN4ADM KN4AME KN4AYV KN4BAR KN4BBC KN4BEV KN4BIT KN4BNR KN4BNX KN4BPO KN4BPX KN4CCB KN4CFD KN4CHI KN4CQB KN4CQJ KN4CTD KN4CWT KN4CXC KN4DEB KN4DIG KN4DLC KN4DLS KN4DQE KN4DUA KN4DUF KN4DUX KN4DXD KN4DXT KN4EHZ KN4ELD KN4EQA KN4ETD KN4EWI KN4FIM KN4FRG KN4FRJ KN4GCA KN4GDX KN4GYM KN4HCN KN4HH KN4HJO KN4HPJ KN4IDB KN4IEY KN4IJS KN4IJZ KN4ILC KN4IQE KN4IUV KN4JEE KN4JFD KN4JJA KN4JN KN4JTC KN4JTQ KN4JTU KN4KIK KN4KL KN4LCX KN4LKC KN4LTR KN4MBK KN4MKX KN4MQR KN4MTM KN4MVZ KN4NBJ KN4NIQ KN4NL KN4NOK KN4NVU KN4OFJ KN4OOH KN4OPZ KN4OTT KN4OYJ KN4PFV KN4POR KN4PPD KN4PYH KN4QKW KN4QVV KN4QXZ KN4RD KN4RFK KN4RJW KN4RNL KN4RNO KN4ROS KN4STM KN4TCK KN4TFW KN4URX KN4USA KN4UUR KN4VCT KN4VLH KN4VV KN4Y KN4ZJE KN5L KN5S KN5TX KN6B KN6BU KN6CSB KN6E KN6GFG KN6IQ KN6Y KN7D KN7K KN7N KN7NNN KN7NV KN7OYL KN7T KN7V KN8CWO KN8F KN8FEL KN8KAZ KN8L KN8U KN9C KN9K KN9P KN9W KO0A KO0Z KO1U KO2E KO2WW KO3T KO4D KO4FV KO4O KO4OL KO4W KO4XB KO4XJ KO4YC KO4Z KO5G KO5V KO6L KO6LU KO6PS KO6RM KO6UW KO6YG KO6ZC KO7I KO7SS KO8F KO8K KO8SCA KO8V KO8Z KO9A KO9V KP2BH KP2DX KP2M KP2XX KP2Z KP3DR KP3DX KP3G KP3L KP3LH KP3LR KP3M KP3MM KP3TX KP3W KP3Z KP3ZM KP4AF KP4AJ KP4DQC KP4DX KP4EC KP4EJ KP4JFR KP4JJO KP4JRS KP4KE KP4KE/W4 KP4LE KP4LH KP4MD/P KP4NRA KP4PR KP4RMG KP4RV KP4SX KP4TF KP4US KP4VOR KP4WQ KQ0C KQ0J KQ1A KQ1F KQ1P KQ2F KQ2M KQ2N KQ2R KQ3E KQ3F KQ3K KQ3Q KQ3S KQ3W KQ4AV KQ4K KQ4KK KQ4KX KQ4LA KQ4P KQ4PK KQ4VT KQ4Y KQ4ZM KQ5J KQ6CR KQ6K KQ6RS KQ7L KQ7M KQ7P KQ7TJ KQ7W KQ8B KQ8M KQ9H KQ9J KR0ARK KR0CKT KR0M KR0N KR0P KR0RD KR0U KR1A KR1CW KR1DX KR1ST KR1U KR2AA KR2AR KR2C KR2E KR2Q KR3DX KR3E KR4AE KR4F KR4GT KR4HU KR4IS KR4M KR4NO KR4OI KR4RO KR4U KR4V KR4WI KR4YO KR4Z KR5G KR5NM KR5P KR5X KR6BB KR6C KR6D KR6FH KR6N KR6W KR7C KR7LD KR7M KR7O KR7Q KR7RK KR7W KR7X KR8E KR8T KR9E KR9U KS0AA KS0CW KS0KS KS0M KS0MO KS0USA KS1G KS1J KS1N KS2G KS3A KS3D KS3F KS3K KS3N KS3O KS4AA KS4BO KS4L KS4OT KS4Q KS4R KS4S KS4V KS4VOL KS4X KS4XU KS4YT KS4YX KS5P KS5V KS5Z KS6F KS6M KS6PD KS6T KS7AA KS7M KS7T KS7V KS7X KS8M KS8O KS8U KS9A KS9DX KS9K KS9V KS9W KT0A KT0AM KT0DX KT0F KT0G KT0K KT0R KT0W KT1H KT1I KT1K KT3M KT3R KT3RR KT3T KT3TT KT3V KT3Y KT4AC KT4AH KT4AS KT4E KT4EM KT4FQ KT4LS KT4O KT4OO KT4Q KT4RK KT4RR KT4TL KT4UE KT4XN KT4ZB KT5C KT5D KT5FOC KT5J KT5OT KT5V KT5WB KT5X KT6E KT6V KT7E KT7G KT7P KT7TT KT7W KT7WW KT8O KT8Y KT9AC KT9L KT9T KT9X KU0D KU1CW KU1CW/7 KU1N KU2C KU2M KU2US KU2X KU3X KU4A KU4FX KU4LO KU4NY KU4PY KU4QG KU4UK KU4V KU4VY KU4YW KU5Y KU6CW KU6E KU6F KU6S KU6W KU7I KU7K KU7SA KU7T KU7Y KU7Z KU8E KU8E/LIB KU8F KU8T KU8V KU9E KU9S KU9Z KV0CO KV0I KV0Q KV1E KV1J KV1W KV2H KV2K KV2U KV2X KV3T KV3U KV3W KV4AC KV4CQ KV4DX KV4FZ KV4JK KV4JW KV4KY KV4L KV4OP KV4T KV4TH KV4UD KV4VO KV4ZY KV5J KV5V KV5W KV5WS KV5Y KV6ARM KV6O KV7DX KV7J KV7K KV7N KV8C KV8O KV8P KV8Q KV8S KV8Z KV9M KV9W KW0J KW0MSP KW1DX KW1K KW2A KW2E KW2J KW3A KW3F KW3P KW3S KW3U KW3Z KW4AK KW4CW KW4E KW4FF KW4FM KW4G KW4GF KW4HN KW4HQ KW4J KW4LS KW4M KW4MB KW4NN KW4OV KW4RP KW4RTR KW4T KW4TJ KW4TO KW4TP KW4TT KW4VA KW4WX KW4YA KW5EBB KW5KW KW5P KW5V KW6ACK KW6G KW6JIM KW6M KW6S KW7A KW7D KW7M KW7MM KW7N KW7Q KW7WP KW7Y KW8D KW8M KW8N KW8O KW9E KW9M KW9R KW9U KX0A KX1E KX1G KX1MAD KX1W KX1X KX2A KX2H KX2L KX2NY KX2P KX2S KX2T KX4AV KX4BE KX4BI KX4BW KX4CY KX4EZ KX4FR KX4GA KX4GG KX4HL KX4IB KX4KU KX4LL KX4MI KX4MT KX4OU KX4P KX4RC KX4SW KX4TT KX4VU KX4WB KX4X KX5B KX5C KX5SP KX5W KX5W/7 KX6A KX6X KX6Y KX7F KX7J KX7L KX7M KX7YT KX8D KX8F KX9DX KX9RT KX9X KY0K KY0O KY0Q KY0R KY0W KY2D KY2K KY2N KY2T KY3V KY3W KY4BP KY4D KY4DBY KY4F KY4G KY4KD KY4KY KY4NA KY4XX KY4Z KY5M KY6AA KY6G KY6R KY7L KY7M KY9B KZ0P KZ0US KZ0UZ KZ1M KZ1O KZ1W KZ1X KZ2I KZ2V KZ3I KZ3MW KZ3W KZ4A KZ4KX KZ4M KZ4P KZ4SKI KZ4TN KZ4VT KZ5AM KZ5D KZ5DP KZ5ED KZ5FN KZ5J KZ5MM KZ5OH KZ5OM KZ5V KZ6T KZ6ZZ KZ7N KZ7O KZ7X KZ8O KZ8TDP KZ8Y KZ9DX KZ9H KZ9V KZ9W L33M L55D L73H L77D LA0CX LA0FA LA1A LA1DSA LA1K LA1K/P LA1MFA LA1PHA LA1T LA1TV LA1U LA1XFA LA2AB LA2FKA LA2G LA2GCA LA2GKA LA2HFA LA2ONA LA2QJA LA2RR LA2T LA2US LA2WRA LA2XNA LA3BO LA3BPA LA3CLA LA3LJ LA3LJA LA3MHA LA3OCT LA3RK LA3RNA LA3T LA3TK LA3WAA LA3ZA LA4C LA4GHA LA4IR LA4O LA4OGA LA5FBA LA5HE LA5LJA LA5SJA LA5UF LA5YJ LA6CF LA6IHA LA6K LA6M LA6OP LA6PB LA6SK LA6UL LA6VM LA6VQ LA6XI LA6ZDA LA6ZFA LA6ZP LA7AFA LA7AK LA7DHA LA7EIA LA7GIA LA7IM LA7JO LA7NFA LA7QIA LA7RJ LA7RRA LA7SI LA7THA LA7VK LA7XK LA8AW LA8CJ LA8HGA LA8OKA LA8OM LA8OOA LA8RTA LA9BM LA9DK LA9GSA LA9LMA LA9OI LA9PJA LA9RY LA9TY LA9VFA LA9WDA LA9XGA LB1AH LB1GB LB1LG LB1SF LB1TI LB2TB LB2WG LB3RE LB3TI LB4FH LB4UH LB5WB LB6GG LB6KC LB6UH LB7Q LB8DC LB8IB LC0C LC1C LC1T LC1U LC2C LC4A LC5A LC5C LC5E LC5K LC5M LC5T LC5W LC6C LC7D LC7M LC8P LC9A LC9S LC9T LC9X LG80T LM450C LM90HQ LM90NRRL LN1B LN1K LN2D LN2G LN2HQ LN4BBC LN4C LN5O LN7TTT LN8W LO5D LO7H LQ3D LQ3H LQ5A LQ7E LR3D LR3M LS1D LS2D LT0H LT1F LT3H LT5V LT7D LT7F LU/DL2OE LU0HQ LU1ALF LU1AW LU1AW/X LU1BJW LU1DBQ LU1DK LU1DW LU1DX LU1DZ LU1EXR LU1FAM LU1FKR LU1FM LU1HLH LU1HYW LU1ICX LU1KCQ LU1MPK LU1NAF LU1UG LU1VKQ LU1VM LU1VZ LU1WI LU2DD LU2DGZ LU2DKT LU2DVI LU2DX LU2EE LU2FDA LU2FE LU2JCW LU2NI LU2UF LU2UG LU2WA LU3CW LU3DK LU3DRP LU3DX LU3EBG LU3HKA LU3HS LU3HY LU3JVO LU3MAM LU3MCJ LU3MO LU3VED LU4AT LU4DPL LU4DQ LU4DX LU4EG LU4FM LU4FPZ LU4HK LU4JEA LU4JHF LU4VI LU4VZ LU4XAP LU5AB LU5BE LU5DDX LU5DF LU5DX LU5EVK LU5FB LU5FC LU5FCI LU5FF LU5FP LU5FPJ LU5HA LU5MEC LU5MT LU5OM LU5VV LU5WF LU5WW LU5YF LU6DC LU6DCN LU6DOT LU6DU LU6EF LU6EQV LU6ETB LU6FHO LU6FLZ LU6KA LU6OA LU6UO LU6VCD LU6VEK LU7DD LU7DH LU7DID LU7DUE LU7DV LU7DW LU7DY LU7FBI LU7HF LU7HN LU7MCJ LU7MT LU7YS LU8DPM LU8DY LU8DZJ LU8EEM LU8EHR LU8EKC LU8EX LU8QT LU8VCC LU8VLE LU8YE LU9CYV LU9DAG LU9DDJ LU9DO LU9EHU LU9ESD LU9FHF LU9FNZ LU9FVS LU9MAB LU9MBY LU9MDH LU9OZX LU9VD LU9VEA LV1F LV4V LW1D LW1EUD LW1HR LW2DOD LW2EIY LW3DBW LW3DC LW3DG LW3DN LW3EK LW4EF LW5DPG LW5DQ LW5DR LW5DW LW5EAE LW5HR LW6DG LW6DW LW7DX LW8DOZ LW8DQ LW8DXR LW9EKA LW9ETQ LX0RL LX1DKE LX1ER LX1FP LX1HD LX1JH LX1KN LX1KW LX1NO LX1RFJ LX1TSF LX20I LX2A LX2KD LX2LX LX4A LX5IGRY LX75V LX7HV LX7I LX8HQ LX8M LY/UT3UA LY0A LY0HQ LY1CT LY1D LY1DZ LY1FK LY1FW LY1K LY1LB LY1M LY1NDN LY1R LY1SR LY1W LY1WR LY1XA LY2A LY2AE LY2AJ LY2AT LY2AX LY2BAA LY2BAW LY2BBF LY2BGP LY2BIS LY2BKT LY2BMX LY2BNL LY2BVB LY2BVQ LY2CG LY2CO LY2CV LY2CX LY2DX LY2EN LY2EW LY2EX LY2F LY2FN LY2GN LY2GV LY2H LY2HM LY2IJ LY2J LY2K LY2KA LY2LF LY2MC LY2MM LY2N LY2NK LY2NY LY2NZ LY2OM LY2OU LY2PAD LY2PX LY2QT LY2RJ LY2SA LY2SM LY2SQ LY2T LY2TS LY2UU LY2W LY2X LY2XW LY2ZO LY3A LY3AB LY3B LY3BB LY3BN LY3CY LY3DA LY3G LY3I LY3KI LY3NX LY3S LY3X LY3Z LY3ZM LY4A LY4BF LY4BP LY4G LY4K LY4L LY4MA LY4O LY4OO LY4Q LY4R LY4T LY4ZF LY4ZZ LY5A LY5AA LY5AX LY5BT LY5CB LY5E LY5G LY5GT LY5I LY5L LY5N LY5O LY5OO LY5Q LY5R LY5T LY5TO LY5W LY5XX LY5Y LY5YY LY6A LY6M LY7M LY7T LY7W LY7Z LY8A LY8O LY9A LY9Y LZ/Z36W LZ0HQ LZ0I LZ0M LZ116RF LZ11C LZ140LO LZ142GO LZ19ECC LZ1A LZ1AA LZ1ABC LZ1AQ LZ1BJ LZ1BP LZ1BY LZ1CRI LZ1D LZ1DM LZ1DPN LZ1DQ LZ1EV LZ1FH LZ1FY LZ1G LZ1GD LZ1GE LZ1GU LZ1HM LZ1HO LZ1HW LZ1IA LZ1IKY LZ1IQ LZ1IU LZ1JY LZ1JZ LZ1KCO LZ1KDP LZ1KPO LZ1KY LZ1KZ LZ1MC LZ1MDU LZ1MDZ LZ1MG LZ1MS LZ1ND LZ1NG LZ1NK LZ1NYK LZ1OJ LZ1OP LZ1PJ LZ1PUB LZ1QB LZ1QI LZ1QN LZ1QV LZ1QZ LZ1RF LZ1RW LZ1ST LZ1UBO LZ1UK LZ1UQ LZ1VCT LZ1VDR LZ1VKD LZ1VKI LZ1VQ LZ1VVD LZ1WF LZ1WR LZ1YE LZ1YF LZ1YP LZ1ZF LZ1ZJ LZ1ZM LZ1ZP LZ1ZX LZ24M LZ25TRC LZ2A LZ2AF LZ2AF/2 LZ2AO LZ2AU LZ2CH LZ2CJ LZ2CW LZ2DF LZ2EHO LZ2F LZ2FL LZ2FM LZ2FN LZ2FP LZ2FV LZ2GS LZ2HA LZ2HR LZ2HT LZ2JA LZ2JE LZ2JR LZ2JU LZ2KSB/P LZ2NG LZ2NW LZ2OG LZ2OQ/1 LZ2PG LZ2PL LZ2PP LZ2PS LZ2RS LZ2TU LZ2UW LZ2W LZ2WO LZ2XF LZ2YO LZ2ZD LZ2ZG LZ2ZY LZ30OJ LZ30STM LZ33E LZ35PAR LZ3BB LZ3BF LZ3CB LZ3CQ LZ3DJ LZ3DP LZ3DX LZ3FM LZ3FN LZ3GW LZ3LZ LZ3PN LZ3PZ LZ3QE LZ3R LZ3RM LZ3RR LZ3SD LZ3SF LZ3SM LZ3TL LZ3V LZ3W LZ3ZQ LZ3ZZ LZ4A LZ4AA LZ4AE LZ4AW LZ4T LZ4TX LZ4W LZ5B LZ5DB LZ5DD LZ5E LZ5EE LZ5G LZ5IY LZ5K LZ5KW LZ5M LZ5N LZ5PL LZ5PX LZ5QZ LZ5R LZ5RD LZ5RG LZ5T LZ5U LZ5VK LZ5VV LZ5W LZ5XQ LZ5Y LZ5Z LZ5ZI LZ5ZM LZ60KAA LZ65RCP LZ6C LZ6E LZ6F LZ6K LZ6O LZ6Y LZ6Z LZ73A LZ73TRC LZ7A LZ7D LZ7DL LZ7DX LZ7E LZ7EA LZ7EP LZ7G LZ7H LZ7HQ LZ7J LZ7M LZ7MM LZ7O LZ7PW LZ7U LZ7W LZ7X LZ7Y LZ8A LZ8E LZ8R LZ8U LZ8W LZ8Z LZ9A LZ9R LZ9V LZ9W M0A M0ACM M0AFZ M0AIA M0AID M0AUG M0B M0BAW M0BAY M0BCT M0BEW M0BJL M0BKB M0BLF M0BPQ M0BTZ M0BUI M0CCA M0CFV M0CHK M0CKE M0CKX M0CLH M0CNP M0CTP M0CUK M0CVO M0CYR M0DCG M0DDT M0DHO M0DHP M0DMA M0DPK M0DSL M0DSL/P M0DXR M0DYI M0GAV M0GDX M0GKC M0GMS M0GZR M0HAO M0HDX M0HFC M0HHG M0HLT M0HMJ M0HOM M0HWA M0HWO M0HZT M0ICL M0ICR M0IHT M0IJQ M0ILT M0IPU M0IQD M0IRB M0IRF M0ISZ M0ITR M0JCE M0JCQ M0JND M0JSX M0JWB M0KEB M0KED M0KKM M0KNG M0KOX M0KPD M0KPW M0KYR M0LAI M0LAY M0LDW M0LED M0LMK M0MCV M0MGP M0MJA M0MNM M0MNO M0MPM M0MTZ M0MXX M0NKR M0NMA M0NPQ M0NPT M0NQN M0NRD M0OIA M0OIO M0ORD M0ORH M0ORO M0ORY M0P M0PAR M0PCB M0PGX M0PKZ M0PLX M0PSC M0PTO M0PTZ M0PVM M0PWC M0QVE M0RBE M0RBG M0REG M0REX M0RIU M0RLE M0RNR M0RYB M0RYB/P M0SAR M0SDM M0SDV M0SDY M0SEL M0SEV M0SHK M0SNA M0SNB M0SQC M0TAZ M0TDW M0TFO M0TJU M0TKM M0TQR M0TTT M0TWB M0TWM M0TXK M0UAT M0UNI M0UNN M0URL M0UTD M0VAA M0VBY M0VCB M0VGB M0VQP M0VSP M0VWK M0WBG M0WEL M0WHC M0WHP M0WJE M0WLF M0WTR M0X M0XAC M0XBF M0XDX M0XII M0XLT M0XOC M0YCQ M0YDB M0YKS M0YMJ M0YOB M0YRX M0YTT M0ZVB M1BKL M1C M1DDD M1DDD/P M1DHA M1DNC M1EYP/P M1G M1GEO M1GWZ M1KMC M1N M1SJE M1SJE/P M1SLH M1TZR M1U M1X M2A M2D M2E M2G M2J M2L M2M M2S M2U M2W M3A M3AAQ M3D M3DFW M3DJS M3E M3ECT M3I M3JVX M3M M3OVA M3P M3R M3W M3X M3XYP M3ZZF M4A M4J M4M M4U M4X M5A M5ADL M5AEC M5AEO M5AIO M5ARC M5AX M5B M5BFL M5C M5D M5DIK M5ET M5EVT M5GUS M5JB M5KJM M5SB M5T M5X M5Z M5ZAP M6BIR M6EAM M6ETL M6GOX M6IWD M6KCI M6LUO M6MPC M6O M6OWV M6OXO M6OXO/P M6T M6TPS M6VFT M6VWX M6W M6WOS M6XAT M6YGL M6YTU M7A M7DX M7K M7O M7Q M7R M7RJS M7T M7V M7W M7X M8A M8C M9N M9T M9X MD0CCE MD0GLK MD1E MD1U MD2C MD4K MD7C MI/3Z0X MI0AYR MI0BPB MI0DWE MI0GTA MI0HOZ MI0HWG MI0I MI0JZZ MI0LLG MI0M MI0OBC MI0RRE MI0SAI MI0SLE MI0UGB MI0ULK MI0VBH MI0WWB MI0ZAO MI1A MI1ERL MI1M MI3OZX MI4I MI5AFK MI5I MI5JYK MI5K MI6JVC MJ/OQ7A/P MJ0ICD MJ0X MJ5Z MJ8C MM0AMW MM0AOQ MM0CBL MM0CCC MM0CEZ MM0CIN MM0CPZ MM0DVZ MM0DXD MM0EDZ MM0GKB MM0GOR MM0INH MM0IVR MM0JTV MM0T MM0TFU MM0TGH MM0VPY MM0ZBH MM1E MM1PTT MM1R MM2N MM2R MM2T MM3AWA MM3AWD MM3JFM MM3N MM3T MM4D MM6AAA MM6PFT MM8Z MN0M MN0NID MN0VFW MN5A MS0FNR MS0ORK MU0FAL MU0GSY MU2K MW/R6AF MW0BRO MW0BYS MW0CRI MW0CVT MW0DNF MW0IDX MW0KMS MW0TJU MW0TSL/P MW0YVK MW0ZZK MW1MDH MW2I MW5B MW5R MW6M MW7KJC MW7X MW8R MW8T MW9W MX0ADJ MX0IRN MX0SNB MX3W MX5A MX5BAE MX7DX N03U N06T N0AAL N0AB N0ABA N0AC N0AD N0AE N0AG N0AIE N0AJN N0AJS N0AKC N0AKF N0ANH N0ANP N0AT N0AV N0AW N0AX N0AXZ N0BAK N0BDS N0BK N0BM N0BPA N0BQ N0BUI N0CC N0CDA N0CEL N0CM N0CU N0DH N0DIM N0DND N0DOW N0DQS N0ECK N0EG N0EHX N0ELF N0EMU N0ENQ N0EO N0ERO N0FW N0FY N0GBR N0GC N0GEF N0GF N0GKO N0GM N0GMT N0GOS N0GTO N0GZ N0HC N0HD N0HDR N0HF N0HJZ N0HKA N0HU N0HWJ N0IJ N0IKD N0IQM N0IRM N0IRW N0IS N0IWN N0IWQ N0IZE N0JDW N0JG N0JSD N0JX N0KBD N0KD N0KE N0KEG N0KIS N0KK N0KOE N0KQ N0KQR N0KV N0KVN N0LD N0LEF N0LIW N0LL N0LLH N0LNK N0LRA N0LTX N0LY N0MA N0MH N0MHL N0MII N0MK N0MKA N0ML N0MMA N0MPM N0MQ N0NB N0NC N0NI N0NK N0NNT N0NQN N0NZG N0OCT N0ODK N0OJ N0OK N0OP N0ORY N0OST N0PP N0PR N0PVZ N0QE N0QLT N0QOK N0QQ N0QQQ N0RB N0RBB N0REH N0RJ N0RN N0RQV N0RR N0RSN N0RZ N0SA N0SAP N0SM N0SMX N0SNN N0SO N0SS N0SSM N0STL N0SZ N0TA N0TEK N0TK N0TLW N0TMU N0TOP N0TR N0TT N0UAE N0UB N0UBL N0UD N0UK N0UK/KP2 N0UR N0URW N0UU N0UV N0UX N0UY N0VA N0VAO N0VD N0VFJ N0VMI N0VRM N0VY N0WER N0WKR N0WLX N0WM N0WRK N0WVU N0WY N0XE N0XM N0XNN N0XR N0XT N0XXL N0YL N0YO N0YSQ N0YY N0ZHE N0ZIB N0ZNA N0ZS N0ZTO N1ACI N1ADM N1ADX N1AIA N1ALO N1AM N1API N1ATO N1ATS N1AV N1AW N1BNC N1BOX N1BSA N1BUG N1CDN N1CEW N1CGP N1CKQ N1CLC N1DC N1DC/4 N1DCH N1DD N1DG N1DID N1DM N1EK N1EN N1EP N1EV N1EVK N1EX N1EYE N1EZ N1FD N1FDX N1FI N1FR N1FTP N1GB N1GDD N1GFV N1GKE N1GLT N1GN N1GSA N1GTW N1HAR N1HD N1HM N1HMR N1HR N1HRO N1HTS N1IA N1IA/4 N1IBM N1ID N1IIX N1ILZ N1IMW N1INI N1IQC N1IX N1IXF N1JAO N1JCW N1JD N1JEZ N1JHJ N1JIE N1JM N1JM/7 N1JP N1JQB N1JTK N1JW N1JY N1KEV N1KEZ N1KGY/4 N1KL N1KM N1KSC N1KT N1KW N1KWF N1KWG N1LB N1LI N1LJD N1LN N1LZF N1MD N1MDX N1ME N1MGO N1MHV N1MID N1MM N1MSR N1NC N1NDN N1NK N1NN N1NQD N1NRK N1NUG N1OKL N1OQC N1PAU N1PGA N1PGQ N1PMA N1PSX N1QD N1QEQ N1QOU N1QY N1RB N1RCX N1RDN N1RJ N1RJK N1RM N1RP N1RPH N1RR N1RU N1RV N1RW N1RWY N1RYH N1SEP N1SER N1SFE N1SMB N1SNB N1SOH N1SP N1SPX N1STN N1SV N1SZ N1TA N1TAA N1TGE N1TIZ N1TL N1TN N1TO N1TQ N1TRK N1TRZ N1TYH N1UFO N1UJD N1UK N1UR N1UZ N1VH N1VT N1VVV N1WGU N1WL N1WQ N1WR N1WRK N1WTT N1WW N1XF N1XIH/7 N1XJM N1XK N1XL N1XRR N1XS N1XSS N1XVU N1XX N1YC N1YKH N1YL N1YLJ N1ZN N1ZX N1ZZ N2AAX N2ACQ N2ADC N2AE N2AIE N2AJ N2AMG N2AN N2APB N2ATA N2ATB N2AWD N2AXX N2BA N2BB N2BE N2BEG N2BJ N2BMK N2BRG N2CAT N2CEI N2CG N2CI N2CJ N2CJN N2CJO N2CQ N2CSI N2CU N2CW N2CYY N2DDX N2DEQ N2DRO N2DSB N2DSW N2DVQ N2ED N2EEE N2EI N2EIM N2EM N2ENG N2EON N2ESH N2ESP N2ETJ N2EVI N2EY N2FEP N2FF N2FRB N2FRH N2FSB N2FYE N2GA N2GC N2GDU N2GG N2GHR N2GHZ N2GM N2GOT N2GXJ N2HMM N2HX N2IC N2IIE N2IK N2IMM N2IPH N2ISM N2IVN N2IW N2IXX N2JE N2JF N2JJ N2JJF N2JNE N2JNR N2JNZ N2JQR N2JS N2KA N2KED N2KHH N2KI N2KOF N2KPS N2KW N2KWO N2LBR N2LBZ N2LC N2LCJ N2LEE N2LH N2LJM N2LK N2LL N2LO N2LVG N2LVI N2MA N2MAA N2MAC N2MEE N2MF N2MGT N2MLP N2MM N2MN N2MO N2MS N2MSF N2MTG N2MUN N2NC N2NI N2NKP N2NKX N2NL N2NNF N2NO N2NOM N2NOW N2NQ N2NR N2NS N2NS/6 N2NT N2NYR N2OA N2OB N2OHP N2OO N2OPW N2ORM N2OT N2OUV N2OV N2PA N2PEQ N2PEZ N2PP N2PPI N2PPL N2PQW N2PTF N2PYH N2QLT N2QT N2QV N2RC N2RD N2RI N2RJ N2RK N2RM N2RM/4 N2RR N2RRA N2SAL N2SF N2SFS N2SJO N2SLO N2SO N2SQW N2SR N2SRK N2SU N2SUB N2TA N2TK N2TM N2TOX N2TRX N2TU N2UIF N2UL N2USN N2UT N2UU N2UZ N2UZQ N2VA N2VAJ N2VM N2VOI N2VV N2VV/VY2 N2VW N2WF N2WG N2WK N2WKS N2WM N2WWD N2XE N2XW N2YB N2YBB N2YC N2YDD N2YET N2YG N2YIE N2YNF N2YO N2ZA N2ZN N2ZVN N2ZX N3AAA N3AC N3AD N3ADF N3AE N3AF N3AIU N3AJR N3ALG N3ALN N3AM N3AO N3AS N3ATE N3AZZ N3BB N3BNA N3BUD N3BUO N3BXZ N3CAL N3CAN N3CAU N3CB N3CDA N3CHX N3CI N3CKI N3CKI/4 N3CM N3CMH N3CO N3COB N3CR N3CRT N3CS N3CU N3CW N3CY N3CZ N3DAP N3DEB N3DNE N3DPB N3DPL N3DRL N3DUE N3DXD N3DXX N3EA N3EB N3ED N3EG N3EIW N3EJ N3EN N3EN/8 N3ER N3EU N3EYF N3FAA N3FCP N3FEL N3FES N3FIX N3FJP N3FM N3FTO N3FZ N3GAR N3GD N3GE N3GGT N3GH N3GJ N3GL N3GO N3GWZ N3HBX N3HCN N3HE N3HEE N3HQB N3HQN N3HU N3HUG N3HWH N3IC N3IK N3IQ N3IW N3JB N3JD N3JHS N3JIX N3JJT N3JNX N3JON N3JT N3JUY N3KBF N3KCJ N3KCM N3KCR N3KN N3KSH N3KT N3KUN N3KV N3KZK N3LBJ N3LFC N3LH N3LPJ N3LRP N3LT N3MA N3MAV N3MIE N3MIQ N3MK N3MM N3MON N3MOW N3MRA N3MVX N3MWQ N3MX N3MYB N3ND N3NGE N3NR N3NT N3NTJ N3NVA N3NY N3NZ N3OAW N3OC N3OJL N3OO N3OVT N3OW N3OZT N3PDK N3PKJ N3PM N3PQ N3QAM N3QE N3QXX N3RA N3RBU N3RC N3RC/6 N3RD N3RDG N3RDV N3RH N3RJ N3RM N3RN N3RS N3RTG N3RUA N3RUM N3RW N3RZU N3SD N3SEE N3SJL N3SQD N3SRC N3SRG N3ST N3SW N3SY N3TD N3TDE N3TE N3TG N3TIR N3TO N3TR N3TTT N3TWT N3UA N3UE N3UR N3US N3VFK N3VJ N3VMD N3VN N3VOP N3VQH N3VYZ N3VZ N3WD N3WER N3WFN N3WH N3WM N3WMC N3WT N3WYG N3WZR N3XA N3XF N3XKB N3XL N3XM N3XUD N3XVU N3XZ N3YFE N3YPJ N3YUG N3ZA N3ZB N3ZK N3ZL N3ZN N3ZP N3ZV N3ZZ N4AAW N4AB N4ABI N4ABT N4ACH N4ACW N4ADC N4ADX N4AED N4AF N4AGG N4AGL N4AHO N4ALN N4APR N4AR N4AR/8 N4ARO N4ARY N4ASF N4ASX N4ATJ N4AU N4AX N4AYV N4BA N4BAA N4BAK N4BC N4BCB N4BCD N4BFR N4BLT N4BP N4BQQ N4BRF N4BRJ N4CAP N4CC N4CCJ N4CD N4CF N4CFC N4CLY N4CNX N4CO N4CPR N4CQ N4CU N4CV N4CVG N4CW N4CWP N4CWZ N4DAB N4DAG N4DE N4DEN N4DIR N4DJ N4DL N4DLA N4DLR N4DLT N4DN N4DPM N4DT N4DU N4DW N4DWD N4DXN N4DXS N4DY N4DZB N4EDC N4EDI N4EEB N4EEV N4EFS N4EH N4EII N4EK N4EL N4ELM N4EMM N4EMP N4EPD N4ESI N4ESU N4ETC N4EVJ N4EXA N4FAY N4FCG N4FD N4FKH N4FP N4FR N4FX N4FXZ N4FZ N4GAB N4GAS N4GEB N4GG N4GID N4GIX N4GK N4GL N4GRC N4GU N4GVW N4HA N4HAI N4HAL N4HAY N4HB N4HEK N4HFO N4HI N4HID N4HLN N4HP N4ICF N4IDH N4IJ N4IQ N4IR N4IS N4IY N4IZE N4JAH N4JBN N4JED N4JG N4JGD N4JOW N4JR N4JRG N4JRP N4JT N4JVP N4JXP N4KB N4KC N4KE N4KEB N4KEZ N4KH N4KHI N4KKD N4KM N4KS N4KS/3 N4KW N4KXO N4KZ N4LA N4LAG N4LAZ N4LF N4LNR N4LPD N4LSJ N4LT N4LU N4LV N4LZ N4MA N4MB N4MEC N4MIC N4MIK N4MIO N4MIT N4MKA N4MM N4MMR N4MMT N4MQU N4MRM N4MTB N4MTE N4MTT N4MU N4MUH N4NA N4NE N4NM N4NN N4NO N4NPG N4NQ N4NQY N4NSS N4NT N4NTO N4NX N4NYK N4NYY N4OA N4OGW N4OI N4OO N4OVQ N4OX N4OYR N4PB N4PD N4PF N4PIR N4PL N4PN N4POW N4PQX N4PSE N4PSK N4PV N4PVH N4PWG N4PWH N4PX N4PY N4PYI N4QH N4QM N4QNT N4QS N4QU N4QWF N4QWZ N4QXU N4RA N4RCE N4RCL N4RF N4RJ N4RKK N4RLD N4RLG N4RLI N4RM N4RMK N4RP N4RQO N4RRR N4RS N4RSP N4RSS N4RT N4RU N4RV N4RWA N4RZ N4SAX N4SD N4SEC N4SF N4SGC N4SIA N4SJJ N4SJK N4SL N4SNI N4SO N4SOC N4SSI N4ST N4SV N4SVC N4TB N4TDJ N4TGD N4TH N4TL N4TLG N4TO N4TOL N4TP N4TT N4TTN N4TUT N4TY N4TZ N4UA N4UC N4UCM N4UEZ N4UF N4UK N4UM N4UN N4UP N4USB N4USS N4UU N4UVC N4UW N4UY N4VA N4VC N4VEJ N4VI N4VLK N4VN N4VPM N4VT N4VUG N4VV N4VZ N4WCQ N4WD N4WDC N4WE N4WLL N4WMB N4WO N4WQH N4WW N4WXB N4WZ N4XAD N4XD N4XFF N4XH N4XL N4XU N4XYZ N4YA N4YA/KH7 N4YB N4YCI N4YDU N4YE N4YHC N4YTM N4YXS N4ZAK N4ZH N4ZR N4ZY N4ZYM N4ZZ N5/WP3C N5AAR N5AJD N5AN N5AQ N5ATM N5ATQ N5ATT N5AU N5AVF N5AW N5AW/0 N5AYB N5BA N5BCA N5BE N5BEG N5BIG N5BMD N5CHA N5CM N5CQ N5CR N5CW N5DD N5DDX N5DF N5DGK N5DHB N5DM N5DN N5DO N5DT N5DTT N5DX N5DX/2 N5DY N5EE N5EIL N5EKO N5EKW N5ENU N5EYQ N5FNC N5FO N5FOC N5FPW N5GD N5GI N5GNA N5GPI N5GW N5HA N5HC N5HD N5HDX N5HEK N5HHS N5HR N5HV N5HYP N5HZ N5IB N5IDX N5II N5III N5INV N5IR N5IT N5ITO N5JE N5JED N5JGK N5JJ N5JJC N5JR N5JSC N5KAE N5KB N5KD N5KDA N5KDV N5KF N5KGY N5KIP N5KLE N5KO N5KT N5KW N5KWD N5KWE N5KWN N5KXI N5KYD N5LAP N5LB N5LFA N5LFE N5LHW N5LJL N5LLC N5LNR N5LOC N5LSW N5LTR N5LYJ N5MDB N5ME N5MEG N5MI N5MKY N5ML N5MOA N5MT N5MV N5MZX N5NA N5NAA N5NHJ N5NN N5NOU N5NU N5NYM N5OAO N5OB N5OCO N5ODX N5OE N5OF N5OFW N5OHL N5OK N5OLA N5OMK N5OP N5OSK N5PAC N5PBP N5PD N5PHT N5PJ N5PP N5PT N5PV N5QH N5QIM N5QJ N5QQ N5RB N5RD N5RGH N5RGV N5RKN N5RLM N5RMS N5RN N5RP N5RR N5RWF N5RZ N5SEZ N5SJ N5SJ/7 N5SKT N5SLY N5SMO N5SMQ N5SR N5STT N5SYV N5TB N5TDX N5TF N5TIT N5TJ N5TJD N5TLH N5TM N5TOO N5TT N5TU N5TXK N5TZH N5UE N5UI N5UL N5UM N5UOV N5URI N5UUA N5UWY N5VGK N5VHT N5VI N5VR N5VU N5VX N5WA N5WC N5WE N5WJ N5WMQ N5WNG N5WRX N5WS N5WVR N5WW N5WX N5XE N5XJ N5XTR N5XU N5XZ N5YA N5YBG N5YE N5YHF N5YJZ N5YT N5YYF N5YZ N5ZC N5ZK N5ZKF N5ZMP N5ZN N5ZNI N5ZO N5ZQ N5ZRE N5ZT N5ZVW N5ZY N6AA N6AB N6ABT N6ACL N6ACS N6ADO N6AJ N6AJS N6AN N6AQT N6AR N6BHX N6BIZ N6BOW N6BT N6BXO N6CA N6CHU N6CKV N6CL N6CW N6CY N6CYB N6DBF N6DD N6DDG N6DE N6DHZ N6DME N6DNU N6DRU N6DW N6DXX N6DZ N6EB N6ED N6EE N6EED N6EP N6ERD N6ERD/1 N6ESL N6ETO N6FC N6FE N6FMF N6FRX N6FS N6FSH N6FUB N6FX N6GA N6GAT N6GD N6GEO N6GHZ N6GK N6GKJ N6GP N6GQ N6GR N6GWH N6HA N6HC N6HCN N6HE N6HEW N6HI N6HK N6IC N6IE N6IET N6ITY N6IV N6JBR N6JC N6JCN N6JF N6JN N6JNL N6JRL N6JS N6JV N6JW N6JZ N6KI N6KIN N6KN N6KR N6KT N6KW N6KZW N6LB N6LDP N6LHL N6LL N6LN N6LZ N6MA N6MB N6MDV N6MEJ N6MI N6MJ N6MM N6MST N6MSY N6MU N6MW N6MZ N6NA N6NBB N6NC N6NF N6NFB N6NG N6NH N6NHO N6NKT N6NNA N6NO N6NR N6NT N6NU N6NUL N6OI N6OIL N6OKU N6ONC N6OO N6OPE N6ORB N6OS N6OSB N6OV N6PAT N6PAW N6PAZ N6PE N6PEQ N6PF N6PGQ N6PM N6PN N6PVI N6QD N6QQ N6QZS N6RC N6RDR N6REK N6RH N6RK N6RM N6RND N6RNN N6RO N6RQW N6RRY N6RSH N6RT N6RV N6RVI N6RW N6SD N6SJ N6SN N6SPP N6SS N6SU N6TA N6TCE N6TEM N6TG N6TP N6TQ N6TU N6TV N6TVN N6UBO N6UOE N6US N6UTC N6VH N6VI N6VNI N6VOC N6VOH N6VR N6VXM N6VZ N6WBL N6WG N6WIN N6WJA N6WJN N6WM N6WMD N6WS N6WT N6XDX N6XG N6XI N6XVZ N6YEU N6YFM N6YJ N6YMM N6YMM/7 N6YUV N6YVW N6ZAX N6ZD N6ZE N6ZFO N6ZI N7AAL N7AC N7ACI N7AED N7AER N7AHE N7AMA N7AME N7AN N7ANO N7AP N7AT N7AU N7AUE N7BBX N7BD N7BK N7BT N7BV N7CGN N7CIX N7CPM N7CQR N7CRK N7CVZ N7CW N7DA N7DB N7DCP N7DD N7DED N7DF N7DJD N7DLI N7DR N7DRM N7DSX N7ECV N7EDK N7EEE N7EIE N7EKD N7EL N7ELB N7ELL N7EMT N7ENN N7EO N7EPD N7ESU N7ET N7ET/DU7 N7FF N7FG N7FJC N7FKI N7FLT N7FUL N7GCO N7GFB N7GG N7GL N7GOA N7GP N7GP/8 N7GR N7GTE N7GVV N7GYL N7GZS N7HCJ N7HHS N7HR/P N7ID N7IHB N7ILO N7IP N7IR N7IV N7IVV N7IW N7IY N7JB N7JI N7JO N7JP N7JPF N7JT N7JX N7KA N7KC N7KD N7KDT N7KDT/4 N7KE N7KM N7KN N7KRN N7LAN N7LD N7LE N7LOX N7LR N7MB N7MDS N7MJ N7MQ N7MRN N7MU N7MYA N7MZW N7NAV N7NEV N7NG N7NKN N7NM N7NR N7NT N7NTQ N7NWL N7ON N7PHS N7PHY N7PI N7PMS N7PR N7PS N7PV N7QAX N7QOZ N7QQ N7QT N7QXB N7RBP N7RC N7RCS N7RD N7RK N7RMK N7RO N7RP N7RQ N7RVD N7RXL N7RY N7SE N7SG N7SJM N7SMT N7SU N7SVI N7TB N7TCO N7TES N7TK N7TM N7TMS N7TND N7TNT N7TR N7TU N7TW N7TY N7UA N7UJJ N7UR N7US N7US/9 N7UVH N7UW N7UWD N7VD N7VF N7VPN N7VR N7VS N7VT N7VV N7VZU N7WA N7WJ N7WR N7WS N7WU N7WW N7WY N7WY/0 N7XA N7XCZ N7XE N7XM N7XR N7XRM N7XS N7XU N7YA N7YDH N7YK N7YQ N7YY N7ZA N7ZG N7ZN N7ZUF N7ZZ N8AA N8AHH N8AID N8AKO N8AP N8AU N8AYY N8BAG N8BAP N8BB N8BC N8BEG N8BI N8BJQ N8BUS N8BV N8CAL N8CC N8CD N8CEY N8CIJ N8CJ N8CL N8CM N8CMQ N8CPA N8CUB N8CWU N8DC N8DD N8DE N8DEA N8DGD N8DJX N8DNA N8DPD N8DT N8DUT N8DX N8DXR N8EA N8EA/4 N8EGZ N8EHP N8EHW N8EI N8EK N8EMA N8ET N8EV N8EW N8EWX N8FKF N8FLU N8FMD N8FTB N8FTJ N8FXH N8FYL N8GAS N8GB N8GLS N8GND N8GOU N8GU N8GU/4 N8HHG N8HKU N8HM N8HMG N8HO N8HP N8HRZ N8HSD N8HTG N8HWV N8HZM N8IDA N8II N8IIV N8IL N8IPO N8IQV N8IRC N8IVN N8IW N8JAX N8JBR N8JD N8JDM N8JFJ N8JGG N8JIW N8JK N8JLM N8KD N8KDX N8KG N8KIM N8KQ N8KR N8KRB N8KRO N8KSG N8KV N8LA N8LC N8LCU N8LES N8LGP N8LJ N8LR N8LRG N8LWX N8MAS N8ME N8MME N8MPF N8MR N8MRC N8MZ N8NA N8NAV N8NB N8ND N8NFE N8NJA N8NK N8NM N8NN N8NPM N8NTX N8NVI N8NX N8NYE N8OCN N8OGI N8OH N8OHO N8OL N8OO N8OO/5 N8OQ N8OT N8OVI N8OXC N8OZY N8PCN N8PDS N8PE N8PFK N8PGI N8PMR N8PPF N8PR N8PW N8PWM N8QF N8QIK N8QMU N8QX N8RA N8RFR N8RJP N8RQJ N8RR N8RU N8RW N8RY N8RZO N8SBE N8SDR N8SL N8SOB N8SSE N8SSH N8STN N8TCP N8TD N8TFD N8TIX N8TR N8TW N8UKD N8UM N8UMP N8URE N8VIC N8VK N8VQG N8VV N8VW N8VWY N8WAE N8WCP N8WGE N8WI N8WNA N8WRL N8WS N8WXQ N8XA N8XC N8XCO N8XE N8XGS N8XKZ N8XQM N8XTH N8XX N8YN N8YQX N8YSZ N8YXR N8ZI N8ZR N8ZSS N8ZVB N8ZXB N9AB N9ADG N9AFU N9AGC N9AI N9AKR N9ATD N9AU N9AUG N9AW N9BBE N9BC N9BD N9BD/6 N9BDF N9BL N9BPL N9BT N9BUB N9BWT N9CCA N9CD N9CDD N9CDX N9CHN N9CIF N9CIQ N9CK N9CKL N9CO N9CQB N9CQG N9DBS N9DIX N9DJ N9DK N9DK/7 N9DPR N9DR N9DT N9EAJ N9EAT N9EAX N9EE N9EJR N9EMC N9EN N9EP N9EXL N9EXU N9FB N9FC N9FDE N9FKL N9FME N9FN N9FUE N9GB N9GBB N9GBK N9GG N9GGO N9GH N9GQA N9GUE N9GUN N9GVP N9GXI N9GZ N9HDE N9HF N9HH N9HJB N9HSJ N9ID N9IO N9ITB N9IW N9JA N9JCM N9JCS N9JF N9JFF N9JNQ N9JR N9JYJ N9JZY N9KDB N9KJU N9KPH N9KR N9KT N9KX N9KY N9KZ N9LAH N9LD N9LF N9LJX N9LQ N9LXF N9LY N9LYE N9MB N9MDS N9MKZ N9MM N9MR N9MS N9MT N9MUF N9MW N9MZF N9NA N9NA/7 N9NAQ N9NB N9NBC N9NC N9NE N9NFT N9NJS N9NM N9NQA N9NS N9NT N9NTC N9OF N9OJC N9OK N9OL N9OU N9OY N9PL N9PUZ N9PWM N9PY N9QAP N9QK N9QVQ N9QWV N9RC N9RD N9RDX N9RJM N9RJV N9RMB N9RP N9RRM N9RU N9RV N9RVB N9RZS N9SB N9SD N9SDC N9SE N9SES N9SIA N9SJ N9SSW N9STF N9SW N9SZ N9TF N9TGR N9TK N9TNT N9TO N9TR N9TV N9TX N9UA N9UDO N9UFO N9UM N9UPG N9VD N9VI N9VJ N9VPV N9WEW N9WFT N9WG N9WK N9WKZ N9WPY N9WVM N9WZL N9XIM N9XKH N9XLV N9XO N9XP N9XQX N9XX N9XYV N9YB N9YH N9YHF N9YK N9YKE N9YLE N9YLZ N9YO N9YZA N9ZA N9ZI N9ZM N9ZOE N9ZYL NA0ED NA0N NA0PW NA1KW NA1LZ NA1ME NA1RA NA1S NA1VT NA2AA NA2CC NA2D NA2M NA2NA NA2NY NA2R NA2SW NA2U NA2X NA3CT NA3D NA3E NA3M NA3P NA3R NA3V NA4A NA4C NA4CW NA4DC NA4DX NA4E NA4EA NA4J NA4K NA4M NA4MM NA4O NA4RR NA4W NA4X NA5AR NA5C NA5CW NA5G NA5J NA5M NA5N NA5NN NA5Q NA5V NA5W NA5WH NA5YO NA6AF NA6D NA6MB NA6MG NA6O NA6Q NA6S NA6US NA7H NA7OM NA7RH NA7TB NA7UT NA8N NA8U NA8V NA8W NA9J NA9L NA9M NA9O NA9RB NA9U NA9US NA9VY NB0BN NB0Z NB1N NB1U NB2A NB2S NB3A NB3I NB3R NB3T NB3W NB4C NB4F NB4M NB4N NB6Q NB6U NB8F NC0A NC0B NC0DX NC1A NC1CC NC1I NC1M NC1V NC3G NC3P NC3Y NC4AB NC4AR NC4AZ NC4H NC4KW NC4MI NC4RT NC4RY NC4S NC4VA NC5G NC5O NC5T NC6D NC6DX NC6K NC6Q NC6R NC6V NC6X NC7J NC7M NC8C NC8I NC8N NC9A NC9F NC9O NC9W ND0C ND0J ND0L ND0MM ND0N ND0TS ND1C ND1L ND1X ND2B ND2K ND2O ND2T ND3D ND3L ND3N ND3R ND4DX ND4G ND4K ND4L ND4Q ND4V ND4X ND4Y ND6P ND6U ND7J ND7K ND8D ND8DX ND8G ND8L ND9A ND9C ND9E ND9G ND9M ND9Z NE0DA NE0DB NE0F NE0U NE1AR NE1B NE1C NE1D NE1F NE1LA NE1QP NE1RD NE1Y NE2CC NE2I NE3F NE3H NE3I NE3K NE3R NE4C NE4EA NE4EI NE4H NE4N NE4S NE4TN NE4Y NE5B NE5C NE5E NE5TH NE5W NE6DX NE6I NE6LE NE6M NE6O NE6R NE6RD NE7D NE7DX NE7EE NE7O NE7R NE7X NE8J NE8O NE8O/4 NE8P NE8P/4 NE8Z NE9A NE9H NE9M NE9O NE9U NF0B NF0N NF1A NF1G NF1H NF1J NF1L NF1O NF1R NF2NY NF2RS NF3C NF3E NF3R NF4A NF4J NF5U NF6A NF7D NF7E NF7R NF7T NF8H NF8M NF8O NF8R NF9V NG0C NG0E NG0G NG0T NG0Z NG1I NG1M NG1R NG2D NG2H NG2J NG2O NG2P NG2X NG3A NG3I NG3J NG3K NG3R NG3Y NG4C NG4S NG4V NG5E NG5M NG6M NG6O NG6R NG6W NG6X NG7A NG7E NG7M NG7Z NG9B NG9C NG9M NG9N NG9P NG9R NH2DX NH6AB NH6JC NH6N NH6P NH6T NH6T/W4 NH6V NH6WZ NH6XO NH6Y NH6Z/W7 NH7A NH7NJ NH7O NI0C NI0DX NI0G NI0K NI0L NI0R NI1L NI2M NI2S NI3Q NI4E NI4TG NI4Y NI5DX NI5L NI5T NI6BB NI6G NI6W NI7R NI7T NI8K NI8R NI8Z NI9H NI9Y NJ0F NJ0U NJ1F NJ1Q NJ1S NJ1T NJ2BB NJ2F NJ2J NJ2N NJ3I NJ3K NJ4F NJ4P NJ4Q NJ4U NJ4V NJ4Z NJ5N NJ6G NJ6P NJ6Q NJ7Y NJ8BB NJ8G NJ8J NJ8M NJ8V NJ9C NJ9Q NJ9R NJ9U NK1K NK1N NK1Z NK2Q NK3V NK3Y NK4DX NK4L NK5G NK5P NK6A NK6M NK7B NK7C NK7J NK7L NK7U NK7Z NK8A NK8N NK8O NK8Q NK9G NK9H NK9I NK9O NK9Y NL7D NL7QC NL7S NL7V NL7WK NL8F NM1C NM1J NM1JY NM1Y NM2L NM2O NM2R NM3A NM4O NM4V NM4W NM5G NM5M NM5NM NM5S NM5Z NM6M NM7W NM8O NM9P NN0G NN0Q NN1AA NN1C NN1D NN1F NN1N NN1SS NN2DX NN2E NN2K NN2L NN2NN NN2T NN2T/P NN3AA NN3AS NN3Q NN3RP NN3U NN3V NN3W NN4/S51TA NN4C NN4DF NN4DX NN4FL NN4GG NN4JM NN4K NN4NC NN4NT NN4RB NN4SA NN4SS NN4TT NN4U NN4X NN5D NN5E NN5J NN5K NN5O NN5P NN5T NN5Z NN6AA NN6B NN6D NN6DX NN6EE NN6NN NN6T NN6XX NN7A NN7A/1 NN7CW NN7M NN7NN NN7SS NN7W NN7ZZ NN8M NN8MU NN8R NN8UU NN9C NN9DD NN9T NO0B NO0L NO0T NO2C NO2D NO2N NO2T NO3J NO3K NO3M NO3U NO4J NO4W NO4Y NO5F NO5V NO5W NO6E NO6M NO6T NO7B NO7DE NO7E NO7R NO8C NO8I NO8J NO9C NO9E NO9O NP2GG NP2J NP2KM NP2KW NP2L/W4 NP2N NP2P NP2Q NP2VI NP2X NP3A NP3F NP3K NP3LY NP3MR NP3OT NP3V NP3X NP3YL NP4A NP4AW NP4DX NP4ET NP4G NP4G/KP2 NP4JV/7 NP4JV/W7 NP4LA NP4LW NP4RA NP4TX NP4WW NP4Z NQ0D NQ0M NQ0N NQ0W NQ2B NQ2C NQ2F NQ4I NQ4K NQ4T NQ5K NQ5M NQ6N NQ6X NQ7R NQ8O NQ8Y NQ9A NQ9B NQ9R NR0D NR0L NR0R NR0T NR1DX NR1R NR1X NR2C NR2H NR3C NR3M NR3N NR3X NR3Z NR4A NR4AA NR4C NR4CW NR4D NR4L NR4M NR4N NR4O NR4X NR5M NR5NN NR5T NR5W NR6O NR6Q NR7DX NR7N NR7RR NR7T NR7V NR7Z NR8N NR8O NR8Z NR9E NR9K NR9Q NS0R NS1RA NS1T NS2N NS2X NS3C NS3L NS3T NS3U NS3X NS4T NS4X NS5V NS6C NS6T NS7A NS7B NS7I NS7U NS8O NS8Q NS9DX NS9F NS9I NS9X NT0EE NT0K NT0Z NT1K NT2A NT2DR NT2I NT4A NT4D NT4J NT4K NT4MM NT4W NT4X NT4Z NT5I NT5TT NT5V NT6F NT6Q NT6X NT7H NT7MM NT8P NT8V NT9E NT9F NT9M NT9O NU0C NU0P NU0Q NU0W NU1AW NU1B NU1M NU1N NU1O NU1P NU1T NU1X NU2F NU2J NU2Q NU3A NU4B NU4E NU4I NU4M NU4N NU4R NU4Y NU5A NU5DE NU6O NU6S NU6V NU7F NU7J NU7K NU7P NU7Y NU8A NU8L NU8M NU8Z NV0P NV0S NV1N NV1Q NV2D NV2K NV4A NV4B NV4C NV4G NV4H NV4Z NV5F NV6D NV7CV NV7JB NV8N NV9J NV9L NV9Z NW0G NW0M NW0T NW1P NW2K NW2P NW3Y NW3Y/1 NW4CD NW4DX NW4N NW4TF NW4V NW4WB NW5H NW5Q NW6H NW6P NW6V NW7D NW7E NW7M NW7R NW7US NW8D NW8F NW8S NW8U NW9S NX0I NX0L NX0U NX1K NX1P NX1P/7 NX1Q NX2O NX2W NX2X NX3A NX3L NX3P NX3T NX3U NX3V NX3Z NX4N NX4TT NX4XX NX5D NX5M NX5O NX6D NX6T NX7W NX8G NX8Y NX9G NY0A NY0J NY0K NY0MN NY0T NY0V NY0W NY1E NY1H NY1Z NY2H NY2MC NY2NY NY2PO NY3A NY3B NY3C NY3DX NY4A NY4D NY4G NY4I NY4JB NY4M NY4N NY6DX NY6N NY6Y NY7N NY7Z NY8K NY8T NY9H NY9P NY9R NY9X NZ0F NZ0T NZ1D NZ1I NZ1J NZ1R NZ1U NZ2X NZ2Z NZ3D NZ3O NZ4B NZ4CW NZ4DX NZ4FF NZ4N NZ5A NZ5F NZ5O NZ5X NZ6G NZ6Q NZ6T NZ7M NZ7P NZ7Q NZ7V NZ8J NZ9Z OA1F OA2DRG OA4/EA7TN OA4/XQ3SA OA4A OA4AI OA4DOS OA4DX OA4O OA4SS OD5OJ OD5PY OD5VB OD5YA OD5ZF OD5ZZ OE0HQ OE100KFV OE100RAD OE100TKW OE100XA OE100XFG OE100XHQ OE18SGU OE1ABV OE1CIW OE1EMS OE1GAQ OE1H OE1HFC OE1HHB OE1KFR OE1KLW OE1PMU OE1PPA OE1RFU OE1SGU OE1SZW OE1TKW OE1VMC OE1WWL OE1XA OE1XTU OE2ASL OE2BZL OE2CAL OE2DYL OE2E OE2GEN OE2IGP OE2KNN OE2LCM OE2ROL OE2RPL OE2S OE2UKL OE2VEL OE2XBH OE2XWL OE3A OE3AIS OE3BKC OE3CDS OE3CQM OE3DXA OE3EVA OE3FVU OE3GAS OE3GCU OE3GSA OE3HAU OE3IDE OE3K OE3KAB OE3KLU OE3L OE3LZA OE3MCS OE3MWS OE3NEC OE3NHW OE3OPW OE3OSB OE3PFS OE3PKU OE3RTB OE3TWA OE3VBU OE3VET OE3VIA OE3WMA OE3WMW OE3XOE OE4AAC OE4VIE OE4WBW OE4XLC OE5ABI OE5BGN OE5CCN OE5CSP OE5CWO/P OE5CYL OE5FDM OE5FPL OE5GA OE5HDN OE5HIL OE5JSL OE5KKP OE5OHO OE5PEN OE5RLM OE5SMU OE5T OE5WHN OE5XRL OE6AKD OE6CUD OE6HLF OE6HWF OE6MBG OE6MDF OE6MMD OE6RAD OE6RDD OE6SQD OE6STD OE6TQG OE6U OE6XG OE6Z OE7GJ OE8ANK OE8MOS OE8Q OE8SPW OE8TED OE8TLK OE8TTR OE9CBV OE9GHV OE9KFV OE9MCV OE9MON OE9R OE9TXF OE9WGI OG0C OG0Z OG1D OG1N OG2B OG2M OG2N OG2P OG2X OG30YL OG3A OG3G OG3P OG3R OG3X OG4A OG4T OG55W OG5A OG5G OG60F OG66X OG6N OG6OF OG6SF OG70AD OG73X OG7A OG7F OG7O OG8T OG95AA OG9W OH/M0CFW OH0C OH0JWL OH0R OH0T OH0V OH0W OH0X OH0Z OH10A OH10TA OH10X OH1AF OH1C OH1CH OH1EB OH1F OH1HAQ OH1HB OH1HD OH1HS OH1IU OH1JD OH1JW OH1JZ OH1KAG OH1KB OH1LA OH1LAR OH1LEG OH1LEU OH1LWZ OH1MA OH1MM OH1MN OH1MRR OH1ND OH1NDA OH1NOA OH1NPM OH1NX OH1O OH1POR OH1QX OH1RX OH1SIC OH1TD OH1TM OH1TS OH1TX OH1VR OH1WZ OH1X OH1XFE OH1XT OH1XX OH1XY OH1Z OH2BAD OH2BAH OH2BAI OH2BAV OH2BBT OH2BEN OH2BFG OH2BFP OH2BH OH2BJ OH2BKX OH2BLV OH2BN OH2BO OH2BP OH2BR OH2BV OH2CK OH2CV OH2DA OH2EA OH2ECG OH2EUU OH2EV OH2FB OH2FNR OH2FT OH2FTA OH2GEK OH2HAN OH2HOD OH2HQ OH2HZ OH2ID OH2IS OH2JIU OH2JSR OH2K OH2KI OH2KM OH2KW OH2LNH OH2LU OH2LZI OH2MGA OH2MM OH2MQ OH2MZA OH2MZB OH2N OH2NC OH2NT OH2OV OH2PM OH2PQ OH2RM OH2T OH2VZ OH2XX OH2YL OH3077F OH3AC OH3BCX OH3BHL OH3BKL OH3CV OH3EX OH3FM OH3GD OH3GGQ OH3GLY OH3GZ OH3HS OH3HTR OH3JF OH3JR OH3KAV OH3KQ OH3LQK OH3M OH3MA OH3MC OH3NAQ OH3NU OH3OJ OH3P OH3PE OH3RB OH3RF OH3RT OH3UU OH3WW OH3XR OH3XZ OH3Z OH4A OH4BCS OH4KA OH4SS OH4TQ OH4TY OH4UI OH4XX OH5BM OH5BQ OH5BW OH5C OH5EAB OH5EP OH5HUZ OH5JJL OH5KW OH5MNJ OH5MQ OH5NE OH5NQ OH5NZ OH5RP OH5TB OH5TS OH5UQ OH5VT OH5XO OH5YU OH5Z OH5ZA OH6AC OH6BA OH6BG OH6BQH OH6CT OH6DH OH6DX OH6E OH6ECM OH6EOG OH6GDX OH6JE OH6K OH6LEZ OH6LI OH6LW OH6MW OH6NC OH6NEQ OH6NJ OH6NV OH6OS OH6QU OH6RE OH6RX OH6SWR OH6TN OH6UBC OH6UX OH6VV OH6XA OH6XU OH6XY OH6Z OH70BH OH73ELK OH7CW OH7EBA OH7GGX OH7HM OH7JL OH7K OH7KBF OH7KC OH7KD OH7L OH7MFO OH7MJU OH7R OH7UG OH7VS OH7WV OH7WW OH7X OH7XI OH8A OH8AA OH8CW OH8EJW OH8F OH8GET OH8JIX OH8JJ OH8KA OH8KVY OH8L OH8MBN OH8NW OH8SE OH8TU OH8WR OH8WW OH8X OH9A OH9AR OH9GGY OH9GIT OH9MM OH9S OH9UFO OH9VC OH9VD OH9W OI3V OJ0DX OJ9A OK/LZ3SF OK1AGE OK1AL OK1AMF OK1ANT OK1AOU OK1AOV OK1AOZ OK1APY OK1ARO OK1ATH OK1ATP OK1AU OK1AUC OK1AWC OK1AWG OK1AWH OK1AWZ OK1AXA OK1AXB OK1AXG OK1AY OK1AYD OK1AYW OK1BJ OK1BLU OK1BPN OK1C OK1CF OK1CID OK1CLD OK1CRM OK1CT OK1CZ OK1DAR OK1DBE OK1DBS OK1DCS OK1DG OK1DGU OK1DHP OK1DJS OK1DKO OK1DKR OK1DLX OK1DM OK1DMP OK1DO OK1DOL OK1DOR OK1DOT OK1DOY OK1DOZ OK1DPU OK1DRX OK1DSA OK1DSZ OK1DTC OK1DU OK1DUG OK1DVA OK1DWC OK1DWF OK1DWH OK1DWQ OK1DX OK1DXK OK1DXW OK1DZD OK1EP OK1ES OK1FAK OK1FCA OK1FCR OK1FDY OK1FED OK1FFU OK1FGD OK1FGS OK1FGU OK1FHD OK1FHI OK1FIM OK1FKD OK1FLT OK1FMG OK1FMJ OK1FMX OK1FNT OK1FOG OK1FPG OK1FPQ OK1FPS OK1FRD OK1FRO OK1FSM OK1FU OK1FWG OK1FZM OK1GK OK1GS OK1GSB OK1GTH OK1GU OK1HBP OK1HCG OK1HEH OK1HFM OK1HFP OK1HMP OK1HRA OK1IBP OK1IDD OK1IE OK1ITK OK1JBL OK1JDJ OK1JOK OK1JR OK1JRU OK1JST OK1JVS OK1K OK1KA OK1KDO OK1KHA OK1KIR OK1KJO OK1KKI OK1KMU OK1KMU/P OK1KPU OK1KQH OK1KSL OK1KSO OK1KT OK1KTI OK1LL OK1LO OK1LRD OK1LV OK1M OK1MAW OK1MDK OK1MGJ OK1MGW OK1MJA OK1MKU OK1MMN OK1MNV OK1MR OK1MSL OK1MSP OK1NF OK1NG OK1NP OK1NYD OK1OA OK1OFM OK1OM OK1OPT OK1P OK1PBU OK1PFM OK1PI OK1PMA OK1PR OK1PRI OK1PX OK1QA OK1QM OK1RK OK1RP OK1RPL OK1RR OK1RZ OK1SI OK1SLA OK1SP OK1T OK1TA OK1TD OK1TE OK1TFH OK1TN OK1TQ OK1TVL OK1UKC OK1UKV OK1UKY OK1ULL OK1USP OK1USU OK1UU OK1UXH OK1VD OK1VDJ OK1VK OK1VKC OK1VPO OK1VVT OK1WCF OK1WF OK1WMJ OK1WSL OK1XBF OK1XC OK1XGB OK1XV OK1YM OK1YR OK2ABU OK2AK OK2AP OK2BEN OK2BFN OK2BGN OK2BH OK2BHD OK2BJ OK2BJK OK2BJM OK2BLD OK2BMA OK2BMJ OK2BMU OK2BND OK2BNF OK2BOB OK2BPU OK2BQZ OK2BRJ OK2BRQ OK2BRS OK2BRV OK2BRX OK2BSQ OK2BTJ OK2BTK OK2BU OK2BUJ OK2BUT OK2BV OK2BXA OK2BXU OK2BXW OK2BYH OK2BYW OK2BZ OK2BZE OK2CLW OK2CMW OK2CPV OK2CQR OK2CSU OK2D OK2DIK OK2DM OK2EA OK2EQ OK2EW OK2FB OK2FD OK2FN OK2FQZ OK2GG OK2GU OK2HBR OK2HBY OK2HFC OK2HIJ OK2HMS OK2JOW OK2KFK OK2KG OK2KJU OK2KOJ OK2KOS OK2KR OK2KUB OK2LF OK2LW OK2MBP OK2MC OK2MG OK2MPB OK2NAJ OK2NO OK2OCT OK2ON OK2OP OK2PAD OK2PAU OK2PAY OK2PBG OK2PBR OK2PDK OK2PDM OK2PDN OK2PEM OK2PF OK2PGJ OK2PIM OK2PMU OK2PTU OK2PVF OK2PVX OK2PYA OK2QA OK2QX OK2RN OK2RU OK2RVM OK2RZ OK2SFP OK2SG OK2SGW OK2SGY OK2SLS OK2SPD OK2SPS OK2SRO OK2SSJ OK2SWD OK2TBC OK2TC OK2TDM OK2TOP OK2TRN OK2TS OK2TSG OK2UHP OK2VIR OK2VK OK2VV OK2VWB OK2VX OK2WMC OK2XDD OK2YZ OK2ZA OK2ZV OK2ZW OK3AA OK3C OK3DM OK3EQ OK3M OK3RM OK3X OK4C OK4DZ OK4FF OK4FX OK4GP OK4K OK4MM OK4RQ OK4WW OK4X OK5D OK5E OK5EPC OK5ET OK5IM OK5KA OK5M OK5MM OK5NW OK5OK OK5PM OK5SA OK5SWL OK5T OK5TK OK5W OK5WF OK5Z OK5ZZ OK6AA OK6AB OK6CX OK6DJ OK6K OK6N OK6O OK6OK OK6T OK6TT OK6TW OK6W OK6Y OK7AN OK7AZ OK7CM OK7FL OK7FOC OK7GU OK7K OK7KW OK7N OK7O OK7PN OK7PY OK7R OK7RJ OK7SX OK7T OK7W OK7Y OK7Z OK8AU OK8AW OK8DM OK8GG OK8KM OK8NM OK8SMS OK8UN OK8WW OK9RKZ OL0A OL0M OL0W OL100A OL100BMI OL100BOB OL100RCS OL100T OL100ZH OL19YOTA OL1A OL1B OL1C OL1M OL1R OL1Z OL250VEK OL2X OL3A OL3E OL3R OL3Z OL4A OL4ACF OL4C OL4W OL5A OL5B OL5D OL5J OL5M OL5W OL5Y OL6A OL6D OL6P OL6T OL70JN OL725PLZ OL7C OL7M OL7O OL7P OL7T OL8HQ OL8K OL8M OL8R OL8W OL90ITALIA OL9A OL9HQ OL9R OL9Z OM0AS OM0ATP OM0CS OM0ET OM0M OM0MW OM0R OM0WR OM100CSR OM1AKU OM1AVL OM1DK OM1II OM1ST OM2AAZ OM2AGN OM2AM OM2BH OM2BK OM2DT OM2KI OM2MP OM2RA OM2VL OM2WX OM2XA OM2XW OM2Y OM3BA OM3BH OM3BS OM3BY OM3CAQ OM3CAZ OM3CDN OM3CGN OM3CM OM3CMK OM3CPF OM3CQ OM3CUG OM3CW OM3DX OM3ED OM3EY OM3GI OM3IAG OM3KFF OM3KFO OM3KHT OM3KKF OM3KSI OM3KWZ OM3LQ OM3LU OM3MV OM3PA OM3PC OM3PQ OM3R OM3RJB OM3RM OM3RWB OM3SEM OM3TBG OM3TLE OM3TZZ OM3WZ OM3YAD OM3YCA OM3YDX OM3YFT OM3ZBG OM3ZU OM3ZWA OM4ANJ OM4ANO OM4AY OM4CI OM4DU OM4EX OM4IK OM4KK OM4M OM4MM OM4O OM4Q OM4WW OM5CD OM5CM OM5DM OM5DX OM5KM OM5KP OM5LR OM5M OM5MX OM5NA OM5NL OM5RM OM5RW OM5UM OM5VS OM5WW OM5XX OM5ZW OM6A OM6AL OM6AMP OM6AT OM6DN OM6MS OM6MW OM6RM OM6T OM6TU OM6TX OM6W OM70KAP OM7A OM7AES OM7AG OM7AT OM7AW OM7AX OM7DX OM7JG OM7KW OM7LM OM7LW OM7M OM7OM OM7PY OM7RU OM7SR OM7TJ OM7YC OM7ZM OM83IHWC OM8A OM8AA OM8ADM OM8ADU OM8AQ OM8AT OM8CD OM8CW OM8DD OM8FF OM8FR OM8GT OM8HG OM8JP OM8KT OM8LA OM8LM OM8MF OM8MM OM8ON OM8PG OM8ST OM8VL ON1AEY ON1DX ON1TO ON2AD ON2CQ ON2KMJ ON2WIM ON3AHA ON3AR ON3BZ ON3CQ ON3DI ON3DV ON3FZT ON3GEO ON3LAD ON3LX ON3MK ON3ND ON3PJA ON3PQ ON3SAT ON3UN ON3VP ON3VS ON3WM ON4AAV ON4ACW ON4AHF ON4AHS ON4AIP ON4AMC ON4AMP ON4ANE ON4APU ON4ARF ON4ARJ ON4AST ON4AT ON4ATK ON4ATW ON4AVJ ON4AXU ON4AYM ON4BAG ON4BHQ ON4CAS ON4CAU ON4CBA ON4CCC ON4CH ON4CJG ON4CLF ON4CP ON4CT ON4CW ON4DN ON4DS ON4EC ON4GPE ON4HRT ON4IA ON4IE ON4IZ ON4KCY ON4KGA ON4KHG ON4KLG ON4KMB ON4KNP ON4LAN ON4LDP ON4LDU ON4LEX ON4LG ON4LN ON4LY ON4MAD ON4MCL ON4MW ON4PJA ON4PQ ON4PS ON4QJ ON4QX ON4RO ON4STA ON4SV ON4TTT ON4UN ON4UP ON4UZ ON4VDV ON4VP ON4VT ON4WW ON5AFB ON5AM ON5AV ON5BWE ON5CW ON5DN ON5DZ ON5GF ON5GM ON5GQ ON5IA ON5JT ON5LL ON5LL/P ON5NQ ON5RA ON5RZ ON5SV ON5TC ON5TO ON5UJ ON5UK ON5WL ON5WU ON5ZZ ON6AT ON6BV ON6CC ON6CK ON6DP ON6EF ON6FC ON6GMT ON6GO ON6HX ON6KZ ON6LEO ON6LO ON6LR ON6MG ON6MR ON6MS ON6MX ON6NA ON6NL ON6NW ON6OO ON6PH ON6PQ ON6QO ON6QRP ON6QZ ON6SAS ON6SAT ON6SX ON6UF ON6UL ON6VOX ON6WL/P ON6YH ON6YP ON6ZK ON6ZV ON7AH ON7ARQ ON7BBR ON7BJ ON7BT ON7CC ON7CL ON7DQ ON7EH ON7ET ON7FL ON7HLU ON7HX ON7IDX ON7KC ON7LG ON7LO ON7MV ON7NT ON7PM ON7PQ ON7PS ON7TG ON7TK ON7UI ON7USB ON7VG ON7WI ON7ZB ON7ZM ON7ZV ON8AJ ON8AK ON8BB ON8DM ON8KW ON8NT ON8ON ON8PHD ON8PU ON8SAT ON8SGA ON8SS ON8UK ON8VT ON8WV ON8ZA ON9COP ON9EEE OO2O OO3O OO4O OO4P OO4T OO5G OO7P OO7R OO7W OO9O OP0HQ OP0J OP0P OP1A OP2A OP4A OP4CHK OP4DN OP4K OP5K OP5T OP6A OP6AT OP7B OQ4A OQ4B OQ4Q OQ4T OQ4U OQ5M OR0A OR1X OR1Z OR2A OR2AD OR2F OR2M OR3A OR3R OR4ACA OR4CHK OR4DN OR4K OR4T OR5T OR6AT OR7CC OS0C OS0S OS0X OS4U OS5K OS8A OS8D OT1A OT1L OT1S OT1V OT2J/P OT2X OT4A OT4R OT5A OT5K OT5L OT5Q OT5T OT5X OT6M OT70ATH OT7D OT7E OT8T OU1E OU2I OU2PA OU2V OU2W OU3A OU4N OU4O OU5KF OU7M/P OU8A OV1CDX OV1RR OV2T OV3X OX3HI OX3LX OX3XR OX50HRH OX7A OY1CT OY1R OY4M OY9JD OZ0B OZ0J OZ0JD OZ0MJ OZ0TX OZ11A OZ1A OZ1AA OZ1AAR OZ1ACB OZ1ADL OZ1AOO OZ1BZJ OZ1D OZ1DAE OZ1DTF OZ1DYI OZ1ELY OZ1GNN OZ1HDF OZ1HQ OZ1HX OZ1IKY OZ1IVA OZ1JVX OZ1KEF OZ1KIH OZ1KKH OZ1KVM OZ1LFI OZ1LO OZ1NF OZ1OM OZ1OP OZ1QX OZ1RE OZ1TJ OZ2A OZ2ABI OZ2AR OZ2BKK OZ2DAN OZ2J OZ2JOP OZ2LC OZ2PBS OZ2PJ OZ2TF OZ2U OZ30EU OZ3ABU OZ3MC OZ3SM OZ3TQ OZ4ACK OZ4CG OZ4EDR OZ4FA OZ4FF OZ4MD OZ4MU OZ4NA OZ4NE OZ4O OZ4QX OZ4SOP OZ4UN OZ4VW OZ5DX OZ5E OZ5GOL OZ5HP OZ5KU OZ5RM OZ5UR OZ5W OZ6AGX OZ6CM OZ6EG OZ6GH OZ6OM OZ6PI OZ6TL OZ7A OZ7AM OZ7BQ OZ7BQ/P OZ7D OZ7DK OZ7EA OZ7HB OZ7JZ OZ7X OZ7YL OZ7YY OZ80FOC OZ8ABA OZ8AE OZ8BV OZ8CT OZ8PG OZ8SW OZ8ZS OZ9GA OZ9KL OZ9V OZ9VO P29RR P33W P3AA P3N P3X P3Z P40A P40AA P40AU P40C P40E P40HQ P40L P40SW P40T P40W P40WL P40X P40XX P43A P43L P43R P44K P44W P49MR P49X P49Y PA0AA PA0AGA PA0AGF PA0ALG PA0AWH PA0B PA0CGB PA0CMF PA0CMU PA0CT PA0DIN PA0FAW PA0FEI PA0FSK PA0FVH PA0GJV PA0GJV/P PA0GMS PA0GRU PA0HWB PA0INA PA0JED PA0JHS PA0JLS PA0JNH PA0KBN PA0LEG PA0LIE PA0LUX PA0M PA0MBD PA0MIR PA0MJM PA0O PA0PIW PA0Q PA0RBA PA0RBL PA0RDY PA0RHA PA0RRS PA0SIM PA0SKP PA0TCA PA0TJJ PA0VAJ PA0VAM PA0VDV PA0VHA PA0VLA PA0VLY PA0WBP PA0WKI PA0WRS PA0ZAV PA10TA PA1ADR PA1AW PA1B PA1BC PA1BD PA1BK PA1BX PA1CA PA1CC PA1CW PA1DV PA1EJO PA1FJ PA1FNW PA1FP PA1JM PA1LEX PA1LIO PA1M PA1MAR PA1MR PA1MUC PA1MV PA1P PA1PE PA1REG PA1RLM PA1RR PA1RVG PA1SW PA1T PA1TK PA1TO PA1VC PA1VD PA1X PA2A PA2A/P PA2ALF PA2CHM PA2CVD PA2DK PA2DKW PA2DW PA2HD PA2IP PA2JCB PA2JWN PA2KW PA2LEN PA2LO PA2LP PA2LS PA2PCH PA2PKZ PA2REH PA2RG PA2RU PA2S PA2SAM PA2TA PA2TMS PA2VS PA2W PA2WO PA2Z PA33EUDXF PA350RB PA3AAV PA3ACA PA3ADU PA3AIN PA3AJI PA3ALK PA3AM PA3AOD PA3AP PA3ARM PA3ATN PA3BFH PA3BUD PA3BWD PA3BXR PA3C PA3CDN PA3CJP PA3CNI PA3CSG PA3CUI PA3CVJ PA3CVR PA3CWN PA3CXB PA3DAM PA3DAT PA3DBS PA3DDP PA3DJY PA3DRL PA3DTR PA3DUU PA3DVA PA3DZF PA3DZM PA3EAQ PA3ECJ PA3EEG PA3ELQ PA3EMN PA3EPA PA3EPO PA3EQN PA3EQO PA3EVY PA3EWG PA3EWP PA3EYC PA3EZC PA3FQA PA3FYG PA3FYS PA3GCU PA3GCV PA3GDD PA3GDG PA3GDY PA3GEO PA3GLH PA3GQF PA3GRM PA3GUU PA3GVI PA3GVQ PA3GXB PA3GXF PA3GYK PA3HCC PA3HFJ PA3HGC PA3HGF PA3HGL PA3HGP PA3I PA3J PA3JB PA3JQD PA3KVE PA3MET PA3MM PA3MRO PA3N PA3OES PA3P PA3T PA3TA PA3TG PA3VTC PA3X PA40WM PA4A PA4AO PA4B PA4DN PA4EL PA4G PA4GDR PA4HM PA4J PA4JJ PA4M PA4MRS PA4O PA4R PA4T PA4VHF PA4WG PA4WM PA4Y PA5AD PA5CT PA5DX PA5FER PA5FN PA5GU PA5HA PA5KM PA5KT PA5MW PA5N PA5O PA5P PA5SKY PA5TT PA5V PA5VK PA5VL PA5WT PA6A PA6AA PA6ANT PA6B PA6HQ PA6IOT PA6NB PA6T PA6TRIS PA6V PA6W PA6X PA6Y PA75AGF PA75LEX PA7A PA7AL PA7DN PA7F PA7FB PA7JWC PA7KR PA7LV PA7MDJ PA7PYR PA7RA PA7UKW PA7WW PA8AD PA8KW PA8MM PA8R PA8VK PA8ZB PA9AD PA9CC PA9CW PA9DD PA9G PA9HR PA9JO PA9LUC PA9M PA9RX PA9S PB0ACU PB0R PB1HF PB2A PB2T PB2Z PB33EUDXF PB4PT PB5DX PB5X PB75A PB7TT PB7Z PB8DX PC1EMR PC1PM PC2A PC2D PC2F PC2KP PC2L PC2T PC2X PC2Y PC3M PC3T PC4AD PC4C PC4H PC4U PC4Y PC5C PC5D PC5Q PC5WB PC6C PC7B PC7E PC7T PC9DB PC9F PC9T PD0AG PD0ARI PD0CQ PD0FSB PD0GAN PD0HF PD0HRS PD0JMH PD0LQQ PD0MBY PD0ME PD0MGX PD0MHZ PD0MNF PD0PIW PD0PVL PD0RS PD0RSO PD0RXP PD0WR PD0WVB PD1ABO PD1AT PD1ATH PD1B PD1BHZ PD1BU PD1JN PD1RO PD1RP PD1WO PD2C PD2DVB PD2DX PD2GSP PD2JAM PD2JCB PD2PKM PD2TW PD2VY PD2WL PD3AL PD3ALX PD3AM PD3ED PD3EM PD3KWS PD3MDM PD3OES PD4L PD4R PD4RD PD5ISW PD5JFK PD5L PD5MVH PD5PET PD5WSQ PD75WR PD7CJT PD7DX PD7JVW PD7Q PD7RB PD7RF PD8A PD8DX PD9GD PD9MK PD9NR PD9X PD9Z PE00T PE0TS PE1BNF PE1BQE PE1CPJ PE1CUP PE1ER PE1EWR PE1F PE1FJN PE1FTV PE1HB PE1HLS PE1HWO PE1IWT PE1L PE1LUB PE1NYQ PE1ODY PE1OFJ PE1OKY PE1OYB PE1RDP PE1RMO PE1RUS PE1RWL PE2AE PE2HG PE2HLA PE2JMR PE2K PE2LZ PE3T PE3V PE4A PE4BAS PE4KH PE5JW PE5O PE5TS PE75W PE7HW PE9GG PF0X PF1MO PF1SCT PF2018DOK PF2018HAR PF2018SLO PF2018WOR PF2X PF5T PF5X PF6HPP PF6W PF6X PF7DKW PF80FOC PG00T PG1R PG2A PG2AA PG2K PG2W PG3N PG4I PG5M PG5V PG6C PG6F PG7M PG7V PG8M PG90T PH0AS PH100KLM PH1V PH2A PH4E PH5C PH7A PH9E PI25KAR PI40FL PI4A PI4AAG PI4AMF PI4AMF/P PI4APD PI4CC PI4CG PI4COM PI4D PI4DHV PI4DLZ PI4DTC PI4DX PI4ECC PI4ET PI4FL PI4FRG PI4KAR PI4M PI4MM PI4NOV PI4RCB PI4SHB PI4VAD PI4VPO PI4VPO/P PI4YLC PI75AMF PJ0DX PJ2DX PJ2HQ PJ2K PJ2ND PJ2T PJ4A PJ4CC PJ4DX PJ4G PJ4K PJ4KY PJ4NG PJ4P PJ4Q PJ4R PJ4V PJ4Z PJ5/KG9N PJ5/N6YEU PJ5/SP6EQZ PJ5K PJ5Z PJ6A PJ7AA PJ7DH PJ7PL PJ7TM PP1CZ PP1WW PP2BK PP2CC PP2CS PP2FRS PP2PS PP2RON PP5AA PP5AO PP5AX PP5BI PP5BT PP5BZ PP5DAN PP5DZ PP5EI PP5EJ PP5FB PP5FE PP5IP PP5JN PP5JR PP5KC PP5KR PP5NY PP5PG PP5RLC PP5RT PP5RX PP5TG PP5VB PP5WEB PP5XA PP5ZCX PP6ZZ PP7DX PP7JR PP7LP PP8ZAC PQ2HX PQ5B PQ8VA PR1M PR1T PR2B PR2D PR2E PR2W PR4C PR4T PR5K PR5O PR5T PR7AA PR7AB PR7AD PR7AP PR7AR PR7AX PR7AYE PR7CJ PR7FB PR7GA PR7GY PR7HR PR7KSA PR7MB PR7RBA PR8KW PR8MET PS2C PS2T PS4L PS7AW PS7KC PS8AB PS8DX PS8HF PS8MT PS8RV PT2ADM PT2AW PT2SR PT2ZXR PT3T PT4A PT4B PT4T PT5D PT5J PT7AV PT7BI PT7BL/VE3 PT7WM PT7ZT PT8CW PT8SBR PT9AL PT9DX PU1JAM PU1JSV PU1LMN PU1MIL PU2KNM PU2LEW PU2LFU PU2NAX PU2NBI PU2OLQ PU2PZE PU2RTO PU2SDX PU2TNT PU2TRX PU2UAF PU2UJG PU2URP PU2USK PU2VCP PU2WDF PU2WDX PU2XMY PU2XYT PU2YBW PU3CAL PU3KNG PU3RTS PU4ABA PU4ALZ PU4ENY PU4GOD PU4YJS PU5BOY PU5DUD PU5WMA PU7ASP PU7GMY PU8MGB PU8MRS PU8UMR PU8YAB PU8YPL PU9ATH PU9DCB PU9OJZ PV0L PV2B PV2M PV2P PV7M PV8AA PV8AAS PV8ABC PV8ADI PV8AJ PV8AX PV8AZ PV8DC PV8DR PV8DX PV8IG PW1F PW2A PW2F PW2T PW5N PX2A PX2B PX2C PX2E PX2M PX2MTV PX5T PX7A PX7COM PY0F PY0F/PY7RP PY0FR PY1AN PY1AX PY1CC PY1DX PY1FI PY1FOG PY1FOX PY1FR PY1GB PY1GQ PY1IR PY1JR PY1KB PY1LV PY1NP PY1NS PY1NX PY1PL PY1RI PY1RY PY1SAD PY1SL PY1SX PY1TL PY1VOY PY1XR PY1ZB PY1ZV PY2AA PY2AB PY2AE PY2ALR PY2ANY PY2APK PY2AXH PY2BN PY2CAT PY2CDR PY2COY PY2CP PY2CX PY2DMZ PY2DPM PY2DR PY2DV PY2DY PY2EBD PY2EDU PY2EJ PY2EL PY2EM PY2EU PY2EX PY2EZ PY2F PY2FCL PY2FRQ PY2FSG PY2FSR PY2GTA PY2GZ PY2IAX PY2ITM PY2IU PY2JNV PY2JOS PY2KC PY2KEY PY2KG PY2KGB PY2KJ PY2KP PY2KS PY2LCD PY2LED PY2LPM PY2MC PY2MD PY2MET PY2MIA PY2MIG PY2MM PY2MNL PY2MP PY2MSR PY2NA PY2NDX PY2NFE PY2NFT PY2NY PY2NZ PY2OA PY2OKB PY2OP PY2OQ PY2OSD PY2OZ PY2PIM PY2PT PY2QI PY2QT PY2RAR PY2REC PY2RH PY2RKG PY2RMY PY2RSA PY2RTB PY2RX PY2SAA PY2SBY PY2SEI PY2SHF PY2SR PY2TDX PY2TI PY2TIM PY2TKB PY2TMV PY2TOP PY2UD PY2UDB PY2UGO PY2VCP PY2VM PY2VOA PY2VOX PY2VQ PY2VZ PY2WLM PY2WND PY2XB PY2XC PY2XIZ PY2XJ PY2XL PY2XO PY2XRP PY2XV PY2YS PY2ZA PY2ZEA PY2ZQ PY2ZR PY2ZW PY2ZZ PY3AA PY3CAL PY3DX PY3EW PY3JK PY3KN PY3OL PY3OO PY3OZ PY3PA PY3TX PY3VB PY3XX PY3ZZR PY4ARS PY4AX PY4AZ PY4BK PY4BZ PY4CK PY4DK PY4DX PY4EK PY4GG PY4HO PY4JW PY4LH PY4ME PY4NA PY4OY PY4RL PY4SR PY4VG PY4WWW PY4XC PY4XX PY4XZ PY4YY PY4ZO PY5AB PY5AKW PY5AMF PY5AP PY5ARP PY5AS PY5BH PY5DC PY5DD PY5DJ PY5DK PY5EG PY5EJ PY5FB PY5FO PY5HC PY5II PY5IN PY5JR PY5JY PY5PLL PY5QW PY5SAT PY5WD PY5WW PY5XH PY5ZD PY5ZHP PY5ZW PY6AZ PY6HD PY6TS PY7BC PY7BR PY7KG PY7RP PY7XC PY8WW PY9GC PY9MP PZ5CO PZ5K PZ5RA PZ5T PZ5W PZ5XX R0AA R0AGY R0AIB R0AK R0AS R0CAF R0CB R0CBW R0CD R0CK R0CM R0CW R0JD R0JF R0LL R0LM R0MZ R0QAF R0RG R0RT R0SBI R0SBZ R0SI R0SR R0UT R0WC R0XA R125IL R1AK R1AL R1AO R1AT R1AT/P R1AU R1AV R1BBL R1BC R1BCO R1BW R1CA R1CA/P R1CAA R1CAM R1CAV R1CC R1DX R1FW R1FZ R1IO R1IV R1KRG/P R1LN R1MQ R1NA R1NI R1NO R1NU R1NW R1QE R1ZM R1ZY R2AA R2AB R2AD R2AHS R2AJA R2AL R2ANX R2AOD R2AOQ R2ARR R2ATC R2ATW R2AY R2BV R2CA R2DA R2DFD R2DGG R2DGN R2DJ R2DPM R2DR R2DRT R2DS R2DX R2DX/3 R2EL R2ET/9 R2FBZ R2FI R2FZ R2GB R2HM R2LAC R2OA R2OFF R2OM R2PT R2PU R2RA R2RT R2SA R2UZ R2UZ/P R2VA R2VA/P R2VM R2XM R2YA R2ZA R2ZC R2ZCA R2ZX R3AAA R3AIR R3AP R3AQ R3AT R3BB R3CW R3DCB R3DCX R3EA R3EE R3EG R3EK R3ER R3EU R3FA R3FC R3FO R3FP R3FX R3GD R3GM R3GZ R3HH R3HQ R3IK R3KBO/P R3KF R3KM R3KQ R3LA R3LB R3LC R3MAI R3MBD R3MU R3NAN R3OA R3OM R3OQ R3OR R3OR/P R3OZ R3PIQ R3PV R3PW R3QA R3QF R3QV R3QX R3RAE R3RK R3RR R3RT R3RU R3RZ R3SM R3ST R3SV R3THA R3UAF/P R3UG R3VA R3VL R3VO R3VR R3WA R3WR R3WZ R3XA R3XA/P R3XAA R3XAI R3XP R3XX R3YAO R3YC R3ZJ R3ZV R3ZZ R4AC R4ACY R4AJ R4BZ R4CI R4DK R4FA R4FAN R4FCJ R4FD R4FET R4GM R4HA R4HC R4HM R4IB R4II R4IM R4IO R4IQ R4IT R4KO R4KW R4LAJ R4LAK R4LC R4LR R4LZ R4MA R4MM R4OF R4PL R4RB R4RE R4RM R4RN R4RR R4RT R4SA R4SO R4WAA R4WAA/P R4WAB R4WAE R4WBF R4WR R4WT R4WT/P R4WW R4WZ R4YY R5ACQ R5AJ R5AK R5AO R5AU R5AV R5BI R5CA R5CW R5DC R5DC/P R5DF R5DT R5DV R5FC R5FI R5FN R5FP R5FQ R5FU R5FY R5GR R5PW R5QQ R5RT/P R5WW R6AF R6AJ R6AP R6BT R6CA R6CC R6CO R6CR R6CS R6CW R6CZ R6CZ/P R6DBT R6DG R6DIP R6DIR R6DM R6DX R6FEJ R6FY R6GE R6HV R6KA R6KEE R6KVA R6KX R6KY R6LAQ R6LBK R6LHQ R6MR R6YY R7AB R7AC R7AM R7AO R7AO/P R7AT R7AW R7AX R7AY R7BN R7CA R7CD R7CF R7CT R7DA R7DX R7FF R7GU R7GX R7HF R7IT R7KA R7KBV R7KD R7KO R7KR R7KU R7KW R7KX R7KZ R7LA R7LV R7LY R7MC R7MM R7MP R7MT R7MU R7MY R7NA R7NK R7NP R7NV R7NW R7NZ R7RAG R7RC R7RDE R7RF R7RIB R7RM R7TQ R7TU R7TW R8AA R8AFX R8CAA R8CT R8FF/8 R8FR R8FT R8IA R8IZ R8LA R8LO R8MB/1 R8OD R8OM R8TA R8TT R8US R8UT R8WF R8WO R8XF R8XW R9AAL R9AB R9AE R9AM R9AY R9CB R9CD R9CW R9CX R9CZA R9DA R9DX R9FBT R9FM R9GM R9HAF R9HQ R9IR R9JAD R9LM R9LY R9MA R9MAV R9MI R9MJ R9MM R9OA R9OK R9OO R9PA R9PS R9QQ R9RA R9RT R9SD R9SG R9SN R9SS R9ST R9SXX R9TV R9UA R9UG R9UP R9VK R9WDV R9WN R9WXK R9XC R9XG R9XM R9XS R9XV R9XZ R9YC R9YU RA0ACM RA0AM RA0AY RA0FF RA0LE RA0LMK RA0LMO RA0LQ RA0QD RA0S RA0SMS RA0WHE RA1AL RA1ALC RA1AW RA1CE RA1CP RA1CW RA1OW RA1QD RA1QFU RA1QN RA1QX RA1TU RA1WZ RA1ZZ/3 RA2F RA2FB RA2FN RA2FO RA2FU RA2FV RA3AGF RA3AN RA3AOS RA3BL RA3BQ RA3CW RA3DAD RA3DGH RA3DI RA3DIH RA3DJA RA3DNC RA3DQP RA3DX RA3E RA3EA RA3FD RA3FY RA3GZ RA3IAI RA3LJ RA3M RA3MBC RA3MD RA3MU RA3NC RA3OA RA3QH RA3QK RA3QSY RA3R RA3RLJ RA3RPS RA3S RA3SI RA3TE RA3THN RA3TT RA3UAG RA3UT RA3V RA3VE RA3VX RA3W RA3WDK RA3WT RA3WUG RA3XCZ RA3XEV RA3XGA RA3XI RA3XM RA3Y RA3YDA RA3YZ RA3ZH RA4AAJ RA4AAT RA4ACX RA4AR RA4CC RA4CON RA4DAR RA4DB RA4DR RA4FUN RA4FUT RA4FW RA4FWA RA4HBS RA4HL RA4HMT RA4HPI RA4L RA4LBS/3 RA4LPC RA4LW RA4NCC RA4PBE RA4PQ RA4SAT RA4UDC RA4W RA4Y RA4ZA RA5AD RA5AQ RA5G RA6A RA6AAW RA6AN RA6C RA6CA RA6DT RA6FUZ RA6FYL RA6GW RA6HSM RA6L RA6LIS RA6MQ RA6WF RA6YDX RA7A RA7C RA7E RA7KO RA7KW RA7KW/P RA7M RA7R RA7RA RA9A RA9AAA RA9AEA RA9AFZ RA9AMC RA9AP RA9AU RA9CCK RA9CMO RA9DZ RA9FEL RA9JBA RA9JM RA9LT RA9MA RA9MLR RA9MX RA9P RA9SDT RA9SF RA9SK RA9SN RA9UAD RA9UN RA9V RA9XSL RA9Y RA9YE RC0A RC0AAB RC0C RC0CB RC0L RC1O RC1W RC1W/P RC2A RC2P RC2Q RC2SB RC3C RC3D RC3F RC3FL RC3P RC3U RC3W RC4AC RC4I/P RC5Z RC6AA RC6R RC6U RC6YA RC7A RC7B RC7C RC7KY RC7LI/3 RC7LK RC7LS RC8I RC8SA RC8SC RC9A RC9F RC9HB RC9HC RC9J RC9O RC9S RC9X RD0A RD0L RD1A RD1AH RD1T RD3AD RD3AEF RD3ARU RD3DS RD3FT RD3FV RD3G RD3MF RD3R RD3WR RD3ZQ RD4A RD4F RD4FD RD4W RD4W/P RD4WM RD5D RD7D RD7KW RD8D RD8O RD9CX RD9D RD9SA RD9U RF9C RG0A RG1A RG2A RG3B RG3T RG4A RG4D RG4I RG5A RG5A/6 RG5R RG6G RG7A RG7M RG7N RG8U RG9A RG9O RI0BC RI1ANL RJ3A RJ3F RJ4I RJ4P RJ6J RJ7A RJ7J RJ7M RJ9I RJ9M RJ9U RK0S RK0UN RK0UT RK0W RK1F RK1M RK1NA RK1QWX RK2A RK2M RK3AW RK3BX RK3DK RK3DSW RK3DWW/P RK3DXW RK3DYB RK3E RK3ER RK3FM RK3FWE RK3IR RK3IT RK3LC RK3MXT RK3P RK3PWR RK3QY RK3RX RK3SWB/P RK3SWS RK3T RK3TD RK3TT RK3Y RK4FAO RK4FD RK4FF RK4FM RK4HYT RK4NB RK4PA RK4R RK4S RK4W RK6AQP RK6ART RK6ATQ RK6AX RK6HG RK6K RK7A RK7F RK7X RK8I RK8O/P RK9AK RK9AX RK9AY RK9AY/P RK9CYA RK9DO RK9LWA RK9M RK9Q RK9UE RL1F RL2D RL3A RL3AW RL3BZ RL3DD RL3DX RL3F RL3QI RL3T RL4A RL4F RL4I RL4R/6 RL5A RL5D RL6C RL6K RL6M RL6MF RL8C RL9A RL9I RL9L RL9LD RL9M RL9O RL9Y RM0A RM0F RM0L RM0M RM0W RM1F RM1O RM1Q RM1T RM2A RM2D RM2E RM2P RM2R RM2T RM2T/P RM2U RM3A RM3C RM3D RM3DA RM3F RM3G RM3M RM3TO RM3V RM3Z RM4A RM4F RM4HZ RM4K RM4M RM4N RM4R RM4W RM4W/P RM5A RM5F RM5O RM5W RM5Y RM6AA RM6G RM6J RM6LD RM6Y RM7C RM7F RM7G RM7M RM7M/P RM8A RM8G RM8L RM8W RM9A RM9I RM9RZ RM9T RM9X RN0A RN0C RN0CT RN0D RN0JN RN0S RN1A RN1AO RN1CW RN1ON RN2F RN2FA RN2FQ RN3AAB RN3AC/P RN3AM RN3AOE RN3BL RN3CT RN3DKE RN3F RN3K RN3KK RN3N RN3OG RN3P RN3QO RN3S RN3TT RN3YA RN3Z RN3ZJJ RN3ZR RN4ABD RN4ACX RN4AO RN4CA RN4HAB RN4HFJ RN4HKH RN4NF RN4SC RN4SN RN4SS RN4W RN4ZT RN5AA RN5M RN6A RN6AJ RN6AT RN6CH RN6CV RN6DR RN6L RN6LG RN7A RN7F RN85KN RN8N RN8U RN9N RN9RF RN9S RN9T RN9U RN9W RN9WT RO1A RO1M RO2E RO3G RO4A RO4S RO5F RO5K RO5O RO5X RO7K RO7N RO7T RO9A RO9O RO9T RQ0C RQ2Q RQ3M RQ4C RQ4D RQ4F RQ4N RQ5D RQ6A RQ6M RQ7M RQ7R RQ9A RQ9F RQ9O RT0C RT0F RT0O RT1A RT1I RT1L RT1M RT1O RT1Q RT1S RT2C RT2D RT2F RT2H RT2O RT2X RT3A RT3C RT3D RT3F RT3G RT3K RT3LA RT3M RT3M/P RT3N RT3O RT3P RT3S RT3T RT3U RT3W RT4D RT4D/P RT4F RT4F/P RT4G RT4H RT4M RT4O RT4P RT4S RT4U RT4W RT5A RT5C RT5G RT5G/1 RT5K RT5P RT5Q RT5T RT5X RT5Z RT6A RT6C RT6DI RT6DX RT6K RT6N RT6Y RT7B RT7C RT7N RT8O RT8U RT9A RT9I RT9J RT9K/6 RT9L RT9S RT9T/3 RT9X RT9YA RT9YT RU0A RU0LAX RU0LL RU1A RU1AB RU1AC RU1AT RU1M RU1OZ RU3A RU3C RU3DM RU3DX RU3EG RU3FM RU3GF RU3OZ RU3SD RU3TJ RU3UB RU3UR RU3VV RU3W RU3WR RU3XF RU3XJ RU3XK RU3XW RU3XY RU3YAA RU4A RU4AA RU4AN RU4H RU4HP RU4HU RU4I RU4LM RU4PH RU4PU RU4SM RU4SO RU4SS RU4SW RU4W/3 RU5A RU5A/P RU5K RU5TT RU5X RU6AV RU6B RU6C RU6CO RU6DX RU6DX/P RU6K RU6M RU6MO RU6YJ RU6YK RU7A RU7K RU7KA RU7KD RU7L RU7M RU8T RU8W RU9AC RU9CC RU9CI RU9CK/7 RU9I RU9LA RU9SO RU9TN RU9UC RV0CG RV1AQ RV1CB RV1CC RV1OM RV3A RV3AMV RV3DBK RV3FF RV3FW RV3ID RV3LO RV3M RV3MR RV3PN RV3TG RV3U RV3VR RV3YM RV3YR RV3ZD RV3ZN RV6AA/P RV6AAA RV6ARZ RV6ASU RV6AVU RV6F RV6LL RV7B/9 RV7C RV7F RV7M RV9CM RV9CQ RV9CTD RV9CVA RV9CX RV9DC RV9UCN RV9UP RV9V RV9WB RW0A RW0AB RW0AJ RW0AR RW0BG RW0CF RW0CN RW0CR RW0LD RW0LL RW0M RW0SR RW0UM RW1A RW1AI/9 RW1AM RW1C RW1CW RW1F RW1M RW1QN RW2F RW2WR RW3AI RW3AO RW3DC RW3DIA RW3DKK RW3DU RW3DW RW3DY RW3FR RW3FY RW3LA RW3LB RW3LY RW3PK RW3PX RW3PZ RW3QJ RW3QM RW3RN RW3RQ RW3TT RW3VA RW3VM RW3WP RW3WR RW3WX RW3X RW3XW RW3XZ RW3YA RW3YB RW3ZA RW4AD RW4CLF RW4CLF/3 RW4CR RW4F RW4HD RW4HFH RW4HL RW4HM RW4HS RW4M RW4NN RW4NW RW4O RW4S RW4W RW4WA RW4WN RW4WZ RW4YA/9 RW4YD RW5CW RW6AEW RW6APC RW6CR RW6K RW6MAO RW6PA RW7F RW7K RW7KM RW7M RW8T RW9AV RW9AV/8 RW9AW RW9CD RW9CQ RW9DX RW9H RW9JZ RW9MZ RW9OW RW9QA RW9RN RW9SW RW9TP RW9USA RW9UY RW9W RW9WT RX0AE RX0L RX1A RX1AG RX3AEX RX3AFE RX3APM RX3ASQ RX3DFL RX3DPK RX3DR RX3DTN RX3MM RX3N RX3PR RX3QFN RX3QNE RX3RZ RX3VF RX3XA RX3Z RX4CD RX4HJ RX4HX RX6ACJ RX6AM RX6AOB RX6CB RX6FJ RX6LG RX6LN RX7A RX7K RX7M RX7T RX9AF RX9AX RX9CAZ RX9CC RX9CCJ RX9CM RX9FB RX9JX RX9SN RX9SR RX9UAG RX9UK RX9WN RY0A RY2A RY2FAC RY3D RY3F RY4A RY4F RY4W RY6AAG RY6Y RY7A RY7Y RY9C RZ0SN RZ1A RZ1O RZ1OA RZ1OK RZ1ZR RZ2A RZ2D RZ3AMW RZ3AV RZ3DC RZ3DJ RZ3DJU RZ3DW RZ3DX RZ3DZ RZ3DZI RZ3EM RZ3F RZ3FQ RZ3LC RZ3MM RZ3Q RZ3QM RZ3Z RZ3ZZ RZ4A RZ4AG RZ4AJ RZ4AZ RZ4FB RZ4I RZ4PXO RZ4WZ RZ4Z RZ5A RZ5D RZ6AK RZ6BR RZ6D RZ7T RZ8U RZ9A RZ9AD RZ9JZ RZ9L RZ9OQ RZ9P RZ9SZ RZ9SZ/3 RZ9U RZ9UO RZ9WA RZ9WU RZ9WYY RZ9YI S01WS S0S S5/G4BJM S50A S50B S50BCC S50BH S50C S50D S50DK S50E S50G S50GB S50HQ S50J S50K S50L S50LD S50O S50P S50PB S50R S50RY S50S S50U S50VZZ S50W S50X S50XX S51A S51AC S51AD S51AU S51B S51CK S51DD S51DI S51DV S51DX S51EC S51F S51I S51IV S51J S51JQ S51KD S51KV S51MA S51MF S51NM S51R S51RBC S51RE S51RJ S51RU S51SL S51TA S51TC S51V S51W S51WU S51XA S51YI S51Z S51ZJ S52A S52AA S52AQ S52AU S52AW S52BT S52C S52CO S52CQ S52CU S52D S52DD S52F S52GBB S52GO S52GP S52GS S52K S52LA S52LW S52M S52NR S52NY S52ON S52OT S52P S52R S52RA S52W S52WD S52WW S52X S52ZD S52ZW S53A S53AJK S53AR S53BB S53D S53DT S53EA S53EO S53EOP S53F S53FO S53GO S53JW S53K S53M S53MJ S53MM S53MR S53N S53NW S53O S53OQ S53Q S53Q/P S53R S53RA S53RM S53S S53TM S53V S53X S53XX S53Z S53ZO S5400J S549APR S54E S54G S54I S54K S54O S54W S54X S54Z S54ZZ S55AW S55BA S55DX S55G S55KA S55N S55NF S55O S55OO S55PR S55T S55VM S55W S55X S55Z S56A S56AX S56B S56BL S56K S56KHL S56M S56P S56RPJ S56WYB S56X S56Y S573G S57A S57AC S57AL S57AM S57ANA S57AT S57AV S57AW S57AY S57C S57DX S57EA S57FJ S57HPW S57J S57K S57KM S57KV S57L S57LR S57M S57MPU S57NAW S57NL S57NML S57NW S57O S57PKT S57Q S57RO S57S S57SWR S57T S57TA S57TW S57U S57UN S57WJ S57WO S57WW S57X S57XX S57XZ S57YK S57Z S57ZT S589PMC S58AT S58BO S58D S58FA S58J S58K S58KA S58M S58MU S58N S58O S58P S58Q S58RU S58WW S58Y S59A S59AA S59ABC S59ACP S59AV S59CM S59D S59DCD S59DR S59DXX S59GI S59KB S59MA S59MZ S59N S59SV S59T S59X S5OC S5OK S5OR S79HA S79W S9CT SA0BXV SA2APO SA5CDO SA5HUB SA5JUS SA5ZYA SA6BET SA6BPD SA6DXG SA6G SA6MIW SA6P SA6SKA SA6U SA7J SB0A SB3W SB5N/7 SB5X SB6W SB7S SB7W SC0N SC0T SC3A SC3N SC6AS SC6W SC7DX SC9W SD0T SD1A SD3A SD4C SD6E SD6F SD6M SD6O SD6W SD7W SE0C SE0P SE0X SE2T SE3T SE3X SE4E SE5B SE5E SE5L SE5N SE5W SE5Z SE6E SE6K SE6N SE6W SE7Q SE8W SE9HQ SF0A SF0Z SF1Z SF3A SF4D SF5M SF5O SF6C SF6W SF7U SF7WT SF80FOC SG0M SG0X SG3O SG3R SG4F SG5A SG5Z SG7T SG8X SH1YI SI2E SI3A SI5Y SI6M SI6T SI6V SI9AM SJ0X SJ2W SJ3A SJ4F SJ6W SJ8HQ SK0QO SK2AZ SK2T SK3GW SK3W SK40UM SK4EA SK4RY SK50HD SK5A SK5DB SK5LW SK6AW SK6KU SK6NL SK6QA SK7K SM0/YO3XX SM0A SM0AIG SM0DTK SM0FPR SM0GNU SM0HEV SM0HRP SM0LPO SM0LYC SM0MPV/0 SM0N SM0NCS SM0NJO SM0O SM0OEK SM0OY SM0Q SM0R SM0S SM0SRP SM0T SM0Y SM1NJC SM2A SM2BJS SM2CEW SM2CSX SM2CVH SM2EKM SM2LIY SM2ODB SM2OTU SM2S SM2T SM2U SM2UHF SM3CZS SM3EAE SM3EVR SM3GSK SM3LBP SM3MXR SM3NXS SM3OKC SM3OMO SM3PZG SM3TLG SM3YBP SM4ASX SM4CAN SM4DHF SM4EMO SM4HCM SM4RGD SM4W SM4WKT SM5A SM5ACQ SM5ALJ SM5AOG SM5BJT SM5BS SM5CAK SM5CCE SM5CCT SM5CEU SM5CIL SM5CNQ SM5COP SM5CSS SM5CZQ SM5D SM5DJZ SM5DXR SM5DXT SM5EDX SM5EFX SM5ENX SM5EPO SM5F SM5FQQ SM5FUG SM5GLC SM5GMZ SM5ILE SM5IMO SM5INC SM5KQS SM5LBR SM5LNE SM5LW SM5MX SM5NQB SM5Q SM5S SM5SYO SM5X SM5YRA SM6A SM6BZV SM6C SM6CMU SM6CNN SM6CPY SM6CUK SM6DHU SM6DOI SM6E SM6EAN SM6FPC SM6FPG SM6FZO SM6GBM SM6GKT SM6I SM6IQD SM6LJU SM6M SM6MCW SM6MSG SM6MVE SM6NET SM6NJK SM6NOC SM6NT SM6NZA SM6OEF SM6PPS SM6Q SM6TKG SM6TOL SM6UQL SM6VVT SM6VWG SM6YEC SM6YNO SM6YRB SM7/DF4ZL SM7ATL SM7BHM SM7CIL SM7DQV SM7DUZ SM7E SM7EQL SM7GIB SM7GVF SM7IUN SM7LPY SM7PEV SM7RYR SM7SLU SM7YIN SM7ZDI SM8B SM9A SM9X SN0HQ SN0R SN0RX SN0UNESCO SN0W SN100BY SN100L SN100N SN100U SN100ZHP SN1A SN1F SN1I SN1LH SN1T SN1W SN1Y SN20UM SN2B SN2K SN2L SN2M SN2N SN2W SN3A SN3P SN3R SN4A SN4EE SN50KRE SN5A SN5F SN5J SN5L SN5M SN5N SN5O SN5T SN5T/P SN5TS SN5U SN5V SN5W SN5X SN5Y SN6A SN6E SN6O SN75PW SN75W SN7D SN7H SN7O SN7Q SN800WL SN8B SN8D SN8K SN8N SN8Q SN8T SN95IARU SN9A SN9C SN9H SN9I SN9J SN9L SN9M SN9MT SN9S SN9Z SO0N SO100I SO100N SO100POL SO100ZHP SO1MK SO1RON SO2R SO3AK SO3F SO3N SO3O SO3RM SO4M SO4P SO4R SO50WD SO5L SO5MAX SO5N SO5WD SO5Y SO6I SO6R SO6X SO75PW SO7BIT SO7M SO7O SO7T SO90PZK SO9C SO9I SO9M SO9P SO9PC SO9W SP0DF SP0DIG SP0JT SP0T SP100PAZ SP1ADT SP1AEN SP1C SP1D SP1DMD SP1DOZ SP1DSZ SP1FPG SP1FRC SP1GA SP1GZF SP1II SP1IKK SP1JQJ SP1KIZ SP1KM SP1KV SP1MGM SP1MVW SP1MWF SP1MWK SP1MWN SP1NQN SP1NY SP1O SP1RKR SP1V SP2ADY SP2AEK SP2AND SP2AWJ SP2AYC SP2BAS SP2BIR SP2BLC SP2BMX SP2BRI SP2BUC SP2CA SP2CYK SP2DKI SP2EBG SP2EPV SP2EUI SP2EWQ SP2FAP SP2FAV SP2FOV SP2FVN SP2GCE SP2GCJ SP2GJI SP2GJV SP2GK SP2GKQ SP2GKS SP2GMA SP2GOW SP2GUB SP2GWH SP2HFH SP2HHX SP2HMN SP2HMT SP2HMY SP2HNF SP2HOU SP2HWW SP2HYO SP2IKP SP2ILQ SP2IM SP2IW SP2JMR SP2K SP2KAC SP2KDS SP2KPD SP2LNW SP2MF SP2MHC SP2MHD SP2MKI SP2MKT SP2MKZ SP2MW SP2NNO SP2PIK SP2QCW SP2QG SP2R SP2SA SP2SWI SP2TDI SP2TMT SP2TQQ SP2UUU SP2V SP2WDW SP2WGB SP2XX SP2Y SP2YUV SP2YWL SP308PAF SP317PAF SP3A SP3AMO SP3AYA SP3BBS SP3BEJ SP3BES SP3CCT SP3CJS SP3CMX SP3CW SP3CYY SP3DIK SP3DOF SP3EQE SP3FAR SP3FHV SP3FPF SP3FSM SP3FYX SP3GAX SP3GEM SP3GTP SP3GTS SP3H SP3HLM SP3HRN SP3HUU SP3IOE SP3J SP3JDZ SP3JIA SP3JUN SP3KQV SP3KRE SP3KX SP3LD SP3LGF SP3LPR SP3LWP SP3MEO SP3MEP SP3MKS SP3OCC SP3OKS SP3P SP3PL SP3POZ SP3PWL SP3QDM SP3QDX SP3RBG SP3RBR SP3SC SP3SLU SP3UIW SP3UR SP3VT SP3W SP3ZHP SP4AAZ SP4AVG SP4AWE SP4BEU SP4BPH SP4CGJ SP4CUF SP4D SP4DDS SP4DEU SP4DNX SP4DZT SP4F SP4G SP4GAP SP4GHL SP4HHI SP4IGV SP4JCQ SP4JEU SP4JTJ SP4JWR SP4KHM SP4LVK SP4MPH SP4R SP4SHD SP4TB SP4TKR SP4TXI SP4W SP4YPB SP4YR SP4Z SP50DDX SP50ENV SP50ZCF SP5AGU SP5ATO SP5AUC SP5AUY SP5BB SP5BUJ SP5BWO SP5C SP5CGN SP5CJQ SP5CKI SP5CNA SP5CQI SP5DDJ SP5DIR SP5DL SP5DRE SP5DU SP5DXU SP5ECC SP5ELA SP5ELA/8 SP5ELW SP5ENG SP5EPP SP5ES SP5ETS SP5EWX SP5FKW SP5GDY SP5GEO SP5GH SP5GMM SP5GNI SP5GQX SP5GRM SP5I SP5ICS SP5IVC SP5IXS SP5JP SP5JSZ SP5KCR SP5KOG SP5LGT SP5LJP SP5OXJ SP5PAU SP5PDA SP5PDB SP5POT SP5PRF SP5SA SP5SO SP5SR SP5TAT SP5TAZ SP5TE SP5TT SP5UD SP5ULV SP5UUD SP5VIH SP5WA SP5X SP5XO SP5XOV SP5YW SP5Z SP60DXC SP6A SP6AAT SP6AB SP6AEG SP6AXW SP6BEN SP6BXM SP6CC SP6CES SP6CIK SP6CJK SP6CYN SP6CZ SP6DHH SP6DMI SP6DVP SP6DZ SP6ECA SP6EIY SP6FAF SP6FVP SP6FXY SP6GBP SP6GCU SP6GJY SP6GTN SP6GVU SP6HEQ SP6IHE SP6IXF SP6JIU SP6JOE SP6JZL SP6JZP SP6KK SP6KYU SP6LMQ SP6LUV SP6M SP6MLX SP6MQO SP6NIC SP6OJE SP6OJK SP6OPC SP6RTX SP6RYD SP6T SP6TGC SP6TRH SP6U SP6UT SP6VWX SP6YG SP6Z SP6ZT SP7AB SP7AH SP7BCA SP7C SP7CVW SP7CXV SP7D SP7EWL SP7FAH SP7FCX SP7FGA SP7HKK SP7HOV SP7IIT SP7IWA SP7JLH SP7KED SP7LIE SP7MC SP7MFU SP7MOQ SP7MU SP7O SP7OGP SP7P SP7QO SP7RFF SP7SEW SP7SQM SP7TEX SP7VC SP7VTQ SP7WTC SP8AJK SP8ALT SP8ARY SP8AWL SP8BDF SP8BOZ SP8BQL SP8BWE SP8BXL SP8CGU SP8DIP SP8EEX SP8FB SP8FHK SP8GK SP8GNF SP8GQU SP8GSC SP8HKT SP8HPW SP8HWM SP8IOV SP8JMA SP8JUR SP8JUS SP8K SP8KP SP8LBK SP8MRD SP8N SP8ONN SP8P SP8PAI SP8PCF SP8PDE SP8R SP8SN SP8TZ SP8UFY SP90PZK SP9A SP9ADU SP9ATE SP9BCH SP9BGS SP9BMH SP9BNM SP9BRP SP9CCA SP9CUX SP9CVY SP9CXN SP9DLY SP9DNO SP9DTE SP9DTH SP9DUX SP9DWT SP9EMI SP9EML SP9ENV SP9ERY SP9EZM SP9FKQ SP9FMP SP9FOW SP9GFI SP9GKJ SP9GNM SP9GR SP9H SP9HVV SP9HZW SP9IBJ SP9ICU SP9IHP SP9IVD SP9JBE SP9JPA SP9JZT SP9JZU SP9KAG SP9KAO SP9KAT SP9KB SP9KDA SP9KJU SP9KR SP9KTK SP9KUP SP9KVC SP9L SP9LAS SP9M SP9MAT SP9MDY SP9MQA SP9MRO SP9MRP SP9MZH SP9N SP9NLI SP9NSJ SP9NSV/7 SP9ONW SP9PBB SP9PBH SP9PDF SP9PKZ SP9QMP SP9R SP9RCL SP9RQH SP9RTL SP9SDR SP9SPJ SP9TKW SP9TPV SP9TPZ SP9TTG SP9W SP9WPN SP9WZJ SP9WZO SP9XCN SP9Y SP9YFF SP9YGD SP9Z SP9ZCF SP9ZHP SP9ZHR SQ100I SQ1BHH SQ1BSY SQ1BVG SQ1DNJ SQ1GQT SQ1KW SQ1OD SQ1PSA SQ1REX SQ1WO SQ1X SQ2A SQ2BNM SQ2BXI SQ2DYF SQ2EAN SQ2GXO SQ2ICX SQ2JK SQ2NNN SQ2OMK SQ2PHG SQ2RGB SQ2SAT SQ2TOM SQ2WHH SQ3A SQ3F SQ3HLB SQ3JPV SQ3LMY SQ3M SQ3MIS SQ3MZ SQ3MZM SQ3MZU SQ3OGP SQ3PMX SQ3POS SQ3R SQ3RX SQ3SPO SQ3TGV SQ3WW SQ3YAY SQ4DX SQ4HRN SQ4JEN SQ4JUM SQ4KJQ SQ4MP SQ4NR SQ4O SQ4U SQ5AAG SQ5AM SQ5CQ SQ5CW SQ5CZP SQ5EF SQ5EXM SQ5IRH SQ5JQI SQ5JUP SQ5LNU SQ5LTT SQ5M SQ5NAE SQ5NWA SQ5PMB SQ5SAA SQ5STS SQ5SUL SQ5TA SQ5TDZ SQ5ZG SQ6ABC SQ6ELK SQ6ELV SQ6H SQ6IYV SQ6LJV SQ6NDC SQ6PLD SQ6PLE SQ6R SQ6UV SQ7BCN SQ7BFC SQ7BFS SQ7CL SQ7FPD SQ7IQM SQ7LQJ SQ7LRT SQ7NSN SQ7OTK SQ7OVT SQ7OXU SQ7SAU SQ7WOJ SQ8BGR SQ8ERS SQ8F SQ8GHY SQ8GUM SQ8IJZ SQ8L SQ8LEC SQ8LUU SQ8LUV SQ8MFB SQ8N SQ8NGO SQ8NQW SQ8P SQ8PIW SQ8SET SQ8T SQ8VPS SQ8W SQ8Z SQ90PZK SQ9ANS SQ9BDB SQ9C SQ9CAQ SQ9D SQ9DXN SQ9DXT SQ9E SQ9EDZ SQ9FCF SQ9FMU SQ9FQY SQ9GIW SQ9GOL SQ9HQ SQ9HZM SQ9I SQ9IAB SQ9IDE SQ9ITA SQ9IWA SQ9IWS SQ9IWT SQ9JKG SQ9JYK SQ9KDT SQ9KEJ SQ9LPO SQ9MLZ SQ9MZ SQ9NFC SQ9NFQ SQ9NIS SQ9NIU SQ9OB SQ9ORQ SQ9PPT SQ9PUW SQ9PUZ SQ9S SQ9UM SQ9V SQ9X SQ9Z SQ9ZAX SU0ERA SU8X SU9JG SU9TH SV0XAF SV1AAK SV1ABB SV1AER SV1AIQ SV1AJO SV1AOW SV1AZL SV1BDO SV1BFW SV1BJW SV1CEI SV1CIF SV1CIV SV1CNS SV1CQN SV1DKD SV1DOJ SV1DOO SV1DPI SV1DPJ SV1DPP SV1DZI SV1EET SV1EJD SV1EJU SV1ENG SV1FJF SV1FJP SV1GRB SV1IYF SV1JFL SV1JG SV1JGM SV1KYC SV1LV SV1ME SV1MO SV1NJA SV1NK SV1PMH SV1PMQ SV1PMR SV1RHL SV1RMB SV1RUX SV1RVI SV1XV SV2/RW3AL SV2/SV7CUD SV2AEL SV2AIU SV2BBK SV2BFN SV2BXA SV2BXZ SV2CBA SV2CCA SV2CLJ SV2CXI SV2DCD SV2DFK SV2DGH SV2DSJ SV2ESW SV2EVS SV2GJV SV2HJQ SV2HJW SV2HXV SV2HXX SV2JAO SV2JU SV2KBO SV2KF SV2MIN SV2SIF SV2YC SV3AUW SV3AWG SV3DCX SV3EXU SV3FUP SV3QUP SV3QUY/1 SV3RF SV3RPQ SV3SCW SV3SKM SV4AAQ SV4FFL SV4RNT SV5/DL3DRN SV5/OM6NM SV5DKL SV6DBL SV6EBQ SV6EXJ SV6JHA SV7BVM SV7CUD SV8BHN SV8CS SV8DCY SV8EUB SV8GGI SV8JNM SV8OVH SV8PMM SV8QDJ SV9BMG SV9COL SV9CVY SV9DJO SV9FBG SV9FBK SV9FBP SV9GPV SV9MBH SV9RGI SV9RNG SV9RPE SV9SK SW3JH SW8WW SW8YA SW9AA SX0HQ SX100WWI SX1T SX2AIU SX2G SX2I SX2K SX2X SX73SC SX80FOC SY1AEA SZ1A SZ2TSL SZ3P SZ4KRD SZ5RDS SZ6P SZ8LSV T31EU T32AZ T40A T40CW T40HQ T42CT T42T T42W T43MY T46A T46TR T48K T48SC T6A T6AA T77C T77CX T88DT T88PB TA0E TA1API TA1BX TA1CM TA1ED TA1FA/2 TA1HF TA1HZ/2 TA1ICZ TA1L TA1NAI TA1OSN TA2BS TA2DA/4 TA2DE TA2EJ TA2JU TA2LG TA2LP TA2MN TA2NAS TA2OLS TA2RG TA2SE TA2TC TA2XX TA3AER TA3BP TA3D TA3EP TA3J TA3NEB TA3ON TA3PZ TA3X TA4A TA4CS TA4ED TA4LYL TA4MA TA4PR TA4RC TA4SO TA5BS TA5FA TA7I TA7MHZ TA7OM TA7OYG TA7UHS TA9J TC0F TC0X TC29OCT TC2MK TC2Y TC3A TC3B TC3D TC3HQ TC3N TC3SO TC4A TC7C TC7G TF1AM TF1OL TF2CT TF2LL TF2MSN TF2R TF3AO TF3DC TF3DT TF3EO TF3GB TF3HQ TF3PPN TF3SA TF3SG TF3T TF3VS TF3W TF3Y TF4M TF8KY TG0AA TG4/KT8X TG9ADM TG9ADQ TG9AMD TG9ANF TG9AOR TG9AXF TG9GI TG9IGI TG9IIN TG9IN TI0RC TI1T TI2CC TI2CDA TI2JS TI2OY TI2W TI2WMP TI3DK TI4VAA TI5W TI7W TI8II TI8W TJ2TT TJ3X TK0C TK4LS TK4RB TK4RC TK5AE TK5KP TK5MH TK9C TM0DX TM0HQ TM0L TM0R TM0T TM100ARM TM18M TM1D TM1K TM1M TM1MOON TM1T TM1W TM20CI TM28CN TM29X TM2F TM2O TM2R TM2T TM2Y TM30CDR TM3CN TM3R TM3Z TM4A TM4E TM4K TM4L TM4P TM4T TM4X TM55M TM5A TM5AHO TM5CQ TM5DX TM5EE TM5F TM5G TM5J TM5L TM5M TM5OTT TM5P TM5PAX TM5SE TM5T TM5TT TM5VR TM5XR TM5Y TM6AM TM6M TM6V TM6WPD TM6X TM7A TM7K TM7M TM7P TM7XX TM7Y TM84S TM8A TM9R TO0A TO1A TO1J TO2BC TO3Z TO4A TO5A TO5GI TO6OK TO7A TO7D TO8T TO9W TR8CA TR8CR TU2CI TX2A TZ4AM U1BA U1BD U5I UA0A UA0ACG UA0AGI UA0AKY UA0C UA0CA UA0CID UA0DBX UA0DX UA0FAM UA0FO UA0JF UA0JFG UA0JGI UA0KBG UA0LCZ UA0LD UA0LHS UA0LKD UA0LUM UA0OK UA0QN UA0QNV UA0SBQ/P UA0SC UA0SDX UA0SE UA0SR UA0SU UA0UV UA0UY UA0XAK UA0ZAM UA0ZC UA0ZK UA1AEA UA1AFT UA1AJ UA1ANA UA1AUW UA1CBM UA1CE UA1CEC UA1CEI UA1CIO UA1CUR UA1D UA1F UA1NDX UA1NFA UA1ODM UA1OIZ UA1OM UA1OMS UA1OOX UA1ORK UA1TAN UA1ZFG UA1ZJV UA1ZZ UA2CZ UA2FAK UA2FBQ UA2FF UA2FFW UA2FL UA2FP UA2FW UA2FZ UA2K UA3A UA3A/P UA3AAJ UA3AB UA3ABJ UA3AGW UA3AP UA3BL UA3DCE UA3DER UA3DJG UA3DLD UA3DPM UA3DSN UA3DSS UA3DUJ UA3DVB UA3ECJ UA3EDQ UA3EUW UA3FO UA3FQ UA3GDU UA3GQ UA3IHJ UA3KW UA3LAR UA3LEO UA3LID UA3LMR UA3MIF UA3OQ UA3P UA3PC UA3PI UA3PP UA3QAM UA3QCB UA3QGT UA3QPA UA3QR UA3R UA3RAW UA3RAX UA3RBP UA3RBR UA3RC UA3RF UA3RFT UA3RKK UA3RN UA3RU UA3RW UA3RZ UA3SCW UA3SKV UA3T UA3TCJ UA3THY UA3UAD UA3UBT UA3UCD UA3UJP UA3UX UA3VFS UA3VLO UA3WF UA3X UA3XAG UA3XO UA3YCX UA3YCZ UA3YDI UA3YFL UA3Z UA3ZMQ UA4AAC UA4ACP UA4AQL UA4ASE/6 UA4ATB UA4C UA4CBJ UA4CC UA4CCG UA4CIF UA4CNJ UA4FBG UA4FDL UA4FER UA4FX UA4HBM UA4HBW UA4HJ UA4HRZ UA4HTT UA4I UA4K UA4LCH UA4LL UA4M UA4NBA UA4NC UA4NCI UA4NE UA4NF UA4NN UA4PAN UA4PAQ UA4PBT UA4PCF UA4PDJ UA4PN UA4PRU UA4QK UA4S UA4SBZ UA4SJO UA4SU UA4W UA4WAV UA4WGM UA4WJ UA4WW UA4Z UA5C UA5D UA5F UA5L UA5R UA6AA UA6AAK UA6AGE UA6AH UA6AK UA6AKD UA6ARR UA6AUA UA6AVA UA6AX UA6BFE UA6BJY UA6CC UA6CE UA6CT UA6EC UA6EE UA6EED UA6EX UA6G UA6GF UA6GO UA6HFI UA6HLN UA6HLP UA6HRX UA6J UA6JQ UA6KAC UA6LCJ UA6LCN UA6LFQ UA6LN UA6LQ UA6LUQ UA6M UA6XES UA6XT UA6Y UA6YH UA6YN UA6YW UA7G UA7K UA7KA UA8AA/3 UA8WAA UA9AEU UA9AGX UA9ALE UA9APA UA9AU UA9AX UA9BA UA9CAW UA9CBO UA9CDC UA9CDC/P UA9CES UA9CGL UA9CHL UA9CTT UA9CU UA9CUA UA9D UA9DR UA9FAR UA9FGJ UA9FKH UA9FLK UA9JBV UA9JNT UA9JNT/8 UA9LAO UA9LDD UA9MA UA9MW UA9NN UA9OC UA9ODU UA9OQM UA9QCP/3 UA9QFF UA9QM UA9R UA9SEC UA9SMU UA9SUV/8 UA9TF UA9TO UA9UAE UA9UKL UA9UX UA9W UA9WTF UA9XF UA9XK UA9XL UA9XMC UA9XO UA9XX UA9YE UA9ZO UA9ZZ UB0A UB1AHY UB3A UB3ARX UB3DAO UB3DDA UB3PDW UB3SAR UB4W UB5MAK UB5MBA UB6B UB7A UB7K UB7KAQ UB8CKF UB8QAA UC0A UC0L UC0W UC1A UC2K UC4A UC4C UC4I UC5D UC5G UC5G/P UC5T UC6A UC6K UC6N UC7A UC7C UC7M UC8U UC9A UD1A UD2F UD3T UD4C UD4F UD4FD UD7G UD8A UD8D UD8V UD9P UF1F UF1M UF2F UF4M UF4S UF5D UF8T UG3G UG4A UG4I UG5R UG9C UI0A UI0L UI2F UI2K UI3A UI3F UI4I UI5R UI6A UI8C UI8J UI8J/P UK7AL UK8IAR UK8UWG UK9AA UN0C UN0LM UN1HQ UN1L UN1QWA UN2E UN2G UN3G UN3GX UN3M UN4L UN4PD UN4PG UN4Q UN5GM UN5J UN6G UN6LN UN6T UN7CAW UN7CN UN7EG UN7FW UN7G UN7GCE UN7GF UN7GWI UN7ID UN7IDX UN7JID UN7JX UN7LAN UN7LDR UN7LV UN7LZ UN7MBF UN7MBH UN7PGA UN7QF UN7TX UN7ZO UN7ZW UN7ZZ UN8GA UN8PA UN8PT UN9GD UN9L UN9LW UP0L UP1G UP2L UP4L UP5B UP7G UP7L UP9L UR0DXX UR0EV UR0HQ UR0IQ UR1G UR1HR UR1I UR1YAA UR2LX UR2VA UR2Y UR3ABI UR3AC UR3AEF UR3CRO UR3GO UR3GU UR3HC UR3LM UR3PA UR3QFB UR3QGJ UR3QM UR3QSW UR3QTN UR3QX UR3UK UR3UT UR3VC UR3VKC UR3VKE UR3VKR UR3VZ UR4CU UR4CW UR4EI UR4EYN UR4IWZ UR4IZ UR4LBG UR4LG UR4LIN UR4LRG UR4LTX UR4MF UR4MG UR4MH UR4MM UR4MS UR4MVK UR4PWC UR4PWL UR4QFP UR4QQF UR4QR UR4QRH UR4QX UR4RWW UR4UT UR4WWT UR4WXL UR4ZZZ UR5AMJ UR5AO UR5AS UR5AW UR5CC UR5CN UR5CSL UR5E UR5ECW UR5EDX UR5EEW UR5EPG UR5EPM UR5EPV UR5EU UR5F UR5FA UR5FBM UR5FCM UR5FEO UR5FIL UR5FQB UR5FS UR5IFB UR5IFM UR5IHD UR5IRM UR5ITU UR5KBP UR5KED UR5KO UR5LAM UR5LEH UR5LF UR5LP UR5LY UR5MD UR5MGU UR5MM UR5MQS UR5MW UR5NLA UR5NX UR5QU UR5R UR5RA UR5RP UR5RSI UR5SD UR5SFW UR5STI UR5TGK UR5TL UR5TM UR5UBD UR5UJ UR5UZ UR5VR UR5WAN UR5WCQ UR5WCW UR5WHQ UR5WIF UR5WMM UR5WX UR5XMM UR5ZDZ UR5ZEL UR5ZEP UR5ZGY UR5ZTH UR6EA UR6GWZ UR6IJ UR6IM UR6LAF UR6LF UR6QS UR7AL UR7CB UR7CT UR7D UR7EC UR7EN UR7EU UR7EZ UR7FM UR7GM UR7GO UR7GP UR7HCX UR7HN UR7HOH UR7IKJ UR7LY UR7MA UR7MZ UR7QC UR7QM UR7R UR7TV UR7UD UR7VA UR7ZO UR8EQ UR8GX UR8GZ UR8IW UR8QE UR8QR UR8QV UR8RF UR9MB UR9QQ US0HZ US0IW US0MM US0MS US0NI US0QG US0SY US0U US0UX US0YA US0ZK US0ZZ US1I US1IB US1IV US1PM US1Q US1QA US1UP US1UU US1VM US1VS US2E US2IR US2IW US2MT US2UM US2UZ US2VA US2YW US3EW US3EZ US3IM US3IRX US3IW US3IY US3IZ US3LR US3LX US4EG US4EWY US4EX US4EXD US4I US4IDY US4IPC US4IQS US5ABI US5AT US5CDH US5D US5EEK US5EFU US5EOI US5IND US5IQW US5LO US5LOC US5LOD US5QRW US5QUB US5UC US5UO US5VX US5WDJ US5WDX US5WE US5XD US6CQ US6EX US6IKF US6IKT US7IA US7IB US7IGN US7IGN/P US7IID US7IM US7IY US7KC US7MM US7UA US7UU US7UW US7VF US7WW US8IB US8ICJ US8IM US8QQ US8UA US9IDD UT/C4T UT/HA5UX UT/N8OO UT0CK UT0EA UT0EK UT0EM UT0FC UT0LK UT0NN UT0NT UT0QA UT0RS UT0U UT0ZT UT1AA UT1AM UT1AN UT1DX UT1EK UT1FA UT1IM UT1KWA UT1QQ UT1S UT1UL UT1US UT1UW UT1V UT1WW UT1XX UT1ZZ UT2AA UT2AB UT2AU UT2DW UT2EF UT2GM UT2HC UT2II UT2IO UT2IV UT2IW UT2IY UT2LF UT2MZ UT2QQ UT2QT UT2SQ UT2SW UT2T UT2UB UT2UN UT2UZ UT2WQ UT3C UT3EK UT3EV UT3GX UT3HD UT3IA UT3IJ UT3IZ UT3N UT3NA UT3NF UT3QD UT3QU UT3QZ UT3RN UT3RS UT3SO UT3UCP UT3UFH UT3UFI UT3UIW UT3UIX UT3UV UT3UY UT3UZ UT3V UT3WX UT4EK UT4FM UT4HZ UT4LW UT4MF UT4MM UT4MW UT4NY UT4PZ UT4RZ UT4U UT4UB UT4UBZ UT4UEP UT4UFU UT4UMZ UT4UP UT4UQ UT4URX UT4USA UT4VW UT4WA UT4XU UT5AX UT5C UT5CL UT5CW UT5EA UT5ECZ UT5EDU UT5EDX UT5EL UT5EO UT5EOX UT5EPP UT5GL UT5GW UT5HX UT5IA UT5IZ UT5LA UT5LO UT5NC UT5NR UT5PQ UT5PY UT5RB UT5RQ UT5T UT5UGQ UT5UGR UT5UHX UT5UIA UT5ULB UT5UN UT5UQV UT5URW UT5UT UT5UUV UT5UY UT5VX UT5WAA UT5YY UT5ZL UT5ZY UT6CW UT6EE UT6ER UT6HX UT6IE UT6UD UT6UZ UT7AW UT7AXA UT7CR UT7E UT7EJ UT7EL UT7EY UT7FA UT7FO UT7HA UT7HM UT7IA UT7IS UT7KZZ UT7LA UT7LW UT7MR UT7MT UT7NI UT7NW UT7NY UT7QF UT7QL UT7UT UT7UX UT7UZ UT7XT UT8AL UT8AS UT8EL UT8ER UT8IA UT8IBU UT8IK UT8IM UT8IO UT8IT UT8IV UT8MM UT8MZ UT8NT UT8RN UT8UF UT8UM UT8UU UT9EZ UT9FJ UT9UZ UV1IW UV1IX UV2E UV2IM UV2IZ UV2V UV3QF UV3RT UV5EDW UV5EEO UV5ERY UV5QQ UV5U UV7E UV7MA UV7V UW0K UW1G UW1GZ UW1M UW1U UW1WU UW2M UW2Q UW2ZM UW3E UW3G UW3HM UW3M UW3U UW4E UW4SU UW4U UW5EJX UW5EKD UW5IM UW5Q UW5RG UW5U UW5W UW5Y UW5ZM UW5ZO UW6E UW6M UW7CF UW7CN UW7EA UW7LL UW7M UW7RV UW7RWA UW7W UW8SM UX0DL UX0FF UX0HO UX0LL UX0RR UX0SX UX1AA UX1BZ UX1CL UX1CN UX1CW UX1HW UX1IB UX1IM UX1IW UX1LW UX1MH UX1UA UX1UF UX1UX UX1VT UX1VX UX2HB UX2HH UX2HX UX2IB UX2IJ UX2KA UX2MF UX2X UX3HA UX3HX UX3I UX3IO UX3IT UX3UN UX3UV UX3UW UX4CR UX4FC UX4MX UX4U UX5IO UX5IS UX5N UX5UN UX5UO UX5UU UX5UW UX5VK UX5XK UX6F UX6IB UX6IR UX6VA UX7BV UX7IA UX7IW UX7MR UX7MX UX7QD UX7QG UX7QV UX7U UX7UN UX7UU UX7VA UX8IA UX8IW UX8IX UX8IXX UX8ML UX8ZA UX9Q UY0CA UY0ZG UY1HY UY1IP UY2IF UY2IG UY2IZ UY2RA UY2UA UY2UQ UY2UR UY2VC UY2ZA UY2ZZ UY3AW UY3CC UY3MW UY3U UY4W UY5AA UY5BQ UY5HF UY5MB UY5OO UY5QJ UY5QQ UY5QR UY5QZ UY5TE UY5UF UY5VA UY5YB UY5ZI UY5ZZ UY6U UY7C UY7LM UY7MM UY7RR UY7VV UY8IF UZ0U UZ1HWW UZ1RM UZ1U UZ1WW UZ2HZ UZ2I UZ2M UZ2U UZ3A UZ3U UZ3W UZ4E UZ4I UZ4U UZ5DM UZ5DX UZ5P UZ5Q UZ5U UZ5UA UZ5ZU UZ5ZV UZ7F UZ7M UZ8I UZ9E V26B V26K V26M V2BM V31AK V31AT V31AX V31CO V31CQ V31DJ V31EC V31FI V31FO V31GX V31HE V31HQ V31MA V31NC V31RJ V31VP V31YN V37DX V37T V3A V3M V3O V3T V4/K3VX V4/W3UL V4/WX4G V47JA V47P V47T V47UM V47UR V47X V49V V51JP V51WH V51WW V51YJ V55A V63AR V6A V73NS V84SAA V85RH V85T VA1CC VA1CHP VA1JON VA1MC VA1MM VA1RST VA1SEA VA1XH VA2AGW VA2AM VA2AN VA2BF VA2BN VA2BS VA2CO VA2CST VA2CV VA2CZ VA2DF VA2DLJ VA2EK VA2EW VA2FO VA2FW VA2GNQ VA2HKR VA2IA VA2IG VA2JY VA2KLG VA2LGQ VA2MM VA2MO VA2MP VA2MP/P VA2OBW VA2PHK VA2PL VA2PR VA2QR VA2RAC VA2RC VA2RF VA2RIO VA2RWN VA2SG VA2SJ VA2SK VA2SS VA2UP VA2UR VA2WA VA2YAF VA2YLB VA2YZX VA3AAA VA3AC VA3ADW VA3AHQ VA3AK VA3AMX VA3AR VA3ASE VA3ATB VA3ATW VA3AXW VA3BD VA3CCO VA3CD VA3CJZ VA3CME VA3CP VA3CQG VA3CTX VA3CWT VA3DCB VA3DEF VA3DF VA3DGA VA3DKL VA3DX VA3DXA VA3EBM VA3EC VA3EE VA3EEB VA3ELE VA3EON VA3FF VA3FH VA3FN VA3FOC VA3FP VA3FUZ VA3FV VA3GD VA3GKO VA3GUY VA3HD VA3HDL VA3HP VA3HWC VA3IDD VA3IK VA3IPG VA3IQ VA3IR VA3JHQ VA3JLF VA3JT VA3KOF VA3KRT VA3KVI VA3LLZ VA3LML VA3LR VA3MCX VA3MJR VA3MMV VA3MO VA3MPG VA3MW VA3MYC VA3NGE VA3NLC VA3NQ VA3NU VA3NW VA3OB VA3OBO VA3OL VA3ONO VA3ORI VA3PC VA3PCJ VA3PDG VA3PDX VA3PEN VA3PGL VA3PM VA3PN VA3QB VA3QF VA3QR VA3QV VA3QWW VA3RAC VA3RDW VA3RHH VA3RJ VA3RKM VA3ROC VA3SB VA3SFM VA3SGM VA3SK VA3SUG VA3SWG VA3SXP VA3SY VA3SZ VA3TIC VA3TPS VA3TSG VA3TTB VA3UG VA3UW VA3VF VA3VMD VA3VS VA3VU VA3VW VA3WA VA3WB VA3WLD VA3WNO VA3WR VA3WU VA3WW VA3WWX VA3XFC VA3XO VA3XOV VA3YI VA3YV VA3YYX VA3ZC VA3ZDX VA3ZNQ VA3ZNW VA3ZTF VA3ZV VA4CQ VA4HZ VA5AA VA5DX VA5KMG VA6AN VA6CV VA6DBS VA6DJ VA6MA VA6MPM VA6NJK VA6RB VA6RCN VA6RQ VA6RZR VA6SP VA6SS/W7 VA6UK VA6UV VA6WV VA6WWW VA7AAA VA7ADI VA7AM VA7AQ VA7BDG VA7BEC VA7CAB VA7CDQ VA7CRZ VA7CW VA7DGT VA7DP VA7DX VA7DXC VA7DXX VA7DZ VA7EGZ VA7EU VA7FC VA7FFT VA7FMR VA7GEM VA7GI VA7HV VA7HZ VA7JC VA7JH VA7JW VA7KO VA7LDT VA7LTX VA7MAY VA7MD VA7MG VA7MM VA7NM VA7NU VA7ODX VA7OM VA7PPL VA7QCE VA7QD VA7RME VA7RN VA7RR VA7RY VA7RYL VA7ST VA7TU VA7UI VA7UNX VA7VF VA7VJ VA7VK VA7VX VA7VZ VA7XB VA7XH VA7XU VA7ZM VA7ZR VB1D VB1M VB2Z VB3E VB3T VB7R VB7X VC2A VC2W VC2Z VC3J VC3M VC3R VC3S VC3T VC3X VC6R VC6V VC7M VC7R VD105A VD1TP VE1AI VE1ANU VE1AOE VE1AUZ VE1AWW/CY0 VE1AYY VE1BAB VE1BAC VE1BB VE1BLX VE1BSM VE1BZI VE1CEL VE1CHL VE1DDD VE1DI VE1DT VE1EPB VE1FOX VE1IOU VE1JBC VE1JS VE1KF VE1LD VE1LV VE1MU VE1NY VE1OMI VE1OP VE1OU VE1PK VE1RAC VE1RSM VE1RY VE1SN VE1SQ VE1TK VE1WT VE1YVN VE1YX VE1ZA VE1ZAC VE1ZU VE2/IU7KRA VE2/YO3ND VE2ACP VE2ARA VE2ATB VE2AWW VE2AXO VE2BBC VE2BK VE2BU VE2BVV VE2BWL VE2BZO VE2CAQ VE2CJR VE2COK VE2CQ VE2CRO VE2CSM VE2CSP VE2CUR VE2CVI VE2CVN VE2CWI VE2DIG VE2DLC VE2DQO VE2DSB VE2EBK VE2EBL VE2EKA VE2ENN VE2EZD VE2FD VE2FK VE2FN VE2FU VE2FWW VE2FXL VE2GCE VE2GDR VE2GHI VE2GK VE2GSO VE2GT VE2GTZ VE2HAY VE2HB VE2HHO VE2HIT VE2HLS VE2HOG VE2HQ VE2IDX VE2IM VE2IR VE2JCW VE2JFM VE2JM VE2KH VE2KTA VE2LPW VE2MAM VE2MTK VE2NCG VE2NGO VE2NMB VE2OCH VE2OJ VE2OPB VE2OV VE2OWL VE2PI VE2PIB VE2PID VE2PUI VE2QA VE2QE VE2QGL VE2QV VE2QY VE2RO VE2RYY VE2SCA VE2SG VE2SMS VE2SRP VE2SSS VE2TCK VE2TDT VE2TH VE2TK VE2TSM VE2VIA VE2VN VE2WA VE2WU VE2XX VE2YI VE2YTQ VE2YUC VE2ZBI VE2ZC VE2ZM VE2ZT VE2ZWA VE2ZWI VE3/K0MKL VE3AD VE3ADQ VE3AHY VE3AIH VE3AND VE3AQ VE3ARF VE3AT VE3AUI VE3AVP VE3AXC VE3AXW VE3AYR VE3BF VE3BFU VE3BK VE3BM VE3BR VE3BVA VE3BW VE3BXG VE3BXI VE3CBK VE3CEB VE3CES VE3CGA VE3CH VE3CKG VE3CKO VE3CNA VE3CPI VE3CR VE3CRG VE3CSK VE3CV VE3CWN VE3CWU VE3CX VE3CXD VE3CXL VE3DC VE3DDU VE3DF VE3DFR VE3DLS VE3DMR VE3DNM VE3DO VE3DOU VE3DQN VE3DS VE3DX VE3DZ VE3DZP VE3DZZ VE3EDX VE3EEI VE3EEJ VE3EEU VE3EIB VE3EID VE3EJ VE3EK VE3EL VE3EP VE3EPS VE3ESE VE3ETE VE3ETP VE3EU VE3EUR VE3EWW VE3EXW VE3EXY VE3EY VE3EZ VE3EZB VE3FAS VE3FBZ VE3FDZ VE3FGU VE3FH VE3FI VE3FIT VE3FJ VE3FK VE3FP VE3FRR VE3FTM VE3FU VE3FWF VE3FXX VE3FZ VE3GFN VE3GLA VE3GMZ VE3GN VE3GNI VE3GO VE3GYL VE3GYY VE3HE VE3HED VE3HEU VE3HFQ VE3HG VE3HIA VE3HLM VE3HM VE3HMK VE3HOR VE3HX VE3HZW VE3IB VE3IBW VE3IC VE3ICV VE3IDS VE3IDT VE3IGJ VE3IGN VE3IHR VE3IIM VE3IKV VE3IPT VE3IQZ VE3ISO VE3ITW VE3IZS VE3JAQ VE3JAR VE3JGO VE3JI VE3JM VE3JSO VE3JSQ VE3JST/W5 VE3JTP VE3JVG VE3JW VE3JWH VE3KBI VE3KGK VE3KI VE3KJQ VE3KKQ VE3KL VE3KP VE3KQN VE3KRP VE3KTB VE3KZ VE3LA VE3LC VE3LDJ VE3LDP VE3LDY VE3LFN VE3LHY VE3LMS VE3LON VE3LRL VE3LSO VE3LTG VE3LVW VE3LXV VE3MA VE3MCF VE3MDX VE3MEU VE3MFA VE3MGY VE3MH VE3MIS VE3MJD VE3MM VE3MNE VE3MR VE3MT VE3MV VE3MVM VE3MXJ VE3MZD VE3NE VE3NEP VE3NFN VE3NFW VE3NI VE3NJC VE3NNT VE3NPO VE3NQM VE3NR VE3NRG VE3NRJ VE3NUL VE3NZ VE3OAG VE3OD VE3OGP VE3OI VE3OIL VE3OJN VE3OLP VE3OM VE3OP VE3ORF VE3OSZ VE3OTL VE3OU VE3PCP VE3PJ VE3PK VE3PN VE3PP VE3PQ VE3PSV VE3PV VE3PYG VE3PYJ VE3QEE VE3QN VE3QO VE3QSK VE3RA VE3RB VE3RC VE3RCN VE3RDE VE3RDP VE3RFA VE3RGC VE3RIA VE3RL VE3RNK VE3ROV VE3RSA VE3RSA/7 VE3RUA VE3RUV VE3RVZ VE3RWA VE3RX VE3RXH VE3RZ VE3SB VE3SCN VE3SD VE3SDF VE3SGB VE3SHO VE3SIQ VE3SIZ VE3SMA VE3SOO VE3SPR VE3SS VE3SSJ VE3SSR VE3SST VE3SSV VE3SWA VE3TAZ VE3TCV VE3TG VE3THR VE3TJI VE3TM VE3TMG VE3TMT VE3TNC VE3TTP VE3TU VE3TW VE3TWG VE3UDX VE3UN VE3UNA VE3USP VE3UTA VE3UTT VE3UZ VE3VA VE3VC VE3VEE VE3VEU VE3VHB VE3VJC VE3VM VE3VN VE3VOC VE3VSM VE3VSM/HR9 VE3VTG VE3VV VE3VX VE3VY VE3WBJ VE3WDM VE3WEJ VE3WG VE3WPZ VE3WRL VE3WZ VE3XAT VE3XB VE3XBO VE3XD VE3XKZ VE3XL VE3XN VE3XNS VE3XR VE3XT VE3XXT VE3YAA VE3YDH VE3YRA VE3YT VE3YTN VE3YV VE3YX VE3ZI VE3ZRB VE3ZSZ VE3ZV VE3ZW VE3ZY VE3ZZ VE4AA VE4AEO VE4AKI VE4AMU VE4AQU VE4ATL VE4BAE VE4BB VE4BG VE4CEM VE4DDO VE4DDW VE4DL VE4DLA VE4DXR VE4EA VE4EAR VE4EV VE4GKM VE4GV VE4HQ VE4JBB VE4MAR VE4MG VE4MR VE4PDX VE4PL VE4QZ VE4RAC VE4RBH VE4SG VE4TLA VE4TV VE4VJR VE4VT VE4VZ VE4XM VE4XT VE4YH VE5/KC0W VE5AAD VE5AG VE5CAR VE5CJB VE5CON VE5DLC VE5EEE VE5FOC VE5FX VE5GC VE5JOE VE5KC VE5KEL VE5KO VE5KS VE5MX VE5NEC VE5NN VE5PV VE5RAC VE5RI VE5RY VE5SDH VE5SF VE5SKI VE5SPR VE5SS VE5SWL VE5TLW VE5UA VE5UF VE5UO VE5VA VE5VG VE5WD VE5WI VE5XO VE5YAK VE5ZC VE5ZX VE6/KE5JA VE6AO VE6ARS VE6AS VE6AX VE6BBP VE6BF VE6BI VE6BIR VE6BIR/3 VE6BMX VE6BTC VE6CCM VE6CJ VE6CMV VE6CN VE6CPS VE6CSX VE6CX VE6DDD VE6EH VE6EX VE6FI VE6FN VE6FRD VE6FT VE6FW VE6IKR VE6IVN VE6JEM VE6JF VE6JW VE6JY VE6KC VE6KD VE6KDX VE6KQ VE6LB VE6LDX VE6LK VE6MIK VE6NS VE6OH VE6PFL VE6PR VE6QI VE6QO VE6RA VE6RAC VE6RED VE6RFM VE6RH VE6RNE VE6RST VE6RYS VE6SC VE6SH VE6SK VE6SPS VE6SV VE6TK VE6TL VE6TN VE6TWP VE6UM VE6VS VE6WP VE6WQ VE6WR VE6WZ VE6WZL VE6ZC VE7ACN VE7ACN/7 VE7AHA VE7AHT VE7AOV VE7AT VE7ATJ VE7AX VE7BC VE7BEF VE7BGJ VE7BGP VE7BNR VE7BV VE7BYI VE7CA VE7CC VE7CCY VE7CI VE7CKF VE7CKZ VE7CMR VE7CMT VE7CNW VE7CQE VE7CUP VE7CV VE7DAY VE7DB VE7DDG VE7DGL VE7DP VE7DX VE7DXF VE7DXH VE7DXU VE7DZO VE7ECC VE7EDZ VE7EME VE7FE VE7FGY VE7FO VE7FSB VE7FSR VE7GL VE7GOG VE7GOY VE7HBS VE7HH VE7HLW VE7IAD VE7IO VE7JBO VE7JH VE7JKZ VE7JMN VE7JO VE7JVP VE7KAJ VE7KCY VE7KDU VE7KW VE7KX VE7LGP VE7MH VE7MR VE7MZP VE7NA VE7NBQ VE7NI VE7NKR VE7NOR VE7NY VE7NY/7 VE7NZ VE7OGO VE7OM VE7RAC VE7RAR VE7RG VE7RK VE7RSV VE7SA VE7SAR VE7SCC VE7SK VE7SNC VE7SO VE7SQ VE7SS VE7SSD VE7SUN VE7SV VE7SXM VE7SZ VE7TI VE7TTW VE7UBC VE7UDI VE7UF VE7UHS VE7UW VE7VCC VE7VR VE7VV VE7VZ VE7WNK VE7WO VE7XF VE7XH VE7XNO VE7XT VE7YAH VE7YBH VE7YL VE7YU VE7ZN VE7ZR VE7ZSH VE7ZX VE7ZZV VE8GER VE8GEZ VE8NSD VE8RAC VE9AA VE9BK VE9BRY VE9CB VE9CL VE9CRM VE9DX VE9EX VE9FI VE9GJ VE9HF VE9JEF VE9ML VE9MM VE9MO VE9MWA VE9MY VE9OA VE9PLS VE9RAC VE9RLW VE9SF VE9TNT VE9UNB VE9VIC VE9WH VE9WRS VE9XDX VE9XX VE9ZZ VER20200402 VK1FOC VK1MA VK2ALR VK2AU VK2BAI VK2BCQ VK2BJ VK2BPL VK2BV VK2BXE VK2BY VK2CA VK2CCC VK2CZ VK2DX VK2FABJ VK2FHQQ VK2FHRK VK2FSAV VK2GGC VK2GR VK2GZ VK2IA VK2IG VK2IM VK2IZ VK2JON VK2KJJ VK2KS VK2LEE VK2LX VK2MIX VK2MOR VK2NSS VK2ON VK2PEP VK2PN VK2PR VK2PW VK2QV VK2RI VK2RSG VK2RT VK2TTL VK2TXB/W7 VK2WQ VK2WWV VK2XXL VK2XZ VK2YI VK2ZMT VK3ATO VK3AUQ VK3BDX VK3BNR VK3BY VK3CM VK3CWB VK3EGN VK3EW VK3FM VK3FN VK3FRC VK3FY VK3GK VK3GZ VK3HF VK3IO VK3JA VK3KE VK3KJ VK3KTT VK3LTL VK3MB VK3MH VK3MI VK3OD VK3QB VK3SIM VK3TNL VK3TZ VK3VT VK4ACN VK4AFU VK4ATH VK4AXM VK4BAA VK4BOB VK4BRT VK4CH VK4CMV VK4COZ VK4CT VK4DH VK4DX VK4FB VK4FJ VK4FOMP VK4HH VK4JU VK4KW VK4LA VK4MA VK4ME VK4NH VK4NM VK4PDX VK4PZZ VK4QH VK4QO VK4QS VK4RE VK4SDD VK4SN VK4SP VK4TJF VK4TL VK4TT VK4UB VK4UR VK4VSM VK4WTN VK4ZD VK4ZP VK5ARG VK5CE VK5DDD VK5DWC VK5FSAM VK5GR VK5IR VK5JN VK5LJ VK5MAV VK5PAS VK5QI VK5WU VK5ZZ VK6DW VK6HG VK6IR VK6IT VK6KJ VK6LC VK6LW VK6NC VK6NTE VK6RZ VK6VZ VK6WX VK7BO VK7CW VK7DW VK7GK VK7GN VK7NET VK7QP VK7ROY VK7VZ VK7XX VK8AV VK8NSB VK8VWA VK9CZ VK9LQ VK9NC VK9NE VK9NK VK9XG VK9XT VO1A VO1ABN VO1AW VO1AX VO1BB VO1BQ VO1CH VO1COD VO1CRP VO1DJT VO1FOX VO1GRC VO1HP VO1IDX VO1KVT VO1MP VO1NA VO1NAR VO1OE VO1OK VO1RAC VO1ROS VO1SA VO1TX VO1VR VO2AC VO2ET VO2NS VO2RAC VO2VC VP2EAB VP2EAQ VP2EBF VP2M VP2MDG VP2MDM VP2MKG VP2MMF VP2MSK VP2MSS VP2MSW VP2VWW VP5DZ VP5K VP5M VP5P VP5V VP5W VP6D VP6R VP8LP VP8NO VP9/K4AJA VP9/W6PH VP9AD VP9HQ VP9I VR20EH VR2CC VR2CO VR2EH VR2FUN VR2HK VR2XAN VR2XMT VR2XYL VU2ABS VU2AE VU2CPL VU2CVS VU2DCC VU2DED VU2EEI VU2GRM VU2GSM VU2IBI VU2IT VU2IVV VU2KWJ VU2LOC VU2MTM VU2NKS VU2NXM VU2OT VU2PTT VU2RCT VU2SMS VU2XE VU2YQ VU2YVK VU2ZMK VU3ESV VU3NPI VU3NXI VU3UPZ VU3WBB VX4WARC VY0AA VY0CF VY0ERC VY1AAA VY1CO VY1KX VY1MAB VY1RAC VY1XY VY2/G3VYI VY2/W5AJ VY2AT VY2DS VY2GF VY2MP VY2NX VY2OM VY2OX VY2RAC VY2TT VY2WW VY2ZM W0A/50 W0AA W0AAA W0AAE W0AAL W0AD W0AF W0AG W0AIH W0AK W0AO W0ATI W0AU W0AUR W0AZ W0BAV W0BF W0BH W0BH/7 W0BLE W0BM W0BR W0BU W0BV W0BX W0CAR W0CCA W0CCJ W0CCX W0CEC W0CEL W0CER W0CET W0CGM W0CKI W0CN W0CO W0CP W0CQC W0CZE W0DAN W0DAS W0DB W0DC W0DET W0DK W0DLE W0DQ W0DVD W0DYD W0EA W0EAR W0ECC W0EEE W0EET W0EJ W0EM W0ERB W0ERH W0ERP W0ETE W0ETT W0EWD W0FD W0FK W0FLS W0FM W0FNS W0FRC W0FY W0GAS W0GCJ W0GFE W0GG W0GHZ W0GJ W0GJT W0GLB W0GM W0GMO W0GQ W0GRY W0GTL W0GUY W0GXA W0GXQ W0GZI W0GZR W0HAF W0HBH W0HI W0HL W0HXL W0IFP W0INF W0IRS W0ITT W0IVJ W0IW W0IY W0IZ W0JAY W0JG W0JIM W0JJR W0JM W0JMP W0JMW W0JNI W0JRP W0JS W0JSL W0JTC W0JW W0JWR W0JX W0KEU W0KFG W0KIT W0KRD W0KU W0LES W0LEZ W0LI W0LPF W0LS W0LSD W0LVZ W0LWU W0LZR W0MA W0MAR W0MB W0MHK W0MI W0MN W0MPM W0MR W0MU W0NA W0NAR W0ND W0NE W0NFS W0NM W0NO W0NT W0NTA W0NV W0NYA W0ODS W0OGH W0OJW W0OJY W0OPW W0OR W0OS W0OVM W0PAN W0PB W0PC W0PE W0PEC W0PF W0PHX W0PI W0PIR W0PPF W0PSY W0PV W0QC W0QJ W0QL W0QQG W0QQQ W0QU W0QXR W0RBF W0RDR W0REW W0RIC W0RJE W0RON W0RRZ W0RSJ W0RT W0RV W0RX W0SA W0SD W0SEI W0SG W0SHL W0SK W0SLW W0SV W0SZ W0TBL W0TF W0TG W0TK W0TLE W0TM W0TML W0TT W0TTS W0TUP W0TX W0TY W0UA W0UC W0UD W0ULU W0UO W0UY W0VC W0VD W0VM W0VTT W0VX W0WC W0WCS W0WDF W0WLL W0WP W0WTF W0WTN W0XG W0XR W0XW W0YBS W0YES W0YHE W0YI W0YJT W0YK W0YR W0YVA W0YY W0ZA W0ZAP W0ZF W0ZMU W0ZP W0ZQ W0ZR W0ZS W0ZW W0ZWS W0ZZ W1/PY1MX W1/WP3C W1ABA W1ABK W1AEC W1AGC W1AH W1AJT W1AKI W1AL W1ALP W1AM W1AMJ W1AN W1AO W1AQ W1ARY W1ASB W1AST W1ATV W1AUT W1AVK W1AW W1BB W1BD W1BHC W1BIM W1BJ W1BO W1BOS W1BQ W1BRS W1BS W1BUB W1BWA W1BX W1CAM W1CAT W1CCE W1CEK W1CQ W1CSM W1CTN W1CU W1CVE W1CVO W1CY W1DAD W1DF W1DGL W1DH W1DHT W1DQ W1DQD W1DT W1DV W1DX W1DXH W1DYJ W1EAA W1EAT W1EBI W1EBM W1ECH W1ECT W1EDH W1EE W1EG W1EMT W1END W1EQ W1EQO W1ER W1ESE W1ETV W1EZ W1FA W1FAR W1FJ W1FKF W1FM W1FM/6 W1FMR W1FNB W1FOX W1FOY W1FPW W1FQ W1FSH W1FTE W1FV W1FW W1FZ W1GD W1GF W1GHD W1GHZ W1GKT W1GL W1GLO W1GQ W1GS W1GSH W1GSS W1GXZ W1HBR W1HFP W1HI W1HIJ W1HIS W1HMM W1HQL W1HS W1HT W1HY W1IBQ W1IDP W1IE W1IG W1IL W1IS W1ITU W1IZZ W1JA W1JAW W1JCW W1JFF W1JGM W1JJC W1JMA W1JN W1JPR W1JQ W1JR W1JS W1JSB W1JSR W1JWC W1JXN W1KDA W1KES W1KM W1KQ W1KRB W1KRS W1KU W1LBV W1LEM W1LGU W1LIC W1LJD W1LQ W1LTX W1LX W1LY W1LZ W1MA W1MAW W1MBB W1MBZ W1MD W1MJ W1MK W1MM W1MME W1MOO W1MR W1MT W1MU W1MX W1NA W1NG W1NH W1NJC W1NK W1NM W1NN W1NRG W1NSK W1NT W1NU W1NVT W1NY W1OB W1OC W1OF W1OHM W1OO W1OP W1OPR W1OW W1PDI W1PEF W1PGP W1PH W1PID W1PJE W1PR W1PR/6 W1PY W1QA W1QED W1QG W1QH W1QK W1QS W1RAN W1RE W1REP W1RFY W1RGA W1RH W1RK W1RM W1RMB W1RMC W1RO W1RPG W1RQ W1RSN W1SFR W1SIP W1SJ W1SKU W1SMC W1SMS W1SOC W1SRD W1SRG W1SS W1SSN W1SUB W1SVC W1SWM W1SYE W1SZ W1TAM W1TBM W1TC W1TEF W1TI W1TJL W1TMS W1TO W1TR W1TRB W1TRN W1TU W1TW W1UE W1UF W1UJ W1UK W1UR W1UT W1UU W1VD W1VE W1VEM W1VET W1VIV W1VPR W1VT W1WBB W1WC W1WCN W1WEF W1WH W1WIU W1WWA W1XH W1XK W1XM W1XMM W1XR W1XV W1XX W1YK W1YRC W1YSM W1YW W1YY W1YY/7 W1ZC W1ZE W1ZFG W1ZK W1ZR W1ZT W1ZZ W2/E78WW W2/JR1AQN W2AAB W2AAT W2ACH W2ACY W2ADX W2AE W2ANQ W2ARP W2ASC W2AW W2AYM W2BAP W2BAP/3 W2BEE W2BEW W2BJN W2BRM W2BT W2BUD W2BVH W2CCC W2CDO W2CG W2CM W2CO W2CR W2CS W2CSI W2CVW W2DAN W2DB W2DEA W2DEN W2DFC W2DLL W2DLT W2DPT W2DST W2DX W2DXE W2DZ W2EA W2EB W2ECK W2EFI W2EG W2EQ W2EQX W2FDJ W2FKN W2FMB W2FU W2FV W2GB W2GD W2GDJ W2GEZ W2GFJ W2GFV W2GGI W2GIO W2GJF W2GLF W2GN W2GPK W2GPS W2GR W2GS W2GSA W2GSB W2GZB W2HDI W2HL W2HRY W2HTS W2HUV W2HZ W2HZG W2IAN W2ID W2II W2IIT W2IJ W2IKN W2IOC W2IOC/1 W2IQK W2IR W2IRT W2IRY W2IUC W2IW W2IY W2JAD W2JAN W2JAT W2JAZ W2JC W2JDB W2JEK W2JGQ W2JJ W2JK W2JLK W2JSB W2JSJ W2JTM W2JU W2JV W2KGY W2KJ W2KS W2KU W2KV W2KYM W2LB W2LC W2LCQ W2LE W2LP W2LPL W2LU W2LV W2MC W2MEB W2MF W2MJP W2MKM W2MKW W2MLB W2MMD W2MMS W2MN W2MSA W2MV W2MW W2MWH W2MYA W2ND W2NGC W2NJ W2NK W2NMI W2NMY W2NO W2NPR W2NPT W2NQ W2NQ/7 W2NRA W2NTN W2NTV W2NWU W2NYW W2OF W2OIB W2OL W2OR W2ORC W2OSR W2OWL W2OZB W2PA W2PD W2PDY W2PIP W2PJ W2PKY W2PL W2PMC W2PP W2QF W2QL W2QO W2QQ W2RAL W2RAN W2RC W2RD W2RDX W2RE W2REA W2RES W2RF W2RME W2ROO W2RP W2RQ W2RR W2RS W2RU W2RX W2SFD W2SJ W2SKI W2SO W2SWA W2SZ W2TA W2TAD W2TAG W2TB W2TC W2TE W2TF W2THB W2TIN W2TMR W2TR W2TT W2TV W2TZ W2UDT W2UH W2UI W2UP W2UW W2VJN W2VJN/7 W2VL W2VM W2VO W2VQ W2VQ/2 W2VRK W2VS W2VT W2VTV W2VU W2VUF W2WC W2WCM W2WI W2WLD W2WTT W2XB W2XI W2XK W2XL W2XM W2XRX W2XS W2XYZ W2YC W2YD W2YE W2YK W2YR W2YV W2YW W2ZC W2ZDP W2ZEP W2ZF W2ZI W2ZJ W2ZQ W3AAD W3ACO W3ADX W3AEM W3AFC W3AG W3AKD W3AKD/1 W3ALG W3AO W3APA W3ARL W3ASW W3AU W3AVP W3BAY W3BBO W3BC W3BEE W3BFC W3BG W3BGN W3BKR W3BNN W3BTX W3BUI W3BW W3BXX W3BZN W3CB W3CCX W3CDG W3CDW W3CDZ W3CEB W3CF W3CG W3CL W3CP W3CQB W3CRZ W3CU W3CUB W3CWC W3DA W3DAD W3DDF W3DF W3DJS W3DLB W3DLD W3DLM W3DQ W3DQN W3DQS W3DQT W3DRW W3DVY W3DYA W3DZ W3DZH W3EA W3EC W3EEK W3EF W3EH W3EK W3EKT W3ENM W3EP W3EP/1 W3EW W3FA W3FAY W3FE W3FF W3FI W3FIZ W3FJ W3FME W3FOX W3FQ W3FV W3FW W3GG W3GH W3GM W3GQ W3GTR W3GV W3GVX W3GW W3GWU W3GY W3GZ W3HDH W3HGT W3HHN W3HKK W3HMS W3HRS W3HVY W3HXF W3HZU W3HZZ W3ICM W3IDT W3II W3IK W3IL W3IP W3IQ W3IUU W3IZ W3JBS W3JCB W3JG W3JJ W3JJL W3JRD W3JRD/P W3JX W3KB W3KDR W3KGN W3KHQ W3KKO W3KL W3KM W3KWH W3KX W3LA W3LC W3LES W3LH W3LHT W3LI W3LIF W3LL W3LPL W3LPR W3LR W3LRC W3LZR W3MA W3MAM W3MBC W3MDS W3MF W3MIE W3MLJ W3MLK W3MM W3MMM W3MR W3MRL W3MS W3MY W3NFB W3NO W3NRJ W3NTP W3NV W3NX W3OA W3OC W3OD W3OFT W3OH W3ON W3OU W3PA W3PAW W3PAX W3PD W3PGA W3PH W3PIE W3PJ W3PLS W3PN W3PNM W3PP W3PPG W3PR W3PRL W3PU W3PV W3QCP W3QE W3QKA W3QT W3RAR W3RC W3RCO W3RE W3RFC W3RGA W3RI W3RIK W3RJW W3RLO W3RLP W3RSS W3RTY W3RW W3RZ W3SA W3SAX W3SCA W3SD W3SFG W3SJI W3SK W3SM W3SM/1 W3SO W3SPC W3SQ W3SZ W3TA W3TAS W3TB W3TC W3TD W3THI W3TJW W3TLN W3TMS W3TOP W3TRW W3TS W3TT W3TTT W3TTY W3TW W3UA W3UC W3UDX W3UL W3ULS W3UR W3US W3USA W3UTD W3VPJ W3VPR W3VT W3VV W3WC W3WH W3WHK W3WKX W3WMU W3WN W3WOT W3WR W3WT W3WTD W3WTE W3WW W3XG W3XOX W3XY W3YA W3YI W3YJ W3YQ W3YR W3YY W3YZM W3ZF W3ZGD W3ZIC W3ZL W3ZR W3ZX W3ZYF W4/KP4Y W4AA W4AAA W4AAW W4AAZ W4AC W4ACJ W4ACM W4ACW W4AFB W4AG W4ALF W4ALM W4AMC W4AMW W4AN W4ANE W4ANT W4AP W4APZ W4AQL W4ARW W4ATD W4ATG W4ATL W4AU W4AUB W4AVT W4AVV W4AWE W4AX W4BAB W4BAX W4BBT W4BCG W4BFB W4BGT W4BH W4BLA W4BMX W4BNO W4BOC W4BOH W4BSS W4BTW W4BUG W4BVH W4BW W4BWJ W4BXI W4BZM W4CA W4CAE W4CAN W4CAR W4CB W4CBS W4CDA W4CDK W4CFS W4CHI W4CI W4CIR W4CJB W4CK W4CLJ W4CMG W4CN W4COV W4CQ W4CRN W4CRV W4CU W4CVY W4CWL W4CWM W4CZU W4DAN W4DAS W4DD W4DEE W4DFR W4DHE W4DHN W4DHT W4DL W4DMK W4DML W4DNN W4DNX W4DO W4DOW W4DQ W4DR W4DTA W4DTO W4DUK W4DW W4DXX W4DXZ W4EAB W4EAZ W4EDE W4EE W4EEH W4EEY W4EF W4EG W4EIS W4EIS/5 W4EJG W4ELP W4EMB W4EMI W4ENN W4EPM W4ER W4EYJ W4EZ W4FC W4FEB W4FFW W4FHC W4FOA W4FOC W4FOT W4FS W4FSM W4FUN W4GBR W4GCB W4GD W4GDC W4GDG W4GE W4GEH W4GFY W4GHS W4GHV W4GIB W4GJ W4GKA W4GKM W4GKR W4GMT W4GO W4GOK W4GON W4GR W4GRC W4GRV W4GV W4GZX W4HCW W4HFH W4HG W4HGW W4HK W4HLD W4HM W4HOD W4HOG W4HRC W4HRL W4HRR W4HWD W4HZ W4ID W4IDX W4IEE W4IM W4IMD W4IOD W4IOP W4IOW W4IPC W4IT W4IVF W4IWH W4IY W4IZT W4JAM W4JDS W4JES W4JF W4JHU W4JHV W4JKC W4JL W4JNB W4JNC W4JNH W4JOV W4JPP W4JRJ W4JS W4JSI W4JTP W4JUS W4JUU W4JVN W4KA W4KAZ W4KBX W4KFC W4KJ W4KJP W4KKN W4KLS W4KLY W4KMR W4KP W4KPG W4KRN W4KW W4KX W4KYC W4KZ W4LAC W4LAN W4LC W4LHS W4LIA W4LID W4LIP W4LJS W4LOS W4LP W4LSV W4LT W4LUB W4LWW W4LWZ W4LX W4LZU W4MAA W4MAY W4MBD W4MBX W4MDV W4MEA W4MEL W4MF W4MHA W4MID W4MIS W4MLB W4MQC W4MRJ W4MTL W4MTM W4MY W4MYA W4MZ W4NA W4NBS W4NC W4NDX W4NF W4NH W4NI W4NJA W4NJK W4NL W4NNF W4NSJ W4NT W4NTA W4NU W4NWC W4NWS W4NYY W4NZ W4OC W4OEP W4OG W4OLB W4OM W4ORS W4OT W4OTQ W4OV W4OVH W4OX W4PA W4PF W4PFM W4PG W4PGM W4PH W4PID W4PJW W4PK W4PL W4PM W4POT W4PPC W4PR W4PRH W4QK W4QN W4QNW W4QO W4QYV W4RAA W4REC W4REM W4RHB W4RIN W4RJ W4RJC W4RJF W4RJJ W4RKC W4RM W4RN W4RQ W4RR W4RRE W4RRX W4RTN W4RTV W4RVU W4RX W4RYW W4RYZ W4SAA W4SB W4SCV W4SEC W4SEH W4SFG W4SIG W4SIG/2 W4SIG/6 W4SJV W4SK W4SLT W4SMS W4SNF W4SOH W4SPR W4SRO W4STV W4SVP W4SYV W4TA W4TG W4THI W4TIJ W4TJE W4TJM W4TKY W4TLZ W4TM W4TMD W4TMO W4TO W4TRH W4TTM W4TTO W4TTY W4TYB W4UAL W4UAT W4UB W4UC W4UCK W4UD W4UDX W4UEF W4UG W4UK W4UM W4UT W4UV W4UW W4UWC W4VA W4VB W4VG W4VHF W4VHH W4VIC W4VOX W4VP W4VQ W4VS W4VVK W4WAC W4WAV W4WCD W4WF W4WGN W4WHF W4WJ W4WLF W4WNT W4WOX W4WRS W4WSH W4WT W4WTS W4WV W4WWQ W4WXA W4WYD W4WYI W4XD W4XK W4XO W4XR W4XXV W4YCC W4YDY W4YE W4YFJ W4YG W4YK W4YRL W4YY W4ZAO W4ZD W4ZDT W4ZF W4ZGR W4ZGR/1 W4ZOR W4ZPH W4ZPR W4ZV W4ZYT W5/WP3C W5ABA W5ABQ W5ADB W5AFV W5AHA W5AHS W5AJ W5AK W5ANE W5AP W5AP/0 W5AQY W5AQZ W5ART W5ASP W5AWL W5AZ W5BGP W5BIB W5BLD W5BM W5BT W5CBP W5CHA W5CIA W5CJF W5CMM W5COV W5CPT W5CSM W5CSR W5CT W5CW W5CWM W5CWT W5DAC W5DC W5DCC W5DDL W5DDM W5DET W5DLW W5DMC W5DW W5DXQ W5DXR W5DXS W5EAA W5ECJ W5EEX W5EIY W5EMC W5ENT W5ESE W5FB W5FF W5FMH W5FN W5FOC W5FZ W5GAD W5GAI W5GCX W5GFI W5GIE W5GIL W5GJ W5GN W5GND W5GOL W5GZ W5HEX W5HFF W5HIO W5HL W5HNK W5HP W5HRS W5HWZ W5IAY W5IB W5IDX W5IF W5INC W5IP W5IPA W5IQ W5IV W5JAW W5JAY W5JCC W5JDF W5JE W5JJ W5JK W5JLH W5JMC W5JMW W5JPW W5JR W5JTC W5JUG W5JYB W5JZ W5KA W5KBW W5KDJ W5KFL W5KFT W5KI W5KQJ W5KS W5KU W5KV W5KWB W5KY W5LA W5LDR W5LE W5LEO W5LGK W5LLX W5LO W5LUA W5LVC W5MBH W5MCO W5MEL W5MF W5MIL/HR9 W5MJ W5MMW W5MO W5MRM W5MT W5MWL W5MX W5NAL W5NDS W5NE W5NGU W5NIS W5NN W5NNI W5NOR W5NQH W5NWT W5NZ W5NZE W5ODD W5ODJ W5OE W5OOO W5OT W5OX W5OXJ W5PAA W5PDO W5PDW W5PET W5PF W5PGR W5PJW W5PKE W5PKK W5PR W5PUF W5QC W5QLF W5QM W5QZ W5RCG W5RDL W5RE W5RF W5RG W5RIN W5RIP W5RJJ W5RJT W5ROK W5ROS W5RRR W5RRW W5RTA W5RU W5RYA W5RYC W5RZ W5SE W5SG W5SGL W5SJ W5SLS W5SS W5SUI W5SWG W5TA W5TCB W5TCR W5TD W5TEN W5THT W5TJL W5TJS W5TM W5TMC W5TMT W5TN W5TTE W5TV W5TX W5UAA W5UE W5UHF W5UHQ W5UJ W5ULR W5UMS W5UR W5URX W5UXE W5VE W5VGR W5VQ W5VS W5VUY W5VX W5WB W5WE W5WI W5WSS W5WTH W5WTM W5WTX W5WX W5WZ W5XB W5XC W5XD W5XNA W5XU W5XX W5YA W5YB W5YBT W5YD W5YGS W5YO W5YS W5YYA W5YZ W5ZA W5ZDN W5ZE W5ZG W5ZN W5ZO W5ZP W5ZPA W5ZPM W5ZR W5ZZ W6AAJ W6ADF W6AEQ W6AER W6AF W6AFA W6AJF W6AMY W6APH W6ARA W6AT W6ATB W6ATV W6AX W6AYC W6AZ W6BDW W6BHZ W6BID W6BIV W6BJB W6BO W6BOC W6BQ W6BRY W6BS W6BSD W6BVB W6BX W6BXQ W6CIT W6COW W6CQP W6CTF W6CWM W6CYX W6DAR W6DCC W6DGD W6DMR W6DOJ W6DPM W6DR W6DSG W6DT W6DVS W6EDY W6EK W6ELA W6ELI W6ENZ W6EU W6EZE W6EZY W6FA W6FB W6FD W6FKX W6FL W6FUV W6GA W6GAE W6GEE W6GJB W6GL W6GMP W6GMT W6GMU W6GOK W6GRT W6GRV W6GSQ W6GU W6HB W6HDG W6HGF W6HTC W6HX W6HYD W6HYI W6IA W6IBU W6ICR W6IFN W6IHG/4 W6IJ W6INO W6IR W6IX W6IZT W6JBR W6JGR W6JHB W6JJY W6JK W6JTI W6JWK W6JXH W6JZ W6JZH W6KA W6KB W6KC W6KGP W6KH W6KJ W6KK W6KW W6LAX W6LD W6LEN W6LFB W6LFQ W6LG W6LP W6LW W6LWG W6MKO W6ML W6MOB W6MY W6MYN W6MZ W6NCB W6NEK W6NF W6NIK W6NK W6NKR W6NL W6NUC W6NV W6NWS W6NY W6NYA W6OAR W6OAT W6OCL W6OFM W6OOL W6OPO W6OQI W6ORZ W6OU W6OUL W6PG W6PH W6PHO W6PMD W6PNG W6PNG/VY2 W6PRK W6PU W6PX W6PZ W6QA W6QFU W6QU W6QUV W6RA W6RBC W6RC W6RD W6RDF W6REK W6RF W6RFU W6RGG W6RIG W6RJM W6RKC W6RKE W6RLL W6RLL/7 W6RMC W6RO W6RPM W6RQ W6RR W6RS W6RW W6SA W6SAI W6SAN W6SC W6SDY W6SF W6SFG W6SFI W6SFK W6SFM W6SG W6SGJ W6SIY W6SLZ W6SQC W6SR W6ST W6SX W6SZG W6TA W6TCP W6TDX W6TJK W6TK W6TMD W6TN W6TRW W6TSP W6TWH W6UB W6UC W6UDO W6UE W6UFO W6UM W6UQ W6US W6UV W6UW W6UZ W6VAR W6VIO W6VP W6VYC W6VZV W6WB W6WF W6WG W6WU W6WV W6WVW W6WWV W6XB W6XI W6XK W6XR W6XR/2 W6XU W6YA W6YI W6YLD W6YNO W6YR W6YTG W6YX W6YXY W6ZAR W6ZE W6ZL W6ZO W6ZTY W6ZX W7/HB9FHV W7ABT W7AC W7AE W7AH W7AI W7AIA W7AIT W7AMC W7AMD W7AMR W7AQK W7AT W7AU W7AUM W7AV W7AVM W7AXN W7AYY W7AZY W7BAK W7BAR W7BJN W7BO W7BOB W7BP W7BSO W7BV W7CAR W7CCE W7CD W7CFR W7CO W7CQQ W7CSA W7CT W7CTA W7CWR W7CX W7CXX W7DBA W7DCM W7DEQ W7DFO W7DG W7DGR W7DK W7DM W7DN W7DO W7DRA W7DRM W7DRN W7DT W7DX W7EB W7ED W7EDC W7EE W7EED W7EEE W7EF W7EJS W7EL W7ESE W7EW W7FD W7FI W7FIZ W7FLY W7FN W7FW W7FYW W7FZY W7GB W7GDK W7GEM W7GES W7GF W7GFW W7GIB W7GJF W7GKF W7GRA W7GS W7GSV W7GT W7GTF W7GYM W7HJ W7HJ/4 W7HJL W7HPW W7HR W7HRC W7HY W7ID W7IDG W7IDM W7IEX W7IFG W7IGC W7II W7IL W7IME W7IMP W7IP W7ISG W7ISS W7IU W7IUO W7IV W7IVM W7IY W7IZ W7JAX W7JET W7JHR W7JLC W7JOI W7JSD W7JSN W7JW W7KAM W7KB W7KBI W7KEY W7KF W7KFI W7KKM W7KNX W7KPL W7KRS W7KZU W7LD W7LG W7LKG W7LRD W7LT W7LVT W7MAD W7MAE W7MCM W7MCP W7MEM W7MI W7MJM W7MKE W7MOT W7MRF W7MTL W7MW W7NB W7NEE W7NIK W7NN W7NQ W7NT W7NTD W7OIL W7OJT W7OKC W7OM W7ON W7OQ W7OTL W7OTV W7OXB W7PEM W7PI W7PIG W7POE W7PP W7PRA W7PSK W7PT W7PU W7PV W7PX W7QC W7QDM W7QHZ W7QL W7QM W7RAJ W7RAT W7REE W7RF W7RG W7RGM W7RH W7RIS W7RM W7RN W7RPE W7RRS W7RTC W7RX W7RY W7RY/0 W7SA W7SAG W7SEQ W7SLS W7SMS W7SMW W7SO W7SP W7SQ W7SST/4 W7SU W7SUR W7SW W7SXM W7SY W7TA W7TAN W7TAO W7TBC W7THD W7TI W7TJ W7TLV W7TOA W7TR W7TRG W7TST W7TUE W7TUS W7TVC W7TX W7TZZ W7UA W7UB W7UDG W7UDH W7UPF W7UQ W7USA W7UT W7UUU W7UV W7UZ W7VAS W7VJ W7VNE W7VO W7VOA W7VP W7VQ W7VSM W7VTX W7VW W7VXS W7VY W7WA W7WDX W7WEC W7WES W7WHO W7WHY W7WIA W7WLL W7WM W7WMO W7WOO W7WP W7WR W7WRJ W7WSV W7WW W7WZ W7XI W7XP W7XQ W7XT W7XU W7XZ W7YAQ W7YAQ/6 W7YED W7YKM W7YKN W7YRC W7YS W7YTF W7ZAC W7ZB W7ZF W7ZFG W7ZI W7ZOI W7ZR W7ZRC W7ZT W7ZZ W8/UT5UDX W8/WP3C W8AAR W8AB W8ACW W8ADC W8AHC W8AHT W8AJF W8AJM W8AJT W8AKR W8AKS W8AL W8ALM W8ALP W8AN W8ANT W8APS W8ARC W8ARD W8ASA W8AT W8ATE W8AV W8AZA W8BAQ W8BAR W8BBM W8BFX W8BG W8BHA W8BI W8BLA W8BM W8BRY W8BSD W8BT W8BZY W8CAG W8CAR W8CMK W8CO W8CT W8CTO W8CUB W8CZN W8DC W8DCQ W8DDS W8DGN W8DHG W8DJ W8DKC W8DLD W8DLW W8DM W8DN W8DOH W8DRH W8DSN W8DTN W8DW W8DWL W8DXA W8DXU W8DXU/4 W8EDU W8EDW W8EH W8EHH W8ENO W8EO W8EOG W8ERD W8EWH W8FAX W8FBE W8FCD W8FDV W8FJ W8FLT W8FMS W8FN W8FR W8FSM W8FW W8FY W8GEX W8GF W8GJ W8GK W8GNM W8GOC W8GP W8GWS W8GX W8HAP W8HC W8HCS W8HFY W8HGH W8HH W8HHF W8HMK W8HN W8HOG W8HOM W8HOT W8HP W8HPJ W8HW W8HY W8ID W8IJN W8IM W8IQ W8IWD W8JBL W8JER W8JGU W8JH W8JHA W8JJ W8JJB W8JLT W8JMZ W8JR W8JRK W8JTW W8JWD W8JWN W8JY W8KA W8KA/6 W8KEN W8KHP W8KID W8KIW W8KJR W8KM W8KNO W8KR W8KRZ W8KSC W8KTQ W8KVK W8LJB W8LJZ W8LM W8LMG W8LPN W8LRC W8LRJ W8LRL W8LSQ W8LVI W8LVN W8LYJ W8MAA W8MAI W8MAL W8MC W8MDG W8MET W8MGM W8MJ W8MJM W8MKR W8MMM W8MO W8MOX W8MP W8MQW W8MRL W8MSC W8MSK W8MSP W8MZ W8NAT W8NFM W8NGA W8NIC W8NNC W8NOR W8NP W8NSS W8NU W8NWG W8OH W8OO W8OU W8OV W8PA W8PAB W8PDH W8PDM W8PE W8PEN W8PG W8PI W8PIF W8PLP W8PN W8PR W8PSP W8PU W8QEJ W8QL W8QLY W8QQQ W8QXR W8RA W8RDZ W8RES W8REW W8RGE W8RJL W8RJL/6 W8RLP W8RNE W8RP W8RT W8RTJ W8RTN W8RU W8RZ W8SH W8SKF W8SOO W8SP W8SUN W8SYD W8TAH W8TAM W8TB W8TDA W8TK W8TM W8TNO W8TOM W8TOM/1 W8TU W8TVO W8TWA W8TZA W8UCO W8UE W8UF W8UM W8USA W8UV W8UVZ W8VA W8VI W8VO W8VP W8VPV W8VS W8VVE W8VVL W8VY W8VZ W8WA W8WCQ W8WE W8WEJ W8WEU W8WFC W8WGT W8WOM W8WTD W8WTS W8WVU W8WY W8XAL W8XC W8XD W8XDX W8XY W8YPV W8YU W8YV W8ZA W8ZAC W8ZF/4 W8ZHO W8ZPF W8ZR W8ZST W8ZX W8ZZX W9/NP2I W9AB W9ABK W9ADG W9AEB W9AEM W9AFB W9AIU W9AJS W9AKS W9AN W9AP W9APE W9ATG W9ATU W9AV W9AVM W9AWE W9AZ W9BDN W9BF W9BGJ W9BGX W9BLF W9BLP W9BLW W9BM W9BMK W9BN W9BS W9BU W9BV W9BWR W9CC W9CF W9CH W9CL W9CLQ W9CPV W9CQG W9CQO W9CSX W9CWO W9CY W9CYA W9DAL W9DBF W9DC W9DEE W9DEY W9DF W9DKB W9DLP W9DTO W9DUA W9DUB W9DUP W9DX W9DZ W9EAU W9EBK W9EBO W9EEU W9EHQ W9ELN W9EO W9ET W9EWZ W9EZ W9FAA W9FFA W9FFA/4 W9FI W9FK W9FOG W9FPZ W9FR W9FX W9FY W9FZ W9GA W9GDT W9GFB W9GI W9GIG W9GL W9GO W9GOL W9GRS W9GS W9GT W9GVW W9GY W9GYA W9GYK W9HEM W9HHX W9HI W9HLQ W9HM W9HT W9IE W9II W9IIX W9IK W9IKU W9IL W9ILF W9ILY W9IU W9IZ W9JA W9JCC W9JEF W9JET W9JFK W9JGH W9JH W9JI W9JJ W9JJB W9JN W9JOE W9JPM W9JPR W9JRF W9JUG W9JWC W9JXN W9JZ W9KB W9KG W9KHH W9KK W9KKN W9KKN/2 W9KM W9KNI W9KVR W9KXQ W9KY W9LC W9LCM W9LDX W9LG W9LGI W9LHG W9LIZ W9LKJ W9LMB W9LR W9LSD W9LSE W9LU W9LW W9MAF W9MAK W9MC W9MDB W9MDK W9MET W9MGB W9MK W9MKR W9MQB W9MRH W9MS W9MU W9MVA W9MXQ W9NC W9NE W9NED W9NEM W9NF W9NJY W9NWY W9NXM W9NY W9NZ W9OA W9OA/9 W9OD W9OFF W9OFQ W9OG W9OO W9OP W9OS W9OSI W9PA W9PC W9PCS W9PDC W9PDS W9PIP W9PL W9PL/7 W9POL W9PRO W9QL W9RA W9RAR W9RE W9RF W9RGB W9RJB W9RM W9RN W9RNK W9RNY W9RTB W9RVG W9SA W9SAU W9SE W9SMC W9SN W9SSS W9SU W9SUN W9SW W9TA W9TAM W9TC W9TCH W9TD W9TE W9TH W9TLW W9TN W9TO W9TPJ W9TS W9TW W9TY W9UD W9UM W9UUM W9UUU W9UXZ W9VA W9VB W9VMW W9VNE W9VOX W9VQ W9VT W9VW W9WAP W9WB W9WE W9WI W9WJ W9WLX W9WO W9WR W9WRC W9WS W9WWG W9WWI W9WY W9XA W9XG W9XS W9XT W9XU W9XX W9XY W9YB W9YE W9YK W9YKR W9YRC W9YS W9YSX W9YXX W9ZCL W9ZJX W9ZL W9ZR W9ZV WA0AAM WA0AUX WA0BJR WA0BSW WA0CED WA0CRI WA0CSL WA0CTZ WA0DKC WA0FAA WA0HHX WA0HSX WA0I WA0ILD WA0IYY WA0JCO WA0JJC WA0JTL WA0JZK WA0KNP WA0KWI WA0LIF WA0LJM WA0LPV WA0LRE WA0MHJ WA0MN WA0N WA0OFM WA0PFC WA0PTZ WA0QJE WA0RSX WA0RVK WA0SHK WA0TML WA0TPN WA0TTS WA0TXT WA0USA WA0VQY WA0VSW WA0WOV WA0WWW WA0YPC WA0YQM WA0ZDE WA1AC WA1AR WA1BR WA1BXY WA1CT WA1DD WA1DRQ WA1EAJ WA1ECA WA1EOX WA1F WA1FCC WA1FCN WA1FMM WA1FXK WA1GOS WA1GPO WA1HEW WA1HFF WA1HRH WA1HXH WA1J WA1JKR WA1JL WA1KKM WA1LAD WA1LSH WA1MJS WA1N WA1NPZ WA1OJN WA1OTZ WA1PGB/6 WA1PMA WA1QDX WA1QZX WA1RF WA1S WA1SAY WA1SKQ WA1SXK WA1SYH WA1T WA1TAC WA1TE WA1TOM WA1TTL WA1UJU WA1VAB WA1VFO WA1VQY WA1WCC WA1WM WA1X WA1YDH WA1YZN WA1Z WA1ZKN WA2AAW WA2ALP WA2ALY WA2BCK WA2BFW WA2BJN WA2BLE WA2BOT WA2BTR WA2C WA2CCN WA2CHV WA2CJS WA2CLX WA2CNV WA2CP WA2CXA WA2DE WA2DHG WA2DIY WA2DNI WA2EDJ WA2EIN WA2EMF WA2EUJ WA2EXZ WA2FAX WA2FHJ WA2FON WA2FTC WA2FZB WA2GSL WA2HIP WA2HMM WA2HQL WA2HYO WA2HZO WA2HZS WA2IHE WA2IKL WA2IVD WA2IWC WA2JAL WA2JLW WA2JOE WA2JQK WA2JQZ WA2LOT WA2LTM WA2LXE WA2MAV WA2MBP WA2MCR WA2MIS WA2NYY WA2OAX WA2OCG WA2OMT WA2ONG WA2OQM WA2P WA2PCN WA2PJF WA2PYX WA2QAU WA2RAS WA2RNM WA2RP WA2RXS WA2SLH WA2SQQ WA2SWX WA2T WA2TDE WA2TIY WA2TMC WA2TMF WA2TPQ WA2TPU WA2UBK WA2UCZ WA2USA WA2USA/4 WA2VJL WA2VNV WA2VQF WA2VQV WA2VQW WA2VUM WA2VUY WA2VYA WA2VZQ WA2WAP WA2WGF WA2WMJ WA2YSJ WA2ZVN WA2ZZ WA3AAN WA3ADI WA3AER WA3AFS WA3C WA3DMD WA3DQS WA3EKL WA3EOQ WA3EYL WA3FAE WA3FET WA3FIR WA3FRP WA3FWA WA3GFZ WA3GGM WA3GM WA3GOS WA3GPP WA3GYW WA3HAE WA3HGW WA3HJR WA3HLC WA3HSC WA3IIA WA3JAT WA3JRS WA3KCP WA3KVN WA3LKT WA3LXD WA3MCK WA3MD WA3MJZ WA3N WA3NUF WA3OFR WA3QNT WA3QWA WA3RGH WA3RGY WA3RHW WA3RHW/4 WA3RSL WA3RWP WA3SRU WA3SXX WA3TD WA3TMR WA3TRE WA3TVH WA3V WA3WDK WA3WLH WA3WNT WA3WOM WA3WXR WA3YNW WA3YZD WA3ZIC WA3ZKI WA3ZMH WA3ZSC WA3ZTR WA4AFJ WA4APB WA4APL WA4AV WA4BCS WA4BD WA4BQM WA4BRX WA4BUO WA4CAX WA4CHJ WA4CQG WA4CR WA4DB WA4DJ WA4DOX WA4DT WA4DYD WA4EEZ WA4EMU WA4EUL WA4FXT WA4GGK WA4GPM WA4GQG WA4GZK WA4HH WA4HMR WA4HWT WA4IAX WA4III WA4IPU WA4JA WA4JJY WA4JQS WA4JUK WA4KIT WA4KNP WA4KSO WA4KWK WA4KY WA4LDU WA4LXU WA4MFK WA4MIT WA4MLD WA4MQW WA4MSU WA4NUF WA4OFW WA4PGI WA4PGM WA4PSC WA4Q WA4RDZ WA4RTE WA4RXK WA4SRF WA4TAS WA4TL WA4TMJ WA4USA WA4USN WA4UWD WA4VKA WA4VMF WA4WDV WA4WKL WA4WPG WA4WR WA4WTG WA4WW WA4WZR WA4YA WA4YHA WA4YJB WA4YL WA4YWM WA4ZOF WA4ZXV WA5ABR WA5AC WA5BDU WA5DSS WA5DTK WA5DTK/0 WA5FWC WA5HC WA5IEK WA5IMF WA5JM WA5JMZ WA5KBH WA5LFD WA5LHM WA5LLX WA5LSV WA5LXS WA5MS WA5OBV WA5P WA5PFJ WA5POK WA5RN WA5RR WA5SNL WA5SOG WA5SWN WA5SWV WA5TCA WA5TRL WA5VGI WA5VRE WA5VSK WA5WFE WA5YOM WA5ZKO WA5ZVE WA6AAC WA6AQL WA6AZP WA6BJM WA6CDO WA6DIL WA6DPP WA6EEM WA6EGG WA6FGV WA6GD WA6GJW WA6GYC WA6HNA WA6HXM WA6HZY WA6I WA6IKE WA6IQO WA6JRZ WA6KFI WA6KHK WA6KSK WA6KYR WA6LIE WA6MEM WA6MM WA6MP WA6MRK WA6NFJ WA6NKM WA6NPA WA6O WA6OSX WA6OUD WA6OWM WA6PKB WA6POZ WA6PPX WA6PSI WA6PWP WA6SUZ WA6SWM WA6SZE WA6TLA WA6TQT WA6TYQ WA6URY WA6YAW WA6YBR WA6YSM WA6ZTY WA7AA WA7AJ WA7AN WA7AXT WA7BAM WA7BAR WA7BME WA7BNG WA7BNM WA7BRL WA7CPA WA7DAU WA7DHQ WA7DUH WA7FUS WA7G WA7HQD WA7HR WA7ITZ WA7L WA7LAW WA7LNC WA7LNW WA7MLH WA7MMM WA7NB WA7ND WA7NPX WA7NS WA7NWL WA7PRC WA7PVE WA7RCT WA7RLL WA7SHP WA7SKG WA7TOY WA7URJ WA7WJR WA7YAZ WA7YXY WA7ZIT WA8AHZ WA8BMA WA8CDU WA8CLT WA8CZD WA8DXB WA8FOZ WA8FTA WA8GCR WA8KAN WA8KBU WA8KHP WA8KKN WA8KNE WA8LE WA8LRU WA8MCD WA8MXJ WA8NSS WA8NSS/4 WA8OJR WA8OLD WA8OLN WA8OPR WA8Q WA8QYJ WA8RCN WA8RD WA8REI WA8RNB WA8RR WA8RRA WA8SDA WA8SDF WA8TJC WA8TWM WA8UMT WA8UPB WA8VEC WA8VSJ WA8VTD WA8WZG/7 WA8Y WA8YVF WA8ZBT WA8ZIP WA9AFM WA9AFM/5 WA9AGG WA9AQN WA9BB WA9BD WA9BLP WA9BZW WA9CUK WA9CW WA9CWX WA9DLH WA9DU WA9ETW WA9FET WA9FZQ WA9IVH WA9JBR WA9JIB WA9JLV WA9JNO WA9JSI WA9KIA WA9KUX WA9LEY WA9LJK WA9MSR WA9OJJ WA9PWP WA9QEX WA9S WA9STI WA9SUG WA9SWW WA9SZM WA9THI WA9TKK WA9TOP WA9TTC WA9URF WA9VBG WA9VEE WA9WYI WA9YI WA9ZBW WA9ZEX WA9ZVF WB0AEA WB0AGU WB0AOD WB0B WB0CFF WB0CHS WB0CJB WB0CLL WB0DHB WB0DYZ WB0GAZ WB0GKH WB0HHM WB0IWG WB0KGN WB0KWJ WB0LRX WB0MCO WB0MMA WB0MNW WB0MOA WB0N WB0NPN WB0O WB0OFR WB0POH WB0PTO WB0PYF WB0QLU WB0QWZ WB0RAU WB0RUR WB0RXQ WB0SDW WB0SIO WB0SMZ WB0SND WB0SSC WB0TEV WB0TJD WB0TML WB0TVY WB0U WB0UKI WB0ULX WB0VAK WB0VPS WB0VZK WB0WIV WB0X WB0ZRD WB0ZWW WB1ABQ WB1AEL WB1FQW WB1GQR WB1KE WB2AA WB2AIV WB2AKH WB2AMU WB2ART WB2ATZ WB2AWQ WB2AWQ/7 WB2BEW WB2BMC WB2BTJ WB2COY WB2CPU WB2DHY WB2ELW WB2EOD WB2EVC WB2FSL WB2FTQ WB2FUV WB2FZC WB2GDD WB2GMY WB2HJK WB2HJV WB2HLM WB2HNL WB2HRO WB2HTO WB2IKL WB2JAY WB2JEP WB2JGD WB2JNA WB2JUF WB2KAO WB2KEC WB2KHE WB2KLD WB2KSP WB2KUT WB2KWC WB2KXC WB2LZM WB2MSB WB2MZI WB2NFL WB2NJN WB2NVR WB2NWR WB2OLO WB2OMZ WB2P WB2PJH WB2PKR WB2PMC WB2QJ WB2QMX WB2QOK WB2REM WB2RIS WB2RPW WB2RUU WB2RVX WB2RZU WB2SHZ WB2SIH WB2SIH/2 WB2SMK WB2TJO WB2TQE WB2UDC WB2UFO WB2UKX WB2UZE WB2VGD WB2VIR WB2VVV WB2VYK WB2WFJ WB2WGH WB2WGX WB2WIK WB2WMF WB2WPM WB2YDS WB2ZAB WB2ZAP WB2ZEI WB3AFS WB3AVD WB3AZL WB3BEF WB3BJU WB3CJU WB3D WB3DOM WB3DPS WB3DYE WB3EHS WB3EVZ WB3FAE WB3FBL WB3FKP WB3IFD WB3IGR WB3ISP WB3IWC WB3J WB3JFS WB3JIS WB3JKQ WB3KLE WB3KVR WB3LGC WB4AAA WB4AEG WB4BB WB4C WB4DB WB4DKQ WB4DNL WB4EEH WB4EHG WB4EWS WB4FDT WB4FSF WB4FWQ WB4GHZ WB4GUH WB4HDM WB4HRL WB4HXE WB4IIH WB4ILW WB4IUY WB4JFS WB4JHS WB4KDI WB4KFO WB4KLI WB4KTF WB4LJX WB4LLV WB4M WB4MJF WB4MM WB4MNK WB4MSG WB4NQF WB4OBF WB4OMG WB4OMM WB4PLD WB4PWZ WB4QOC WB4RA WB4RRD WB4SPB WB4TDH WB4TDS WB4WXE WB4X WB4YBY WB4YDL WB4YDY WB4YZA WB4ZBI WB5AAA WB5BHS WB5BKL WB5EUC WB5GM WB5HOW WB5JJJ WB5K WB5KFP WB5KSD WB5OSD WB5Q WB5QNA WB5RYB WB5T WB5TKI WB5TOI WB5TUF WB5UAA WB5UTD WB5WAH WB5WAJ WB5WEC WB5WLZ WB5XR WB5XX WB5ZGA WB6AAJ WB6BET WB6CZG WB6DHI WB6DJI WB6ETY WB6EWM WB6HFH WB6HUM WB6HVW WB6HYH WB6I WB6IUK WB6IVF WB6IWY WB6IZG WB6JJJ WB6JVP WB6KBZ WB6KDH WB6KWL WB6MMC WB6NBU WB6NJA WB6NVB WB6OEE WB6OTS WB6PJC WB6POT WB6QCS WB6QPG WB6QQU WB6RAB WB6RCK WB6RED WB6RLC WB6RTQ WB6SKS WB6SQA WB6TOU WB6TYP WB6UIA WB6UTW WB6ZAM WB7AEI WB7AGN WB7BBQ WB7BBU WB7BNE WB7BWZ WB7CW WB7CYO WB7DND WB7FDQ WB7FJG WB7GR WB7OTL WB7PMP WB7PVL WB7QMR WB7S WB7TED WB7TJI WB7TVS WB7UZO WB7VPC WB7VUF WB7WHG WB8AFC WB8AKW WB8ASI WB8AXK WB8BHL WB8BPU WB8BZK WB8CG WB8CPG WB8CQV WB8CZH WB8DC WB8DTJ WB8EJN WB8EVI WB8FSV WB8III WB8IMY WB8IZM WB8JAY WB8JUI WB8K WB8KRY WB8LCD WB8LEM WB8LZG WB8MIW WB8MOI WB8NTA WB8O WB8PIY WB8Q WB8R WB8REI WB8RFB WB8RNV WB8SCT WB8SDA WB8SIG WB8SKP WB8TCB WB8TDG WB8TLI WB8TQZ WB8TRW WB8UBR WB8VGE WB8VLC WB8VLO WB8WKQ WB8WUA WB8YJF/4 WB8YLO WB8YQJ WB8YYY WB9AYW WB9B WB9BWP WB9CIF WB9CTP WB9DAR WB9DBD WB9DKL WB9DLC WB9DZS WB9EDP WB9EFP WB9FBO WB9FMR WB9FQS WB9G WB9HFK WB9HUC WB9IRF WB9IXS WB9JPH WB9JTK WB9JYZ WB9LRK WB9LUR WB9LWO WB9MSM WB9NMN WB9NOO WB9O WB9ONU WB9OTX WB9OVV WB9PRG WB9PTN WB9QAF WB9QAF/0 WB9QVR WB9RAS WB9RWL WB9TFF WB9TFH WB9TJD WB9UGX WB9VGJ WB9VGO WB9VPG WB9VRQ WB9WHI WB9WKT WB9WOZ WB9Z WC0AAA WC0EM WC0G WC0M WC0N WC0W WC1M WC1X/VE2 WC2C WC2K WC2L WC2W WC3N WC3O WC3W WC4D WC4E WC4H WC4J WC4T WC4X WC5D WC5N WC5P WC5WC WC6DX WC6H WC6K WC6S WC6Y WC7CW WC7F WC7Q WC7S WC8VOA WC9AR WC9B WC9D WC9N WC9P WD0ACB WD0AZW WD0BC WD0BGZ WD0BMR WD0BMS WD0DAH WD0EDK WD0EGC WD0EMR WD0FAA WD0FYV WD0GTY WD0T WD1AL WD1DX WD1H WD1S WD1W WD2E WD2F WD2K WD3H WD3LC WD3USA WD4AB WD4ASP WD4AXJ WD4BBB WD4CFN WD4CM WD4DDC WD4DNE WD4EBR WD4EGF WD4ERM WD4EXG WD4EXI WD4GBW WD4GXT WD4GZW WD4IXD WD4JJ WD4KGC WD4KNX WD4KQN WD4KTF WD4LBR WD4LSS WD4LYV WD4OHD WD4OIN WD4OJM WD4OOZ WD5ABC WD5ACR WD5BHS WD5BJT WD5BSA WD5BZN WD5CAW WD5CAY WD5CIK WD5COV WD5CSK WD5CVN WD5DAX WD5DBV WD5DDH WD5DJW WD5DKA WD5ENH WD5F WD5FUN WD5GBS WD5GXX WD5HJF WD5IWW WD5K WD5R WD6DPX WD6DX WD6T WD6V WD7E WD7JS WD7R WD8AHR WD8ANZ WD8BP WD8DSB WD8H WD8IXC WD8KNC WD8KND WD8NHA WD8PUP WD8QGE WD8RIF WD8RUW WD8RYC WD8S WD8SCV WD8Z WD9ABG WD9ATP WD9CIR WD9DZV WD9EKA WD9F WD9FJL WD9FOO WD9FTZ WD9FUM WD9GJK WD9GMK WD9GYM WD9HBF WD9HSY WD9HYM WD9IGY WD9IQN WD9Q WD9V WE0DX WE0FUN WE0Q WE1P WE1SAX WE2ASS WE2DX WE2N WE2S WE4C WE4E WE4JL WE4M WE4RB WE4S WE5E WE5N WE5P WE5TM WE5TR WE5V WE6C WE6EZ WE6M WE6Z WE7G WE7GV WE7IR WE7OMG WE7P WE8G WE8J WE8P WE8R WE9EE WE9R WE9V WF0T WF1A WF1L WF1OC WF2B WF2V WF2W WF2Y WF3H WF3M WF3N WF3T WF4FP WF4U WF4W WF5E WF5J WF5K WF5O WF6C WF6F WF6Q WF6ZZ WF7B WF7S WF7T WF8E WF9A WF9Y WG0D WG0M WG0U WG2B WG2Y WG3C WG3J WG3U WG4F WG4FOC WG4M WG4MC WG5F WG5G WG5H WG7MM WG7X WG8Y WG9L WH6FAM WH6FQI WH6LE WH6LE/W4 WH6R WH7AA WH7M WH7V WH7W WH7Z WI0V WI0WA WI1B WI1G WI1K WI2A WI2C WI2E WI3Q WI3T WI4F WI4L WI4R WI4T WI5FI WI6NE WI6Q WI6R WI6T WI6X WI7J WI7N WI7P WI9B WI9H WI9WI WI9Z WJ0T WJ0Y WJ1B WJ1R WJ1X WJ2D WJ2O WJ4HCP WJ4Q WJ4X WJ5DX WJ5L WJ5S WJ7R WJ7S WJ7W WJ8Y WJ9B WJ9E WJ9U WK0N WK0P WK1DS WK1J WK1Q WK2G WK2H WK2S WK2X WK2Y WK3A WK3V WK4P WK4U WK4Y WK5N WK5T WK6F WK6I WK7ED WK7G WK7P WK7S WK9M WK9U WL7BKA WL7CG WL7CSJ WL7E WM0L WM3J WM3PEN WM3T WM4AA WM4D WM4I WM4Q WM4U WM4W WM5DX WM5F WM5H WM5L WM5TS WM6H WM6Q WM6T WM6Y WM7Z WM8Z WM9I WM9X WN0L WN1F WN1GIV WN2DX WN2O WN2T WN3DX WN3I WN3K WN3N WN3R WN3RDY WN3T WN4AFP WN4AT WN4GM WN4K WN4N WN5G WN5TL WN6K WN6KHG WN6W WN7J WN7S WN7T WN7Y WN8HCV WN8J WN8P WN8Y WN9O WO1I WO1N WO1X WO2E WO2N WO2T WO2X WO2Y WO3E WO3X WO3Z WO4D WO4L WO4O WO4X WO5R WO5S WO5W WO7R WO7T WO7U WO7V WO9B WO9I WO9J WO9S WO9U WO9Z WP2Z WP3C WP3DX WP3E WP3EF WP3GW WP3Q WP3R WP3UX WP3X WP4DT WP4IRV WP4J WP4JBG WP4KEY WP4MPC WP4O WP4OFO WP4PHK WP4Q WP4QHW WP4RF WP4SD WP4SK WP4WW WP4X WP4YL WP4ZZ WQ0A WQ0P WQ1H WQ2E WQ2N WQ3E WQ3N WQ3U WQ3X WQ4O WQ4RP WQ5L WQ5O WQ5OO WQ5R WQ5S WQ5T WQ6C WQ6K WQ6L WQ6Q WQ6X WQ7O WQ7X WQ8Q WQ9T WR0H WR0J WR0N WR0U WR1A WR1B WR1O WR1ST WR1TC WR2D WR2G WR3H WR3O WR3R WR3Y WR3Z WR4B WR4EC WR4F WR4I WR4JW WR4K WR4VR WR5J WR5O WR5U WR6E WR6Y WR7K WR7Q WR7X WR8AA WR8F WR8O WR9L WR9Y WS0I WS0Z WS1L WS1SM WS2E WS2V WS3C WS3M WS4C WS4H WS4S WS4V WS4W WS4WW WS4Y WS5ADV WS5BSA WS5C WS5W WS6K WS6K/8 WS6X WS7I WS7L WS7M WS7V WS7X WS7X/4 WS8G WS9H WS9M WS9V WS9W WS9X WT0DX WT0DX/P WT0O WT1A WT1B WT1L WT1R WT2P WT2P/9 WT3Q WT3W WT4BT WT4KY WT4O WT4R WT5K WT6A WT6K WT7N WT7TT WT8E WT8O WT8P WT8V WT8WV WT9B WT9Q WT9U WT9WT WU0A WU0B WU0L WU1A WU1ITU WU2B WU2G WU2M WU2T WU2X WU3A WU3D WU3U WU3Z WU4B WU4F WU4G WU5E WU5K WU5M WU5X WU6K WU6TT WU6W WU6W/7 WU6X WU6X/4 WU7H WU7Q WU7X WU9B WU9W WV0H WV1H WV1K WV1M WV1Q WV2M WV2ZOW WV3D WV3P WV4CHC WV4ME WV4O WV4P WV4V WV5Y WV6E WV6I WV6N WV7S WV7U WV8A WV8AR WV8DH WV8SM WV8SW WV8TG WV9E WV9S WW0TT WW0WWW WW0Y WW0Z WW1DX WW1I WW1ME WW1US WW1WW WW2DX WW2G WW2NC WW2P WW2R WW2WW WW2Y WW3A WW3K WW3Q WW3S WW3TRG WW4CB WW4DD WW4LL WW4LL/1 WW4LS WW4MM WW4R WW4SF/GVIL WW4XX WW5C WW5DX WW5G WW5L WW5M WW5RC WW5XX WW6D WW6G WW6JR WW6O WW6RY WW6ZZ WW7B WW7D WW7E WW7LW WW7Q WW8H WW8O WW8Q WW8RT WW9DX WW9F WW9L WW9R WX0B WX0E WX0L WX0V WX0Z WX1E WX1J WX1O WX1S WX2CX WX2F WX2N WX2NJ WX2U WX3B WX3G WX4D WX4G WX4HP WX4MH WX4US WX4W WX4X WX5S WX6V WX7MB WX7P WX7SJ WX7T WX8C WX8C/0 WX8F WX8G WX8J WX8V WX8W WX9EP WY0A WY0Q WY0V WY1C WY1G WY3A WY3P WY4Y WY5R WY5Y WY6DX WY6K WY7AA WY7FD WY7KY WY7QP WY7SS WY7W WY8DX WY8I WZ0W WZ1F WZ1V WZ1Y WZ2MM WZ2N WZ4F WZ4K WZ4L WZ4M WZ5AB WZ6G WZ6P WZ6T WZ6X WZ6ZZ WZ7U WZ7ZR WZ8DX WZ8K WZ8P WZ8T WZ8T/7 WZ9B WZ9Q XE1AY XE1B XE1BRX XE1BY XE1CIC XE1CL XE1CQ XE1CT XE1EE XE1FJM XE1GK XE1GZU XE1H XE1HG XE1HON XE1IB XE1IM XE1KK XE1MEX XE1NVA XE1OGG XE1RCS XE1RZL XE1SPM XE1SRA XE1SVT XE1UN XE1USG XE1VY XE1XZQ XE1YD XE2AD XE2AU XE2B XE2BCS XE2BY XE2CQ XE2E XE2EX XE2FGC XE2HQI XE2I XE2IF XE2JA XE2JS XE2JTS XE2JUM XE2KJ XE2MVY XE2MWY XE2N XE2NBL XE2NBW XE2NK XE2NL XE2OK XE2PDZ XE2PEA XE2PXN XE2S XE2T XE2UF XE2V XE2X XE2YWB XE2YWH XE3A XE3WM XE7S XL3A XL75A XP2I XQ1KN XQ1KZ XQ3OP XQ3PC XQ3SK XQ3UP XQ5CIE XQ6OA XR0YD XR0ZRC XR1B XR1D XR2K XR3A XR6F XR6N XT2SZZ XU7AMO XV1X XV9D XV9NPS XX9D XX9O XZ2D YB0ANJ YB0ANN YB0ARJ YB0COU YB0ECT YB0JVZ YB0MWM YB0NDT YB0NSI YB0OKR YB0PTR YB0ZZE YB1AD YB1AR YB1BJV YB1BML YB1BON YB1EGP YB1HDR YB1IM YB1JYL YB1KQ YB1KS YB1LUE YB1P YB1PEF YB1TIA YB1TJ YB1TQL YB1UUN YB1UUU YB2BNN YB2CAA YB2CPO YB2DX YB2ECG YB2GV YB2IQ YB2MM YB2TS YB2TX YB2UFM YB2VMC YB2VYY YB2WA YB3BAR YB3BME YB3BX YB3DY YB3FTD YB3FUA YB3HQM YB3IZK YB3RO YB3VI YB3ZBD YB4FIK YB4IR YB4KRZ YB4NY YB5BOY YB5C YB5OUB YB6DE YB6HAI YB6IUP YB6UAK YB7BIM YB7GRN YB7OO YB7SKM YB7WR YB8ADX YB8IBD YB8NT YB8ROP YB8RW YB8SB YB8TK YB8UM YB8UTI YB9/K1XM YB9ATS YB9GV YB9QP YB9UA YC0BAS YC0MAT YC0OSX YC0POG YC0RI YC0RLX YC0SAS YC0VM YC1AD YC1BON YC1CWK YC1DMK YC1DOL YC1HBP YC1HLT YC1JGE YC1KK YC1ME YC1NMT YC1PZ YC1RKT YC1SGB YC1TQL YC1ZBB YC2CAA YC2CAB YC2EEE YC2EPY YC2FAJ YC2GBS YC2GV YC2HML YC2VOC YC2YIZ YC2YSW YC3ATK YC3BLJ YC3DXG YC3GOQ YC4HQ YC4KAR YC6MYO YC6RMT YC7LP YC7TUU YC7UDD YC7YGR YC8EJ YC8OBM YC8UYJ YC9ATS YC9DE YC9ELS YC9FAR YC9JAU YC9SBP YD0MAT YD0SCZ YD0SDD YD1TJJ YD1WCK YD2CPQ YD2DSV YD2ELT YD2KJC YD2YDX YD2YSW YD3YSF YD7SAL YD7UVB YD7YGR YD8CPZ YD8MKA YD8UXV YD8UYJ YD9AOS YD9ATS YD9VIZ YE0HQ YE0TUR YE1C YE1K YE1R YE1ZAL YE1ZAZ YE1ZS YE3AA YE3WIL YE4IJ YE7SPN YE8XBN YE9CDL YF0TUR YF2UFA YF3BWY YF3DBH YF3DGO YF4ICC YF5YUD YF7SPN YF9CDL YG0TUR YG2UFA YG7SPN YG9CMM YG9DFK YJ0CA YL0A YL100K YL10CWO YL1S YL1ZF YL1ZS YL1ZT YL1ZX YL2AO YL2BJ YL2BR YL2CI YL2CV YL2EA YL2EM YL2FD YL2GD YL2GM YL2GP YL2HR YL2IP YL2JR YL2KF YL2KO YL2LW YL2LY YL2NK YL2NN YL2PJ YL2PP YL2QG YL2QN YL2QV YL2SM YL2SW YL2TD YL2TQ YL2UI YL2VW YL30WAY YL3AD YL3ALK YL3BU YL3CL YL3CU YL3CW YL3ES YL3FO YL3FT YL3FW YL3GAO YL3GAZ YL3GQ YL3GU YL3GV YL3GX YL3HE YL3ID YL3IZ YL3JA YL3JD YL3JI YL3JM YL3KV YL4A YL4HQ YL4U YL5T YL5W YL5X YL6W YL6Z YL7A YL7X YL9T YL9W YM2KK YM3KC YM3VBR YM7KA YN2CC YO2AQB YO2BBX YO2BLX YO2CEQ YO2CJX YO2CMI YO2DFA YO2GL YO2IS YO2KHK YO2KNS YO2LAN YO2LC YO2LDU YO2LEA YO2LLL YO2LOG YO2LSP YO2LXW YO2MHJ YO2MJZ YO2MKI YO2MNZ YO2NAA YO2OXD YO2QY YO2RR YO2SH YO3AAJ YO3APJ YO3BA YO3BIZ YO3BL YO3BY YO3CIY YO3CVG YO3DAC YO3FF YO3FFF YO3FGO YO3FLM YO3FRI YO3GA YO3GCL YO3GGO YO3GNF YO3HOT YO3IJ YO3IMD YO3IPR YO3IRM YO3IWZ YO3JW YO3KST YO3LP YO3LW YO3ND YO3OM YO3RU YO3VU YO3YV YO4AAC YO4AJ YO4AR YO4BEW YO4BEX YO4BKM YO4BXX YO4CAH YO4CAI YO4CSL YO4CVV YO4DFT YO4DW YO4FHU YO4FPF YO4FTE YO4FZX YO4GM YO4GPC YO4KAK YO4MM YO4NF YO4PX YO4RDW YO4RIU YO4RST YO4SI YO4TL YO4UQ YO5AJR YO5AVN YO5AXF YO5BIM YO5BQQ YO5BRE YO5BRZ YO5BXI YO5CDF YO5CUQ YO5DAE YO5DAS YO5ER YO5FMT YO5IA YO5LD YO5NY YO5OAC YO5OBA YO5ODT YO5OHO YO5OHY YO5PBF YO5PBW YO5TP YO6BHN YO6DBA YO6DBL YO6EX YO6FGZ YO6FNA YO6FPW YO6GUU YO6HSU YO6KGS YO6KNE YO6KPT YO6LA YO6LB YO6LB/P YO6MT YO6UO YO7ARY YO7ARZ YO7AWZ YO7BGA YO7CJB YO7CVL YO7CW YO7DAA YO7DBR YO7FB YO7FEY YO7HGM YO7LDT YO7LGI YO7LPZ YO7LYM YO7MPI YO7NE YO7NSP YO7SR YO7WC YO8AAZ YO8AXP YO8AZQ YO8BBU YO8BDQ YO8BDW YO8BGD YO8BOD YO8BSE YO8COQ YO8DAR YO8DHA YO8DOH YO8KRR YO8NR YO8OU YO8OY YO8RFS YO8RIX YO8RKP YO8RNI YO8ROO YO8RXP YO8RZJ YO8SBQ YO8SMM YO8SS YO8ST YO8THG YO8TNB YO8TTT YO8WW YO9AGI YO9AYN YO9BCM YO9BLY YO9BPX YO9BXC YO9CB YO9CWY YO9FEB YO9FLD YO9FNP YO9FYP YO9GDN YO9GSB YO9HG YO9HP YO9IAB YO9IF YO9IJP YO9IKW YO9IOE YO9KXF YO9RIJ YO9WF YO9XC YP0C YP0HQ YP3A YP5A YP6C YP7P YP8A YP8T YP8VS YP8W YP9J YP9W YQ6A YQ8T YR0HQ YR0MB YR0S YR100R YR18BEE YR1918BB YR2V YR33A YR34A YR5N YR7J YR8D YR9F YS1/AA4NC YS1RS YT0A YT0B YT0HQ YT0T YT0W YT0X YT0Z YT1A YT1AA YT1AD YT1FZ YT1HA YT1JB YT1Q YT1R YT1RA YT1RK YT1S YT1T YT1TU YT1TX YT1UM YT1WA YT1X YT2A YT2AAA YT2ISM YT2RX YT2SS YT2T YT2U YT2VP YT2W YT2ZZ YT3EE YT3H YT3J YT3PL YT3R YT3T YT3TPS YT3X YT4A YT4B YT4T YT4TT YT4W YT4ZZ YT5A YT5CQ YT5DEY YT5DXX YT5FD YT5IVN YT5K YT5L YT5LD YT5M YT5N YT5R YT5RA YT5W YT5YTT YT5Z YT6A YT6M YT6T YT6W YT70SRV YT7A YT7AA YT7AR YT7AT YT7AU YT7AW YT7E YT7IM YT7KM YT7M YT7R YT7T YT7TA YT7Z YT8A YT8T YT8WW YT9A YT9M YT9VM YT9W YT9WW YT9X YU0A YU0U YU0W YU1A YU1AAV YU1AFV YU1ANO YU1AU YU1DW YU1EA YU1ED YU1EL YU1EW YU1FG YU1FJK YU1GU YU1HFG YU1IG YU1IQR YU1JF YU1JW YU1KN YU1KT YU1LA YU1LG YU1LM YU1ML YU1NR YU1RA YU1RH YU1RK YU1RM YU1RSV YU1SS YU1SU YU1TUF YU1TY YU1UN YU1UO YU1VG YU1WC YU1XA YU1XX YU1YV YU1ZZ YU2A YU2BPA YU2FG YU2KNO YU3A YU3AAA YU3AO YU3EEA YU3MUP YU3VIP YU3W YU4GUV YU4IMM YU4SMT YU4SSR YU5A YU5C YU5CW YU5DX YU5M YU5MAV YU5R YU5RY YU5T YU5W YU6DX YU70EXY YU73BFG YU7AOP YU7AU YU7BW YU7D YU7EE YU7GMN YU7GW YU7KM YU7KMN YU7KW YU7ONE YU7PEP YU7QF YU7RIM YU7U YU7WW YU7ZZ YU8A YU8NU YU9A YU9DX YV1DIG YV1FM YV1JGT YV1KK YV1SW YV2CAR YV4ABR YV4AW YV4BCD YV4EK YV4MT YV4NR YV4NY YV4RDC YV4YC YV5AAB YV5AAX YV5AJ YV5AM YV5COR YV5DRN YV5EED YV5EMG YV5EN YV5FP YV5GPA YV5HNJ YV5IAL YV5JDP YV5JGO YV5KAJ YV5KG YV5KTM YV5NWG YV5OIE YV5TNT YV5ZV YV6BXN YV6CA YV6KP YV7DX YV7MAY YV7TE YV8AD YW1K YW4D YW4V YW5DX YW5R YW6CQ YY2EDF YY2HCM YY2JAB YY2WTF YY5AEP YY5RPE Z21DX Z23MD Z30A Z30HQ Z31NA Z31RQ Z32ID Z32KF Z32ML Z32TO Z32U Z33A Z33B Z33C Z33F Z33RW Z33ST Z33YL Z33Z Z35F Z35K Z35M Z35O Z35T Z35W Z35Y Z35Z Z36N Z36W Z37DX Z37M Z37Y Z39A Z39Z Z3B Z3M Z3Y Z60A Z61DX Z62FB Z66X Z66Y Z68BH Z68FK Z68M ZA/LZ1MS ZA/OH2BH ZA/OU2I ZA1EM ZA1F ZB2CW ZB2GI ZB2TT ZB8FK ZD7BG ZD7W ZF1A ZF1DJ ZF2AM ZF2AN ZF2BJ ZF2CA ZF2DO ZF2MJ ZF2PG ZF2WF ZF5T ZF8CW ZF9/ZF2XA ZF9CW ZF9DX ZL1ALA ZL1BBW ZL1BQD ZL1DK ZL1FAB ZL1IF ZL1LC ZL1MTO ZL1N ZL1NA ZL1OGX ZL1PWR ZL1RQ ZL1T ZL1TM ZL1XS ZL1YE ZL2AGY ZL2AIM ZL2AJ ZL2AP ZL2AQL ZL2AYZ ZL2AZ ZL2BAQ ZL2BCO ZL2GLG ZL2IFB ZL2IR ZL2JU ZL2MF ZL2MM ZL2RX ZL2UO ZL2X ZL3AL ZL3DMC ZL3ET ZL3GA ZL3GAV ZL3GQ ZL3IO ZL3P ZL3PAH ZL3RIK ZL3TE ZL3VZ ZL3X ZL4AS ZL4AX ZL4FZ ZL4NR ZL4TT ZL4YL ZL4YY ZL6HQ ZL80FOC ZM1A ZM1M ZM2B ZM3P ZM3T ZM4G ZM4T ZP5AA ZP5BVK ZP5CGL ZP5DA ZP5DBC ZP5DNB ZP5DVD ZP5FIA ZP5KO ZP5RPO ZP5WBM ZP5WYC ZP5YW ZP6A ZP6ARO ZP6RAI ZP6TT ZP9MCE ZR2A ZR2A/4 ZS1ANF ZS1C ZS1OIN ZS1OPB ZS1RJQ ZS1S ZS1SBW ZS1TMJ ZS2ABE ZS2DL ZS2HR ZS2MAC ZS2NF ZS2PE ZS3D ZS4TX ZS5XT ZS6AI ZS6BAF ZS6C ZS6CCY ZS6HA ZS6J ZS6MRK ZS6RAS ZS6S ZS6TVB ZS6ZA ZS9HQ ZS9Z ZT1T ZV1FF ZV2C ZV2K ZV4SL ZV5B ZV5O ZV7T ZW1P ZW2T ZW5B ZW5T ZW6T ZW85LABRE ZW86LABRE ZW8T ZX2B ZX2T ZX2V ZX5J ZX8T ZY2A ZY2G ZY2Y ZY5T ZZ2DC ZZ2T ZZ3ZZ ZZ4A ZZ4X ZZ9X 7QNL 7QAA XE3/K5ENS OZ/DJ1XT OZ/DJ5LA XM1150CAN KH6/AI6DO W1UE/HR9 K1XM/HR9 OF9X tlf-1.4.1/share/ssamults0000644000175000017500000000006613651752573012143 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.1/share/help.txt0000644000175000017500000000605513651752573012042 00000000000000Keys (shortcuts) to be used in TLF To see the start up parameters try: 'tlf -?'. 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-PgUp Auto CQ delay + Ctrl-PgDn 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) PgUp CW + 2wpm PgDown CW - 2wpm , CW from Keyboard . Filter bandmap content ; Note in log F1 - F12 Send F1 - F12 msg Shift-F1 Restore CQ frequency from MEM and call CQ 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 $ Switch to MEM and clear it (pop) % Swap TRX and MEM ! New shell :SSB Switch to SSB :CWm Switch to CW :DIG Switch to digital mode :HELp Help :MESsages Set CW messages :SET Edit config file :CFG Edit config file :SIMulate CW CQWW Simulator :ZONes Show list of zones to be worked :CTY List of coutries to be worked :CQDelay 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 : Telnet window, use : to get back to Tlf :PACket 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 remaining multi display :CONtest Toggle contest mode on/off :SCOre Toggle score window on/off :REScore Rescore :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 :WRIte Write cabrillo :ADIf Write Adif :EXIt Exit tlf :TONe Set sidetone (0 = off) tlf-1.4.1/share/cty.dat0000644000175000017500000023357513651752573011653 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: =3D2CR,=VERSION; Rotuma Island: 32: 56: OC: -12.48: -177.08: -12.0: 3D2/r: =3D2RI; Kingdom of eSwatini: 38: 57: AF: -26.65: -31.48: -2.0: 3DA: 3DA; Tunisia: 33: 37: AF: 35.40: -9.32: -1.0: 3V: 3V,TS; 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,=4UNR,=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; 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,=9M4CKT,=9M4CRB,=9M4CRP,=9M4SJSM; 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; 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],=B9/BH1NGG(24)[43]; 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],=CE9/WW3TRG,=XQ6CFX[16],=XQ6OA[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],=IA0DC,=8J1RL(39)[67],=CE9/SQ1SGB[73], =DP0GVN(38)[67],=DP1POL(38)[67],=IA0/DK5SXQ(29)[70],=KC4AAA(39), =KC4AAC[73],=KC4USV(30)[71],=RI1ANC(29)[70],=RI1ANZ(39)[69],=VP8AL[73]; 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; 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,Y2,Y3,Y4,Y5,Y6,Y7, Y8,Y9,=DM19ERZ/BEF,=DM19ERZ/BHF,=DM19ERZ/BS,=DM19ERZ/HSD,=DM19ERZ/MAZ; 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,=EA2EZ/P,=EA3HSD/P,=EA5CC/P,=EA5EZ/P, =EA5ZD/URE,=EA9HU; Balearic Islands: 14: 37: EU: 39.60: -2.95: -1.0: EA6: AM6,AN6,AO6,EA6,EB6,EC6,ED6,EE6,EF6,EG6,EH6; Canary Islands: 33: 36: AF: 28.32: 15.85: 0.0: EA8: AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8,=AO5DXX/8,=EA8VK/URE; 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,=TO3Z,=TO7D; 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; New Caledonia: 32: 56: OC: -21.50: -165.50: -11.0: FK: FK,=TX8A; 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,=TO7A,=TO7BP; 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: =TX2A; 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/F6BCW; 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,=TO7DL; St. Martin: 08: 11: NA: 18.08: 63.03: 4.0: FS: FS,=TO0A; 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; 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,=GB0BPM,=GB0GLS,=GB0PDY,=GB2PDY,=GB3NGI,=GB4UAS,=GB5NHS, =GB6SPD,=GB75VEC,=GB8NHS,=GB9SPD; 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: =2M0BDR,=2M0BDT,=2M0CPN,=2M0GFC,=2M0SEG,=2M0SPX,=2M0ZET,=GB1COR,=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,=MM0VIK,=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,GM,GS,MA,MM,MS,=GB0GGR,=GB0SSB,=GB1COR,=GB2ELH,=GB2FEA,=GB2JCM, =GB3ANG,=GB3LER,=GB3LER/B,=GB4LER,=GB5AG; Guernsey: 14: 27: EU: 49.45: 2.58: 0.0: GU: 2U,GP,GU,MP,MU; Wales: 14: 27: EU: 52.28: 3.73: 0.0: GW: 2W,GC,GW,MC,MW,=GB1SDD,=GB2IMD,=GB2TD,=GB2VK; 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,=4U25B,=4U5F,=IK8IJN/I/US; 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,=IQ0AG,=IQ0AH, =IQ0AH/P,=IQ0AI,=IQ0AK,=IQ0AL,=IQ0AM,=IQ0EH,=IQ0HO,=IQ0ID,=IQ0ID/P,=IQ0JY, =IQ0NU,=IQ0NU/P,=IQ0NV,=IQ0NV/P,=IQ0OG,=IQ0OH,=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,=IQ1QQ/9; 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: =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: =JW/LB2PG; 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],=AA0O(5)[8],=AA2IL(3)[6], =AA4DD(4)[8],=AA4Q(3)[6],=AA5JF(5)[8],=AA8R(5)[8],=AB4B(4)[8], =AB4GG(4)[8],=AB4IQ(4)[8],=AB5OR(4)[8],=AB8RL(5)[8],=AB8YZ(4)[7], =AC4CA(4)[7],=AC4G(4)[8],=AC4GW(4)[8],=AC6WI(5)[8],=AC6ZM(4)[8], =AC7AF(4)[7],=AC8Y(5)[8],=AD1C(4)[7],=AD4EB(4)[8],=AD4TA(4)[8], =AD8J(5)[8],=AE4ED(4)[8],=AE6JV(5)[8],=AE7AP(4)[6],=AG4W(4)[8], =AG5Z(4)[8],=AH0U(3)[6],=AH2AV(4)[8],=AH2O(5)[8],=AI4DB(4)[8],=AI9K(4)[7], =AJ4A(4)[8],=AJ4F(4)[7],=AJ7G(5)[8],=AL0A(5)[8],=AL4B(4)[8],=AL7RF(3)[6], =G8ERJ(5)[8],=K0ACP(4)[8],=K0AU(3)[6],=K0EJ(4)[8],=K0IP(3)[6], =K0LUZ(5)[8],=K0PJ(4)[8],=K0SN(4)[6],=K0TQ(4)[8],=K0ZR(5)[8],=K1DC(4)[8], =K1DW(4)[7],=K1GU(4)[8],=K1KD(4)[7],=K1LT(4)[8],=K2DSW(4)[7],=K2GMY(3)[6], =K2KR(4)[7],=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], =K3WT(4)[7],=K3WYC(3)[6],=K3YP(4)[8],=K4AB(4)[8],=K4AFE(4)[8], =K4AMC(4)[8],=K4AVX(4)[8],=K4BX(4)[8],=K4CWW(4)[8],=K4DG(4)[7], =K4FN(4)[8],=K4FT(4)[8],=K4IE(4)[8],=K4IU(4)[7],=K4OAQ(4)[8],=K4OWR(4)[8], =K4RO(4)[8],=K4TCG(4)[8],=K4TZ(4)[8],=K4UU(4)[8],=K4WG(4)[8],=K4WI(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],=K5VIP(5)[8],=K5ZD(5)[8],=K6BFL(4)[7],=K6XT(4)[7], =K7ABV(4)[6],=K7BV(5)[8],=K7CS(4)[8],=K7DR(4)[8],=K7IA(4)[7],=K7JOE(4)[8], =K7NCK(4)[7],=K7OM(5)[8],=K7QA(4)[6],=K7SCX(4)[7],=K7SV(5)[8],=K7TD(4)[7], =K7ZYV(4)[8],=K8AC(5)[8],=K8ARY(5)[8],=K8CN(5)[8],=K8IA(3)[6],=K8JQ(5)[8], =K8LF(5)[8],=K8LS(4)[7],=K8NYG(5)[8],=K8PO(5)[8],=K8TR(3)[6],=K9DR(4)[7], =K9DU(4)[7],=K9GWS(5)[8],=K9JF(3)[6],=K9JM(3)[6],=K9OM(5)[8],=K9OZ(4)[7], =K9RS(5)[8],=K9WA(4)[7],=K9WZB(3)[6],=K9YC(3)[6],=KA3MTT(4)[8], =KA4BVG(4)[8],=KA4GAV(4)[7],=KA4OTB(4)[8],=KA8HDE(4)[7],=KA8Q(5)[8], =KA9FOX(4)[7],=KB4QZH(4)[8],=KB7Q(4)[6],=KB9S(4)[7],=KC2LM(4)[7], =KC4HW(4)[8],=KC4NX(4)[8],=KC4SAW(4)[8],=KC4TEO(4)[8],=KC4WQ(4)[8], =KC7QY(4)[7],=KC8GCR(5)[8],=KC9K(4)[7],=KD0EE(4)[8],=KD2KW(4)[7], =KD4EE(4)[8],=KD5DD(4)[8],=KD9LA(5)[8],=KE0L(4)[8],=KE0YI(4)[8], =KE1B(3)[6],=KE2VB(3)[6],=KE3K(4)[8],=KE4KY(4)[8],=KE8FT(3)[6], =KF4AV(4)[8],=KF5BA(4)[8],=KF5MU(4)[8],=KG4CUY(4)[8],=KG5HVO(4)[8], =KH2BR(3)[6],=KH2D(5)[8],=KH2GM(5)[8],=KH6CT(5)[8],=KH6DHK(5)[8], =KH6M(5)[8],=KH6VM(3)[6],=KH6XS(3)[6],=KI6DY(4)[7],=KI6QDH(4)[7], =KJ4AOM(4)[8],=KJ4IWZ(4)[8],=KJ4M(4)[8],=KJ9C(4)[6],=KK9A(5)[8], =KK9N(4)[7],=KL0MP(5)[8],=KL2RA(4)[7],=KL4CZ(4)[6],=KL7IKV(3)[6], =KL7JR(5)[8],=KL7QW(4)[7],=KL7SK(3)[6],=KM4FO(4)[8],=KM4JA(4)[8], =KM7W(4)[6],=KN1CBR(4)[7],=KN4DUA(4)[8],=KN8U(5)[8],=KO0Z(4)[8], =KO8SCA(5)[8],=KO9V(4)[7],=KP2XX(4)[7],=KP3M(5)[8],=KR4F(4)[8], =KS0CW(5)[8],=KS4X(4)[8],=KS7T(4)[6],=KS9W(4)[7],=KT3M(4)[7],=KT4O(4)[8], =KT4RR(4)[8],=KU1CW(3)[6],=KU8E(5)[8],=KV4T(4)[8],=KV8S(4)[7],=KW4J(4)[8], =KW7D(4)[7],=KW7Q(4)[7],=KX2P(4)[7],=KX4FR(4)[8],=KY0Q(4)[8],=KZ1W(3)[6], =KZ4KX(4)[8],=KZ9V(4)[7],=N0SMX(5)[8],=N1JM(3)[6],=N1XK(4)[7],=N2AU(3)[6], =N2BJ(4)[8],=N2IC(4)[7],=N2JNR(3)[6],=N2NL(4)[8],=N3BB(4)[7],=N3BUO(4)[7], =N3CI(4)[7],=N3RA(4)[8],=N3RC(3)[6],=N3ZZ(3)[6],=N4ARO(4)[8],=N4AU(4)[8], =N4BCB(4)[8],=N4BCD(4)[8],=N4DW(4)[8],=N4HAI(4)[8],=N4HID(4)[8], =N4KC(4)[8],=N4KH(4)[8],=N4NA(4)[8],=N4NO(4)[8],=N4OGW(4)[8],=N4QS(4)[8], =N4SL(4)[6],=N4TZ(4)[8],=N4UC(4)[8],=N4UW(4)[8],=N4VI(4)[7],=N4VV(4)[8], =N4WE(4)[8],=N4ZY(4)[8],=N4ZZ(4)[8],=N5CR(3)[6],=N5CW(4)[8],=N5DX(5)[8], =N5KO(3)[6],=N5RP(4)[8],=N5SMQ(5)[8],=N5TB(5)[8],=N5TOO(5)[8],=N5YT(4)[8], =N5ZO(3)[6],=N6AR(5)[8],=N6DW(5)[8],=N6RSH(4)[7],=N7DR(4)[7],=N7FLT(4)[6], =N7IP(4)[6],=N7IV(4)[7],=N7MZW(4)[7],=N7NG(4)[7],=N7RCS(5)[8],=N7US(4)[8], =N7WY(4)[7],=N7ZZ(4)[8],=N8AID(5)[8],=N8GU(5)[8],=N8II(5)[8],=N8NA(5)[8], =N8NN(5)[8],=N8OO(4)[7],=N8RA(5)[8],=N8WXQ(5)[8],=N9CIQ(4)[7],=N9GB(4)[7], =N9HDE(4)[7],=N9JF(4)[7],=N9NA(3)[6],=N9NB(5)[8],=N9NC(5)[8],=N9NM(4)[7], =N9OU(5)[8],=N9RV(4)[6],=N9SB(4)[7],=N9VPV(4)[7],=NA5NN(4)[8],=ND2T(3)[6], =ND3N(4)[8],=ND4Y(4)[8],=NE8P(5)[8],=NE9U(4)[7],=NF4J(4)[8],=NG7A(4)[7], =NH6T(4)[8],=NI7R(5)[8],=NJ4P(4)[8],=NJ8J(5)[8],=NK8Q(5)[8],=NL7CQ(4)[7], =NL7D(3)[6],=NL7QC(4)[7],=NL7XM(5)[8],=NN1N(4)[7],=NN4NT(4)[8], =NN4SA(4)[8],=NN5O(4)[8],=NN7A(4)[7],=NN7CW(5)[8],=NN9DD(5)[8], =NO9E(5)[8],=NP2GG(5)[8],=NP3K(5)[8],=NQ6N(4)[8],=NR5W(3)[6],=NR7DX(4)[6], =NS2X(4)[8],=NS4X(4)[8],=NT0K(5)[8],=NW7R(5)[8],=NW8U(5)[8],=NX1P(3)[6], =NY6DX(5)[8],=NZ6T(5)[8],=W0BR(5)[8],=W0JX(4)[8],=W0PV(5)[8],=W0RIC(3)[6], =W0ZP(4)[8],=W1GKT(4)[8],=W1NN(4)[8],=W1PDI(4)[8],=W1PR(3)[6],=W1RH(3)[6], =W1SRD(3)[6],=W2ACY(4)[7],=W2GS(4)[7],=W2IY(4)[7],=W2VJN(3)[6], =W3CB(4)[8],=W3HDH(4)[8],=W3HKK(4)[8],=W3NX(3)[6],=W3TB(4)[8], =W4BCG(4)[8],=W4DAN(4)[8],=W4ER(4)[8],=W4GKM(4)[8],=W4KW(4)[8], =W4LC(4)[8],=W4NBS(4)[8],=W4NI(4)[8],=W4NNF(4)[8],=W4NZ(4)[8],=W4PF(4)[8], =W4RYW(4)[8],=W4TLK(4)[8],=W4TTM(4)[8],=W4UT(4)[8],=W5MX(4)[8], =W5NZ(4)[8],=W5UE(4)[8],=W5UJ(3)[6],=W5VE(5)[8],=W5VS(5)[8],=W6DVS(5)[8], =W6GMT(4)[7],=W6KGP(4)[7],=W6LFB(4)[7],=W6NWS(5)[8],=W6RLL(3)[7], =W6SFG(5)[8],=W6UB(4)[8],=W6XR(5)[8],=W7EE(4)[6],=W7HJ(5)[8],=W7II(4)[7], =W7IMP(5)[8],=W7IY(5)[8],=W7RY(4)[7],=W7UT(4)[7],=W8AT(5)[8],=W8FJ(5)[8], =W8FN(5)[8],=W8HAP(5)[8],=W8HGH(5)[8],=W8LYJ(4)[7],=W8OV(4)[7], =W8TK(3)[6],=W9CF(3)[6],=W9DC(5)[8],=W9ET(4)[7],=W9FI(3)[6],=W9JA(4)[7], =W9JEF(4)[7],=W9KKN(3)[6],=W9MAF(4)[7],=W9PL(3)[6],=W9RM(4)[7], =W9RNY(4)[7],=WA0WWW(3)[6],=WA1FCN(4)[8],=WA1UJU(4)[8],=WA2VYA(4)[7], =WA3C(4)[8],=WA4JA(4)[8],=WA5POK(4)[8],=WA8KAN(5)[8],=WA8OJR(5)[8], =WA8ZBT(4)[7],=WB2JEP(3)[6],=WB3JFS(3)[6],=WB4YDY(4)[8],=WB8BPU(5)[8], =WB8YYY(5)[8],=WB9QAF(4)[7],=WC7S(4)[7],=WE5P(4)[8],=WE6EZ(4)[7], =WF3H(4)[7],=WF7T(4)[8],=WF9A(5)[8],=WH0AI(4)[7],=WH6AQ(5)[8], =WH6LE(5)[8],=WH7R(4)[7],=WJ9B(3)[6],=WL7OU(4)[7],=WM5DX(4)[8], =WN7S(5)[8],=WP3ME(5)[8],=WP4OFO(5)[8],=WQ5L(4)[8],=WR5J(3)[6], =WS6K(4)[8],=WS6X(5)[8],=WS7X(5)[8],=WS9M(5)[8],=WT2P(4)[8],=WT8WV(5)[8], =WU0B(5)[8],=WU9B(3)[6],=WV4P(4)[8],=WV8SW(5)[8],=WW4R(4)[8],=WW5M(4)[8], =WX4W(4)[8],=WX5S(3)[6],=WY6K(4)[7],=WY7FD(4)[7],=WZ1Y(4)[7],=WZ4F(4)[8], =WZ7I(5)[8],=WZ8T(3)[6]; Guantanamo Bay: 08: 11: NA: 20.00: 75.00: 5.0: KG4: KG4,=KG4AY,=KG4NE; Mariana Islands: 27: 64: OC: 15.18: -145.72: -10.0: KH0: AH0,KH0,NH0,WH0,=K8RN,=NH2B; 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,=K4QFS,=KG6DX,=KG6JDX,=KJ6AYQ,=KN4IAS,=N0RY,=NH0Q; 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,=K2GT,=K6BU,=K6HNL,=K9FD,=KA7BSK,=KB1UHL, =KB5OXR,=KB6EGA,=KC2CLQ,=KD0OXU,=KD4GVR,=KD6NVX,=KD7GWI,=KD8LYB,=KE0JSB, =KE0KIE,=KE5VQB,=KE6MKW,=KE6TIX,=KF4UJC,=KG4CAN,=KG4TZD,=KG5CH,=KG5CNO, =KG9MDR,=KH0WJ,=KH3AE,=KI7AUZ,=KJ6COM,=KJ6FDF,=KK4RNF,=KL0TK,=KL3JC, =KM6RWE,=KM6UVP,=N3BQY,=N3GWR,=N4BER,=N7BMD,=NB6R,=ND1A,=W6QPV,=W7NX, =WA6AW,=WA6CZL,=WB4JTT,=WY6F; 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; 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,=AJ4MY,=K1KAO,=K4PSG,=K5RD,=K7CAP,=K7VRK,=KA1NCN,=KB5NOW, =KB7BUF,=KC0GLN,=KC5NHL,=KC9IKH,=KD0ONB,=KD2NPD,=KD5MQC,=KD5WYP,=KD7OOS, =KD8KQL,=KE7PXV,=KF3L,=KF5UBP,=KF7FLL,=KF7FLM,=KF7ING,=KF7ITN,=KF7KTH, =KF7WVE,=KG5MIO,=KG7OUF,=KG7ZEV,=KJ4YOY,=KJ6DCH,=KJ6RFQ,=KN4ENR,=KN4LJD, =KN4RXC,=KW4XD,=N6QEK,=N6ZZX,=N7DKL,=NH2LS,=NM0H,=NU9Q,=W0ZEE,=W1JM, =W1LYD,=W3MKG,=WA1FVJ,=WH6GBB,=WH6GCO; 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,=KV4CF,=KV4FZ,=KV4KW,=W4LIS; Puerto Rico: 08: 11: NA: 18.18: 66.55: 4.0: KP4: KP3,KP4,NP3,NP4,WP3,WP4,=K4LCR,=KB0JRR,=KB1CKX,=KB2BVX,=KB3TTV,=KC2TE, =KF5YGN,=KF5YGX,=KP2Z,=N2FVA,=N2IBR,=N4MMT; 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], =LU1AW/X[16],=LU2DVI/H,=LU4ARU/D,=LU5DQ/D,=LU6DDC/D,=LU7JMS/H, =LU8XW/XP[16],=LU8YD/W[16],=LW3EK/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,=4UNR,=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; 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; 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: PJ0,PJ7,PJ8; 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; 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; Mount Athos: 20: 28: EU: 40.00: -24.00: -2.0: SV/a: =SV2ASP/A,=SV2RSG/A; Dodecanese: 20: 28: EU: 36.17: -27.93: -2.0: SV5: J45,SV5,SW5,SX5,SY5,SZ5; Crete: 20: 28: EU: 35.23: -24.78: -2.0: SV9: J49,SV9,SW9,SX9,SY9,SZ9,=SV0XAZ; 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,=TA1D/3,=TA1D/4,=TA1FA/2,=TA1HZ/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,R1I(17)[20],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], RA1I(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],RC1I(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],RD1I(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],RE1I(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], RF1I(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],RG1I(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],RJ1I(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], RK1I(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],RL1I(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],RM1I(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],RN1I(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], RO1I(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],RQ1I(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],RT1I(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],RU1I(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], RV1I(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],RW1I(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],RX1I(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],RY1I(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], RZ1I(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],U1I(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],UA1I(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],UB1I(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],UC1I(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], UD1I(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],UE1I(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],UF1I(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],UG1I(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], UH1I(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],UI1I(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],=R9JBF/1,=RC8C/6,=RT9T/1,=RT9T/3,=R100FA[19], =R240S(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],=R50VAZ[30],=R89DRA, =R8MB/1(17)[20],=R9OM/6,=RA4HL[29],=RA4NCC[30],=RC4HT[29],=RC4I[29], =RJ4I[29],=RJ4P[30],=RK4HM[29],=RK4P[30],=RM4I[29],=RM4R[30],=RN4HFJ[29], =RN4HIF[29],=RT9K/6,=RU4HD[29],=RU4HP[29],=RU4I[29],=RW4HM[29], =RW4HTK[29],=RW4HW[29],=RW4HZ[29],=RW9WJ/4[30],=UA0QQO/3,=UA3LMR/P, =UA4H[29],=UA4HBM[29],=UA4HGL[29],=UA4HIP[29],=UA4HRZ[29],=UA4HY[29], =UA4NF[30],=UA4PN[30],=UB5O/1[19],=UC4I[29],=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), =RK3Q/8(17)[30],=UB5O/9,=R207RRC(19)[25],=R2ET/9(18)[31],=R9MI/0(19)[34], =RA/UT5IA(19)[23],=RA0QK/8(17)[30],=RK4PA/9[20],=RN9S(16),=RT8T(16)[30], =RT9S(16),=RT9W(16),=RU9MV/0(19)[25],=RV3DSA/0(19)[34],=RW3YC/9(18)[32], =RX6DL/8/P(17)[30],=UB5O/8(17)[30],=UD6AOP/0(19)[25]; 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,=VER20200405, =VA2VVV(2)[4],=VE2CSI(2)[4],=VE2EKA(2)[4],=VE2FK[9],=VE2IDX(2)[4], =VE2IM(2)[4],=VE2KK[9],=VE2NN(2)[4],=VE8AT(2)[4],=VY0AA(4)[3], =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]; 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: =VK0AI; 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; Lord Howe Island: 30: 60: OC: -31.55: -159.08: -10.5: VK9L: AX9L,VH9L,VI9L,VJ9L,VK9FL,VK9L,VK9ZL,VL9L,VM9L,VN9L,VZ9L,=VK3YQS/9, =VK3YQS/VK9; 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; 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: =VP6D; 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,=EA4FZR,=HF0ANT,=HF0POL; South Orkney Islands: 13: 73: SA: -60.60: 45.55: 3.0: VP8/o: =VP8PJ; 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,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,7A0[54],7A1[54],7A2[54],7A3[54],7A4[54],7A5[54],7A6[54], 7A7[54],7A8[54],7B0[54],7B1[54],7B2[54],7B3[54],7B4[54],7B5[54],7B6[54], 7B7[54],7B8[54],7C0[54],7C1[54],7C2[54],7C3[54],7C4[54],7C5[54],7C6[54], 7C7[54],7C8[54],7D0[54],7D1[54],7D2[54],7D3[54],7D4[54],7D5[54],7D6[54], 7D7[54],7D8[54],7E0[54],7E1[54],7E2[54],7E3[54],7E4[54],7E5[54],7E6[54], 7E7[54],7E8[54],7F0[54],7F1[54],7F2[54],7F3[54],7F4[54],7F5[54],7F6[54], 7F7[54],7F8[54],7G0[54],7G1[54],7G2[54],7G3[54],7G4[54],7G5[54],7G6[54], 7G7[54],7G8[54],7H0[54],7H1[54],7H2[54],7H3[54],7H4[54],7H5[54],7H6[54], 7H7[54],7H8[54],7I0[54],7I1[54],7I2[54],7I3[54],7I4[54],7I5[54],7I6[54], 7I7[54],7I8[54],8A0[54],8A1[54],8A2[54],8A3[54],8A4[54],8A5[54],8A6[54], 8A7[54],8A8[54],8B0[54],8B1[54],8B2[54],8B3[54],8B4[54],8B5[54],8B6[54], 8B7[54],8B8[54],8C0[54],8C1[54],8C2[54],8C3[54],8C4[54],8C5[54],8C6[54], 8C7[54],8C8[54],8D0[54],8D1[54],8D2[54],8D3[54],8D4[54],8D5[54],8D6[54], 8D7[54],8D8[54],8E0[54],8E1[54],8E2[54],8E3[54],8E4[54],8E5[54],8E6[54], 8E7[54],8E8[54],8F0[54],8F1[54],8F2[54],8F3[54],8F4[54],8F5[54],8F6[54], 8F7[54],8F8[54],8G0[54],8G1[54],8G2[54],8G3[54],8G4[54],8G5[54],8G6[54], 8G7[54],8G8[54],8H0[54],8H1[54],8H2[54],8H3[54],8H4[54],8H5[54],8H6[54], 8H7[54],8H8[54],8I0[54],8I1[54],8I2[54],8I3[54],8I4[54],8I5[54],8I6[54], 8I7[54],8I8[54],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; 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; North Macedonia: 15: 28: EU: 41.60: -21.65: -1.0: Z3: Z3; Republic of 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: -39.03: -174.47: -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.1/share/cwops.txt0000644000175000017500000007224513651752573012251 00000000000000# cwops member list up to number 2384 # last updated november 4, 2019 2E0OBO,Bob 2381 3W9T,Trung 1707 4K0CW,Axel 1678 4X4NJ,Riki 275 4X4PP,Pepe 1442 4X6GP,Vic 5 4X6KF,Falafel 659 4Z1UF,Ilya 636 4Z4DX,Dov 175 6Y2T,Yuri 21 6Y5WJ,Josh 186 7J1ABD,Dan 1176 7Q7M,Sue 2275 7X2TT,Abdel 2344 7X3DA,Hamid 1676 8P9AA,Yuri 21 8P9AL,Chuck 969 8P9NX,Peter 503 9A7R,Braco 1482 9N7DX,Dov 175 9V1VV,John 678 9V1YC,James 66 A61AD,Don 2 AA0FO,Marshall 1532 AA0RS,Dave 2222 AA1K,Jon 2055 AA1V,Don 53 AA2AD,Pete 2162 AA2ZW,Bob 937 AA3B,Bud 242 AA4CF,Charlie 1389 AA4FU,Alan 1121 AA4GA,Lee 973 AA4LS,Charles 2133 AA4MC,Hammer 2332 AA4NC,Will 2371 AA4NN,Joe 354 AA4NP,Jim 1954 AA4V,Steve 1867 AA5AD,Joe 2366 AA5BG,Richard 454 AA5W,Jim 1826 AA6MK,Mike 1909 AA6W,Don 2311 AA6XA,Jeff 2118 AA7FV,Darrel 1578 AA7ST,John 2263 AA7V,Steve 1250 AA8IA,Mike 966 AA8R,Randy 2214 AA8TA,Joe 1821 AA9A,Tom 1092 AA9K,Bob 1006 AB0DK,Dave 1932 AB0S,Tim 1857 AB1BX,Andy 2191 AB1CW,Howard 1117 AB1GJ,Ken 161 AB5EB,Mike 2115 AB5OR,Joe 1338 AB6UR,Danny 2315 AB6XG,Rick 1754 AB6Z,Tom 1664 AB7MP,Mark 1350 AB7RW,Phil 2249 AB9YC,Anthony 1249 AC0W,Bill 1564 AC1FE,Rich 783 AC2FA,Bob 1026 AC2K,Alan 35 AC2KJ,Dima 1376 AC3BU,Daryl 2355 AC4BT,Jerry 1148 AC4CA,John 650 AC5K,Wes 54 AC6AC,Buz 1911 AC6YY,Ned 1244 AC7JW,Jason 627 AC7T,Doug 822 AC8W,Stan 695 AC9EZ,Jim 2342 AD0AB,Jim or Jaime 2114 AD0DX,Ron 1019 AD0IU,Rob 864 AD0WE,Kurt 2167 AD1C,Jim 131 AD4EB,Jim 867 AD4ES,Chuck 2044 AD4J,Jim 1144 AD4TJ,David 1960 AD5A,Mike 1415 AD6E,Al 217 AD6JV,Bill 1719 AD8CW,Doug 412 AD8J,John 1395 AE0P,Brian 1051 AE1T,Peter 1404 AE2U,Mike 869 AE4QQ,Dave 1625 AE4Y,Kent 2002 AE6Y,Andy 38 AE7US,Rocky 1781 AF1Z,Mark 258 AF3K,John 2186 AF4NC,Tom 1521 AF5DM,Dave 1205 AF5Q,Ron 1805 AF8A,Gary 2092 AF9W,Bob 1173 AG3R,Pete 467 AG4EA,Bill 2373 AG5M,Rich 1747 AG6V,Donna 911 AG6WJ,Diego 2165 AG9A,Mark 641 AH0U,Bruce 1825 AH6KO,Stan 1794 AH6RE,Curt 830 AI2Q,Alex 210 AI6O,Ed 1337 AI6V,Wyatt 2242 AJ1DM,John 1973 AJ4HP,O 1467 AJ6DU,Ted 2269 AJ8B,Bill 1567 AK4AO,Doug 2145 AK4NY,Tom 1544 AK4SQ,Dan 1296 AL1G,Corliss 2161 AO1AAW,Juanjo 714 BA4TB,Dale 259 BH4EPL,Bruce 2297 C6AQQ,Brian 302 C6AUM,Mike 1182 CE2LR,Matt 2281 CM8NMN,Noe 2082 CN8YR,Med 1656 CO2IR,Frank 1147 CO6RD,Rey 1898 CO8ZZ,Raúl 1682 CT7AGZ,Ken 2126 CU3AA,Joao 1804 CX6VM,Jorge 525 CX7CW,Phil 570 CX7TT,Tom 518 DD5CF,Colin 1832 DD5XX,Saki 2354 DF4XX,Kurt 1753 DJ0MCH,Relly 409 DJ0QN,Mitch 747 DJ1OJ,Heijo 425 DJ1YFK,Fabian 1566 DJ7AO,Steve 2254 DK1WI,Ed 1602 DK4LX,Holger 802 DK5AX,Markus 1812 DK5KK,Kolja 1965 DK9PY,Armin 2062 DL1IAO,Stef 1884 DL1QQ,Sandy 1581 DL1REM,Frank 2382 DL2CC,Frank 511 DL3AZ,Andy 982 DL3DXX,Mar 1164 DL4FDM,Fri 1084 DL5AXX,Ulf 1517 DL5DBY,Tom 1751 DL5JQ,Hardy 2376 DL5XL,Felix 2268 DL6KVA,Axel 1678 DL8PG,Gerd 833 DL9ABM,Stefan 1922 DM1TT,Hannu 333 DM4CW,Martin 1870 DO4DXA,Marc 1851 DU3LA,Larry 644 E21EIC,Champ 264 E71A,Emil 484 EA1WX,Juanjo 714 EA2AJB,Sparky 1048 EA3/K1MM,Bill 43 EA3HSO,Al 2132 EA4OR,Ignacio 2218 EA5KA,Raul 1512 EA6TS,Peter 1510 EA7JW,David 1933 EA8AY,Luis 813 EA8BMG,Luis 1063 EA8CAC,Juan 850 EA8CN,Andy 265 EA8OM,Heijo 425 EA8RM,Juan 850 EA8ZS,Manolo 907 EC7ABV,Tony 1558 EE8E,Juan 850 EE8X,Luis 813 EF8M,Val 536 EF8N,Andy 265 EF8O,Heijo 425 EF8R,Juan 850 EF8USA,Luis 813 EF8X,Luis 813 EI2CN,Doug 1503 EY8MM,Nodir 815 F5IYJ,Phil 1842 F5JVP,Didier 2248 F5MNK,Lo 1291 F5NZY,Steph 1528 F5PBL,Claude 2326 F5PLC,Mike 2370 F5VJC,Deni 2142 F5VV,Joël 1885 F6CEL,Ghis 1876 F6ENO,Alain 2261 F6HKA,Bert 1088 F6JOE,Jean 1091 F8FQX,Nic 1755 FG8NY,Jean 1091 G0AYD,David 2159 G0DJA,Dave 266 G0ELZ,Bill 239 G0HKC,Keith 1739 G0JPS,Kit 2080 G0MGM,Rob 1771 G0WCZ,Grae 1983 G1ZOS,Colin 1832 G2JL,Mort 32 G3LDI,Roger 1843 G3NKC,Dave 449 G3SVK,Fred 1357 G3SYS,Darrel 1578 G3TXF,Nigel 166 G3UNA,David 509 G3WCY,Brian 2139 G3WGN,Dave 482 G3WRJ,Dick 2209 G3WZD,Duncan 1979 G3XLG,Ray 1365 G3XTT,Don 1874 G3YJQ,Fred 1378 G3YLA,Jim 2015 G3YXX,David 493 G4AXX,Mark 1057 G4BSW,Nigel 2083 G4BUE,Chris 1294 G4CCX,Chris 2003 G4DRS,John 1457 G4DYC,Mike 2116 G4E,Chris 1294 G4FAD,Rich 547 G4HZV,Bob 1636 G4ILW,James 1729 G4IRN,John 268 G4NVR,Phil 1583 G4RCG,John 2379 G4RMV,Mike 1614 G4XUM,Martin 569 G5CL,Ryan 422 G7VJR,Michael 968 G8AJM,Chris 1572 GD0OUD,Stuart 1829 GD4EIP,Colyn 2187 GI4CFQ,Gary 765 GM0EPO,John 1974 GM0EUL,Peter 1899 GM3JOB,Rod 2204 GU4CHY,Dick 1543 GW0ETF,Stew 919 GW3KGV,Ken 171 GW3YDX,Ron 100 GW4J,Stew 919 GW4MVA,Glynn 2178 GW4OKT,Keith 1952 GW7N,Glynn 2178 HA0NAR,Laci 2172 HA5AO,Pista 1522 HA9RT,Joska 1213 HB0/HB9CVQ,Andy 219 HB9ARF,Phil 1354 HB9CSA,Fri 1084 HB9CVQ,Andy 219 HB9DAX,Fred 687 HB9EGA,Marcin 2047 HB9FIR,Clay 598 HI3CC,Tino 1780 HK3CW,Rob 877 HP1XT,Tom 518 HS0ZCK,Joe 339 HS0ZDJ,John 751 I0GOJ,Tony 602 I0YQX,Italo 1746 I2RTF,Piero 621 I5ECW,Vanni 1679 I5EFO,Emil 1486 I8NHJ,Max 24 IK0IXI,Fabio 1314 IK0NOJ,Dany 1732 IK0XCB,Clay 598 IK0XFD,Jordan 1570 IK0YGJ,Carlo 574 IK0YVV,Marco 1505 IK2WAD,Joe 2200 IK5VLL,Andy 1545 IN3FHE,Helga/Ina 1548 IS0AFM,Simone 692 IT9BLB,Joe 2138 IT9MUO,Alf 1569 IT9SSI,Dario 2137 IT9VDQ,Giu 1538 IW2MXE,Diego 2165 IW5EFO,Dan 1574 IZ0KBW,Luigi 2156 IZ2FME,Mik 2151 J75Y,Doug 817 JA1GQC,Kazu 1204 JA1GZV,Motoaki 1014 JA1LZR,Joe 1010 JA1NUT,Shin 15 JA3AVO,Masumi 1200 JA4IIJ,Takeshi 733 JA4MRL,MasaG 269 JA5DQH,Aki 777 JA8CDG,Ken 161 JE1TRV,Atsu 141 JF2IWL,Dai 1286 JF3KNW,Nobu 394 JH1GNU,Shige 713 JH1JDI,Mai 1199 JI1RXQ,Hiro 2223 JI3CJP,Kan 1140 JJ1BDX,Kenji 384 JK1JHB,Sat 879 JL1GEL,Aki 1202 JL1IRB,Hoz 420 JL8KUS,Tubo 1179 JN1THL,Ken 161 JS2AHG,Atsu 141 K0AD,Al 138 K0AP,Dragan 370 K0AV,Alan 1129 K0CA,Cliff 903 K0CF,Craig 1834 K0DEQ,Bill 1683 K0DTJ,Brian 717 K0DXC,Cal 152 K0EJ,Mark 2016 K0EU,Randy 1113 K0EX,Mark 667 K0FG,Fred 1893 K0FX,Don 1326 K0GUZ,Steve 1889 K0HB,Hans 231 K0HX,Stan 1721 K0INN,Tom 1704 K0IR,Ralph 519 K0JP,Jack 1047 K0KG,Keith 1401 K0LUZ,Red 956 K0MD,Scott 305 K0MP,Bill 1736 K0NAR,Laci 2172 K0NM,Nizar 1430 K0ODF,Lynn 2252 K0PC,Pat 947 K0PD,David 2035 K0PFX,Mel 271 K0PGE,Ron 1712 K0PK,Paul 2233 K0PV,Don 1823 K0RF,Chuck 887 K0SN,Tom 1344 K0TC,Ron 1421 K0TG,John 1830 K0UK,Bill 1154 K0VBU,Bill 844 K0VW,John 2098 K0VXU,Russ 836 K0WA,Lee 1859 K0XQ,Sean 1844 K0XX,John 1273 K0ZR,Jeff 1533 K0ZU,Doug 1880 K1AJ,Bruce 212 K1AQB,Bill 1708 K1AR,John 1741 K1BG,Bruce 1276 K1BZ,Dave 1958 K1CDX,Richie 2190 K1CHM,Craig 1900 K1CP,Clif 168 K1CTR,Doug 2339 K1DG,Doug 817 K1DJ,Rich 1556 K1DW,Dallas 326 K1EBY,Frank 1593 K1EP,Ed 465 K1ESE,John 792 K1GU,Ned 884 K1GUP,Jerry 363 K1HTV,Rich 198 K1IFJ,Jack 1554 K1IR,Jim 73 K1JD,John 75 K1KS,Al 1561 K1LB,Woody 1633 K1LKP,Carmen 724 K1MM,Bill 43 K1MMB,Jeff 1716 K1NOK,Bob 764 K1NY,Gerry 1929 K1OA,Scott 736 K1PX,Jim 1080 K1QX,Craig 1358 K1RM,Vin 116 K1RO,Mark 1306 K1RV,Pi 639 K1SA,Bernie 40 K1SEC,Paul 1710 K1SM,Bill 506 K1SX,Dave 1448 K1TH,Tom 720 K1TL,Tom 367 K1TR,Ed 1957 K1VMT,Joe 1400 K1VR,Fred 57 K1VSJ,Howie 2032 K1VT,Jack 1513 K1VUT,Dave 1878 K1WGM,Bob 2257 K1XM,Paul 74 K1YR,Lou 2319 K1YT,Bill 44 K1YY,Bob 1783 K1ZZ,Dave 2352 K1ZZI,Ralph 677 K2AU,Mark 235 K2AV,Guy 1671 K2CJ,Carl 2201 K2CUB,Scott 2030 K2DB,Paul 686 K2DIW,Seth 2051 K2EK,Bill 2072 K2GJ,Rich 2295 K2GO,Tom 518 K2KQ,Don 192 K2KRG,Steve 1926 K2KW,Kenny 80 K2LE,Andy 39 K2LNS,Herb 2208 K2MF,Barry 1253 K2MGR,Kurt 915 K2NEL,Sean 2232 K2NV,Tony 1027 K2OS,Frank 2194 K2PI,Harv/Bob 1456 K2PO,Bill 848 K2QB,Jim 935 K2QMF,Ted 105 K2RD,Ira 63 K2RSK,Peter 936 K2SAN,Paul 1131 K2SD,Scott 2266 K2SG,Tony 252 K2SX,Dennis 124 K2TT,Bill 586 K2TW,Tom 2000 K2UA,Rus 2121 K2UFT,Dick 209 K2UV,Warren 533 K2VCO,Vic 5 K2VV,John 2292 K2WK,Walt 444 K2XA,Saul 347 K2XX,Joe 339 K2YGM,Bob 2130 K2YWE,Dan 395 K2ZC,Dave 1405 K2ZF,Jim 716 K2ZR,Dick 515 K3CT,John 466 K3DGR,Dave 694 K3DMG,Lee 1837 K3EW,Phil 2236 K3GHH,John 1212 K3HW,Bill 1998 K3IE,Hunter 990 K3IN,Pete 2196 K3IU,Ken 364 K3JT,Terry 1398 K3LR,Tim 943 K3MD,John 750 K3MIY,Ron 2235 K3MR,Matt 2070 K3OX,Kevin 2024 K3PA,Drew 1046 K3PH,Bob 2195 K3PP,Glenn 1787 K3QP,Bill 1387 K3SEN,Dale 1391 K3STX,Paul 711 K3SV,Bill 1946 K3SW,Steve 1964 K3TF,Tom 1123 K3TN,John 245 K3TX,Dave 1997 K3UA,Phil 1579 K3UL,Bob 1673 K3UT,Phil 1537 K3WA,Bill 319 K3WI,Bill 2347 K3WJV,Bill 1465 K3WW,Chas 178 K3XA,Bill 763 K3YEO,Ron 1846 K3YP,Ray 1845 K3ZGA,Bob 1811 K4AB,Larry 704 K4AEN,Tom/Tommy 1861 K4AFE,John 1560 K4AHO,Jim 1049 K4AMC,Jim 922 K4ARQ,John 1437 K4BAI,John 76 K4DXV,Steve 1966 K4EA,Neal 2357 K4EET,Dave 1724 K4EOR,George 1655 K4EU,Steve 1329 K4EWG,Pete 502 K4FN,Dan 1639 K4FT,John 304 K4GM,George 779 K4GMH,Mike 1015 K4HC,Chris 371 K4HQK,John 894 K4HR,Davy 1494 K4IA,Buck 2073 K4ITV,Chas 1312 K4IU,Fred 507 K4JAZ,Paul 1260 K4JKL,Jerry 948 K4JPD,Steve 832 K4KSR,Bill 2107 K4MM,Tom 1568 K4MSG,Paul 315 K4NE,Phil 2220 K4NMR,Tom 2298 K4OAQ,Fritz 1658 K4ODL,Randy 1464 K4ORD,Riley 1024 K4OV,Rob 1592 K4OWR,Bill 2100 K4PI,Mike 1066 K4QPL,Jim 244 K4QS,Chuck 1749 K4QU,Mike 2318 K4RB,Bob 236 K4RO,Kirk 387 K4RUM,Mike 1182 K4SX,Ron 810 K4TZ,Tom 1993 K4WJ,John 193 K4WW,Bo 2017 K4XU,Dick 1083 K4YFH,Jimmy 1711 K4YYL,Art 1177 K4ZA,Don 298 K4ZGB,Tom 468 K4ZLE,Jay 562 K5AB,Alan 299 K5AUP,Jim 1803 K5AX,Tom 107 K5AZR,Ed 1549 K5BGB,Rod 195 K5CI,Leo 2262 K5CM,Connie 1662 K5DU,Susan 88 K5EDM,Greg 1967 K5FNQ,Art 795 K5FP,Fred 392 K5GA,Bill 1485 K5GH,George 1071 K5GM,Pete 322 K5GO,Stan 272 K5GP,Gene 2104 K5GQ,Mark 672 K5HK,Carl 803 K5HP,Monk 1717 K5IU,Dick 1303 K5IX,Dave 1472 K5JX,Rene 1003 K5KC,Ken 2067 K5KG,George 970 K5KJ,Sam 1547 K5KV,Benny 273 K5LG,Les 857 K5LN,Bill 1152 K5LY,Lee 1124 K5MM,Ron 1984 K5MP,Mike 2084 K5NT,Dave 2368 K5OA,Russ 2158 K5OT,Larry 127 K5PI,Rob 2124 K5RC,Tom 108 K5RM,John 1776 K5RT,Paul 1073 K5SGE,Phillip 1470 K5TA,Scott 496 K5TF,Dick 1033 K5TO,Wally 1341 K5TU,Kim 1626 K5UZ,Dave 1316 K5VI,Andy 1923 K5VR,Stan 889 K5VWW,Orville 1871 K5WA,Bob 1280 K5WAF,Bill 651 K5WK,Ken 1446 K5WQG,Ed 2127 K5XU,Mike 1584 K5YQF,Cecil 1370 K5YZW,Ed 2290 K5ZD,Randy 899 K6AR,Jim 546 K6BFL,Bren 2340 K6CTA,Ed 233 K6DGW,Skip 142 K6GT,George 939 K6GVG,Roy 1207 K6HP,Ed 1267 K6HTN,Kate 1068 K6IJ,Fred 216 K6JEB,Jack 1044 K6JJR,Mark 1987 K6JS,Jim 2312 K6KI,Jorma 144 K6KR,Dick 257 K6KX,Fred 274 K6LL,Dave 1455 K6LN,Carl 2300 K6MM,John 11 K6MR,Ken 1270 K6NA,Glen 548 K6NR,Dana 2380 K6NV,Bob 675 K6PO,Paul 1758 K6QU,Jerry 715 K6RB,Rob 3 K6RC,Dave 2363 K6RQT,Ryan 1172 K6RR,Bob 1412 K6RV,Donald 1877 K6SRZ,Alan 36 K6SSS,Fred 691 K6TD,Kevin 81 K6UFO,Mork 403 K6XT,Art 728 K6YF,Robert 1908 K6YXH,Norm 2304 K6ZD,Dave 2157 K6ZO,Don 1375 K7ABV,Eric 2023 K7AJM,Jim 1730 K7AZT,Paul 1621 K7BTW,Dick 2313 K7BV,Dennis 1733 K7EK,Gary 997 K7GS,Gary 1624 K7GT,Allan 682 K7HBN,Geo 2168 K7JOE,Joe 2102 K7JQ,Bob 592 K7KHC,Kevin 1298 K7KY,Doug 1396 K7LV,George 800 K7LVJ,John 1833 K7MOA,Key 1594 K7NJ,Riki 275 K7NM,Lee 801 K7NV,Kurt 441 K7QA,Tom 1959 K7QBW,Bob 2091 K7RL,Mitch 2285 K7RR,Pete 1575 K7SF,Steve 1137 K7SS,Danny 2053 K7SV,Lar 1004 K7TD,Terry 1948 K7UT,Darryl 2071 K7VM,Craig 1256 K7WA,Jim 2338 K7WP,John 479 K7XH,Mike 1441 K7ZD,Gary 1814 K7ZOO,Curt 2075 K8AJS,John 1694 K8AQM,Ted 2043 K8AZT,John 2210 K8BKM,Tom 1925 K8BZ,Steve 1397 K8CIT,Art 2321 K8CMO,Dave 1652 K8DK,Doug 1728 K8EJ,Steve 528 K8FU,Mark 1772 K8GL,Greg 693 K8GT,Gerry 2031 K8GU,Ethan 2179 K8IA,Bob 666 K8JPM,Bob 787 K8JQ,Steve 1402 K8LBQ,Bain 2320 K8LSB,Marc 1447 K8NA,Ted 365 K8NZ,Ron 2119 K8OD,Joe 1484 K8PK,Peter 2226 K8QKY,Steve 1705 K8RD,Ed 145 K8RF,Dan 2267 K8RJW,Bob 2146 K8SIA,Jim 748 K8UDH,Bruce 1654 K8UT,Larry 1672 K8XF,Mike 1379 K8ZZ,Ed 1706 K9CT,Craig 276 K9CW,Drew 979 K9DX,John 184 K9EU,Erik 886 K9FD,Merv 987 K9FS,Bob 1524 K9GS,Gary 1032 K9HXO,Bill 1126 K9IBM,Dan 1677 K9IG,Greg 1650 K9IR,Paula 600 K9JF,Jim 951 K9JM,Jim 909 K9JWI,Clyde 2103 K9KM,Howie 1886 K9LA,Carl 920 K9MA,Scott 1385 K9MM,John 120 K9MMS,Gary 277 K9NR,Don 1072 K9OM,Dick 1440 K9OR,Randy 147 K9OZ,Bruce 852 K9QVB,John 159 K9RS,Ray 218 K9UIY,Vic 505 K9VP,Roger 1016 K9VV,Fubar 524 K9WX,Tim 1462 K9XV,Tom 2270 K9YC,Jim 69 K9ZO,Al 1761 K9ZTV,Kent 676 KA0AAM,Dwayne 1497 KA0IQT,Jim 1095 KA1IOR,Geoff 351 KA3LXM,Jim 2294 KA3OCS,Bob 2108 KA3QLF,Scott 1197 KA4RRU,Mike 1388 KA5CAV,John 2284 KA5M,Marsh 1433 KA6AIL,Duaine 1414 KA9BHD,Bob 1809 KA9P,Scott 1698 KA9SXV,Joel 2046 KB1W,LPL 2038 KB3AAY,Ron 1866 KB3ML,Paul 1495 KB3Z,Mark 1483 KB4DE,Bill 2093 KB4WLF,Wolf 1982 KB5RF,Tom 2358 KB5ZCR,Tim 2314 KB6NU,Dan 1418 KB8GAE,Richard 2123 KB8PGW,John 2078 KB9DKR,Carl 2258 KB9OWD,Ryan 1086 KC0URL,Ray 1872 KC0VKN,Joe 635 KC2LM,Ed 2334 KC3X,Hollis 1725 KC4D,Bill 419 KC7V,Mike 260 KC8J,Walt 2085 KC8UR,Tony 2278 KC9EE,Gare/Gary 1240 KC9K,Dave 1875 KD2FSH,Jerry 1918 KD4EE,Scott 1330 KD4OS,Emmett 1188 KD7UI,John 1363 KD8RQE,Mike 1599 KD8SAV,Gary 1089 KE0EK,David 1819 KE0TT,Dan 2260 KE1B,Rich 735 KE1F,Lou 769 KE1J,Lars 2037 KE2D,Bob 1796 KE2SX,Gregg 1941 KE3X,Ken 460 KE4D,John 1688 KE4KY,Glenn 1763 KE4RG,Ken 1765 KE4S,Dave 1508 KE6K,John 1427 KE8EAS,Josh 2231 KE8G,Jim 1616 KF4A,Don 1666 KF7GGN,Scott 1514 KF7Z,Danny 1468 KF8O,Ron 2230 KF9D,Roger 2068 KG0EW,Dave 2369 KG0YL,Nancy 1831 KG3V,Tom 1034 KG4CRJ,Brian 2378 KG4IKQ,Jim 1458 KG4Q,Larry 1956 KG5HVO,Bryant 1795 KG5U,Dale 1241 KG5VK,Steve 1806 KG6IIP,Randel 1313 KG7A,Ronny 1939 KG9LB,Jim 2018 KG9N,Chuck 969 KG9X,Fred 1881 KH0ZZ,Atsu 141 KH2N,Asa 2019 KH6/VA7CW,Andy 352 KH6CJJ,Kent 2160 KH6LC,Lloyd 85 KI0I,Mark 1187 KI0KN,James 1995 KI1U,Mike 2327 KI3F,Denny 2008 KI4MZC,Don 1539 KI4XH,Fred 1206 KI5T,Wade 295 KI6OY,Lee 2013 KI7OMH,Mike 2282 KI7Y,Jim 699 KI9T,Pat 2293 KJ4M,Gene 2109 KJ4YM,Mark 2317 KJ9C,Mel 898 KK0ECT,Eric 2066 KK1MM,Mike 1272 KK4R,Rob 1953 KK5NA,Joe 1523 KK6GHA,Ken 1604 KK6I,Ron 2135 KK6M,Roy 2177 KK6NVZ,Kevin 2251 KK7A,Jim 1975 KK9DX,Cornel 256 KK9V,Mike 1647 KL3W,Tom 1461 KL7SB,Steve 1268 KL9A,Chris 1576 KM0O,Tony 1037 KM3T,Dave 50 KM4CH,John 2039 KM4FO,Dwight 1436 KM4LAO,Ruth 2063 KM4WHO,John 2336 KM6ZT,Dave 1476 KM7Q,Bob 1353 KM9M,Zig 854 KM9R,Mike 1502 KN4VV,John 2331 KN4Y,Ed 1684 KN7T,Mark 2274 KN8U,Bruce 2297 KP3W,Jose 1499 KP4/KZ5D,Art 12 KP4/N5NHJ,Max 24 KP4EJ,Charlie 1501 KR2Q,Doug 438 KR3E,Ed 133 KR4AE,Alan 1460 KR4TH,Jerry 2128 KR7C,Stan 1021 KR7RK,Keith 746 KR8V,Gary 1043 KS4L,Randy 2351 KS5A,Guff 391 KS9W,Bob 2219 KT4XN,Tom 1738 KT5V,David 1323 KT5X,FD 58 KU1N,Keith 1968 KU5B,Colin 418 KU6CW,Terry 2279 KU7T,Andy 1300 KU7Y,Ron 1211 KU8E,Jeff 208 KV0I,Bill 2265 KV1E,Jack 1150 KV8Q,Tom 2175 KW1U,Marcia 706 KW3F,Bob 1450 KW4V,Les 2333 KW5CW,James 2346 KW7Q,Steve 1039 KW8N,Bob 1454 KX4KU,Kevin 1978 KX6A,Mike 1782 KY2D,Jim 2096 KY7M,Lee 84 KY9I,Jay 2341 KZ5D,Art 12 KZ6H,Steve 2286 LA4XX,Hal 989 LA7GIA,Ken 1888 LA8OM,Chris 1848 LB1GB,Bjorn 992 LU1AW,Juan 1835 LY5A,Jonas 1459 LY8O,Remi 1858 LZ1HW,Spas 2001 LZ5KF,Claude 2326 M0DHP,Ray 2090 M0DOV,Dov 175 M0GAA,Motoaki 1014 M0NPT,Abdel 2344 M0RYB,Peter 2061 M2D,Phil 1583 MD0CCE,Bob 552 MI0WWB,Will 2081 MM0FME,Mik 2151 N0AC,Bill 1252 N0AV,Jim 359 N0AX,Ward 1744 N0DIR,Nodir 815 N0EF,John 1299 N0KK,Kirk 698 N0KQ,Bill 1463 N0KV,Barry 1723 N0PP,Juerg 2048 N0QM,Larry 644 N0QQ,Sandy 1581 N0SM,Steve 705 N0TA,John 885 N0TLW,Tom 2364 N0UR,Jim 1445 N0YY,Rick 1434 N1BG,Fred 1030 N1DC,Rick 1257 N1DG,Don 2 N1EN,Michael 1247 N1FG,Larry 2012 N1GKE,Myrt 929 N1KW,Bob 1022 N1LN,Bruce 1141 N1TO,Ed 685 N1TX,Larry 912 N1VH,Marty 1927 N1XS,Chris 1817 N1ZX,Stan 473 N2ADC,Gary 2074 N2ATB,Tony 213 N2CJ,Glenn 1419 N2ED,Edward 2264 N2EI,Skip 2060 N2EY,Jim 2216 N2FME,Mik 2151 N2GA,George 344 N2GC,Mike 821 N2IC,Steve 1790 N2JFD,Jim 1785 N2JJ,Jim 1128 N2JT,Jack 640 N2NC,John 2180 N2NL,Dave 424 N2NT,Andy 2036 N2OO,Bob 2171 N2RC,Mike 1203 N2RI,Paul 462 N2SO,Charlie 1435 N2UU,Bob 121 N2WCQ,Yuri 21 N2WK,Wayne 1767 N2YO,Chip 405 N2ZN,Ken 697 N2ZX,Curt 1167 N3AAK,Bob 1720 N3AC,Dave 1235 N3AD,Alan 727 N3AM,John 6 N3AO,Carter 719 N3BB,Jim 70 N3CI,Dave 2010 N3CW,Ed 1509 N3CZ,Vlado 1891 N3DXX,Art 1232 N3EA,Al 1438 N3FZ,Bryan 2273 N3HEE,Joe 1283 N3IQ,Brian 302 N3JT,Jim 1 N3KS,Kam 146 N3MNT,Bob 1292 N3ND,Dan 189 N3QE,Tim 1223 N3RC,Roger 429 N3RD,Dave 232 N3RS,Sig 34 N3RSD,Frank 1054 N3SD,Greg 1768 N3WT,John 185 N3ZN,Tony 1690 N3ZZ,Tom 793 N4AF,Howie 132 N4ASF,Dave 1924 N4BA,Fred 2221 N4CD,Bob 1928 N4CJ,Chris 1294 N4CU,Bob 2302 N4CW,Bert 671 N4DD,Dennis 1000 N4DPM,Rich 2287 N4DT,Danny 1740 N4DW,Dave 923 N4EEB,John 2335 N4EEV,Mike 1600 N4EII,Al 2291 N4ETC,Eden 2192 N4FP,Wayne 1090 N4GG,Hal 2288 N4GL,Marty 1644 N4GU,Mike 737 N4HAI,Tom 1099 N4IJ,Doug 1938 N4IQ,Bill 1610 N4IR,Jim 940 N4IRN,John 268 N4IY,Terry 2250 N4KM,Kevin 2189 N4KS,Ken 1274 N4KW,Pete 1638 N4NQ,Sid 1611 N4OI,Ken 1536 N4OO,Brian 1045 N4OX,Jay 1038 N4PD,Paul 663 N4PIR,Gary 1936 N4PJ,Art 1011 N4QS,Dave 1653 N4SJK,Steve 2301 N4SR,Todd 1050 N4TB,Terry 106 N4TMM,Jim 1791 N4UC,Art 858 N4UP,Peter 1228 N4WO,Greg 1511 N4XL,Ken 2356 N4YA,Chris 1657 N4YDU,Nate 445 N4ZH,Terry 2337 N4ZR,Pete 1277 N4ZZ,Don 902 N5AF,Sam 1527 N5AHM,Doc 2325 N5AN,Bud 140 N5AW,Marv 157 N5BA,Brian 1453 N5CW,Curt 572 N5DX,Kevin 1293 N5EE,Kenny 1766 N5EIL,Neil 1635 N5FO,Sam 1680 N5HZ,Jim 1425 N5IR,Bill 799 N5JR,Joel 1229 N5KT,Gerald 1606 N5KW,Pam 1863 N5KY,Jim 401 N5LB,Lionel 1691 N5LYJ,Ken 994 N5NHJ,Max 24 N5NU,Jason 1920 N5OE,Carl 983 N5OT,Mark 2198 N5PHT,Gary 1489 N5RP,Bob 1797 N5RR,Bill 226 N5RZ,Gator 1221 N5TM,Dan 856 N5TOO,Van 1557 N5TW,Tom 1160 N5VR,Bill 1788 N5WE,Charlie 1192 N5XE,Carl 1102 N5XZ,Allen 447 N5ZC,Rich 2153 N5ZO,Marko 1224 N6BT,Tom 281 N6CW,Terry 2279 N6EED,Terry 2122 N6EV,Paul 380 N6GQ,Jeff 67 N6HCN,John 1914 N6HD,David 1098 N6HE,Ray 2022 N6IET,Rick 1466 N6JV,Norm 329 N6KI,Den 1380 N6LRA,Laura 2244 N6MJ,Dan 2164 N6NC,Larry 1290 N6NF,Tom 2011 N6PN,Matt 253 N6RA,Tom 109 N6RK,Rick 97 N6RO,Ken 79 N6TT,Steve 535 N6TVN,Carl 1930 N6VOH,Barry 1248 N6WIN,Tim 1942 N6WM,Chris 688 N6XI,Rick 4 N6ZFO,Bill 101 N7BV,Chuck 2131 N7DRW,Bud 2246 N7HRK,Rick 1169 N7ID,Mike 2310 N7JI,Scott 2348 N7MB,Mike 629 N7MQ,Steve 2215 N7MU,Jim 2243 N7NM,Doug 1944 N7ON,John 628 N7RCS,Jim 1580 N7RD,Ron 1551 N7RR,Bruce 846 N7SU,Dan 2283 N7TB,Terry 1999 N7TR,Rich 95 N7US,Jim 486 N7WY,Bob 1406 N7YT,Bill 1271 N7YY,Dan 1865 N8AA,John 723 N8AI,Chris 1934 N8BJQ,Steve 103 N8DNA,Mike 1743 N8EA,Joe 725 N8II,Jeff 2088 N8JA,Jay 1234 N8LA,Lou 1339 N8LR,Gary 1818 N8MTV,Mike 2065 N8NA,Karl 839 N8RR,Chas 649 N8TD,Tom 749 N8UM,John 1535 N9CK,Steve 1287 N9CO,Charlie 357 N9EP,Ed 991 N9IXD,Marty 1393 N9LQ,Joel 1996 N9MM,Norm 566 N9NA,John 1390 N9OL,John 2383 N9RD,Jurgen 582 N9SE,Marty 1562 N9SW,Gene 798 N9SZ,Steve 1793 N9TK,Jim 1986 N9UA,Mike 1097 N9XX,Dan 601 NA1VT,Andy 2050 NA2AA,David 1198 NA2M,Bill 718 NA4J,Jim 2027 NA5C,Steve 2154 NA5G,Ed 170 NA6M,Mark 925 NA6O,Gary 1345 NA7C,Ted 1289 NA8V,Greg 1214 NB1U,Mark 754 NB3R,Dave 1520 NB6M,Wayne 1178 NC1M,Hugh 1668 NC3Y,Tom 2147 NC4S,Gary 757 NC6K,Eric 1640 NC7M,Marc 1002 ND1R,Dai 1286 ND2T,Tom 110 ND4V,Mike 1475 ND8MS,Mark 2112 ND9G,Mike 2148 ND9M,Jim 389 NE0DA,Jim 2272 NE7D,Rock 829 NE8J,Howard 1940 NF0N,Mike 1383 NF3R,Joel 1971 NF4A,Charlie 282 NF7D,Bob 1279 NF8M,Frank 1634 NF9V,Rudy 593 NG1R,Roger 2087 NG2H,Ken 1477 NG7A,George 2206 NG7M,Max 1201 NI0C,Chuck 431 NI0R,Roger 400 NI4E,Eric 1372 NI6V,Matt 1586 NI8N,Jack 1315 NJ1F,Brian 2029 NJ1T,Doug 2213 NJ4Q,Will 2374 NJ5N,Chris 2105 NJ8J,Ben 2007 NJ8M,Morgan 1590 NJ8V,Dew 1969 NK2F,Phil 1842 NK4I,Tighe 1481 NK7B,Jim 1774 NK7U,Joe 708 NL7VX,Steve 1052 NM1Y,Jeff 1887 NM2L,Greg 1118 NM5M,Eric 974 NM5S,Alan 1171 NN1C,Marty 2276 NN1N,Dave 123 NN4K,Mac 1227 NN5O,Larry 1327 NN6T,Glen 781 NN7M,Ryan 2245 NN7W,Terry 2057 NO5W,Chuck 311 NP2J,Dan 2267 NP2X,Fubar 524 NP3A,Eric 1112 NP3K,Charlie 1238 NP4H,Nomar 1550 NP4Z,Felipe 350 NQ6N,Matt 1013 NR1R,Ray 841 NR1X,Al 738 NR3N,Angel 1792 NR3Z,Marty 2322 NR4M,Steve 993 NS0R,Morgan 1264 NS3C,Richard 1807 NS4T,Pepe 1989 NS6W,Serge 2271 NS8O,Greg 1496 NS9I,Dwight 1105 NT6X,Mike 167 NU1O,Chris 1670 NU6N,Arkady 2152 NU7Y,Q or Quint 1261 NV1U,Tom 2303 NV3N,Stu 1815 NV5F,Ginnie 2149 NV9X,Jim 774 NW0M,Mitch 1064 NW2K,Dean 1065 NW3Y,Chick 2185 NW4V,Ed 348 NX4N,Chris 1917 NX8Y,Ron 1598 NX9G,Yanko 1882 NY2H,Lou 2176 NY3A,Steve 2296 NY3B,Steve 1862 NZ3O,Byron 2026 NZ8J,Tim 1217 OE3GSA,Gerd 537 OE5FIN,Fritz 2193 OE6FYG,Herb 1661 OH0XX,Olli 328 OH1RX,Jouko 608 OH2BN,Jarmo 135 OH2BR,Jukka 616 OH2EA,Hans 2014 OH2EV,Esa 510 OH2KI,Jorma 144 OH3BCX,Zaba 1856 OH6NVC,Mika 1919 OH7CW,Panu 1559 OK1RR,Martin 87 OK1TN,Slavek 662 OK1VK,Pavel 1897 OK2PAY,Lada 816 OK7AN,Petr 92 OM0CS,Kamil 1194 OM2VL,Laci 1542 ON4UN,John 17 ON4VT,Danny 2170 ON5UK,Luk 971 ON5ZO,Frank 56 ON6WP,Pol 1009 ON7PQ,Pat 2365 OT4V,Danny 2170 OX3XR,Peter 1116 OY1CT,Caen 797 OZ1JHM,Jalmar 1420 OZ3SM,Steve 2361 P40LE,Andy 39 P40T,Yuri 21 P40W,John 204 PA0JLS,Hans 849 PA0VLD,Cees 2307 PA1FOX,Alex 1225 PA1HR,Hans 386 PA3ACA,Hans 1320 PA3DBS,Peter 702 PA4N,Frank 1161 PA5KT,Henk 1962 PA5TT,Teun 283 PA5V,Bob 179 PA7RA,Rien 284 PE5O,Onno 1852 PG4I,Joop 2225 PJ2/N5OT,Mark 2198 PJ2/NF9V,Rudy 593 PJ4/K4BAI,John 76 PJ5/K1XM,Paul 74 PP5EG,Oms 549 PY2OMS,Oms 549 PY5EG,Oms 549 PZ5T,Yuri 21 R3/K5GO,Stan 272 R3/VE7CC,Lee 139 R6AF,Vic 406 R6AF/P,Vic 406 RA3CQ,Igor 20 RD3A,Val 536 RD3AF,Val 536 RM2D,Mats 1820 S53R,Rob 492 SA0BXV,Claes 1849 SA6BGR,Per 1773 SA6G,Lars 173 SC3N,Andy 265 SD6F,Klas 2163 SD6M,Per 1773 SE0C,Ola 1737 SE4E,Lars 950 SE5E,Ingo 2097 SE5L,Ben 1237 SF0Z,Jens 2237 SF1Z,Jens 2237 SI5Y,Kurt 904 SM0BYD,Hans 998 SM0CUH,Ola 1737 SM0FPR,Sudden 2125 SM0HEV,Jens 2237 SM0OY,Lars 1155 SM0Y,Lars 1155 SM1TDE,Eric 1718 SM3/EA8CN,Andy 265 SM3EVR,Tord 261 SM4DQE,Lars 950 SM5AJV,Ingo 2097 SM5ALJ,Ben 1237 SM5BKK,Kurt 904 SM5CCE,Kjell 169 SM5CIL,Arne 1410 SM5GLC,Lasse 1529 SM5IMO,Dan 1854 SM5SIC,GI or Göran 2094 SM6BGA,Hans 456 SM6CNN,Andy 176 SM6CUK,Lars 173 SM6FKF,Fredy 999 SM6JWR,Klas 2163 SM6LRR,Mats 1820 SM7BUA,Mats 1950 SM7CIL,Arne 1410 SM7FCU,Bengt 2033 SM7IUN,Bjorn 2101 SM7RYR,Roger 1855 SO5CW,Fabian 1566 SP9BRP,Jan 2343 SP9FOW,Roman 2377 SP9R,Jan 2343 SQ6GIT,Konrad 2045 SQ9IWA,Tom 2240 SQ9S,Adam 2309 ST2AR,Rob 492 SV2BBK,Theo or Fanis 1976 SV9RNG,Pol 1009 TF3DC,Oskar 285 TF3Y,Yngvi 238 TI5KS,Kam 146 TI5W,Nate 445 TM0SOC,Claude 2326 TM1CY,Claude 2326 TX5T,Madison 1479 TY2AC,Nic 1755 TZ4AM,Jeff 1716 UA6AF,Vic 406 UR5MM,Rudy 382 US0MF,Serge 381 UT1IA,Bob 527 UT3UZ,Alex 614 UT4UZ,Yuri 21 UT5CW,Bob 527 UT5WAA,Volodymyr 2234 UT6UA,Dima 1756 UT7UJ,Dim 619 UW3HM,Slava 1810 UW7LL,Yarik 2229 UX1HW,Art 1890 UX1UA,Sergei 522 UY1HY,Val 2349 UZ1WW,Bob 527 V26K,Bud 242 V26M,Alan 727 V31DJ,Walt 1752 V31MA,Marc 1851 V31UB,Colin 418 V4/W3UL,Bill 1699 VA1RST,Roger 2049 VA2AGW,Andy 2328 VA2CZ,Pete 2184 VA2FDT,Szabi 1193 VA2SG,Pete 225 VA2WA,Vic 2212 VA3FV,Les 1701 VA3OPN,Glenn 457 VA3PM,Pierre 1617 VA3RRK,Keith 746 VA3SB,Serge 1488 VA7CW,Andy 352 VA7QCE,Carole 1913 VA7ST,Bud 1622 VE1AOE,Don 1703 VE1DT,Gerald 941 VE1EJ,Joe 1386 VE1OP,Scott 2110 VE2AXO,Bob 1596 VE2BWL,Guy 859 VE2BZO,Andre 1356 VE2FK,Claude 1181 VE2HB,Claude 1181 VE2IM,Yuri 21 VE2IR,Don 1822 VE2PID,Pierre 1278 VE2SRP,Simon 2144 VE3ABN,Les 1701 VE3CEB,Gerd 1916 VE3CX,Tom 1399 VE3DZ,Yuri 21 VE3EFM,Les 1701 VE3EJ,John 513 VE3FP,Adam 2323 VE3FXX,Ron 1775 VE3GFN,Mike 1119 VE3GNA,Glenn 457 VE3KI,Rich 783 VE3KP,Ken 1246 VE3MA,Al 1860 VE3MGY,Brian 1285 VE3MM,Rick 1947 VE3MV,Doug 1642 VE3NE,Lali 128 VE3NNT,Les 1701 VE3PVI,Tom 1735 VE3RIA,Drew 1025 VE3RUA,Jack 1047 VE3TW,Stan 1563 VE3VGI,John 1373 VE3VTG,Enzo 2120 VE3XT,Bill 1516 VE3YT,Vic 2277 VE4AEO,Rich 783 VE4MR,Kevin 1587 VE5UF,Doug 137 VE6BF,Bill 222 VE6JF,Jim 2009 VE7AHA,Andy 352 VE7CC,Lee 139 VE7DZO,David 2106 VE7FO,Jim 1368 VE7KW,Keith 2182 VE7MR,Willi 427 VE9AA,Mike 1347 VK2BJ,Barry 294 VK2IO,Gerard 2362 VK3CWB,Moz 1895 VK4TJF,James 1191 VK5EEE,Lou 1714 VK6HG,Rob 1029 VK7CW,Steve 1196 VK8XX,Joe 339 VO1AAM,Yuri 21 VO1BQ,Joe 1325 VO1DD,Doug 1078 VO1HP,Frank 684 VO1MP,Gus 134 VP2MVV,Ken 697 VP2MXF,Nigel 166 VQ9JC,Jim 389 VQ9LA,Larry 644 VU2PTT,Prasad 615 VY1JA,Jay 1234 W0AD,Paul 1977 W0AG,Roger 1317 W0BH,Bob 669 W0BV,Bob 753 W0CCA,Cap 625 W0CO,Brad 1452 W0CP,Walt 1752 W0EA,TJ 953 W0EJ,Bill 1269 W0GJ,Glenn 532 W0GXA,Bob 1349 W0GXQ,Jerry 1555 W0ITT,Gary 2041 W0JX,Dennis 1263 W0KU,Scott 1988 W0LPF,Pete 1779 W0ODS,Jeff 1297 W0OR,Bill 1162 W0PHX,Geo 2076 W0SA,Peter 503 W0SJS,Steve 446 W0TG,Bill 1873 W0UA,Geo 944 W0UO,Jim 1069 W0VX,Dave 967 W0XE,Don 1500 W1AO,Joe 125 W1EBI,George 9 W1EBM,Gary 784 W1EQ,Bob 871 W1FCV,John 917 W1FJ,Al 504 W1HIJ,Bill 709 W1HIS,Chuck 306 W1JR,Joe 249 W1KM,Greg 1411 W1LWH,Linn 551 W1NN,Hal 785 W1PID,Jim 1507 W1QK,Dan 1506 W1QS,John 918 W1RM,Pete 8 W1TEF,Tom 1541 W1TO,Tom 2042 W1UE,Dennis 437 W1UJ,Jay 426 W1UU,Peter 91 W1VE,Gerry 191 W1WBB,Bill 2207 W1WEF,Jack 48 W1ZT,George 174 W2AAB,Fred 1449 W2APF,Thaire 1627 W2CQ,Bill 928 W2CS,Gary 1008 W2GD,John 204 W2GN,Charlie 1265 W2JAZ,Rick 2239 W2KJ,Joe 1902 W2LCQ,Ed 701 W2LJ,Larry 1005 W2LK,Les 726 W2NO,Dan 2174 W2NRA,Art 1955 W2OR,Mark 1384 W2OZB,Phil 2020 W2PL,Phil 570 W2PTT,Prasad 615 W2RQ,Bill 1764 W2RU,Bud 65 W2TB,Mike 346 W2TR,Gary 2136 W2VM,Craig 1623 W2XB,Don 1896 W2XS,John 1407 W2YH,Carl 2384 W2YR,John 751 W2ZRA,Kevin 942 W3BI,Rick 794 W3BW,Brian 567 W3EEK,Carl 972 W3EF,Maury 632 W3EL,Billy 417 W3FSA,John 1552 W3FV,Barry 2025 W3GG,Burt 1994 W3GWM,George 1981 W3IL,Bill 199 W3KB,Keith 1156 W3KHG,John 661 W3LPL,Frank 29 W3OKC,Steve 1808 W3PNM,Bill 1985 W3RZ,Louis 1963 W3TW,Tom 1972 W3UL,Bill 1699 W3UR,Bernie 26 W3WHK,Saul 1392 W3WW,Don 896 W3YQ,Tim 1742 W3YY,Bob 517 W4ALF,Chris 1695 W4AU,John 224 W4BQF,Tom 149 W4BUW,George 1023 W4CC,John 1284 W4CI,Dave 932 W4CK,Mark 33 W4DDD,Jim 806 W4DKS,Dan 321 W4DXX,Eric 1040 W4EDE,Lee 30 W4ER,John 1189 W4FKM,Claude 1342 W4FOA,Tony 229 W4FS,Tucker 1403 W4GJ,Bob 1077 W4HG,Wayne 494 W4IF,Carl 2021 W4IX,John 984 W4KA,David 1374 W4KLY,Paul 1540 W4LSV,Barry 1132 W4MJE,Jim 1777 W4MQC,Alan 182 W4NA,Nate 1334 W4NBS,Tom 1696 W4NF,Jack 2360 W4NU,John 760 W4NZ,Ted 831 W4OC,Don 433 W4PF,Steve 2056 W4PM,Puck 93 W4QN,Norm 1937 W4QO,Jim 1366 W4RK,Bill 459 W4RM,Bill 2330 W4RN,Mike 585 W4SIG,Kerry 1700 W4SPR,Spray 2259 W4TJE,Jack 1577 W4TTM,Mark 1114 W4UM,Mike 1216 W4UT,Ron 2202 W4UTI,Karl 960 W4UX,Jim 1175 W4VG,Jay 1591 W4VIC,Vic 1184 W4VQ,Bob 835 W4WF,Chris 2095 W4WJ,Don 654 W4WQ,Jerry 2367 W4XO,Lex 2217 W4YE,Buddy 396 W4YES,Glenn 1892 W4ZYT,Don 55 W5BIB,Steve 2350 W5BM,Dan 1377 W5BQ,Bruce 1631 W5CU,Sam 353 W5CWM,Martin 1992 W5DNT,Dan 297 W5DV,Chas 1364 W5FKX,Don 241 W5GAI,Skip 1649 W5IZ,Al 622 W5JAW,Jim 68 W5JBO,John 1115 W5JK,Steve 2253 W5JQ,Jay 607 W5LA,Jim 1630 W5LNI,John 1628 W5MJ,Madison 1479 W5MT,Matt 1868 W5NE,Alex 2141 W5OV,Bob 1760 W5PEH,Pete 379 W5PET,Dick 2316 W5QQ,Del 1451 W5RZ,Dennis 1352 W5SG,Bill 45 W5SJ,Bill 1980 W5TD,John 1675 W5TM,Ed 1336 W5TN,David 2353 W5TUF,Jim 1609 W5UTW,Skip 1901 W5UXH,Chuck 314 W5XU,David 539 W5XX,Mal 2375 W5ZR,Bert 23 W6AEA,Geo 1478 W6BK,Dave 1165 W6CYX,Bob 47 W6EU,Jim 317 W6GMT,Brock 2211 W6IJ,Tommy 111 W6IYS,Bill 1101 W6JMP,Gene 1120 W6KC,Jim 1266 W6LEN,Jess 1840 W6NS,Tim 1498 W6NUC,Dave 1770 W6NWS,Larry 1209 W6OAT,Rusty 28 W6PHO,David 1903 W6RK,Risto 98 W6SC,Jim 263 W6STR,Mike 1641 W6SX,Hank 61 W6TN,Trung 1707 W6VO,Brad 2305 W6WG,Ron 2173 W6XU,Josh 712 W6YA,Jim 72 W6YR,Joe 1990 W7BCW,Bruce 2247 W7CT,Jim 287 W7EE,Gary 1949 W7EEE,Tim 1905 W7FB,Dave 301 W7GB,Don 1186 W7GF,Mike 2005 W7IY,Stu 1620 W7KF,Doug 2183 W7KFI,Sue 2275 W7LXN,Myron 1166 W7OLY,Aubrey 1637 W7OM,Rod 680 W7QC,Steve 1692 W7RF,Dan 2140 W7RX,Scott 2034 W7SW,Scotty 143 W7UT,Bob 200 W7VP,Bill 1802 W7WHY,Tom 407 W7XT,Dick 2004 W7ZRC,Rod 1127 W8BG,Bill 1493 W8BUD,Bud 1417 W8BZY,Jim 2345 W8CAR,Dan 1220 W8DN,Mike 1813 W8FJ,John 201 W8FN,Randy 1864 W8HW,Bruce 958 W8IQ,Kurt 755 W8KR,Jack 1951 W8LVI,Ron 2040 W8MET,Met 2028 W8OV,Dave 2006 W8TK,Tom 2129 W8WTS,Jim 1689 W8WZ,Carl 1660 W8XC,Win 2143 W9AW,Motoaki 1014 W9CC,Larry 1082 W9EBE,Chip 1906 W9EO,Eric 1894 W9FX,Brad 778 W9GL,Jim 1618 W9IE,Ken 1530 W9ILY,John 471 W9KKN,Bill 2241 W9KNI,Bob 1648 W9NJY,Andy 1348 W9NX,Kent 866 W9NXM,Joel 1841 W9OD,Craig 2117 W9OP,Bozo 1067 W9PJ,Paul 1359 W9RE,Mike 526 W9RNY,Mike 2199 W9SN,Steve 642 W9SZ,Zack 731 W9UCR,Dr. Bob 1907 W9VE,Don 2099 W9WR,Dunk 2134 W9XA,Kermit 1094 W9XS,Ron 1731 W9YA,Bob 289 WA0USA,Vic 645 WA1NTA,George 499 WA1S,Ann 196 WA1SKQ,Richard 342 WA1T,Al 2359 WA2AOG,Lon 980 WA2BCK,Tom 762 WA2DFI,Scotty 164 WA2FZB,Tony 1970 WA2OAX,Ira 534 WA2SI,Bert 842 WA2USA,Dennis 819 WA3AAN,Grant 2064 WA3AER,Ted 1879 WA3GM,Greg 1827 WA3MIX,Lou 1308 WA3NZR,JJ 1028 WA3QNT,Bob 1687 WA4JUK,Joe 1702 WA4LJJ,Doug 1659 WA4PSC,Howie 1443 WA4TT,John 1282 WA4WLI,Bob 874 WA5BDU,Nick 1429 WA5LXS,Dennis 1836 WA5PFJ,John 1629 WA5RML,Andy 1324 WA6O,Mike 42 WA6URY,Dan 1176 WA7HJV,Jack 1239 WA8IWK,Allen 1061 WA8KAN,Dave 1961 WA8OFU,Bob 986 WA8OJR,Bruce 1850 WA8VSJ,Art 674 WA8Y,Steve 2289 WA8ZBT,Dennis 1222 WA9ADT,Ron 1665 WA9AQN,John 197 WA9CW,Tom 2238 WA9LEY,Lee 1304 WA9MNF,Ed 2306 WA9SEO,Mike 1748 WB0GKH,Mitch 952 WB0PYF,Ray 1713 WB0SND,Mike 1469 WB2AIV,Bill 542 WB2HNP,Robb 2324 WB2KAO,Tim 2188 WB2UZE,Howard 1361 WB2YQH,Bob 246 WB4AEG,Hal 1646 WB4DNL,Gary 497 WB4FDT,Pip 916 WB4FSF,Bonnie 734 WB4OMM,Steve 1943 WB4RFQ,Daniel 1601 WB5BKL,Nick 1371 WB5K,Jay 1769 WB6SEL,Vic 1534 WB6TOU,Dave 1784 WB7DKZ,Andy 2052 WB7DND,Steve 2169 WB8AKW,John 2329 WB8EJN,Tom 788 WB8HF,Bill 1605 WB8MIW,Patrick 2224 WB8SCT,Jack 1709 WB8WKQ,Jeff 2086 WB9G,Chris 1087 WB9Z,Jerry 707 WC4E,Jeff 1715 WC4X,Ned 2111 WC6Y,Ken 2155 WC7Q,Sam 1226 WC7S,Dale 404 WD4CFN,Steve 2228 WD4EXI,Val 1546 WD5DBV,Roy 290 WD6T,Dave 2079 WD9F,Woody 591 WD9Q,Mat 2113 WE5P,Bill 2372 WE7G,W 1816 WF7T,Brad 729 WG0M,Mike 1612 WG5H,Curt 1931 WJ2O,Dave 1093 WJ6O,Dave 482 WJ7S,John 1582 WJ8Y,Gregg 1915 WJ9B,Will 1085 WK0P,Bink 2197 WK5N,John 2150 WM4I,Burke 1798 WM6Y,PJ 2280 WM9Q,Ron 1170 WN4AFP,Dave 1208 WN7S,Dick 1945 WO1X,Tom 1310 WO4O,Ric 1311 WO9B,Michael 2203 WP4F,Danny 1526 WQ2E,Jack 2054 WQ3E,Josy 1135 WR5J,Curt 1362 WR5U,Mike 89 WR7Q,Bob 1423 WR8O,Ron 2299 WS7M,Mark 2069 WS8G,Rick 2308 WS9V,Skip 1651 WT2P,Fred 1346 WT5RZ,Ron 1110 WT9U,Jim 1674 WU4B,Clark 1869 WU4F,Rob 2255 WU6X,Dennis 1632 WU7F,Mark 1351 WW9R,Pat 730 WX0B,Jay 620 WX2S,Steve 1757 WX4W,Curtis (CW) 1991 WX5CW,Christopher 1762 WX7SJ,Mark 1100 WY6K,Mike 2181 XE2X,Jorge 796 XV2W,Larry 1209 XV9C,Carl 2300 XV9D,Mats 1820 YL1ZF,Kas 2256 YL3JD,Hanz 2227 YN2AA,Jeff 67 YO3FRI,Tina 475 YO3LW,Cris 2205 YO5OHO,Chris 1079 Z32XX,Dragan 370 ZB2X,Jorma 144 ZF2DX,Kevin 1293 ZF2SC,Scott 1698 ZL2AIM,Ian 1174 ZL2KE,Steve 1281 ZS1C,Raoul 338 ZS1EL,Vidi 13 ZS6RI,Chris 1236 tlf-1.4.1/share/okommults0000644000175000017500000000122013651752573012313 00000000000000APA APB APC APD APE APF APG APH API APJ BAA BAB BAC BAD BAE BAN BAR BBE BBN BBY BKD BKH BKO BMB BME BNY BPB BPV BPZ BRA BRE BST BYT CAD CBU CCK CJH CPE CPI CPR CTA CST DCH DDO DET DKL DKU DKV DPJ DPM DPS DRO DSO DST DTA ECH ECL EDE EJA ELI ELO ELT EMO ETE EUL FCR FHB FHK FJI FNA FPA FRK FSE FSV FTR FUO GAL GBL GBM GBR GBV GEL GHO GJI GKR GPR GTR GUH GVY GZL GZN GZS HBR HFM HJE HKA HLO HNJ HOL HOP HOS HPR HSU HUM HVS ILA KEA KEB KEC KED KEO KEZ KNM KOM KRU LEV LMI LUC LVC MAL MAR MED MIC MYJ NAM NIT NMV NZA PAR PBY PEZ PIE POL POP PRE PRI PUC REV ROZ RSO RUZ SAB SEA SEN SKA SLU SNI SNV SOB STR SVI TNC TOP TRE TRN TTE TVR VKR VRT ZAR ZIH ZIL ZMO ZVO tlf-1.4.1/share/spdxmults0000644000175000017500000000004013651752573012323 00000000000000B C D F G R J K L M O P S U W Z tlf-1.4.1/share/arrlsections0000644000175000017500000000042713651752573013001 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 tlf-1.4.1/install-sh0000755000175000017500000003601013651752614011241 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.1/test-driver0000755000175000017500000001104213651752614011431 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.1/configure0000755000175000017500000102012413651752613011143 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Tlf 1.4.1. # # 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.1' PACKAGE_STRING='Tlf 1.4.1' 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.1 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.1:";; 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.1 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.1, 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.1' 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.40.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="" as_fn_error $? "GLib 2.40 or later not found" "$LINENO" 5 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.1, 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.1 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.1/macros/0000755000175000017500000000000013651752622010600 500000000000000tlf-1.4.1/macros/ax_require_defined.m40000644000175000017500000000230113651752573014605 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.1/macros/ax_with_curses_extra.m40000644000175000017500000002404113651752573015222 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.1/macros/ax_with_curses.m40000644000175000017500000006642313651752573014031 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.1/macros/ax_cflags_warn_all.m40000644000175000017500000001170113651752573014575 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.1/macros/ax_append_flag.m40000644000175000017500000000533113651752573013721 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.1/macros/ax_pthread.m40000644000175000017500000003267613651752573013124 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