tlf-1.3.0/0000755000175000017520000000000013046414414007304 500000000000000tlf-1.3.0/Makefile.in0000644000175000017520000007026413046414406011303 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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 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 depcomp 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@ 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 CLEANFILES = *~ man_MANS = tlf.1 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ 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: $(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) | GZIP=$(GZIP_ENV) gzip -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) | GZIP=$(GZIP_ENV) gzip -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*) \ GZIP=$(GZIP_ENV) gzip -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*) \ GZIP=$(GZIP_ENV) gzip -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 # 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.3.0/config.sub0000755000175000017520000010705513014014733011212 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2016 Free Software Foundation, Inc. timestamp='2016-03-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: # http://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. Operation modes: -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-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx | dvp \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsEE* | ee | ps2) basic_machine=mips64r5900el-scei case $os in -linux*) ;; *) os=-elf ;; esac ;; iop) basic_machine=mipsel-scei os=-irx ;; dvp) basic_machine=dvp-scei os=-elf ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -irx* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tlf-1.3.0/aclocal.m40000644000175000017520000016210313046414405011067 00000000000000# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 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 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 AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program], , enable_glibtest=yes) pkg_config_args=glib-2.0 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 min_glib_version=ifelse([$1], ,2.0.0,$1) 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_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable=glib_compile_resources gio-2.0` GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` 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 () { 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 AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) AC_SUBST(GLIB_GENMARSHAL) AC_SUBST(GOBJECT_QUERY) AC_SUBST(GLIB_MKENUMS) AC_SUBST(GLIB_COMPILE_RESOURCES) rm -f conf.glibtest ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- 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 ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # 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]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- 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 ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- 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 ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # 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 $1]) _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 ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # 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 # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --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 # PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------- # 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 ])# PKG_CHECK_VAR # Copyright (C) 2002-2014 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.15' 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.15], [], [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.15])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-2014 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-2014 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-2014 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-2014 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. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _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. FIXME. This creates each '.P' file that we will # 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" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 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-2014 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-2014 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-2014 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 to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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.3.0/tlf.1.in0000644000175000017520000013567713046414310010516 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 radio control @PACKAGE_NAME@ works with Hamlib (version >= 1.2.3), you can find it at .UR https://sourceforge.net/projects/hamlib/ SourceForge.net .UE . .P @PACKAGE_NAME@ provides full .SM TCP/IP networking between @PACKAGE_NAME@ nodes, syncing/distributing log, packet data, frequency data, local talk, serial numbers, time sync etc. .P . .SH OPTIONS Options given to @PACKAGE_NAME@ on the command line. .TP .B \-h Show summary of options and exit. .TP .BI \-f\ config_file Start with non-default configuration file: . .IP .EX @PACKAGE@ \-f PA0R .EE .IP Defaults to .I logcfg.dat in actual working directory. .TP .BI \-s\ user:password@host/dir/logfilename Synchronize log with other node . .IP .EX @PACKAGE@ \-s user:password@host/dir/logfilename .EE . .TP .B \-V Output version information and exit. .TP .B \-v Verbose startup. .TP .B \-d Debug .B rigctl. .TP .B \-n Start without packet/cluster. .TP .B \-r Start without radio control when user wants to start @PACKAGE_NAME@ without modifying .IR logcfg.dat \. . .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 .BI TERM= linux 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. .P By default, Xterm may give unreadable colours. If so, you will have to set different colours in .IR logcfg.dat \. .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 consoles (vi colours are preferred by some). As @PACKAGE_NAME@ uses ncurses to format its display you must use a proper font. (The Linux font works o.k., Inconsolata does as well). 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 .BR @PACKAGE@ \. 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 mail logging screen). Log in with your callsign, if needed, and switch to @PACKAGE_NAME@ with .B : \*(lqEnter\*(rq. You can come back to the packet screen later with the same command from the call input field. .P You can exit and close @PACKAGE_NAME@ with the .B :EXIt or .B :QUIT 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 \(lq:\(rq and at minimum the upper case characters of the command name plus any needed parameters separated by \*(lqSpace\*(rq. . .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 \*(lqm\*(rq for manual start. Possible values are: \*(lq0\*(rq (off), \*(lq2\*(rq...\*(lq5\*(rq or \*(lqm\*(rq (manual). After typing as many characters in the input field or after pressing the \*(lqEnter\*(rq 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. \*(lqEscape\*(rq stops sending. This works only in CW contests in RUN mode. . .TP .BR :CHE ck .TQ .BR :NOC heck Turn the dupe check window On|Off. . .TP .BR :CQD elay Change Auto_CQ delay (in 1/2 seconds, with Up/Down arrow keys). . .TP .BR :CLO ff No cluster information (non-assisted contest operation). . .TP .BR :CLU ster .TQ .B :MAP Show cluster window or bandmap. . .TP .BR :CON test Toggle contest mode On|Off. . .TP .B :CTY .TQ .BR :ZON e .TQ .BR :MUL t Show needed country multipliers, zones, multipliers per continent (depends on the contest). . .TP .BR :CWM ode .TQ .BR :SSB mode .TQ .BR :DIG imode Switch TRX to CW|SSB|Digimode mode. . .TP .BR :DEB ug_tty Debug routine for rig communication links. . .TP .B :EDIt Edit the log with your favourite editor (the editor (vi[m]|joe|e3|mcedit) can be set in .IR logcfg.dat ). . .TP .BR :EXI t .TQ .B :QUIT 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 :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 :PACk et Switch to the packet terminal. Switch back to @PACKAGE_NAME@ with \(lq:\(rq. . .TP .BR :REC onnect Reopens 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 \*(lqEscape\*(rq). . .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-99. . .TP .BR :SIM ulator Toggle simulator mode. In simulator mode you can work a complete CQWW CW contest in TR-Log mode. Set \fBCONTEST=\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 .B soundlog which has to be located in .IR $HOME/@PACKAGE@/soundlogs \. It can be found in the .B 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 cron 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 cron 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 .BI $HOME /.VRlock is removed. . .TP .BR :SYN c Synchronize the logfile of this node with the logfile pointed to by parameter SYNCFILE=. @PACKAGE_NAME@ will .B wget 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 \fI[dd]d\fR Set PC sidetone frequency in Hertz. Range: 300-900, 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 :WRIt e Write cabrillo file according to specified format (see .B CABRILLO statement in the 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 .BI TERM= linux or .BI TERM= rxvt 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 CQ Mode: .RS 7 .IP \(bu 2 With the call input field empty sends the F12 message (Auto CQ). .IP \(bu 2 With characters in the call input field, answers the calling station by sending the F5 message (HIS) followed by the F3 message (RST) and moves the cursor to the exchange field. .IP \(bu 2 If the exchange field is empty, repeats the F5 and F3 messages. .IP \(bu 2 After the exchange information received from the other station is entered, sends the CQ_TU_MSG message, logs the QSO, and the cursor is returned to the call input field to answer the next call. .RE . .IP .B S&P Mode: .RS 7 .IP \(bu 2 With the call input field empty sends the F6 message (MY). .IP \(bu 2 If the exchange field is empty sends the F6 message (MY). .IP \(bu 2 With characters in the call input field sends the F6 message (MY) and moves the cursor to the exchange field. .IP \(bu 2 Once the exchange has been received, sends the F4 message (73) followed by the F3 message (RST), logs the QSO, and the cursor is returned 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 \*(lqEscape\*(rq 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 \*(lqEscape\*(rq will move the cursor to the right of the last character in the call input field. The third press of \*(lqEscape\*(rq 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. . .IP If both key combinations do not working try ':cqd' instead. . .TP .B F1 In CQ mode, send message F1 (CQ). .br In S&P mode send message F6 (MY). . .TP .B F2-F11 Send CW, RTTY or VOICE messages 2 through 11. . .TP .B F12 Start .B Auto_CQ (only from call input field). Sends F12 message repeatedly pausing for Auto_CQ delay time between messages. Auto_CQ is cancelled with first character entry into the call input field. . .TP .BR +\ (Plus) Toggle between the CQ and S&P modes. . .TP .B PgUp Increase CW (Morse Code) speed (from call and exchange fields). .IP If the cursor is in the call input field and it is not empty and CHANGE_RST is set: increase his S value (the leftmost of the RST pair). .IP If the cursor is in the exchange field and it is not empty and CHANGE_RST is set: increase my S value (the rightmost of the RST pair). . .TP .B PgDown Decrease CW (Morse Code) speed (from call input and exchange fields). .IP If the cursor is in the call input field and it is not empty and CHANGE_RST is set: decrease his S value (the leftmost of the RST pair). .IP If the cursor is in the exchange field and it is not empty and CHANGE_RST is set: decrease my S value (the rightmost of the RST pair). . .TP .B Ctrl-PgUp .TQ .B Alt-PgUp Increase Auto_CQ delay pause length (+1/2 sec). .IP Set Auto_CQ delay to message length + pause length. . .TP .B Ctrl-PgDown .TQ .B Alt-PgDown Decrease Auto_CQ delay pause length (\-1/2 sec). . .IP As some terminals, Xfce Terminal is one such, consume Ctrl-PageUp/Ctrl-PageDown, the Alt-key combinations allow for setting the Auto_CQ delay pause length. . .TP .BR ?\ (Query) In CW or DIGIMODE sends the partial call followed by " ?". 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 :REScore 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 \(aqK \*(lqEnter\*(rq\(aq. . .TP .BR #\ (Hash) Transceiver VFO frequency \(-> mem, mem \(-> transceiver VFO frequency. . .TP .BR !\ (Exclamation) Get a new shell. Come back with \(aqexit\(aq. . .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 ( .B Alt-H ) display). . .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 :QUIT , .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 PgUp/PgDown for 500hz steps. Return to logging with . . .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 .BI QTC= RECV or .BI QTC= BOTH or sending QTCs if .BI QTC= SEND is set in .IR logcfg.dat . Same as .B Ctrl-S if \fBQTC=\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 .BI QTC= SEND or .BI QTC= BOTH 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 :QUIT , .BR Ctl-C , and .BR Ctl-D ")." . .TP .B Alt-R Toggle score window. . .TP .B Alt-S Toggle score window. . .TP .B Alt-T Tune your transceiver (via cwdaemon). Activates PTT and Key output for 6 seconds. Stop tuning by pressing any key. . .TP .B Alt-V Band down (Change speed in CT compatibility mode). . .TP .B Alt-W Set CW weight. . .TP .B Alt-Z Show zones worked. . .SH PREFERENCES . @PACKAGE_NAME@ can be fully configured by editing the .I logcfg.dat file. Normally you keep one .I logcfg.dat file, setting up your callsign, the log file name, the ports and addresses for packet, the radio, the network etc., and a separate rules file per contest. .P The .I logcfg.dat file can be edited from within @PACKAGE_NAME@ by the .BR :CFG \ or \ :SET commands (or with any other plain text editor before starting @PACKAGE_NAME@). .P You can set your favourite editor (joe | vi[m] | e3 | mcedit) in the .IR logcfg.dat \ file. .P You connect the rules file by using the statement .BI RULES= contest_rules_file_name 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 .BI RULES= contest_rules_filename Name of the rules file to load. It helps if you name the rules file according to the contest you want to describe. . .TP .BI SYNCFILE= user:password@host/dir/syncfile 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 \*(lq+\*(rq, \*(lqInsert\*(rq and \*(lqEnter\*(rq to log the QSO. . .IP The default mode of operation is the TR-Log sequence which uses \*(lq+\*(rq to switch between CQ and S&P modes, in which \*(lqEnter\*(rq is the sole key used to call the other station, send the exchange, and log the QSO. . .TP .BI TLFCOLOR n = FG/BG Defaults: .RS 14 .BI TLFCOLOR1= 23 (Header and footer) .br .BI TLFCOLOR2= 67 (Pop up windows) .br .BI TLFCOLOR3= 70 (Log window) .br .BI TLFCOLOR4= 57 (Markers/dupe colour) .br .BI TLFCOLOR5= 43 (Input fields) .br .BI TLFCOLOR6= 63 (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=\fIjoe\fR | \fIvi\fR[\fIm\fR] | \fIe3\fR | \fImcedit\fR Editor used to modify the QSO log or logcfg.dat. . .TP .BI CALL= PA0R Your call used in messages and used to determine your country, zone and continent. . .TP .BI TIME_OFFSET= 0 Used to shift the @PACKAGE_NAME@ time with respect to the computer clock. Normally 0. Range: 0-23. . .TP .B TIME_MASTER This node transmits the time over the network (only one master allowed!). . .TP \fBADDNODE=\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 .BI THISNODE= A Node designator (default \(aqA\(aq). If @PACKAGE_NAME@ hears its own node ID on the network it will exit and ask you to pick another one! Range: A-H. . .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 is supported. You may also need the keyer for PTT control or band info output. . .TP .BI NETKEYERPORT= port_number Default port is 6789. . .TP .BI NETKEYERHOST= host_address Default host is 127.0.0.1 (localhost). . .TP .BI MFJ1278_KEYER= serial_port 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 .BI CWSPEED= speed_in_WPM Range: 4-69. . .TP .BI WEIGHT= weight_ratio Set the dot to dash ratio. Only for the NETKEYER. Range: \-45-50. . .TP .BI TXDELAY= PTT_delay_in_mS Delay activation of the Push To Talk pin. Range: 0-50. . .TP .B SOUNDCARD Use soundcard for sidetone output. . .TP .BI SIDETONE_VOLUME= soundcard_volume Set soundcard sidetone volume (default is 70). A value of 0 turns off sidetone output (even for the console speaker). Range: 0-99. . .TP .BI CQDELAY= Auto_cq Set automatic CQ pause delay in 1/2 seconds increments between message transmissions. Range: 3-60. . .TP .BI CWTONE= sidetone Set the PC speaker or soundcard frequency. A value of 0 switches the sidetone off. Range: 0-999. . .IP (Due to a bug in cwdaemon it also turns off the .B Alt-T tune function. Use .BI SIDETONE_VOLUME= 0 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 .BI BANDOUTPUT= 124181818 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 .BI TELNETHOST= cluster_address 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 .BI TELNETPORT= telnet_port_of_cluster DX Clusters often use a non-standard port for Telnet, e.g. 8000. . .TP .BI TNCPORT= serial_port You can use /dev/ttyS0, /dev/ttyUSB1, etc. anything that looks like a tty. . .TP .BI TNCSPEED= serial_rate @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 Hamlib library which supports a number of different rigs. . .TP .BI RIGMODEL= rig_number Look at the Hamlib documentation for the rig_number. .IP Hint: \fBrigctl \-l\fR and its manual page (\fBrigctl\fR(1)). . .TP .BI RIGSPEED= serial_rate Speed of the serial port for rig control. . .TP .BI RIGPORT= serial_port You can use /dev/ttyS0, /dev/ttyUSB1, etc. anything that looks like a tty. .IP RPC rig daemon users should use \fBRIGMODEL=\fI1901\fR and \fBRIGPORT=\fIlocalhost\fR. In this case RIGSPEED is ignored (rig model 1901 is deprecated in Hamlib > 3.0 and replaced by \fBrigctld\fR(8) which is rig model 2). . .TP .BI RIGCONF= rig_configuration_parameters Send rig configuration parameters to Hamlib. .br e.g. \fBRIGCONF=\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 .BI CWBANDWIDTH= width 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 .BI SC_DEVICE= device Sound card device for scan function. .br e.g. \fBSC_DEVICE=\fI/dev/dsp0\fR . .TP .BI S_METER= calibration Audio s-meter calibration values for the scan function. .br e.g. \fBS_METER=\fI20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1\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 .BI GMFSK= /home/youruser/gMFSK.log Tell \fBminiterm\fR(1) where to get the data. . .TP .BI DIGIMODEM= /home/youruser/gmfsk_autofile Tell @PACKAGE_NAME@ where to send the macros. . .TP .B CLUSTER Show cluster window at startup. . .TP .BI CLUSTERLOGIN= yourcall 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 .BI BANDMAP= xyz,number Show cluster bandmap on startup and set start values for filtering. .br string parsed for: .br \(aqB\(aq - only own band .br \(aqM\(aq - only own mode .br \(aqD\(aq - do not show dupes .br \(aqS\(aq - skip dupes during grab_next (\fBCtrl-G\fR) .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 USE_PARTIALS 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 my experience 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 .BI SUNSPOTS= SSN 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 .BI SFI= Solar_flux_value 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. Default is On. . .TP .B NOAUTOCQ No automatic CQ when pressing or F12. . .TP .BI MARKERS= file_name 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 .BI POWERMULT= power_multiplier 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=\fI1.5\fR, but the final score will 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. . .SH RULES . The contest rules can be put into separate files. @PACKAGE_NAME@ will first look for a directory called \(lqrules/\(rq in the working directory, and a file named for the contest, \(lq\(rq. If @PACKAGE_NAME@ cannot find such a file, it will look into the directory @prefix@/share/@PACKAGE@/rules. A rules file contains contest specific parameters like multipliers, scoring rules, CW and voice keyer messages, etc. .P .B NB: The rules file overrides settings from the logcfg.dat file! .P .B WARNING! It is your own reponsibility 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 .BI CONTEST= xxxxx Name of the contest (same as the file name \(lq\(rq referenced above). Some contests, like CQWW and WPX, are pre-programmed. Look for the relevant rules file in @prefix@/share/tlf/rules. . .TP .BI LOGFILE= log_file_name Mandatory! . .TP .BI CABRILLO= cabrillo_format Specify the name of the cabrillo format to use (see 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 or ARRL Field Day). Use \(aq---\(aq as placeholder instead of RST in the logfile and the main display. 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 % = your call, .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 (eg: confirm exchange of station in DIGIMODE). . .TP .BI F1= "cw message 1" CQ message, (e.g. CQ de PA0R TEST). . .TP .BI F2= "cw message 2" S&P call message, (e.g. @ de %). . .TP .BI F3= "cw message 3" Exchange message, (e.g. @ ++5NN--#). . .TP .BI F4= "cw message 4" TU message, (e.g. TU 73 %). . .TP .BI F5= "cw message 5" Call of the other station (e.g. @). . .TP .BI F6= "cw message 6" Your call (e.g. %). . .TP .BI F7= "cw message 7" QSO B4 message (e.g. @ sri qso b4 gl). . .TP .BI F8= "cw message 8" Again message (e.g. AGN). . .TP .BI F9= "cw message 9" Query message (e.g. ?). . .TP .BI F10= "cw message 10" QRZ message (e.g. QRZ?). . .TP .BI F11= "cw message 11" QRZ message (e.g. QRZ?). . .TP .BI F12= "cw message 12" Auto-CQ message (e.g. +++TEST %---). . .TP .BI CQ_TU_MSG= "cw message 13" Auto Exchange message in CQ mode (TR-Log mode), (e.g. TU %). . .TP .BI S&P_TU_MSG= "cw message 14" Auto Exchange message in S&P mode (TR-Log mode), (e.g. TU 5NN #). . .TP .BI S&P_CALL_MSG= "cw message 25" Custom call message in S&P mode. Allows replacing the auto-generated S&P call message. . .TP \fBAlt_0=\fI<...>\fR ... \fBAlt_9=\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=\fIvoice message file name 1\fR ... \fBVKM12=\fIvoice message file name 12\fR Use F1 ... F12 keys to send recorded messages for phone. . .TP .BI VKCQM= voice_message_file_name Auto Exchange voice message in CQ mode (TR-Log mode) . .TP .BI VKSPM= voice_message_file_name 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 .BI SSBPOINTS= d Points per SSB QSO. SSBPOINTS and CWPOINTS need to be set for both to work! . .TP .BI CWPOINTS= d Points per CW QSO. . .TP .BI MY_COUNTRY_POINTS= d Points for working your own DXCC entity (often zero (0)). . .TP .BI MY_CONTINENT_POINTS= d Points for working countries in your own continent. . .TP .BI DX_POINTS= d Points for working a station in other continents. . .TP .B 2EU3DX_POINTS Deprecated. Use .B MY_CONTINENT_POINTS and .B DX_POINTS instead. . .TP .BI COUNTRY_LIST_POINTS= d Points for countries in country list. . .TP .B USE_COUNTRYLIST_ONLY Score zero points for countries not in the list. . .TP .BI COUNTRYLIST= "comma separated list of prefixes starting with colon" e.g. Scandinavia:SM,LA,OZ,OH. . .TP .BI COUNTRYLIST= file_name 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 .BI MULT_LIST= file_name Name of multipliers file (often sections, provinces, states, counties). May contain comment lines starting with \(aq#\(aq in the first column. . .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 gives the shortest form of its county, other stations gives 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 INITIAL_EXCHANGE). . .TP .BI INITIAL_EXCHANGE= exchanges.txt 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 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 .B QTC_CAP_CALLS= list_of_qtc_capable_callsigns.txt If you want to help yourself to indicate, the station is a QTC capable, you can see it on your bandmap or worked window. Put the callsign of stations to a file, one callsign per line, and put it to as 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 Tlf 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, Tlf 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, Tlf will ignore this restrictions. . .TP .BI CONTINENTLIST= "comma separated list of continents" Valid values are: SA, NA, EU, AF, AS and OC. . .TP .BI CONTINENT_LIST_POINTS= d 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 BANDWEIGHT_POINTS=160:3,80:2,40:1,20:1,15:1,10:2 .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 BANDWEIGHT_MULTIS=80:4,40:3,20:2,15:2,10:2 .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 on another contest too) the multipliers are the different countries. But there is an execption: in case of some country the different prefix number is a different multiplier. On WAEDC these countries are: W, VE, VK, ZL, ZS, JA, PY and RA8/RA9 and RAØ. Now with this option, you can list the affected countries: PFX_NUM_MULTIS=W,VE,VK,ZL,ZS,JA,PY,UA9. Then Tlf will reads these items, makes a lookup in a countrylist for a country code, and that code will be used. So, if you placed UA9 prefix, then Tlf will looks the UA9, which is Asiatic Russia. If you made a QSO with a station from Asiatic Russia, then the PFX number will evaulated with a new multiplier - but Europien Russia will not. . .TP .B EXCLUDE_MULTILIST Some contest has a special multipliers list, which is easier to write with a substract of two predefined set. For example, the main set could be COUNTRY_MULT, and you need to substract from that just a few countries, than SAC test uses (then the scandinavian stations aren't multiplier for each other). In that case you can use this config: .BI COUNTRY_MULT COUNTRYLIST=sac:JW,JX,LA,OF1,OF0,OJ1,OJ0,OX,OW,OZ,SM,TF EXCLUDE_MULTILIST=COUNTRYLIST . Another useful example at WAEDC RTTY contest: then all stations can work with each others, 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: .BI CONTINENTLIST=EU COUNTRY_MULT EXCLUDE_MULTILIST=CONTINENTLIST . Now all country are multi, except the EU stations. In this contest the non-EU stations can use this config: .BI CONTINENTLIST=SA,NA,AF,AS,OC COUNTRY_MULT EXCLUDE_MULTILIST=CONTINENTLIST . 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, Tlf 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, Tlf will add the callsign from callsign field, if its length is 3 character at least. Use 'S'kip dupes in BANDMAP settings to control if it should also grab dupes. . .TP .B SPRINTMODE If set, Tlf will automatically switch its mode between LOG and S&P after every QSO. . .TP .B FLDIGI If you work in 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 http://localhost:7362/RPC2 . If you run fldigi's xmlrpc server on an different port use .BI FLDIGI=http://localhost:7362/RPC2 . .TP .B MINITEST[=NNN] 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 min. sections in an 60 min hour). Any station can be worked once in each of the time sections without counting as dupe. The default length of the sections is 600s (10min) 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: UNIQUE_CALL_MULTI=BAND . The argument tells Tlf, how to score the callsigns as multiplier: ALL means the callsign is a multiplier, uindependet of band. BAND means the callsign counts as multiplier on different bands. . .SH FILES . \fB@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 \fB@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. . .P \fB@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. . .P \fB@prefix@/share/@PACKAGE@/mastercalls\fR contains a flat ASCII database of known contest callsigns. . .P \fBsection files\fR contain a flat ASCII database of multpliers like states, sections, provinces, districts, names, ages, etc. Some are available at .UR http://www.iae.nl/users/reinc/TLF-0.2.html the @PACKAGE_NAME@ project download site .UE . They are invoked by including .BI MULT_LIST= section_file_name 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 . . .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.3.0/scripts/0000755000175000017520000000000013046414414010773 500000000000000tlf-1.3.0/scripts/Makefile.in0000644000175000017520000003555513046414406012776 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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: $(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.3.0/scripts/soundlog0000755000175000017520000000032413014014714012464 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.3.0/scripts/Makefile.am0000644000175000017520000000015713014014714012744 00000000000000SCRIPT_FILES = soundlog play_vk bin_SCRIPTS = $(SCRIPT_FILES) EXTRA_DIST = $(SCRIPT_FILES) CLEANFILES = *~ tlf-1.3.0/scripts/play_vk0000755000175000017520000000206013014014714012276 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.3.0/configure.ac0000644000175000017520000001246613046414310011516 00000000000000# Process this file with autoconf to produce a configure script. AC_INIT([Tlf], [1.3.0], [tlf-devel@nongnu.org], [tlf], [https://github.com/Tlf/tlf]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([src/tlf.h]) AC_CONFIG_MACRO_DIR([macros]) AC_CONFIG_HEADERS([config.h]) dnl Clean compilation output makes compiler warnings more visible m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # Checks for programs. AC_PROG_CC 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 # 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 if we want to link the Hamradio control libraries (hamlib) AC_MSG_CHECKING([whether to build Hamlib support]) AC_ARG_ENABLE([hamlib], [AS_HELP_STRING([--enable-hamlib], [Add support for Ham Radio Control Libraries])], [wanthamlib=true], [wanthamlib=false]) AS_IF([test "x$wanthamlib" = xtrue], [ dnl Look for hamlib AC_MSG_RESULT([yes]) 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 else Hamlib not wanted AC_MSG_RESULT([no])]) 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]) AC_CONFIG_FILES([Makefile doc/Makefile rules/Makefile scripts/Makefile share/Makefile src/Makefile tlf.1]) AC_OUTPUT echo \ "---------------------------------------------------------------------- ${PACKAGE_NAME} Version ${PACKAGE_VERSION} configuration: Prefix ${prefix} Preprocessor ${CPP} ${CPPFLAGS} C Compiler ${CC} ${CFLAGS} Package features: With Hamlib $wanthamlib With XML RPC $wantfldigixmlrpc -----------------------------------------------------------------------" tlf-1.3.0/install-sh0000755000175000017520000003452313014014733011232 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # 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; won't work # if double slashes aren't ignored. 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 dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi 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. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/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. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 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=$dstdir/_inst.$$_ rmtmp=$dstdir/_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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tlf-1.3.0/COPYING0000644000175000017520000004311013014014714010250 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.3.0/share/0000755000175000017520000000000013046414414010406 500000000000000tlf-1.3.0/share/Makefile.in0000644000175000017520000003447413046414406012410 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ HAMLIB_CFLAGS = @HAMLIB_CFLAGS@ HAMLIB_LIBS = @HAMLIB_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBM_LIB = @LIBM_LIB@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXMLRPC_CLIENT_LIB = @LIBXMLRPC_CLIENT_LIB@ LIBXMLRPC_LIB = @LIBXMLRPC_LIB@ LIBXMLRPC_UTIL_LIB = @LIBXMLRPC_UTIL_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_LIBS = @PANEL_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TLF_FILES = cabrillo.fmt callmaster cty.dat logcfg.dat arrl10m_mults \ arrldx_mults arrlsections ea_sections paccmults spdxmults \ ssamults help.txt darcmults tlfdir = $(pkgdatadir) tlf_DATA = $(TLF_FILES) EXTRA_DIST = $(TLF_FILES) CLEANFILES = *~ all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu share/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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: $(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.3.0/share/logcfg.dat0000644000175000017520000000765213046414310012266 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 # # # ################################# # addnode only OTHER nodes !! # #ADDNODE=10.0.0.115 #ADDNODE=192.168.1.2 # THISNODE=A # LAN_DEBUG # ################################# # # # KEYERPORT # # # ################################# # NETKEYER #NETKEYERPORT=6789 #NETKEYERHOST=127.0.0.1 # ################################# # # # KEYERPARAMETERS # # # ################################# #---speed (6 ... 60 wpm) CWSPEED=30 #---weight (-5 ... 5 ms) WEIGHT=1 #---cq delay (in 0,5 s) CQDELAY=10 #---txdelay (ms) TXDELAY=2 #---sidetone (200...800, 0 = mute) CWTONE=800 ################################# # # # PACKET INTERFACE # # # ################################# # Cluster: PI4TUE (Eindhoven) #TELNETHOST=131.155.192.179 #TELNETPORT=8000 # automatic login ############### #CLUSTERLOGIN=yourcall # write log to disk ############# #CLUSTER_LOG # # use tnc instead of telnet ##### #TNCPORT=/dev/ttyS0 #TNCPORT=/dev/ttyUSB1 #TNCSPEED=2400 # # get clusterinfo from network ## #FIFO_INTERFACE # ################################# # # # RADIO CONTROL # # (comment out if not present) # # Rigmodel = Hamlib index, here # # for ten tec OMNI VI # ################################# # #RADIO_CONTROL #RIGMODEL=351 #RIGSPEED=2400 #RIGPORT=/dev/ttyS0 #RIGPORT=/dev/ttyUSB2 #RIGPTT # #SSBMODE # #RIT_CLEAR # #SHOW_FREQUENCY # ################################# # # # INFORMATION WINDOWS # # # ################################# # #CLUSTER BANDMAP=S,900 # skipdupes, 900s livetime #FILTER # SCOREWINDOW # CHECKWINDOW ################################# # # # CHECK PARTIAL FUNCTION # # # ################################# # PARTIALS #USEPARTIALS # ################################# # # # CONDX (info for muf calc.) # # # ################################# # SUNSPOTS=30 SFI=100 # ################################# # # # Misc commands # # # ################################# # No automatic 'qso before msg' NOB4 # # No automatic cq #NOAUTOCQ # # Left/right arrows don't change band... #NO_BANDSWITCH_ARROWKEYS # # Marker file for Xplanet MARKERS=tlfmarkers # #############END################# tlf-1.3.0/share/Makefile.am0000644000175000017520000000040513014014714012353 00000000000000TLF_FILES = cabrillo.fmt callmaster cty.dat logcfg.dat arrl10m_mults \ arrldx_mults arrlsections ea_sections paccmults spdxmults \ ssamults help.txt darcmults tlfdir = $(pkgdatadir) tlf_DATA = $(TLF_FILES) EXTRA_DIST = $(TLF_FILES) CLEANFILES = *~ tlf-1.3.0/share/paccmults0000644000175000017520000000005113014014714012232 00000000000000DR FL FR GD GR LB NB NH OV UT ZH ZL -end-tlf-1.3.0/share/cty.dat0000644000175000017520000022715613046414310011627 00000000000000Sov Mil Order of Malta: 15: 28: EU: 41.90: -12.43: -1.0: 1A: 1A; Spratly Islands: 26: 50: AS: 9.88: -114.23: -8.0: 1S: 9M0,BM9S,BN9S,BO9S,BP9S,BQ9S,BU9S,BV9S,BW9S,BX9S; Monaco: 14: 27: EU: 43.73: -7.40: -1.0: 3A: 3A; Agalega & St. Brandon: 39: 53: AF: -10.45: -56.67: -4.0: 3B6: 3B6,3B7; Mauritius: 39: 53: AF: -20.35: -57.50: -4.0: 3B8: 3B8; Rodriguez Island: 39: 53: AF: -19.70: -63.42: -4.0: 3B9: 3B9; Equatorial Guinea: 36: 47: AF: 1.70: -10.33: -1.0: 3C: 3C; Annobon Island: 36: 52: AF: -1.43: -5.62: -1.0: 3C0: 3C0; Fiji: 32: 56: OC: -17.78: -177.92: -12.0: 3D2: 3D2; Conway Reef: 32: 56: OC: -22.00: -175.00: -12.0: 3D2/c: 3D2C; Rotuma Island: 32: 56: OC: -12.48: -177.08: -12.0: 3D2/r: 3D2RI; Swaziland: 38: 57: AF: -26.65: -31.48: -2.0: 3DA: 3DA; Tunisia: 33: 37: AF: 35.40: -9.32: -1.0: 3V: 3V,TS; 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: 4U1A,4U1VIC; 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,9M4CRB,9M4CSR; 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]; Nauru: 31: 65: OC: -0.52: -166.92: -12.0: C2: C2; Andorra: 14: 27: EU: 42.58: -1.62: -1.0: C3: C3; The Gambia: 35: 46: AF: 13.40: 16.38: 0.0: C5: C5; Bahamas: 08: 11: NA: 24.25: 76.00: 5.0: C6: C6; Mozambique: 37: 53: AF: -18.25: -35.00: -2.0: C9: C8,C9; Chile: 12: 14: SA: -30.00: 71.00: 4.0: CE: 3G,CA,CB,CC,CD,CE,XQ,XR,3G7[16],3G8[16],CA7[16],CA8[16],CB7[16],CB8[16], CC7[16],CC8[16],CD7[16],CD8[16],CE7[16],CE8[16],XQ7[16],XQ8[16],XR7[16], XR8[16]; San Felix & San Ambrosio: 12: 14: SA: -26.28: 80.07: 4.0: CE0X: 3G0X,CA0X,CB0X,CC0X,CD0X,CE0X,XQ0X,XR0X; Easter Island: 12: 63: SA: -27.10: 109.37: 6.0: CE0Y: 3G0,CA0,CB0,CC0,CD0,CE0,XQ0,XR0; Juan Fernandez Islands: 12: 14: SA: -33.60: 78.85: 4.0: CE0Z: 3G0Z,CA0Z,CB0Z,CC0Z,CD0Z,CE0I,CE0Z,XQ0Z,XR0Z; Antarctica: 13: 74: SA: -90.00: 0.00: 0.0: CE9: 3Y[73],AX0(39)[69],AY1Z[73],AY2Z[73],AY3Z[73],AY4Z[73],AY5Z[73],AY6Z[73], AY7Z[73],AY8Z[73],AY9Z[73],FT0Y(30)[70],FT1Y(30)[70],FT2Y(30)[70], FT4Y(30)[70],FT5Y(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], 8J60JARE(39)[67],8T2BH(39)[69],DP0GVN(38)[67],DP1POL(38)[67], KC4/N2TA(38)[67],KC4AAA(39),LU6ECW/Z[73],RI1ANA(39)[69], RI1ANC(29)[70],RI1AND(38)[67],RI1ANP(39)[69],RI1ANR(38)[67], RI1ANZ(39)[69],VP8DMH[73],VP8DPJ[73],VU3BPZ/P(39)[69],VU3LBP(39)[69], VU3LBP/P(39)[69]; Cuba: 08: 11: NA: 21.50: 80.00: 5.0: CM: CL,CM,CO,T4; Morocco: 33: 37: AF: 32.00: 5.00: 0.0: CN: 5C,5D,5E,5F,5G,CN; Bolivia: 10: 12: SA: -17.00: 65.00: 4.0: CP: CP,CP2[14],CP3[14],CP4[14],CP5[14],CP6[14],CP7[14]; Portugal: 14: 37: EU: 39.50: 8.00: 0.0: CT: CQ,CR,CS,CT; Madeira Islands: 33: 36: AF: 32.75: 16.95: 0.0: CT3: CQ2,CQ3,CQ9,CR3,CR9,CS3,CS9,CT3,CT9; Azores: 14: 36: EU: 38.70: 27.23: 1.0: CU: CQ1,CQ8,CR1,CR2,CR8,CS4,CS8,CT8,CU; Uruguay: 13: 14: SA: -33.00: 56.00: 3.0: CX: CV,CW,CX; Sable Island: 05: 09: NA: 43.93: 59.90: 4.0: CY0: CY0; St. Paul Island: 05: 09: NA: 47.00: 60.00: 4.0: CY9: CY9; Angola: 36: 52: AF: -12.50: -18.50: -1.0: D2: D2,D3; Cape Verde: 35: 46: AF: 16.00: 24.00: 1.0: D4: D4; Comoros: 39: 53: AF: -11.63: -43.30: -3.0: D6: D6; Fed. Rep. of Germany: 14: 28: EU: 51.00: -10.00: -1.0: DL: DA,DB,DC,DD,DE,DF,DG,DH,DI,DJ,DK,DL,DM,DN,DO,DP,DQ,DR; Philippines: 27: 50: OC: 13.00: -122.00: -8.0: DU: 4D,4E,4F,4G,4H,4I,DU,DV,DW,DX,DY,DZ; Eritrea: 37: 48: AF: 15.00: -39.00: -3.0: E3: E3; Palestine: 20: 39: AS: 31.28: -34.27: -2.0: E4: E4; North Cook Islands: 32: 62: OC: -10.02: 161.08: 10.0: E5/n: E51PT,E51AMF,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,EA1RCI/YOA,EA3HSD/P,EA5CC/P,EA5IKT/P; Balearic Islands: 14: 37: EU: 39.60: -2.95: -1.0: EA6: AM6,AN6,AO6,EA6,EB6,EC6,ED6,EE6,EF6,EG6,EH6,EA5EZ/6,EA5EZ/P,EA5IKT/6; Canary Islands: 33: 36: AF: 28.10: 15.40: 0.0: EA8: AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8; Ceuta & Melilla: 33: 37: AF: 35.90: 5.27: -1.0: EA9: AM9,AN9,AO9,EA9,EB9,EC9,ED9,EE9,EF9,EG9,EH9,EA3EGB/9,EA5RKB/9,EB9PH/P; 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,ET3AA/YOTA; 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; 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; 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: TX5T; 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: FO5QS; St. Pierre & Miquelon: 05: 09: NA: 46.77: 56.20: 3.0: FP: FP,TO200SPM; Reunion Island: 39: 53: AF: -21.12: -55.48: -4.0: FR: FR; St. Martin: 08: 11: NA: 18.08: 63.03: 4.0: FS: FS; Glorioso Islands: 39: 53: AF: -11.55: -47.28: -4.0: FT/g: FT0G,FT1G,FT2G,FT3G,FT4G,FT5G,FT6G,FT7G,FT8G,FT9G; Juan de Nova, Europa: 39: 53: AF: -17.05: -42.72: -3.0: FT/j: FT0E,FT0J,FT1E,FT1J,FT2E,FT2J,FT3E,FT3J,FT4E,FT4J,FT6E,FT6J,FT7E,FT7J, FT8E,FT8J,FT9E,FT9J; Tromelin Island: 39: 53: AF: -15.88: -54.50: -4.0: FT/t: FT0T,FT1T,FT2T,FT3T,FT4T,FT5T,FT6T,FT7T,FT8T,FT9T; Crozet Island: 39: 68: AF: -46.42: -51.75: -5.0: FT/w: FT0W,FT4W,FT5W,FT8W; Kerguelen Islands: 39: 68: AF: -49.00: -69.27: -5.0: FT/x: FT0X,FT2X,FT4X,FT5X,FT8X; Amsterdam & St. Paul Is.: 39: 68: AF: -37.85: -77.53: -5.0: FT/z: FT0Z,FT1Z,FT2Z,FT4Z,FT5Z,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,TO2A; England: 14: 27: EU: 52.77: 1.47: 0.0: G: 2E,G,M; Isle of Man: 14: 27: EU: 54.20: 4.53: 0.0: GD: 2D,GD,GT,MD,MT; Northern Ireland: 14: 27: EU: 54.73: 6.68: 0.0: GI: 2I,GI,GN,MI,MN,GB0GPF,GB3NGI; Jersey: 14: 27: EU: 49.22: 2.18: 0.0: GJ: 2J,GH,GJ,MH,MJ; Shetland Islands: 14: 27: EU: 60.50: 1.50: 0.0: *GM/s: GZ,MZ,2M0BDR,2M0BDT,2M0CPN,2M0GFC,2M0SEG,2M0SPX,2M0ZET,GB3LER, GB3LER/B,GB4LER,GM0AVR,GM0CXQ,GM0EKM,GM0GFL,GM0ILB,GM0JDB,GM1FGN, GM1KKI,GM1ZNR,GM3WHT,GM3ZET,GM4IPK,GM4JPI,GM4LBE,GM4LER,GM4PXG, GM4SLV,GM4SSA,GM4WXQ,GM4ZHL,GM6RQW,GM6YQA,GM7AFE,GM7GWW,GM8LNH, GM8MMA,GM8YEC,GS3ZET,MM0LSM,MM0NQY,MM0XAU,MM0ZAL,MM0ZCG,MM0ZRC, MM1FJM,MM3VQO,MM5PSL,MM5YLO,MM6BDU,MM6BZQ,MM6IKB,MM6IMB,MM6MFA, MM6PTE,MM6SJK,MM6YLO,MM6ZBG,MM6ZDW,MM8A,MS0ZCG,MS0ZET; Scotland: 14: 27: EU: 56.82: 4.18: 0.0: GM: 2A,2M,GA,GM,GS,GZ,MA,MM,MS,MZ,GB2ELH,GB2GNL,GB2KW,GB2M,GB2OWM,GB2ZE, GB3ANG,GB3LER,GB3LER/B,GB4LER; 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,GB0MPA,GB0WHR,GB100CSW,GB2GGM,GB2IMD,GB4MD,GB4MDI, GB4SDD,GB75ATC; Solomon Islands: 28: 51: OC: -9.00: -160.00: -11.0: H4: H4; Temotu Province: 32: 51: OC: -10.72: -165.80: -11.0: H40: H40; Hungary: 15: 28: EU: 47.12: -19.28: -1.0: HA: HA,HG; Switzerland: 14: 28: EU: 46.87: -8.12: -1.0: HB: HB,HE; Liechtenstein: 14: 28: EU: 47.13: -9.57: -1.0: HB0: HB0,HE0; Ecuador: 10: 12: SA: -1.40: 78.40: 5.0: HC: HC,HD; Galapagos Islands: 10: 12: SA: -0.78: 91.03: 6.0: HC8: HC8,HD8; Haiti: 08: 11: NA: 19.02: 72.18: 5.0: HH: 4V,HH; Dominican Republic: 08: 11: NA: 19.13: 70.68: 4.0: HI: HI; Colombia: 09: 12: SA: 5.00: 74.00: 5.0: HK: 5J,5K,HJ,HK; San Andres & Providencia: 07: 11: NA: 12.55: 81.72: 5.0: HK0/a: 5J0,5K0,HJ0,HK0; Malpelo Island: 09: 12: SA: 3.98: 81.58: 5.0: HK0/m: HJ0M,HK0M,HK0TU; Republic of Korea: 25: 44: AS: 36.23: -127.90: -9.0: HL: 6K,6L,6M,6N,D7,D8,D9,DS,DT,HL,KL9K; Panama: 07: 11: NA: 9.00: 80.00: 5.0: HP: 3E,3F,H3,H8,H9,HO,HP; Honduras: 07: 11: NA: 15.00: 87.00: 6.0: HR: HQ,HR; Thailand: 26: 49: AS: 12.60: -99.70: -7.0: HS: E2,HS; Vatican City: 15: 28: EU: 41.90: -12.47: -1.0: HV: HV; Saudi Arabia: 21: 39: AS: 24.20: -43.83: -3.0: HZ: 7Z,8Z,HZ; Italy: 15: 28: EU: 42.82: -12.58: -1.0: I: I,4U0WFP,4U1GSC,4U20B,4U5F,4U7F,IZ1CLA/N; 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,II0EUDX,II0ICH,II0IDP,II0SB, II3EUDX,IQ0AG,IQ0AG/P,IQ0AH,IQ0AI,IQ0AK,IQ0AK/P,IQ0AL,IQ0AL/P, IQ0AM,IQ0AM/P,IQ0EH,IQ0HO,IQ0ID,IQ0NU,IQ0NU/P,IQ0NV,IQ0NV/P, IQ0OG,IQ0QP,IQ0SS,IQ0XP,IR0EO,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; Djibouti: 37: 48: AF: 11.75: -42.35: -3.0: J2: J2; Grenada: 08: 11: NA: 12.13: 61.68: 4.0: J3: J3; Guinea-Bissau: 35: 46: AF: 12.02: 14.80: 0.0: J5: J5; St. Lucia: 08: 11: NA: 13.87: 61.00: 4.0: J6: J6; Dominica: 08: 11: NA: 15.43: 61.35: 4.0: J7: J7; St. Vincent: 08: 11: NA: 13.23: 61.20: 4.0: J8: J8; Japan: 25: 45: AS: 36.40: -138.38: -9.0: JA: 7J,7K,7L,7M,7N,8J,8K,8L,8M,8N,JA,JE,JF,JG,JH,JI,JJ,JK,JL,JM,JN,JO,JP,JQ, JR,JS; Minami Torishima: 27: 90: OC: 24.28: -153.97: -10.0: JD/m: JD1YAA,JG8NQJ/JD1; Ogasawara: 27: 45: AS: 27.05: -142.20: -9.0: JD/o: JD1; Mongolia: 23: 32: AS: 46.77: -102.17: -7.0: JT: JT,JU,JV,JT2[33],JT3[33],JU2[33],JU3[33],JV2[33],JV3[33]; Svalbard: 40: 18: EU: 78.00: -16.00: -1.0: JW: JW; Bear Island: 40: 18: EU: 74.43: -19.08: -1.0: *JW/b: JW9JKA; Jan Mayen: 40: 18: EU: 71.05: 8.28: 1.0: JX: JX; Jordan: 20: 39: AS: 31.18: -36.42: -2.0: JY: JY; United States: 05: 08: NA: 37.53: 91.67: 5.0: K: AA,AB,AC,AD,AE,AF,AG,AI,AJ,AK,K,N,W,4U1WB(5)[8],AA2IL(3)[6], AA4DD(4)[8],AA4NU(4)[8],AA4R(4)[8],AB4B(4)[8],AB4GG(4)[8], AB4IQ(4)[8],AB4KJ(4)[8],AB5OR(4)[8],AB5ZA(4)[6],AC4CA(4)[7], AC4G(4)[8],AC4YD(4)[8],AC6ZM(4)[8],AC7P(4)[7],AC8Y(5)[8],AD1C(4)[7], AD4EB(4)[8],AD8J(5)[8],AE7AP(4)[6],AG1RL(3)[6],AG4M(4)[8], AG4W(4)[8],AG5Z(4)[8],AH0U(3)[6],AH6AX(5)[8],AH7T(3)[6],AI0M(4)[8], AI1K(3)[6],AI8F(5)[8],AI9K(4)[7],AJ4A(4)[8],AJ4F(4)[7],AJ7G(5)[8], AK9D(4)[7],AL4B(4)[8],AL5M(4)[7],K0ACP(4)[8],K0AU(3)[6],K0BAK(5)[8], K0DQ(5)[8],K0DTJ(3)[6],K0EJ(4)[8],K0IP(3)[6],K0JJ(3)[6],K0LUZ(5)[8], K0MP(3)[6],K0NW(3)[6],K0PJ(4)[8],K0SDW(3)[6],K0SN(4)[6],K0TQ(4)[8], K0ZR(5)[8],K1DC(4)[8],K1DW(4)[7],K1GJQ(3)[6],K1GU(4)[8],K1KD(4)[7], K1LT(4)[8],K1USA(4)[7],K2DRH(4)[7],K2DSW(4)[7],K2GMY(3)[6], K2PM(4)[8],K2PO(3)[6],K2RD(3)[6],K2UR(4)[8],K2VV(4)[7],K3DMG(4)[8], K3EST(3)[6],K3GP(4)[8],K3IE(4)[8],K3JWI(4)[8],K3PA(4)[7],K3WA(4)[8], K3WT(4)[7],K3WYC(3)[6],K3YP(4)[8],K4AB(4)[8],K4AFE(4)[8], K4AMC(4)[8],K4BX(4)[8],K4CMS(4)[8],K4CWW(4)[8],K4DG(4)[7], K4DXV(4)[8],K4EDI(4)[8],K4EZS(4)[8],K4FT(4)[8],K4FXN(4)[8], K4GYD(4)[8],K4HAL(4)[8],K4IE(4)[8],K4IQJ(4)[8],K4IU(4)[7], K4LTA(4)[8],K4OAQ(4)[8],K4OWR(4)[8],K4RO(4)[8],K4SPO(4)[8], K4TCG(4)[8],K4UU(4)[8],K4WI(4)[8],K4WW(4)[8],K4XU(3)[6],K4YJ(4)[8], K4ZGB(4)[8],K5AUP(5)[8],K5EK(5)[8],K5GDX(4)[8],K5KG(5)[8], K5OA(3)[6],K5RR(3)[6],K5TRI(3)[6],K5VIP(5)[8],K5WK(4)[8],K5ZD(5)[8], K5ZM(3)[6],K6ND(5)[8],K6XT(4)[7],K6ZB(4)[7],K7ABV(4)[6],K7BG(4)[6], K7BV(5)[8],K7DR(4)[8],K7GM(5)[8],K7IA(4)[7],K7KAR(4)[7],K7LTV(4)[7], K7MOA(5)[8],K7OM(5)[8],K7QA(4)[6],K7SCX(4)[7],K7SV(5)[8],K7TD(4)[7], K7VK(4)[6],K7ZYV(4)[8],K8AC(5)[8],K8ARY(5)[8],K8CN(5)[8],K8IA(3)[6], K8JQ(5)[8],K8LS(4)[7],K8NYG(5)[8],K8PO(5)[8],K8SYH(5)[8],K8TE(4)[7], K8WDX(5)[8],K8YC(5)[8],K9CQ(4)[7],K9DR(4)[7],K9DU(4)[7],K9ES(5)[8], K9HXO(5)[8],K9JF(3)[6],K9JM(3)[6],K9JWV(3)[6],K9MWM(4)[7], K9OM(5)[8],K9OZ(4)[7],K9QJS(3)[6],K9RS(5)[8],K9SG(3)[6],K9WA(4)[7], K9WZB(3)[6],K9YC(3)[6],KA1KIX(4)[8],KA3DRR(3)[6],KA3MTT(4)[8], KA4GAV(4)[7],KA5DWI(3)[6],KA7PNH(4)[7],KA8HDE(4)[7],KA8Q(5)[8], KA9A(3)[6],KA9VVQ(4)[7],KB5EZ(4)[8],KB5JC(5)[8],KB7FSC(4)[7], KB7H(4)[8],KB7Q(4)[6],KB8KMH(5)[8],KB8V(5)[8],KB9S(4)[7], KC2LM(4)[7],KC4HW(4)[8],KC4SAW(4)[8],KC4TEO(4)[8],KC4WQ(4)[8], KC7QY(4)[7],KD4POJ(4)[7],KD4SN(4)[8],KD5M(5)[8],KD5UVV(4)[8], KD9ST(4)[7],KE0L(4)[8],KE1B(3)[6],KE2VB(3)[6],KE4ETY(4)[8], KE4KE(4)[7],KE4KMG(4)[8],KE4KY(4)[8],KE4YVD(4)[8],KE5PRL(4)[8], KE7X(4)[6],KF2T(3)[6],KG0F(3)[6],KG4CUY(4)[8],KG6MC(5)[8], KH2D(5)[8],KH2N(5)[8],KH6M(5)[8],KH6VM(3)[6],KI6DY(4)[7], KI7MT(4)[6],KJ4AOM(4)[8],KJ4IWZ(4)[8],KJ4KKD(4)[8],KJ4LTA(4)[8], KK4JSJ(4)[8],KK4TE(4)[8],KK5OQ(4)[8],KK6L(5)[8],KK6MC(4)[7], KK7JS(4)[7],KK9A(5)[8],KL0MP(5)[8],KL7IKV(3)[6],KL7JIU(4)[7], KL7QW(4)[7],KL8X(4)[8],KM4DR(4)[7],KM4FO(4)[8],KM4FRM(4)[8], KM4JA(4)[8],KM9R(3)[6],KN4JX(4)[7],KN8KAZ(4)[7],KO0Z(4)[8], KO4OL(4)[8],KO6UW(4)[6],KO8SCA(5)[8],KO9V(5)[8],KP2F(4)[8], KP4KD(5)[8],KR4F(4)[8],KS4L(4)[8],KS4X(4)[8],KS7T(4)[6],KS9A(4)[7], KT3M(4)[7],KT4RR(4)[8],KU1CW(3)[6],KU4A(4)[8],KU8E(5)[8],KV1E(4)[7], KV8S(4)[7],KW4J(4)[8],KW7D(4)[7],KW7Q(4)[7],KX2P(4)[7],KX4X(4)[8], KY4F(4)[8],KY4XX(4)[8],KY6AA(4)[8],KZ1W(3)[6],KZ2V(3)[6],N0EF(4)[6], N0FCD(4)[8],N0KQ(3)[6],N0KVN(3)[6],N0QQ(5)[8],N1CC(4)[7],N1JM(3)[6], N1KW(4)[8],N2BJ(4)[8],N2CJN(3)[6],N2IC(4)[7],N2NS(3)[6],N2TSQ(4)[8], N2UT(4)[7],N2WN(4)[8],N3AIU(3)[6],N3BB(4)[7],N3BUO(4)[7], N3KCJ(3)[6],N3RC(3)[6],N3XRU(3)[6],N3ZZ(3)[6],N4AB(4)[8], N4ARO(4)[8],N4AU(4)[8],N4BCB(4)[8],N4BCD(4)[8],N4DW(4)[8], N4HAI(4)[8],N4IJ(4)[7],N4JF(4)[8],N4JRG(4)[8],N4KG(4)[8],N4KH(4)[8], N4NA(4)[8],N4NM(4)[8],N4NO(4)[8],N4NR(4)[8],N4OGW(4)[8],N4QS(4)[8], N4TZ(4)[8],N4UC(4)[8],N4UW(4)[8],N4VI(4)[7],N4VV(4)[8],N4WE(4)[8], N4XH(4)[8],N4ZI(4)[8],N4ZZ(4)[8],N5CR(3)[6],N5CW(4)[8],N5DX(5)[8], N5PU(4)[8],N5RP(4)[8],N5SMQ(5)[8],N5TF(4)[8],N5TOO(5)[8],N5YT(4)[8], N5ZO(3)[6],N6AR(5)[8],N6FS(4)[8],N7DF(4)[7],N7DR(4)[7],N7DXT(4)[6], N7FLT(4)[6],N7FUL(4)[7],N7GVV(4)[8],N7IP(4)[6],N7IV(4)[7], N7MZW(4)[7],N7NG(4)[7],N7US(4)[8],N7WY(4)[7],N8AID(5)[8],N8CL(5)[8], N8II(5)[8],N8KSG(5)[8],N8NA(5)[8],N8OO(4)[7],N8OQ(5)[8],N8PR(5)[8], N8TUT(4)[7],N8WXQ(5)[8],N9CIQ(4)[7],N9DFD(5)[8],N9JF(4)[7], N9NA(3)[6],N9NB(5)[8],N9NC(5)[8],N9NM(4)[7],N9RV(4)[6],N9SB(4)[7], N9TX(4)[7],N9UY(5)[8],N9VPV(4)[7],NA4C(4)[8],NA4K(4)[8],NA5NN(4)[8], NA9RB(4)[7],NB4M(4)[8],ND2T(3)[6],ND4X(4)[8],ND4Y(4)[8],NJ8J(5)[8], NJ8M(4)[7],NK4P(4)[8],NK8Q(5)[8],NL7CQ(4)[7],NL7QC(4)[7], NL7XM(5)[8],NN4MM(4)[8],NN4SA(4)[8],NN7A(4)[7],NO9E(5)[8], NP2GG(5)[8],NQ6N(4)[8],NR7DX(4)[6],NS4X(4)[8],NU4N(4)[8],NU4X(4)[8], NV4B(4)[8],NW8U(5)[8],NX1P(3)[6],NY6DX(5)[8],W0BR(5)[8],W0CN(5)[8], W0JX(4)[8],W0PAN(3)[6],W0PV(5)[8],W0QQG(5)[8],W0RIC(3)[6], W0YK(3)[6],W0ZP(4)[8],W1BO(4)[8],W1DGL(3)[6],W1GKT(4)[8], W1JCW(4)[7],W1NN(4)[8],W1PR(3)[6],W1RH(3)[6],W1SRD(3)[6], W1WMU(4)[7],W1ZD(3)[6],W2GS(4)[7],W2UP(4)[7],W2VJN(3)[6], W3DQN(4)[7],W3HDH(4)[8],W3HKK(4)[8],W4BCG(4)[8],W4BK(4)[8], W4CV(4)[8],W4DAN(4)[8],W4DVG(4)[8],W4EEH(4)[8],W4EF(3)[6], W4ER(4)[8],W4GKM(4)[8],W4GZX(4)[8],W4HOD(4)[8],W4II(4)[8], W4JSI(4)[8],W4KW(4)[8],W4LC(4)[8],W4NBS(4)[8],W4NI(4)[8],W4NZ(4)[8], W4TTM(4)[8],W4TZX(4)[8],W4UAL(4)[8],W4UAT(3)[6],W4UT(4)[8], W4ZN(4)[8],W5BEN(4)[8],W5JR(5)[8],W5MX(4)[8],W5NZ(4)[8],W5PET(4)[8], W5THT(4)[8],W5VE(5)[8],W5XB(5)[8],W6GMT(4)[7],W6IHG(5)[8], W6KGP(4)[7],W6LFB(4)[7],W6NF(4)[7],W6NWS(5)[8],W6RLL(3)[7], W6UB(4)[8],W6XR(5)[8],W7DO(5)[8],W7FW(4)[8],W7HJ(5)[8],W7IWW(4)[7], W7KAM(4)[7],W7KF(4)[6],W7RY(4)[7],W7SE(4)[7],W8AKS(5)[8],W8FJ(5)[8], W8FN(4)[7],W8HAP(5)[8],W8KA(3)[6],W8LYJ(5)[8],W8MHW(4)[7], W8NOR(3)[6],W8OHT(5)[8],W8OV(4)[7],W8TK(3)[6],W8UV(5)[8], W8WEJ(5)[8],W8WOM(3)[6],W8ZA(5)[8],W9CF(3)[6],W9DCA(4)[7], W9JA(4)[7],W9JEF(4)[7],W9LHG(4)[7],W9MAF(4)[7],W9PL(3)[6], W9UK(5)[8],WA0WWW(3)[6],WA1FCN(4)[8],WA1UJU(4)[8],WA2BFW(3)[6], WA2VYA(4)[7],WA3C(4)[8],WA4JA(4)[8],WA4USA(4)[8],WA5LOU(4)[8], WA5POK(4)[8],WA5VGI(3)[6],WA8KAN(5)[8],WA8OJR(5)[8],WA8QYJ(5)[8], WA8WZG(3)[6],WA8ZBT(4)[7],WB0POH(5)[8],WB3JFS(3)[6],WB4IT(4)[8], WB4YDL(4)[8],WB4YDY(4)[8],WB5NHL(5)[8],WB7S(4)[7],WB8BPU(5)[8], WB8CQV(5)[8],WB8IMY(5)[8],WB8YQJ(3)[6],WB8YYY(5)[8],WB9KPT(4)[7], WB9QAF(4)[7],WC1X(3)[6],WC7S(4)[7],WD4OHD(4)[8],WD5CCA(4)[8], WD5F(5)[8],WE5DX(4)[8],WE6EZ(4)[7],WF4U(3)[6],WF7T(4)[8], WH2ACT(4)[7],WH6AQ(5)[8],WH6E(4)[8],WH6LE(5)[8],WH6YH(5)[8], WH7R(4)[7],WJ9B(3)[6],WK4AA(4)[8],WK7G(4)[7],WL7OU(4)[7], WL7YQ(4)[7],WM5DX(4)[8],WP2AA(5)[8],WP3ME(5)[8],WP3Q(5)[8], WQ5L(4)[8],WQ9T(4)[7],WR3O(4)[8],WR5J(3)[6],WS6K(4)[8],WS6X(5)[8], WS7X(4)[7],WS9M(5)[8],WT2P(4)[8],WT5L(5)[8],WU5E(4)[8],WW4R(4)[8], WX5S(3)[6],WY5I(5)[8],WY7I(4)[8],WY7SS(4)[7],WZ4F(4)[8],WZ7I(5)[8]; Guantanamo Bay: 08: 11: NA: 20.00: 75.00: 5.0: KG4: KG4; Mariana Islands: 27: 64: OC: 15.18: -145.72: -10.0: KH0: AH0,KH0,NH0,WH0,K2NMA,N8CS,NH2FG,W2ONH; 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,KA0RU,KE7GMC,KG6DX,KG6JDX,KI4KKH,KI4KKI,N2MI, NH7WC,W5LFA; 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,AB3WS,AC7LR,AJ0M,AL3U,K2GT,K3UNS, K4UAI,K4XS,K6BEF,K6CEE,K7QAS,K8EUT,K9FD,KA7APU,KA7RKW,KB5OWT, KB6EGA,KB7UQH,KB7VUR,KC0WQU,KC1DBY,KC6SWR,KC6YIO,KC7I,KC8EFI, KD7HTG,KE7JTX,KE7KRQ,KF4FQR,KF4OOB,KH0WJ,KI6DVJ,KI6EFY,KI6FTE, KI6JEC,KI7EZG,KJ4WOI,KJ6TJZ,KK6BRW,KM6BOQ,KM6EPQ,N0RMC,N1YLH, N6NCT,N7AMY,N9CRQ,NH2YL,NT4AA,W6NBK,W7NX,W9IS,WA6QDQ,WB4JTT; 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,AB5JB,AC0CW,AD7MF,AE7SB,AH0AH,K0DJM,KB9MWG,KC0EF, KC0UYK,KC0WSG,KC2OJP,KC2PCV,KC7NFH,KC7OQZ,KC7PLJ,KC7PLQ,KC7RCP, KC7WHY,KD8DDY,KE5GEB,KE6VUB,KE7FNC,KE7HMJ,KE7KYU,KE7PXV,KF6AXS, KF6UWT,KF7VBO,KG7CUR,KG7EBD,KG7SVM,KG7SVN,KH7DA,KI4NGY,KI4SET, KI6DES,KI7COR,N0SN,N0XS,N1NJS,N4AVX,N4CM,N6JM,N7ZYS,N9AIG, NE7EK,W0FJN,W4RSB,W7JMR,WA7B; Navassa Island: 08: 11: NA: 18.40: 75.00: 5.0: KP1: KP1,NP1,WP1; US Virgin Islands: 08: 11: NA: 17.73: 64.80: 4.0: KP2: KP2,NP2,WP2,K8RF,K9VV,KB1ZTY,KB3ZUD,KE5ZFH,KG4SZC,KL7NZ,KV4BT, KV4CF,KV4FZ,KV4KW,N1VKI; Puerto Rico: 08: 11: NA: 18.18: 66.55: 4.0: KP4: KP3,KP4,NP3,NP4,WP3,WP4,KB1RUQ,KC2TE,KC2UXP,KD5DVV,KE0GFK,KG4IRC, KM4ZJW,KP2Z,N1YAY,N6RHF; 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],LU1ALF/D, LU1XS/O,LU2AFE/D,LU2DSV/N,LU2DVI/H,LU5DF/X[16],LW2EIY/H,LW7DLY/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,4U1A,4U1VIC; 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,OF100FI/0; 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: PJ7; Brazil: 11: 15: SA: -10.00: 53.00: 3.0: PY: PP,PQ,PR,PS,PT,PU,PV,PW,PX,PY,ZV,ZW,ZX,ZY,ZZ,PP6[13],PP7[13],PP8[12], PQ2[13],PQ8[13],PR7[13],PR8[13],PS7[13],PS8[13],PT2[13],PT7[13],PT8[12], PV8[12],PW8[12],PY6[13],PY7[13],PY8[13],PY9[13]; Fernando de Noronha: 11: 13: SA: -3.85: 32.43: 2.0: PY0F: PP0F,PQ0F,PR0F,PS0F,PT0F,PU0F,PV0F,PW0F,PX0F,PY0F,PY0Z,ZV0F,ZW0F,ZX0F, ZY0F,ZY0Z,ZZ0F,PP0R,PQ0R,PR0R,PS0R,PT0R,PU0R,PV0R,PW0R,PX0R,PY0R,ZV0R, ZW0R,ZX0R,ZY0R,ZZ0R; St. Peter & St. Paul: 11: 13: SA: 0.00: 29.00: 2.0: PY0S: PP0S,PQ0S,PR0S,PS0S,PT0S,PU0S,PV0S,PW0S,PX0S,PY0S,ZV0S,ZW0S,ZX0S,ZY0S, ZZ0S; Trindade & Martim Vaz: 11: 15: SA: -20.50: 29.32: 2.0: PY0T: PP0T,PQ0T,PR0T,PS0T,PT0T,PU0T,PV0T,PW0T,PX0T,PY0T,ZV0T,ZW0T,ZX0T,ZY0T, ZZ0T; 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: RI1FJ; 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; Dodecanese: 20: 28: EU: 36.17: -27.93: -2.0: SV5: J45,SV5,SW5,SX5,SY5,SZ5,SV0XCA/5; Crete: 20: 28: EU: 35.23: -24.78: -2.0: SV9: J49,SV9,SW9,SX9,SY9,SZ9; Tuvalu: 31: 65: OC: -8.50: -179.20: -12.0: T2: T2; Western Kiribati: 31: 65: OC: 1.42: -173.00: -12.0: T30: T30; Central Kiribati: 31: 62: OC: -2.83: 171.72: -13.0: T31: T31; Eastern Kiribati: 31: 61: OC: 1.80: 157.35: -14.0: T32: T32; Banaba Island: 31: 65: OC: -0.88: -169.53: -12.0: T33: T33; Somalia: 37: 48: AF: 2.03: -45.35: -3.0: T5: 6O,T5; San Marino: 15: 28: EU: 43.95: -12.45: -1.0: T7: T7; Palau: 27: 64: OC: 7.45: -134.53: -9.0: T8: T8; Asiatic Turkey: 20: 39: AS: 39.18: -35.65: -2.0: TA: TA,TB,TC,YM; European Turkey: 20: 39: EU: 41.02: -28.97: -2.0: *TA1: TA1,TB1,TC1,YM1; Iceland: 40: 17: EU: 64.80: 18.73: 0.0: TF: TF; Guatemala: 07: 11: NA: 15.50: 90.30: 6.0: TG: TD,TG; Costa Rica: 07: 11: NA: 10.00: 84.00: 6.0: TI: TE,TI; Cocos Island: 07: 11: NA: 5.52: 87.05: 6.0: TI9: TE9,TI9; Cameroon: 36: 47: AF: 5.38: -11.87: -1.0: TJ: TJ; Corsica: 15: 28: EU: 42.00: -9.00: -1.0: TK: TK; Central African Republic: 36: 47: AF: 6.75: -20.33: -1.0: TL: TL; Republic of the Congo: 36: 52: AF: -1.02: -15.37: -1.0: TN: TN; Gabon: 36: 52: AF: -0.37: -11.73: -1.0: TR: TR; Chad: 36: 47: AF: 15.80: -18.17: -1.0: TT: TT; Cote d'Ivoire: 35: 46: AF: 7.58: 5.80: 0.0: TU: TU; Benin: 35: 46: AF: 9.87: -2.25: -1.0: TY: TY; Mali: 35: 46: AF: 18.00: 2.58: 0.0: TZ: TZ; European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: R,U,R1N[19],R1O[19],R1P[20],R1Z[19],R4H[30],R4I[30],R4W[30],R8F(17)[30], R8G(17)[30],R8X(17)[20],R9F(17)[30],R9G(17)[30],R9X(17)[20],RA1N[19], RA1O[19],RA1P[20],RA1Z[19],RA4H[30],RA4I[30],RA4W[30],RA8F(17)[30], RA8G(17)[30],RA8X(17)[20],RA9F(17)[30],RA9G(17)[30],RA9X(17)[20],RC1N[19], RC1O[19],RC1P[20],RC1Z[19],RC4H[30],RC4I[30],RC4W[30],RC8F(17)[30], RC8G(17)[30],RC8X(17)[20],RC9F(17)[30],RC9G(17)[30],RC9X(17)[20],RD1N[19], RD1O[19],RD1P[20],RD1Z[19],RD4H[30],RD4I[30],RD4W[30],RD8F(17)[30], RD8G(17)[30],RD8X(17)[20],RD9F(17)[30],RD9G(17)[30],RD9X(17)[20],RE1N[19], RE1O[19],RE1P[20],RE1Z[19],RE4H[30],RE4I[30],RE4W[30],RE8F(17)[30], RE8G(17)[30],RE8X(17)[20],RE9F(17)[30],RE9G(17)[30],RE9X(17)[20],RF1N[19], RF1O[19],RF1P[20],RF1Z[19],RF4H[30],RF4I[30],RF4W[30],RF8F(17)[30], RF8G(17)[30],RF8X(17)[20],RF9F(17)[30],RF9G(17)[30],RF9X(17)[20],RG1N[19], RG1O[19],RG1P[20],RG1Z[19],RG4H[30],RG4I[30],RG4W[30],RG8F(17)[30], RG8G(17)[30],RG8X(17)[20],RG9F(17)[30],RG9G(17)[30],RG9X(17)[20],RI1N[19], RI1O[19],RI1P[20],RI1Z[19],RI4H[30],RI4I[30],RI4W[30],RI8F(17)[30], RI8G(17)[30],RI8X(17)[20],RI9F(17)[30],RI9G(17)[30],RI9X(17)[20],RJ1N[19], RJ1O[19],RJ1P[20],RJ1Z[19],RJ4H[30],RJ4I[30],RJ4W[30],RJ8F(17)[30], RJ8G(17)[30],RJ8X(17)[20],RJ9F(17)[30],RJ9G(17)[30],RJ9X(17)[20],RK1N[19], RK1O[19],RK1P[20],RK1Z[19],RK4H[30],RK4I[30],RK4W[30],RK8F(17)[30], RK8G(17)[30],RK8X(17)[20],RK9F(17)[30],RK9G(17)[30],RK9X(17)[20],RL1N[19], RL1O[19],RL1P[20],RL1Z[19],RL4H[30],RL4I[30],RL4W[30],RL8F(17)[30], RL8G(17)[30],RL8X(17)[20],RL9F(17)[30],RL9G(17)[30],RL9X(17)[20],RM1N[19], RM1O[19],RM1P[20],RM1Z[19],RM4H[30],RM4I[30],RM4W[30],RM8F(17)[30], RM8G(17)[30],RM8X(17)[20],RM9F(17)[30],RM9G(17)[30],RM9X(17)[20],RN1N[19], RN1O[19],RN1P[20],RN1Z[19],RN4H[30],RN4I[30],RN4W[30],RN8F(17)[30], RN8G(17)[30],RN8X(17)[20],RN9F(17)[30],RN9G(17)[30],RN9X(17)[20],RO1N[19], RO1O[19],RO1P[20],RO1Z[19],RO4H[30],RO4I[30],RO4W[30],RO8F(17)[30], RO8G(17)[30],RO8X(17)[20],RO9F(17)[30],RO9G(17)[30],RO9X(17)[20],RQ1N[19], RQ1O[19],RQ1P[20],RQ1Z[19],RQ4H[30],RQ4I[30],RQ4W[30],RQ8F(17)[30], RQ8G(17)[30],RQ8X(17)[20],RQ9F(17)[30],RQ9G(17)[30],RQ9X(17)[20],RT1N[19], RT1O[19],RT1P[20],RT1Z[19],RT4H[30],RT4I[30],RT4W[30],RT8F(17)[30], RT8G(17)[30],RT8X(17)[20],RT9F(17)[30],RT9G(17)[30],RT9X(17)[20],RU1N[19], RU1O[19],RU1P[20],RU1Z[19],RU4H[30],RU4I[30],RU4W[30],RU8F(17)[30], RU8G(17)[30],RU8X(17)[20],RU9F(17)[30],RU9G(17)[30],RU9X(17)[20],RV1N[19], RV1O[19],RV1P[20],RV1Z[19],RV4H[30],RV4I[30],RV4W[30],RV8F(17)[30], RV8G(17)[30],RV8X(17)[20],RV9F(17)[30],RV9G(17)[30],RV9X(17)[20],RW1N[19], RW1O[19],RW1P[20],RW1Z[19],RW4H[30],RW4I[30],RW4W[30],RW8F(17)[30], RW8G(17)[30],RW8X(17)[20],RW9F(17)[30],RW9G(17)[30],RW9X(17)[20],RX1N[19], RX1O[19],RX1P[20],RX1Z[19],RX4H[30],RX4I[30],RX4W[30],RX8F(17)[30], RX8G(17)[30],RX8X(17)[20],RX9F(17)[30],RX9G(17)[30],RX9X(17)[20],RY1N[19], RY1O[19],RY1P[20],RY1Z[19],RY4H[30],RY4I[30],RY4W[30],RY8F(17)[30], RY8G(17)[30],RY8X(17)[20],RY9F(17)[30],RY9G(17)[30],RY9X(17)[20],RZ1N[19], RZ1O[19],RZ1P[20],RZ1Z[19],RZ4H[30],RZ4I[30],RZ4W[30],RZ8F(17)[30], RZ8G(17)[30],RZ8X(17)[20],RZ9F(17)[30],RZ9G(17)[30],RZ9X(17)[20],U1N[19], U1O[19],U1P[20],U1Z[19],U4H[30],U4I[30],U4W[30],U8F(17)[30],U8G(17)[30], U8X(17)[20],U9F(17)[30],U9G(17)[30],U9X(17)[20],UA1N[19],UA1O[19], UA1P[20],UA1Z[19],UA4H[30],UA4I[30],UA4W[30],UA8F(17)[30],UA8G(17)[30], UA8X(17)[20],UA9F(17)[30],UA9G(17)[30],UA9X(17)[20],UB1N[19],UB1O[19], UB1P[20],UB1Z[19],UB4H[30],UB4I[30],UB4W[30],UB8F(17)[30],UB8G(17)[30], UB8X(17)[20],UB9F(17)[30],UB9G(17)[30],UB9X(17)[20],UC1N[19],UC1O[19], UC1P[20],UC1Z[19],UC4H[30],UC4I[30],UC4W[30],UC8F(17)[30],UC8G(17)[30], UC8X(17)[20],UC9F(17)[30],UC9G(17)[30],UC9X(17)[20],UD1N[19],UD1O[19], UD1P[20],UD1Z[19],UD4H[30],UD4I[30],UD4W[30],UD8F(17)[30],UD8G(17)[30], UD8X(17)[20],UD9F(17)[30],UD9G(17)[30],UD9X(17)[20],UE1N[19],UE1O[19], UE1P[20],UE1Z[19],UE4H[30],UE4I[30],UE4W[30],UE8F(17)[30],UE8G(17)[30], UE8X(17)[20],UE9F(17)[30],UE9G(17)[30],UE9X(17)[20],UF1N[19],UF1O[19], UF1P[20],UF1Z[19],UF4H[30],UF4I[30],UF4W[30],UF8F(17)[30],UF8G(17)[30], UF8X(17)[20],UF9F(17)[30],UF9G(17)[30],UF9X(17)[20],UG1N[19],UG1O[19], UG1P[20],UG1Z[19],UG4H[30],UG4I[30],UG4W[30],UG8F(17)[30],UG8G(17)[30], UG8X(17)[20],UG9F(17)[30],UG9G(17)[30],UG9X(17)[20],UH1N[19],UH1O[19], UH1P[20],UH1Z[19],UH4H[30],UH4I[30],UH4W[30],UH8F(17)[30],UH8G(17)[30], UH8X(17)[20],UH9F(17)[30],UH9G(17)[30],UH9X(17)[20],UI1N[19],UI1O[19], UI1P[20],UI1Z[19],UI4H[30],UI4I[30],UI4W[30],UI8F(17)[30],UI8G(17)[30], UI8X(17)[20],UI9F(17)[30],UI9G(17)[30],UI9X(17)[20],R90DOSAAF,R870M, R900BL,R99FSB,R9JO/6,RA9WU/4/P[30],RJ4P[30],RM4R[30],RT9K/4[30], RT9K/6,RT9K/7,RT9T/3,RW9WJ/4[30],UA0BDS/1,UA2FT/6,UA4NF[30], UA4PN[30],UA4RF[30],UA9JPX/6,UA9VR/6,UB5O/1(17)[20]; Kaliningrad: 15: 29: EU: 54.72: -20.52: -3.0: UA2: R2F,R2K,RA2,RC2F,RC2K,RD2F,RD2K,RE2F,RE2K,RF2F,RF2K,RG2F,RG2K,RI2F,RI2K, 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,R1336FO,R2MWO,R680FBO; 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),RI0T(18)[32],RI8H(18)[31],RI8I(18)[31],RI8O(18)[31], RI8P(18)[31],RI8S(16)[30],RI8T(16)[30],RI8U(18)[31],RI8V(18)[31], RI8W(16)[30],RI8Y(18)[31],RI8Z(18)[31],RI9I(18)[31],RI9M(17)[30], RI9P(18)[31],RI9S(16),RI9T(16),RI9V(18)[31],RI9W(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),RM17NY,RT4C/8(17)[30],RU17NY,RZ17NY, RQ4D/8(17)[30],RV3DSA/0(19)[34],RZ5D/9(18)[31]; Uzbekistan: 17: 30: AS: 41.40: -63.97: -5.0: UK: UJ,UK,UL,UM; Kazakhstan: 17: 30: AS: 48.17: -65.18: -5.0: UN: UN,UO,UP,UQ,UN0F[31],UN0G[31],UN0J[31],UN0Q[31],UN1F[31],UN1G[31], UN1J[31],UN1Q[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,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,VER20170123,VA2PL(2)[4], VA2RC(2)[4],VE2CSI(2)[4],VE2EKA(2)[4],VE2FK[9],VE2IDX(2)[4], VE2IM(2)[4],VY0PW(4)[3]; Australia: 30: 59: OC: -23.70: -132.33: -10.0: VK: AX,VH,VI,VJ,VK,VL,VM,VN,VZ,AX4[55],VH4[55],VI4[55],VJ4[55],VK4[55], VL4[55],VM4[55],VN4[55],VZ4[55]; Heard Island: 39: 68: AF: -53.08: -73.50: -5.0: VK0H: VK0EK; Macquarie Island: 30: 60: OC: -54.60: -158.88: -10.0: VK0M: AX/VK0TH; Cocos (Keeling) Islands: 29: 54: OC: -12.15: -96.82: -6.5: VK9C: AX9C,AX9Y,VH9C,VH9Y,VI9C,VI9Y,VJ9C,VJ9Y,VK9C,VK9Y,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,VK9L,VL9L,VM9L,VN9L,VZ9L,VK9FLHI; 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,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,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: VP6DX; Falkland Islands: 13: 16: SA: -51.63: 58.72: 4.0: VP8: VP8; South Georgia Island: 13: 73: SA: -54.48: 37.08: 2.0: VP8/g: VP8DPK; South Shetland Islands: 13: 73: SA: -62.08: 58.67: 4.0: VP8/h: CE9,XR9,HF0POL,LU1ZI,LU4CJM/Z,OA0MP,RI1ANF,RI59ANT; South Orkney Islands: 13: 73: SA: -60.60: 45.55: 3.0: VP8/o: LU1ZA; South Sandwich Islands: 13: 73: SA: -58.43: 26.33: 2.0: VP8/s: VP8STI; Bermuda: 05: 11: NA: 32.32: 64.73: 4.0: VP9: VP9; Chagos Islands: 39: 41: AF: -7.32: -72.42: -6.0: VQ9: VQ9; Hong Kong: 24: 44: AS: 22.28: -114.18: -8.0: VR: VR; India: 22: 41: AS: 22.50: -77.58: -5.5: VU: 8T,8U,8V,8W,8X,8Y,AT,AU,AV,AW,VT,VU,VV,VW; Andaman & Nicobar Is.: 26: 49: AS: 12.37: -92.78: -5.5: VU4: VU4; Lakshadweep Islands: 22: 41: AS: 11.23: -72.78: -5.5: VU7: VU7; Mexico: 06: 10: NA: 21.32: 100.23: 6.0: XE: 4A,4B,4C,6D,6E,6F,6G,6H,6I,6J,XA,XB,XC,XD,XE,XF,XG,XH,XI; Revillagigedo: 06: 10: NA: 18.77: 110.97: 7.0: XF4: 4A4,4B4,4C4,6D4,6E4,6F4,6G4,6H4,6I4,6J4,XA4,XB4,XC4,XD4,XE4,XF0,XF4,XG4, XH4,XI4; Burkina Faso: 35: 46: AF: 12.00: 2.00: 0.0: XT: XT; Cambodia: 26: 49: AS: 12.93: -105.13: -7.0: XU: XU; Laos: 26: 49: AS: 18.20: -104.55: -7.0: XW: XW; Macao: 24: 44: AS: 22.10: -113.50: -8.0: XX9: XX9; Myanmar: 26: 49: AS: 20.00: -96.37: -6.5: XZ: XY,XZ; Afghanistan: 21: 40: AS: 34.70: -65.80: -4.5: YA: T6,YA; Indonesia: 28: 51: OC: -7.30: -109.88: -7.0: YB: 7A,7B,7C,7D,7E,7F,7G,7H,7I,8A,8B,8C,8D,8E,8F,8G,8H,8I,JZ,PK,PL,PM,PN,PO, YB,YC,YD,YE,YF,YG,YH,YB0[54],YB1[54],YB2[54],YB3[54],YB4[54],YB5[54], YB6[54],YB7[54],YB8[54],YC0[54],YC1[54],YC2[54],YC3[54],YC4[54],YC5[54], YC6[54],YC7[54],YC8[54],YD0[54],YD1[54],YD2[54],YD3[54],YD4[54],YD5[54], YD6[54],YD7[54],YD8[54],YE0[54],YE1[54],YE2[54],YE3[54],YE4[54],YE5[54], YE6[54],YE7[54],YE8[54],YF0[54],YF1[54],YF2[54],YF3[54],YF4[54],YF5[54], YF6[54],YF7[54],YF8[54],YG0[54],YG1[54],YG2[54],YG3[54],YG4[54],YG5[54], YG6[54],YG7[54],YG8[54],YH0[54],YH1[54],YH2[54],YH3[54],YH4[54],YH5[54], YH6[54],YH7[54],YH8[54]; Iraq: 21: 39: AS: 33.92: -42.78: -3.0: YI: HN,YI; Vanuatu: 32: 56: OC: -17.67: -168.38: -11.0: YJ: YJ; Syria: 20: 39: AS: 35.38: -38.20: -2.0: YK: 6C,YK; Latvia: 15: 29: EU: 57.03: -24.65: -2.0: YL: YL; Nicaragua: 07: 11: NA: 12.88: 85.05: 6.0: YN: H6,H7,HT,YN,VERSION; 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; Macedonia: 15: 28: EU: 41.60: -21.65: -1.0: Z3: Z3; Kosovo: 15: 28: EU: 42.67: -21.17: -1.0: *Z6: Z6; Republic of South Sudan: 34: 48: AF: 4.85: -31.60: -3.0: Z8: Z8; Albania: 15: 28: EU: 41.00: -20.00: -1.0: ZA: ZA; Gibraltar: 14: 37: EU: 36.15: 5.37: -1.0: ZB: ZB,ZG; UK Base Areas on Cyprus: 20: 39: AS: 35.32: -33.57: -2.0: ZC4: ZC4; St. Helena: 36: 66: AF: -15.97: 5.72: 0.0: ZD7: ZD7; Ascension Island: 36: 66: AF: -7.93: 14.37: 0.0: ZD8: ZD8; Tristan da Cunha & Gough: 38: 66: AF: -37.13: 12.30: 0.0: ZD9: ZD9; Cayman Islands: 08: 11: NA: 19.32: 81.22: 5.0: ZF: ZF; Tokelau Islands: 31: 62: OC: -9.40: 171.20: -13.0: ZK3: ZK3; New Zealand: 32: 60: OC: -41.83: -173.27: -12.0: ZL: ZK,ZL,ZL50,ZM; Chatham Islands: 32: 60: OC: -43.85: 176.48: -12.75: ZL7: ZL7,ZM7; Kermadec Islands: 32: 60: OC: -29.25: 177.92: -12.0: ZL8: ZL8,ZM8; N.Z. Subantarctic Is.: 32: 60: OC: -51.62: -167.62: -12.0: ZL9: ZL9; Paraguay: 11: 14: SA: -25.27: 57.67: 4.0: ZP: ZP; South Africa: 38: 57: AF: -29.07: -22.63: -2.0: ZS: H5,S4,S8,V9,ZR,ZS,ZT,ZU; Pr. Edward & Marion Is.: 38: 57: AF: -46.88: -37.72: -3.0: ZS8: ZR8,ZS8,ZT8,ZU8; tlf-1.3.0/share/darcmults0000644000175000017520000011046313014014714012246 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.3.0/share/ssamults0000644000175000017520000000006613014014714012120 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.3.0/share/arrl10m_mults0000644000175000017520000000050513014014714012745 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.3.0/share/arrlsections0000644000175000017520000000043513014014714012755 00000000000000AB AK AL AR AZ BC CO CT DE EB EMA ENY EPA EWA GA GTA IA ID IL IN KS KY LA LAX MAR MB MDC ME MI MN MO MS MT NC ND NE NFL NH NL NLI NM NNJ NNY NTX NV NT OH OK ONE ONN ONS OR ORG PAC PR QC RI SB SC SCV SD SDG SF SFL SJV SK SNJ STX SV TN UT VA VI VT WCF WI WMA WNY WPA WTX WV WWA WY -end- tlf-1.3.0/share/cabrillo.fmt0000644000175000017520000000201713014014714012617 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 tlf-1.3.0/share/callmaster0000644000175000017520000121547013014014714012404 00000000000000# # Release 2015.10.23.00 # by Stu Phillips, K6TU # 2D0YLX 2E0AOZ 2E0AUU 2E0BFJ 2E0BPU 2E0CEA 2E0CEY 2E0CMR 2E0CNL 2E0CRD 2E0CVN 2E0CVQ 2E0CWB 2E0CZE 2E0DXF 2E0DYM 2E0EBT 2E0EDL 2E0FPC 2E0FRY 2E0FVL 2E0GBC 2E0GBK 2E0GCV 2E0GRX 2E0GUI 2E0HAG 2E0HEF 2E0HTS 2E0IAF 2E0IFC 2E0IKM 2E0IOS 2E0JJM 2E0JOF 2E0JRT 2E0JWC 2E0KAR 2E0KDN 2E0KFH 2E0KHW 2E0KMF 2E0KPD 2E0LJZ 2E0LKC 2E0LMA 2E0LPA 2E0LPD 2E0MDJ 2E0MNM 2E0MTR 2E0NHR 2E0NKC 2E0NPP 2E0OAP 2E0PDX 2E0PLA 2E0RCS 2E0RCY 2E0REE 2E0REM 2E0RNM 2E0SDV 2E0SQL 2E0SSX 2E0SXR 2E0TBT 2E0TGS 2E0TVL 2E0VCC 2E0VDS 2E0WSJ 2E0XAR 2E0XBT 2E0YAO 2E0ZAZ 2E1AYS 2E1EVK 2E1FVS 2E1TAF 2I0ETW 2I0TJR 2M0BEC 2M0IVG 2M0KPE 2M0ONW 2M0WEV 2M0XAT 2M0YIO 2U0FER 2U0TKB 2W0JCV 2W0NCA 2W0VOW 2W0WOD 2W0YLL 3A2MD 3A2MG 3A2MW 3B8CW 3B8FQ 3B8HA 3B8MU 3B9/OE4AAC 3B9HA 3B9HB 3D2KM 3D2NW 3D2R 3DA0ET 3DA0NJ 3G0ZC 3G1B 3G1D 3G1H 3G1UE 3G3I 3G3O 3G3P 3G3W 3G5E 3G5EC 3V3A 3V7A 3V8BB 3V8BCC 3V8SS 3W1T 3W2LI/DL5MAE 3W2LI/PD9DX 3W3A 3W3B 3W3O 3W3XX 3W7W 3Z0X 3Z1K 3Z2X 3Z3AHK 3Z40JIU 3Z50AYP 3Z51S 3Z5N 3Z5W 3Z5Z 3Z6AEF 3Z6M 3Z6O 3Z6QRO 3Z6V 3Z85PZK 3Z8Z 3Z90IARU 3Z9DX 3Z9K 3Z9R 4A1TD 4A2I 4A5XX 4D1R 4D9WG 4F2KWT 4H1T 4J5A 4J6RO 4JG1EU 4K0CW 4K4K 4K5D 4K6FO 4K7Z 4K8M 4K9W 4L0A 4L0HQ 4L1BR 4L1MA 4L1UN 4L2M 4L3T 4L5LL 4L5O 4L5P 4L6QC 4L8A 4M1F 4M1M 4M4C 4M5W 4O3A 4O3RR 4O4A 4O4SM 4O6Z 4O7CC 4O7CW 4O90A 4S7DFG 4S7KM 4U0ITU 4U0WFP 4U1GSC 4U1ITU 4U1VIC 4U1WB 4U20B 4U4F 4U5F 4V0HQ 4V1JR 4W/K7CO 4X0A 4X0T 4X0W 4X1IF 4X1IM 4X1KS 4X1OM 4X1RF 4X1RU 4X1ZQ 4X1ZX 4X2M 4X4DK 4X4DZ 4X4JU 4X4LF 4X4UE 4X4WH 4X4WN 4X4YM 4X6DK 4X6FR 4X6GP 4X6HX 4X6KA 4X6TF 4X6TT 4X6ZM 4X7A 4X7R 4Z0DX 4Z1DZ 4Z1KM 4Z1PS 4Z1RZ 4Z1TL 4Z1UF 4Z1VC 4Z4AK 4Z4BA 4Z4BS 4Z4DX 4Z4KM 4Z4KX 4Z4LS 4Z4OQ 4Z4TJ 4Z5AD 4Z5CP 4Z5FI 4Z5FL 4Z5FW 4Z5IW 4Z5JU 4Z5KO 4Z5KU 4Z5LA 4Z5LU 4Z5LY 4Z5ML 4Z5MU 4Z5MV 4Z5MY 4Z5OZ 4Z5PJ 4Z5QQ 4Z5SG 4Z5TK 4Z5TT 4Z5UN 4Z5WC 4Z6T 4Z8SM 5A1AL 5B/IK2LTR 5B/IZ4AMS 5B/R2DX 5B/R4FO 5B/RN3QO 5B4AAB 5B4AGQ 5B4AHL 5B4AIF 5B4AIX 5B4AJC 5B4ALX 5B4KH 5B4XF 5C2P 5C5T 5C5W 5E5E 5H1OC 5H3EE 5H3MB 5H9GB 5I0DX 5J0B 5K0A 5K1R 5K4R 5P1KZX 5P1V 5P2I 5P2I/P 5P5X 5P6P 5P8W 5P9X 5Q1A 5Q2J 5Q2T 5Q4B 5Q5D 5Q5P 5Q5R 5Q9T 5R8IC 5R8M 5R8SV 5R8UI 5T0JL 5V7BJ 5V7MI 5W0EF 5W0QQ 5W0UU 5W0XH 5W1SA 5X1NH 5X1XA 5X8B 5Z4LS 5Z4T 60N24O 6K2DFG 6K2DIO 6K2FDL 6K5BFZ 6K5BUI 6K5XZE 6L0NJ 6V7S 6W/G3TXF 6W1RW 6W1SR 6W7RV 6W7SS 6Y1X 6Y2M 6Y2T 6Y3E 6Y3M 6Y4K 6Y4W 6Y5IC 6Y5WJ 6Y6N 6Y7W 7J1AAI 7J1AAX 7J1ABD 7J1BAR 7J1YAD 7J1YAJ 7J2YAB 7J7ACT 7K1CPT 7K1EQG 7K1JFM 7K1JRC 7K1MAG 7K1MAG/2 7K1PTT 7K1SLY 7K2GMJ 7K2HUG 7K2XRZ 7K3BKZ 7K3XGV 7K4DHB 7K4GUR 7K4OIV 7K4PTY 7K4QOK 7K4QPC 7K4TBB 7K4TKB 7K4TSM 7K4VPV 7K4XNN 7L1CYC 7L1FFH 7L1WII 7L1WQO 7L2CDG 7L2MDI 7L2OHM 7L3DGP 7L3KJV 7L4IKF 7L4IOU 7L4MDM 7L4VYK 7L4XDT 7M1ELX 7M1MCT 7M1MCY 7M1VGP 7M2ALP 7M2ALZ 7M2PSC 7M2VAP 7M3IYU 7M4CLF 7M4CTM 7M4IJQ 7M4OOS 7N1BHO/1 7N1GMK 7N1PVD/1 7N2AIA 7N2JFU 7N2JZT/1 7N2JZT/6 7N2LPY 7N2OZY 7N2SES 7N2SPK 7N2TCF 7N2TNI 7N2TRM 7N2UQC 7N2XUZ 7N3OAK 7N3ULM 7N3WRE 7N4GIB 7N4ITA 7N4KDU 7N4KQM 7N4QCQ 7N4SJX 7N4THG 7N4WPY 7N4XCV 7O2A 7Q0NL 7Q7BP 7S5Q 7S5S 7S6A 7S6W 7S7V 7S90IARU 7T0HQ 7X2ARA 7X2JV 7X5LM 7X5QB 7Z1CQ 7Z1HL 7Z1JA 7Z1OO 7Z1SJ 8J150ZYG 8J1FC 8J1ITU 8J1MTD 8J1RL 8J2VE 8J3A 8J3KGR 8J5SSS 8J6KKC/6 8J740YYM 8N150KC 8N1FUJI/1 8N1HQ 8N1ITF 8N1NRT 8N1Z 8N2HHH 8N3AA 8N3HC/3 8N3HKC/3 8N4HQ 8N8HQ 8P0A 8P0P 8P2K 8P5A 8P6CH 8P6EX 8P6NW 8P6SH 8P8T 8P9EH 8P9NX 8Q7DV 8Q7KB 8R1AK 8S0C 8S0DX 8S0W 8S6A 8S6RTTY 9A/DF2AJ 9A/DF7DR 9A/DJ4MH 9A/DK3QZ 9A/HA3MY 9A/OL7Y 9A/OM2FY 9A/OM5AW 9A/OM8A 9A/OM8AA 9A/S51TA 9A/S51TA/P 9A/S52A 9A/S53AR 9A/S53V 9A/S56X 9A/S59A 9A0HQ 9A0P 9A0W 9A0Z 9A15BB 9A1A 9A1AA 9A1AAX 9A1AKL 9A1AR 9A1C/P 9A1CAL 9A1CC 9A1CCN 9A1CCY 9A1CDO 9A1CFR 9A1CIG 9A1CMA 9A1CRS 9A1CRT 9A1D 9A1DFG 9A1HBB 9A1IW 9A1KDE 9A1MM 9A1P 9A1R 9A1RAB 9A1RBZ 9A1SZ 9A1SZ/P 9A1TT 9A1UN 9A1ZZ 9A2AA 9A2AJ 9A2BD 9A2BW 9A2CD 9A2CU 9A2CW 9A2DC 9A2DI 9A2DQ 9A2DS 9A2EU 9A2EY 9A2F 9A2G 9A2GA 9A2GF 9A2HC 9A2HI 9A2HQ 9A2JG 9A2JK 9A2KD 9A2KI 9A2KO 9A2L 9A2MF 9A2N 9A2NA 9A2NO 9A2R 9A2RD 9A2SW 9A2T 9A2TD 9A2TN 9A2TX 9A2U 9A2UA 9A2UI 9A2UU 9A2VJ 9A2VX 9A2WJ 9A2WT 9A2X 9A2XW 9A2Y 9A2Z 9A2ZR 9A3AG 9A3B 9A3BWW 9A3CJW 9A3DF 9A3DGW 9A3DML 9A3DOS 9A3DU 9A3DV 9A3DZH 9A3GI 9A3GVJ 9A3IH 9A3JB 9A3JH 9A3K 9A3KS 9A3LE 9A3LN 9A3MBM 9A3MN 9A3MR 9A3NB 9A3NC 9A3QO 9A3R 9A3R/P 9A3RPZ 9A3SM 9A3ST 9A3TN 9A3TR 9A3TU 9A3TY 9A3UJ 9A3VM 9A3W 9A3WL 9A3WX 9A3XM 9A3XV 9A3YT 9A3ZI 9A4AA 9A4BL 9A4DC 9A4DD 9A4J 9A4J/P 9A4K 9A4KJ 9A4M 9A4MX 9A4OP 9A4QV 9A4R 9A4U 9A4VM 9A4W 9A4WY 9A4ZP 9A4ZZ 9A5ADH 9A5ADI 9A5AFC 9A5AMC 9A5B 9A5BD 9A5BWW 9A5C 9A5CB 9A5CW 9A5D 9A5D/P 9A5DDT 9A5F 9A5G 9A5K 9A5M 9A5N 9A5RBJ 9A5RPZ 9A5SM 9A5ST 9A5ST/P 9A5TIM 9A5TO 9A5V 9A5W 9A5X 9A5Y 9A5YY 9A6A 9A6A/P 9A6AIV 9A6ARB 9A6BL 9A6C 9A6CM 9A6D 9A6DJX 9A6DQB 9A6DR 9A6IND 9A6IV 9A6K 9A6KZH 9A6LVY 9A6M 9A6NA 9A6NDD 9A6OY 9A6R 9A6RMI 9A6RT 9A6SJZ 9A6ST 9A6T 9A6TAQ 9A6TKS 9A6V 9A6V/P 9A6W 9A6XX 9A6Y 9A6ZZ 9A73A 9A73P 9A7A 9A7AR 9A7B 9A7C 9A7DCK 9A7DR 9A7DX 9A7JCY 9A7JZC 9A7R 9A7S 9A7SSY 9A7T 9A7TM 9A7V 9A7WA 9A7ZZ 9A8A 9A8ARS 9A8CV 9A8DV 9A8DX 9A8DXG 9A8FCC 9A8M 9A8RR 9A8W 9A8WW 9A9A 9A9DA 9A9DX 9A9J 9A9JZ 9A9K 9A9L 9A9M 9A9R 9A9RR 9A9XX 9G5ZZ 9H1CG 9H1EJ 9H1GP 9H1PF 9H1PI 9H1SP 9H1XT 9H3AL 9H3AY 9H3TX 9H3ZD 9H5DX 9H5G 9J2BO 9J2HN 9J2JOCV 9J2T 9J3A 9K2/K2SLI 9K2/SP4R 9K2GS 9K2HN 9K2HQ 9K2K 9K2MU 9K2MY 9K2NO 9K2OD 9K2QA 9K2RA 9K2RR 9K2WA 9K9HQ 9K9Z 9L1A 9M2/JE1SCJ 9M2AIS 9M2CNC 9M2DVR 9M2JKL 9M2KRZ 9M2M 9M2MDX 9M2OUT 9M2RDX 9M2SD 9M2SE 9M2SI 9M2SM 9M2TO 9M2ZAK 9M4CC 9M4CPH 9M4CSB 9M4DX 9M4DXX 9M4SG 9M6BOB 9M6LZY 9M6NA 9M6RHM 9M6SDX 9M6XRO 9M6YBG 9M6ZAE 9M6ZIM 9M8DX 9M8WAT 9M8YY 9N7CC 9N7FD 9N7WE 9V1JA 9V1PW 9V1RM 9V1XX 9V1YC 9V50JA 9V50XX 9W2ADC 9W2GSG 9W2MZY 9W2TS 9W2VVH 9W6DLD 9W6EZ 9W6IVY 9W6ZIM 9W6ZUL 9X0NH 9X0XA 9X0ZM 9Y4/K5ZD 9Y4/VE3EY 9Y4D 9Y4HQ 9Y4LAS 9Y4LDK 9Y4VU 9Y4W 9Z4BM 9Z4DZ A25DX A41MX A41OO A41PG A42A A45WH A45XR A47RS A60A A61BK A61BM A61CK A61DD A61DJ A61EK A61QQ A61ZX A62HQ A65BD A65BP A65BR A65CA A65CB A65CR A65DR A65EE A71A A71AE A71AM A71BX A71CO A71EM A71GO A71HQ A71MM A73A A92AA A92GE A92GR A92HK A92IO A93JA A96A AA0A AA0AI AA0AW AA0CL AA0FO AA0GL AA0KA AA0KW AA0LV AA0MZ AA0NK AA0PO AA0Q AA0RS AA0ST AA0TR AA0W AA0YY AA0ZP AA1AR AA1BB AA1BU AA1CA AA1EE AA1FB AA1GW AA1HK AA1IL AA1JD AA1JM AA1K AA1KN AA1KS AA1O AA1QD AA1QW AA1RB AA1SB AA1SU AA1TH AA1UI AA1UT AA1V AA1VA AA1VT AA1VX AA1XV AA1YW AA2A AA2AD AA2AU AA2BR AA2CN AA2DR AA2DT AA2F AA2FD AA2HJ AA2IL AA2IL/6 AA2KD AA2L AA2LF AA2MF/4 AA2NI AA2RR AA2S AA2TH AA2U AA2VG AA2W AA2ZW AA3AZ AA3B AA3CS AA3CY AA3DF AA3EE AA3GM AA3I AA3JH AA3JK AA3K AA3KM AA3LX AA3NJ AA3RK AA3RZ AA3S AA3TH AA3TL AA3WD AA4A AA4AK AA4BG AA4BQ AA4CF AA4CT AA4D AA4DD AA4EA AA4FF AA4FU AA4FX AA4GA AA4GT AA4H AA4HP AA4HV AA4KD AA4KK AA4LR AA4MB AA4MD AA4MJ AA4N AA4NB AA4NC AA4NP AA4NU AA4PP AA4Q AA4QE AA4R AA4SC AA4TT AA4TZ AA4V AA4VV AA4XG AA4XX AA4YL AA4YL/0 AA4ZU AA5AM AA5AR AA5AT AA5AU AA5B AA5BE AA5BT AA5CK AA5CO AA5D AA5FX AA5GI AA5JD AA5N AA5NT AA5R AA5TB AA5TL AA5TL/7 AA5UK AA5VN AA5VU AA5VZ AA5WZ AA5XA AA5XJ AA6DD AA6DP AA6DT AA6DX AA6EE AA6G AA6GI AA6IO AA6JJ AA6K AA6KJ AA6MK AA6PP AA6PW AA6RB AA6RE AA6RR AA6SS AA6TJ AA6TT AA6VB AA6VX AA6W AA6WH AA6XV AA6XX AA6YQ AA6Z AA7A AA7CL AA7CR AA7CU AA7DJ AA7DK AA7E AA7EE AA7F AA7FY AA7IH AA7JV AA7MB AA7RX AA7UN AA7V AA7VR AA7WM AA7XT AA8BV AA8CS AA8DD AA8DT AA8EN AA8EZ AA8FB AA8GP AA8IA AA8IN AA8JL AA8KY AA8LL AA8M AA8N AA8OQ AA8OY AA8P AA8R AA8RK AA8RT AA8S AA8TK AA8U AA8UL AA8WZ AA8XN AA8YN AA9A AA9AZ AA9BD AA9BL AA9C AA9D AA9DU AA9E AA9F AA9FU AA9HQ AA9IL AA9IV AA9K AA9L AA9LC AA9RN AA9RR AA9SJ AA9TE AA9TY AA9UF AA9UM AA9WS AA9XK AA9YP AB0AL AB0BM AB0BX AB0DK AB0DV AB0LR AB0MQ AB0RE AB0RX AB0S AB0TG AB0TO AB0VK AB0X AB0YM AB0ZO AB1A AB1BN AB1DQ AB1DZ AB1EX AB1GF AB1J AB1JV AB1LG AB1NE AB1NG AB1NI AB1NJ AB1OC AB1PA AB1QB AB1QP AB1RA AB1UF AB1VL AB1WG AB1WR AB1WT AB2DE AB2DX AB2E AB2IO AB2IW AB2JT AB2KX AB2NI AB2NM AB2RA AB2RC AB2SO AB2SR AB2TC AB2UK AB2ZT AB2ZY AB3AH AB3AI AB3C AB3CV AB3CX AB3DC AB3FN AB3FX AB3GW AB3IC AB3LK AB3LS AB3OG AB3Q AB3QR AB3RU AB3RW AB3RY AB3SX AB3TM AB3TM/4 AB3UB AB3UM AB3WS AB4AM AB4B AB4D AB4EJ AB4FH AB4GE AB4GG AB4GO AB4I AB4IQ AB4KJ AB4KP AB4LE AB4LX AB4SF AB4U AB4UF AB4UG AB4VT AB4VV AB4XS AB4Z AB5C AB5CA AB5CC AB5DK AB5EB AB5GG AB5JR AB5K AB5NX AB5OR AB5X AB5XZ AB5ZA AB5ZA/7 AB6EZ AB6LI AB6QM AB6WL AB6Z AB7AA AB7DH AB7HP AB7LT AB7MP AB7R AB7RW AB7VJ AB7YL AB8AA AB8AC AB8AJ AB8CC AB8DD AB8DF AB8FE AB8FJ AB8M AB8OJ AB8OU AB8RC AB8RL AB8SA AB8UL AB8XU AB8XX/KL7 AB8YK AB8ZX AB9A AB9CA AB9CA/4 AB9CD AB9DU AB9GK AB9GN AB9H AB9HH AB9JT AB9KZ AB9LF AB9LY AB9M AB9NA AB9O AB9PN AB9PR AB9QH AB9SJ AB9TA AB9V AB9VN AB9XI AB9YC AB9YN AC0A AC0B AC0BR AC0C AC0CH AC0CU AC0DQ AC0E AC0GQ AC0HS AC0KK AC0O AC0OW AC0PR AC0QK AC0RA AC0RL AC0TP AC0TT AC0UK AC0VG AC0W AC0WL AC0XB AC0XR AC0XY AC0YE AC0ZM AC0ZW AC1AA AC1J AC1O AC1Z AC2AA AC2C AC2CZ AC2EV AC2FA AC2FN AC2FO AC2GP AC2IK AC2IQ AC2JO AC2K AC2KJ AC2KP AC2KY AC2LA AC2MI AC2N AC2NB AC2O AC2OC AC2PB AC2T AC3P AC3Q AC3RK AC3SS AC3U AC3V AC4AL AC4BT AC4BV AC4CA AC4CA/5 AC4G AC4M AC4MG AC4PA AC4QS AC4RD AC4S AC4TN AC4TO AC4X AC4YD AC4ZH AC4ZM AC5AA AC5GG AC5JM AC5JP AC5K AC5NR AC5O AC5RN AC5RO AC5T AC5TU AC6AT AC6B AC6BW AC6DD AC6DM AC6DX AC6EE AC6F AC6FB AC6FU AC6JA AC6LT AC6S AC6SL AC6T AC6VN AC6YY AC6ZM AC7A AC7AF AC7AP AC7CA AC7CG AC7CJ AC7GL AC7JM AC7JW AC7KJ AC7MV AC7NP AC7NU AC7P AC7T AC8AG AC8AP AC8AZ AC8CE AC8CY AC8E AC8EM AC8G AC8GD AC8GI AC8GU AC8GX AC8HU AC8IL AC8JF AC8JT AC8JW AC8KD AC8LC AC8LJ AC8MR AC8MW AC8NP AC8NR AC8O AC8OC AC8PI AC8QX AC8RV AC8SA AC8SI AC8W AC8XI AC8Y AC8ZX AC9AE AC9AH AC9D AC9DE AC9DN AC9EB AC9ED AC9EF AC9EM AC9EX AC9EZ AC9FB AC9FL AC9FX AC9GK AC9HE AC9HJ AC9HQ AC9IG AC9IJ AC9JV AC9KW AC9LZ AC9S AD0AA AD0AB AD0AK AD0AM AD0BI AD0BX AD0CC AD0CI AD0CZ AD0DB AD0DX AD0DX/0 AD0FB AD0FJ AD0H AD0HJ AD0HL AD0HW AD0IE AD0IU AD0JA AD0LI AD0MJ AD0WX AD1B AD1C AD1I AD1L AD1T AD2CM AD2EE AD2KA AD2L AD2TM AD3PA AD3Y AD4AA AD4AX AD4C AD4CJ AD4CS AD4DQ AD4EB AD4ES AD4FP AD4IA AD4IE AD4J AD4KJ AD4OS AD4RE AD4SM AD4TJ AD4TR AD4TT AD4YQ AD4Z AD5BU AD5CQ AD5DJ AD5DX AD5EN AD5HV AD5LU AD5MD AD5MN AD5OW AD5Q AD5ST AD5T AD5U AD5UQ AD5VC AD5VJ AD5XD AD5XM AD5YB AD5YJ AD5ZO AD6BP AD6C AD6D AD6DK AD6E AD6FC AD6FR AD6GE AD6GI AD6I AD6LV AD6MT AD6NR AD6OI AD6PB AD6RH AD6X AD6ZJ AD7AF AD7AJ AD7AW AD7FX AD7HE AD7HO AD7J AD7JP AD7KG AD7KI AD7LY AD7MC AD7MQ AD7ND AD7OG AD7OV AD7SF AD7T AD7TN AD7UP AD7V AD7VB AD7XG AD7ZZ AD8B AD8C AD8D AD8J AD8P AD8RL AD8Y AD9DX AD9O AD9V AD9Y AE0C AE0EE AE0G AE0MT AE0MW AE1D AE1DL AE1N AE1P AE1T AE2DX AE2JL AE2NG AE2X AE3D AE3J AE3K AE3RT AE3S AE3T AE4CJ AE4CW AE4FP AE4FZ AE4IX AE4O AE4Q AE4VJ AE4WC AE4WG AE4WK AE4X AE4Y AE5AA AE5B AE5BR AE5CP AE5E AE5EO AE5GT AE5JG AE5KC AE5L AE5LQ AE5MM AE5NW AE5OF AE5P AE5QL AE5QP AE5RF AE5RI AE5S AE5SB AE5SK AE5TD AE5TF AE5VB AE5VH AE5VR AE5W AE5X AE5XQ AE5YC AE5ZE AE6BH AE6C AE6CN AE6DW AE6GE AE6HF AE6JV AE6MO AE6OR AE6OU AE6PM AE6PP AE6QH AE6QJ AE6SX AE6WR AE6XC AE6Y AE6YB AE7AE AE7AP AE7BT AE7CA AE7CG AE7DW AE7EE AE7EU AE7F AE7G AE7GT AE7H AE7IK AE7KI AE7KJ AE7LD AE7NR AE7PH AE7U AE7VA AE7WI AE7XI AE7ZC AE7ZH AE8J AE8M AE8S AE8TT AE8U AE9DR AE9F AE9K AF0E AF0Z AF1T AF2C AF2D AF2S AF3D AF3I AF3K AF3X AF3Z AF4AI AF4D AF4EB AF4HX AF4I AF4K AF4NW AF4OX AF4RK AF4VM AF4WH AF4Z AF5AQ AF5BZ AF5CC AF5DI AF5DM AF5EH AF5EL AF5FB AF5FJ AF5FM AF5FX AF5HE AF5HG AF5I AF5II AF5IU AF5JG AF5K AF5M AF5MR AF5OD AF5P AF5PO AF5Q AF5SB AF5SI AF5SO AF5T AF5TH AF5TT AF5UX AF5Z AF6F AF6GA AF6GQ AF6JP AF6MS AF6N AF6O AF6PH AF6PK AF6PZ AF6SA AF6T AF6TC AF6TG AF6VT AF6WF AF6WF/7 AF6WU AF6WX AF6XW AF7A AF7BN AF7BO AF7BU AF7DA AF7DK AF7DX AF7EL AF7ES AF7FC AF7FK AF7FP AF7JD AF7JI AF7LU AF7LZ AF7M AF7O AF7QZ AF7S AF7TR AF7Z AF8A AF8C AF8P AF8RH AF9J AF9T AF9US AF9W AG0A AG0DX AG0H AG0M AG1RL AG1T AG2AA AG2J AG2K AG2M AG2T AG3V AG4C AG4CG AG4IL AG4M AG4P AG4TI AG4W AG5BC AG5BS AG5CC AG5DX AG5S AG5W AG5Z AG6AN AG6AU AG6AY AG6BJ AG6CJ AG6CV AG6EK AG6GL AG6HE AG6IP AG6IT AG6JA AG6JY AG6LJ AG6NV AG6OX AG6RB AG6RK AG6RX AG6SQ AG6T AG6TS AG6V AG6VH AG6X AG7EN AG7N AG7T AG8GT AG8W AG9A AG9C AG9G AG9S AH0BT AH0J AH0K AH0S/KH2 AH0U AH2R AH2Y AH6EZ/W7 AH6EZ/W9 AH6KO AH6KW AH6NF AH6NM AH6OY AH6RC AH6RE AH6RR AH6V AH6WX AH7C AH7RC AH7T AI0L AI0M AI0O AI0Q AI1D AI1K AI1V AI2C AI2D AI2I AI2IA AI2N AI2S AI2T AI3G AI3Q AI4BJ AI4C AI4CJ AI4CO AI4DB AI4EI AI4EY AI4FR AI4GR AI4IC AI4KM AI4OT AI4QB AI4QQ AI4QR AI4R AI4RF AI4RJ AI4SV AI4U AI4UN AI4VA AI4VE AI4WU AI4WW AI5AA AI6A AI6BH AI6CN AI6CU AI6DF AI6DS AI6EC AI6EG AI6EX AI6II AI6IN AI6J AI6KG AI6O AI6RE AI6U AI6V AI6YL AI6YL/7 AI6Z AI7AA AI7H AI7Q AI8F AI9I AI9K AI9P AI9Q AI9R AI9T AI9Y AJ0CM AJ0IM AJ0O AJ0Z AJ1DM AJ1E AJ1F AJ1G AJ1Q AJ2E AJ2T AJ2Y AJ3O AJ4A AJ4AA AJ4CG AJ4CU AJ4DT AJ4F AJ4FM AJ4GL AJ4GO AJ4HW AJ4IR AJ4JJ AJ4JZ AJ4LM AJ4LN AJ4PN AJ4PW AJ4SB AJ4TF AJ4TW AJ4VE AJ4WC AJ4WD AJ4ZU AJ5C AJ5DX AJ5F AJ6T AJ6V AJ7B AJ7G AJ7T AJ8B AJ8MH AJ9C AJ9I AJ9K AJ9M AK0BC AK0DX AK0F AK0M AK0MR AK0TF AK1G AK1N AK1P AK1W AK2G AK2MA AK2S AK2U AK3Q AK3V AK4AG AK4AO AK4AQ AK4AT AK4CJ AK4D AK4DM AK4EO AK4HB AK4I AK4JA AK4NZ AK4OD AK4OH AK4OO AK4P AK4PE AK4PI AK4Q AK4QR AK4QU AK4RV AK4TW AK4XO AK4YN AK4YS AK4Z AK5CT AK5DX AK5WB AK5X AK5Y AK6CS AK6DV AK6DX AK6M AK6R AK6TR AK6VS AK6W AK6Y AK6ZZ AK7AR AK7AT AK7AZ AK7H AK7MG AK7O AK7V AK8A AK8B AK8E AK8H AK9A AK9B AK9D AK9W AL1G AL1VE AL2F AL3A AL4B AL4S AL4Y AL5M AL7AF AL7BA/8 AL7CE AL7CW AL7D/7 AL7F AL7GA AL7HW/W4 AL7KC AL7L AL7LO AL7TC AL7X AL9A AM03CV AM03EGB AM03JW AM05URD AM190AKS AM590YI AM890OM AM8RC AN03WH AO150A AO150G AO150I AO150N AO150O AO150R AO150T AO150V AT150HQ AT150ITU AY1DZ AY2H AY5F AY8A AZ0F AZ0H AZ7E B1C B1HQ B1W B1Z B2/BY1CW B3C B4/DF9LJ B4HQ B4L B4S B4TB B4W B5/BA4WL B5B B5HQ B7HQ B7M B7P B7Q B9/BY9GA BA1AI BA1GN/8 BA1PK BA1RB BA1SN BA2BA BA2BI BA2IA BA3AX BA3TT BA4DL BA4DW BA4EO BA4II BA4MY BA4RC BA4SD BA4SE BA4SI BA4TB BA4TU BA4VE BA4WL BA4WR BA5AN BA5CJ BA5DX BA5HAM BA6IV BA7CK BA7IO BA7JA BA7NO BA7NQ BA7QT BA8AG BA8AT BA8BA BA8CY BD0AAI BD1CN BD1EFO BD1IIJ BD1LT BD1RX BD1TX BD2BN BD2FW BD2IAQ BD2STN BD2TBJ BD3CB BD3MH BD3MV BD3OM BD3QT BD3QW BD3QZ BD3RX BD4AGK BD4AKC BD4CD BD4CZX BD4FFM BD4FM BD4IJ BD4IKE BD4KM BD4KW BD4MCG BD4MR BD4QH BD4QQ BD4RDU BD4RQ BD4TD BD4TS BD4UJ BD4UN BD4WCK BD4WG BD4WM BD4WN BD5BMC BD5FFK BD5XM BD5XX BD6AHU BD6IF BD6IQD BD7BM BD7BW BD7DX BD7IS BD7IXG BD7JAD BD7KBH BD7LMD BD7MTJ BD7OB BD7OH BD7OXR BD8ADT BD8ASG BD8NBG BD8SZ BD9AFM BD9ALM BD9XE BG0ARE BG0GE BG0GE/9 BG1AL BG1JK BG1SZT BG1WNU BG2AUE BG2CTX BG2VIA BG2WAU BG2WRJ BG3ATI BG3FB BG3OJZ BG3SSA BG3TBS BG3UPA BG4ACE BG4ACY BG4AHK BG4CGG BG4DRL BG4DSN BG4EVY BG4FRZ BG4GOV BG4GVY BG4HJE BG4HRM BG4HUL BG4HYK BG4KPT BG4NMT BG4OGO BG4QNE BG4TMC BG4TRN BG4UQX BG4WOM BG5FCH BG5JND BG5OF BG5TNA BG5TOX BG5VSD BG6AHD BG6CCP BG6CJI BG6CJR BG6JJI BG6LQV BG6LQZ BG7RCX BG8FFE BG8FT BG8GAM BG8INK BG8NUD BG8SRQ BG9CTD BG9GYI BG9HKP BG9OF BG9XD BG9XD/5 BH1AQA BH1BOQ BH1CXR BH1EBF BH1HUK BH1IOT BH1JGA BH1KVZ BH1LHS BH1LX BH1MHI BH1SCW BH2RO BH3AVY BH3OTC BH3PTL BH3QZZ BH4ACQ BH4AYG BH4BFS BH4BKF BH4BUI BH4CAC BH4IGO BH4LOS BH4PVP BH4QBV BH4QFI BH4RNX BH4RRG BH4SCF BH4SKP BH4SLR BH4SQE BH4SRC BH4SYG BH4TQX BH4TVU BH4TXN BH4TYL BH4UTT BH4WPN BH4XDZ BH6IA BH7LSW BH7PFH BH8BJO BH8CSO BI3NAW BI4SSB BI7LSI BI7OEZ BI7PER BP0P BQ1QQT BU2AU BU2AV BU2AW BU2CA BU2CN BV0HQ BV0J BV1EK BV1EL BV2A BV2KI BV3FG BV4VQ BV55D BV6FG BV7CW BV9AYA BW/DJ3KR BW/W9ROG BW1/JP1RIW BW2/JP1RIW BX2ABT BX2ADF BX2AF BX3AA BX4ABN BX4AD BX4AG BX4AQ BX6AD BX6AP BY0AA BY1CQ BY1CW BY1HAM BY1OK BY1QZ BY1RX BY1WJ BY2AA BY2HIT BY2T BY2WL BY3CQ BY3MM BY4AA BY4AE BY4BBS BY4BHP BY4BMH BY4IB BY4IG BY4IIG BY4QA BY4SHX BY4SZ BY4TC BY4UNT BY5CD BY5HB BY5YAA BY6DX BY6LY BY6SX BY7BS BY7KTO BY7MJ BY7SH BY7XYZ BY8CN BY8DX BY8MA BY9AA BY9CA BY9GA BZ4DHI C08ZZ C31XR C37AC C37NL C44C C45T C4A C4HQ C4I C4W C4Z C56XA C5X C5YK C6AEA C6AKQ C6AMM C6ANA C6ANM C6AOD C6ARU C6ARW C6ASP C6ATF C6ATH C6AUM C6AWW C6AYM C6AZZ C91C C91GBA C91KHN C91WDL CA2LQA CA3CBM CA3JRI CA3KHZ CA3LGJ CA3LMO CA3MRD CA3SOC CA4CBJ CA5GRF CA7CAQ CA7PGO CB1H CB2S CB3F CB3L CB3W CB7R CE1/K7CA CE1AT CE1BF CE1CA CE1DY CE1KR CE1RPW CE1TT CE1UGE CE1UMY CE1URJ CE1VGT CE1WFN CE2/CX1EK CE2/K0MD CE2AWW CE2CT CE2LS CE2MT CE2MVF CE2WZ CE3/OZ1AA CE3AA CE3BC CE3CT CE3DNP CE3EEA CE3FZ CE3KHZ CE3LQH CE3MDA CE3NR CE3OP CE3OVE CE3PCG CE3PG CE3RR CE3TAM CE3TAZ CE3TKV CE3TMM CE3VM CE3WW CE3WYZ CE4KCA CE4SES CE4SFG CE5BSS CE5CN CE5PHI CE5PHR CE5WQO CE6DFY CE6RFP CE6SAX CE6TC CE6WUW CE7EEA CE7FKG CE7PGO CI2LI CJ3A CJ3T CJ7RR CK2I CK2OV CK3AT CK3RHE CK4EA CM2CCA CM2KL CM2XK CM3DSE CM6ISG CM8AKY CM8IH CN2A CN2AA CN2C CN2MM CN2PM CN2R CN2XX CN2YM CN3A CN3AA CN3L CN8CE CN8KD CN8LI CN8VO CN8WW CN8YAN CN8YR CN8YZ CN8ZER CO2AJ CO2AME CO2CCA CO2CW CO2GL CO2IR CO2IZ CO2JD CO2KY CO2NO CO2OQ CO2QM CO2RK CO2RQ CO2RVA CO2UE CO2VDD CO2VE CO2WL CO2XK CO3CJ CO3GD CO3IT CO3JA CO4LS CO6AP CO6CAC CO6EC CO6GU CO6HK CO6HZ CO6LC CO6LE CO6LP CO6QK CO6RD CO6WD CO6YBC CO7EH CO7RR CO8AW CO8CML CO8CY CO8DM CO8HF CO8LY CO8RH CO8SJ CO8TH CO8TW CO8WAL CO8WZ CO8ZZ CO9JAB CP1/OK1HDU CP1AA CP1FF CP4/AL4Q CP6/DF9GR CQ3L CQ7A CQ8CQ CQ8X CQ8Z CQ9T CR1IZ CR2A CR2R CR2T CR2V CR2W CR2X CR3A CR3E CR3L CR3OO CR3T CR3Z CR5A CR5ALT CR5CQK CR5CW CR5D CR5HQ CR5L CR5M CR5T CR6A CR6K CR6P CR6T CR7ACO CR7AFI CR7AFM CR7AJL CR7AKX CR8ABC CR9ABG CS2C CS2F CS2P CS2W CS5CRE CS5LX CS7AFP CS7AGN CS8ABA CS9/PD3EM CS9ABC CS9ABE CT1AGF CT1AOZ CT1BDS CT1BH CT1BOH CT1BOL CT1BWU CT1BXE CT1BXT CT1CJJ CT1DIN CT1DIZ CT1DJE CT1DOV CT1DQV CT1DSC CT1DSV CT1DVV CT1DYH CT1DZY CT1EAT CT1EAV CT1EBM CT1EEK CT1EGF CT1EHK CT1EKD CT1ELF CT1ELP CT1ELZ CT1ENV CT1EOD CT1EPC CT1ETK CT1ETX CT1EVE CT1EXR CT1FDB CT1FFB CT1FHL CT1FJO CT1FOQ CT1GPQ CT1GVN CT1HAR CT1HIX CT1IQI CT1ISF CT1JGA CT1JRZ CT1MH CT1ZQ CT2FQA CT2GMH CT2GQN CT2HKN CT2HTM CT2IBY CT2IOV CT2IRW CT2IVH CT2IWW CT2IZO CT2JBD CT2JBG CT2JMP CT2JMR CT2JVP CT2JXU CT2JYX CT2KHH CT3AS CT3BD CT3BX CT3DL CT3DZ CT3EE CT3FJ CT3FQ CT3FW CT3HF CT3KN CT3KY CT3MD CT4GO CT4HA CT4NH CT5JZX CT5KAO CT7/DJ5YQ CT7/HB9AAP CT7/SQ3PMM CT7ABE CT7ABG CT7ABP CT7ABQ CT7ACG CT7ACS CT7AEQ CT7AEZ CT7AGR CT7AGZ CT7AIU CT7AIX CT9/DF5MA CT9/DL3KWF CT9/DL3KWR CT9/OM3GI CT9/OM3RM CT9/R9DX CT9/RM0F CT9/SM5ALJ CT9/UA9CDC CT9DX CU2AP CU2CE CU2DX CU2JT CU2KG CU3AC CU3AL CU3AN CU3BR CU4DX CU5AQ CU7CG CU7MD CU8AS CU8FN CV1T CV3D CV4C CV5D CV5T CV9A CW0A CW1C CW1DC CW30A CW3A CW4MAX CW5B CW5C CW5W CW7C CW7T CX1AA CX1AV CX1BR CX1CK CX1CW CX1DZ CX1FU CX1OB CX2AM CX2AQ CX2BR CX2CC CX2DK CX2TQ CX3ABD CX3ACS CX3AL CX4AD CX4AT CX4BW CX4RX CX4SS CX5AL CX5RW CX5TR CX5UA CX6VM CX7ACH CX7AF CX7BBR CX7CO CX7RT CX8AF CX9AU CX9BU D2QV D3AA D44AC D44BS D44CF D44EE D44TBO D44TS D4C D70LW D7G DA0A DA0AD DA0C DA0CA DA0CCC DA0DX DA0HQ DA0I DA0KOL DA0MGN DA0SL DA0T DA0T/P DA0ZD DA2A DA2C DA2UN DA3T DA3X DA9L DB0RC DB1BAN DB1DT DB1HCL DB1HEF DB1IAT DB1ID DB1NWA DB1RLE DB1RUL DB1VQ DB1WT DB1ZO DB2B DB2BJT DB2HG DB2KT DB3FS DB3KE DB3MA DB3OA DB3UB DB3ZZ DB4BJ DB4MM DB4MZ DB4NNW DB5FW DB5PJ DB5TPF DB5ZP DB6IS DB6VH DB6VP DB7AA DB7LG DB7MA DB7MM DB8AH DB8PZ DB9EV DB9RZ DC0KK DC0LGST DC0UH DC1CC DC1HR DC1JAG DC1LEX DC1NNN DC1NSK DC1PIA DC1SHM DC1XM DC1YB DC2CB DC2CW DC2IP DC2VE DC2YT DC2YY DC3RJ DC3SW DC4A DC4RU DC4YS DC5GA DC5IMM DC5NA DC6CZ DC6KW DC6KZ DC6MY DC6RI DC6RN DC7DX DC7KM DC8KU DC8QT DC8RA DC8SG DC8WPA DC8XV DC9ER DC9ZP DD0CC DD0VD DD0VE DD0VS DD0ZN DD1A DD1AD DD1IM DD1JAN DD1JN DD1LC DD1MAT DD1OP DD1UDW DD1UN DD2CW DD2EG DD2ML DD2OB DD2PI DD2RE DD2VO DD3D DD3DZ DD3KF DD3NJ DD3SP DD3VV DD4BY DD4DA DD4DJ DD4JC DD4JK DD4TS DD4VB DD5A DD5AJ DD5DXD DD5FZ DD5KD DD5KG DD5M DD5MA DD5NN DD5XL DD5ZZ DD6CC DD6DL DD6VL DD6ZJ DD7GK DD7HR DD7NT DD7SB DD7YB DD7ZN DD7ZT DD8EI DD8IL DD8IU DD8JJ DD8SM DD8UW DD8VX DD9BS DD9HK DD9KE DD9NT DD9PL DD9WG DD9WL DF0AT DF0AW DF0BLM DF0BV DF0CI DF0DA DF0DX DF0EG DF0GEB DF0HO/P DF0HQ DF0IA DF0IC DF0ID/P DF0KF DF0KL/P DF0KY DF0LI DF0M/P DF0R DF0RF DF0RSA/P DF0RW DF0SL DF0SQ DF0SX DF0SX/P DF0TEC DF0TX/P DF0UK DF0US DF0VK/P DF0WH DF1AI DF1AN DF1ASG DF1BN DF1BV DF1DN DF1DT DF1DV DF1DX DF1HE DF1HF DF1HPK DF1IAQ DF1JC DF1JM DF1KBN DF1KM DF1KSP DF1LON DF1LX DF1MC DF1MM DF1OE DF1OM DF1PY DF1QA DF1QQ DF1RL DF1RQ DF1SD DF1SF DF1SZ DF1UQ DF1VB DF1VH DF1WS DF1XC DF1ZA DF2AD DF2AJ DF2AP DF2BO DF2BR DF2CCM DF2CD DF2CH DF2CK DF2CQ DF2DJ DF2DR DF2DX DF2EQ DF2F DF2FM DF2FN DF2FR DF2GB DF2GH DF2IAG DF2IAH DF2IAX DF2IY DF2KD DF2KK DF2LH DF2MC DF2MM DF2NS DF2NU DF2OK DF2OU DF2PY DF2QC DF2QZ DF2RG DF2RR DF2SD DF2TT DF2UA DF2UD DF2UQ DF2UU DF2VZ DF2WF DF3AO DF3AX DF3CB DF3EC DF3EH DF3FS DF3GY DF3HD DF3IR DF3IS DF3IU DF3JO DF3JR DF3KT DF3MC DF3NBM DF3NW DF3OL DF3PN DF3QG DF3SM DF3TE DF3VG DF3VM DF3XX DF3XZ DF3YG/P DF4BV DF4EU DF4FQ DF4GA DF4IY DF4PD DF4SI DF4TD DF4TS DF4UM DF4WC DF4WG DF4XG DF4XX DF4ZK DF4ZL DF50USLAR DF5A DF5AN DF5AU DF5BM DF5BX DF5DG DF5DY DF5ED DF5EG DF5EM DF5GZ DF5HG DF5LR DF5LW DF5MA DF5RF DF5SF DF5TR DF5UL DF5UN DF5WBA DF5WN DF5WW DF5WZ DF5XQ DF5YA DF5ZV DF6CY DF6FM DF6FQ DF6JC DF6JF DF6LQ DF6PB DF6PW DF6QB DF6QC DF6QE DF6QP DF6QV DF6RI DF6VL DF6WE DF6WM DF6XE DF6YC DF6ZY DF7BL DF7DJ DF7DR DF7EF DF7EM DF7FE DF7FO DF7GG DF7HD DF7IS DF7JC DF7LP DF7LS DF7OA DF7OGO DF7PX DF7TH DF7TS DF7XH DF7ZS DF8AA DF8AE DF8AN DF8CS DF8HS DF8JD DF8JE DF8JK DF8KM DF8KY DF8LC DF8PN DF8PR DF8SB DF8SO DF8TM DF8TY DF8UO DF8VV DF8WA DF8XC DF9CY DF9DD DF9DH DF9DM DF9EY DF9FS DF9GH DF9GR DF9IU DF9IX DF9JL DF9JS DF9KF DF9KR DF9LJ DF9LW DF9MV DF9NX DF9OB DF9OO DF9OX DF9PE DF9PG DF9RD DF9VJ DF9WB DF9XV DF9YC DF9YG DF9YY DF9ZP DG0AAE DG0AM DG0CG DG0CH DG0DG DG0DRF DG0ERS DG0KS DG0KT DG0LFF DG0OBU DG0OFH DG0OFZ DG0OJO DG0OKW DG0OM DG0OME DG1AAB DG1AAE DG1ATN DG1BHA DG1BQC DG1CMZ DG1DHS DG1DUG DG1EA DG1EZ DG1HWM DG1IU DG1KHK DG1KTS DG1LS DG1NPM DG1PS DG1PU DG1ROD DG1RPU DG1RUG DG1RZD DG1RZH DG1SGW DG1VL DG1YBN DG1YCF DG1YRT DG2BAR DG2BHB DG2BWG DG2EBW DG2EKO DG2FDE DG2GAW DG2HN DG2HSI DG2JA DG2KO DG2LAW DG2MEL DG2MKV DG2NCE DG2NMH DG2RSF DG2SDK DG2SEG DG2SI DG2SRL DG2UA DG3AKE DG3FAW DG3FCT DG3FFM DG3FK DG3IS DG3LSM/P DG3MDE DG3MR DG3NCZ DG3RCE DG3SBM DG3SDK DG3YCC DG3YJB DG4BRT DG4FDQ DG4KAL DG4KBF DG4MB DG4NAT DG4NDV DG4NEC DG4R DG4RAW DG4SCG DG4UF DG4VD DG5AA DG5AAP DG5DBT DG5DJ DG5FAU DG5FDN DG5FFF DG5HFS DG5KX DG5LAC DG5MEO DG5MEX DG5MLA DG5MMQ DG5NAB DG5NGS DG5OAC DG5OBB DG5RCT DG5SAY DG5SBK DG5SDQ DG5YHK DG6AL DG6CA DG6DAF DG6DCB DG6EAW DG6GT DG6IMR DG6MDG DG6ME DG6NBW DG6OAG DG6OAY DG6OG DG6PW DG7BST DG7DBR DG7EE DG7EKJ DG7FFC DG7HL DG7JB DG7MA DG7RO DG7SF DG7UAC DG7XX DG7YCS DG7YHU DG8AM DG8DBW DG8DP DG8EV DG8FAY DG8FBV DG8HJ DG8JA DG8KAD DG8KAJ DG8MG DG8NCO DG8NCY DG8NFB DG8OBN DG8OP DG8SBT DG8VE DG8YFM DG9BAS DG9BHU DG9DCR DG9MDM DG9MEH DG9SEH DG9SQ DG9ZA DH0DK DH0F DH0FAB DH0GDE DH0GHU DH0GSU DH0JAE DH0MB DH0MWH DH0PAZ DH1AA DH1AKG DH1CH DH1CL DH1DA DH1DX DH1GW DH1HHR DH1JG DH1JH DH1KGO DH1KU DH1NAS DH1NJS DH1OK DH1PAL DH1PS DH1TS DH1TST DH1TW DH1UZ DH1VY DH1YAE DH2AAK DH2AW DH2DAM DH2FW DH2JD DH2MS DH2NAE DH2OAA DH2PA DH2PAF DH2PC DH2PG DH2PL DH2SBP DH2UAI DH2URF DH2YAZ DH3AP DH3FEN DH3JZ DH3LAT DH3MD DH3MG DH3MIT DH3RD DH3RM DH3SR DH3SW DH3UN DH3WO DH4AAD DH4FA DH4JQ DH4NWG DH4OAM DH4PSG DH4SG DH4TOM DH5ABC DH5BO DH5KLI DH5MK DH5MM DH5NBK DH5NT DH5PK DH5WB DH5YM DH6BH DH6DAO DH6GD DH6JL DH6YMC DH7ACI DH7FA DH7KU DH7LF DH7NK DH7PR DH7SA DH7TNO DH7TS DH7WW DH8BAO DH8BAT DH8BQA DH8DAP DH8DR DH8FAU DH8IAB DH8IAT DH8KV DH8LAW DH8MS DH8VV DH8WE DH8WR DH9DX DH9DX/P DH9GCD DH9NAO DH9SB DJ0A DJ0ABR DJ0AH DJ0AJ DJ0BE DJ0DO DJ0FX DJ0GM DJ0IF DJ0JG DJ0MCH DJ0MCZ DJ0MDR DJ0MY DJ0QN DJ0RU DJ0SP DJ0YI DJ1AA DJ1BV DJ1BWH DJ1CT DJ1CW DJ1DB DJ1HR DJ1IU DJ1KJ DJ1MD DJ1MM DJ1ND DJ1OJ DJ1OR DJ1PE DJ1PQ DJ1RK DJ1SD DJ1SL DJ1TH DJ1TO DJ1TT DJ1TU DJ1XT DJ1YF DJ1YFK DJ1ZH DJ1ZU DJ2AX DJ2BC DJ2FR DJ2GM DJ2GMS DJ2IA DJ2JQ DJ2JS DJ2KD DJ2KUA DJ2ML DJ2MM DJ2MT DJ2MX DJ2NR DJ2OJ DJ2PJ DJ2PR DJ2PU DJ2QV DJ2RG DJ2SEA DJ2SL DJ2ST DJ2TI DJ2TS DJ2UP DJ2XC DJ2XO DJ2YA DJ2YE DJ2ZX DJ3AA DJ3AK DJ3AN DJ3BO DJ3CQ DJ3CS DJ3DQ DJ3GE DJ3GM DJ3HM DJ3HW DJ3IW DJ3JB DJ3JD DJ3JJ DJ3JO DJ3KR DJ3NG DJ3NJ DJ3NK DJ3OS DJ3RA DJ3TU DJ3WE DJ3XA DJ3XD DJ3XK DJ3YP DJ3ZF DJ3ZX DJ4AX DJ4CH DJ4CW DJ4DN DJ4DY DJ4EJ DJ4EN DJ4EY DJ4FZ DJ4GJ DJ4GX DJ4JF DJ4KW DJ4MA DJ4MH DJ4MJ DJ4MM DJ4MO DJ4MZ DJ4OQ DJ4PK DJ4PT DJ4PXC DJ4TW DJ4UV DJ4WM DJ4WS DJ4WT DJ4XD DJ4XR DJ5AA DJ5AM DJ5AN DJ5AQ DJ5AV DJ5AZ DJ5BK DJ5BT DJ5BV DJ5BWD DJ5CL DJ5DA DJ5DN DJ5DT DJ5EJ DJ5EU DJ5FS DJ5IH DJ5IW DJ5JD DJ5JH DJ5JK DJ5KX DJ5LA DJ5LY DJ5MF DJ5MN DJ5MO DJ5MW DJ5MY DJ5NJ DJ5NN DJ5OV DJ5QE DJ5QK DJ5QV DJ5RQ DJ5TT DJ5UZ DJ5VB DJ60DXMB DJ6BS DJ6DO DJ6EJ DJ6ET DJ6FO DJ6GK DJ6JB DJ6JH DJ6KA DJ6LE DJ6MD DJ6MN DJ6NI DJ6NT DJ6OI DJ6OK DJ6OL DJ6OV DJ6OZ DJ6OZ/P DJ6PC DJ6PE DJ6QQ DJ6QT DJ6RN DJ6RS DJ6TB DJ6TK DJ6UP DJ6VM DJ6XB DJ6XG DJ6XV DJ6YL DJ6YX DJ6ZC DJ6ZJ DJ6ZM DJ7AO DJ7AQ DJ7AT DJ7BA DJ7BU DJ7EC DJ7EG DJ7EO DJ7FR DJ7HH DJ7IK DJ7JC DJ7MH DJ7OM DJ7OQ DJ7PR DJ7PT DJ7PW DJ7RL DJ7SW DJ7TW DJ7UC DJ7UD DJ7UO DJ7UQ DJ7WG DJ7WW DJ7XB DJ7YP DJ7YR DJ7YT DJ7ZZ DJ8BD DJ8CG DJ8EL DJ8ES DJ8EW DJ8FR DJ8GE DJ8HB DJ8KW DJ8KZ DJ8LX DJ8MP DJ8NK DJ8NT DJ8NU DJ8OB DJ8OG DJ8QA DJ8QP DJ8RS DJ8SW DJ8UL DJ8UV DJ8VC DJ8VI DJ8XB DJ90IARU DJ9AF DJ9AO DJ9BM DJ9BO DJ9BX DJ9CN DJ9CW DJ9DZ DJ9EG DJ9ER DJ9FG DJ9GS DJ9HX DJ9IE DJ9IO DJ9JU DJ9JY DJ9KG DJ9KH DJ9KM DJ9LX DJ9MH DJ9OI DJ9ON DJ9RR DJ9SN DJ9SO DJ9UN DJ9VA DJ9XB DJ9ZB DK0AE DK0ALC DK0AN DK0AP DK0BM DK0CWC DK0DX DK0ED DK0ED/P DK0EE DK0EL DK0EP/P DK0FC DK0FL DK0FR DK0FR/P DK0FRI DK0HF DK0IU DK0IU/P DK0IW DK0JRS DK0KC DK0LK DK0MM DK0MN DK0MN/P DK0N/P DK0NA DK0OD/P DK0OG DK0OH/P DK0PO DK0PS DK0RX DK0SEN DK0SU DK0TC DK0TU DK0UB DK0V/P DK0WM DK0XB DK1A DK1AC DK1AF DK1AO DK1AQ DK1AUP DK1AW DK1AX DK1BN DK1BX DK1CO DK1DB DK1ED DK1EI DK1EY DK1F DK1FT DK1FW DK1GW DK1II DK1IP DK1IZ DK1K DK1KC DK1KQ DK1LC DK1LN DK1LRS DK1M DK1MAX DK1MCS DK1MG DK1MIR DK1MM DK1NKW DK1NO DK1OM DK1OU DK1PG DK1PZ DK1QH DK1RWS DK1SB DK1TF DK1TUX DK1TX DK1VG DK1WA DK1WB DK1WU DK1XC DK1YP DK1YY DK2AB DK2AJ DK2AR DK2AT DK2AY DK2BJ DK2BK DK2BS DK2BU DK2CC DK2CF DK2CH DK2CI DK2CX DK2DQ DK2ELF DK2FG DK2FQ DK2FW DK2GP DK2GZ DK2HZ DK2IX DK2LO DK2MB DK2MC DK2ML DK2MU DK2NE DK2NG DK2NPM DK2OY DK2PU DK2PZ DK2QF DK2RO DK2RZ DK2SG DK2SZ DK2TG DK2TS DK2TX DK2VM DK2WC DK2WL DK2WM DK2WU DK2YI DK2YL DK2ZO DK2ZZ DK3A DK3AX DK3BK DK3BN DK3CC DK3CH DK3CW DK3DG DK3DUA DK3EE DK3FB DK3FD DK3GG DK3GI DK3HM DK3HV DK3IP DK3KD DK3LT DK3NU DK3OZ DK3PM DK3QN DK3QQ DK3QZ DK3RA DK3SM DK3SML DK3SN DK3T DK3TL DK3UA DK3UT DK3WE DK3WJ DK3WL DK3WM DK3WN DK3WW DK3YD DK40BOSCH DK40ECH DK40ECH/P DK4AA DK4AN DK4BE DK4BX DK4CR DK4CU DK4CU/P DK4DE DK4EF DK4EI DK4FG DK4FP DK4FT DK4FZ DK4HH DK4IG DK4IO DK4JT DK4LEH DK4LI DK4LL DK4LX DK4M DK4MX DK4PL DK4QT DK4REX DK4RL DK4RX DK4SC DK4TP DK4UA DK4UI DK4US DK4VF DK4VW DK4VY DK4WA DK4WO DK4WW DK4XB DK4YB DK4YF DK4YJ DK5A DK5AD DK5AF DK5AI DK5AL DK5AP DK5AX DK5CF DK5D DK5DC DK5DQ DK5E DK5EC DK5EQ DK5EW DK5EZ DK5FT DK5HZ DK5IM DK5IR DK5JI DK5JM DK5K DK5KF DK5KMA DK5KN DK5LP DK5MB DK5MO DK5MV DK5NQ DK5OCE DK5OH DK5OS DK5PD DK5PF DK5PQ DK5QN DK5RO DK5SF DK5ST DK5TX DK5VQ DK5WB DK5WJ DK5WL DK5WN DK5WO DK5XG DK5XO DK5YA DK5ZX DK65DARC DK6AH DK6AJ DK6AN DK6AO DK6AR DK6BA DK6BT DK6CQ DK6CS DK6EA DK6FI DK6HN DK6IM DK6IT DK6KY DK6MO DK6NF DK6NJ DK6OK DK6OR DK6QO DK6QW DK6SP DK6TV DK6VCO DK6WA DK6WH DK6WJ DK6WL DK6XZ DK6YM DK7AC DK7AH DK7AN DK7AN/P DK7AW DK7C DK7CH DK7CX DK7DU DK7DV DK7FM DK7FP DK7FS DK7FZ DK7GH DK7HA DK7HP DK7IF DK7IK DK7JQ DK7MCX DK7MD DK7NL DK7NO DK7OB DK7OG DK7PA DK7SS DK7STF DK7TA DK7TM DK7TY DK7UM DK7VW DK7XH DK7ZH DK7ZT DK8AX DK8CB DK8CC DK8DV DK8DX DK8EQ DK8EY DK8FA DK8FG DK8FS DK8FY DK8HE DK8IF DK8IP DK8IT DK8IZ DK8MCT DK8MZ DK8NC DK8NI DK8NT DK8NW DK8NX DK8OL DK8PX DK8PY DK8RE DK8SP DK8SR DK8SV DK8TU DK8UL DK8YY DK8ZB DK8ZZ DK9AT DK9BP DK9BTX DK9BW DK9CG DK9CL DK9DX DK9ETM DK9FE DK9FEC DK9HE DK9HN DK9IP DK9IV DK9JI DK9JL DK9LO DK9MH DK9MOS DK9MS DK9MW DK9NCX DK9NM DK9OS DK9OV DK9OY DK9PY DK9SF DK9TN DK9VA DK9VC DK9VS DK9VZ DK9WB DK9WE DK9WI DK9WY DK9ZQ DL0AB DL0ABK DL0ABT DL0ABW DL0AC DL0AF DL0AO DL0ARN DL0BB DL0BO/P DL0BOR DL0C DL0CS DL0CS/P DL0DA DL0DAB/P DL0DEF DL0DG DL0DO DL0DX DL0EB DL0EGB DL0ER DL0ERP DL0ESA DL0ET DL0EUF DL0EW DL0FA/P DL0FH DL0FOR DL0FTL DL0GC DL0GEO DL0GER DL0GL DL0GL/P DL0GT/P DL0GZ/P DL0H DL0HI DL0HMK DL0HN DL0HOF DL0II DL0IL DL0IO DL0IR DL0JBB DL0JT DL0JV DL0JV/P DL0KB DL0KCT DL0KD DL0KF/P DL0KJ DL0KU DL0KW DL0KWH/P DL0LA DL0LA/P DL0LB/P DL0LK DL0LSW DL0LU DL0MBG DL0MCM DL0MSR DL0MW/P DL0MZ/P DL0NG DL0NM DL0OEK DL0OHM DL0ON DL0P DL0PDM/P DL0PE DL0PF DL0PL DL0PS DL0RCP DL0RD/P DL0RH DL0RM DL0RUS DL0SHA DL0SLG DL0SLG/P DL0SM DL0SN DL0SOP DL0SWN/P DL0SX DL0SY DL0TH/P DL0THR DL0TN DL0TSD DL0TUM DL0TY DL0UM DL0VEL DL0VG DL0VV DL0VX DL0WAE DL0WH DL0WN DL0WRTC DL0WW DL0XAX DL0XM DL0XM/P DL0XS/P DL0XX DL0ZZ DL1A DL1AB DL1ABF DL1ABJ DL1AH DL1AI DL1AIW DL1AKL DL1AKP DL1AKZ DL1ALB DL1AMH DL1AMQ DL1AN DL1ANT DL1AOB DL1AQU/P DL1AQY DL1ARD DL1ARH DL1ARJ DL1AS DL1ASA DL1ASA/P DL1ASF DL1ASH DL1ATZ DL1AUZ DL1AVA DL1AVF DL1AVK DL1AWC DL1AWM DL1AXI DL1AXX DL1BA DL1BBP DL1BFR DL1BI DL1BKT DL1BLD DL1BPK DL1BRD DL1BSH DL1BSN DL1BUG DL1BWU DL1BYL DL1C DL1CBQ DL1CC DL1CF DL1CJ/P DL1CLM DL1CW DL1CWI DL1CZ DL1DA DL1DAI DL1DAW DL1DBO DL1DBR DL1DCJ DL1DCT DL1DF DL1DGS DL1DH DL1DQW DL1DRE DL1DSW DL1DTD DL1DTL DL1DUO DL1DVE DL1DWL DL1DWR DL1DWZ DL1DXA DL1DXF DL1EAL DL1EEZ DL1EF DL1EFW DL1EGR DL1EHG DL1EHR DL1EJA DL1EJD DL1EJM DL1EK DL1EKG DL1EKO DL1EL DL1EMY DL1EOT DL1EST DL1ET DL1EZ DL1FAM DL1FAR DL1FCL DL1FCU DL1FDE DL1FDL DL1FKA DL1FMG DL1FMK DL1FY DL1GBQ DL1GHJ DL1GKC DL1GLH DL1GLO DL1GME DL1GO DL1GRF DL1GWW DL1GZW DL1HAA DL1HBD DL1HBT DL1HBT/P DL1HBX DL1HCM DL1HJS DL1HQE DL1HR DL1HRN DL1HRY DL1HSI DL1HSR DL1HTX DL1HTY DL1HUH DL1HWH DL1IAD DL1IAO DL1IBZ DL1ICB DL1II DL1JAV DL1JC DL1JCM DL1JDQ DL1JDT DL1JEL DL1JFF DL1JFM DL1JGG DL1JGO DL1JHW DL1JKK DL1JL DL1JML DL1JNA DL1JPF DL1JWA DL1KAS DL1KCQ DL1KFS DL1KID DL1KJB DL1KRT DL1KRW DL1KUN DL1KWK DL1KZA DL1LAF DL1LH DL1LLL DL1LMN DL1LOD DL1LQA DL1LQL DL1LQR DL1LRA DL1LRI DL1LSH DL1M DL1MAJ DL1MDV DL1MDZ DL1MFZ DL1MGB DL1MHJ DL1MIL DL1MIM DL1MUC DL1MV DL1MWG DL1NA DL1NCB DL1NEO DL1NHW DL1NKS DL1NO DL1NPG DL1NUX DL1NX DL1OFC DL1OJ DL1OLI DL1PF DL1PQ DL1PT DL1QH DL1QP DL1QQ DL1QW DL1REM DL1RF DL1RG DL1RI DL1RIO DL1RNN DL1RNT DL1ROJ DL1ROT DL1RPR DL1RTL DL1RTS DL1RTU DL1RTW DL1RWN DL1RWO DL1RYD DL1SAN DL1SBF DL1SDZ DL1SEC DL1SGH DL1SKK DL1SMA DL1STG DL1STV DL1SUN DL1SVA DL1SWB DL1SWT DL1SXB DL1T DL1THB DL1TKB DL1TKL DL1TLA DL1TMF DL1TMW DL1TPY DL1TR DL1TRB DL1TRK DL1TS DL1VDL DL1VF DL1VJ DL1VJL DL1VO DL1VTL DL1WA DL1WA/P DL1WG DL1WH DL1WM DL1XW DL1XX DL1YAF DL1YAW DL1YCF DL1YD DL1YEN DL1YFF DL1YM DL1ZAX DL1ZBO DL1ZL DL1ZM DL1ZU DL2A DL2AA DL2AAZ DL2ADI DL2AJB DL2AK DL2AL DL2ALY DL2AMD DL2AMM DL2ANM DL2APJ DL2ARD DL2ARG DL2ARH DL2ASB DL2AVJ DL2AWA DL2AWB DL2AWW DL2AXA DL2AXM DL2AYK DL2BBL DL2BDA DL2BIS DL2BJB DL2BM DL2BQD DL2BQV DL2BRN DL2BUM DL2BWG DL2CBB DL2CC DL2CHN DL2CK DL2DCX DL2DIE DL2DN DL2DQL DL2DRU DL2DSL DL2DTJ DL2DUA DL2DVE DL2DWP DL2DX DL2DXA DL2DYL DL2EAB DL2EF DL2F DL2FAR DL2FBY DL2FCA DL2FCB DL2FDL DL2FHO DL2FK DL2GBB DL2GC DL2GF DL2GJK DL2GK DL2GMI DL2GMS DL2HAE DL2HRS DL2HRT DL2HSX DL2HUM DL2HWA DL2HWB DL2HWH DL2HWI DL2HYH DL2IAJ DL2IAN DL2IC DL2IE DL2JAA DL2JIL DL2JIM DL2JLB DL2JR DL2JRM DL2JX DL2KAS DL2KMS DL2KUF DL2KUH DL2KUZ DL2KWA DL2LFH DL2LI DL2LMS DL2LRT DL2LSM DL2LTM DL2LZ DL2MDU DL2MDZ DL2MEP DL2MFP DL2MGF DL2MHO DL2MIH DL2MIJ DL2MJ DL2MLU DL2MM DL2MRE DL2NBJ DL2NBU DL2NBY DL2NEA DL2NEW DL2NO DL2NOM DL2NY DL2OBN DL2OE DL2OM DL2PAN DL2PR DL2QB DL2QT DL2R DL2RBB DL2RCH DL2RD DL2RH DL2RMC DL2RMM DL2RNF DL2ROA DL2ROM DL2RPS DL2RTJ DL2RTL DL2RU DL2RUG DL2RZG DL2SAX DL2SBA DL2SBE DL2SBL DL2SKY DL2SWR DL2SWW DL2TG DL2TM DL2TOS DL2TR DL2UH DL2UQ DL2UV DL2VA DL2VBN DL2VE DL2VEL DL2VFR DL2VK DL2VLA DL2VM DL2VNL DL2VPF DL2VRL DL2VV DL2VWR DL2XC DL2YA DL2YBG DL2YEP DL2YET DL2YFB DL2YL DL2YMG DL2YMR DL2ZA DL2ZBO DL2ZN DL2ZXA DL3AA DL3ABL DL3AKM DL3ALI DL3AMB DL3AMI DL3ANK DL3AO DL3APK DL3APO DL3APY DL3AQJ DL3ARH DL3ARK DL3ARM DL3ARS DL3ASM DL3AVI DL3AZ DL3BAT DL3BCR DL3BPC DL3BQA DL3BQE DL3BUE DL3BVA DL3BXX DL3BY DL3CA DL3CE DL3CQ DL3CX DL3DA DL3DCC DL3DD DL3DQL DL3DRN DL3DTH DL3DW DL3DXX DL3EA DL3EBQ DL3EBX DL3EK DL3FBB DL3FCG DL3FDI DL3FDL DL3FF DL3FM DL3FSC DL3G DL3GA DL3GBO DL3GCB DL3GD DL3GER DL3HAA DL3HAE DL3HAH DL3HDK DL3HH DL3HQN DL3HTF DL3HWD DL3IAC DL3IAS DL3IAS/P DL3IAX DL3IF DL3JAN DL3JFA DL3JJ DL3JPL DL3KCW DL3KDP DL3KDS DL3KF DL3KKN DL3KO DL3KP DL3KUD DL3KUM DL3KVR DL3KWF DL3KWR DL3LAR DL3LBM DL3LE DL3LSM DL3MBE DL3MBG DL3MBJ DL3MGN DL3ML DL3MR DL3MVC DL3NAA DL3NBL DL3NCJ DL3NCR DL3NDD DL3NM DL3NSM DL3OAU DL3OCF DL3OH DL3OHB DL3PU DL3PW DL3QQ DL3RAD DL3RAH DL3RAR DL3RCG DL3RDM DL3RHN DL3SAF DL3SAX DL3SBD DL3SCA DL3SDN DL3SDW DL3SF DL3SG DL3SKY DL3SWS DL3SYA DL3SZ DL3TC DL3TU DL3TVI DL3UX DL3VTA DL3VZL DL3WA DL3WB DL3WKG DL3XAC DL3XM DL3YAF DL3YBN DL3YBR DL3YEI DL3YFF DL3YM DL3ZAI DL3ZAJ DL3ZBH DL3ZH DL3ZI DL3ZZA DL4A DL4AAE DL4ABR DL4AC DL4AH DL4AKN DL4ALI DL4AND DL4AO DL4APB DL4AUK DL4BBJ DL4BCM DL4CC DL4CF DL4CH DL4CQ DL4CW DL4DBM DL4DCE DL4DKM DL4DQA DL4DRW DL4DTL DL4DX DL4DXF DL4DZ DL4DZL DL4EAX DL4EBA DL4EBV DL4EBW DL4EDB DL4EDC DL4EPM DL4FAP DL4FBZ DL4FCH DL4FDI DL4FDK DL4FDM DL4FF DL4FI DL4FN DL4GBA DL4HBF DL4HCF DL4HG DL4HRM DL4HWI DL4HWM DL4IAH DL4IAZ DL4IW DL4JLM DL4JMN DL4JU DL4JWU DL4KCA DL4KCC DL4KG DL4KUG DL4KW DL4LAM DL4LBM DL4LT DL4MA DL4MAK DL4MAU DL4MBY DL4MCF DL4MD DL4ME DL4ME/P DL4MFA DL4MFF DL4MFM DL4MFR DL4MHA DL4MN DL4MNG DL4MP DL4MY DL4NAC DL4NBE DL4NL DL4NN DL4OCE DL4OCH DL4OL DL4PAC DL4RAK DL4RCK DL4RDJ DL4RDP DL4SAW DL4SCZ DL4SDR DL4SDW DL4SKF DL4SL DL4SUN DL4SV DL4SZ DL4SZB DL4TH DL4TJ DL4TL DL4UA DL4UCS DL4UL DL4UNY DL4VAI DL4VAQ DL4VCV DL4VM DL4VQ DL4WA DL4WG DL4XU DL4YAO DL4YAR DL4YR DL4YT DL4ZA DL4ZAA DL4ZB DL4ZBY DL4ZM DL4ZZ DL5AI DL5AKF DL5ALI DL5ALW DL5AMF DL5AN DL5ANE DL5ANS DL5ANT DL5AOJ DL5ARM DL5ARZ DL5ASK DL5AWE DL5AWI DL5AX DL5AXX DL5AYI DL5AZZ DL5BAW DL5BAW/P DL5BCF DL5CC DL5CD DL5CF DL5CK DL5CL DL5CT DL5CW DL5DAW DL5DBH DL5DF DL5DRM DL5DTG DL5DWF DL5DXS DL5EBE DL5EC DL5FBB DL5FCZ DL5FH DL5FU DL5GAC DL5GBG DL5GCH DL5GSM DL5GWA DL5HAB DL5HCL DL5HF DL5HN DL5HU DL5IAH DL5IC DL5IF DL5JAB DL5JAN DL5JBW DL5JH DL5JMN DL5JQ DL5JRA DL5JS DL5JSP DL5KM DL5KMS DL5KUD DL5KUR DL5KUT DL5KVV DL5KW DL5KWG DL5L DL5LB DL5LBQ DL5LWM DL5LYM DL5M DL5MAE DL5MAM DL5MAR DL5MBU DL5MC DL5MCK DL5ME DL5MEL DL5MEV DL5MFC DL5MHR DL5MK DL5ML DL5MO DL5MU DL5MV DL5MX DL5N DL5NAM DL5NDX DL5NEB DL5NEN DL5NO DL5OAB DL5OBY DL5OCD DL5PW DL5QS DL5RBW DL5RDI DL5RDO DL5RDP DL5RDQ DL5RJ DL5RMH DL5RU DL5SDZ DL5SE DL5SFC DL5ST DL5SU DL5SVB DL5SWB DL5WB DL5WK DL5WS DL5WW DL5XAT DL5XJ DL5XL DL5XU DL5YAS DL5YCI DL5YEE DL5YET DL5YL DL5YM DL5YX DL5YYM DL5ZAA DL5ZB DL5ZBA DL5ZBO DL5ZE DL5ZL DL65DARC DL6AA DL6AAF DL6AAO DL6ABB DL6ABN DL6AG DL6AH DL6AKK DL6AST DL6ATI DL6ATM DL6AU DL6AWJ DL6AZ DL6AZI DL6BBT DL6BE DL6BG DL6BLD DL6BQE DL6BR DL6BS DL6BW DL6CGX DL6CHF DL6CNG DL6CT DL6CWL DL6DCD DL6DH DL6DJ DL6DQW DL6DSA DL6DVU DL6EBC DL6EDD DL6ER DL6ET DL6EZ DL6FA DL6FAN DL6FBH DL6FBK DL6FBL DL6FBR DL6FCB DL6FD DL6GBL DL6GV DL6HCC DL6HCF DL6HH DL6HRW DL6IAK DL6II DL6IP DL6IY DL6JCH DL6JF DL6JI DL6KA DL6KAC DL6KB DL6KO DL6KR DL6KVA DL6KW DL6KWN DL6LAU DL6LBI DL6LBQ DL6LW DL6MDG DL6ME DL6MFK DL6MGR DL6MHW DL6MI DL6MIG DL6MN DL6MR DL6MRS DL6MTA DL6MWG DL6NAL DL6NAV DL6NBB DL6NBC DL6NBS DL6NCY DL6NDU DL6NDW DL6NEF DL6NWA DL6O DL6OA DL6OAA DL6OBH DL6OCH DL6OCM DL6ON DL6OS DL6OZ DL6PLE DL6PO DL6RAI DL6RAW DL6RBH DL6RBT DL6SDA DL6SDO DL6SEV DL6SFR DL6SRD DL6TK DL6TV DL6UAA DL6UAM DL6UBM DL6UD DL6UGF DL6UHA DL6UHD DL6UKL DL6UKW DL6UM DL6UNF DL6USA DL6WM DL6WT DL6XA DL6XK DL6XX DL6YAO DL6YAQ DL6YBD DL6YRM DL6ZB DL6ZBN DL6ZR DL6ZXG DL7ACN DL7ACZ DL7ADE DL7AFV DL7ALM DL7AN DL7ANR DL7AOJ DL7APT DL7ARJ DL7ARV DL7AT DL7ATR DL7AU DL7AV DL7AXM DL7AYM DL7BA DL7BC DL7BQ DL7BY DL7CB DL7CK DL7CM DL7CO DL7CU DL7CX DL7DCL DL7DZ DL7EN DL7ET DL7FA DL7FB DL7FCQ DL7FF DL7FUA DL7GEM DL7GN DL7GP DL7GW DL7HU DL7HZ DL7JAN DL7JOM DL7JRD DL7JV DL7JV/P DL7KL DL7LF DL7LG DL7LIN DL7LPH DL7LX DL7LX/P DL7LZ DL7MA DL7MAL DL7MB DL7MV DL7NX DL7NY DL7OD DL7OK DL7ON DL7OP DL7PA DL7PV DL7QU DL7RAG DL7RKK DL7RV DL7SAQ DL7SBV DL7SI DL7SLB DL7SP DL7SX DL7TJ DL7TL DL7UCW DL7UCX DL7UDA DL7UG DL7UGN DL7UGO DL7UIO DL7UKA DL7ULM DL7UM DL7UMK DL7UN DL7UPF DL7UPN DL7URB DL7URH DL7UWE DL7UXG DL7VBJ DL7VDX DL7VEE DL7VFM DL7VHP DL7VIO DL7VKG DL7VMM DL7VOG DL7VPE DL7VRG DL7VX DL7XR DL7XT DL7XU DL7YAD DL7YS DL7YY DL8A DL8AAE DL8AAM DL8AAV DL8ABK DL8AKA DL8AW DL8AWK DL8AX DL8BBJ DL8BED DL8BH DL8BP DL8BV DL8CA DL8CKL DL8CN DL8CO DL8DAK DL8DAW DL8DBW DL8DE DL8DSL DL8DUL DL8DWL DL8DWW DL8DXF DL8DXL DL8DXW DL8DYL DL8DZL DL8FBD DL8FCK DL8FP DL8FQ DL8GA DL8HA DL8HCO DL8HK DL8JDX DL8JJ/P DL8KAC DL8L DL8LAQ DL8LBK DL8LD DL8LR DL8MAN DL8MAS DL8MBN DL8MBS DL8MDW DL8MEF DL8MKG DL8MLD DL8NBD DL8NBJ DL8NCF DL8NCM DL8NFA DL8NY DL8OBE DL8OBF DL8OH DL8OK DL8PG DL8PW DL8PZ DL8QE DL8QS DL8R DL8RB DL8RDL DL8RJ DL8SAO DL8SAS DL8SCD DL8SCG DL8SDC DL8SUB/P DL8TG DL8TN DL8TR DL8TV DL8UAA DL8UAT DL8UD DL8UE DL8UGF DL8UI DL8UIL DL8UKE DL8ULO DL8UNO DL8UP DL8UVG DL8UWE DL8UZF DL8VKO DL8WEM DL8WIG DL8WN DL8WRG DL8WX DL8WYJ DL8YAU DL8YE DL8YHR DL8YS DL8ZAJ DL8ZAW DL8ZP DL8ZU DL9ABM DL9AJ DL9AKA DL9AWI DL9BBE DL9CI DL9CW DL9DA DL9DAJ DL9DBZ DL9DRA DL9DST DL9DT DL9DX DL9DYL DL9ECA DL9EJ DL9FB DL9FBF DL9FCQ DL9FCS DL9GCG DL9GFB DL9GMC DL9GMN DL9GR DL9GRE DL9GS DL9GTB DL9GTI DL9GWA DL9GWD DL9HB DL9HCO DL9HD DL9HK DL9IM DL9IU DL9JBN DL9JL DL9JON DL9JSO DL9KCE DL9KI DL9KST DL9LF DL9LJ DL9LM DL9MBI DL9MBZ DL9MCC DL9MCO DL9MDW DL9MFT/P DL9MFY DL9MKN DL9MRF DL9MS DL9MWG DL9NAI DL9NBJ DL9NCR DL9NDM DL9NDS DL9NDV DL9NEI DL9NO DL9OBY DL9OHA DL9OLI DL9PR DL9QY DL9RAR DL9RBE DL9RBT DL9RDW DL9SCO DL9SEP DL9SEV DL9SFE DL9SUB DL9SUD DL9SXX DL9TO DL9UAS DL9UJF DL9UO DL9USA DL9W DL9W/P DL9WO DL9WRM DL9XAW DL9YAJ DL9YAO DL9ZEA DL9ZP DL9ZWG DM0B DM0B/P DM0Y DM1A DM1AOK DM1CM DM1DE DM1FG DM1FS DM1JZ DM1LC DM1LM DM1TT DM1YS DM200TSV DM20KIDS DM2AJK DM2AOC DM2AUJ DM2AWM DM2BLE DM2BPG DM2BR DM2C DM2CEH DM2DLG DM2DMI DM2DX DM2DXA DM2EV DM2FDO DM2GG DM2GM DM2I DM2LI DM2LS DM2M DM2MA DM2ORI DM2RM DM2RN DM2RP DM2RR DM2TO DM2TS DM2VC DM2XO DM3A DM3AZ DM3B DM3BJ DM3C/P DM3CW DM3F DM3FF DM3FZN DM3HZN DM3K DM3KDN DM3KF DM3KXL DM3KZN DM3MM DM3MR DM3O DM3PKK DM3PYA DM3RB DM3SCK DM3SU DM3VL DM3VPJ DM3W DM3X/P DM3XI DM3XM DM3ZF DM3ZM DM4DX DM4EA DM4EE DM4G/P DM4JK DM4KJ DM4KL DM4KM DM4MN DM4NF DM4VPF DM4X DM4YWL DM50PCK DM5AA DM5BB DM5CM DM5CQ DM5CT DM5CW DM5D DM5D/P DM5DM DM5DX DM5EE DM5EL DM5FA DM5GI DM5HF DM5JBN DM5JL DM5KK DM5MA DM5ML DM5MM DM5MR DM5O DM5P DM5R DM5TI DM5TS DM5WF DM5WH DM5Z DM5ZQL DM6A DM6CS DM6DX DM6HK DM6KG DM6V DM6WAN DM7C DM7C/P DM7DU DM7DX DM7KW DM7M DM7WL DM8FW DM8T DM9AYZ DM9EE DM9JH DM9K DM9LSB DM9SD DN0EMH DN0UKW DN1JZ DN1QP DN2AT DN2MR DN2VHF DN3CX DN3DG DN7DX DN7OT DO1ALS DO1AUS DO1AYJ DO1BEN DO1BKI DO1CA DO1CDE DO1CS DO1CSS DO1CTL DO1DJJ DO1DXX DO1FCB DO1FFE DO1FPT DO1FT DO1GAR DO1HDP DO1HDR DO1HE DO1HGS DO1HOF DO1IJB DO1JGE DO1JWZ DO1KAR DO1KLE DO1KRT DO1KUB DO1KY DO1MGN DO1MKA DO1NWA DO1OPA DO1PCD DO1RAC DO1RMS DO1RS DO1RTO DO1RWM DO1SJF DO1SJH DO1SML DO1TGS DO1THG DO1TV DO1UZ DO1WAH DO1WHU DO1WMH DO1YHN DO1YJW DO1YKL DO2ADI DO2AK DO2AM DO2AMS DO2ART DO2BL DO2BP DO2DC DO2DP DO2DTH DO2EG DO2FWW DO2HRB DO2IT DO2KBM DO2LR DO2MAH DO2MPS DO2MRC DO2MS DO2NK DO2STA DO2SYD DO2TC DO2UDX DO2YJN DO3BEN DO3BST DO3CM DO3ED DO3EF DO3HDA DO3IN DO3KIM DO3KTM DO3ME DO3MKB DO3MXK DO3NSA DO3PC DO3PKE DO3PKE/P DO3SH DO3SP DO3TS DO3VE DO3WBH DO3WG DO4AZ DO4CCC DO4DEB DO4DXA DO4HBK DO4HRE DO4HZ DO4JS DO4LHT DO4MTB DO4NT DO4OD DO4SW DO4TP DO4WN DO4ZA DO4ZH DO5ALX DO5BK DO5DF DO5DKL DO5HCS DO5HNL DO5HVO DO5LB DO5MSN DO5MST DO5OT DO5PAD DO5RG DO5SB DO5ST DO5SU DO5UQ DO5WA DO5WD DO5WW DO6CC DO6GZ DO6IH DO6KF DO6KP DO6LE DO6NI DO6NIK DO6OA DO6RBA DO6SR DO6TR DO6UL DO6US DO6XX DO6YY DO7ADH DO7AF DO7AGN DO7DC DO7DSV DO7DU DO7ES DO7GIU DO7MAN DO7ND DO7NHK DO7NN DO7OM DO7OMB DO7PD DO7PM DO7TPB DO7TW DO7UL DO7VB DO7VBD DO7WM DO8ABS DO8AH DO8CW DO8CW/P DO8EF DO8ER DO8FD DO8FY DO8MA DO8MB DO8MM DO8OL DO8OS DO8TB DO8TIG DO8TOH DO8WA DO8YX DO9DAN DO9EE DO9KK DO9MJ DO9MV DO9OAM DO9OM DO9PL DO9RWG DO9SR DO9ST DP0GVN DP1POL DP3A/P DP3D DP3U DP4D DP4E DP4L DP4M DP4X DP5A DP5A/P DP5M DP5N DP6A DP6P DP6P/P DP6T DP7D DP7P DP7T DP7X DP9A DP9I DP9Z DQ0A DQ0B DQ0E DQ1V DQ1V/P DQ2C DQ2T DQ40AIX/P DQ4Q DQ4Q/P DQ4W DQ5X DQ60WAE DQ6Q DQ7A DQ7Q DQ7Q/P DQ7Y DQ8N DQ8T DR0F DR0G DR0K DR0R DR0W DR0W/P DR0Y DR1A DR1D DR1E DR1R DR1X DR2C DR2P DR2W DR3R DR3W DR3X/P DR4A DR4O DR4W DR50RRDXA DR5F DR5M DR5N DR5O DR5X DR60INN DR6N/P DR6R DR7B DR7C DR8A DR9P DR9Z DS0AHQ DS0KBS DS1AFL DS1DPX DS1HTU DS1PRD DS1QMV DS1RLZ DS2BZN DS2CYI DS2GOO DS2KGJ DS2NMJ DS2XUM DS3BNU DS3HWS DS4AOW DS4DEV DS4EOI/2 DS4GCS DS4GEX DS4GKF DS4GQR DS5ACV DS5ATY DS5BRE DS5DNO DS5EVU/2 DS5FNE DS5FTS DS5QLJ DS5TOS DS5USH DS5VTG DT17AGI DU1/JA3FJE DU1AV DU1EG DU1EV DU1HR DU1IST DU1IVT DU1JM DU1KA DU1RB DU1UGZ DU1XX DU2BOQ DU2XXA DU3/KL7IWC DU3/N0QM DU3/R7KW DU3/W4RS DU3/W6QT DU3BC DU3JH DU3LA DU4JT DU7HF DU7RH DU9HZM DU9XO DV1JM DV1KIR DV1UD DV2UXH DV3FSK DV7DRZ DV7HTK DX0HQ DX150M DX1DBT DX1J DX1M DX1PUP DX9ALT DX9M E20AE E20AX E20HHK E20HHK/P E20PFE E20QVD E20UPZ E20WXA E20YLM E21AOY E21EIC E21IZC E21YDP E29BUQ E2A E2C E2E E2X E30FB E50A E50V E51AAR E51AGY E51AND E51CG E51JD E51JQY E51KJW E51RAT E51UFF E51USA E6XG E70A E70LT E70R E70T E70W E71A E71AGA E71AVW E71BA E71EEE E71W E72A E72CC E72MM E72NA E72NATO E72U E73CV E73DPR E73EKK E73ESP E73JO E73KM E73M E73PY E73QI E73RB E73RZ E73S E73SD E73TTT E73W E73X E73Y E74A E74BQ E74D E74EBL E74FN E74GZ E74JS E74KM E74MM E74O E74SD E74TV E74X E74Y E74ZZ E750EBL E75A E75C E75MM E75Q E76WO E77A E77AW E77C E77CW E77DX E77E E77EZ E77G E77M E77O E77R E77S E77T E77TA E77TK E77W E77Y E78DX E78T E79D E7A E7C E7DX E7HQ E7RS E7TT EA1AA EA1AAE EA1ABS EA1ABT EA1ACP EA1AER EA1AF EA1AHA EA1AJV EA1AKS EA1AOU EA1AP EA1AR EA1AS EA1ASC EA1ASG EA1AST EA1AUS EA1AW EA1AY EA1AYT EA1AZ EA1BAF EA1BD EA1BFZ EA1BLA EA1BLI EA1BP EA1BPA EA1BWZ EA1BXX EA1BYA EA1CBX EA1CCM EA1CIU EA1CK EA1CM EA1CS EA1DAV EA1DAX EA1DHB EA1DK EA1DLU EA1DOB EA1DR EA1DRL EA1DVY EA1EA EA1EHW EA1EMB EA1ENG EA1EPM EA1EWC EA1EWY EA1EYG EA1FA EA1FBU EA1FCH EA1FDI EA1FMD EA1FW EA1GA EA1GGX EA1GIB EA1GKA EA1GQ EA1GT EA1HCW EA1HF EA1HFI EA1HNP EA1HOE EA1HRR EA1HS EA1HTF EA1HUZ EA1HV EA1HVW EA1HVY EA1IBH EA1IEU EA1IIP EA1IJF EA1IME EA1IMQ EA1IPT EA1IQM EA1IT EA1JK EA1JO EA1KB EA1KP EA1KY EA1LN EA1MI EA1MV EA1MW EA1ND EA1NE EA1NK EA1OD EA1OK EA1OL EA1OS EA1OT EA1PF EA1PO EA1PP EA1PS EA1QS EA1RLE EA1RN EA1RT EA1SA EA1SB EA1SI EA1SV EA1TI EA1TX EA1URO EA1VT EA1WD EA1WH EA1WK EA1WS EA1WX EA1WZ EA1XT EA1Y EA1YE EA1YG EA1YO EA1YW EA2AF EA2AHP EA2AJB EA2AOO EA2AQH EA2ASB EA2AVM EA2AZ EA2BD EA2BER EA2BNU EA2BSB EA2CCG EA2CE EA2CFR EA2CHL EA2CIA EA2CJ EA2CW EA2CYJ EA2DDE EA2DHJ EA2DK EA2DLX EA2DMH EA2DNR EA2DPA EA2DPS EA2DR EA2DSG EA2DT EA2DVR EA2DWG EA2EA EA2EDU EA2EED EA2EEK/1 EA2GC EA2GM EA2GP EA2GR EA2HA EA2HW EA2IF EA2IV EA2KR EA2KU EA2KV EA2KZ EA2LMI EA2LU EA2MA EA2NA EA2NN EA2NR EA2NS EA2OK EA2OP EA2QU EA2RCA EA2RCF EA2RCP EA2RW EA2RY EA2SN EA2SS EA2SW EA2TA EA2TT EA2TW EA2URD EA2VE EA2VE/1 EA2WD EA2WT EA2XR EA3AGB EA3AIZ EA3AKA EA3AQ EA3AR EA3ARN EA3AUJ EA3AV EA3AVV EA3AXM EA3AYK EA3AYQ EA3BCK EA3BES EA3BHK EA3BKI EA3BOW EA3BOX EA3CA EA3CAZ EA3CCN EA3CEC EA3CFV EA3CHA EA3CI EA3CLB EA3CS EA3CV EA3CW EA3CX EA3CXG EA3DJL EA3DN EA3DNC EA3DU EA3DUM EA3DWU EA3DWX EA3EAN EA3EAU EA3EGB EA3ELZ EA3EO EA3EVR EA3EXP EA3EYD EA3EZD EA3FAR EA3FCQ EA3FF EA3FHP EA3FP EA3FYO EA3FZT EA3GBA EA3GBU EA3GCT EA3GCV EA3GEO EA3GHZ EA3GIL EA3GLB EA3GM EA3GOM EA3GOP EA3GXD EA3GXJ EA3GZR EA3HAB EA3HCE EA3HCJ EA3HDZ EA3HEU EA3HIF EA3HIP EA3HJO EA3HKA EA3HKY EA3HLM EA3HPX EA3HRA EA3HSO EA3HSY EA3IM EA3IN EA3JE EA3JI EA3JW EA3KE EA3KN EA3KT EA3KU EA3KX EA3LA EA3LD EA3LX EA3NA EA3NE EA3NJ EA3NN EA3NO EA3NP EA3NR EA3NT EA3NW EA3NY EA3PP EA3PT EA3QP EA3RCB EA3RP EA3TA EA3VM EA3VN EA3WX EA3XL EA3XP EA3YK EA3YM EA3ZD EA4AA EA4AAI EA4AD EA4AFP EA4AGI EA4AK EA4AOC EA4BHK EA4BL EA4BQN EA4BZ EA4CFY EA4CRP EA4CU EA4CVP EA4CWN EA4CZ EA4DB EA4DW EA4DXP EA4EER EA4EF EA4EJR EA4EMC EA4ENP EA4EPY EA4EQ EA4EQD EA4ERJ EA4ESP EA4ESW EA4EUI EA4EUW EA4FIT EA4FJJ EA4FJL EA4FJX EA4FL EA4FLY EA4FQM EA4FSC EA4FTA EA4GAO EA4GB EA4GEL EA4GHB EA4GJJ EA4GJT EA4GLI EA4GLJ EA4GMX EA4GNZ EA4GPZ EA4GQS EA4GST EA4HD EA4IE EA4IP EA4JJ EA4KD EA4KR EA4KT EA4LO EA4LU EA4MD EA4MS EA4MZ EA4NW EA4OA EA4RCH EA4RE EA4RF EA4SG EA4SV EA4TA EA4TD EA4TE EA4TG EA4TW EA4TX EA4URC EA4URE EA4UV EA4XT EA4YC EA4YK EA4YT EA4ZK EA5/DJ4UF EA5/HB9IIR EA5/LA7VK EA5/LB7Q EA5/OK1GO EA5/YO9FXD EA5AER EA5AJX EA5AL EA5AR EA5ARC EA5ASF EA5ASM EA5ATK EA5AVW EA5AWC EA5AX EA5BAH EA5BB EA5BCX EA5BF EA5BM EA5BSR EA5BY EA5BZ EA5CI EA5CLH EA5CP EA5CRC EA5CTE EA5CZM EA5DB EA5DCL EA5DD EA5DFV EA5DIT EA5DKU EA5DLP EA5DM EA5DNO EA5DPL EA5DY EA5EJ EA5EN EA5EOR EA5ERA EA5ET EA5EV EA5EX EA5FD EA5FDM EA5FID EA5FIV EA5FL EA5FQ EA5FQF EA5FR EA5FV EA5FWW EA5FX EA5GI EA5GIE EA5GIN EA5GLN EA5GLT EA5GMB EA5GS EA5GTQ EA5GX EA5HDE EA5HFW EA5HJA EA5HJO EA5HKA EA5HM EA5HPX EA5HRB EA5HRT EA5HRV EA5HT EA5HYC EA5HZZ EA5ICP EA5ICS EA5ICU EA5IDG EA5IDH EA5IDL EA5IDQ EA5IEB EA5IFY EA5IHK EA5IIC EA5III EA5IIK EA5IJG EA5IY EA5KA EA5KE EA5KM EA5KO EA5KV EA5KY EA5MON EA5NB EA5OL EA5ON EA5OV EA5OX EA5RCI EA5RD EA5RM EA5RS EA5RU EA5RW EA5SR EA5TD EA5TS EA5TT EA5UB EA5UF EA5UJ EA5URP EA5VK EA5VN EA5WA EA5WP EA5WU EA5WW EA5XA EA5XC EA5XY EA5YI EA5YU EA5ZL EA6/CT7AKS EA6/G4MKP EA6/GM0EGI EA6/OE2LCM EA6/S53R EA6/UT5UDX EA6ACF EA6AIF EA6AKN EA6ALH EA6AT EA6AZ EA6BH EA6EE EA6FB EA6FO EA6LP EA6NB EA6OM EA6SA EA6SX EA6TT EA6UN EA6UP EA6URA EA6VQ EA6XQ EA6ZS EA7/UT5UDX EA7AAF EA7AAW EA7AFM EA7AFW EA7AHA EA7AJR EA7AN EA7AQR EA7ATX EA7AYF EA7AZA EA7CB EA7CIX EA7CJN EA7CVF EA7CWA EA7EKS EA7ELY EA7EQC EA7ESM EA7EU EA7FIQ EA7FRX EA7FUN EA7GDC EA7GSU EA7GV EA7HCB EA7HE EA7HG EA7HGH EA7HGX EA7HOJ EA7IA EA7IIW EA7IPP EA7IQM EA7IRI EA7ITL EA7IVN EA7IXG EA7IZJ EA7IZZ EA7JD EA7JHQ EA7JKU EA7JOY EA7JQT EA7JSM EA7JT EA7JW EA7JZ EA7KB EA7KI EA7KO EA7KP EA7KW EA7LL EA7LM EA7LQ EA7LU EA7MT EA7NK EA7NL EA7OF EA7OR EA7OT EA7PP EA7QW EA7RM EA7RU EA7SG EA7SL EA7SS EA7ST EA7TG EA7VA EA7VJ EA7YA EA7ZC EA7ZY EA8/DD5ZZ EA8/DF8NY EA8/DJ6HL EA8/DJ6HP EA8/DJ9RB EA8/DK5AN EA8/DK7AN EA8/DL1EJD EA8/DL3ASM EA8/DL3GCS EA8/DL5JAN EA8/G3PJK EA8/HA7TGC EA8/IK1PMR EA8/K1LZ EA8/LY2IJ EA8/OH2BEM EA8/OH2BP EA8/OH2OT EA8/PA3LEO EA8/PD1DX EA8/PE1EXD EA8/RA1A EA8/RC5A EA8/RW3DO EA8/S57K EA8/SM6FKF EA8/SP6AXW EA8/UT5UDX/P EA8AA EA8ACW EA8AD EA8AH EA8AJO EA8AJY EA8AQV EA8ARG EA8AVJ EA8AVK EA8AXT EA8AZD EA8BGO EA8BPX EA8BQM EA8BTM EA8BTQ EA8BVX EA8BZH EA8CCQ EA8CN EA8CNR EA8CPN EA8CQW EA8CSD EA8CSG EA8CTK EA8CVW EA8CYL EA8CYQ EA8CZK EA8CZP EA8CZT EA8DA EA8DBM EA8DD EA8DDM EA8DED EA8DO EA8DP EA8ED EA8EW EA8FC EA8GP EA8IK EA8IN EA8KL EA8LS EA8MT EA8NQ EA8OM EA8OV EA8PT EA8RM EA8RY EA8TC EA8TX EA8URG EA8URL EA8URT EA8VD EA8YT EA8YV EA8ZS EA9BO EA9CD EA9EU EA9HY EA9IB EA9KB EA9LZ EA9RY EA9UG EB1BCG EB1CAR EB1DJ EB1DM EB1DMQ EB1DPB EB1EB EB1FVQ EB1IC EB1OU EB1RL EB1TR EB2AM EB2ESS EB2RA EB3CW EB3DYS EB3EFU EB3EHP EB3EKZ EB3EPR EB3FLY EB3JT EB3TR EB3WH EB4CMS EB4SM EB5AL EB5BB EB5CS EB5CUZ EB5DXJ EB5GG EB5GGB EB5KT EB5RR EB5TC EB5TT EB6AOK EB7CIN EB7DX EB7EVR EB7HQE EB7KA EB7QE EB8AH EC1ABR EC1AE EC1AIJ EC1BA EC1CSV EC1CT EC1DBO EC1DD EC1ES EC1KR EC2AAR EC2DX EC3AAJ EC3DEL EC3PL EC4AA EC4CWT EC4DX EC4KW EC4TA EC4TR EC5AEZ EC5AGM EC5AN EC5BNL EC5BQQ EC5CR EC5CSW EC5EA EC5JC EC5KY EC5NJ EC6AAE EC7ABV EC7AKV EC7AMY EC7AT EC7CW EC7DDZ EC7DTQ EC7DZZ EC7JA EC7KW EC7MA EC7RC EC7WA EC7WR EC7ZK EC8AQQ EC8AUZ EC8CQ ED1A ED1B ED1C ED1K ED1M ED1R ED1T ED1TT ED1W ED1WW ED2A ED2C ED2R ED2V ED2W ED3B ED3C ED3D ED3DWX ED3F ED3O ED3S ED3T ED3V ED3W ED3X ED3Y ED4A ED4AA ED4D ED4M ED4P ED4R ED4T ED4U ED4X ED5C ED5F ED5FL ED5I ED5J ED5K ED5M ED5N ED5O ED5S ED5T ED5W ED5Z ED6A ED7C ED7P ED7R ED7T ED7W ED7X ED8B ED8DD ED8K ED8P ED8T ED8W ED8X ED9K ED9U ED9Z EE1A EE1B EE1D EE1G EE1X EE1Y EE2A EE2K EE2W EE3A EE3C EE3CVO EE3K EE3R EE3X EE3Y EE4EA EE4K EE5B EE5C EE5D EE5H EE5M EE5SP EE5T EE5W EE6E EE6K EE7A EE7E EE7H EE7K EE7L EE7R EE7S EE7X EE7Y EE8E EE8O EE8T EE8V EE8Z EE9K EF0F EF1A EF1M EF1W EF2A EF2B EF2H EF2O EF3A EF3C EF3E EF3P EF3W EF4HQ EF5A EF5B EF5BM EF5F EF5R EF5T EF5V EF5Y EF6B EF7A EF7AAW EF7K EF7M EF7R EF7T EF7X EF8A EF8C EF8G EF8O EF8R EF8S EF8U EF8USA EF8X EF8Z EF9O EG1DEP EG1FDA EG2A EG5ANT EG5CVF EG5MM EG5RMA EG5VAL EG7UDA EG8COR EH2OLA EH5ANT EH7H EI/W5GN EI0CZ EI0HQ EI1A EI1DG EI1E EI1E/P EI1Y EI2AJ EI2CA EI2CL EI2CN EI2FG EI2GLB EI2HMB EI2II EI2JC EI2JL EI2KA EI2KC EI2KD EI2KK EI30T EI3CTB EI3DP EI3ENB EI3GAB EI3GC EI3GD EI3GGB EI3GRB EI3HA EI3HDB EI3HMB EI3IO EI3KA EI3KD EI3KE EI3KG EI3KI EI3Y EI3Z/P EI4BZ EI4CF EI4DJB EI4DQ EI4DW EI4EQB EI4GAB EI4GJB EI4GK EI4GNB EI4GXB EI4GYB EI4GZB EI4HDB EI4HLB EI4HQ EI4II EI4JY EI4JZ EI4K EI4KE/P EI4KF EI4KH EI4KI EI5DI EI5FQB EI5GSB EI5HJ EI5HV EI5IX EI5JC EI5JQ EI5JS EI5KF EI5KI EI5VHO EI5W EI6AN EI6ARB EI6DX EI6FM EI6FR EI6GGB EI6HB EI6IL EI6IZ EI6JK EI7BA EI7CC EI7GEB EI7GM EI7GSB EI7GY EI7HE EI7IG EI7IP EI7JN EI7JZ EI7KD EI7M EI8BLB EI8EM EI8FC EI8FH EI8GS EI8GXB EI8HL EI8IU EI8JR EI8JX EI8KB EI9C EI9CJ EI9E EI9FBB EI9FN EI9FVB EI9GLB EI9GMB EI9GSB EI9GWB EI9HQ EI9HX EI9JA EI9JF EI9JU EI9KC EI9KF EJ1C EJ1Y EJ3Z EJ5KF/P EK0W/P EK3GM EK6SI EK7DX EL2DT EM0I EM200HT EM25AFG EM2G EM5HQ EM5UCC EM75V EN0U EN4U EO1I EO23I EO3Q EO6F EP6T ER0I ER1BF ER1CS ER1FF ER1JA ER1LW ER1LW/P ER1LZ ER1MM ER1OO ER1Y ER20ARM ER2AW ER2OW ER2RM ER3AU ER3CR ER3CT ER3DW ER3DX ER3GQ ER3GS ER3MM ER3R/P ER3ZZ ER4A ER4DX ER4LX ER4M ER5AA ER5DX ER5LL ER7HQ ER80KEDR ER8R ER8U ES/4O7GM ES0HAM ES0U ES1ACS ES1AN ES1BBJ ES1BH ES1CN ES1CW ES1II ES1IP ES1LS ES1N ES1O ES1OX ES1QD ES1QV ES1QX ES1TU ES1WST ES2AJK ES2BH ES2DJ ES2EZ ES2IPA ES2MA ES2MC ES2RW ES2TI ES2TT ES3AX ES3BM ES3GX ES3NA ES4A ES4IN ES4MM ES4NY ES4OJ ES4QR ES4RC ES4RD ES4RR ES4RX ES4RZ ES5AM ES5EP ES5G ES5GP ES5JR ES5KJ ES5MC ES5MG ES5OW ES5Q ES5QA ES5QD ES5QX ES5RIM ES5RR ES5RW ES5RY ES5TF ES5TF/2 ES5TI ES5TV ES6AXS ES6AXS/1 ES6DO ES6PA ES6Q ES6RMR ES6RW ES6TX ES7A ES7FU ES7GM ES7GN ES8/YL1ZX ES8DH ES8SX ES9A ES9C ET3AA EU1A EU1AA EU1ACX EU1AI EU1AZ EU1DX EU1DZ EU1FQ EU1KY EU1OID EU1RB EU1U EU1UA EU1WW EU1WW/P EU2EU EU2MM EU2TT EU3AA EU3AC EU3AR EU3NA EU4AA EU4AX EU4BF EU4CQ EU4DGC EU4T EU5C EU5M EU6AA EU6AF EU6DA EU6DX EU6ML EU6RO EU7A EU7SR EU7SV EU8F EV1R EV25BWA EV6M EV6Z EV80KEDR EW1BA EW1DL EW1DO EW1EA EW1EO EW1FM EW1HI EW1I EW1IP EW1KT EW1KV EW1NA EW1NM EW1RR EW1TO EW2A EW2ABF EW2AO EW2BO EW2CC EW2EG EW2EO EW2ES EW2M EW2MA EW2NN EW2WN EW3AAM EW3EO EW3EW EW3LK EW3LN EW3MM EW4AA EW4AM EW4BM EW4DX EW4EW EW4FG EW4FGC EW4GL EW4KA EW4M EW4MM EW4R EW4RF EW4WE EW5W EW6AF EW6BY EW6CU EW6DM EW6EN EW6EW EW6FW EW6FX EW6GF EW6GL EW6WF/P EW7BR EW7DK EW7EW EW7GF EW7KF EW7KR EW7LE EW7LO EW7SM EW8ADX EW8AX EW8CF EW8DD EW8DJ EW8DX EW8DZ EW8EW EW8FN EW8GL EW8NN EW8OF EW8OG EW8OM EW8OP EW8OW EW8QQ EW8RR EW8RX EW8W EW8WA EW8Z EW8ZO EX0M EX2B EX2U EX7ML EX8AY EX8BN EX8M EX8MAT EY7AB EY7AD EY7BL EY8AR EY8MM F/DL3HAH F/E72T F/E73CQ F/G0PZA F/G4BJM F/G4BJM/P F/HA8RC F/OM2ZA F/OM2ZA/P F/PA2JWN F/SQ6MS F1ACC F1ADG F1AEY F1AGR F1AKK F1BFC F1BGY F1BIH/P F1BLL F1BLQ F1BOQ F1BRV F1DLJ F1DLZ F1EBN F1EMX F1EOF F1EOY F1EPQ F1FOO F1FPL F1GCX F1GSA F1GTU F1GZV F1HMR F1HTU F1HWL F1ICR F1IEH F1IWH F1JGN F1JKJ F1JXQ F1MLN F1MQJ F1NGP F1NOK F1NZC F1OKV F1PNJ F1PSX F1PYN F1RAF F1RCH F1RHS F1SAA F1SAL F1SCR F1SIU F1SKH F1SKR F1SMV F1TRE F1UBA F1UDC F1UIJ F1UJS F1ULQ F1UMO F1USC F1UVN F1VEV F2AI F2AR F2CW F2DX F2FG F2FP F2GL F2IL F2JD F2LG F2NY F2QH F2VX F2YT F3CW F3JP F3MB F3OA F3OA/P F3PZ F3TK F3VX F3WT F4ABC F4ADZ F4AHP F4AIF F4AOS F4AQG F4AYI F4AZH F4BCX F4BDG F4BDG/P F4BDV F4BHW F4BHZ F4BIV F4BKV F4BLQ F4BYB F4CDR F4CGJ F4CJZ F4CKF F4CPF F4CQR F4CQW F4CUI F4CUO F4CWN F4DIA F4DLL F4DNW F4DPW F4DRT F4DSD F4DSE F4DSK F4DTO F4DVX F4DXP F4DXW F4EEJ F4EEX F4EFI F4EFL F4EGZ F4EHA F4EIH F4EIK F4EJL F4EJO F4EJW F4ELR F4ELU F4EMG F4ENK F4EPR F4EQA F4EQH F4ERS F4ESK F4ESO F4ESV F4ETG F4EUG F4EUN F4EWI F4EWU F4EZC F4EZJ F4FBP F4FCC F4FCE F4FCZ F4FDA F4FDR F4FEP F4FET F4FFH F4FFN F4FFZ F4FGB F4FHT F4FHV F4FIP F4FJH F4FLF F4FLO F4FLQ F4FNK F4FNL F4FNT F4FPG F4FPO F4FQH F4FRC/P F4FRF F4FRG F4FRQ F4FSV F4FSY F4FTA F4FTV F4FUB F4FUL F4FVQ F4FWN F4FWO F4FXH F4FZR F4GAJ F4GBW F4GCD F4GCU F4GDI F4GDO F4GFP F4GFT F4GGQ F4GLD F4GLK F4GLQ F4GMW F4GOJ F4GOT F4GOU/P F4GPB F4GPJ F4GPK F4GTB F4GTD F4GUR F4GVE F4GVP F4GVZ F4GWM F4GWY F4GXG F4GYI F4GYM F4GYP F4GZJ F4HCI F4HCK F4HDF F4HEB F4HEG F4HFQ F4HGA F4HGF F4HGV F4HHF F4HHL F4HIH F4HIK F4HIN F4HJG F4HJO F4HJP F4HKE F4HLB F4IQT F4KIR F4PAN F4PCM F4TNK F4VPL F4VPX F4VQP F4WAX F4WBN F5AAR F5AD F5ADH F5AKL F5AMH F5AOF F5AOL F5AOW F5AQB F5ASD F5AYZ F5BBD F5BEG F5BLC F5BLN F5BLQ F5BOY F5BSB F5BTH F5BZB F5CBQ F5CCX F5CDE F5CH F5CQ F5CT F5CVI F5CWU F5DE/P F5DM F5DMD F5DRD F5FDC F5FDV F5FIE F5FJ F5FTK F5GFA F5GGL F5GN F5GPE F5HFZ F5HGT F5HHW F5HIJ F5HNQ F5HRH F5HRY F5HX F5IAE F5ICC F5IDJ F5II F5ILS F5IN F5INJ F5IQJ F5ISG F5IUZ F5IYJ F5JD F5JFU F5JGA F5JIW F5JLV F5JMI F5JNV F5JNX F5JQF F5JQQ F5JSQ F5JU F5JVP F5JWH F5JXU F5JY F5JYD F5KCH F5KDJ F5KEM F5KEQ F5KHP F5KKD F5KLE F5KMB/P F5KMY F5LBL F5LCU F5LDY F5LEN F5LGE F5LIW F5LLE F5LLN F5LMI F5LMJ F5LOW F5LPY F5LQ F5LTB F5LTH F5LUX F5LWF F5MA F5MA/P F5MBM F5MFI F5MGD F5MIE F5MKD F5MMB F5MMF F5MNK F5MPN F5MQW F5MSB F5MUX F5MVB F5MVT F5MZE F5NBU F5NBX F5NGA F5NKX F5NTV F5NTZ F5NZD F5NZY F5OAM F5OEV F5OHH F5OHM F5OHV F5OJN F5OQK F5OQL F5OTZ F5OWL F5OWT F5OZC F5OZK F5PAC F5PAL F5PBG F5PBM F5PCV F5PHP F5PHW F5PJG F5PLC F5PNI F5POJ F5PPO F5PRH F5PSR F5PTA F5PTI F5PVK F5PVX F5PXF F5PXK F5PYJ F5PZR F5QE F5QF F5RAB F5RAV F5RD F5RDC F5RHD F5RJW F5RKC F5RMK F5RPN F5RQQ F5RUJ F5RVF F5RVO F5SDD F5SDH F5SGI F5SHN F5SIH F5SJC F5SPJ F5SSL F5SVU F5SYC F5TDB F5TFU F5TGR F5TGW F5TJC F5TJZ F5TLN F5TLZ F5TRO F5TV F5TVG/P F5TYQ F5UAY F5UFX F5UII F5UJQ F5UKW F5UL F5UQE F5UTN F5VBT F5VHJ F5VHN F5VHQ F5VHY F5VIF F5VIM F5VJC F5VJK F5VJL F5VKF F5VKT F5VKV F5VLY F5VMN F5VNA F5VU F5VV F5VW F5XX F5YJ F5ZK F5ZO F6ABD F6ABG/P F6ACD F6ACV F6AEW F6AFC F6AGM F6AJH F6AJM F6AML F6AOI F6AOJ F6APE F6API F6AQI F6ARC F6ARS F6ASS F6AUS F6BAG F6BAT F6BAX F6BBO F6BEE F6BEG F6BFH F6BFI F6BGC F6BGG F6BGV F6BIA F6BIP F6BKP F6BLK F6BLP F6BLZ F6BMV F6BNX F6BPZ F6BQG F6BQX F6BUL F6BVY F6BWO F6BYZ F6BZG F6BZQ F6CBA F6CBL F6CCH F6CEL F6CFB F6CFT F6CHF F6CLH F6CLQ F6CMG F6CMS F6COW F6CPD F6CQU F6CSO F6CSQ F6CSX F6CTL F6CUC F6CWA F6CXJ F6CYT F6CZV F6DBX F6DDR F6DEV F6DFZ F6DGH F6DKQ F6DRA F6DRP F6DSV F6DTZ F6DVH F6DYA F6DYX F6DYY F6DZD F6DZS F6DZU F6EAH F6EAS F6EAZ F6ECS F6EDO F6EHP F6EKJ F6EMA F6EPO F6EPQ F6EQD F6EQZ F6EWB F6EWX F6EYB F6EYD F6EZV F6FDR F6FET F6FGB F6FHO F6FLU F6FNA F6FSC F6FTB F6FTI F6FYA F6GBP F6GCI F6GCP F6GDC F6GEU F6GGO F6GNZ F6GOE F6GOX F6GPT F6GUF F6GVC F6GWV F6GYF F6HDI F6HHR F6HIA F6HIX F6HJO F6HKA F6HLC F6HMQ F6HPP F6HQP F6HRP F6HZS F6IFJ F6IGS F6IHY F6IIT F6IRA/P F6IRG F6IRO F6IRS F6ITD F6KBF F6KCZ F6KDL F6KFA F6KFI F6KFV F6KHM F6KJS F6KJX F6KLO F6KNB F6KOH/P F6KOP F6KPQ F6KQL F6KRD F6KRK F6KUQ F6LIA F6REF F8AAB F8AAN F8AEE F8AFC F8AKS F8AOF F8APH F8ATM F8ATS F8AWE F8BBL F8BDQ F8BDX F8BFU F8BJI F8BJK F8BNN F8BOJ F8BSK F8BUI F8BUO F8CGL F8CIL F8CJS F8CMF F8CPA F8CRS F8CZI F8DBF F8DEG F8DFP F8DGH F8DGY F8DHB F8DHE F8DJV F8DKG F8DQL F8DRA F8DRE F8DSN F8DVD F8DWH F8DYD F8DZU F8DZY F8EBY F8EEQ F8EMH F8ETK F8EZE F8EZX F8FBB F8FHI F8FKJ F8FLK F8FMN F8FQJ F8FSC F8FUA F8FWL F8FWM F8FY F8GGV F8GQO F8GRY F8IHE F8IJV/P F8JU F8KA F8KCF F8KFS F8KGH F8KGS F8KGW F8KGZ F8KHP F8KIG F8KKH F8KLY F8LPN F8NAN F8NUH F8OOI F8PDR F8PMO F8UFT F8UNF F8VNU F8VOA F8VOU F8WAW F9CI F9DK F9EW F9HS F9IE F9JS F9OE F9YR FG1PP FG4KH FG4NN FG4NO FG5FI FG5FR FG5FU FG5LA FG8NY FG8OJ FH8PL FJ/VA3RA FK8CE FK8CP FK8DD FK8IK FK8RO FL098S FM1HN FM4KA FM5AN FM5BH FM5BS FM5CD FM5DN FM5EB FM5FJ FM5WD FM5WE FO4BM FO5JV FO5QB FO5RH FO8AA FO8AA/P FO8WBB FP5AC FR/DJ7RJ FR4NT FR4OO FR4PV FR5CB FR5DX FR5EC FR5GS FS4WBS FS5PL FW5JJ FY4PR FY5FY FY5KE FY5PO G0ACD G0AIX G0AJH G0AJJ G0AOJ G0AOL G0ARL G0AUR G0AWV G0AZE G0AZH G0BBV G0BJX G0BLB G0BNR G0BPK G0BRC G0BSU G0BVD G0BYH G0CER G0CHE G0CIG G0CLH G0CPA G0CTR G0CVL G0CWB G0DAY G0DBE G0DGF G0DQS G0DRM G0DVJ G0DWO G0DWV G0DZM G0EDT G0EFO G0EOU G0EWV G0EYO G0EYR G0FBB/P G0FPU G0FYX G0GDA G0GDU G0GFQ G0GHK G0GWA G0HDB G0HDV G0HMN G0HNW G0HSA G0HVQ G0HZG G0IBN G0IER G0IFC G0IIQ G0IPE G0ISO G0IUE G0IVR/P G0IXZ G0IZM G0JEI G0JHC G0JJG G0JJR G0JKY G0JSP G0JXX G0KBL G0KDS G0KHO G0KJP G0KPH G0KRT G0KSB G0KYA G0LGJ G0LGS G0LHX G0LHZ G0LLG G0LRX G0LUJ G0LVX G0LWU G0LZL G0LZX G0MBA G0MFR G0MGM G0MGX G0MIX G0MNN G0MRH G0MSA G0MTQ G0MUC G0MUR G0NBI G0NFH G0NMS G0NVP G0OBH G0OBS G0OED G0OFD G0OGD G0OIW G0OJG G0OKF G0OKR G0ONH G0OOR G0OQK G0ORC G0ORH G0OTT G0PBE G0PCF G0PHP G0PHY G0PJV G0PPQ G0PQB G0PSE G0PSE/P G0PWP G0PZA G0RAH G0RPM G0RQL G0RQQ G0RTN G0RXA G0SAC G0SBO G0SNG G0STR G0SUM G0SYP G0T G0TAN G0TKZ G0TLK G0TMX G0TPH G0TPZ G0TRB G0TSM G0TSQ G0TYS G0UAZ G0UBX G0UCH G0UCP G0UGO G0UII G0UIQ G0UJA G0UJD G0UKB G0UKN G0ULH G0UQC G0UQY G0URR/P G0UWK G0VAS G0VAX G0VDZ G0VIM G0VJG G0VLF G0VOF G0VOK G0VQR G0VTI G0VVM G0VXE G0W G0WAT G0WHO G0WKN G0WOU G0WPH G0WRE G0WSA G0WWD G0WZL G0XAK G0XTV G0YYY G1A G1AYI G1CWP G1DRW G1FBH G1FCW/P G1FON G1GYC G1HHD G1HYA G1IMS G1IZQ G1JCC G1KOT G1MPW G1MSE G1MZD G1N G1OCN G1PCR G1PIR G1SDK G1T G1TDN G1TGM G1VDP G1WJR G1WMJ G1WVN G1XOW G1XRJ G1YLE G1ZHD G2AA G2BKZ G2DSY G2DX/P G2F G2FSR G2HDR G2JL G2KQ G2L G2NF G2U G2YC G3B G3B/P G3BDQ G3BJ G3ESY G3FJE/P G3GAF G3GLL G3GMM G3HEJ G3HGE G3HRH G3HTA G3IAF G3IAZ G3ICO G3IDY G3IGZ G3IJA G3ILO G3ILO/P G3IOE G3IXZ G3IZD G3JDT G3JFS G3JKL G3JKY G3JMJ G3JNB G3JRM G3JUL G3JUX G3JXC G3JZL G3KAF G3KDP G3KKP G3KLH G3KLH/P G3KLO G3KMG G3KMQ G3KNU G3KSU G3KTZ G3KWK G3KWY G3KYF G3KZR G3LAZ G3LDI G3LET G3LHJ G3LHS G3LIK G3LKZ G3LLK G3LNP G3LPS G3LPU G3LUA G3LUW G3LVP G3LX/P G3LZQ G3M G3MBN G3MCK G3MDG/P G3MGW G3MLO G3MPB G3MUO G3MWO G3MXH G3MYI G3MZV G3NAE G3NCN G3NDC G3NFB G3NGD G3NIJ G3NKQ G3NKS G3NPZ G3NRQ G3NWG G3NXT G3NYY G3OAG G3OAY G3OBX G3OCA G3OKA G3OLB G3OND G3OOU G3ORY G3OTK G3P G3PCG G3PDH G3PEM G3PGA G3PHO G3PJT G3PLP G3POM G3PPR G3PQA G3PRI G3PSM G3PXF G3PXT G3PYI G3PYM G3R G3RAU G3RFH G3RGD G3RIK G3RKF G3RKJ G3RLE G3RPB G3RRS G3RSD G3RTE G3RTU G3RTY G3RUV G3RVM G3RWF G3RWL G3RXP G3RXQ G3RZP G3S G3SAD/P G3SBM G3SBP G3SDC/P G3SED G3SEN G3SEY G3SHF G3SJJ G3SJX G3SNT G3SNU G3SQU G3SVD G3SVK G3SVL G3SWC G3SWH G3SXW G3SYM G3SZU G3TA G3TBK G3TBK/P G3TDH G3TEV G3TGB G3TJE G3TKF G3TKK G3TQZ G3TRV G3TTJ G3TVW G3TXA G3TXF G3U G3UAA G3UAS G3UD G3UDA G3UEG G3UFO G3UFY G3UHN G3UHU G3UJE G3UKV G3ULN G3ULT/P G3UML G3USE G3USR G3UYD G3V G3VAO G3VDB G3VGZ G3VIP G3VIR G3VKW G3VMW G3VMY G3VOF G3VPS G3VPW G3VQO G3VSL G3VSQ G3VWH G3VYI G3VZM G3VZT G3WBB G3WEF G3WFM G3WGN G3WGV G3WIE G3WKL G3WMX G3WNQ G3WPF G3WPH G3WRJ G3WRR G3WRR/P G3WVG G3WYW G3WZD G3WZT G3XAN G3XBF G3XBY G3XER G3XGC G3XHZ G3XLG G3XMM G3XOV G3XPO G3XSD G3XTT G3XUD G3XVF G3XVR G3XYC G3XYF G3XZG G3XZQ G3Y G3YBO G3YBY G3YEC G3YED G3YEU G3YFE G3YGG G3YHN G3YHV G3YJD G3YJQ G3YLA G3YMC G3YNN G3YNU G3YOU G3YPE G3YPP G3YQA G3YQD G3YRO G3YRZ G3YSX G3YTU G3YTY G3YXX G3ZAY G3ZBU G3ZCH G3ZDF G3ZGC G3ZHL G3ZKN G3ZMS G3ZNR G3ZOD G3ZPF G3ZQH G3ZRJ G3ZRS G3ZSE G3ZSS G3ZVW G3ZXZ G4A G4ABX G4ACS G4ADJ G4ADR G4AEP G4AFJ G4AFS G4AFU G4AGE G4AJC G4ALD G4ALE/P G4ALH G4AMT G4ANS G4ANT G4AQG G4ARI G4ARN/P G4ATH/P G4AWW G4AXE G4AXX G4AYR G4AYU G4AZN G4BHE G4BJM G4BLH G4BUE G4BUO G4BVH G4BVY G4BWB G4BYG G4C G4CCQ G4CCZ G4CFS G4CIB G4CJC G4CKH G4CLN G4CMQ G4CMY G4CPD G4CUS G4CWH G4CXQ G4CYB G4CZB G4DBW G4DDL G4DDS G4DDX G4DFI G4DJC G4DJJ G4DJX G4DOQ G4DRS G4DSD G4DST G4DXX G4DYC G4E G4EBK G4EDG G4EDR G4EFE G4EHN G4EKT/P G4ELJ G4ELZ G4ENZ G4ERW G4EXD G4EZR G4EZT G4EZV G4FAL G4FDC G4FFE G4FFN G4FJK G4FJW G4FKA G4FKG G4FKK G4FNL G4FNL/P G4FOC G4FON G4FPA G4FPJ G4FSU G4FUF G4FUP G4FVK G4FVZ G4GBP G4GCI G4GIR G4GMW G4GNK G4GUI G4GVB G4GZ G4GZB G4GZG G4HBI G4HDU G4HEE G4HHJ G4HHX G4HJE G4HOM G4HRC G4HSU G4HVC G4HYG G4HZV G4HZW G4ICP G4IDF G4IIY G4IKR G4IQW G4IRN G4IRN/P G4IUA G4IUF G4IUP G4IWO G4JBA G4JFS G4JGV G4JKZ G4JTR G4JZR G4KEE G4KFT G4KGL G4KHG G4KHM G4KIU G4KMH G4KRJ G4KRN G4KXQ G4L G4LDL G4LDS G4LJU G4LKD G4LMX G4LNG G4LPD G4LQF G4LRG G4LWB G4LYM G4MDR G4MEM G4MKP G4MKR G4MLA G4MRS G4MUL G4MYN G4NAQ G4NDM G4NFS G4NKU G4NLA G4NQQ G4NTW G4NVR G4NXG G4NXL G4OBB G4OCO G4OGB G4OJB G4OJY G4ONG G4OTU G4OTV G4OWT G4PEF G4PEL G4PEO G4PIQ G4PKP G4PKT G4PLX G4PLY G4PNC G4POF G4PTJ G4PWA G4R G4RCD G4RCG G4RFR G4RGK G4RKO G4RLS G4RQI G4RRA G4RRM G4RUW G4SGI G4SGX G4SHF G4SIE G4SJG G4SJX G4SKO G4SOF G4SQA G4STH G4SXR G4TGK G4TJJ G4TLS G4TNI G4TPH G4TSH G4TTF G4TVR G4U G4UDU G4UEL G4UFK G4UFU G4UQB G4UZN G4VFG G4VLC G4VMX G4VPD G4VPT G4VVP G4VXE G4VXU/P G4VZO G4WAC G4WBV G4WGE G4WGE/P G4WGR G4WIA G4WJM G4WKT G4WQI G4WSM/P G4WUG G4WXZ G4X G4XBG G4XEE G4XEX G4XJN G4XPE G4XRO G4XRV G4XRX G4YAQ G4YCS G4YDM G4YOH G4YPV G4YRR G4ZCG G4ZCS G4ZFE G4ZGP G4ZIB G4ZOB G4ZOY G4ZTR G4ZUS G4ZVB G4ZWY G50FRS G5BBL G5CL G5D G5E G5KC G5L G5LP G5N G5O G5TO G5U G5W G5XV G5XV/P G6A G6AY G6BDV G6BDV/P G6CHD G6CSY G6DZH G6EVD G6GLP G6IVB G6M G6MC G6MC/P G6MUX G6MXL G6NHU G6NUM G6NYG G6OKU G6PZ G6SFP G6T G6UBM G6UQ G6UWK G6UYG G6VMR G6X G6YB/P G6ZLA G7AFM G7AGZ G7APD G7APP G7ARK G7BHU G7BXG G7BXU G7BZD G7CQW G7DEY G7EGN G7GMD G7GPL G7HJX G7ICV G7IXU G7KXZ G7MFR G7MJX G7MUE G7N G7NAL G7NEH G7NIB G7NKS G7O G7OBP G7OOT G7PVZ G7RAU G7RHF G7RIS G7RTI G7SOZ G7SQW G7SSE G7TPL G7TWC G7UHN G7UOU G7VJI G7VJR G7VTU G7Y G8AFN G8AJM G8AKL G8APB G8ATV G8BCG G8BMP G8CKT G8CLY G8CMU G8CRB G8DQP G8DX G8ERJ/W4 G8ETD G8EVR G8FC/P G8FIE G8FMC G8FMJ G8FUJ G8FXD G8GD G8GHD G8GNI G8GRS G8GXP G8HBA G8HBS G8HGN G8HGP G8HOD G8HXE G8IBO G8IC G8JXV G8JYV G8KEK G8KEK/P G8KQW G8MIA G8MM G8N G8NVX G8P G8QR/P G8RZ G8T G8TIM G8TMV G8TPX G8UBJ G8VPE G8WGP G8WWI G8X G8XTJ G8XXJ G8YIG G8YTF G8ZRE G8ZSG G8ZZL G9F G9V G9W GA0AXY GA1BSG GA1J GA3TAL GA3WUX GA3YOR GA3YTS GA4AFF GA4FDM GA4JYB GA4NNC GA4UBJ GA4ZNC GA5CX GA5M GA6NX GA8VL GB100MFA GB2GM GB2GP GB3RS GB5CC GD05CW GD0AMD GD0IFU GD0TEP GD3TNS GD3TTC/P GD3YUM GD4EIP GD4IHC GD4RFZ GD6IA GI0AIJ GI0DPV GI0JHR GI0KVQ GI0MXT GI0OTC GI0RQK GI0SSA GI0THZ GI0UQK GI0UVD GI1GKI GI1RXL GI3FFF GI3KVD GI3NVW GI3OQR GI3SG GI3WWY GI3XRQ/P GI4AAM GI4BQI GI4BTG GI4DOH GI4DYE GI4EBS GI4FUE GI4FUM GI4JTF GI4MBM GI4NFH GI4NKB GI4OWA GI4RKC GI4SJQ GI4SNA GI4SZW GI4VKS GI4XIR GI5I GI5O GI6K GI7AXB GI7VXC GJ0KYZ GJ2A GJ3YHU GJ6TMM GJ6WRI GJ6YB GJ7DNI GM0ADX/P GM0AXY GM0B GM0BKC GM0CDV GM0EEY GM0EEY/P GM0EGI GM0EKM GM0ELP GM0EWX GM0FGI GM0FSV GM0GAV GM0HJV GM0HKS GM0IJD GM0JHE GM0KTO GM0KWW GM0LIR GM0LVI GM0MNV GM0NAI GM0NBM GM0NKX GM0OAA GM0OBX GM0OGN GM0OQV GM0RLZ GM0RML GM0UDL GM0UUB GM0VRP GM0WED GM1BSG GM1C GM1DSK GM1J GM1TBW GM2MP/P GM2T GM2V GM2Y GM3BSQ/P GM3C GM3D GM3F GM3FDN GM3JKS GM3JOB GM3MQO GM3MZX GM3NHQ GM3OXX GM3POI GM3PPE GM3PPG GM3RWF GM3SEK GM3TAL GM3TCW GM3W GM3WIJ GM3WIL GM3WOJ GM3WUX GM3X GM3YBQ GM3YEH GM3YOR GM3YTS GM3ZRT GM4AFF GM4AGG/P GM4AGL GM4AUP GM4BOA GM4CHX GM4CXM GM4DLU GM4EOU GM4EVS GM4FDM GM4HQF GM4HRJ GM4JOJ GM4JR GM4KGK GM4LER GM4NNC GM4O GM4OSS GM4S GM4SID GM4SLV GM4SLY GM4SQM GM4UBJ GM4ULS GM4UQG GM4UYE GM4UYZ GM4VGR GM4WCE GM4WZG GM4X GM4XLU GM4YSN GM4YXI GM4ZJI GM4ZUK GM5A GM5C GM5M GM5N GM5O GM5X GM6C GM6NX GM6VCV GM6X GM7A GM7GRK GM7NNS GM7R GM7TFN GM7TUD GM7V GM7VCV GM7VSB GM7WCO GM8FFX GM8IEM GM8M GM8OEG GM8SBH GM9N GS4AAF GS8VL GT8IOM GU/WJ2O GU0SUP GU0UVH GU3HFN GU3UOQ GU4CHY GU4EON GU4RUK GU4YBW GU4YOX GU6EFB GW0A GW0ANA GW0AVW GW0BBO GW0EGH GW0ETF GW0FEU GW0GEI GW0HYU GW0IRT GW0IRW GW0NCU GW0RYT GW0TAU GW0UDJ GW0UZK GW0WGK GW1CJJ GW1FKY GW3KDB GW3KGV GW3KJW GW3LEW GW3LNR GW3NAS GW3R GW3SFC GW3UOF GW3XCR GW3XHG GW3XRM GW3YDX GW4AYJ GW4BKG GW4BLE GW4BNJ GW4BVE GW4BZD GW4CQZ GW4DVB GW4EVX GW4GNY GW4HBK GW4HDF GW4HSH GW4J GW4MVA GW4NOO GW4OGO GW4OKT GW4RDW GW4SKA GW4TPG GW4TSG GW4ZAR GW4ZPL GW5NF GW5R GW6J GW6JBN GW6W GW7ERI GW7O GW7X GW8JLY GW8K GW8KBO GW8VUG GW9T GW9X GX0FUN GX1WAC GX2HW GX4HRC GX4ODR GX4WSM GX5XV GX6UQ GX8HRC GZ3F GZ5Y H27A H2T H2X H44MS H70ORO HA/DL2GK HA/KD0RYB HA0BR HA0DR HA0DU HA0GK HA0HV HA0HW HA0IH HA0IL HA0IR HA0IT HA0LC HA0LP HA0LW HA0LZ HA0MK HA0ML HA0MO HA0MS HA0NAR HA0RZK HA1A HA1AD HA1AG HA1BC HA1DAE HA1DQ HA1DRP HA1LD HA1NR HA1RB HA1RJ HA1SN HA1SS HA1TAB HA1TI HA1TNX HA1TO HA1TV HA1VG HA1WA HA1WD HA1XY HA1ZH HA1ZN HA1ZZ HA2D HA2DX HA2EBE HA2EQD HA2ERO HA2ESM HA2G HA2MI HA2MM HA2MN HA2NA HA2NK HA2NM HA2OS HA2PP HA2QW HA2RQ HA2SG HA2SP HA2VH HA2VR HA30M HA30S HA3DX HA3FHH HA3FMR HA3FOK HA3FTA HA3FUK HA3FUP HA3FZ HA3GO HA3HK HA3HO HA3HX HA3HZ HA3JB HA3JO HA3JO/P HA3KHB HA3KNA HA3LI HA3LN HA3MG HA3MN HA3MQ HA3MU HA3NU HA3OD HA3OK HA3OS HA3OU HA3OV HA3PT HA3PV HA3PW HA3RJ/P HA3UU HA3YE HA3ZS HA4AA HA4FY HA4KYV HA4N HA4RZ HA4UC HA4XH HA4YF HA4YH HA5AB HA5AGP HA5AGS HA5AO HA5AQ HA5ARX HA5AWT HA5BA HA5BGG HA5BGL HA5BSW HA5BWW HA5CE HA5CJN HA5CLF HA5CRT HA5DDX HA5DE HA5EBP HA5FA HA5FM HA5GO HA5GY HA5HG HA5JI HA5JP HA5KDQ HA5KDR HA5KDX HA5KN HA5KY HA5LC HA5LV HA5LW HA5MA HA5MI HA5MK HA5MO HA5MY HA5N/P HA5NB HA5NP HA5NR HA5OAF HA5OM HA5OO HA5OT HA5OV HA5OW HA5PP HA5PT HA5SEA HA5T HA5TI HA5UA HA5UK HA5VJ HA5VZ HA5W HA5WA HA5X HA5YA HA5YG HA5ZG HA6FQ HA6I HA6IAY HA6IGM HA6NF HA6NL HA6NN HA6NW HA6NY HA6OA HA6OL HA6ON HA6OZ HA6P HA6PJ HA6VA HA6VB HA6VH HA6VR HA6VV HA6VW HA6WT HA6ZFA HA7A HA7AP HA7AVU HA7GN HA7HQ HA7I HA7JJS HA7JQK HA7JTR HA7KRE HA7LW HA7MB HA7MS HA7MW HA7NB HA7NK HA7PL HA7PO HA7RY HA7SBQ HA7SG HA7UI HA7UL/P HA7UW HA7XL HA7ZT HA8A HA8AR HA8AT HA8BE HA8BT HA8CQ HA8DM HA8DT HA8DU HA8EK HA8EN HA8FK HA8FM HA8FY/P HA8GY HA8IB HA8IE HA8IH HA8ITU HA8JP HA8JV HA8KW HA8LLK HA8LMZ HA8LNN HA8MD HA8MT HA8MV HA8QB HA8QC HA8QZ HA8RM HA8RT HA8SA HA8TI HA8TJ HA8TKS HA8TP HA8TQ HA8UT HA8V HA8VK HA8VV HA8VX HA8WZ HA8XF HA8XP HA8ZB HA9KPZ HA9MDN HA9PP HA9RC HA9RP HA9RT HA9SB HA9SU HA9TA HB0/DF4SA HB0/DL2JRM HB0/DL5YM HB0/HA7JTR HB0/HB9CVQ HB0/HB9LCW HB0/PC5A HB0A HB0CC HB0HQ HB0TW HB0WR HB14SAF HB2C HB2K HB2T HB30OK HB3YDW HB3YFC HB3YGD HB3YGG HB3YHH HB3YKU HB3YLB HB3YLH HB3YMO HB3YNS HB3YOJ HB3YYD HB3YYG HB40VC HB4FL HB65AG HB90IARU HB9AA HB9AAI HB9AAL HB9AAZ HB9ABO HB9ACA HB9AEP HB9AFH HB9AFI HB9AGA HB9AGN/P HB9AGO HB9AGU HB9AII HB9AIY HB9AJG HB9AJM HB9AJP HB9ALH HB9ALM HB9ALO HB9AMO HB9ANM HB9AOF HB9AQA HB9ARF HB9ARK HB9ARL HB9ARY HB9ASZ HB9ATX HB9AUK HB9AUS HB9AVK HB9AW/P HB9AWS HB9AYQ HB9AYX HB9AYZ HB9AZZ HB9BAS HB9BHD HB9BHW HB9BIQ HB9BJJ HB9BJL HB9BLQ HB9BMY HB9BOS HB9BPX HB9BQP HB9BRU HB9BS HB9BSL HB9BTI HB9BTQ HB9BUN HB9BWE HB9BXE HB9BXQ HB9BXU HB9CA HB9CAL HB9CAT HB9CBR HB9CDC HB9CEY HB9CGL HB9CGW HB9CIC HB9CIN HB9CIP HB9CNU HB9CNY HB9CPS HB9CQL HB9CRO HB9CRV HB9CSM HB9CTU HB9CVQ HB9CXK HB9CXZ HB9CYT HB9CYV HB9CZB HB9CZF HB9CZR HB9DAI HB9DAX HB9DCL HB9DCM HB9DCO HB9DD HB9DDE HB9DDO HB9DDS HB9DDZ HB9DEN HB9DES HB9DFD HB9DFI HB9DHG HB9DNZ HB9DOI HB9DOS HB9DPQ HB9DQL HB9DQP HB9DRM HB9DRS HB9DRT HB9DSE HB9DSY HB9DUR HB9DUS HB9DVH HB9DVT HB9DVZ HB9DWR HB9EBC HB9EDI HB9EDN HB9EDU HB9EE HB9EFJ HB9EGA/P HB9EHJ HB9EHP HB9EHV HB9EI HB9EKH HB9EKY HB9ELD HB9ELF HB9ELV HB9EMS HB9ENI HB9EOE HB9EOU HB9EP HB9EP/P HB9ERU HB9ESS HB9ETH HB9ETR HB9EUK HB9EVF HB9EWY HB9EXP HB9EYP HB9F HB9FA HB9FAI HB9FAP HB9FAQ HB9FAX HB9FBD HB9FBG HB9FBL HB9FBM HB9FBP HB9FBS HB9FBU HB9FDJ HB9FEC HB9FEU HB9FEX HB9FEY HB9FG/P HB9FGN HB9FHV HB9FKK HB9FKL HB9FLE HB9FLU HB9FLX HB9FMJ HB9FMN HB9FMU HB9FPS HB9FR HB9FRA HB9FRV HB9FT HB9FUX HB9GR HB9H HB9HFN HB9HLI HB9HLM HB9HQ HB9HQA HB9HQX HB9HRS HB9HVG HB9IAB HB9IIO HB9IIY HB9IJJ HB9IK HB9IQB HB9IQY HB9IRF HB9JCI HB9JNM HB9JW HB9KAM HB9KAR HB9KBB HB9KNY HB9KOG HB9LB HB9LCW HB9LL HB9LL/P HB9LUG HB9MCF HB9MEJ HB9MHR HB9MM HB9MXY HB9ND/P HB9O HB9OAB HB9ODK HB9ODP HB9OK HB9ON HB9OQ HB9PJT HB9PKP HB9PLW HB9PNR HB9PUE HB9QA HB9QR HB9RB HB9RDD HB9RJD HB9RJG HB9RLW HB9ROX HB9RVE HB9SLO HB9SPV HB9TJR HB9TLM HB9TMW HB9TNW HB9TOC HB9TOX HB9TPT HB9TRR HB9TRT HB9TRY HB9TSE HB9TSI HB9TST HB9TSW HB9TUD HB9TUL HB9TUO HB9TVF HB9TWY HB9TXE HB9VID HB9VZ HB9WDF HB9WDY HB9YBQ HB9YC HB9ZCF HB9ZE HB9ZS HB9ZY HB9ZZ HC0E HC1GVT HC1HC HC1JQ HC1MD/HC2 HC1PF HC1WDT HC2AO HC2AO/8 HC2AQ HC2IMP HC2SL HC2TWA HC5EG HC5F HC5T HC5TT HC5VF HC5WC HC6PE HD2A HD2GRC HD2RAE HD2T HE200GE HF0BEM HF0S HF0WFF HF1D HF1MTGB HF1T HF1Z HF200P HF2014PNM HF3A HF3T HF3TH HF450S HF5V HF60KMH HF6K HF6T HF85PZK HF8E HF8LOS HF90IARU HF9LOS HF9Q HG0A HG0HQ HG0M HG0NPJ HG0R HG10CC HG140JLO HG1A HG1G HG1ITU HG1R HG1S HG1T HG1VN HG1W HG20JASZ HG2A HG2UK HG2W HG30CW HG3DX HG3FMZ HG3IPA HG3M HG3R HG3TAD HG3X HG4F HG4I HG4W HG50IPA HG5A HG5C HG5D HG5DX HG5N HG5O HG5P HG6C HG6IA HG6N HG6T HG6V HG6Y HG72QRP HG7HQ HG7JEC HG7T HG7WAV HG8C HG8DX HG8K HG8N HG8R HG8U HG8W HG8YKO HG90IARU HG9PD HH2/N3BNA HH2/PY3SB HH2B/W4 HH5/KC0W HI/K8MR HI0UD HI3/DL4NAC HI3/KC1XX HI3/NP3J HI3A HI3CC HI3EPR HI3K HI3LFE HI3TEJ HI3TT HI7SBR HI8A HI8CR HI8EFS HI8GPR HI8JSG HI8K HI8KW HI8LAM HI8LEZ HI8PLE HJ4DLO HJ4GJO HJ4ZJS HK0A HK1ANP HK1MK HK1MW HK1N HK1NA HK1R HK1T HK1X HK3C HK3CW HK3DC HK3EU HK3JJB HK3JJH HK3LR HK3O HK3Q HK3TK HK3TU HK3TY HK3UA HK3VHZ HK3W HK3ZD HK4CM HK4CMB HK4DLO HK4GOO HK4KM HK4L HK4R HK4SAN HK4T HK6CF HK6F HK6NVV HK6P HK6R HK6SNJ HL0A HL0K HL1/WX8C HL1BDH HL1IWD HL1LUA HL1OSB HL1OYF HL1VAU HL1VAU/4 HL1ZAI HL1ZBC HL2AVK HL2AVS HL2BM HL2CFY HL2DBP HL2DC HL2DNU HL2IFR HL2KV HL2KXT HL2LTX HL2UOK HL2VA HL2VXK HL2WP HL2ZBD/3 HL2ZED HL3AMO HL3EHK HL3EPH HL3EQG HL3IUA HL4CBI HL4CBX HL4CCM HL4CDA HL4CEL HL4CHH HL4CKT HL4DAW HL4RBR HL5/LA8JKA HL5BCL HL5BLF HL5BLI HL5BMX HL5FAM HL5FKP HL5FUA HL5JCB HL5UOG HL5YI HO1C HO2C HP1/IZ6BRN HP1A HP1AC HP1CQ HP1RN HP2/IK5RUN HP2AT HP2BWJ HP3/NL8F HP3RJC HP3RJC/HP1 HQ2W HR1/K2LCT HR1AAB HR1RTF HR2J HR2WW HR5/F2JD HR9/K6TOP HS0AC HS0OAG HS0ZAR HS0ZBS HS0ZCW HS0ZDG HS0ZDR HS0ZDX HS0ZDY HS0ZEE HS0ZFQ HS0ZGL HS0ZGQ HS0ZGV HS0ZHC HS0ZIA HS0ZIN HS0ZIU HS0ZIV HS0ZJT HS0ZKG HS0ZKX HS0ZLE HS0ZLM HS0ZLN HS0ZLU HS0ZLW HS1FVL HS1NIV HS3ANP HS3LSE HS3XVP HS4AK HS4DDQ HS4ROI HS4SSP HS50RAST HS5AC HS5FAI HS5NMF HS5SRH HS6ZBQ HS7BHK HS7WMU HS8FLU HS8GLR HS8JWH HS8JYX HT5T HV0A HZ1A HZ1BW HZ1DG HZ1DG/P HZ1FI HZ1HN HZ1HZ HZ1OS HZ1PS HZ1SK HZ1SM HZ1TL HZ1TT HZ1XB I0/S53R I0/YO7LKW I0AAF I0ABK I0APN I0AYU I0BYR I0CMD I0FSP I0GIA I0GOD I0GOJ I0HJN I0HOU I0JBL I0JX I0KHY I0KIB I0KMJ I0KNQ I0LYO I0MLU I0MOM I0NNY I0QGR I0SNY I0UZF I0WBX I0YQV I0ZUT I1/IK2DKX I1ABT I1ANP I1BEP I1BPU I1CCA I1CHC I1COB I1DXD I1EIS I1ENN I1FBJ I1FLC I1FQH I1HJP I1HJT I1JHS I1JQJ I1JTQ I1LGR I1MRH I1NVU I1OQI I1PLX I1POR I1QQC I1RB I1REG I1RJP I1SWI I1TXD I1VDM I1WKN I1WQR I1WXY I1XPQ I1YGQ I1YRL I1ZDW I1ZEU I2ADN I2AZ I2BJS I2BPP I2BZN I2CZQ I2DJX I2EAY I2GPT I2HXO I2IAL I2IFT I2IOJ I2JIN I2JSB I2KBD I2KBO I2MHR I2MOV I2MQP I2NCE I2NKR I2ORX I2PEI I2PJA I2RBR I2RHR I2RNJ I2ROO I2RTF I2RVW I2SIA I2SVA I2TAO I2TFJ I2TZK I2UVZ I2VGW I2VRN I2VXJ I2WDB I2WEQ I2WIJ I2WSG I2XBO I2XIP I2XLF I2YPY I2YYO I2ZIU I2ZZU I3/IT9STX I3BBK I3BQC I3BUI I3CRW I3EJ I3EVK I3FDZ I3FGX I3FIY I3GWE I3JFU I3JKI I3JRF I3JSS I3JUK I3KAN I3LGP I3LTT I3PVB I3PVE I3PXN I3QDK I3QKO I3SY I3THJ I3TXQ I3VAD I3VJW I3VRD I3VWK I3WXX I3YEG I3YYY I3ZSX I4/HB9ZAG I4/UA4Z I4AUM I4AVG I4BMJ I4CEA I4DVT I4DZ I4EUM I4EWH I4FGG I4GAD I4GAS I4GYG I4HRH I4IKW I4JED I4JEE I4JUQ I4KDJ I4KMN I4KRF I4KYO I4LCK I4LEC I4MNY I4PZP I4QHD I4TJE I4USC I4UUL I4VDZ I4VEQ I4VIL I4VJC I4VOS I4XNN I4YCE I4YEY I4YFY I4YUG I4YYC I4ZGI I4ZQS I4ZSQ I5/IZ2RPJ I5DOF I5ECW I5EFO I5FCK I5FIP I5GJK I5JFG I5JRR I5KAP I5KG I5NQO I5NSR I5NZH I5OYY I5REA I5RFD I5SDG I5SKK I5SOD I5SQM I5WNN I5YDI I5YKQ I5ZUF I6CBI I6CXD I6FDJ I6FLD I6FPN I6JEI I6NO I6PZ I6WJB I7CSB I7OEB I7PHH I7PXV I7SWX I7WL I8DVJ I8IEQ I8IGS I8IUD I8JIT I8KCI I8KFR I8KRC I8MSY I8OHQ I8QJU I8QLS I8UZA I8VAX I8YAV I8YGZ IA5/IV3LZQ IB1B IB1G IB1W IB2A IB2P IB2T IB3A IB3C IB3V IB3X IB5T IB9O IB9T IC8AJU IC8BNR IC8FBU IC8FEM IC8OZM IC8POF IC8SQS IC8TEM IC8XIL IF9/IT9BXR IF9/IT9PPG IF9/IT9WDC IF9A IG9/I2ADN IG9R IG9W IG9Y IH9A IH9B IH9R IH9YMC II0C II0HQ II0I II0K II0X II1A II1H II1IGG II1RT II1TLA II2A II2E II2EXPO II2I II2S II2V II3D II3I II3M II3W II3Z II4A II4CDN II4I II4K II5COTA II5D II5E II5P II6T II7K II7M II9K II9P II9W IK0ALH IK0BAL IK0BGA IK0BZE IK0CHU IK0CNA IK0EBA IK0EFR IK0EIE IK0ESW IK0FMB IK0FUX IK0FVC IK0GDG IK0HBN IK0HTP IK0IKE IK0ISD IK0IXI IK0IXO IK0JFW IK0JMT IK0JNI IK0LNN IK0MIB IK0MPI IK0OKY IK0OPS IK0OZD IK0PAV IK0PEA IK0PHY IK0PRG IK0PRP IK0PXC IK0PXD IK0RCY IK0RNR IK0SOR IK0SXU IK0TUM IK0TWN IK0UKS IK0UTM IK0UXO IK0VKL IK0VQL IK0VSY IK0VTG IK0VVE IK0VVG IK0WHN IK0WRB IK0XBU IK0XBX IK0XCB IK0XFD IK0YGJ IK0YUO IK0YUT IK0YVV IK0ZIO IK1ADH IK1AZK IK1BBC IK1BHS IK1BPL IK1BXN IK1CCS IK1DPA IK1DQW IK1EZC IK1FLE IK1FXX IK1GKD IK1GKH IK1HFY IK1HJQ IK1HJS IK1HZZ IK1IXG IK1IYU IK1JJM IK1JNF IK1JTQ IK1LJO IK1LYQ IK1MEG IK1MNG IK1MVX IK1NEG IK1NEW IK1ODS IK1OXF IK1PKH IK1PMR IK1QFP IK1QHB IK1QLD IK1RAE IK1RAG IK1RGK IK1RIM IK1RKU IK1RQQ IK1SOW IK1SPR IK1TAZ IK1TTD IK1TWC IK1UGX IK1UUU IK1VDN IK1VEK IK1VHR IK1WGZ IK1XPK IK1YDB IK1YED IK1YEK IK1YHZ IK1ZFO IK1ZNL IK1ZNU IK1ZOE IK1ZOF IK1ZVJ IK2AHB IK2AHR IK2AIT IK2ANI IK2AOO IK2AQZ IK2AUK IK2AVH IK2BCP IK2BDR IK2BUF IK2CAW IK2CFD IK2CIO IK2CKR IK2CLB IK2CMN IK2CZQ IK2DED IK2DFZ IK2DJV IK2DKX IK2DPP IK2DZN IK2EAD IK2EBP IK2ECC IK2EGL IK2EKO IK2FDV IK2FIL IK2GPQ IK2GRA IK2GSN IK2GWH IK2GZU IK2HAB IK2HKT IK2HLM IK2IKW IK2ILH IK2IQD IK2JUA IK2JUB IK2LFF IK2LOL IK2LTR IK2MKL IK2MPR IK2MXM IK2NCF IK2NCJ IK2NNI IK2NUX IK2ODD IK2OFS IK2OHG IK2OLD IK2OVC IK2OVT IK2PFL IK2PZC IK2QCF IK2QEB IK2QEI IK2QIK IK2QIN IK2QLX IK2QPR IK2REA IK2RLS IK2RPE IK2RZG IK2RZP IK2RZQ IK2SAI IK2SAR IK2SAU IK2SBB IK2SGB IK2SGF IK2SGL IK2SND IK2SOE IK2SYK IK2TDK IK2TDM IK2TDR IK2TKX IK2TTJ IK2TYL IK2UCK IK2UEC IK2UEX IK2UJF IK2UJS IK2ULV IK2UUJ IK2UZQ IK2UZV IK2VFR IK2VTJ IK2VTP IK2VUC IK2VUQ IK2WAD IK2WFJ IK2WFN IK2WJU IK2WPO IK2WSJ IK2WSO IK2WXQ IK2WYI IK2WYW IK2WZM IK2WZV IK2XDE IK2XRJ IK2XRO IK2XRW IK2XSL IK2XYF IK2XYI IK2YCW IK2YDM IK2YFT IK2YGZ IK2YRA IK2YSJ IK2YVI IK2YXB IK2YXP IK2YYL IK2ZEC IK3ACI IK3ASM IK3AVM IK3BVD IK3CST IK3DRO IK3DVY IK3ELC IK3FHO IK3FHP IK3GES IK3GID IK3HAR IK3HHX IK3HZI IK3IUE IK3IUL IK3JBP IK3JLS IK3MLF IK3NGR IK3OBX IK3OCD IK3OGN IK3OII IK3ORD IK3OYY IK3QAR IK3RET IK3SCB IK3SSJ IK3SSO IK3SSW IK3STG IK3SVT IK3TPP IK3TZB IK3UNA IK3UNA/1 IK3VUT IK3VUU IK3VZO IK3XJL IK3XJP IK3XTT IK3XTV IK3XTY IK3ZBM IK4ADE IK4ALM IK4AUY IK4BEI IK4BHO IK4CBO IK4CIE IK4CLF IK4DCT IK4DCX IK4DKO IK4DRR IK4DRY IK4DSP IK4EWX IK4FAL IK4FNC IK4FWF IK4GBU IK4GNI IK4GRO IK4HLQ IK4ICS IK4IDP IK4ISR IK4JQO IK4JQQ IK4JQS IK4MGJ IK4MTR IK4NZD IK4OMU IK4PKK IK4PKL IK4PMB IK4QIB IK4QJF IK4RDP IK4RQE IK4RVG IK4SXH IK4TVP IK4UNH IK4UOA IK4UPB IK4UQA IK4UXA IK4VET IK4VFB IK4VYX IK4WKU IK4WLA IK4WMA IK4WMH IK4XQT IK4YCQ IK4ZGO IK4ZHH IK4ZHV IK5/DL5RDP IK5AFJ IK5AMB IK5BCM IK5BDG IK5BGD IK5BOH/2 IK5BSC IK5CRH IK5CYT IK5DHL IK5EKB IK5EKL IK5FCK IK5FKF IK5FTQ IK5GQK IK5IFH IK5IIS IK5JWQ IK5LPN IK5LWE IK5MEJ IK5ODY IK5OJB IK5ORP IK5PVX IK5PWB IK5PWJ IK5PWN IK5PWQ IK5PWS IK5QPS IK5RLP IK5ROP IK5RUN IK5SRF IK5TBI IK5TTA IK5WGK IK5YJK IK5ZAJ IK5ZQC IK5ZTT IK5ZUB IK5ZWU IK6ARS IK6BAK IK6BMU IK6BSN IK6CSD IK6CWQ IK6DIN IK6DTB IK6EIW IK6EUH IK6FAW IK6FTZ IK6FWJ IK6GPZ IK6GQC IK6GRT IK6GZM IK6HRB IK6IOQ IK6LBT IK6LBV IK6LLJ IK6MNB IK6NUZ IK6OAK IK6PTH IK6PTJ IK6QOO IK6SBW IK6SNR IK6TOS IK6UBX IK6UBY IK6VXO IK7BEF IK7BPV IK7CMY IK7DXP IK7FMQ IK7FPU IK7FVF IK7GFS IK7GUW IK7HPJ IK7HTB IK7IMK IK7JTF IK7JWY IK7LMX IK7LVE IK7MIY IK7MXB IK7NXU IK7RVY IK7UFW IK7UFX IK7WPC IK7XCW IK7XGH IK7XLU IK7XLW IK7XNF IK7YTQ IK8ARF IK8AWH IK8CEP IK8DNJ IK8DYM IK8EJN IK8GJR IK8GYQ IK8GYS IK8HBA IK8HCG IK8HJC IK8INR IK8JDH IK8LIU IK8LVP IK8LXI IK8MRD IK8MYM IK8NBE IK8NRW IK8NSR IK8NWK IK8OFW IK8OJJ IK8OZZ IK8PGQ IK8PXW IK8QQO IK8RJS IK8SCR IK8SDA IK8SEU IK8TEM IK8TEO IK8TNG IK8UND IK8VKW IK8WEC IK8WEJ IK8WEL IK8WSQ IK8YFU IM0DTF IM0FFL IM0FFM IM0QMA IM0SDX IN3ADW IN3AHO IN3ALD IN3ANF IN3AUD IN3BFW IN3BIY IN3BJS IN3BJU IN3BYZ IN3DOV IN3EHR IN3EIS IN3EJM IN3EJN IN3ELZ IN3ENN IN3EOM IN3EOV IN3EQD IN3EQV IN3ERD IN3EYX IN3FCK IN3FHE IN3FOI IN3HDE IN3HUU IN3IJL IN3IKF IN3ISV IN3JJI IN3JRZ IN3KLQ IN3KTL IN3MNS IN3MOD IN3MQT IN3NJB IN3OWY IN3OWY/I2 IN3PEE IN3QBR IN3QGY IN3REZ IN3SJG IN3TEX IN3TLJ IN3TTL IN3UFW IN3VVK IN3VZE IN3XSK IN3XUG IN3YGW IN3YKS IN3ZNR IN3ZWF IO1T IO1X IO2A IO2X IO3J IO3W IO3X IO4C IO4T IO4W IO5O IO7K IO7R IO7T IO7U IO9A IO9Y IO9Z IQ0AP IQ0EF IQ0LT IQ0NU IQ0PG IQ0PG/P IQ0RM IQ0TE IQ0WX IQ1CN IQ1EE IQ1GE IQ1IM IQ1RY IQ1SM IQ1SP IQ1TO IQ1TW IQ2BG IQ2BJ IQ2CF IQ2CJ IQ2CJ/P IQ2CU IQ2DB IQ2DN IQ2DP IQ2LC IQ2LS IQ2MG IQ2MI IQ2PV IQ2UL IQ2VA IQ3BM IQ3ED IQ3GA/P IQ3IY IQ3KU IQ3ME IQ3ME/P IQ3MF IQ3NX IQ3RK IQ3UD IQ3VO IQ3WW IQ4AX IQ4FA IQ4FE IQ4FE/P IQ4RE IQ4RN IQ5AE IQ5GR IQ5JA IQ5PJ IQ5PO IQ5TT IQ6AN IQ6DH IQ7AF IQ7IW IQ7KJ IQ8CS IQ8LR IQ8QX IQ8UW IQ8WF IQ9BT IQ9SR IQ9TP IQ9UI IQ9ZZ IR1G IR1O IR1X IR1Y IR2C IR2L IR2M IR2O IR2P IR2R IR2T IR3C IR3L IR3P IR3Y IR3Z IR4B IR4E IR4L IR4M IR4X IR5A IR6D IR6T IR7A IR7R IR7V IR8C IR8K IR8T IR8W IR9D IR9F IR9P IR9W IR9Y IR9Z IS0/DL5RDP IS0/DL8JJ/M IS0/OM2TW IS0/S50P IS0/S55OO IS0AFM IS0ANU IS0BGL IS0BHY IS0BOY IS0BRQ IS0BSR IS0BZR IS0CDS IS0DCR IS0DDW IS0ECN IS0ESG IS0GQX IS0GRB IS0HQJ IS0IEK IS0IGV IS0ILP IS0LFZ IS0LYN IS0M IS0SSY IS0SZU IS0XBS IS0XDA IS0XGO IT9/IF9ZWA IT9/IZ2WFL IT9/K7RC IT9/LY5W IT9/OL9R IT9/W2RE IT9AAI IT9ACJ IT9AJP IT9AOI IT9AST IT9ATQ IT9AUG IT9AUH IT9AUP IT9AXQ IT9AXZ IT9AZK IT9BCC IT9BDM IT9BDR IT9BGY IT9BID IT9BLB IT9BOR IT9BTI IT9BUN IT9BXR IT9BXZ IT9BYL IT9CAU IT9CDU IT9CFP IT9CHU IT9CJC IT9CKA IT9CLN IT9CLU IT9CLX IT9CML IT9CZJ IT9DBF IT9DEK IT9DFI IT9DGG IT9DKI IT9DSZ IT9DTU IT9DVZ IT9EJP IT9EJW IT9ELT IT9ESI IT9ESW IT9EWR IT9FDR IT9FGA IT9FIQ IT9FRX IT9FXY IT9GNG IT9HBT IT9IGN IT9IMJ IT9INO IT9IZY IT9JDH IT9JOF IT9JPW IT9JQY IT9KCD IT9LED IT9LKX IT9MBZ IT9MUO IT9NOV IT9NVA IT9OPR IT9PKO IT9PPG IT9PQJ IT9PZM IT9QQP IT9RBW IT9RDG IT9RDG/IF9 IT9RGY IT9RKR IT9RWB IT9RYJ IT9RZU IT9SFT IT9SGN IT9SPB IT9SSI IT9STG IT9STX IT9TJH IT9UCS IT9UFP IT9VCE IT9VDQ IT9VPT IT9WDC IT9WKU IT9XTP IT9XUA IT9YAO IT9YBL IT9YHR IT9YVO IT9ZAQ IT9ZIV IT9ZMX IT9ZRU IT9ZTX IT9ZVL IT9ZZO IU0AFL IU0APU IU0APV IU0CNI IU2ABV IU2BDG IU2BJM IU2CBY IU2CIQ IU2CKS IU2CRO IU3AZC IU3BPW IU3BSY IU3BTQ IU3BTY IU3BXP IU3BYV IU4AOS IU4AOY IU4BIP IU4CHE IU4DTV IU5AFC IU5ASA IU5ASL IU5AXT IU5BKR IU5BLZ IU5CJP IU5DBW IU6AKY IU7BSD IU7DUU IU8ADN IU8CNE IU9A IV3/I2GPT IV3AEB IV3AOL IV3ARJ IV3AVQ IV3AZV IV3BCA IV3BGG IV3BTY IV3CGJ IV3CNZ IV3CTS IV3CYT IV3DBT IV3DCZ IV3DDN IV3DLW IV3DLW/P IV3DRP IV3DSH IV3DSO IV3DXW IV3DYS IV3EWO IV3EYC IV3FIV IV3FSG IV3GDE IV3GFL IV3GKY IV3IDP IV3IHF IV3IQY IV3IXN IV3IYH IV3JCC IV3JWY IV3KAS IV3KCB IV3KFB IV3KKW IV3KSE IV3KVC IV3KYQ IV3LNQ IV3MGN IV3MPI IV3MRK IV3MUC IV3NDR IV3NEP IV3NTI IV3NVB IV3NVN IV3ODE IV3OKO IV3ONZ IV3PRK IV3RVN IV3RYP IV3SKB IV3TIQ IV3TMV IV3TRK IV3UHL IV3UT IV3UTV IV3VBM IV3VSN IV3WMI IV3WMS IV3WSV IV3XNF IV3XPP IV3XZG IV3YER IV3YIB IV3YYK IV3ZCS IV3ZXF IV3ZXQ IW0AEN IW0AFS IW0BCF IW0BLW IW0BNW IW0BYL IW0EAC IW0ECV IW0EFA IW0EYT IW0EZW IW0FFK IW0GIV IW0GVG IW0GYC IW0HBY IW0HK IW0HNL IW0HQU/0 IW0QLQ IW0RGN IW0ROT IW0RTW IW0SAF IW0UWE IW1ARB IW1ARK IW1AWH IW1AYD IW1BCO IW1BEF IW1BND IW1CAB IW1CBG IW1CHX IW1CKM IW1CNP IW1DEA IW1DFU IW1FGY IW1FNW IW1FPK IW1FRD IW1FZR IW1GJR IW1PDP IW1PNJ IW1PUR IW1QEA/P IW1QN IW1RGP IW1RGS IW1RHR IW1RHS IW1ROR IW2BAI IW2BNA IW2BZY IW2CAM IW2CNM IW2CTQ IW2CXJ IW2DJN IW2ENA IW2ESL IW2ETR IW2EVH IW2FLB IW2FND IW2FUT IW2HAJ IW2HUS IW2JOP IW2JRV IW2LLA IW2LUU IW2MNT IW2MVM IW2MWC IW2MXY IW2MYG IW2MYH IW2MZX IW2NEF IW2NOY IW2NRI IW2NRT IW2NXI IW3AGO IW3BTR IW3FVZ IW3GID IW3GST IW3GXW IW3HKW IW3HUL IW3HXR IW3IAU IW3IFJ IW3IIP IW3ILM IW3IOD IW3RUA IW3RUA/IT9 IW3SAR IW4AOT IW4BLZ IW4CLJ IW4DFF IW4DQY IW4ECF IW4EGX IW4EII IW4EOI IW5AFV IW5ALG IW5AXW IW5BT IW5DLY IW5ECP IW5EDI IW5EHL IW5EIJ IW5EKR IW5ELA IW6ASD IW6CAE IW6CJM IW6DGJ IW6NFT IW6NZY IW6OXP IW6PWC IW7CZK IW7DMH IW7EBE IW7EEX IW7EGQ IW8AWR IW8BSR IW8CGX IW8DON IW8ELR IW8ENL IW8FFX IW8PQ IW9ABZ IW9BCW IW9DAF IW9FDD IW9FI IW9FIR IW9FRA IW9GRL IW9GTD IW9GYL IW9HIK/3 IW9HRZ IX1BFL IX1CKN IX1CLD IX1IIU IY1GMS IY3A IY4FGM IY7M IY9A IZ0AEX IZ0AIS IZ0ARL IZ0BEE IZ0BNR IZ0BPI IZ0BVU IZ0BXX IZ0CCD IZ0DBA IZ0DXD IZ0DXI IZ0EHL IZ0EIK IZ0EJP IZ0EJP/8 IZ0EUS IZ0EUX IZ0FBN IZ0FKE IZ0FUW IZ0FVD IZ0FVJ IZ0FWD IZ0FWE IZ0FZM IZ0GIY IZ0GRR IZ0GYP IZ0HLY IZ0HQS IZ0ICM IZ0INZ IZ0IRH IZ0KBA IZ0KBR IZ0KEM IZ0LZC IZ0MQN IZ0PAD IZ0PAU IZ0PED IZ0PMV IZ0RPZ IZ0RVI IZ0SPA IZ0TTE IZ0TZI IZ0UIM IZ0UIN IZ0UME IZ0VXY IZ0WIT IZ0XBM IZ0YIQ IZ0ZAB IZ0ZBD IZ1AEL IZ1ANK IZ1ANU IZ1BCS IZ1BNW IZ1BZS IZ1BZV IZ1CJZ IZ1CLA IZ1CRA IZ1DBY IZ1DFG IZ1DGG IZ1DLY IZ1DUI IZ1DXG IZ1DXS IZ1EKR IZ1ERW IZ1FKS IZ1FUM IZ1FYQ IZ1GAR IZ1GCM IZ1GCN IZ1GIP IZ1GLO IZ1GLX IZ1GQI IZ1GRH IZ1GSO IZ1HBC IZ1HDR IZ1HIY IZ1HLU IZ1JKH IZ1JLN IZ1JMN IZ1KGK IZ1KGY IZ1LBG IZ1LGF IZ1LGV IZ1MHY IZ1MKP IZ1MLQ IZ1MRO IZ1NBX IZ1NEZ IZ1NJG IZ1OMY IZ1OSP IZ1OST IZ1PIO IZ1PKV IZ1PLH IZ1PMC IZ1POA IZ1PQL IZ1RDR IZ1RFL IZ1RSS IZ1RYS IZ1SUZ IZ1TEJ IZ1TGH IZ1TMM IZ1TRG IZ1TTR IZ1TUF IZ1UJE IZ1UKA IZ1UKG IZ1USO IZ1WFB IZ1WIX IZ1WTM IZ1WTO IZ1XBB IZ1XGD IZ1YQV IZ1ZHG IZ1ZJO IZ1ZJS IZ1ZKM IZ2ABI IZ2ABN IZ2AJE IZ2AMW IZ2AVK IZ2BHQ IZ2BKA IZ2BKG IZ2BKP IZ2BNV IZ2BQF IZ2BVC IZ2BVL IZ2BVN IZ2BZP IZ2CEF IZ2CPO IZ2CPS IZ2CSX IZ2DII IZ2DJP IZ2DLV IZ2DMV IZ2DPX IZ2DQB IZ2DQD IZ2DVI IZ2EAS IZ2EER IZ2EEV IZ2EIH IZ2EVH IZ2EWM IZ2FLX IZ2FOB IZ2FOS IZ2GIU IZ2GMQ IZ2GMT IZ2GOT IZ2GRG IZ2IPF IZ2IZE IZ2JCD IZ2JNN IZ2JPN IZ2JQP IZ2JTL IZ2KRZ IZ2KTF IZ2KXC IZ2LQD IZ2LTW IZ2MFD IZ2NXF IZ2NYY IZ2NZQ IZ2NZZ IZ2OBS IZ2ODM IZ2ODT IZ2OHL IZ2OOS IZ2PCJ IZ2QBH IZ2QCU IZ2QDC IZ2QGH IZ2QKG IZ2QXG IZ2RPJ/5 IZ2SMQ IZ2SNI IZ2SNY IZ2SQS IZ2SVN IZ2SXZ IZ2SXZ/P IZ2UQC IZ2USP IZ2VAJ IZ2WFL IZ2WMW IZ2WYA IZ2XNY IZ2YAF IZ2YGG IZ2ZPH IZ2ZQP IZ3AYQ IZ3AYS IZ3BJE IZ3BUR IZ3CAR IZ3CKG IZ3CLE IZ3CYT IZ3DVU IZ3DWA IZ3EAW IZ3EAX IZ3EIN IZ3ENH IZ3EOU IZ3ERM IZ3ETC IZ3ETU IZ3GFZ IZ3GGR IZ3GHP IZ3GME IZ3GNG IZ3GNZ IZ3GOG IZ3GOM IZ3GOO IZ3GYS IZ3IBL IZ3IBL/2 IZ3JKI IZ3KGI IZ3KKE IZ3KMY IZ3KSO IZ3KUY IZ3KVD IZ3LEY IZ3LJG IZ3LSZ IZ3LUF IZ3NOC IZ3NVM IZ3NVR IZ3NXA IZ3NYG IZ3NYS IZ3PUR IZ3PZI IZ3QCH IZ3QFG IZ3QHA IZ3SQW IZ3TFL IZ3VCN IZ3VEH IZ3WFD IZ3WSV IZ3WUW IZ3WXR IZ3XAC IZ3XEF IZ3XEP IZ3XNJ IZ3ZFF IZ3ZLE IZ3ZLG IZ3ZLT IZ3ZTZ IZ4AFW IZ4AIB IZ4AIF IZ4AKO IZ4AMS IZ4AYB IZ4BES IZ4BEZ IZ4BOX IZ4BQV IZ4COW IZ4DIG IZ4DIW IZ4DLR IZ4DPV IZ4DTZ IZ4DYP IZ4DYX IZ4DZD IZ4EFP IZ4EKI IZ4FTC IZ4FUA IZ4GOL IZ4GWE IZ4HZA IZ4IFR IZ4IRX IZ4ISC IZ4IST IZ4IZC IZ4JMA IZ4JUK IZ4KJU IZ4MJP IZ4NSV IZ4ORF IZ4ORO IZ4OSH IZ4OSJ IZ4PHH IZ4REF IZ4RWU IZ4RYB IZ4TOA IZ4UEZ IZ4VSD IZ4VYY IZ4WNA IZ4XAI IZ4XHG IZ4YAB IZ4YDF IZ4ZAW IZ4ZBN IZ4ZZB IZ5AHB IZ5ASZ IZ5BLP IZ5BRP IZ5BRW IZ5CMI IZ5CML IZ5CNW IZ5DIY IZ5DKJ IZ5EBL IZ5EKV IZ5EKX IZ5EME IZ5FDD IZ5FDE IZ5FKK IZ5FSA IZ5FSO IZ5GRS IZ5HPQ IZ5HQB IZ5HSK IZ5ICH IZ5ILC IZ5ILD IZ5ILF IZ5ILK IZ5ILU IZ5ILV IZ5ILX IZ5IMD IZ5IOM IZ5IOS IZ5IPC IZ5JLF IZ5JLW IZ5JMZ IZ5LDD IZ5MJO IZ5MKA IZ5MMB IZ5MMQ IZ5MMT IZ5MOQ IZ5MXA IZ5NFD IZ5NRF IZ5NSH IZ5OPX IZ5OQX IZ5PQT IZ5RHU IZ5RKC IZ5RLK IZ5RMO IZ5RVG IZ5TJD IZ5TJZ IZ5UFR IZ5UGE IZ5VCI IZ5VTF IZ5WNW IZ5WPT IZ5WTV IZ5YHD IZ5YLV IZ6AAW IZ6BTN IZ6BXQ IZ6BXV IZ6CLN IZ6DWH IZ6EGX IZ6ERS IZ6FXP IZ6GIG IZ6GSQ IZ6HAO IZ6HYR IZ6LOF IZ6NCN IZ6OUX IZ6RJR IZ6RJR/0 IZ6SFB IZ6TGS IZ6TSA IZ6WLW IZ7AUH IZ7BRC IZ7DJR IZ7DJS IZ7DMT IZ7DOK IZ7ECB IZ7ECL IZ7EUB IZ7FLP IZ7FLQ IZ7FLS IZ7FMI IZ7GLK IZ7GMN IZ7HHO IZ7LJM IZ7NLJ IZ7PDX IZ7QEN IZ7QFQ IZ7SIA IZ7SLF IZ7SLU IZ7UIT IZ7UMS IZ7WCK IZ7WWY IZ7XIB IZ7XMY IZ7XNB IZ7XUQ IZ7XVG IZ7XZJ IZ7ZKR IZ7ZKV IZ7ZKW IZ8AZZ IZ8BFV IZ8BRI IZ8CCW IZ8CGS IZ8CJV IZ8CKY IZ8DBJ IZ8DDL IZ8DFO IZ8DGR IZ8DSX IZ8DUD IZ8DVD IZ8EDL IZ8EEL IZ8EFD IZ8EFE IZ8EFG IZ8EJB IZ8EPX IZ8ESX IZ8EWD IZ8EYP IZ8FAV IZ8FBU IZ8FDG IZ8FFA IZ8FWN IZ8GBT IZ8GCB IZ8GCE IZ8GGF IZ8GNR IZ8GUM IZ8GUQ IZ8HUJ IZ8IBC IZ8IEV IZ8IFL IZ8JFL IZ8JFL/1 IZ8LIP IZ8LMA IZ8MBW IZ8NVV IZ8PPH IZ8QNS IZ8RSO IZ8SFM IZ8SUI IZ8TDP IZ8TXX IZ8UDQ IZ8VBS IZ8VDY IZ8VMV IZ8VYU IZ8WGR IZ8WGU IZ8XFM IZ8XJJ IZ8XLP IZ8XQC IZ8YAA IZ8YBS IZ8YUB J28NC J34G J34J J34O J35X J38GA J38MM J38XX J3A J42CPMV J42T J43TR J47X J49A J49G J52HF J6/AD4J J6/DL7VOG J6/K9AW J67ZF J68FF J69AH J69AZ J69DS J69MV J73A J75D J75KG J75Y J79F J79FC J79L J79MM J79MP J79SB J79WI J79WTA J79X J87GU J88HL JA0AEN JA0AOO JA0AOQ JA0ARF JA0AVS JA0AXV JA0BEE JA0BJY JA0BKX JA0BOV JA0BPY JA0CGJ JA0CIU JA0CJK JA0CL JA0CLB JA0CSJ/1 JA0CUW JA0CVC JA0CXQ JA0DAI JA0DBQ JA0DCB JA0DIN JA0DOM JA0DOW JA0DVE JA0ED JA0EIY JA0ELB JA0ELW JA0EME JA0ENM JA0EOK JA0EPV JA0EQO JA0EVI JA0FIL JA0FSB JA0FSN JA0FVU JA0GCI JA0GCY JA0GJJ JA0HXV JA0IAB JA0IND/1 JA0IOF JA0IXW JA0IZT JA0JHA JA0JQS JA0JWQ JA0KJD JA0LNS JA0LXP JA0MBU JA0MOQ JA0MVW JA0NFP JA0NPQ JA0OSV JA0PE JA0QNJ JA0RUG JA0RXU JA0TEA JA0TX JA0UH JA0UMV JA0UR JA0URR JA0UUA JA0VTK JA0VTK/7 JA1AAA JA1ADN JA1ADU JA1AFI JA1AGE JA1AGG JA1AJK JA1AKL JA1AKR JA1ALR JA1AML JA1ANA JA1ANF JA1ANR JA1AVI/1 JA1AYO JA1AZR JA1AZW JA1BAN JA1BBC JA1BDF JA1BFN JA1BIV JA1BJI JA1BNT JA1BNW JA1BON JA1BOQ JA1BPA JA1BPN JA1BTR JA1BVY JA1BWA JA1BWD JA1BWT JA1CC JA1CCN JA1CCO JA1CCX JA1CFZ JA1CG JA1CHJ JA1CJP JA1CKS JA1CLZ JA1COO JA1COP JA1COU JA1CP JA1CPN JA1CPU JA1CPZ JA1CQD JA1CQK JA1CQT JA1CRA JA1CRJ JA1CTB JA1CTZ JA1CZI JA1DBG JA1DCK JA1DCL JA1DCO JA1DDR JA1DDZ JA1DEU JA1DIO JA1DKT JA1DKU JA1DM JA1DMX JA1DOF JA1DSW JA1DUA JA1DUH JA1DVN JA1DVP JA1DXA JA1ECU JA1ELY JA1EMQ JA1ENX JA1EOD JA1EOG JA1EPJ JA1ERB JA1ETN JA1ETO JA1EYN JA1EZD JA1EZK JA1FCC JA1FCQ JA1FEL JA1FFB JA1FGB JA1FIO/1 JA1FJJ JA1FNO JA1FUI JA1FUY JA1FVE JA1FVJ JA1FVS JA1FWS JA1GC JA1GCA JA1GDM JA1GFB JA1GFD JA1GHH JA1GHR JA1GLE JA1GLM JA1GOL JA1GQC JA1GRM JA1GSG JA1GUC JA1GUH JA1GVM JA1GZV JA1HFY JA1HGX JA1HGY JA1HLR JA1HMK JA1HNW JA1HOE JA1HOM JA1HTD JA1HTK JA1HXJ JA1IAW JA1IAZ JA1IE JA1IFB JA1IHD JA1II JA1IKA JA1ILA JA1ILE JA1IOA JA1IPJ JA1IQV JA1IRH JA1ISA JA1ISJ JA1IST JA1ITX JA1IVY JA1IXY JA1IZ JA1IZB JA1IZL JA1IZZ JA1JAN JA1JCF JA1JEX JA1JFT JA1JKG JA1JLP JA1JNM JA1JNR JA1JPM JA1JQY JA1JRK JA1JXT JA1JXU JA1JYS JA1KAW JA1KDU JA1KEB JA1KEG JA1KEV JA1KGV JA1KI JA1KIH JA1KJW JA1KLW JA1KNY JA1KPH JA1KTB JA1KUU JA1KVF JA1KVT JA1KWB JA1KXT JA1KZK JA1KZP JA1LAO JA1LBN JA1LBZ JA1LHH JA1LJF JA1LLG JA1LLN JA1LLY JA1LNZ JA1LPQ JA1LQV JA1LZB JA1LZK JA1LZR JA1MFR JA1MJN JA1MOR JA1MRM JA1MTZ JA1MVK JA1MWF JA1MYW JA1MZM JA1NAQ JA1NBE JA1NCZ JA1NEZ JA1NFD JA1NFM JA1NGD JA1NIR JA1NKV JA1NLC JA1NQU JA1NRH JA1NRQ JA1NSH JA1NUT JA1NVF JA1NWD JA1NWU JA1NZK JA1OGI JA1OGM JA1OHD JA1OHP JA1OJJ JA1OND JA1ORM JA1OSN/7 JA1OTT JA1OVD JA1OWP JA1OYD JA1OYP JA1PCM JA1PFP JA1PI JA1PIN JA1PJS JA1PLT JA1PNA JA1PPJ JA1PPW JA1PRV JA1PTC JA1PTJ JA1PTO JA1PVX JA1QHQ JA1QIF JA1QJE JA1QND JA1QNO JA1QOW JA1QQL JA1QS JA1QVR JA1QWT JA1QXC JA1RAC JA1RDP JA1RGU JA1RKI JA1RNU JA1RPK JA1RQT JA1RRA JA1RTX JA1RUR JA1RYC JA1RZD JA1SCE JA1SGX JA1SHF JA1SIM JA1SJV JA1SKE JA1SKL JA1STY JA1SVP JA1SYI JA1TBX JA1TD JA1TGO JA1TJS JA1TLK JA1TMG JA1TOU JA1TQE JA1TRC JA1TRL JA1TWP JA1UEA JA1UHJ JA1UII JA1UKC JA1UOA JA1UOC JA1UPO JA1UQA JA1USO JA1UTB JA1UTC JA1UTN JA1UTQ JA1UTZ JA1UWB JA1UXC JA1UXJ JA1UXV JA1UZQ JA1VDJ JA1VGV JA1VKI JA1VLK JA1VND JA1VNN JA1VOY JA1VPE JA1VQO JA1VRU JA1VRY JA1VSL JA1VUA JA1VVH JA1VVO JA1VVU JA1VWK JA1VZO JA1WAE JA1WDF JA1WHG JA1WL JA1WLR JA1WPX JA1WQD JA1WQX JA1WRI JA1WSK JA1WSX JA1WTI JA1WTO JA1WWB JA1WWE JA1WWH JA1WWO JA1WXP JA1WZX JA1XCZ/4 JA1XGI JA1XHC JA1XIA JA1XMS JA1XPH JA1XPQ JA1XRA JA1XRH JA1XS JA1XTQ JA1XTQ/1 JA1XUY JA1XXI JA1XZF JA1YEW JA1YGX JA1YKX JA1YNE JA1YPA JA1ZFU JA1ZGO JA1ZGP JA1ZLO JA2AC JA2ACR JA2ADH JA2ADY JA2AEV JA2ANR JA2ATE JA2AXB JA2AYH JA2AYP JA2BAS JA2BAY JA2BCE JA2BDR JA2BHG JA2BHQ JA2BIV JA2BJW JA2BMW JA2BNN JA2BQX JA2CKT JA2CQD JA2CRT JA2DAY JA2DGQ JA2DGQ/3 JA2DHF JA2DNA JA2DO JA2DPQ JA2DXD JA2DZQ JA2ELH JA2EOX JA2EPT JA2EZR JA2FBY JA2FGE JA2FGL JA2FJB JA2FJF JA2FJP JA2FLA JA2FMN JA2FNY JA2FQS JA2FSM JA2FTR JA2FUA JA2FUJ JA2FXV JA2GAL JA2GDH JA2GHP JA2GSD JA2GSV JA2GTW JA2HBK JA2HGF JA2HJP JA2HKC JA2HMD JA2HNP JA2HNR JA2HOL JA2HQZ JA2HXV JA2HYD JA2HZA JA2IBR JA2ICB JA2IFW JA2III JA2IIN JA2IJU JA2INL JA2ITK JA2IVK JA2IXS JA2IYJ/1 JA2JDY JA2JKT JA2JNA JA2JNT JA2JRG JA2JTN JA2JWH JA2KGQ JA2KIY JA2KKA JA2KOG JA2KPV JA2KPW JA2KSI JA2KVB JA2KVD JA2LMA JA2LMY JA2LWA JA2LWO JA2MOG JA2MWV JA2MWX JA2MYA JA2NQG JA2NVM JA2NYU JA2ODB JA2OJ JA2OKX JA2OZI JA2PAC JA2PDQ JA2PEZ JA2PFO JA2PSV JA2PVE JA2QBS JA2QJ JA2QPY JA2QQC JA2QS JA2QVP JA2QXP JA2RJE JA2RPZ JA2SCL JA2STO JA2SWH/1 JA2UFH JA2VHG JA2VHO JA2VKU JA2VNX JA2VPO JA2VQF JA2VSU JA2VUT JA2VZL JA2WIQ JA2WUK JA2XCR JA2XKM JA2XLV JA2XM JA2XYO JA2XZZ JA2YEF JA2YGP JA2YKA JA3AER JA3AHD JA3AHY JA3AIC JA3ALO JA3AOP JA3APL JA3APV JA3ATK/5 JA3AUZ JA3AVO JA3BAW JA3BBG JA3BCT JA3BDP JA3BDS JA3BIN JA3BJZ JA3BLN JA3BOA JA3BOY JA3BQC JA3BRI JA3BUT JA3BVD JA3CCX JA3COA JA3CRO JA3CSZ JA3CZV JA3CZY JA3DAU JA3DAY JA3DAZ JA3DPX JA3DX JA3DXD JA3DXR/1 JA3EAD JA3EBT JA3EGE JA3EGZ JA3ENN JA3EOP JA3EQC JA3ETI JA3EZJ/2 JA3FKP JA3FQO JA3FRI JA3FYC JA3GJQ JA3GN JA3GSM JA3HBC JA3HBF JA3HBG JA3HCC JA3HDM JA3HIL JA3HU JA3HZT JA3IBU JA3IDQ JA3IKG JA3ILI JA3IMC JA3IQU JA3IWB JA3JFT JA3JM JA3JND JA3JOT JA3KDJ JA3KGC JA3KGF JA3KIO JA3KKE JA3KLI JA3KNB JA3KRK JA3KVC JA3KVT JA3KYS JA3LCR JA3LDH JA3LEB JA3LEZ JA3LKU JA3LXH JA3LXJ JA3LXY JA3MAT JA3MEV JA3MIB JA3MIX JA3MQY JA3MVI/1 JA3MZG JA3NFA JA3NJY JA3NOJ JA3NPL JA3NTE JA3NZB JA3OEA JA3OHY JA3OLO JA3OMA JA3OOK JA3PNN JA3POW JA3PQX JA3PRM JA3PYC JA3PYH JA3QCM JA3QOS JA3QQR JA3RAR JA3RAZ JA3RQ JA3RTX JA3RWJ JA3THL JA3TJW JA3TMM JA3TPK JA3USA JA3UVR JA3UWB JA3UWD JA3VGL JA3VOV JA3VPA JA3VQW JA3VUI JA3VXH JA3WFQ JA3WKK JA3WMS JA3WNB JA3WPN JA3XNI JA3XOG JA3YAA JA3YBK JA3YUA JA4AFT JA4AQR JA4AVO JA4AYU JA4BDY JA4BPW JA4BSZ JA4BUA JA4BXL JA4CBX/3 JA4CMW JA4COF JA4CQS JA4CSJ JA4CUU JA4CYZ JA4DC JA4DHN JA4DMB JA4DNC JA4DND JA4DPL JA4DQX JA4DWG JA4DXV JA4DZ JA4ENP JA4ESR JA4EVH JA4EVN JA4EZP JA4FCC JA4FFZ JA4FGD JA4FHE JA4FIQ JA4FJL JA4FSH JA4GCF JA4GQD JA4GWE JA4GXS JA4GXX JA4HIX JA4HXZ JA4IAQ JA4IIJ JA4IOM JA4IRA JA4JBP JA4JBT JA4JY/3 JA4KOR JA4LAZ JA4LKB JA4MMO JA4MOK JA4NQD JA4OK JA4OPW JA4RQO JA4RWN JA4SCQ JA4SRG JA4TOH JA4TUJ JA4UDN JA4VNE JA4VPH JA4XHF/3 JA4XW JA4XY JA4ZA JA4ZCW JA5AQC JA5ATN JA5AUC JA5BEN JA5BIN JA5BVO JA5BXF JA5BZL JA5CBO JA5CBU JA5CDL JA5CEX JA5CN JA5CPJ JA5CUX JA5CVG JA5DPL JA5DQH JA5DVK JA5DWY JA5DX JA5ENO JA5EXW JA5FBZ JA5FDJ JA5FMT JA5FNX JA5GCI JA5GYU JA5INF/1 JA5IU JA5IVG/5 JA5JFK JA5JGV JA5JGY JA5JWQ JA5KPO JA5LEX JA5MXP JA5NNS JA5NSR JA5PWW JA5PXG JA5QYR JA5RA JA5RB JA5RRG JA5RVN JA5SUD JA5TNF JA5TX JA5UBW/3 JA5UFD JA5WIO JA5WNH JA5XPD JA5ZL JA6ACZ JA6AGA JA6AGB JA6AGS JA6AN JA6ARM JA6AVT JA6BDB JA6BEU JA6BGA JA6BMM JA6BVU JA6BWH JA6BZI JA6CDC JA6CM JA6CMQ JA6CNL JA6CNQ JA6CRP JA6CTN JA6CVR JA6CYL/6 JA6DC JA6DH JA6DIJ JA6DJS JA6DSG JA6DTY JA6EFT JA6ELV JA6EMA JA6EML JA6ETS JA6EXO JA6FCL JA6FFK JA6FHF JA6FIO JA6FOD JA6FOF JA6FUV JA6GCE JA6GGD JA6GIJ JA6GMC JA6GPR JA6GVF JA6GXP JA6HLU JA6HMO JA6HOZ JA6HQT JA6HZN JA6IDJ JA6IGO JA6JEW JA6JNF JA6JSY JA6LCJ JA6MQY JA6MWW JA6MYQ JA6NOC JA6OXT JA6PA JA6PJ JA6QDU JA6RCH JA6REX JA6RIL JA6SHL JA6SRB JA6SRB/4 JA6TIT JA6UDI JA6UKY JA6VQA JA6WFM JA6WGI JA6WIF JA6WJL JA6WW JA6XMM JA6XZS/1 JA6ZPR JA7ACM JA7ACV JA7ADV JA7AEM JA7AKH JA7AKW JA7ALK JA7AMK JA7ARW JA7AUM JA7AVG JA7AXB JA7AXN JA7AXP JA7BEW JA7BME JA7BMR JA7BMW JA7BSV JA7BWT JA7BXP JA7BXS JA7BZU JA7CDK JA7CDV JA7CNS JA7COI JA7CPW JA7CUA JA7CVL JA7CZU JA7DFE JA7DNO JA7DOT JA7DSQ JA7DY JA7EDZ JA7EJO JA7EPO JA7ETU JA7EU JA7FAS JA7FDA JA7FEX JA7FFN JA7FLI JA7FTR JA7FVA JA7FYU JA7GAP JA7GBS JA7GDW JA7GFN JA7GLO JA7GUT JA7GYP JA7HB JA7HYS JA7IBJ/1 JA7IC JA7IGN JA7IL JA7IUX JA7JAS JA7JRC JA7JWF JA7KDC JA7KE JA7KED JA7KQC JA7KY JA7LCL JA7LDA JA7LLL JA7LOX JA7MA JA7MBT JA7MFL JA7MJ JA7MOL JA7MQM JA7MSQ JA7MVX JA7MWC JA7MYQ JA7NPV JA7NUM JA7NVF JA7NX JA7NYO JA7ODY JA7OMJ JA7OOO JA7OWD JA7OXR JA7OXR/1 JA7OYF JA7OYM JA7PJC JA7PVK JA7QOU JA7QVI JA7ROM JA7RPC JA7RQK JA7SCC JA7SPJ JA7SSP JA7SUR JA7SUR/1 JA7TJ JA7TYW JA7VEI JA7WNA JA7WND JA7XBA JA7XRH JA7YAA JA7YAB JA7YCQ JA7YRR JA7ZF JA7ZFN JA7ZP JA8ABZ JA8AHA JA8AJE JA8APN JA8AWR JA8AZN JA8BBD JA8BFO JA8BHI JA8BKI JA8BMK JA8BNP JA8BZL JA8CAR JA8CEA JA8CJY JA8CMC JA8CNF JA8COE JA8CTO JA8CTV JA8CXX JA8CXY JA8DCR JA8DFQ JA8DHR JA8DIQ JA8DIV JA8DJY JA8DKJ JA8DMB JA8DNV JA8DWZ JA8ECS JA8EDN JA8EEK JA8EHO JA8EIA JA8EIU JA8EJO JA8EKD JA8EOM JA8EOT JA8EPO JA8FDD JA8FFM JA8FTN JA8FXY JA8GAK JA8GQZ JA8GWK JA8HZJ JA8IAF JA8IDS JA8IJI JA8IYE JA8JCR JA8JLC JA8JTZ JA8KGG JA8KSF JA8KSW/1 JA8KWG JA8KXA JA8LRG JA8NF JA8NFV JA8NKQ JA8NNT/1 JA8NRS JA8NSF/1 JA8QO JA8RRF JA8RSW JA8RWU JA8SNA JA8TGD JA8TR JA8VGQ JA8VL JA8WKE JA8WQ/1 JA8WY JA8XOK JA8XQI JA8YK JA8ZO JA9ABA JA9AGN JA9APM JA9APS JA9AVU JA9BCV JA9BFN JA9BGL JA9BGQ JA9BJS JA9BKU JA9CCG JA9CGW JA9CHI JA9CVY JA9CWJ JA9CZE JA9DJH JA9DKH JA9DTV/1 JA9EEH JA9EJG JA9FAI JA9FHB JA9GEW JA9GGF JA9GLW JA9HIZ JA9IFF JA9IIC JA9IL JA9ILH JA9IWR JA9JFO JA9KBS JA9LJS JA9LNZ JA9LX JA9MAT JA9MGH JA9MMI JA9NFO JA9NOF JA9PPC JA9RO JA9RPU JA9RRH JA9SJI JA9SW JA9TQY JA9YYY JA9ZMQ JD1BIA JD1BOW JE0EHE JE0HUR JE1AAG JE1AEX JE1AHE JE1AJG JE1ALA JE1AON JE1BJT JE1BMJ JE1BQE JE1CAC JE1CKA JE1COB JE1CPB JE1CSW JE1CWQ JE1DNL JE1DRU JE1DVJ JE1EKC JE1EUH JE1FDQ JE1FQV JE1FUX JE1GDY JE1GLP JE1GWO JE1GZB JE1HQE JE1HRC JE1HTV JE1IBI JE1IFV JE1ILP JE1JAC JE1KEY JE1KON JE1LDU JE1LET JE1LFR JE1LFX JE1LOI JE1LPZ JE1LRT JE1LZL JE1MGE JE1MGR JE1MMX JE1MQI JE1NGI JE1NHF JE1NVD JE1OHL JE1OLF JE1ORU JE1PMQ JE1QYI JE1REU JE1RID JE1RID/1 JE1RRK JE1RXJ JE1RZR JE1SGH JE1SHW JE1SLP JE1SPY JE1STF JE1SYN JE1TBU JE1THM JE1TNL JE1TRF JE1TRV JE1TSD JE1VDN JE1VIF JE1VMZ JE1XAD JE1XUZ JE1YEM JE1YKR JE1ZWT JE2BOM JE2CPI JE2DJC JE2DOD JE2DZC JE2EHP JE2EVX JE2FJI JE2FUP JE2GHV JE2GUV JE2HCJ JE2HXL JE2ILG JE2IMX JE2JMV JE2KSM JE2KUC JE2KWM JE2LUN JE2OOQ JE2OTM JE2OTM/3 JE2OVG JE2PCY JE2PMC JE2PQQ JE2PUC JE2QYZ JE2RBK JE2RMH JE2SOY JE2SPG JE2TLZ JE2UFF JE2URF JE2VLG JE2VYM JE2WLD JE2WTX JE3ACU JE3CXJ JE3DJB JE3EDJ JE3EVI JE3EZK JE3GRQ JE3JRA JE3MBW JE3MTQ JE3PCP JE3PDJ JE3PRM JE3RNC JE3TAT JE3UHV JE3USO JE3VRJ JE3WHT JE3WUK JE4ADO JE4CIL JE4JPQ JE4KCN JE4KQH JE4MHL JE4NAN JE4RAL JE4URN JE5DKA JE5DKA/5 JE5JHZ JE6ADE JE6AVT JE6CMG JE6DBI JE6DNN JE6EKC/3 JE6ETN JE6GCC JE6HCL JE6HID JE6HJT JE6JAO JE6JNC JE6KYA JE6NCG JE6OLQ JE6PPI JE6PRM JE6RBL JE6TSP JE6TUP JE6TUU JE6XWR JE7CJL JE7DMH JE7HYK JE7JDL JE7JYE JE7JZT JE7RHT JE7SRK JE7UCS JE7WBI JE8AGX JE8BKW JE8CIC JE8CLT JE8CRA JE8IAS JE8KGH JE8KGH/7 JE8KKX JE8LWZ JE8NTJ JE8PGF JE8TGI JE8URC JE8VZK JE9MBV/9 JE9QMZ JE9WEO JF0EBM JF1AZQ JF1BJD JF1BUT JF1BVG JF1CCH JF1CDX JF1DIR JF1DMY JF1DWJ JF1FLM JF1GUT JF1GYX JF1GZZ JF1HJZ JF1HQC JF1IBZ JF1IRW JF1KFV JF1KIC JF1KIG JF1KMC JF1KML JF1KSF JF1KTO JF1KUR JF1KWG JF1LEO JF1LLB JF1LMB JF1LUT JF1MAD JF1MQS JF1MSI JF1NER JF1NHD JF1NUV JF1NWF JF1NZW JF1OJC JF1OLC JF1OPL JF1OPO JF1OQM JF1PCK JF1PTU JF1PUW JF1PYJ JF1RBU JF1RDH JF1RFZ JF1RPZ JF1RWZ JF1SEK JF1SQC JF1TEU JF1UBQ JF1UOW JF1UOX JF1URP JF1UVJ JF1VNR JF1WCK JF1WNT JF1WQC JF1WRV JF1XJD JF1YRK JF2AIA/4 JF2AIJ JF2BDK JF2CTY JF2DID JF2DND JF2ERJ JF2FIU JF2GWO JF2HPA JF2IKJ JF2IWL JF2IWW JF2JFP JF2KMX JF2KOZ JF2KUU JF2KWM JF2LEX JF2LTU JF2LVM JF2MBF JF2OHQ JF2OZH JF2QNM JF2RLD JF2RYX JF2SQB JF2TOG JF2TSS JF2UEE JF2UPM JF2VHS JF2VVQ JF2WKE JF2WME JF2WXS JF2XGF JF3BFS JF3EIG JF3GFH JF3GFH/1 JF3ITH JF3IYW JF3KNW JF3KOA JF3KON JF3LFL JF3LOP JF3LPD JF3MTM JF3MYU JF3NKA JF3OUQ JF3PGW JF3PLF JF3PNQ JF3PRS JF3QJR JF3QNM JF3RDE JF3ROH JF3SUL JF3UZB JF3VAX JF3VEC JF4IQS JF5GVZ JF6MGC JF6RIM JF6TWP JF6TWP/6 JF6WTY JF6XHS JF7BAO JF7EGJ JF7GDF JF7NXS JF7OJQ JF7PHE JF7VVL JF7XKY JF8EPR JF8QNF JF8WLG JF9BLA JF9JTS JF9KVT JF9MJU JG0EXP JG0GGI JG0LAH JG1AKM JG1APX JG1APZ JG1AUI JG1AVO JG1AVR JG1BGT JG1BVX JG1CFO JG1CYF JG1DLY JG1DWG JG1EGG JG1EIQ JG1ELE JG1FKT JG1FMA JG1FMH JG1GCO JG1GPY JG1GUW JG1GZH JG1HQA JG1HUF JG1IEF JG1IGX JG1ILF JG1ITH JG1IUF JG1LEN JG1LEU JG1LFF JG1LFR JG1LHB JG1LPL JG1LRE JG1MIJ JG1MZS JG1NCL JG1OID JG1OIY JG1OWV JG1PED JG1PST JG1QNV JG1QPZ JG1QZW JG1RET JG1RRH JG1RVN JG1RWM JG1RZH JG1SPS JG1STB JG1SWV JG1SXP JG1TGQ JG1THV JG1TJA JG1TRT JG1TVK JG1UKW JG1ULT JG1UTG JG1UZD JG1VGX JG1VGX/1 JG1VHA JG1WCT JG1WGE JG1WKM JG1WNO JG1WSK JG1XIO JG1XLZ JG1XMV JG2DZM JG2GSY JG2IIY JG2JSZ JG2KKG JG2KNO JG2KUT JG2NLN JG2OTY JG2QUM JG2REJ JG2RFJ JG2RZF JG2SON JG2TAS JG2TKH JG2TSL JG2VLL JG3BXS JG3CKF/1 JG3CQJ JG3DIX JG3EHD JG3EWE JG3FEA JG3FZU JG3GNU JG3IWL JG3KMT JG3KOA JG3LDD JG3LGD JG3MGG JG3MSU JG3QZN JG3RPL JG3RXZ JG3SKK JG3SVP JG3TXD JG3UVN JG3VWI JG3XTK JG4AKL JG4IQC/2 JG4OOU JG5CIP JG5DHX JG5DHX/5 JG5UWK JG6ALR JG6CDH JG6JAV JG6JMQ JG6TXW JG6VMO JG7AFV JG7AMD JG7EHM JG7HRZ JG7MFN JG7PSJ JG7QKA JG7QQA/1 JG7STW JG8FWH JG8IBY JG8NKJ JG8QXB JG8RIT JG8TDZ JG8WBT JG8XTU JH0BQX JH0CCK JH0EPI JH0EQN JH0EXA JH0HDL JH0IEW JH0IEY JH0INE JH0INP JH0JDV JH0KHR JH0KZQ JH0LME JH0MHR JH0MMJ JH0MUC JH0MXV JH0NEC JH0NOS JH0OXS JH0QYS JH0RNN JH0TIS JH0URO JH0WJW JH0WYT JH1ABC JH1ACA JH1AEP JH1AGU JH1AHB JH1AHU JH1AIX JH1AJT JH1ANW JH1APE JH1APK JH1APZ JH1AQN JH1ARX JH1ASG JH1AWJ JH1BCS JH1BHT JH1BHW JH1BNC JH1BQL JH1BYC JH1BZJ JH1CCN JH1CDR JH1CFV JH1CGI JH1CML JH1CMW JH1CNC JH1CRF JH1CTQ JH1CTV JH1DGQ JH1DKP JH1DLD JH1DRF JH1DRS JH1DTX JH1DVG JH1DYU JH1DYV JH1EAQ JH1EBO JH1EEB JH1EFE JH1EGF JH1EGJ JH1EGT JH1EIG JH1EIT JH1EJB JH1EPI JH1ERJ JH1ESB JH1EVD JH1EYM JH1FCV JH1FNU JH1FQW JH1FRR JH1FRW JH1FSF JH1FSL JH1FTL JH1FVE JH1GBO JH1GBZ JH1GCR JH1GDZ JH1GEX JH1GLJ JH1GNU JH1GSQ JH1GTR JH1HDD JH1HDT JH1HGC JH1HGI JH1HIC JH1HIH JH1HJW JH1HLC JH1HRJ JH1HXY JH1HYC JH1HYW JH1IAQ JH1IED JH1IFS JH1IHO JH1ILX JH1IOY JH1IVD JH1IWU JH1JCQ JH1JJV JH1JNJ JH1KIM JH1KLN JH1KMC JH1KOK JH1KPT JH1KRC JH1KWG JH1KYA JH1KZQ JH1KZR JH1LDK JH1LEM JH1LGZ JH1LHV JH1LMD JH1LMG JH1LNL JH1LPF JH1LPZ JH1LSA JH1LTM JH1LZU JH1MDJ JH1MKU JH1MPQ JH1MTR/4 JH1MYI JH1NBN JH1NCZ JH1NHY JH1NOH JH1NPQ JH1NTG JH1NVA JH1NXU JH1NYN JH1OAI JH1OBS JH1OCC JH1OES JH1OEV JH1OGC JH1OGT JH1OHZ JH1OIB JH1OIV JH1OLB JH1OTZ JH1OVY JH1OYB JH1OYH JH1PCE JH1PWF JH1PXH JH1QDB JH1QDF JH1QKG JH1QQN JH1RDU JH1REV JH1RFM JH1RFZ JH1RGG JH1RLT JH1RNI JH1RRP JH1RVQ JH1RYE JH1RZY JH1SAJ JH1SAR JH1SAV JH1SBE JH1SCZ JH1SJN JH1SOD JH1SUU JH1SZL JH1TAR JH1TFE JH1THT JH1TJH JH1TJM JH1TMX JH1TWT JH1TXG/9 JH1UBK JH1UJU JH1URJ JH1URT JH1VHU JH1VIG JH1VIX JH1VMI JH1VMQ JH1VOR JH1VRB JH1VRM JH1VWS JH1VZP JH1WFS JH1WHA JH1WLY JH1WNL JH1WOY JH1WPX JH1WQV JH1XFR JH1XJO JH1XOO JH1XUM JH1XUP JH1XUZ JH1XVE JH1XXB JH1XYB JH1YAK JH1ZHU JH1ZIQ JH2AZW JH2BAX JH2BCW JH2BHR JH2BNL JH2BTM JH2BUF JH2CHT JH2CHY JH2CMH JH2DBQ JH2EQS JH2FXK JH2GAA JH2GSW JH2GZY JH2HUQ JH2JMC JH2JNU JH2KCE JH2KGL JH2KIL JH2KKW JH2LTL JH2MYN JH2NZS JH2OMM JH2PWY JH2QAY JH2RMU JH2RWP JH2SON JH2UPE JH2XMK JH2XQY JH3AIU JH3AWX JH3BFO JH3BHB JH3BUM JH3BYX JH3CBA JH3CCT JH3CFG JH3CTQ JH3CUL JH3DAA JH3DMQ JH3EDG JH3EQP JH3FGI JH3FUK JH3GBD/1 JH3GCN JH3GFA JH3GMI JH3HGH JH3HGI JH3HWL JH3HYT JH3JJS/1 JH3JUB JH3KCW JH3KHS JH3LBD JH3LCX JH3MHI JH3OHO JH3OXM JH3PAS JH3PRR JH3PTC JH3QAX JH3QFY JH3QMF JH3SIF JH3TCC JH3TXR/BY5HB JH3VOU JH3WKE JH3XVQ JH4ADK JH4ADV JH4BTI JH4CES JH4CFK JH4CHV JH4COC JH4CPC JH4DIT JH4EYD JH4FUF JH4FUF/4 JH4GJR JH4GLG JH4GNE JH4IFF JH4JNG JH4KVO JH4LBE JH4LGA/2 JH4LNI JH4MGU JH4OQF JH4OUH JH4PHW JH4PNG JH4PUL/3 JH4PUS JH4RCK/3 JH4RHF JH4RLY JH4RNY JH4RUF JH4SZY JH4UCM JH4UTP JH4UYB JH5ATF JH5AVM JH5FIX JH5FTY JH5FXP JH5GEN JH5HDA JH5IRT JH5KDL JH5MXB JH5PXJ JH5RXS JH6ANO JH6ANR JH6AUS JH6CDI JH6DGE JH6DSR JH6DUI JH6DUL JH6FTJ JH6GYD JH6GYD/1 JH6JMM JH6NBW JH6QFJ JH6QIL JH6RON JH6RTO JH6SCA JH6TYD JH6UNQ JH6UNQ/6 JH6WDG JH6WHN JH6XOD JH7AFR JH7BMF JH7BMU JH7CFX JH7CSU JH7CUO JH7DFZ JH7DHF JH7DUM JH7FMJ JH7FNM JH7FUI JH7FUJ JH7GLT JH7GZF JH7IAJ JH7IMX JH7IOT JH7IPR/6 JH7IQQ JH7IRM JH7IXX JH7JUO JH7NXV JH7OHS JH7PHD JH7PKU JH7QOM JH7QXJ JH7RTQ JH7RXU JH7RXY JH7UBC JH7UFT JH7VHZ JH7WQX JH7XGN JH7XRG JH8AZT JH8BAK JH8BOE JH8CXW JH8DBI JH8DBJ JH8DVH JH8EJA JH8FIH JH8FOR JH8GEU JH8GXN JH8HFC JH8HWA JH8JLI/1 JH8JWF JH8JYV JH8KAK JH8KIY JH8KYU/1 JH8LLE JH8NEJ JH8NQV JH8OCV JH8PNE JH8PNE/1 JH8RNY JH8RXM JH8SGR JH8SIT JH8SLS JH8TRY JH8XVH JH9AUB JH9DRL JH9DRL/9 JH9KVF JH9UDI JH9URT JH9VLZ JH9VUU JI0EJU JI0HYW JI0VWL JI0WVQ JI1AFG JI1AFU JI1ALP JI1ANI JI1AQY JI1AVY JI1BBN JI1BDQ JI1BHO JI1BJB JI1BNU JI1BXD JI1CNA JI1CPN JI1CZK JI1DCW JI1DHY JI1DLW JI1DSU JI1EOE JI1EOY JI1ETU JI1EWK JI1FLB JI1FOE JI1FXS JI1HAC JI1HFJ JI1HKB JI1HNC JI1HSV JI1ICF JI1IXW JI1JPJ JI1KOA JI1KSL JI1KXL JI1LAI JI1LAT JI1LET JI1LIC JI1LNR JI1NGK JI1PBK JI1QIO JI1QNM JI1QWE JI1QZQ JI1RAK JI1RBA JI1RWC JI1RXQ JI1UCL JI1UDD JI1VAH JI1XCE JI1ZJS JI2EQL JI2FYR JI2GCM JI2GZC JI2HVT JI2IWB JI2KLU JI2LAL JI2NFF JI2TKX JI2VLM JI2XIU JI2ZEY JI2ZJS JI3BAP JI3BFC JI3BFC/3 JI3CEY JI3CJO JI3CJP JI3CWI JI3DNN JI3DST JI3FLA JI3FSI JI3GHL JI3JKD JI3KDH JI3KGS JI3KZD JI3MFS JI3MJK JI3OGI JI3OQO JI3SJU JI3WBP JI4HKA JI4UEN JI4VXI JI4WAO JI4WHS JI5BKC JI5DWP JI5KGQ JI5NWQ JI5SKS JI6AJF JI6AVL JI6BEN JI6OXK JI7GYU JI7RRS JI7VNJ JI8BUR JI8NBJ JI8VAY JI8VCS JI8XBG JI8XLD JJ0ACA JJ0JML JJ0KDW JJ0KRD JJ0NCC JJ0NSL JJ0PER JJ0PJD JJ0PTY JJ0QOJ JJ1ALZ JJ1BEA JJ1BMB JJ1CBY JJ1CZR JJ1DJW JJ1DWT JJ1ENZ JJ1EPE JJ1ESL JJ1FDS JJ1HHJ JJ1ILR JJ1IRS JJ1IYE JJ1JGI JJ1KTI JJ1KZZ JJ1LBJ JJ1LWA JJ1MIX JJ1NDP JJ1NYH JJ1NZH JJ1PLS JJ1QLT JJ1RDX JJ1RXC JJ1RZG JJ1SLW JJ1TDX JJ1TJD JJ1UDO JJ1VFE JJ1VJB JJ1VKF JJ1VRO JJ1WPR JJ1WSN JJ1WWL JJ1WWL/1 JJ1XKE JJ1XQU JJ1ZNF JJ1ZXE JJ2CJB JJ2DWL JJ2JQF JJ2LPV JJ2NKX JJ2ONH JJ2PIK JJ2QWN JJ2RCJ JJ2RON JJ2UHR JJ2VLY JJ2YJU JJ2YKK JJ2YNR JJ3DJS/8 JJ3GPJ JJ3JJL JJ3KTW JJ3LLT JJ3SES JJ3TBB/3 JJ3WPX JJ4CDW JJ5ASD JJ5GSY JJ5HUD JJ5IYC JJ5IZX JJ5LLP JJ6CRH JJ6TWQ JJ6WZS JJ7ATA JJ7GCL JJ7RMS JJ7SRA JJ8DEN JK1AII JK1APY/1 JK1BII JK1CYF JK1DLC JK1ECD JK1EXO JK1FFB JK1FNL JK1FUP JK1GKG JK1GMB JK1HCE JK1HIX JK1ILG JK1IQK JK1JUI JK1JXB JK1KFO JK1KSB JK1LSE JK1LUY JK1MZT JK1NJH JK1NSR JK1OAR JK1ODA JK1OLT JK1OPL JK1OXU JK1PQI JK1PWQ JK1SDQ JK1SQJ JK1TCV JK1THF JK1UKQ JK1UNZ JK1UVL JK1UVP JK1VEL JK1VMC JK1VQY JK1WSH JK1WXM JK1XBR JK1XMR JK1YMM JK2AQT JK2EIJ/0 JK2JMC JK2KVV JK2NNF JK2RCP JK2RCP/1 JK2SHZ JK2TTP JK2VOC JK2VQR JK2XJE JK2XXK JK3AGC JK3GEW JK3HFN JK3HFN/6 JK3HLP JK3JTJ JK3NSD JK3RHX JK4KSD JK4USW JK6BQQ JK6JAB JK6SEW JK7BEJ JK7LXU JK7QJK JK7RKF JK7UST JK8NIP JK8NQW JK8PBO JK8TEX JK8USI JK8VPQ JL1BDI JL1BTJ JL1BYZ JL1CHV JL1CWS JL1DLQ JL1EDB JL1EEI JL1EGW JL1EHU JL1ELQ JL1EUP JL1GXO JL1GYL JL1HAN JL1HHN JL1HOV JL1IEO JL1IHE JL1IVG JL1JJD JL1KLG JL1KLK JL1LNC JL1MTY JL1MUT JL1MWI JL1MYP/3 JL1NMB JL1OHO JL1OXH JL1PPS JL1QDO JL1QOC JL1QOR JL1RUC JL1RXW JL1SAM JL1TJM JL1UTS JL1VFZ JL1VVM JL1WDB JL1WPQ JL1XMN JL2CPA JL2LPX JL2OGZ/2 JL2RQH JL2VZJ JL2XMW JL3CRS JL3DGI JL3DQX JL3JRY JL3JTD JL3MCM JL3QJQ JL3RDC JL3RNZ JL3VUL JL3VUL/3 JL4ENS JL4WYY JL6TKN JL6USD JL7CTR JL7MGJ JL7OTC JL7SNM JL8BEL JL8LTI JL8MBF JL8WFI JL8XSO JM1AHX JM1APC JM1ATF JM1BKZ JM1CMA JM1CMA/8 JM1DPL JM1DUI JM1EKM JM1ESG JM1FHL JM1FST JM1FUW JM1GAW JM1GDA JM1IQX JM1JZN JM1KLO JM1KNI JM1LAW JM1LKI JM1LPN JM1LRA JM1LRQ JM1LVN JM1LWY JM1MOM JM1NKT JM1NZJ JM1QBY JM1RPV/1 JM1RSV JM1SBU JM1SMY JM1SOL JM1SZY JM1TEN JM1TWR JM1UTT JM1UWB JM1XCW JM1XTB JM2ABB JM2BBW JM2CAN JM2DRM JM2FCJ JM2LEI JM2LHB JM2MHQ JM2QWQ JM2RUV JM2SVG JM3AAN JM3ERL JM3QIS JM3ROY JM3UGA JM4AHN JM4WUZ JM6EXB JM7EJW JM7OLW JM7SIL JM7UBI JM8BGQ JM8FEI JM8FGC JM8GJB JN1ATL JN1BBO JN1BGP JN1BJX JN1CDB JN1CED JN1CJS JN1CUA JN1DJY JN1ECL JN1GTG JN1IDY JN1ILK JN1JGC JN1JYD JN1KWR JN1MSO JN1NDY JN1NOP JN1NTK JN1NYA/6 JN1OIH JN1PRB JN1RFY JN1SPR JN1THL JN1VFF JN1VXT JN1YRP JN2AMD JN2FMH JN2NOJ JN3DMJ JN3DRB JN3DSH JN3IWQ JN3KST JN3LQP JN3LXJ JN3NPP JN3ONX JN3QNG JN3SAC JN3TMW JN3TRK JN3TSY JN3VQM JN3WPH JN3XEZ JN4ESD JN4HTR JN4MMO JN4THO JN4UUS JN6EPA JN6KDX JN7FAH JN7IIR JN7KRH JN7TAN JO1ABS JO1AEC JO1ALS JO1COV JO1CRA JO1CTH JO1DZA JO1FSW JO1HQC JO1JKH JO1KKD JO1KXP JO1LVZ JO1OEL JO1PYV JO1QNO JO1QZI JO1RMS JO1RUQ JO1SEF JO1SIM JO1UOK JO1WIZ JO1WKO JO1WXO JO1WZM JO1YKX JO1ZTR JO2MHN JO2SLZ JO3AGQ JO3AXC JO3BHE JO3DDD JO3EVM JO3FKS JO3FNR JO3FUO JO3GBD/3 JO3IEE JO3JIS JO3JYE JO3ODY JO3OMA/3 JO3PSJ JO3QVT JO3RCK JO3TAP JO3TGL JO3WHB JO3XCK JO4BIA JO4BOW JO4CFV JO4CTB JO4CYX JO4CZY JO4DIO JO4EUP JO7AJQ JO7BTV JO7GVC JO7HAM JO7KMB JO7MDA JO7SAK JO7WXN JO7XVL JP1AEG JP1DMR JP1EWY JP1EYX JP1FOS JP1FPJ JP1GLV JP1GVC JP1HUJ JP1IMA JP1IOF JP1IXV JP1JFG JP1KOA JP1LRT JP1LVI JP1NDO JP1NWZ JP1PZE JP1QDH JP1SRG JP1TRJ JP1WKO JP3ASW JP3AWA JP3AYQ JP3AZM JP3AZZ JP3BEE JP3DGT JP3DOJ JP3EXE JP3IBB JP3IGU JP3XFX JP6NWR JP6OGP JP7ATF JP7BCL JP7CFP JP7CZE JP7DKQ JP7DKU JP7EBU JP7EIP JP7FSO JP7GRU JP7HLJ JP7IUS JQ1ABC JQ1AHT JQ1BVI JQ1COB JQ1DPP JQ1HYB JQ1IDQ JQ1LPT JQ1NGT JQ1NID JQ1OLT JQ1PCT JQ1PCX JQ1PWC JQ1QGM JQ1QKK JQ1RKI JQ1SRN JQ1SYQ JQ1TAR JQ1TIV JQ1TTB JQ1UGE JQ1VDJ JQ1YER JQ1YIW JQ2GYU JQ2HVN JQ2IQW JQ2OUL JQ2UOZ JQ2VTH JQ3EDK JQ3MWA JQ3PPC JQ3UDL JQ6CAA JQ6CWL JQ6QNQ JQ6QOP JQ6RUP JQ6XAR JR0AMD JR0BQD JR0BUL JR0DZH JR0ELG JR0EQQ JR0ETA JR0GFM JR0GVW JR0GXA JR0JOW JR0MVH JR0WZR JR0YHF JR0ZEW JR1AHQ JR1AIA JR1AKD JR1AQI JR1ARK JR1ATA JR1AUK JR1BAS JR1BFZ/2 JR1BLX JR1BQJ JR1BRS JR1BTG JR1CBC JR1CHR JR1CJD JR1DIU JR1DTN JR1DUF JR1DUP JR1DVB JR1EEU JR1EMO JR1EMT JR1EOD JR1ERU JR1EVO JR1FBA JR1FBX JR1FHP JR1FVI JR1GCN JR1GFX JR1GJP JR1GMK JR1GNB JR1GSE JR1GVP JR1HJB JR1HQR JR1IJV JR1JCB JR1JGA JR1JYR JR1KDA JR1KEI JR1KQU JR1KXS JR1LFT JR1LLD JR1LZK JR1MEG/1 JR1MEU JR1MQT JR1MRG JR1MTS JR1NGL JR1NHD JR1NHI JR1NKN JR1NVJ JR1PST JR1QBA JR1RGV JR1TLD JR1TMP JR1UBR JR1UFN JR1UJX JR1UMM JR1VAY JR1VJH JR1WCT JR1WLR JR1WYW JR1XPH JR1YRI JR2AAN/2 JR2AQN JR2AWS JR2BCF JR2BEI JR2BJE JR2BOF JR2BYJ JR2CSQ JR2DOL JR2DPL JR2DUM JR2ECF JR2EER JR2EKD JR2ETN JR2EWQ JR2FJC JR2FJX JR2FVC JR2GRX JR2IOB JR2IYX JR2KDN JR2KQE JR2LBF JR2LHM JR2MCN JR2MIN JR2MIO JR2MIO/2 JR2MIO/3 JR2MIX JR2MVC JR2NAX JR2NMJ JR2NOU JR2NTC JR2PAN JR2PAU JR2PEB JR2PMT JR2QCR JR2SBA JR2SCJ JR2SCZ JR2SFJ JR2TER JR2TMB/1 JR2TRC JR2TTS JR2TZJ JR2UBS JR2UJT JR2UKF JR2UTT JR2VRN JR2WLQ JR2WLV JR3AAZ JR3BOT JR3BWF JR3EOI JR3FQB JR3GDY JR3GWZ JR3HTK JR3HZW JR3IIR JR3JFZ JR3JRI JR3JZQ JR3KQJ JR3LSE JR3LTG JR3NDM JR3NZC JR3OEH JR3OQJ JR3QHQ JR3RGX JR3RIU JR3RIY JR3RWB JR3STX JR3SZZ JR3TOE JR3TVH JR3UIC JR3VXR JR3WGU JR3WJX JR3XEX JR3XKF JR3XUH JR4ABB JR4BYH JR4CTF JR4CZM JR4CZM/5 JR4DAH JR4DHK JR4DSM JR4FLW JR4FNW JR4GPA JR4HZR JR4LRY JR4NMV JR4NUN JR4OZR JR4PDP JR4TNZ JR4VEV JR4XME JR5DPV JR5EEV JR5IAH JR5JAQ JR5PDX/1 JR5VHU JR5XPG JR6AG JR6CSY JR6ENI JR6EZE JR6FC JR6FRV JR6GIM JR6HK JR6HMJ/1 JR6IQI JR6ITD JR6KNE JR6LUD JR6PQD JR6PUJ JR6QJR JR6RAY JR6RLV JR6VDU JR6VIX JR7AMZ JR7ANB JR7ANG JR7AQL JR7ASO JR7CJS JR7COP JR7DUT JR7FNT JR7FRW JR7FTO JR7FVO JR7GBL JR7HAN JR7IAD JR7IWC JR7IWL JR7JCS JR7NAL/1 JR7NFW JR7NXM JR7OEF JR7OMD JR7QIB JR7RZK JR7TBZ JR7TEQ JR7UOL JR7VHZ JR7WFC JR7XKN JR8AMF JR8BMW/1 JR8BRK JR8MYK JR8NOD JR8ORC JR8QFG JR8QVT/1 JR8RGH JR8SUB JR8VSE JR8XXQ JR9CPT JR9GMS JR9HEL JR9LKE JR9NVB JR9SCH JS1BKR JS1BQX JS1IFK JS1KGS JS1KKY JS1KQQ JS1KSU JS1MBH JS1MZV JS1NDM JS1OHI JS1OKS JS1OYN JS1PDC JS2KHM JS2PHO JS2TSJ JS2XGS JS3CGH JS3CTF JS3CTQ JS3EOE JS3IKM JS3LSQ JS3OSI JS3QWI JS6GIM JS6RGJ JS6RTJ JS6SCC JS6SDQ JS6SRY JS6SYR JT1AA/3 JT1BE JT1BV JT1BZ JT1CD JT1CO JT1CS JT1DA JT1DX JT1E JT1F JT1T JT5DX JU1DX JU1HQ JU1WP JV5A JW2US JW5E JW7QIA JW8G JW9JKA JY4CI JY9FC K0/DL7ZM K0ACP K0AD K0AE K0AFN K0AJW K0ALT K0ANS K0AOZ K0AP K0ARA K0ARS K0ARY K0ATC K0AU K0AV K0AWU K0AXE K0AY K0BAK K0BBC K0BFT K0BIU K0BJ K0BLT K0BRO K0BUD K0BWQ K0BX K0CA K0CD K0CF K0CL K0CMH K0CMS K0CN K0COI K0COM K0CRF K0CS K0DBN K0DDD K0DDR K0DEQ K0DG K0DI K0DNG K0DPT K0DQ K0DTJ K0DU K0DVT K0DVY K0EA K0ECN K0EJ K0EKL K0EOO K0EOU K0EQY K0ESE K0EU K0EUX K0EWS K0EX K0FA K0FBV K0FG K0FHG K0FJ K0FL K0FLY K0FNR K0FNS K0FTC K0FVF K0FW K0FX K0FY K0GC K0GEO K0GID K0GK K0GMO K0GND K0GQ K0GT K0GUN K0GUR K0GUZ K0GVT K0GXI K0HA K0HAS K0HAY K0HB K0HC K0HCV K0HHS K0HMZ K0HNC K0HP K0HS K0HUU K0HVR K0HX K0HY K0IDT K0IDX K0IEA K0IFO K0INR K0IO K0IP K0IR K0ISL K0ITC K0IVY K0IZ K0JA K0JAA K0JE K0JEM K0JFC K0JGH K0JJ K0JJL K0JJM K0JJR K0JPL K0JU K0JV K0JVX K0KAN K0KE K0KEX K0KKV K0KL K0KON K0KP K0KPH K0KT K0KU K0KVK K0KX K0KY K0LAF K0LBY K0LDS K0LEJ K0LIR K0LMD K0LUM K0LUZ K0LW K0LWV K0MAJ K0MAN K0MB K0MCR K0MD K0MDJ K0MF K0MGA K0MHP K0MIS K0MLM K0MN K0MP K0MPH K0MQ K0MS K0MT K0MZN K0NA K0NC K0NE K0NEB K0NM K0NR K0NRH K0NW K0NZ K0OB K0OD K0OE K0OG K0OK K0OL K0OM K0OO K0OSW K0OTR K0OU K0PC K0PFV K0PFX K0PFZ K0PG K0PH K0PJ K0PK K0PL K0PP K0PP/7 K0PY K0QB K0QC K0QEI K0QL K0QMU K0QQ K0QU K0RAL K0RAR K0RC K0RDS K0RF K0RFD K0RG K0RGI K0RGR K0RH K0RI K0RJ K0RJW K0RL K0RU K0RUS K0RV K0RVB K0SBV K0SCO K0SD K0SDW K0SF K0SIP K0SIX K0SM K0SN K0SN/7 K0SNG K0SPN K0SQ K0SR K0SRL K0SS K0STK K0STP K0SUX K0SV K0SW K0SX K0TAZ K0TC K0TF K0TG K0THN K0TI K0TIV K0TLG K0TNT K0TO K0TOT K0TPP K0TQ K0TRL K0TT K0TV K0TW K0TZ K0UAS K0UD K0UIF K0UK K0UM K0USA K0UU K0VBU K0VG K0VH K0VIZ K0VK K0VM K0VOZ K0VR K0VVT K0VVX K0VVY K0VXU K0WA K0WB K0WDM K0XB K0XD K0XG K0XTR K0XY K0YAK K0YB K0YCR K0YG K0YLW K0YQ K0YR K0YR/0 K0YRG K0YW K0YY K0ZL K0ZN K0ZQ K0ZR K0ZRK K0ZS K0ZX K1AA K1AC K1ACT K1AJ K1AMF K1ANT K1APA K1APJ K1AR K1ARO K1ARR K1ASJ K1ATT K1AUS K1BAA K1BG K1BO K1BU K1BV K1BW K1BX K1BZ K1BZM K1CAL K1CB K1CC K1CEE K1CGZ K1CL K1CN K1CPJ K1CRC K1CTT K1CX K1DAT K1DBO K1DC K1DCA K1DD K1DDN K1DEC K1DFT K1DG K1DM K1DNR K1DNX K1DOA K1DPB K1DPE K1DQD K1DQV K1DSW K1DTW K1DUQ K1DW K1DX K1DXA K1EAR K1EBY K1EC K1EEA K1EEE K1EFI K1EI K1ELJ K1EMB K1EO K1ESE K1FFX K1FIR K1FJ K1FM K1FQ K1FQL K1FR K1FRA K1FUG K1FWE K1FXY K1FZ K1GE K1GG K1GGI K1GI K1GJQ K1GLD K1GND K1GQ K1GTS K1GU K1GV K1GVQ K1GW K1GX K1HAP K1HG K1HI K1HIF K1HT K1HTV K1HV K1HZ K1IEB K1IED K1IFJ K1IG K1IIG K1IMI K1IN K1ING K1IPT K1IR K1IX K1IZ K1JB K1JD K1JDL K1JHS K1JSM K1JTF K1JY K1KA K1KAV K1KD K1KDG K1KG K1KI K1KNJ K1KNQ K1KP K1KQC K1KRN K1KS K1KU K1KX K1KXN K1LB K1LD K1LEE K1LGM K1LGQ K1LHO K1LI K1LJO K1LK K1LKP K1LKR K1LOG K1LPS K1LT K1LTJ K1LU K1LZ K1MAA K1MAZ K1MBO K1MC K1MF K1MGH K1MIJ K1MIX K1MK K1MNT K1MO K1MQ K1MR K1MTD K1MVM K1MW K1NJ K1NOK K1NR K1NS K1NSS K1NTR K1NU K1NY K1NYK K1OA K1ON K1OU K1OYQ K1PAD K1PDY K1PGV K1PJ K1PL K1PLL K1PLX K1PQS K1PSM K1PT K1PTF K1PU K1PUB K1PX K1PY K1QEX K1QF K1QK K1QO K1QQA K1QR K1QS K1QVX K1QX K1RA K1RAS K1RAX K1RE K1RH K1RI K1RID K1RK K1RM K1RMH K1RO K1ROA K1ROY K1RQ K1RR K1RT K1RTA K1RU K1RV K1RX K1RY K1RZ K1SA K1SD K1SE K1SEC K1SET K1SEZ K1SFA K1SLB K1SM K1SMY K1SND K1ST K1SV K1SW K1SWL K1SX K1SXD K1TA K1TC K1TEO K1TH K1TKL K1TM K1TN K1TNT K1TO K1TOL K1TR K1TU K1TW K1TZD K1UI K1UO K1UQE K1UR K1USA K1VA K1VC K1VDF K1VI K1VK K1VLB K1VMT K1VO K1VOI K1VR K1VSJ K1VUT K1VW K1WB K1WCC K1WGM K1WHS K1WHY K1WJL K1WN K1WO K1WVU K1WY K1XM K1XO K1XS K1XT K1XX K1YA K1YR K1YSY K1YT K1ZD K1ZE K1ZIL K1ZK K1ZM K1ZN K1ZO K1ZPZ K1ZR K1ZW K1ZZ K1ZZI K2AA K2ACB K2ACU K2ADA K2ADV K2AL K2AL/1 K2AMI K2ANT K2AOE K2ARM K2ATZ K2AU K2AV K2AVI K2AVX K2AWS K2AX K2BA K2BAR K2BB K2BBQ K2BCM K2BLC K2BM K2BMI K2BQ K2BR K2BX K2BY K2CAF K2CB K2CBI K2CC K2CD K2CDX K2CF K2CHM K2CIB K2CJ K2CJB K2CM K2CT K2CYE K2CYS K2DAR K2DB K2DBK K2DEG K2DEP K2DF K2DFC K2DFE K2DH K2DI K2DLL K2DLS K2DM K2DO K2DP K2DRA K2DRH K2DS K2DSL K2DSW K2DUX K2DV K2EAI K2EDW K2EEF K2EK K2EKM K2EN K2EP K2EQ K2ESE K2EYS K2EZ K2FD K2FEO K2FF K2FJ K2FL K2FN K2FRT K2FV K2GAV K2GER K2GG K2GJJ K2GLM K2GLS K2GMT K2GMY K2GSP K2GTC K2GV K2GX K2HAT K2HIG K2HL K2HN K2HRO K2HT K2HTO K2HVE K2HVN K2IGW K2ITT K2IY K2IZ K2JAY K2JB K2JF K2JJF K2JJI K2JMY K2JPV K2JT K2JVB K2JX K2JYV K2KIB K2KQ K2KR K2LE K2LE/1 K2LIM K2LML K2LMQ K2LNS K2LP K2LS K2LTE K2LYV K2MA K2MD K2MEN K2MF K2MFR K2MFY K2MGR K2MIJ K2MK K2MLB K2MME K2MMO K2MMW K2MO K2MP K2MQJ K2MTG K2MUB K2NCC K2NED K2NG K2NJ K2NNY K2NPN K2NV K2NV/2 K2NV/VE3 K2NYG K2OAK K2OF K2OGD K2OID K2ONP K2OO K2OP K2OQA K2OS K2OWE K2PBS K2PF K2PI K2PK K2PLF K2PM K2PO K2PO/7 K2PS K2PW K2QB K2QBN K2QL K2QM K2QMF K2QNU K2QO K2QPN K2QQ K2QS K2QU K2QY K2QZR K2RAS K2RB K2RD K2RET K2RK K2RKD K2RNY K2RP K2RPC K2RPM K2RR K2RRB K2RRM K2RS K2RSB K2RU K2RWF K2SA K2SAN K2SD K2SE K2SFS K2SG K2SGH K2SHA K2SHZ K2SI K2SJB K2SLZ K2SM K2SQS K2SSB K2SSS K2SST K2STO K2SX K2SZ K2TD K2TE K2TER K2TGW K2TO K2TOP K2TQC K2TS K2TT K2TTM K2TTT K2TV K2TW K2TWI K2TZY K2UF K2UFT K2UI K2UM K2UNI K2UO K2UPS K2UR K2USA K2UT K2UU K2UV K2UY K2UYK K2VHW K2VI K2VN K2VS K2VUI K2VV K2WB K2WG K2WJ K2WJL K2WK K2WLO K2WNW K2WO K2WOP K2WR K2WRC K2WU K2XA K2XE K2XF K2XN K2XR K2XT K2XU K2XX K2YAZ K2YEH K2YG K2YGM K2YGM/4 K2YNY K2YR K2YSO K2YWE K2YY K2YY/6 K2YYD K2YYZ K2ZB K2ZC K2ZD K2ZDX K2ZF K2ZJ K2ZL K2ZO K2ZR K2ZR/4 K2ZVL K2ZWI K2ZZ K3AE K3AHD K3AJ K3AJ/2 K3AKE K3ALE K3AQ K3ARC K3ATO K3AU K3AXR K3BAK K3BAY K3BBB K3BFA K3BFQ K3BHX K3BM K3BR K3BTK K3BU K3BVQ K3BVU K3BYU K3BZ K3CCR K3CDZ K3CLT K3CNH K3CPB K3CQ K3CR K3CS K3CT K3CT/KP2 K3CW K3CWF K3CX K3DCW K3DE K3DMG K3DMG/8 K3DMH K3DN K3DNE K3DOS K3DQ K3DQB K3DUW K3DY K3EA K3EDP K3EJJ K3EL K3EP K3EQ K3EST K3EWZ K3FGO K3FH K3FHP K3FIV K3FIV/6 K3FK K3FLY K3FM K3FMQ K3FOP K3FP K3FS K3FXR K3GA K3GAU K3GC K3GEV K3GHH K3GLS K3GP K3GP/8 K3GTS K3GW K3GWK K3GY K3GYS K3HR K3HSK K3HX K3IE K3IJ K3ILC K3IO K3IPK K3IR K3IRV K3ISH K3IT K3IU K3IZ K3JD K3JGJ K3JHT K3JJJ K3JKW K3JL K3JO K3JP K3JPT K3JPW K3JT K3JWI K3JZD K3KG K3KGX/8 K3KN K3KNL K3KO K3KQ K3KU K3LA K3LAB K3LBP K3LID K3LKS K3LP K3LR K3LRH K3LU K3LUE K3MA K3MAF K3MAW K3MD K3MD/1 K3MEC K3MIM K3MJW K3MM K3MMB K3MQP K3MRG K3MRK K3MSB K3MX K3MZ K3NC K3NCO K3ND K3NDM K3NEM K3NF K3NG K3NK K3NM K3NRX K3NUI K3OCW K3OIL K3OJK K3OK K3ONW K3OO K3OQ K3ORC K3ORS K3OX K3PA K3PG K3PH K3PIN K3PLV K3PMC K3PP K3PRC K3PSD K3PU K3QF K3QIA K3QQN K3QX K3RA K3RCC K3RG K3RH K3RKU K3RL K3RMB K3RN K3RRR K3RSJ K3RV K3RWN K3RY K3SAE K3SEN K3SEW K3SF K3SFS K3SI K3SOM K3STL K3STX K3SU K3SV K3SV/4 K3SVA K3SWZ K3SX K3SXA K3SZH K3TA K3TC K3TCU K3TD K3TEJ K3TEZ K3TIM K3TJ K3TM K3TMD K3TN K3TOW K3TRM K3TUF K3TW K3TWL K3TX K3TXT K3TXW K3UA K3UGI K3UH K3UHU K3UK K3UL K3URT K3US K3USC K3UW K3VA K3VAR K3VAT K3VED K3VIG K3VIN K3VJ K3VL K3VPZ K3VYY K3WA K3WAS K3WC K3WGR K3WI K3WJV K3WM K3WR K3WSX K3WT K3WU K3WW K3WWP K3WWT K3WYC K3WYC/7 K3XA K3XO K3XR K3XT K3XZ K3YD K3YDX K3YG K3YH K3YNY K3YP K3YT K3YTL K3ZA K3ZAS K3ZJ K3ZK K3ZL K3ZM K3ZMJ K3ZO K3ZQ K3ZU K3ZV K3ZYK K3ZZ K4AAB K4AAP K4AAS K4AAZ K4AB K4ADR K4ADV/4 K4AEA K4AEN K4AG K4AGT K4AHF K4AL K4ALE K4AMC K4AMQ K4AOA K4AOR K4AQ K4AR K4ARC K4AUX K4AVF K4AVU K4AVX K4AWM K4AX K4BAD K4BAI K4BB K4BBA K4BBH K4BBK K4BDJ K4BDL K4BDN K4BFT K4BGV K4BLL K4BNC K4BP K4BRI K4BSK K4BT K4BTC K4BX K4BYT K4CA K4CAM K4CC K4CEB K4CGY K4CIA K4CMC K4CME K4CMQ K4CMS K4CN K4CNW K4COP K4CQ K4CTL K4CVL K4CWW K4CX K4DAY K4DEQ K4DES K4DET K4DG K4DGJ K4DJ K4DJG K4DKW K4DL K4DLE K4DLI K4DLS K4DMH K4DMR K4DP K4DRV K4DSB K4DU K4DV K4DX K4DXA K4DXV K4DXY K4DY K4DZR K4EA K4EAK K4EAY K4EB K4ED K4EDI K4EET K4EG K4EIR K4EIT K4EJ K4EJQ K4ELI K4EOR K4EQ K4EQQ K4EU K4EWG K4EZS K4EZY K4EZZ K4FAC K4FAN K4FB K4FC K4FCG K4FDP K4FF K4FFC K4FHI K4FI K4FJ K4FJW K4FL K4FO K4FOY K4FPF K4FQU K4FRT K4FS K4FT K4FTO K4FTW K4FTY K4FU K4FW K4FX K4FXN K4FY K4FYM K4FZG K4GAA K4GHR K4GJF K4GK K4GKK K4GM K4GMH K4GO K4GOP K4GRE K4GSO K4GU K4GYD K4GZ K4GZB K4HA K4HAL K4HB K4HC K4HEB K4HI K4HJZ K4HKE K4HMB K4HMK K4HNL K4HO K4HPP K4HPS K4HQK K4HR K4HSB K4HTA K4HTO K4HX K4HYJ K4IA K4IC K4IDD K4IDK K4IE K4IIE K4IKM K4INA K4IQJ K4ISV K4ITO K4ITV K4IU K4IVF K4IXO K4JAF K4JAZ K4JC K4JDF K4JDG K4JGR K4JH K4JJ K4JKB K4JKL K4JLD K4JNM K4JO K4JOP K4JP K4JPD K4JPN K4JRK K4JRS K4JTA K4JWA K4JWF K4JZQ K4KAY K4KBI K4KBL K4KDJ K4KEW K4KFF K4KG K4KGG K4KI K4KJQ K4KKH K4KKT K4KL K4KLA K4KNN K4KRK K4KRW K4KSR K4KWL K4KZ K4KZZ K4LAC K4LCM K4LCP K4LD K4LIX K4LJG K4LKL K4LL K4LM K4LNN K4LO K4LQ K4LRA K4LRG K4LRP K4LRP/2 K4LRX K4LSK K4LT K4LTA K4LTE K4LY K4MDX K4MF K4MGA K4MGE K4MI K4MIA K4MIJ K4MIL K4ML K4MLD K4MM K4MMP K4MMZ K4MN K4MNE K4MOA K4MOG K4MQ K4MQM K4MS K4MSR K4MTI K4MTX K4MVA K4MVL K4MWH K4MX K4MZE K4NA K4NAB K4NAX K4NC K4NGS K4NJB K4NK K4NM K4NNQ K4NRA K4NRC K4NTO K4NV K4NVA K4NYI K4OAQ K4OCE K4OIB K4OJ K4ONS K4OO K4OR K4ORD K4OSO K4OTH K4OV K4OWR K4PB K4PDM K4PG K4PHA K4PHE K4PI K4PIM K4PJ K4PLB K4PP K4PQ K4PRO K4PTF K4PV K4PZC K4QD K4QE K4QL K4QPL K4QVG K4QXX K4QZB K4RC K4RCA K4RCG K4RDU K4REB K4RES K4RFT K4RGK K4RGR K4RHB K4RLL K4RMM K4RNV K4RO K4ROX K4ROZ K4RSQ K4RST K4RT K4RTE K4RTS K4RUM K4RV K4RWH K4RWP K4SAA K4SAG K4SBZ K4SDH K4SGR K4SIR K4SKY K4SN K4SO K4SPD K4SPE K4SPO K4SQC K4SR K4SSM K4STN K4SV K4SWE K4SWJ K4SX K4SXT K4SZL K4TCG K4TCT K4TD K4TG K4TJA K4TLH K4TMC K4TN K4TNN K4TNX K4TOJ K4TP K4TR K4TRH K4TS K4TTZ K4TXJ K4TXL K4TXX K4TZ K4UB K4UEE K4UI K4UK K4UN K4UPI K4UQ K4USV K4UTE K4UTI K4UU K4UUK K4UUQ K4UWH K4UX K4UY K4VBM K4VBS K4VHV K4VIG K4VO K4VOZ K4VPZ K4VRC K4VRT K4VU K4VV K4VVM K4VVN K4VVS K4VX K4WB K4WC K4WCC K4WDW K4WES K4WFM K4WG K4WI K4WLS K4WMS K4WNW K4WO K4WOW K4WP K4WQ K4WS K4WSW K4WW K4WY K4XD K4XG K4XI K4XL K4XP K4XS K4XU K4XY K4XZ K4YCR K4YDB K4YFH K4YFR K4YJ K4YJI K4YKZ K4YMQ K4YND K4YOW K4YRK K4YT K4YYL K4YZ K4ZA K4ZDH K4ZEE K4ZGB K4ZGV K4ZHM K4ZIN K4ZQ K4ZRJ K4ZW K5AAD K5AB K5ABQ K5ACO K5AEM K5AF K5AGC K5AM K5AND K5AQ K5ATA K5ATT K5AUP K5AVY K5AWF K5AX K5BDM K5BG K5BGL K5BTK K5BTS K5BUD K5BZH K5CA K5CAO K5CBS K5CD K5CI K5CJL K5CJU K5CM K5COW K5CS K5CX K5DB K5DC K5DD K5DHY K5DJ K5DJN K5DNA K5DU K5DW K5DWI K5DX K5DXR K5DXX K5EEE K5EK K5ELF K5EMI K5ER K5ESW K5EW K5EWJ K5EWS K5FA K5FD K5FFF K5FNQ K5FO K5FP K5FUV K5FZ K5GA K5GAT K5GDX K5GE K5GER K5GJ K5GKC K5GM K5GN K5GO K5GQ K5GSF K5GSL K5GVP K5GWO K5GY K5GZR K5HDU K5HDV K5HDX K5HGX K5HK K5HLZ K5HM K5HTB K5HTE K5HUT K5HX K5ICW K5IID K5IMC K5IS K5ITT K5IX K5IZO K5JC K5JEF K5JK K5JMB K5JPS K5JRN K5JRW K5JTH K5JUC K5JX K5JYD K5KC K5KDG K5KDX K5KG K5KJ K5KLA K5KMD K5KND K5KNM K5KPE K5KQ K5KS K5KT K5KTF K5KU K5KUA K5KV K5KVN K5LAD K5LBJ K5LC K5LCL K5LD K5LG K5LH K5LJ K5LKJ K5LKV K5LLA K5LMS K5LN K5LOL K5LRW K5LSU K5LU K5LXP K5LXY K5LY K5LZP K5MBA K5ME K5MGB K5MGO K5MH K5ML K5MO K5MQ K5MR K5MSK K5MV K5MVP K5MXG K5NA K5NB K5ND K5NOF K5NOK K5NV K5NZ K5OA K5OA/6 K5OAI K5ODZ K5OI K5OLV K5OMC K5OO K5OTD K5OUR K5OVW K5PAC K5PAR K5PDX K5PHB K5PI K5PMK K5PO K5PQ K5PSB K5PX K5QB K5QE K5QEA K5QR K5QW K5QXJ K5QY K5RA K5RC K5RC/1 K5RC/2 K5RCR K5RFH K5RHD K5RHZ K5RJ K5RK K5RLN K5RMJ K5RPD K5RR K5RRD K5RSX K5RT K5RWB K5RWD K5RWP K5RX K5RXQ K5RZA K5SAR K5SBR K5SGD K5SGE K5SI K5SL K5SM K5SMD K5SNA K5SPP K5SS K5SSR K5ST K5TA K5TAH K5TBA K5TBO K5TCJ K5TCP K5TDA K5TDC K5TED K5TEE K5TER K5TF K5TFH K5TIA K5TLJ K5TLL K5TMH K5TQ K5TR K5TRI K5TU K5TUX K5TXM K5TYR K5UA K5UI K5UMH K5UO K5UQ K5UR K5UTD K5UTG K5UUT K5UV K5UZ K5VGS K5VIP K5VJZ K5VP K5VRX K5VUV K5VWW K5VYT K5WA K5WAF K5WDW K5WE K5WES K5WG K5WI K5WK K5WL K5WLI K5WLQ K5WMG K5WMH K5WNH K5WO K5WP K5WPH K5WPN K5WQG K5WRN K5WSW K5WW K5WX K5XA K5XB K5XH K5XI K5XK K5XQ K5XR K5XS K5XT K5XU K5XY K5YAA K5YC K5YDR K5YG K5YM K5YS K5ZCJ K5ZD K5ZE K5ZG K5ZM K5ZO K5ZQ K5ZXX K5ZY K5ZZR K6AA K6AAB K6AAW K6AC K6ACJ K6ACJ/7 K6ACW K6AF K6AFW K6AIA K6ALF K6AM K6AN K6ANP K6AQL K6AR K6ARP K6ASK K6ATZ K6AW K6AW/2 K6AWR K6BB K6BBQ K6BEW K6BF K6BHH K6BIG K6BIR K6BL K6BR K6BT K6BV K6BY K6BZS K6BZZ K6CDJ K6CKS K6CLS K6CQP K6CRC K6CS K6CSH K6CSL K6CTA K6CU K6CUA K6CW K6DBX K6DDJ K6DEX K6DF K6DGQ K6DGW K6DJ K6DKO K6DMY K6DMZ K6DN K6DOW K6DSW K6DTX K6DW K6DWI K6DXA K6DXX K6DY K6EEP K6EGF K6EI K6EID K6EL K6ELE K6EM K6EO K6ERT K6ESS K6ETA K6EU K6EVR K6EZ K6FA K6FEU K6FG K6FR K6FW K6FWT K6GCN K6GDP K6GFJ K6GGO K6GHA K6GRL K6GT K6GVG K6HFA K6HGF K6HL K6HNZ K6HP K6HR K6HRT K6HRU K6HS K6IA K6ICS K6III K6IJ K6IJ/KH6 K6IMZ K6INM K6IPV K6IQY K6IR K6IT K6IWA K6JAT K6JBH K6JCA K6JEA K6JEB K6JER K6JEY K6JF K6JH K6JHD K6JHF K6JJ K6JJR K6JL K6JQA K6JRO K6JS K6JTT K6JU K6JW K6JWN K6KAL K6KAL/7 K6KHB K6KK K6KLY K6KNS K6KO K6KQV K6KR K6KS K6KWI K6KY K6KYJ K6KZM K6LA K6LE K6LER K6LG K6LJ K6LJC K6LL K6LON K6LPO K6LR K6LRG K6LRN K6LSJ K6LU K6LY K6MCP K6MCS K6ME K6MEG K6MFC K6MI K6MKF K6MM K6MMM K6MMU K6MR K6MTS K6MUG K6MW K6MWK K6MWL K6NA K6ND K6NK K6NML K6NO K6NR K6NV K6NX K6OGO K6OI K6OJ K6OK K6OKW K6OLY K6OO K6OPO K6OQ K6OR K6OY K6OZY K6PBF K6PBQ K6PDL K6PER K6PGH K6PJ K6PV K6PV/6 K6PVA K6PZB K6QCB K6QK K6QQQ K6RAD K6RAH K6RB K6RBS K6RC K6RE K6REF K6RFM K6RG K6RIM K6RJ K6RLA K6RM K6RMJ K6RN K6RNK K6RQT K6RR K6RTC K6RV K6RWM K6RXL K6RZ K6SAB K6SAL K6SBA K6SCA K6SEE K6SF K6SIK K6SMF K6SNP K6SQL K6SRZ K6SSJ K6SSS K6SSX K6ST K6SU K6SXA K6SY K6TA K6TBJ K6TD K6TDI K6TEC K6TI K6TIG K6TIM K6TKR K6TOP K6TTD K6TU K6TUJ K6TV K6TVE K6TVT K6TZ K6UDA K6UFO K6UIP K6UJ K6UM K6UN K6UNR K6USN K6UUW K6UUW/7 K6UW K6VDP K6VDU K6VGP K6VHF K6VK K6VMN K6VMV K6VO K6VRS K6VVA K6VWL K6VXI K6WC K6WDE K6WDE/KH6 K6WFV K6WG K6WS K6WSC K6WV K6WWL K6WY K6XC K6XG K6XJ K6XM K6XN K6XT K6XV K6XX K6YA K6YEK K6YHF K6YK K6YL K6YLG K6YNP K6YOA K6YR K6YRA K6YT K6YUI K6YYL K6ZB K6ZED K6ZH K6ZI K6ZJI K6ZJY K6ZO K6ZP K6ZQ K6ZV K6ZY K6ZZ K6ZZD K7AAO K7ABC K7ABV K7ACT K7ACZ K7ADD K7AR K7ARJ K7ART K7ATN K7AUO K7AWB K7BBR K7BG K7BHM K7BTW K7BUD K7BUY K7BV K7BVT K7BX K7CA K7CAR K7CCC K7CCH K7CF K7CMR K7CO K7COM K7CS K7CST K7CU K7CW K7CY K7DD K7DF K7DHD K7DNH K7DPT K7DQH K7DR K7DRA K7DSE K7DSH K7DSZ K7EA K7ECW K7EDA K7EDX K7EEP K7EG K7EIN K7EIQ K7EK K7EKD K7EMI K7EMR K7EPH K7ER K7ETE K7EU K7EUG K7EW K7EWA K7EY K7FA K7FD K7FEL K7FJM K7FL K7FRS K7FRY K7FSU K7FU K7FX K7GA K7GGG K7GGQ K7GJX K7GK K7GM K7GQ K7GRR K7GS K7GSE K7GT K7GZP K7HBN K7HD K7HIL K7HJE K7HLN K7HP K7HPT K7HRT K7HV K7IA K7ICE K7IDX K7IDX/7 K7IFT K7II K7INA K7ING K7IOA K7IOC K7IP K7IR K7IUQ K7JA K7JA/6 K7JAN K7JBQ K7JCA K7JE K7JEO K7JFD K7JGM K7JH K7JHM K7JJ K7JKM K7JKZ K7JNA K7JNX K7JPF K7JQ K7JR K7JSG K7KAR K7KB K7KFG K7KHC K7KMR K7KMS K7KO K7KPH K7KU K7KV K7KXO K7KY K7LA K7LAZ K7LED K7LES K7LFY K7LGV K7LJ K7LLC K7LNP K7LOL K7LOP K7LQT K7LR K7LTF K7LTV K7LU K7LV K7LVJ K7LW K7LY K7LZJ K7MCX K7MDH K7MF K7MGR K7MH K7MHI K7MI K7MJF K7MK K7MKL K7MM K7MMM K7MO K7MOA/4 K7MOK K7MRU K7MTR K7MVT K7MWK K7MY K7NCG K7NEW K7NG K7NHV K7NJ K7NN K7NWM K7NWR K7NWS K7NX K7OA K7OK K7OM K7OM/4 K7ON K7ONM K7OVG K7OVM K7OVW K7OX K7PB K7PEH K7PGL K7PI K7PIA K7PJT K7PMK K7PN K7POS K7PQ K7PWL K7PX K7QBO K7QHO K7QJ K7QQ K7QXG K7QYY K7RAN K7RB K7RBT K7RC K7RCS K7REL K7RF K7RFI K7RFW K7RI K7RJ K7RL K7RLD K7RMJ K7RR K7RVX K7RXC K7SCX K7SD K7SEK K7SEL K7SEN K7SFN K7SI K7SID K7SKE K7SP K7SPY K7SR K7SS K7ST K7STO K7SV K7SZ K7TD K7THM K7TJ K7TLM K7TM K7TMW K7TQ K7TR K7TYF K7UA K7UI K7ULS K7UM K7UOT K7UPJ K7UT K7VAP K7VAY K7VBG K7VI K7VIC K7VIT K7VK K7VOA K7VS K7VT K7VU K7VZX K7WA K7WDA K7WE K7WK K7WLF K7WLX K7WP K7WQ K7WTS K7WUH K7XB K7XC K7XE K7XH K7XV K7XZ K7YB K7YCH K7YDL K7YFP K7YK K7YMA K7YMG K7YUR K7ZA K7ZAD K7ZB K7ZD K7ZG K7ZI K7ZL K7ZO K7ZOX K7ZP K7ZQ K7ZS K7ZV K7ZX K7ZYV K8AAX K8AB K8AC K8ADO K8AE K8AEC K8AEX K8AJS K8AJX K8ALM K8ANM K8AO K8AQM K8ARY K8ASS K8AZ K8BA K8BAT K8BBE K8BF K8BHK K8BKM K8BL K8BN K8BSW K8BTT K8BTU K8BUF K8BVY K8BXQ K8BZ K8CAR K8CBC K8CC K8CCZ K8CI K8CJ K8CJY K8CLA K8CLC K8CMO K8CN K8CQ K8CR K8CU K8CV K8CVZ K8CW K8CX K8CXM K8CY K8DE K8DEL K8DH K8DID K8DIL K8DJC K8DJR K8DOC K8DR K8DSL K8DSS K8DTW K8DTX K8DV K8DXR K8EAW K8ED K8EEE K8EEN K8EET K8EG K8EHE K8EI K8EIJ K8EIO K8EMA K8EMS K8EO K8ERS K8ES K8ESQ K8ET K8EUR K8FB K8FC K8FF K8FH K8FL K8FP K8FX K8FZY K8GDT K8GG K8GI K8GIB K8GIM K8GL K8GM K8GP K8GQ K8GT K8GU K8GVK K8GW K8HLQ K8HMS K8HP K8HUG K8IA K8IDW K8IFK K8IKO K8IKW K8IRB K8IU K8IV K8JA K8JAG K8JH K8JHD K8JQ K8JRG K8JSB K8JTD K8JV K8JYG K8KAP K8KHZ K8KI K8KR K8KSM K8KT K8KWT K8KZB K8LBQ K8LBT K8LEE K8LEF K8LES K8LJ K8LJG K8LL K8LN K8LS K8LSB K8LV K8LY K8MAD K8MAJ K8MCN K8ME K8MEG K8MFO K8MJZ K8MM K8MN K8MOT K8MP K8MR K8MRT K8MSH K8MU K8MVZ K8MW K8MWO K8MXC K8NAP K8ND K8NI K8NKQ K8NOS K8NS K8NU K8NVR K8NWD K8NY K8NYG K8NYY K8NZ K8OD K8OHZ K8OK K8OM K8OOK K8OSF K8OT K8OWL K8OZ K8PC K8PGJ K8PI K8PO K8PP K8PVD K8PX K8PXR K8QER K8QF K8QH K8QKY K8QS K8QWY K8QZ K8RA K8RC K8RDG K8RDJ K8RF K8RJW K8RO K8ROX K8RRT K8RWL K8RYU K8SB K8SCH K8SD K8SDX K8SE K8SEM K8SIA K8SJP K8SSB K8SSS K8SVT K8TAO K8TE K8TKA K8TLC K8TMK K8TNT K8TS K8TV K8TW K8UDZ K8UGG K8UNS K8UO K8UPR K8UT K8UU K8UUU K8VB K8VE K8VGL K8VT K8VUS K8WAY K8WDB K8WDQ K8WDX K8WEE K8WFL K8WHA K8WLK K8WSN K8WW K8XS K8YAH K8YC K8YE K8YFM K8YIB K8YN K8YR K8YSE K8YXB K8YYY K8ZBY K8ZCT K8ZOG K8ZT K8ZZU K8ZZV K9AA K9AAD K9AAN K9ABL K9AHH K9AIH K9AJK K9ALP K9AMB K9AMP K9APW K9AQ K9ARF K9ARZ K9ASE K9ATG K9AU K9AUB K9AW K9AY K9AZH K9BAY K9BGL K9BIZ K9BJM K9BLI K9BSL K9BTF K9BTP K9BTQ K9CC K9CEW K9CG K9CHP K9CIV K9CJ K9COT K9CS K9CT K9CU K9CW K9DAC K9DEB K9DIB K9DIG K9DJ K9DJ/4 K9DJT K9DN K9DR K9DRS K9DT K9DU K9DUR K9DWS K9DX K9DXA K9DY K9EA K9EAZ K9EBY K9EEZ K9EGS K9EL K9ELF K9EN K9ES K9EU K9EZ K9FD/KH6 K9FE K9FEN K9FI K9FMX K9FN K9FO K9FS K9FW K9FY K9GC K9GDF K9GR K9GS K9GVM K9GWB K9GWH K9GWS K9GY K9GY/VP9 K9GYI K9HDE K9HKS K9HVW K9HWL K9HXO K9HY K9HZ K9IA K9IAC K9IBM K9ICE K9ICP K9IDQ K9IDX K9IG K9IJ K9IL K9ILJ K9IMM K9INE K9ING K9IO K9IQP K9IR K9IT K9ITW K9IU K9IUQ K9IZT K9JAI K9JDV K9JE K9JF K9JFL K9JG K9JHQ K9JK K9JM K9JM/NEVA K9JN K9JO K9JP K9JT K9JU K9JWI K9JWP K9JWV K9JX K9KDE K9KDS K9KEU K9KJ K9KJN K9KK K9KL K9KM K9KMD K9KR K9KSI K9KTS K9KU K9LA K9LAE K9LGE K9LJ K9LJN K9LLI K9LN K9LOF K9LOF/5 K9LZJ K9MA K9MDK K9MI K9MJA K9MK K9MKC K9MM K9MMS K9MOT K9MQ K9MU K9MUG K9MUG/4 K9MV K9MWM K9MY K9NA K9NB K9NN K9NO K9NP K9NR K9NSE K9NU K9NW K9NZ K9OB K9OCO K9OGI K9OKK K9OM K9OMW K9OR K9OT K9OW K9OZ K9PG K9PMV K9PPY K9PSM K9PY K9QC K9QJS K9QLL K9QR K9QVB K9QVB/9 K9QY K9RCL K9RE K9REK K9RII K9RJ K9RJO K9RQ K9RS K9RU K9RZ K9SAT K9SB K9SDM K9SE K9SF K9SG K9SH K9SLQ K9SM K9SO K9SOL K9SRV K9SS K9STH K9TA K9TEM K9TF K9TIE K9TM K9TMS K9TND K9TV K9TVG K9TY K9UIY K9UQN K9US K9UT K9UTM K9UW K9VD K9VER K9VIS K9VSW K9VT K9VV/KP2 K9VXN K9WA K9WD K9WDX K9WDY K9WEY K9WIS K9WKW K9WM K9WMS K9WN K9WWT K9WX K9WZB K9XB K9XD K9XE K9XR K9XV K9XW K9XZ K9YC K9YKL K9YM K9YVT K9YX K9YZ K9ZBX K9ZC K9ZFQ K9ZI K9ZM K9ZMI K9ZMU K9ZO K9ZT K9ZXO KA0AIG KA0BHO KA0BMX KA0CSW KA0EIC KA0EML KA0FSP KA0GOA KA0HDJ KA0HIB KA0HSS KA0HZP KA0IQT KA0JDT KA0JPN KA0KVW KA0LDG KA0NES KA0P KA0PHJ KA0PQW KA0REN KA0S KA0SLD KA0UAX KA0UEH KA0VXK KA0YJE KA0ZLG KA0ZPP KA1AMR KA1API KA1BNE KA1BSZ KA1BVV KA1C KA1CFP KA1CH KA1DBE KA1DJ KA1EBU KA1EFO KA1EKE KA1EKR KA1ERL KA1G KA1GMN KA1GYB KA1ILH KA1IOR KA1IXK KA1J KA1JBE KA1JY/4 KA1KIX KA1KNW KA1KXL KA1LHZ KA1LOR KA1MEX KA1MPG KA1MVK KA1NXH KA1O KA1OPD KA1OVM KA1OX KA1PGI KA1QBO KA1QYP KA1R KA1RFD KA1SAW KA1SKY KA1SNP KA1SSU KA1T KA1TM KA1TWX KA1UUM KA1V KA1VF KA1VGM KA1VMG KA1WER KA1WVM KA1YDH KA1YQC KA1ZD KA2ABA KA2AEY KA2ANF KA2BIG KA2BKG KA2BSK KA2BXH KA2D KA2DZR KA2EMZ KA2ENE KA2EYH KA2F KA2FHN KA2FIR KA2GQQ KA2GYM KA2HZP KA2IBE KA2ISM KA2KAR KA2KCA KA2KGP KA2KON KA2LIM KA2MEK KA2MGE KA2MLH KA2NFG KA2OFM KA2OMQ KA2OON KA2OQZ KA2OUO KA2PBT KA2QIT KA2QWC KA2QYS KA2RJM KA2RVO KA2SHA KA2UFP KA2VLP KA2X KA2ZEY KA2ZIU KA3ARF KA3BMU KA3CRC KA3CWR KA3DRR KA3DRR/6 KA3EHL KA3EJJ KA3EQU KA3FCV KA3FZN KA3FZO KA3GEA KA3GLQ KA3HED KA3HPM KA3IHR KA3J KA3JLW KA3JVW KA3KRB KA3KST KA3LKM KA3LPB KA3MHM KA3MLS KA3MLU KA3MSR KA3MTT KA3MTU KA3NAM KA3NRX KA3NZR KA3PCX KA3PMW KA3QLF KA3S KA3SMF KA3UJE KA3UOL KA3USI KA3VFW KA3YJU KA3YNV KA3YQB KA4APA KA4AQM KA4BDW KA4CDN KA4DEB KA4EMR KA4FDM KA4GAV KA4GFY KA4H KA4HKK KA4ICK KA4JRY KA4MAY KA4NGW KA4OTB KA4PKB KA4R KA4RRU KA4SFD KA4TLC KA4U KA4UDX KA4UJZ KA4W KA4WBR KA4WRR KA4ZDR KA5BKG KA5BNS KA5CJJ KA5DWI KA5FSJ KA5GCB KA5IFX KA5KPE KA5M KA5NDH KA5PRO KA5PVB KA5QMA KA5REJ KA5TCF KA5V KA5VWW KA5VZG KA5W KA5WRG KA6A KA6AED KA6AIL KA6AMB KA6BIM KA6JLT KA6JLT/7 KA6MEL KA6MIB KA6MLE KA6S KA6SGT KA6SOC KA6T KA6TYA KA6U KA6VQI KA6W KA6WKE KA6WNK KA6YLA KA7A KA7ARC KA7BVG KA7CVJ KA7HBH KA7HUO KA7JOI KA7KSP KA7NWQ KA7PNH KA7RRA KA7SOL KA7SPS KA7T KA7V KA7YHA KA8AXY KA8EBI KA8FTP KA8G KA8HDE KA8HKC KA8HNS KA8HOK KA8HQL KA8HXX KA8JBK KA8JBY KA8JHD KA8JZR KA8KPN KA8LCW KA8MNP KA8NJW KA8OAT KA8Q KA8RAB KA8SBI KA8SMA KA8SYV KA8TFF KA8UNI KA8YNW KA8YYZ KA8ZAW KA9A KA9BHD KA9BYN KA9CAR KA9CFD KA9CKK KA9CLP KA9DVX KA9EKJ KA9FAJ KA9FON KA9FOX KA9FQG KA9IKK KA9JAC KA9JCP KA9KLR KA9LMK KA9LYN KA9MOM KA9MOT KA9NFE KA9O KA9OKH KA9OUT KA9OZP KA9P KA9PCU KA9S KA9SWE KA9TOZ KA9VHG KA9VVQ KA9WAR KA9WMI KA9ZZT KB0ARZ KB0BED KB0CH KB0CQ KB0DNP KB0DWI KB0EIM KB0EL KB0EO KB0FHP KB0FJB KB0FQM KB0FXK KB0GUS KB0HAZ KB0HH KB0HLF KB0HNN KB0HP KB0HQM KB0IXM KB0JHR KB0JIT KB0JSH KB0KIE KB0KQA KB0L KB0LF KB0LGF KB0LYL KB0MDQ KB0MM KB0MMR KB0MUY KB0NHW KB0OLA KB0PAT KB0PPA KB0PPQ KB0QCR KB0QEF KB0QGT KB0QH KB0R KB0RM KB0RMS KB0SK KB0TDW KB0TJ KB0VE KB0VVD KB0VYG KB0WSW KB0YH KB0YNA KB0YUV KB0ZNU KB1CJ KB1CL KB1CLC KB1CQ KB1DJ KB1DK KB1DMR KB1DMX KB1DN KB1EE KB1EFS KB1EFS/2 KB1EHE KB1EOF KB1EPQ KB1EYU KB1FRK KB1FRW KB1GKN KB1GN KB1H KB1HHI KB1HNZ KB1HXO KB1HY KB1HYL KB1IRB KB1JDY KB1JFQ KB1JJX KB1JXG KB1KA KB1KKW KB1KUK KB1LRL KB1MAO KB1MGG KB1MM KB1MU KB1NA KB1NH KB1NHV KB1NNH KB1ODO KB1OLX KB1OWW KB1OY KB1QU/4 KB1QYS KB1REQ KB1RGA KB1RPW KB1RRX KB1RWI KB1S KB1SLN KB1SNB KB1ST KB1SUA KB1T KB1TGN KB1THP KB1TKQ KB1TPX KB1TUR KB1UIF KB1UJS KB1UM KB1UZW KB1VQF KB1VUN KB1VWQ KB1VXY KB1VZY KB1W KB1WDI KB1WEA KB1WEZ KB1WLB KB1WRZ KB1WSN KB1WSR KB1WUG KB1WUP KB1WXM KB1WY KB1YAP KB1YDO KB1YFH KB1YII KB1YNK KB1YNT KB1YSB KB1YSK KB1YYZ KB1YZ KB1YZZ KB1Z KB1ZCZ KB1ZDZ KB1ZJK KB1ZPJ KB1ZUQ KB2AMY KB2CKN KB2DAB KB2DMD KB2EMC KB2EOK KB2ERJ KB2ESY KB2FCV KB2HSH KB2IAU KB2IPH KB2KBC KB2KOL KB2KUU KB2KWD KB2LOI KB2LUV KB2MN KB2NB KB2NGK KB2OYI KB2OZH KB2PD KB2QDA KB2RC KB2RSK KB2RVB KB2SDF KB2SDN KB2SXT KB2TIA KB2TNH KB2URI KB2UUL KB2XX KB2YAN KB2YG KB2ZPB KB3AAG KB3AAY KB3AC KB3AGZ KB3AII KB3ANZ KB3AWQ KB3BYA KB3CAB KB3CB KB3CO KB3CRD KB3CT KB3CTX KB3CWQ KB3CXQ KB3EHW KB3EXB KB3FF KB3FTE KB3GVV KB3H KB3HBQ KB3HGC KB3IBT KB3ILS KB3ILT KB3IWV KB3JQQ KB3JSV KB3LIX KB3LNP KB3LR KB3LTT KB3MHB KB3MHB/0 KB3MI KB3MMM KB3MP KB3NCC KB3NCT KB3NXT KB3OK KB3OMW KB3ORR KB3OZA KB3OZC KB3P KB3PC KB3PD KB3QBA KB3QWC KB3RFH KB3RHN KB3RKM KB3RM KB3SGY KB3SJS KB3TAW KB3TEL KB3TTP KB3TUS KB3UCW KB3UHF KB3UVG KB3VAX KB3VCA KB3VHC KB3VMR KB3VNH KB3VQL KB3VWK KB3WAH KB3WD KB3WFV KB3WHB KB3YAY KB3YFO KB3YLR KB3YLX KB3YQK KB3YRC KB3YSM KB3YUF KB3YVS KB3Z KB3ZDA KB3ZVH KB3ZWM KB3ZWR KB4BR KB4BVP KB4C KB4CAU KB4CL KB4CP KB4DX KB4FB KB4FOS KB4GYT KB4HJQ KB4HZ KB4JCY KB4JHU KB4JZ KB4KBS KB4MG KB4MIS KB4MRX KB4OLM KB4PIX KB4PQF KB4QDQ KB4QQJ KB4TZK KB4UF KB4UL KB4UMO KB4UPI KB4YJG KB4YPK KB4ZMR KB5AAM KB5BLZ KB5DJX KB5DRJ KB5ENP KB5EZ KB5GA KB5GH KB5HPL KB5IJ KB5IRL KB5JC KB5JO KB5KYJ KB5KYX KB5MD KB5MRT KB5OO KB5OS KB5PLA KB5REX KB5STL KB5T KB5TMD KB5TX KB5UNX KB5VP KB5WRK KB5YIA KB5ZFO KB6A KB6ATT KB6BYU KB6FB KB6IGK KB6J KB6NU KB6OE KB6OJE KB6QIT KB6TSQ KB6UNC KB6VME KB7ABJ KB7AZ KB7BGS KB7CSV KB7CSW KB7CSX KB7DXN KB7EEG KB7EM KB7FSC KB7G/KH6 KB7GFL KB7GOW KB7H KB7HDX KB7IQO KB7IUV KB7KP KB7KYK KB7MBI KB7ME KB7N KB7NJV KB7OBU/KH2 KB7OGE KB7OUU KB7Q KB7QFE KB7QOS KB7QPS KB7RUQ KB7TLE KB7TMV KB7V KB7V/6 KB7YSY KB7ZGB KB7ZZ KB8AJR KB8BFM KB8CMW KB8CR KB8DDZ KB8DID KB8ECG KB8ELW KB8ESY KB8F KB8FNC KB8GAE KB8GOM KB8HRR KB8JH KB8JIU KB8KB KB8KE KB8KIK KB8KMH KB8LKH KB8LWU KB8M KB8MRC KB8MYC KB8NNU KB8NTL KB8NTY KB8NUF KB8NXH KB8O KB8OCP KB8OEJ KB8OIU KB8OMG KB8OTK KB8OTM KB8PGW KB8QAP KB8RJ KB8RTB KB8RTZ KB8SB KB8SHE KB8SMD KB8SRQ KB8TAK KB8TL KB8TLL KB8TPT KB8TWM KB8TYJ KB8U KB8UHN KB8UJY KB8UMD KB8UUZ KB8V KB8VAO KB8VJL KB8W KB8WDX KB8WNL KB8WR KB8WWE KB8X KB8YJY KB8YV KB8ZGL KB8ZMI KB8ZMJ KB8ZR KB8ZUN KB8ZYE KB9AIT KB9AMG KB9AVX KB9BIT KB9BOJ KB9BPZ KB9CYL KB9DAK KB9DFE KB9DVC KB9ERU KB9GKG KB9GSY KB9GUX KB9HDX KB9IFH KB9IIZ KB9ILT KB9IMF KB9JJF KB9JX KB9KCT KB9KE KB9KEG KB9KWA KB9LML KB9LQA KB9LTW KB9LUQ KB9LYB KB9MEL KB9MLE KB9NIV KB9NKM KB9NTG KB9NW KB9O KB9OG KB9ORH KB9OWD KB9OZI KB9PPY KB9PWN KB9RDS KB9RPS KB9S KB9SWI KB9TEN KB9TNM KB9TQO KB9TVR KB9TYT KB9UKE KB9UMI KB9UWR KB9UWU KB9VXJ KB9WMJ KB9WZH KB9YGD KB9ZLK KB9ZPU KB9ZTF KC0AKU KC0AM KC0BZG KC0CDG KC0CF KC0CGR KC0CVA KC0CWU KC0DAS KC0DDZ KC0DEB KC0DMF KC0DX KC0FCL KC0FU KC0GL KC0GM KC0GP KC0HPM KC0INP KC0INP/4 KC0IUY KC0JFY KC0JQO KC0JRW KC0KOU KC0LDH KC0LKV KC0LMX KC0LXB KC0M KC0MCK KC0MEZ KC0MJY KC0MO KC0MPQ KC0MQG KC0MYW KC0NFB KC0NYK KC0ODE KC0OHP KC0OW KC0PDF KC0PDX KC0PUN KC0PUT KC0QG KC0QLU KC0RET KC0RSX KC0SM KC0STQ KC0SUZ KC0TOT KC0TRX KC0UQE KC0URL KC0UUT KC0UXC KC0V KC0VFP KC0VKN KC0VTJ KC0W KC0WCF KC0WEO KC0WTT KC0YGF KC0YQQ KC0ZNI KC0ZVN KC0ZVR KC1A KC1ACN KC1AHI KC1AHJ KC1AHU KC1AKV KC1AOY KC1APK KC1AV KC1AXC KC1AXJ KC1AYB KC1AYF KC1BAZ KC1BJG KC1BJT KC1BOH KC1BQD KC1BTA KC1BXY KC1CCD KC1CCR KC1CDX KC1CEO KC1CET KC1CGR KC1CQC KC1CRS KC1CWF KC1DAD KC1DKY KC1EL KC1IH KC1MAC KC1ME KC1NY KC1SQ KC1SS KC1UX KC1WJ KC1XX KC2AQU KC2ASA KC2BBI KC2DHU KC2DZT KC2EPU KC2GLG KC2GOW KC2HRG KC2HZM KC2IGE KC2IHI KC2IJ KC2JDU KC2JRQ KC2KAE KC2KC KC2KGV KC2KKQ KC2KKX KC2KLC KC2KQH KC2KXV KC2KZJ KC2LM KC2LMB KC2LMX KC2LRC KC2LSD KC2LST KC2LXD KC2MBV KC2MEE KC2MKI KC2MNV KC2MR KC2NRU KC2NVG KC2NYU KC2OHL KC2OII KC2OSR KC2PDO KC2PJH KC2PMM KC2PUF KC2PUY KC2QDU KC2QJB KC2QLA KC2QNK KC2QYM KC2RA KC2RDW KC2RFY KC2RIV KC2RQO KC2RT KC2RXS KC2SNI KC2SOU KC2SST KC2STA KC2SUL KC2SYF KC2SYK KC2SZ KC2TA KC2TEL KC2TFI KC2TKD KC2TN KC2TVJ KC2UBI KC2ULY KC2UMM KC2VAE KC2VMP KC2VPE KC2VRY KC2WI KC2WLR KC2WOU KC2WPX KC2WQD KC2WUF KC2WVX KC2WYU KC2YEA KC2YIL KC2YME KC2YNC KC2YSO KC2ZA KC2ZDC KC2ZEX KC2ZGW KC2ZOR KC2ZUR KC3AA KC3ABH KC3AIQ KC3ALI KC3AM KC3ANM KC3ANS KC3AOM KC3ASH KC3ASN KC3AUY KC3AZX KC3BBU KC3BER KC3BJP KC3BOA KC3BOM KC3BWA KC3BWB KC3CIP KC3CLT KC3DBG KC3DGC KC3DGE KC3DGM KC3DIG KC3DOF KC3DPB KC3EF KC3II KC3M KC3OQ KC3R KC3WX KC3X KC4AA KC4AAA KC4AAC KC4ATU KC4AUF KC4CQS KC4D KC4DV KC4EOG KC4EY KC4EZN KC4FLB KC4FLT KC4GIA KC4HQS KC4HW KC4IWI KC4IYD KC4JD KC4LE KC4LMD KC4LNX KC4MM KC4NAP KC4NEL KC4OR KC4QP KC4QYG KC4RAC KC4SAW KC4SIG KC4TAC KC4TEO KC4TLK KC4TVZ KC4UMS KC4VJA KC4VLO KC4VO KC4VU KC4WQ KC4XT KC4YBO KC4YCT KC4YEA KC4YOV KC4ZA KC4ZPB KC5AOF KC5BBP KC5BNC KC5BYE KC5CMX KC5CYY KC5EGR KC5FP KC5FU KC5IIE KC5KLQ KC5LK KC5MGW KC5MO KC5ODT KC5PL KC5QIH KC5R KC5RPF KC5RWW KC5RY KC5SB KC5T KC5TGF KC5WA KC5WX KC5WXA KC5YWN KC6A KC6AWX KC6FJC KC6HFF KC6JAM KC6MIE KC6NAT KC6R KC6RUO KC6UIH KC6VVT KC6ZME KC7CM KC7DB KC7DDW KC7ES KC7GX KC7H KC7HVM KC7IEC KC7IGT KC7ITP KC7JN KC7KNY KC7KWG KC7M KC7O KC7OO KC7PFR KC7PM KC7QR KC7QY KC7RG KC7RUN KC7STK KC7SWV KC7TAK KC7V KC7WDL KC7YE KC7Z KC7ZON KC8A KC8AWL KC8AZB KC8BNP KC8BOO KC8BTN KC8BW KC8BYJ KC8CC KC8CKW KC8CY KC8EQF KC8FQD KC8GCR KC8GE KC8GTX KC8HQS KC8IMB KC8IV KC8JCB KC8JNL KC8KE KC8LAS KC8LTL KC8LUB KC8MGD KC8MIS KC8NLP KC8NYH KC8OTD KC8PKY KC8PV KC8QDQ KC8QHT KC8R KC8RP KC8RPV KC8RTW KC8SQC KC8TEE KC8VC KC8VWM KC8WH KC8WSM KC8YEJ KC8YEP KC8YOE KC8YVF KC8YVP KC8ZH KC8ZMN KC9AMM KC9AMY KC9AYV KC9BF KC9BHE KC9BXX KC9CDT KC9CDW KC9CLM KC9CMT KC9CRM KC9CRV KC9DDF KC9DFU KC9DKQ KC9DOA KC9EE KC9EEE KC9ELU KC9EOQ KC9FJE KC9FJX KC9G KC9GBX KC9GHA KC9GLI KC9GZB KC9HGJ KC9HMD KC9HTC KC9HYL KC9HYY KC9IL KC9IRV KC9IWE KC9JBU KC9JCH KC9JLI KC9JML KC9KBB KC9KKM KC9KLA KC9KRX KC9KUN KC9LBE KC9LBO KC9LC KC9LDK KC9LIF KC9LOX KC9LQS KC9MEA KC9MRW KC9MSH KC9MSH/AG KC9MWD KC9MXM KC9MZ KC9NBV KC9NCS KC9NEA KC9NEX KC9NFJ KC9NFQ KC9NNA KC9NOK KC9NQD KC9OMS KC9ON KC9OOK KC9ORD KC9OUT KC9OYE KC9P KC9PYV KC9QAK KC9QFH KC9QPM KC9QQ KC9QVV KC9QYP KC9RAK KC9REX KC9RH KC9RIQ KC9RP KC9RRN KC9RXT KC9SFQ KC9SIO KC9SJN KC9SKE KC9SNI KC9SZI KC9TAU KC9TMH KC9TQR KC9TS KC9TTR KC9TVG KC9TYA KC9TZO KC9UDL KC9UDS KC9UHH KC9UJS KC9UMP KC9UMR KC9UNL KC9UNS KC9UTM KC9UUN KC9UVT KC9VFI KC9VHA KC9VQD KC9VXR KC9VYX KC9VZH KC9W KC9WAV KC9WBH KC9WC KC9WJK KC9WMN KC9WQM KC9WRB KC9WRY KC9WWM KC9YAZ KC9YCP KC9YFU KC9YFW KC9YIJ KC9YIT KC9YLE KC9YRR KC9YS KC9YSR KC9YTT KC9YVL KC9YYP KC9ZAA KC9ZAS KC9ZBP KC9ZIM KC9ZJI KC9ZKS KD0A KD0AA KD0AAA KD0ARN KD0B KD0BIK KD0BSY KD0BVI KD0CAC KD0CQB KD0CRT KD0CVO KD0CVZ KD0CWD KD0DHF KD0DSU KD0EE KD0EKA KD0EKT KD0EMJ KD0EMK KD0FDJ KD0FKO KD0FLD KD0FW KD0FYN KD0GAV KD0GN KD0HII KD0HIY KD0HJG KD0HQJ KD0HRO KD0IEL KD0IF KD0IPI KD0IZL KD0JBN KD0JHW KD0JLE KD0JLN KD0JQF KD0JUC KD0KHV KD0KQL KD0L KD0LAV KD0LRG KD0MCV KD0MEI KD0MYH KD0NEO KD0NMZ KD0NWW KD0OCY KD0OEC KD0OIX KD0OQV KD0OUI KD0OVK KD0OYC KD0PCP KD0PNH KD0PO KD0PQX KD0Q KD0QCF KD0QCT KD0QEA KD0QJY KD0QL KD0QOZ KD0QYN KD0RCB KD0RSX KD0RTB KD0RTK KD0S KD0SBW KD0SJV KD0SQR KD0SVH KD0TGA KD0TKX KD0TMF KD0UAG KD0UDX KD0UHN KD0UKC KD0UN KD0UWZ KD0UYY KD0VHD KD0VJF KD0VJO KD0VMM KD0VNQ KD0VVH KD0WAH KD0WAJ KD0WAK KD0WBL KD0WHR KD0WQN KD0WTE KD0WUQ KD0WWH KD0YAA KD0YFG KD0YHQ KD0YME KD0YSC KD0YSW KD0YTB KD0ZGW KD0ZSM KD0ZWJ KD0ZWS KD0ZZ KD1EU KD1NA KD1O KD1PV KD1W KD1XH KD1YV KD1ZX KD2A KD2AAP KD2ABK KD2AEF KD2AFY KD2ARU KD2BAN KD2BBC KD2BEN KD2BGM KD2BPG KD2BS KD2BXD KD2CAP KD2CDL KD2CDV KD2CFH KD2CKS KD2COE KD2DIG KD2DLL KD2DMR KD2DOE KD2DQX KD2DTK KD2DVW KD2DWD KD2DWX KD2DXI KD2DXJ KD2DXL KD2DXN KD2DZY KD2EHG KD2EHH KD2EIM KD2ELY KD2EOM KD2EOY KD2EQS KD2ETT KD2EWO KD2EZA KD2FIQ KD2FIX KD2FJZ KD2FND KD2FQQ KD2FRX KD2FSH KD2FVG KD2GFO KD2GNQ KD2GUD KD2GYF KD2GYO KD2HRD KD2HXI KD2JA KD2JC KD2JOE KD2MX KD2NE KD2NL KD2RD KD2SC KD2SJM KD2T KD2TT KD2XI KD2XN KD3FG KD3HN KD3LQ KD3NB KD3RF KD3RR KD3TB KD3WK KD4AA KD4ACG KD4AMP KD4BAO KD4BVG KD4CJO KD4CM KD4CX KD4D KD4EAQ KD4EBL KD4EE KD4EXY KD4FJ KD4FV KD4GNM KD4ICT KD4JLK KD4JMV KD4JO KD4JRX KD4LEM KD4LN KD4LV KD4LYS KD4MPN KD4MXA KD4MZM KD4N KD4NEM KD4NH KD4ONT KD4POJ KD4PXY KD4PYR KD4QFT KD4QMY KD4RAX KD4RE KD4RH KD4SN KD4TVB KD4UF KD4UKW KD4ULW KD4VDR KD4VPO KD4VRI KD4VRZ KD4W KD4WCL KD4WUO KD4XR KD4Y KD4YDD KD4ZDQ KD5AFS KD5AR KD5AT KD5AY KD5C KD5CCG KD5DLZ KD5EDL KD5EJG KD5EW KD5FBA KD5FMP KD5ILA KD5IPH KD5J KD5JAA KD5JGA KD5JHE KD5JWC KD5KU KD5L KD5LKB KD5LNO KD5M KD5MMM KD5MUY KD5NXR KD5OMJ KD5PXU KD5QAQ KD5R KD5RA KD5RBU KD5RHR KD5RXP KD5SBP KD5SFI KD5SRW KD5URK KD5USV KD5UVV KD5WVL KD5WY KD5YUK KD5ZAT KD6AF KD6BQ KD6BUA KD6BZN KD6CUB KD6DKC KD6DW KD6EUG KD6FEC KD6FIL KD6FVA KD6FW KD6GHX KD6GIK KD6GWQ KD6HQ KD6HYN KD6KQW KD6LDA KD6ME KD6NEF KD6NFD KD6NIG KD6NJE KD6NSA KD6O KD6OAT KD6PLU KD6PQF KD6RYO KD6ST KD6UBX KD6UY KD6WKY KD6X KD6ZZM KD7DCR KD7DEG KD7ETK KD7GNH KD7GNH/7 KD7H KD7HGS KD7IBE KD7JET KD7JG KD7JS KD7LRK KD7MSC KD7OED KD7OWN KD7PCE KD7PFG KD7QHW KD7RCJ KD7RUS KD7SKY KD7SU KD7UI KD7UIY KD7UO KD7VFC KD7VIK KD7VV KD7WD KD7YDL KD7YUW KD7ZLF KD8AJK KD8BBK KD8BXE KD8CAO KD8CJ KD8COO KD8CQC KD8DCW KD8DES KD8DKG KD8DLQ KD8DUR KD8DVY KD8DX KD8EDN KD8EER KD8EGV KD8EVN KD8EXX KD8EZU KD8F KD8FAQ KD8FBS KD8FDK KD8FO KD8GEH KD8GFY KD8GOX KD8GRO KD8HAM KD8HHG KD8HQU KD8HSV KD8HVN KD8IGK KD8IIN KD8IZZ KD8JAM KD8JDC KD8JN KD8JQE KD8JV KD8KVO KD8KXD KD8LBA KD8LGW KD8LLT KD8LMM KD8LW KD8MEU KD8MGI KD8MQ KD8MRL KD8MV KD8NJ KD8NKJ KD8NNU KD8NOH KD8NX KD8NYO KD8NYP KD8NZF KD8OBW KD8OFL KD8ONC KD8ORN KD8OSD KD8OSJ KD8OSM KD8OUF KD8OZS KD8PFB KD8PGL KD8PQQ KD8QDP KD8QFM KD8QMZ KD8QYE KD8QZE KD8RAP KD8RCZ KD8RDG KD8RFQ KD8RHA KD8RKJ KD8RKP KD8ROF KD8RQE KD8RUC KD8RUD KD8RVK KD8RWR KD8SAV KD8SIZ KD8SKO KD8SNZ KD8SPF KD8SPJ KD8SQ KD8SZZ KD8TCQ KD8TFG KD8THZ KD8TNF KD8TPE KD8TQS KD8TQT KD8TQY KD8TTE KD8TTM KD8TVB KD8U KD8UQY KD8UWF KD8VAE KD8VGA KD8VGH KD8VHE KD8VII KD8VMR KD8VOX KD8VSQ KD8VUU KD8VUX KD8VVL KD8WAK KD8WCJ KD8WRL KD8WSP KD8WTI KD8WVX KD8WYS KD8YEO KD8YGW KD8YIA KD8YNY KD8ZLB KD8ZQG KD8ZQY KD8ZTQ KD8ZWG KD9AC KD9ADB KD9AHP KD9AMB KD9ANY KD9ASA KD9AXR KD9B KD9BBB KD9BIN KD9BNP KD9BVD KD9BVD/AG KD9BWP KD9BYU KD9CLT KD9CMM KD9DCW KD9DGS KD9GN KD9GY KD9HL KD9KW KD9LF KD9MS KD9QS KD9ST KD9VT KE0A KE0AEM KE0AHM KE0BAQ KE0BBL KE0BCS KE0BLA KE0BPY KE0BSJ KE0CDQ KE0CRP KE0ER KE0FK KE0G KE0H KE0IS KE0KZ KE0L KE0MF KE0N KE0PX KE0UI KE0UL KE0VH KE0W KE0Z KE1B KE1BZ KE1CY KE1F KE1IH KE1IU KE1J KE1Q KE1R KE1V KE2D KE2IL KE2M KE2OI KE2SX KE2TR KE2U KE2VB KE2VX KE2WY KE3B KE3CT KE3FG KE3JP KE3KD KE3LA KE3MX KE3O KE3OX KE3UF KE3UY KE3X KE4BFI KE4BFX KE4BXR KE4BZJ KE4CAX KE4CAZ KE4CJS KE4CQ KE4D KE4DV KE4DX KE4ERG KE4ETY KE4HFY KE4HVR KE4JB KE4KE KE4KFG KE4KK KE4KMG KE4KY KE4PMP KE4QCM KE4QVB KE4RUN KE4S KE4SGS KE4TEP KE4UW KE4VA KE4VH KE4WLL KE4XT KE4YOG KE4YVD KE4ZBI KE4ZIP KE4ZUN KE5AKG KE5AKL KE5AX KE5AZ KE5BMY KE5BZ KE5CJ KE5DGP KE5DPE KE5EGP KE5FAH KE5FNA KE5FTY KE5FXE KE5GO KE5HDF KE5ISO KE5IYH KE5KOV KE5KVR KE5LLM KE5LQ KE5MC KE5MIS KE5MKB KE5MMT KE5OG KE5OOA KE5PRL KE5QKR KE5RAD KE5RON KE5RS KE5SCC KE5SNJ KE5SUE KE5TC KE5TD KE5THI KE5TO KE5UVI KE5WB KE5XV KE5ZCZ KE5ZDN KE6DM KE6DPS KE6EEZ KE6FQC KE6FV KE6GLA KE6GRM KE6IRP KE6IUE KE6JNO KE6K KE6KJD KE6KNP KE6PY KE6QEY KE6QR KE6RS KE6SHL KE6TE KE6TIM KE6UCN KE6VUS KE6WC KE6ZLY KE6ZSN KE7ACE KE7AJ KE7AUB KE7BPU KE7BT KE7CDD KE7DX KE7DZ KE7EGO KE7F KE7GKI KE7HBB KE7IHG KE7II KE7KQA KE7LBB KE7LWW KE7NEA KE7NO KE7RTV KE7SW KE7TM KE7UQL KE7WTM KE7X KE7XE KE7ZAC KE7ZOJ KE8ABN KE8AKW KE8ANS KE8ARL KE8C KE8CQ KE8FT KE8FT/6 KE8G KE8KT KE8M KE8NJ KE8NN KE8O KE8RG KE8RU KE8UM KE8UN KE8VC KE8XR KE9ET KE9EX KE9I KE9IX KE9KF KE9N KE9TP KE9UA KE9V KE9XB KF0CT KF0F KF0IQ KF0IR KF0JA KF0LA KF0N KF0Q KF0RQ KF0SJ KF0UR KF0UV KF0XO KF0XV KF0Z KF1C KF1I KF2AT KF2D KF2DT KF2E KF2FK KF2G KF2GV KF2I KF2MR KF2O KF2OG KF2SC KF2T KF2TI KF2UR KF2VX KF2X KF2Y KF2YP KF2ZO KF3B KF3CG KF3DJ KF3F KF3N KF4AGD KF4AV KF4BI KF4BQ KF4CGM KF4CRG KF4CRU KF4DGS KF4DUE KF4DVF KF4ECG KF4GDX KF4GKY KF4GOQ KF4LGA KF4LMT KF4MH KF4MMF KF4NBG KF4NYN KF4PTJ KF4Q KF4RPJ KF4RVE KF4SKY KF4SYZ KF4USB KF4VIS KF4ZGZ KF4ZS KF4ZZ KF5BA KF5CRF KF5CYZ KF5DA KF5DDV KF5DZR KF5EN KF5ER KF5EVV KF5EYC KF5FRT KF5GST KF5GTX KF5GZJ KF5H KF5HAJ KF5HIQ KF5HVL KF5IKK KF5INR KF5ITM KF5IUY KF5JRA KF5JUH KF5LBK KF5LJI KF5LOQ KF5MDZ KF5MXG KF5MYP KF5ONT KF5ORM KF5OUZ KF5OXZ KF5P KF5PAL KF5PAQ KF5PLA KF5QGD KF5RHI KF5RKZ KF5RSA KF5RUW KF5RZO KF5SAB KF5SAW KF5SKP KF5SLK KF5SNL KF5SOU KF5SQC KF5TIE KF5TJQ KF5TOW KF5TTN KF5TXU KF5UEZ KF5UMC KF5UOJ KF5UVN KF5VDX KF5VEN KF5VM KF5VSP KF5WAX KF5WCP KF5WFL KF5WGI KF5WGN KF5WKL KF5WQO KF5WVJ KF5YRT KF5YSH KF5YUB KF5YYZ KF5YZ KF5ZBL KF5ZNQ KF5ZPL KF5ZPW KF5ZSM KF5ZWS KF6A KF6C KF6ESD KF6HI KF6I KF6ILA KF6JQ KF6KDA KF6PKG KF6PRR KF6SJ KF6TTT KF6YLW KF6ZB KF6ZOK KF6ZOL KF6ZYD KF7AGK KF7ATL KF7AXE KF7BA KF7BS KF7CG KF7CQ KF7CYG KF7DS KF7DUR KF7DX KF7DYX KF7E KF7EB KF7ELY KF7EON KF7F KF7FIB KF7FK KF7GGN KF7GMD KF7GMV KF7GPO KF7GYE KF7HB KF7HIL KF7HNC KF7IQ KF7IWA KF7JQV KF7KTC KF7KXV KF7LCH KF7LUA KF7MD KF7MKR KF7NN KF7NPC KF7NPF KF7NRW KF7OJA KF7OZH KF7P KF7PBM KF7PCL KF7PG KF7PKL KF7POL KF7PXT KF7QLH KF7QNL KF7RGZ KF7RIV KF7RM KF7RME KF7RU KF7SVI KF7TCP KF7TDP KF7TLL KF7TOV KF7TY KF7UGG KF7VDL KF7WIM KF7WMO KF7WNS KF7WPK KF7WRS KF7WRU KF7WWP KF7WXZ KF7YED KF7YOU KF7ZIY KF7ZN KF7ZYV KF7ZZ KF8BT KF8E KF8IY KF8MZ KF8OD KF8PD KF8PS KF8UN KF8VS KF9D KF9DB KF9IX KF9MG KF9RM KF9TI KF9U KF9US KG0AL KG0AQ KG0DX KG0EW KG0F KG0KP KG0MW KG0O KG0PP KG0SI KG0SY KG0US KG1D KG1E KG1K KG1Q KG1V KG2A KG2AF KG2CM KG2DC KG2GL KG2IS KG2MS KG2MV KG2RA KG2S KG2U KG2V KG3BOZ KG3L KG3N KG3V KG3W KG4BUK KG4C KG4CUY KG4DY KG4HF KG4HLG KG4HUF KG4IGC KG4IKQ KG4IXG KG4JTR KG4JXH KG4JYB KG4KVZ KG4KWW KG4LB KG4LMW KG4LUN KG4MGB KG4NEL KG4OCJ KG4OKG KG4OLE KG4PLT KG4Q KG4QIV KG4QZV KG4RRT KG4RWO KG4TAH KG4TEI KG4TRI KG4TYH KG4URP KG4USN KG4UVU KG4V KG4V/1 KG4VMB KG4W KG4WAS KG4WOJ KG4WQZ KG4WV KG4XP KG4Y KG4ZDY KG4ZNA KG4ZOD KG4ZOI KG5ABW KG5ANO KG5ANP KG5AOD KG5ARD KG5ARW KG5AVT KG5BA KG5BIS KG5BMF KG5CCI KG5CFS KG5CIJ KG5CIK KG5CUK KG5DEC KG5DMX KG5DWP KG5DXW KG5DZR KG5EAO KG5EIU KG5EN KG5ERV KG5ESC KG5EYC KG5FRR KG5FRS KG5IG KG5NP KG5OA KG5RJ KG5SV KG5TA KG5TED KG5U KG5UN KG5VK KG5WR KG6AF KG6AO KG6BOU KG6CIH KG6DX KG6FIY KG6HJU KG6HM KG6MC KG6N KG6PB KG6PO KG6RCW KG6SVF KG6TBR KG6UEF KG6WIK KG6XF KG6YST KG6ZWD KG7AAU KG7AV KG7BAN KG7CJS KG7CUI KG7DMI KG7DPK KG7DRE KG7DYX KG7EBQ KG7EDP KG7FDW KG7FEA KG7FIU KG7FXT KG7GEP KG7GYI KG7GYO KG7H KG7HHG KG7IRJ KG7JMI KG7JUD KG7JWD KG7LBT KG7LCD KG7LNG KG7MRA KG7NJQ KG7NLF KG7NV KG7OF KG7OH KG7OHG KG7OQY KG7P KG7PAG KG7PJS KG7RZ KG7SS KG7VQ KG7WZ KG7YC KG8CO KG8CW KG8DH KG8FE KG8GO KG8NH KG8OU KG8P KG8UT KG8V KG9CD KG9D KG9DN KG9EE KG9FA KG9FB KG9G KG9JP KG9N KG9SF KG9X KG9Y KG9Z KH2/JH1DLD KH2/N2NL KH2AR/W4 KH2F KH2JU KH2KY KH2L KH2RU/KP4 KH2X KH6AT KH6BB KH6CC KH6CG KH6CJJ KH6CS KH6CS/W1 KH6CW KH6DD KH6DE KH6DK KH6DV KH6DX KH6FP KH6GMP KH6GT KH6HI KH6HU KH6HWC KH6J KH6JAY KH6KG KH6KV KH6LC KH6LH KH6M KH6MAC KH6MB KH6MB/AI5 KH6MD KH6ND/NZ7 KH6ND/W7 KH6NX KH6OA KH6OO KH6OWL KH6QH KH6QJ KH6RC KH6RR KH6RS KH6SAT KH6TU KH6U KH6VV KH6WA KH6WG KH6XL KH6XS KH6XX KH6Y KH6ZM KH7AR KH7C KH7CW KH7DX KH7LC KH7M KH7XS/W4 KH7XX KH7Y KH8/K8GU KH8B KI0AD KI0EO KI0F KI0G KI0GL KI0HA KI0HQ KI0I KI0IH KI0II KI0J KI0KB KI0KN KI0LS KI0QS KI0SK KI0Z KI1G KI1H KI1U KI2P KI3N KI3T KI4AJX KI4AX KI4BBK KI4BIY KI4BJS KI4BQ KI4BXU KI4CBN KI4CHB KI4CLZ KI4DFS KI4DHB KI4DNO KI4DT KI4ECU KI4EEY KI4ETG KI4EZC KI4FCQ KI4FH KI4FSZ KI4FW KI4GE KI4GGH KI4GGJ KI4HEJ KI4IDB KI4IMA KI4IO KI4KK KI4KN KI4KPA KI4LP KI4LXH KI4MJK KI4MYD KI4NAK KI4NL KI4NSP KI4PHE KI4PS KI4QG KI4RDG KI4RKM KI4SP KI4TG KI4TI KI4TXP KI4TYK KI4TZ KI4UDF KI4VCT KI4VPD KI4WCA KI4WCQ KI4WFJ KI4WMO KI4YRX KI4YY KI4YZN KI4ZNV KI5AK KI5EE KI5F KI5FJ KI5JZ KI5SI KI5WE KI5WL KI5YG KI6AHH KI6BWO KI6CG KI6CQ KI6CYT KI6DRN KI6DY KI6EAB KI6IJI KI6IT KI6J KI6JJW KI6KVW KI6LTC KI6LZ KI6MQX KI6MUH KI6NDA KI6NGN KI6NIC KI6NVG KI6ORO KI6OSS KI6OY KI6PMD KI6QDH KI6QEL KI6RRD KI6RRN KI6TG KI6TL KI6TSF KI6UDZ KI6VC KI6WD KI6WJ KI6WOX KI6X KI6YWP KI6ZU KI7AO KI7AY KI7BP KI7DG KI7DV KI7M KI7MD KI7MT KI7N KI7NW KI7SS KI7TG KI7WL KI7Y KI8AB KI8AE KI8AF KI8DU KI8ER KI8HA KI8JY KI8L KI8R KI8Z KI9A KI9DX KI9E KJ0B KJ0C KJ0D KJ0I KJ0P KJ1J KJ2D KJ2U KJ3Q KJ3X KJ4AOM KJ4APD KJ4AUQ KJ4AZA KJ4BIX KJ4BUG KJ4DHF KJ4DNK KJ4DVR KJ4E KJ4ECX KJ4EOZ KJ4EX KJ4EZX KJ4FAW KJ4FQN KJ4FUU KJ4GWE KJ4HZ KJ4IAM KJ4IWZ KJ4IXG KJ4IZW KJ4JOA KJ4JQU KJ4KKD KJ4LEN KJ4LTA KJ4MPE KJ4MZ KJ4MZI KJ4NN KJ4NNB KJ4NOP KJ4OBR KJ4OJG KJ4PCC KJ4PV KJ4QHL KJ4QVJ KJ4QXC KJ4R KJ4RAQ KJ4RUC KJ4RZT KJ4SIU KJ4SKO KJ4SSN KJ4TFU KJ4TSA KJ4TTP KJ4UAU KJ4UBM KJ4UC KJ4UGO KJ4UQT KJ4UZU KJ4V KJ4VKV KJ4VTH KJ4WD KJ4WKD KJ4WMY KJ4WNW KJ4WYF KJ4YHC KJ4YKG KJ4YLO KJ4YOT KJ4YPY KJ4YQK KJ4Z KJ4ZBK KJ4ZDB KJ4ZEF KJ4ZMQ KJ4ZMV KJ5AA KJ5CI KJ5FA KJ5IX KJ5RM KJ5T KJ5Y KJ6AGX KJ6ANT KJ6AP KJ6CA KJ6CQC KJ6CWZ KJ6DQ KJ6EFJ KJ6GHN KJ6GLX KJ6HUP KJ6HZ KJ6ICA KJ6JO KJ6LBA KJ6LJB KJ6LJI KJ6LXX KJ6M KJ6MBR KJ6MBW KJ6MC KJ6MIC KJ6MQM KJ6NZ KJ6OFK KJ6OGE KJ6OHI KJ6P KJ6PNF KJ6PON KJ6PTX KJ6PZL KJ6RFQ KJ6RKZ KJ6RMM KJ6RUA KJ6SCZ KJ6SRW KJ6SST KJ6TOA KJ6TPG KJ6TRT KJ6TSX KJ6TTR KJ6UD KJ6UXU KJ6VKR KJ6VNA KJ6VQF KJ6VU KJ6WDL KJ6YAP KJ6YQV KJ6YVT KJ6YXI KJ6ZCR KJ6ZQP KJ7EX KJ7GI KJ7HR KJ7MX KJ7NL KJ7NO KJ7PO KJ7QT KJ8N KJ8O KJ9C KJ9C/7 KJ9D KJ9X KK0DJ KK0I KK0K KK0M KK0Q KK0SD KK1C KK1KW KK1VT KK1W KK1X KK1Z KK2DOG KK2I KK2M KK3AN KK3KK KK3RW KK3T KK3TN KK4AMC KK4AND KK4ASA KK4ASL KK4BKD KK4BNC KK4BSM KK4BVV KK4BXV KK4CCL KK4CLY KK4COZ KK4CQN KK4CTN KK4CUL KK4DMW KK4DQO KK4DSD KK4DVA KK4DZP KK4EHE KK4EIR KK4ENJ KK4EQB KK4EQF KK4EUN KK4FFE KK4FKF KK4FKH KK4FOF KK4FTC KK4FTW KK4FWU KK4FYV KK4GQ KK4GV KK4GVP KK4HCF KK4HEG KK4HEP KK4HEQ KK4HPX KK4HPY KK4HQT KK4HUK KK4HZQ KK4IDH KK4IDX KK4IMJ KK4IOY KK4IWN KK4IXK KK4JSJ KK4JTW KK4KBS KK4KGE KK4KW KK4KWZ KK4LBU KK4LGC KK4LOI KK4LOV KK4LRR KK4LY KK4LYN KK4MES KK4MGK KK4ML KK4MOV KK4NAW KK4NC KK4NGD KK4NJM KK4NLK KK4NXD KK4NZH KK4OA KK4ODQ KK4OEY KK4OFV KK4OII KK4OIL KK4OK KK4OLM KK4OQF KK4ORP KK4OSI KK4OVW KK4OW KK4OWZ KK4PC KK4PGC KK4PH KK4PHP KK4PIV KK4PJ KK4PKR KK4PQA KK4PTU KK4PUM KK4PUX KK4PWE KK4PZC KK4PZF KK4QEQ KK4QEV KK4QIY KK4QKC KK4QOC KK4QOE KK4R KK4RCO KK4RFH KK4RFL KK4RGN KK4RJL KK4RV KK4RVW KK4RXC KK4RXN KK4RXU KK4SHF KK4SLZ KK4SMJ KK4TCE KK4TDO KK4TE KK4TGV KK4TJP KK4TKJ KK4TKV KK4TRL KK4TUX KK4TXZ KK4UBQ KK4UCH KK4UHK KK4UHR KK4ULD KK4UNZ KK4US KK4UVW KK4UYT KK4VA KK4VBV KK4VDF KK4VHS KK4VNH KK4VUF KK4WAC KK4WAQ KK4WDM KK4WDR KK4WEY KK4WJE KK4WMX KK4WPR KK4WS KK4XO KK4XX KK4YDS KK4YOK KK4ZHL KK4ZR KK4ZSH KK4ZT KK4ZTT KK4ZUU KK5CR KK5DO KK5E KK5I KK5IB KK5ID KK5J KK5JY KK5LD KK5LO KK5MR KK5NC KK5NO KK5OQ KK5OV KK5T KK5W KK6AAR KK6AGP KK6AHB KK6AM KK6AOL KK6BRW KK6C KK6CKB KK6COV KK6CTI KK6CUS KK6CY KK6DCT KK6DF KK6DMH KK6DOC KK6DPE KK6EZQ KK6FCV KK6FJQ KK6FUT KK6FXR KK6FXV KK6FYN KK6GGC KK6GMH KK6GMN KK6GPT KK6I KK6IEE KK6IFZ KK6IJN KK6ILV KK6JFN KK6JPA KK6KAY KK6KEJ KK6KRZ KK6L KK6LGK KK6LT KK6MC KK6MMD KK6MWV KK6NON KK6P KK6PCO KK6PGL KK6RF KK6TV KK6ZM KK7A KK7AC KK7EL KK7JS KK7L KK7MD KK7MF KK7OF KK7PR KK7PW KK7S KK7UF KK7UQ KK7VL KK7X KK7XS KK7XX KK7YC KK7YL KK8B KK8D KK8K KK8MM KK8U KK8ZZ KK9A KK9DX KK9EJ KK9G KK9H KK9I KK9K KK9KK KK9M KK9N KK9O KK9T KK9U KK9V KK9X KL0ET/W4 KL0MP KL1JP KL1SE/W4 KL1SF/K7 KL2DV KL2HD KL2R KL2ZZ KL3DM KL3IH KL3UX KL3WY KL4C KL5AJK KL5DX KL5E KL6C KL7AA KL7AC KL7AIR KL7D KL7DA KL7DG KL7DX KL7FDQ KL7FWX KL7HBK KL7HFI KL7HM KL7IDA KL7IEH KL7IG KL7ILA KL7IWC KL7JRC KL7JVD KL7KK KL7KY KL7LT KL7MM KL7N KL7NC KL7OH KL7P KL7R KL7RA KL7SB KL7SIX KL7TN KL7TS KL7USA KL7WP KL7WV KL7XU KL7YK KL9A/W7 KM0A KM0DX KM0O KM0R KM0T KM0U KM1C KM1D KM1G KM1R KM1W KM1X KM1Z KM2E KM2L KM2O KM2S KM2Z KM3T KM3U KM4AAX KM4ADJ KM4AEM KM4BOB KM4C KM4CAX KM4CCR KM4CDT KM4CGW KM4CPA KM4CQG KM4D KM4DAY KM4DDZ KM4DJQ KM4DNY KM4DR KM4DUA KM4DVA KM4ECK KM4ECP KM4ERT KM4FO KM4FOC KM4FR KM4FRM KM4GBM KM4GGQ KM4HI KM4HLF KM4HRG KM4IK KM4JA KM4JS KM4KB KM4LS KM4NS KM4RK KM4RO KM4SLW KM4TC KM5EO KM5FW KM5G KM5LY KM5PS KM5TY KM5VI KM5WX KM6CQ KM6CR KM6DF KM6G KM6HB KM6I KM6JD KM6WC KM6Z KM7DX KM7N KM7Q KM7R KM7TR KM7W KM8Q KM9M KM9O KM9P KM9R KM9Z KN0A KN0JI KN0R KN0V KN1CBR KN1FE KN1H KN1Q KN1W KN2GSP KN2M KN2RC KN2T KN3A KN3X KN4AA KN4DS KN4GE KN4JN KN4JX KN4KL KN4OK KN4QD KN4XJ KN4Y KN5A KN5H KN5O KN5S KN5TX KN5V KN5X KN6BU KN6CCW KN6DR KN6DX KN6KJ KN6Y KN7D KN7K KN7N KN7PF KN7S KN7T KN8DMK KN8F KN8KAZ KN8L KN9E KN9P KO0Z KO1D KO1E KO1U KO2E KO2OK KO3D KO3T KO4DI KO4FD KO4FV KO4GS KO4OL KO4PU KO4SB KO4XB KO4XJ KO4XL KO5DX KO6I KO6JF KO6KL KO6LU KO6NO KO6UW KO6WI KO6ZW KO7AA KO7P KO7SS KO7X KO8SCA KO8Z KO9Q KO9V KP2AA KP2AD KP2B KP2D KP2DX KP2F KP2JS KP2M KP2Q KP2RUM KP2XX KP3AH KP3BR KP3IV KP3W KP3Z KP4AS KP4BD KP4BME KP4CG KP4CPC KP4EE KP4EJ KP4ES KP4EU KP4F KP4FD KP4FIE KP4JAR KP4JED KP4JFR KP4JRS KP4KD/W4 KP4KE KP4LE KP4LIV KP4MB KP4MF KP4MHZ KP4N KP4NS KP4P KP4PR KP4RAT KP4ROS KP4RV KP4S KP4SJ KP4SX KP4TG KP4TN KP4VP KP4WU/W4 KP4ZN KQ0C KQ0J KQ1A KQ1F KQ1P KQ2L KQ2M KQ2P KQ2R KQ2RP KQ3E KQ3F KQ4BR KQ4FM KQ4HN KQ4K KQ4KK KQ4PK KQ4TG KQ4U KQ4XF KQ4Y KQ4ZM KQ5M KQ6DI KQ6DV KQ6ES KQ6K KQ6LV KQ6P KQ6PK KQ6Q KQ6UP KQ6X KQ7M KQ7W KQ9H KQ9J KR0MED KR0P KR0U KR1A KR1CKM KR1CW KR1LLR KR1ZAN KR2AR KR2C KR2D KR2E KR2Q KR2T KR3E KR3J KR4AE KR4AS KR4AW KR4BD KR4F KR4IQ KR4LO KR4M KR4NV KR4OJ KR4PI KR4RO KR4U KR4UA KR4V KR4X KR4YO KR4Z KR5D KR5NM KR5R KR5RR KR5RR/6 KR6BB KR6C KR6E KR6J KR6LH KR6N KR6NA KR6X KR6ZY KR7C KR7DX KR7G KR7LD KR7O KR7W KR7X KR8T KR8V KR9E KR9U KS0AA KS0DX KS0M KS0MO KS0T KS0USA KS0X KS1J KS1Q KS2G KS3D KS3K KS4BH KS4GW KS4L KS4Q KS4S KS4TL KS4V KS4VOL KS4X KS4XQ KS4YT KS4YX KS5A KS5H KS5Z KS6A KS6F KS6M KS6PD KS7AA KS7N KS7S KS7T KS7U KS7V KS9K KS9W KS9WI KT0A KT0DX KT0F KT0G KT0K KT0P KT0R KT0T KT1B KT1H KT1I KT1K KT1NG KT1R KT1T KT2G KT2ZZ KT3L KT3M KT3Q KT3R KT3Y KT4AH KT4CB KT4FQ KT4FW KT4KQ KT4LST KT4OM KT4OO KT4P KT4Q KT4QF KT4RF KT4RR KT4TL KT4TN KT4TTT KT4VK KT4XN KT4ZA KT4ZB KT4ZM KT5D KT5J KT5MR KT5U KT5V KT6DX KT6L KT6LA KT6V KT6Y KT7AZ KT7DX KT7E KT7G KT8D KT8K KT8O KT8TD KT8Y KT9L KT9T KT9X KT9Y KU0E KU0G KU1CW KU1N KU1T KU1Z KU2C KU2M KU2N KU2US KU3X KU4A KU4AF KU4C KU4CG KU4DE KU4FX KU4GC KU4MN KU4MT KU4NE KU4NY KU4PY KU4QG KU4UK KU4V KU4VY KU4WD KU4XO KU4YW KU5B KU6F KU6H KU6J KU6T KU6W KU6X KU7K KU7N KU7T KU7Y KU7Z KU8E KU8F KU8K KU8T KU8V KU8Z KU9B KU9C/VP9 KU9E KU9RK KU9S KU9V KU9Z KV0Q KV1E KV1J KV1P KV1W KV2C KV2K KV2M KV2R KV2X KV3Q KV3W KV3W/4 KV4CF KV4CQ KV4DX KV4FZ KV4HT KV4JE KV4JX KV4K KV4KY KV4L KV4LQ KV4LV KV4MO KV4NU KV4PI KV4PX KV4PY KV4QS KV4QS/8 KV4RH KV4RV KV4SM KV4T KV4TG KV4TH KV4TQ KV4UP KV4WN KV5Q KV5V KV5WS KV5Y KV6O KV6S KV6X KV7DX KV7J KV7K KV7N KV7O KV8Q KV8S KV9W KW0H KW0J KW0KW KW0U KW1AM KW1ND KW2J KW2T KW3A KW3E KW3F KW3LO KW3U KW3Z KW4AE KW4B KW4CC KW4CQ KW4CR KW4CW KW4E KW4FC KW4G KW4HN KW4HR KW4J KW4JS KW4LEE KW4M KW4VA KW4WAB KW5HP KW5JC KW5P KW6ACK KW6C KW6EZ KW6G KW6J KW6JIM KW6M KW6PMC KW6Q KW6S KW7D KW7N KW7Q KW7R KW7W KW7XX KW7Y KW8KW KW8N KW8O KW9E KW9H KW9R KW9U KX0A KX0R KX1E KX1G KX1NH KX1W KX1X KX2A KX2H KX2P KX2S KX2X KX2Y KX3DM KX3DX KX3M KX3V KX3Y KX4O KX4P KX4TIM KX4TT KX4VU KX4WB KX4WW KX4X KX5M KX5U KX6C KX6X KX7DX KX7L KX7M KX7P KX7YT KX8DX KX8F KX9DX KX9M KX9Q KX9X KX9X/1 KY0F KY0K KY0O KY0Q KY0R KY2D KY2O KY3W KY4BP KY4DXA KY4F KY4K KY4KY KY4OZ KY4P KY4RE KY4XX KY5I KY5M KY5Q KY5R KY5U KY6AA KY6J KY6LA KY6R KY6X KY7M KY7Q KY9J KY9KYO KZ1A KZ1K KZ1M KZ1O KZ1W KZ1X KZ2I KZ2Q KZ2R KZ2V KZ3W KZ3X KZ4D KZ4G KZ5A KZ5AA KZ5AM KZ5AT KZ5D KZ5DP KZ5DX KZ5J KZ5JE KZ5MM KZ5OM KZ6O KZ6T KZ7O KZ7X KZ8K KZ8O KZ8Y KZ9A KZ9O L27D L33M L47H L59D L73D L77B L77D LA0CX LA0FA LA1BUA LA1CCA LA1DSA LA1HSA LA1IO LA1J LA1K LA1KUA LA1MFA LA1TPA LA1TV LA1U LA1VFA LA1VNA LA1XFA LA2AB LA2DS LA2EN LA2FKA LA2GH LA2HFA LA2JX LA2LI LA2MOA LA2NTA LA2ONA LA2QJA LA2TD LA2US LA2WRA LA2XNA LA2XPA LA3AKA LA3BO LA3BPA LA3CLA LA3DNA LA3FL LA3HPA LA3LJ LA3LJA LA3PUA LA3QPA LA3RK LA3RNA LA3S LA3T LA3TK LA3TMA LA3WAA LA3ZA LA4AAA LA4CAA LA4CQ LA4EI LA4ESA LA4GHA LA4GMA LA4IR LA4NL LA4OGA LA4PM LA4SGA LA4URA LA5EKA LA5FBA LA5HE LA5LJA LA5PRA LA5QIA LA5SAA LA5SJA LA5TFA LA5UF LA5YJ LA5ZQ LA6ALA LA6CF LA6DFA LA6DW LA6GKA LA6GX LA6IHA LA6IRA LA6KOA LA6OJ LA6OP LA6PB LA6PBA LA6SK LA6TPA LA6UL LA6UMA LA6VM LA6VQ LA6WDA LA6YEA LA6YIA LA6ZFA LA7AFA LA7AK LA7CL LA7DHA LA7GIA LA7GNA LA7H LA7HJA LA7IJA LA7JO LA7MFA LA7NFA LA7Q LA7RJ LA7SI LA7SKA LA7TN LA7TO LA7TTT LA7VRA LA7XIA LA7XK LA8AJA LA8AW LA8CJ LA8FTA LA8HGA LA8LJA LA8OKA LA8OM LA8OOA LA8OSA LA8PDA LA8RTA LA8UHA LA8WG LA9BM LA9CSA LA9CY LA9DAA LA9DFA LA9DK LA9GY LA9H LA9OI LA9RY LA9TJA LA9TY LA9VFA LA9VK LA9VKA LA9WDA LB1GB LB1JG LB1KG LB1LE LB2EG LB2TB LB2TG LB3RE LB4CD LB5BG LB5WB LB6B LB6KC LB7Q LB7ZG LB8IB LB9RE LM2T75Y LM9L40Y LN1B LN1K LN2HQ LN3Z LN4BBC LN4C LN5O LN7TTT LN8W LO2F LO4D LO5D LO7D LO7H LP1H LP5D LP7D LQ4D LQ5H LQ7E LR0DX LR1A LR1E LR1F LR1H LR3M LR4W LS1F LT0H LT1F LT2H LT4D LT5D LT5I LT5X LT7F LT7H LU1AET LU1ALF LU1AW LU1BCE LU1BJW LU1BR LU1CFU LU1DZ LU1EXR LU1EY LU1FAM LU1FKR LU1FM LU1FQ LU1HLH LU1IBL LU1ICX LU1MA LU1MPK LU1QAH LU1QR LU1UM LU1VM LU1VMG LU1VOF LU1WI LU1XS LU1YY LU2BPM LU2DA LU2DKT LU2DVI LU2EE LU2FCB LU2FDA LU2FFD LU2FGL LU2FLB LU2UF LU2UG LU2VH LU3ARE LU3CW LU3DAT LU3DK LU3DNR LU3DR LU3DW LU3DX LU3DY LU3EHR LU3FGL LU3FO LU3FV LU3HFA LU3HIP LU3HS LU3JVO LU3MAM LU3MCJ LU3UI LU3VA LU3XX LU3YEP LU4AA/5 LU4AA/F LU4AA/H LU4DBP LU4DPL LU4DPT LU4EG LU4FD LU4FM LU4FPZ LU4FTA LU4HK LU4JI LU4VEW LU4VZ LU5AB LU5CAB LU5DQ LU5EVK LU5FC LU5FF LU5FP LU5FR LU5HCB LU5MT LU5MTN LU5OM LU5VV LU5WT LU6AM LU6DC LU6DU LU6EF LU6ETB LU6EVD LU6FN LU6HBB LU6QI LU6UAL LU6UO LU6VEK LU6XV LU7ADN LU7DDX LU7DH LU7DW LU7EC LU7FIA LU7FSM LU7HF LU7HN LU7HZ LU7MCJ LU7MT LU7VCH LU7WW LU7YS LU7YW LU7YWC LU7YZ LU8ADX LU8DY LU8EEM LU8EHR LU8EKC LU8FAU LU8VLE LU8VR LU8XW LU8YE LU9CBL LU9CBM LU9DAG LU9DB LU9EHU LU9FHF LU9HW LU9MBY LU9MDH LU9VD LV1F LV5V LV6D LV6E LW0F LW1DG LW1EUD LW1HR LW2DFH LW2EE LW3DC LW3DG LW3DN LW3EX LW5DW LW5EE LW5ER LW5HR LW6AG LW6DG LW6DIP LW6DW LW6EBA LW6EGE LW7DBA LW7HT LW8DQ LW9DHR LW9ETQ LX0RL LX1CC LX1DA LX1DKE LX1EA LX1ER LX1HD LX1IQ LX1KN LX1LE LX1NJ LX1NO LX1NW LX1RFJ LX1SG LX1UN LX3DX LX4A LX4B LX7I LX7X LX8M LX8RTTY LX9DX LX9EG LX9WS LY/R3FQ LY/YL2TD LY0HQ LY1BWB LY1CG LY1CT LY1CX LY1DJ LY1EE LY1FK LY1K LY1M LY1MW LY1N LY1NDN LY1R LY1SR LY1VP LY1W LY2AE LY2AJ LY2AT LY2AX LY2BAA LY2BAW LY2BBF LY2BIS LY2BKT LY2BL LY2BNL LY2BOS LY2BUU LY2BVB LY2C LY2CG LY2CL LY2CO LY2CQ LY2CV LY2CX LY2DM LY2DV LY2DX LY2EN LY2EW LY2EX LY2F LY2FN LY2GN LY2GV LY2GW LY2H LY2HS LY2IJ LY2J LY2K LY2KA LY2KW LY2LF LY2MM LY2N LY2ND LY2NI LY2NK LY2NY LY2O LY2OF LY2OM LY2OU LY2PAD LY2PX LY2PY LY2RJ LY2SA LY2SQ LY2SS LY2T LY2TA LY2TS LY2W LY2X LY2XW LY2YR LY3A LY3AB LY3B LY3BB LY3BN LY3BY LY3CW LY3CY LY3DA LY3G LY3H LY3I LY3IV LY3KS LY3NX LY3QA LY3UV LY3X LY3Z LY3ZM LY4A LY4B LY4BF LY4BP LY4G LY4K LY4L LY4OO LY4Q LY4R LY4S LY4T LY5A LY5AA LY5AT LY5D LY5E LY5G LY5I LY5K LY5L LY5O LY5Q LY5R LY5S LY5T LY5W LY5Y LY6A LY7A LY7M LY7Z LY8O LY9A LY9Y LZ/OH6L LZ/RW2A LZ0I LZ0M LZ1000TS LZ100AJ LZ112RF LZ14IARU LZ1AEY LZ1AF LZ1AQ LZ1BJ LZ1BP LZ1BY LZ1CBK LZ1CF LZ1CI LZ1CLM LZ1CNN LZ1CY LZ1DLZ LZ1DM LZ1DNY LZ1DO LZ1DQ LZ1EO LZ1EP LZ1EV LZ1FH LZ1FI LZ1FJ LZ1FY LZ1GE LZ1GEN LZ1GL LZ1GU LZ1HO LZ1HW LZ1IA LZ1IKY LZ1IQ LZ1IU LZ1JY LZ1JZ LZ1KAU LZ1KCO LZ1KFM LZ1KGB LZ1KPP LZ1KY LZ1KZ LZ1MC LZ1MDU LZ1MG LZ1MS LZ1ND LZ1NG LZ1NJ LZ1NK LZ1NT LZ1NYK LZ1OI LZ1OJ LZ1OP LZ1PM LZ1QB LZ1QI LZ1QN LZ1QN/1 LZ1QV LZ1QZ LZ1RAY LZ1RF LZ1RW LZ1SDR LZ1ST LZ1SWAT LZ1UQ LZ1VB LZ1VCT LZ1VDR LZ1VQ LZ1VVD LZ1VVV LZ1WE LZ1WF LZ1XL LZ1YE LZ1YP LZ1YQ LZ1YY LZ1ZJ LZ1ZM LZ1ZP LZ1ZU LZ1ZX LZ2/RW2A LZ2014KM LZ2015KM LZ20TRC LZ2A LZ2AG LZ2AO LZ2CC LZ2CH LZ2CJ LZ2CWW LZ2DB LZ2DF LZ2DJA LZ2DS LZ2EG LZ2FM LZ2FQ LZ2HA LZ2HM LZ2HN LZ2HQ LZ2HR LZ2HT LZ2JA LZ2JE LZ2JK LZ2JOW LZ2JR LZ2KSB LZ2KSB/P LZ2LT LZ2MAM LZ2NG LZ2NW LZ2OJ LZ2OQV LZ2PG LZ2PI LZ2PL LZ2PP LZ2PS LZ2PT LZ2RM LZ2RS LZ2SC LZ2TF LZ2TU LZ2UW LZ2VA LZ2VR LZ2VU LZ2WNW LZ2WP LZ2WSG LZ2XF LZ2YO LZ2ZA LZ2ZD LZ2ZF LZ2ZG LZ2ZY LZ3A LZ3BB LZ3BG LZ3CQ LZ3DJ LZ3FM LZ3FN LZ3GH LZ3HI LZ3PZ LZ3RM LZ3RN LZ3SD LZ3SM LZ3TL LZ3TY LZ3V LZ3YV LZ3ZQ LZ3ZZ LZ49FJ LZ4A LZ4AE LZ4BU LZ4GL LZ4SU LZ4T LZ4TL LZ4TU LZ4TX LZ5C LZ5CA LZ5E LZ5IL LZ5K LZ5PL LZ5QZ LZ5R LZ5UU LZ5VV LZ5W LZ5X LZ5XQ LZ5Z LZ5ZI LZ60KLR LZ69VZ LZ6A LZ6B LZ6C LZ6K LZ6R LZ6Z LZ73TRC LZ7A LZ7E LZ7H LZ7HQ LZ7J LZ7M LZ7O LZ7V LZ7W LZ7Z LZ8A LZ8E LZ8W LZ8Z LZ9A LZ9E LZ9R LZ9V LZ9W M0A M0AAA/P M0AAC M0ACL M0ACM M0AFJ M0AFZ M0AID M0ASJ M0AUG M0BAW M0BCT M0BEW M0BJL M0BKB M0BKV M0BLF M0BMX M0BPQ M0BQT M0BTZ M0BUI M0BUL M0BUY M0BVE M0BVL M0BZZ M0CAR M0CFM M0CFW M0CHK M0CKE M0CKU M0CKX M0CLH M0CNP M0COC M0COM M0CQE M0CSD M0CTJ M0CUS M0DAG M0DBO M0DCD M0DDC M0DDT M0DEP M0DGB M0DHO M0DLT M0DMA M0DOM M0DSK M0DSL M0DSR M0DXR M0DYI M0DZB M0FAK M0FAQ M0FZW M0GAV M0GBZ M0GDX M0GHQ M0GIK M0GKC M0GME M0GOJ M0GVZ M0GZG M0GZR M0HDF M0HDX M0HFB M0HFC M0HFY M0HHG M0HKB M0HMF M0HNC M0HOM M0HRX M0HWA M0HYE M0ICJ M0ICR M0IDL M0IKE M0ILT M0INN M0IPU M0ITI M0IUK M0IVE M0JAH M0JGH M0JMO M0JUE M0JWB M0KCM M0KLO M0KPW M0KWK M0KYI M0LAY M0LBJ M0LDM M0LEY M0LJD M0LLW M0LMN M0LTA M0MAC M0MBF M0MCG M0MCV M0MCX M0MDA M0MDR M0MIR M0MJA M0MNM M0MNV M0MPM M0MSZ M0MWC M0MXX M0MYK M0NEX M0NIE M0NKR M0NPQ M0NPT M0NQN M0NRD M0NYP M0OIC M0OSA M0OSH M0OXO M0P M0PAI M0PAM M0PAR M0PCB M0PCC M0PGT M0PIE M0PKZ M0PLX M0PMV M0PNN M0PSC M0PSW M0PXD M0PZT M0RBE M0RBG M0REX M0RGI M0RLC M0RLM M0RNR M0RSF M0RTI M0RYB M0RYB/P M0SAR M0SBF M0SDM M0SEL M0SEV M0SHK M0SIY M0SLC M0SPA M0SSR M0TAQ M0TAV M0TAZ M0TCL M0TDK M0TDW M0TEF M0TFO M0TJU M0TQM M0TQR M0TSL M0TTB M0TTF M0TXK M0TXR M0TZZ M0UAT M0UKD M0UNI M0URX M0USY M0UTD M0VAA M0VCP M0VFG M0VIE M0VSP M0VWK M0WAG M0WAY M0WBX M0WLF M0WLY M0WNF M0WYB M0WYH M0WYM M0XDX M0XLT M0XOC M0XVF M0YBC M0YCQ M0YDB M0YKB M0YVG M0ZCR M0ZDZ M0ZGY M0ZID M0ZOL M0ZRA M0ZRQ M0ZRS M1ACB M1AFQ M1AQV M1BCM M1BFK M1BKL M1BPN M1CXK M1DNC M1DST M1EAK M1ENI M1EYP M1EYP/P M1FCV M1GEO M1GRA M1JSS M1LMO M1MST M1N M1PTR M1SLH M1SMH M1TZR M1VHT M2A M2G M2W M2X M2Z M3BBF M3BNN M3C M3CYP M3D M3DFW M3DJS M3GWO M3GXX M3I M3JAC M3JFM M3LBY M3MQR M3OIG M3OPG M3OSP M3P M3PSK M3TLP M3UFB M3W M3XFL M3XNK M3YSB M3ZXX M3ZZF M4A M4D M4P M4U M4W M5A M5ABP M5ADI M5ADL M5ADZ M5AEO M5B M5BFL M5DIK M5DND M5DUO M5E M5GUS M5KJM M5LRO M5MUF M5O M5RIC M5Z M6BLT M6CFW M6CQA M6CVD M6DBC M6DJK M6DLY M6DPY M6DVL M6EAM M6EIO M6ESV M6ETL M6GAN M6GCF M6GCH M6GMR M6HPL M6JFY M6JTJ M6KPA M6KVJ M6KVT M6MPC M6MRH M6NLB M6NNC M6NPL M6NTL M6O M6PRR M6PWD M6PWL M6PZB M6RCG M6RUS M6T M6TET M6UHU M6W M6WCE M6WND M6WXP M6XMA M6XTD M7A M7O M7P M7Q M7T M7V M7W M7X M8C M8M M9A M9K M9M M9T MA0RKT MA0XAU MA0ZBH MA3NRX MA5DWW MC0NFC MD0CCE MD0HHH MD0MDI MD0VMD MD2C MD4K MI0AHH MI0AYR MI0BPB MI0CLP MI0DWE MI0GDO MI0JAT MI0JZZ MI0LJM MI0LLG MI0MVP MI0OBC MI0OIM MI0RRE MI0RSN MI0RYL MI0TMW MI0VKO MI0ZAO MI3OZX MI3ULK MI5I MI5JYK MI5RJS MI6DTE MI6IPB MI6LLG MI6MFR MI6NID MI6YLT MJ/DL2JRM MJ0ASP MJ0ICD MJ2Z MJ5RIC MJ5Z MJ7C MJ8C MM/DF4ZL MM/SP7SMF MM0AMW MM0BHX MM0BHY MM0BMA MM0BSM MM0CBL MM0CCC MM0CIN MM0CYR MM0CZK MM0DHQ MM0DXD MM0DXL MM0EAX MM0GHM/P MM0GKB MM0GOR MM0GPZ MM0GTU MM0HNR MM0IMC MM0INS MM0KFX MM0KSS MM0LBX MM0LOZ MM0LRT MM0MOC MM0MRU MM0MUK MM0MUN MM0NDX MM0OPX MM0R MM0RKN MM0RKT MM0SAJ MM0SGQ MM0SJH MM0SRY MM0SVK MM0TFU MM0TIA MM0TKE MM0TSS MM0TXT MM0WAX MM0WXD MM0ZBH MM1E MM1EJK MM1X MM2N MM2R MM3LLU MM3N MM3NRX MM3STM MM3T MM3UOR MM3Z MM6PHG MM6SRL MM8C MM8Z MN0CCG MN0PQR/P MS0OXE MU0FAL MU0GSY MU0HTJ MU0RTI/P MW0BFY MW0BYS MW0CND MW0CRI MW0EDX MW0IDX MW0JHC MW0JRX MW0JZE MW0KMS MW0KOP MW0MWZ MW0MZM MW0PSW MW0TBI MW0UAA MW0UPH MW0URC MW0VRQ MW0YVK MW0ZZK MW1DAM MW1LCR MW1MDH MW2I MW3FLI MW3RNI MW5A MW5R MW6GWO MW6GWR MW6URC MW6V MW6ZOL MW8T MX0ADJ MX0IRN MX0OXE MX0RSC MX0WFF MX1SWL/A MZ5A MZ5B MZ8A N0AAH N0ABA N0AC N0ACH N0ACW N0AE N0AG N0AH N0AIE N0AJN N0AKF N0ANP N0AT N0ATQ N0AV N0AX N0AXE N0AXZ N0AY N0BAV N0BD N0BDS N0BE N0BK N0BLG N0BM N0BOF N0BQV N0BUI N0CEL N0CKR N0CN N0CNT N0CPT N0CQV N0CTR N0CU N0CYA N0DA N0DND N0DOW N0DQS N0DSN N0DY N0DY/6 N0ECK N0ECT N0EF N0EI N0EIC N0EID N0EKM N0EMU N0ENQ N0EO N0ERO N0EVH N0EZ N0FCD N0FN N0FTZ N0FUK N0FV N0FW N0GBR N0GC N0GES N0GIC N0GKO N0GMG N0GMT N0GOS N0HD N0HF N0HIU N0HJZ N0HNS N0HR N0HTV N0HYD N0IAI N0IBT N0IGZ N0IJ N0IM N0IQM N0IRM N0IS N0IU N0IW N0IWQ N0JDW N0JE N0JG N0JJQ N0JK N0JPD N0JTE N0JWA N0JWL N0JX N0KBD N0KE N0KGU N0KK N0KOE N0KQ N0KTY N0KV N0KVN N0KWA N0LD N0LIA N0LIW N0LJD N0LLH N0LNK N0LOH N0LP N0LTX N0LWF N0LY N0MA N0MB N0MDC N0MEU N0MGK N0MH N0MHL N0ML N0MMA N0MNO N0MTC N0MU N0NA N0NB N0ND N0NEL N0NGZ N0NI N0NM N0NMO N0NO N0NR N0ODK N0OFG N0OJ N0OK N0OT N0OU N0PI N0PIH N0PLC N0PNQ N0POH N0PR N0PUI N0PVZ N0QET N0QLT N0QM N0QMQ N0QX N0RB N0REH N0RGJ N0RHM N0RIV N0RN N0RR N0RU N0RUA N0RZ N0RZT N0SFF N0SFH N0SJ N0SM N0SMX N0SO N0SQ N0SRF N0STL N0TA N0TEK N0TEL N0TF N0TG N0TK N0TMU N0TOP N0TR N0TT N0TW N0TYE N0UA N0UB N0UD N0UJJ N0UJT N0UK N0UN N0UR N0UU N0UV N0UV/0 N0UY N0VCY N0VD N0VLR N0VPL N0VRM N0VV N0VVV N0VY N0WAR N0WE N0WFO N0WLW N0WRK N0XC N0XGA N0XLR N0XM N0XOC N0XR N0XT N0XXL N0XZ N0YBC N0YCY N0YY N0ZC N0ZFT N0ZH N0ZNA N0ZS N0ZTO N1ABS N1ABY N1AC N1ACI N1AIA N1AKN N1ALO N1ALW N1AM N1AMB N1API N1ARN N1ATO N1AW N1AYA N1BA N1BCL N1BNC N1BQ N1BSA N1BUG N1BYT N1BZ N1CC N1CDN N1CFB N1CGP N1CHP N1CLG N1CPL N1CRG N1CWR N1DAY N1DBL N1DC N1DCT N1DD N1DG N1DGF N1DID N1DM N1DN N1DRS N1DS N1DXR N1EBQ N1EK N1EN N1ENG N1EO N1EOP N1ERS N1EU N1EV N1EVK N1EVV N1EYE N1FD N1FDX N1FF N1FM N1FTP N1FV N1GB N1GC N1GE N1GKX N1GLT N1GMV N1GN N1GNV N1GPT N1GS N1GSA N1GZJ N1HEL N1HLZ N1HOQ N1HPR N1HPZ N1HTB N1HUZ N1IA N1IBC N1IBM N1ID N1IK N1ILZ N1IMW N1IO N1IOM N1IPA N1IQC N1IUN N1IVY N1IW N1IX N1IXF N1JAO N1JBH N1JCW N1JD N1JEZ N1JHJ N1JI N1JM N1JM/7 N1JP N1JW N1KAH N1KDO N1KJW N1KL N1KM N1KRT N1KW N1KWF N1KX N1LB N1LG N1LI N1LLL N1LMK N1LN N1LT N1MD N1MGO N1MH N1MLO N1MM N1ND N1NDN N1NK N1NN N1NRA N1NRP N1NU N1NUA N1OIG N1OKL N1OQC N1ORK N1OXA N1PGA N1PH N1QAE N1QD N1QDX N1QEH N1QEQ N1QI N1QV N1QVQ N1QVW N1QY N1RB N1REK N1RES N1RKR N1RLR N1RM N1RNJ N1ROZ N1RR N1RU N1SNB N1SQ N1SUN N1SUZ N1SV N1SZ N1TA N1TB N1TCH N1TKS N1TM N1TO N1TO/3 N1TO/7 N1TQ N1TQP N1TRC N1TW N1TYH N1UIR N1UK N1UL N1UNH N1UNU N1UR N1USB N1UW N1UZ N1VAU N1VDK N1VF N1VVV N1WC N1WGU N1WPU N1WQ N1WR N1WRK N1WW N1XED N1XIH/7 N1XJM N1XLG N1XS N1XSS N1XUQ N1XX N1YC N1YE N1YF N1YKH N1YWB N1YX N1ZN N1ZSR N1ZU N1ZX N1ZZ N2AA N2ACQ N2ADE N2ADV N2AE N2AET N2AIE N2AJ N2AJX N2AM N2AMG N2AMW N2AN N2ASD N2ASU N2ATA N2ATB N2AUG N2AXX N2BA N2BC N2BEE N2BEG N2BJ N2BJ/9 N2BJV N2BLE N2BNP N2BOW N2BR N2BRG N2BSS N2CEC N2CEI N2CEP N2CFG N2CG N2CJ N2CJN N2CJO N2CK N2CL N2CPR N2CQ N2CU N2CW N2DD N2DJL N2DM N2DPF N2DSP N2DUI N2DVQ N2DXT N2EAB N2ECS N2ED N2EDY N2EGO N2EHG N2EI N2EM N2ESP N2ETJ N2EX N2EY N2FBQ N2FF N2FI N2FJ N2FRB N2FRH N2FYE N2GA N2GC N2GDU N2GG N2GM N2GOT N2GPD N2GPE N2GSL N2GXJ N2GZ N2HMM N2HO N2HR N2HR/3 N2HSY N2HTL N2HTT N2IC N2IEL N2IEN N2IGW N2IIE N2IMM N2IVN N2IXD N2IXX N2JBA N2JBJ N2JEN N2JEX N2JF N2JJ N2JNE N2JNZ N2JOF N2JUG N2JZ N2KDZ N2KEJ N2KHH N2KI N2KOJ N2KUN N2KW N2KYP N2LBR N2LBZ N2LC N2LEC N2LEE N2LH N2LJ N2LJM N2LK N2LL N2LVG N2MEE N2MF N2MGT N2MM N2MO N2MS N2MTG N2MUN N2MVV N2NC N2NDY N2NF N2NGW N2NI N2NKP N2NKX N2NL N2NO N2NOM N2NQ N2NQF N2NRD N2NS N2NS/6 N2NT N2NUN N2NVH N2NW N2OB N2OBX N2OCS N2OCW N2OO N2OP N2OPW N2OT N2OUV N2PBN N2PEQ N2PGD N2PHI N2PL N2PN N2POS N2PP N2PPI N2PPL N2PQJ N2PTF N2QBD N2QLT N2QN N2QOE N2QR N2QT N2QV N2RAI N2RAY N2RHL N2RI N2RJ N2RK N2RM N2ROQ N2RQ N2RR N2RRR N2RSE N2SAB N2SCR N2SG N2SLO N2SO N2SQW N2SR N2SRK N2SU N2SUB N2TA N2TBC N2TK N2TM N2TRX N2TSQ N2TTA N2TTL N2TU N2TX N2UA N2UC N2UIF N2UIO N2UJN N2UM N2UN N2UNO N2US N2USM N2USN N2UT N2UU N2UZ N2UZQ N2VA N2VAJ N2VGA N2VIG N2VM N2VOT N2VQ N2VV N2VW N2VWW N2VYJ N2WAJ N2WF N2WG N2WK N2WKS N2WLS N2WM N2WM/1 N2WN N2WPT N2WQ N2WQ/VE3 N2WSY N2XP N2XPW N2XQM N2YB N2YBB N2YDD N2YH N2YI N2YO N2YUO N2ZL N2ZN N2ZX N2ZZ N3AAS N3AAZ N3AD N3ADF N3AE N3AEA N3AEG N3AF N3AFT N3AIU N3ALG N3ALN N3AM N3ANO N3AO N3AOI N3APA N3AS N3ATQ N3AZZ N3BA N3BB N3BC N3BCZ N3BHM N3BNA N3BR N3BUD N3BUO N3BXY N3CAU N3CB N3CDA N3CHX N3CKF N3CKF/6 N3CKI N3CM N3CMH N3CO N3COB N3CR N3CRT N3CS N3CU N3CW N3CWD N3CXV N3CY N3CZ N3CZJ N3DAP N3DI N3DIR N3DRA N3DTG N3DUE N3DXX N3EIL N3EMF N3EMZ N3EN N3ER N3EU N3FA N3FAW N3FCP N3FES N3FHW N3FJP N3FQ N3FSQ N3FTO N3GBM N3GD N3GGT N3GH N3GLZ N3GMR N3GTY N3GWR N3GY N3HCN N3HEE N3HQB N3HQN N3HSH N3HU N3HWH N3IBX N3IC N3IMU N3IOD N3IQ N3IRJ N3ITN N3IYX N3JAB N3JAX N3JB N3JCV N3JG N3JIX N3JNX N3JQ N3JSB N3JT N3KAE N3KCJ N3KHK N3KK N3KN N3KR N3KRI N3KRS N3KS N3KSH N3KV N3LBJ N3LFC N3LGA N3LH N3LL N3LPJ N3LT N3LWM N3LZV N3MA N3MAV N3ME N3MIE N3MIK N3MK N3MNT N3MON N3MOW N3MRA N3MVX N3MWQ N3MX N3ND N3NR N3NRN N3NT N3NTF N3NVA N3NZ N3OC N3OJ N3OJL N3OV N3OW N3OZT N3PBD N3PDT N3PE N3PEY N3PKC N3PM N3PPH N3PV N3PVQ N3PZ N3QC N3QCM N3QDC N3QE N3QEH N3QO N3QQ N3QXC N3RC N3RD N3RDV N3RJ N3RM N3RN N3RO N3RR N3RS N3RTD N3RTX N3RUA N3RUM N3RW N3SD N3SJN N3SL N3SQD N3ST N3SW N3SY N3TB N3TD N3TG N3TH N3TIR N3TO N3TOG N3TP N3TR N3TTT N3TVR N3UA N3UC N3UE N3UGY N3UM N3UPN N3UR N3US N3VBJ N3VJ N3VKM N3VMM N3VN N3VOP N3VS N3VZ N3WD N3WMC N3WT N3WXW N3WZR N3WZU N3XF N3XGE N3XL N3XLS N3XOF N3XRU N3XRV N3XTP N3XUD N3XWN N3XX N3XZX N3YEA N3YIM N3YUG N3YW N3YZ N3ZA N3ZJ N3ZK N3ZP N3ZU N3ZUA N3ZV N3ZZ N4AA N4AAA N4AAI N4AB N4ABC N4ABN N4AC N4ACK N4ADC N4ADX N4AF N4AGG N4AGX N4ANV N4AO N4AOE N4APR N4AR N4ARO N4ART N4ASF N4ASX N4ATT N4AU N4AW N4AX N4AYV N4BAF N4BCB N4BCC N4BCD N4BDX N4BFR N4BG N4BG/2 N4BLT N4BOS N4BP N4BRF N4BUN N4CC N4CCB N4CD N4CF N4CJ N4CO N4COB N4CPO N4CR N4CTT N4CU N4CVG N4CVN N4CW N4CWK N4CWP N4CWZ N4CZ N4DA N4DAB N4DAG N4DB N4DBR N4DD N4DE N4DEN N4DGN N4DJ N4DKD N4DKF N4DL N4DLA N4DLR N4DLT N4DMX N4DOU N4DPU N4DSL N4DSP N4DT N4DTF N4DU N4DW N4DXI N4DXS N4DXY N4EDI N4EEB N4EEB/KP4 N4EH N4EK N4EL N4EMG N4EMP N4ENE N4ES N4ESS N4ETR N4FD N4FF N4FKH N4FNB N4FP N4FR N4FW N4FX N4FY N4FZ N4GBK N4GCA N4GCP N4GEB N4GFG N4GG N4GHU N4GI N4GJ N4GK N4GN N4GNO N4GU N4HA N4HAI N4HAL N4HB N4HH N4HID N4HOS N4HU N4HWH N4HXI N4IAG N4IB N4II N4IJ N4IL N4IM N4IN N4IOR N4IOZ N4IQ N4IR N4IS N4IX N4JA N4JAP N4JBL N4JDB N4JED N4JF N4JG N4JGD N4JK N4JM N4JN N4JOW N4JQD N4JR N4JRG N4JRZ N4JS N4JT N4JVP N4KC N4KD N4KG N4KGL N4KH N4KIT N4KJA N4KKD N4KM N4KP N4KQ N4KS N4KV N4KW N4KWO N4KXO N4KZ N4KZS N4LA N4LAG N4LBX N4LDF N4LEQ N4LF N4LGH N4LJS N4LMN N4LOV N4LPD N4LR N4LS N4LT N4LU N4LV N4LZ N4MA N4MB N4MBN N4MEC N4MEO N4MF N4MFC N4MIC N4MIK N4MIO N4MJ N4MJM N4MKA N4MM N4MO N4MRM N4MTT N4MUH N4MY N4NA N4NE N4NIA N4NM N4NN N4NO N4NQ N4NR N4NRV N4NS N4NSS N4NTO N4NW N4NX N4NYY N4OA N4OGW N4OI N4OJ N4OLN N4OME N4OO N4OT N4OTR N4OVQ N4OX N4PAD N4PB N4PBC N4PCC N4PD N4PEG N4PF N4PLM N4PLR N4PN N4PQX N4PSE N4PSK N4PT N4PTC N4PWG N4PYI N4QA N4QET N4QK N4QM N4QQ N4QS N4QT N4QV N4QWF N4QWK N4QWZ N4QX N4RA N4RAY N4REF N4RI N4RJ N4RLD N4RLM N4RNR N4RP N4RQO N4RS N4RSS N4RTD N4RU N4RV N4RZ N4RZP N4SAX N4SC N4SDB N4SEA N4SER N4SF N4SIA N4SJJ N4SJW N4SK N4SKP N4SL N4SLR N4SR N4SS N4SSD N4ST N4STG N4SV N4SVC N4TB N4TDO N4TGR N4TGY N4TL N4TOL N4TP N4TQU N4TRI N4TT N4TTT N4TV N4TZ N4TZH N4TZN N4UA N4UC N4UEZ N4UF N4UFP N4UGS N4UH N4UHZ N4UK N4UM N4UN N4UP N4USS N4UU N4UW N4VA N4VAN N4VDL N4VH N4VI N4VLQ N4VN N4VUG N4VV N4VZ N4WD N4WDT N4WE N4WI N4WJW N4WL N4WMB N4WNH N4WO N4WPJ N4WW N4WXB N4WYR N4WZ N4XAD N4XAT N4XC N4XD N4XFA N4XFF N4XH N4XL N4XM N4XMX N4XU N4XXO N4XYZ N4YCI N4YDU N4YE N4YFV N4YHC N4YJF N4YM N4YSA N4YZ N4ZAK N4ZC N4ZEW N4ZI N4ZQ N4ZR N4ZT N4ZZ N5AF N5AIU N5AN N5ANZ N5AQ N5AT N5ATT N5ATZ N5AU N5AW N5AW/0 N5BA N5BAA N5BCA N5BE N5BF N5BLY N5BO N5BSA N5BYS N5CFI N5CHL N5CQ N5CR N5CV N5CW N5CWA N5DG N5DI N5DM N5DO N5DRB N5DRG N5DRM N5DTT N5DUH N5DX N5DY N5EA N5EE N5EG N5ENU N5ET N5FF N5FG N5FH N5FIW N5FJS N5FNC N5FO N5FPW N5FSN N5FUN N5FW N5GD N5GH N5GI N5GP N5GW N5HA N5HC N5HEK N5HI N5HMH N5HOT N5HYP N5HZ N5IA N5IAC N5IB N5IE N5IFX N5II N5IJE N5IJY N5IKD N5IL N5INP N5IR N5IT N5ITW N5JB N5JDT N5JJ N5JR N5KAE N5KB N5KD N5KDA N5KDV N5KF N5KG N5KGY N5KIP N5KLE N5KLW N5KM N5KO N5KPK N5KQQ N5KR N5KUC N5KW N5KWN N5KXI N5LDD N5LDX N5LFE N5LI N5LKE N5LNL N5LUC N5LUL N5LUT N5LYJ N5LZ N5LZI N5MBQ N5ME N5MEG N5MF N5MIS N5MJ N5MJL N5MLP N5MOA N5MSE N5MT N5MU N5MV N5MW N5NA N5NC N5NHJ N5NK N5NLR N5NRL N5NU N5NYV N5OAO N5OBC N5OE N5OFY N5OHL N5OK N5OMG N5PA N5PEF N5PHT N5PJ N5PO N5PR N5PT N5PU N5PV N5PYQ N5QCP N5QJ N5QN N5QO N5QQ N5QS N5RB N5RD N5REG N5RGV N5RKK N5RL N5RLM N5RMS N5RN N5RP N5RR N5RS N5RWK N5RZ N5RZK N5SAN N5SDO N5SHI N5SJ N5SJS N5SKH N5SMQ N5SR N5SV N5TF N5TIT N5TJ N5TM N5TM/2 N5TOL N5TOO N5TSP N5TT N5TTI N5TU N5TWY N5TXK N5TY N5UE N5UI N5UJ N5UKZ N5UL N5UM N5UMT N5UR N5UWY N5UXT N5UZW N5VEI N5VGK N5VPC N5VR N5VSB N5VU N5VV N5VX N5VYS N5WA N5WBF N5WC N5WE N5WJ N5WMQ N5WNG N5WR N5WRL N5WS N5WW N5WX N5WXB N5XE N5XED N5XJ N5XM N5XTC N5XTR N5XU N5XZ N5YA N5YE N5YG N5YHM N5YPJ N5YRJ N5YT N5YX N5YY N5YZ N5ZC N5ZGT N5ZK N5ZKK N5ZM N5ZMP N5ZO N5ZO/6 N5ZVW N5ZXO N5ZY N5ZZM N6AA N6AA/1 N6AAI N6AB N6ACK N6AD N6AJR N6AJS N6AKI N6ALO N6AN N6AR N6AZY N6BCT N6BHX N6BIS N6BIZ N6BJ N6BM N6BM/4 N6BOB N6BT N6BV N6BX N6BXO N6CCL N6CDX N6CHU N6CK N6CKV N6CL N6CMF N6CV N6CW N6CY N6DA N6DAN N6DB N6DBF N6DDG N6DQ N6DT N6DVR N6DW N6DW/4 N6DXX N6DZ N6DZR N6EB N6EBL N6ED N6EE N6EMS N6ENO N6ENU N6ER N6ET N6ETO N6EV N6FAV N6FB N6FC N6FC/7 N6FE N6FMF N6FR N6FRX N6FS N6FVY N6GA N6GC N6GEO N6GL N6GP N6GQ N6GY N6HC N6HD N6HE N6HEW N6HF N6HH N6HI N6HK N6HY N6IC N6ICW N6IE N6IJ N6IV N6JC N6JF N6JN N6JOJ N6JON N6JRL N6JS N6JV N6JW N6JZ N6KD N6KI N6KJ N6KL N6KN N6KP N6KR N6KT N6KTO N6KV N6KW N6LB N6LEE N6LF N6LGE N6LHL N6LL N6LN N6LZD N6MA N6MB N6MCM N6MDV N6MEJ N6MI N6MJ N6ML N6MM N6MSY N6MU N6MUF N6MW N6MXU N6MZ N6NBV N6NC N6NF N6NG N6NH N6NKT N6NM N6NO N6NR N6NT N6NU N6NUL N6NZ N6OGW N6OI N6OIL N6OIM N6OJ N6OPR N6ORB N6OSB N6OV N6OZ N6PAT N6PAZ N6PE N6PEQ N6PET N6PF N6PMC N6PN N6PSE N6PZ N6PZK N6QDO N6QEK N6QQ N6QYQ N6QZS N6RA N6RC N6RIK N6RK N6RND N6RNN N6RNO N6RO N6RQW N6RRY N6RT N6RU N6RV N6RW N6RZ N6RZR N6SI N6SJV N6SL N6SN N6SS N6SU N6SUN N6SXR N6TA N6TCE N6TCZ N6TFP N6TH N6TP N6TQ N6TU N6TV N6TW N6UK N6UOB N6USP N6VAW N6VH N6VHF N6VI N6VNF N6VNI N6VOH N6VR N6VV N6VXM N6VZ N6WBL N6WDK N6WHV N6WIN N6WJN N6WM N6WS N6XG N6XI N6XMW N6XT N6YDP N6YEU N6YG N6YIC N6YVW N6ZD N6ZE N6ZFO N6ZI N6ZM N6ZZO N7AAM N7AC N7AHE N7AKC N7AMA N7AMD N7AME N7AMK N7AN N7APN N7AT N7ATZ N7AU N7AXW N7BAN N7BBC N7BD N7BEF N7BK N7BKS N7BLN N7BPA N7BPA/7 N7BT N7BU N7BV N7BX N7BXX N7CE N7CKJ N7CN N7CPU N7CS N7CW N7CZ N7DB N7DC N7DD N7DED N7DF N7DK N7DMA N7DOE N7DR N7DRM N7DS N7DV N7DXT N7DZI N7EDK N7EIE N7EKD N7EL N7ELB N7ELL N7EMC N7EMT N7ENL N7ENN N7EO N7EPD N7ERU N7ESU N7ET N7ET/DU7 N7EXP N7FDU N7FF N7FG N7FKI N7FLT N7FO N7FUL N7FYT N7GCO N7GDP N7GK N7GL N7GLM N7GOA N7GP N7GR N7GTE N7GVV N7HFW N7HG N7HGH N7INV N7IP N7IPG N7IR N7ISP N7IV N7IW N7IY N7JAP N7JB N7JI N7JO N7JPF N7JT N7JW N7JXS N7KA N7KE N7KF N7KFD N7KFL N7KN N7KQ N7KRE N7KRN N7KU N7LD N7LF N7LFX N7LKL N7LOX N7LR N7LT N7LXX N7MA N7MB N7MDS N7MJ N7MPY N7MQ N7MSI N7MU N7MW N7MYA N7MZW N7NB N7NBS N7ND N7NEV N7NF N7NG N7NM N7NMS N7NR N7NTQ N7OG N7OMS N7ON N7ORY N7OU N7PI N7PIB N7PR N7PV N7PVA N7QAX N7QJ N7QMT N7QNG N7QNO N7QS N7QT N7QU N7QY N7RBP N7RC N7RCN N7RCS N7RD N7RK N7RN N7RO N7RQ N7RR N7RVD N7RXL N7RY N7SB N7SG N7SMI N7SO N7TA N7TCO N7TEW N7TK N7TLF N7TM N7TMS N7TMX N7TNP N7TP N7TR N7TT N7TW N7TY N7UA N7UBO N7UJJ N7UN N7UQ N7UR N7US N7UVH N7VF N7VJ N7VPN N7VS N7VZ N7VZU N7WA N7WO N7WR N7WS N7WU N7WY N7XAH N7XCZ N7XG N7XGH N7XM N7XR N7XU N7XY N7YA N7YK N7YQ N7YRT N7YT N7YTI N7YV N7ZA N7ZG N7ZN N7ZO N7ZUF N7ZV N8A N8AA N8AE N8AGU N8AHH N8AID N8AM N8AMM N8AP N8AR N8AYY N8BB N8BC N8BE N8BEE N8BEG N8BEX N8BHL N8BHT N8BI N8BJQ N8BL N8BNE N8BQQ N8BR N8BTU N8BUS N8BV N8CC N8CEP N8CHR N8CHS N8CIJ N8CL N8CMS N8COP N8CPA N8CWU N8CXX N8DC N8DE N8DEA N8DEZ N8DJX N8DKA N8DNG N8DP N8DRG N8DT N8DUY N8DWN N8DX N8DXR N8EA N8EBN N8EEL N8EHP N8EHW N8EN N8EQR N8ESP N8ET N8EW N8FE N8FF N8FGB N8FKF N8FLW N8FM N8FNR N8FXH N8FYL N8GBU N8GEO N8GL N8GLS N8GM N8GP N8GS N8GU N8HAM N8HHG N8HKU N8HM N8HMG N8HO N8HP N8HR N8HSO N8HTG N8IBR N8IE N8II N8IIV N8IK N8IL N8IMU N8IPO N8IRC N8IVE N8IVN N8IW N8JE N8JF N8JG N8JGG N8JK N8JMV N8JS N8KAM N8KC N8KD N8KDX N8KG N8KIM N8KIP N8KKG N8KLX N8KQ N8KR N8KSG N8KV N8LA N8LCU N8LGP N8LJ N8LJN N8LOT N8MAS N8MDL N8MDP N8MPF N8MR N8MSA N8MWD N8MWK N8MWQ N8MYQ N8MZ N8NA N8NAV N8NB N8NIJ N8NJ N8NN N8NOE N8NQN N8NR N8NVI N8NX N8NYE N8NYI N8OB N8OBJ N8OC N8OCJ N8OCN N8ODF N8OFP N8OGI N8OH N8OHT N8OL N8OO N8OQ N8OQQ N8OT N8OXC N8OYY N8PBP N8PCN N8PGI N8PJP N8PPF N8PR N8PS N8PVL N8PVW N8PW N8PYN N8QMU N8RA N8RAT N8RF N8RLH N8RMT N8RMZ N8RN N8RPA N8RR N8RT N8RU N8RWK N8SA N8SBE N8SDR N8SFO N8SHZ N8SK N8SL N8SP N8SS N8SSE N8STY N8SWC N8TCP N8TD N8TEM N8TFD N8THN N8TNA N8TR N8TUT N8TXI N8UE N8UKD N8UM N8UO N8UY N8UYC N8VCF N8VG N8VIL N8VTU N8VV N8VW N8VY N8VZ N8VZX N8WAV N8WCR N8WD N8WGE N8WRL N8WS N8WSM N8WXQ N8XA N8XCO N8XE N8XEE N8XGS N8XI N8XKZ N8XQM N8XTH N8XX N8YA N8YB N8YFQ N8YN N8YO N8YP N8YQX N8YSZ N8YXR N8YYD N8ZA N8ZAK N8ZFM N8ZKT N8ZSA N8ZSG N8ZVB N8ZXB N9AAC N9AC N9ACD N9ADG N9AFU N9AJ N9AK N9AKR N9AMW N9APE N9APK N9AU N9AUG N9AVY N9AW N9BBE N9BC N9BK N9BL N9BT N9BU N9BW N9CDX N9CHN N9CI N9CIF N9CIQ N9CK N9CLQ N9CM N9CO N9CVB N9CXI N9DFD N9DGK N9DIX N9DJ N9DR N9DT N9EAJ N9EAX N9EF N9EM N9EMA N9EMC N9EN N9EP N9ETB N9ETH N9EXM N9EXU N9FC N9FDE N9FGP N9FJB N9FN N9FRY N9FTC N9FTC/4 N9FUW N9GBB N9GH N9GJC N9GQ N9GQA N9GSU N9GTC N9GUN N9GUU N9HDE N9HF N9HH N9HPA N9HR N9HSB N9HSH N9HTZ N9IC N9ID N9IHZ N9IO N9ISN N9ITE N9IW N9IXD N9IZ N9JF N9JJD N9JNQ N9JPG N9JR N9JRB N9JTA N9JTB N9JZN N9KO N9KPH N9KR N9KY N9KZ N9LAH N9LB N9LD N9LF N9LIS N9LJX N9LOH N9LPT N9LTV N9LVG N9LVS N9LXF N9LYE N9LZY N9MBR N9MKZ N9MM N9MR N9MS N9MSG N9MT N9MW N9MWN N9MXI N9NA N9NAQ N9NAZ N9NB N9NBC N9NC N9NE N9NJN N9NJS N9NM N9NQA N9NS N9NT N9NTC N9NUQ N9NYO N9OB N9OBB N9ODY N9OF N9OFD N9OHW N9OI N9OJC N9OK N9OOO N9OY N9OZW N9PCY N9PQJ N9PS N9PWM N9PY N9QAP N9QGV N9QS N9QWV N9RC N9RD N9RE N9REP N9RJM N9RJV N9RK N9ROY N9RU N9RV N9RWC N9RXB N9SAB N9SAT N9SB N9SDL N9SE N9SJ N9SJA N9SRA N9SW N9SZ N9TES N9TF N9TGR N9TK N9TU N9TV N9TX N9UA N9UCV N9UFO N9UOM N9UPG N9US N9UUP N9UX N9UXU N9UY N9VD N9VI N9VPV N9VWC N9WFT N9WGV N9WK N9WKW N9WL N9WVM N9XGC N9XO N9XP N9XRO N9XVZ N9XX N9XY N9YA N9YCE N9YH N9YK N9YKE N9YLE N9YS N9YZA N9YZM N9ZE N9ZG N9ZI N9ZM N9ZMO N9ZOE N9ZUT N9ZYL NA0BR NA0CW NA0N NA1B NA1CC NA1DX NA1G NA1RA NA1RL NA2AA NA2JM NA2M NA2NY NA2U NA2W NA2X NA3DX NA3E NA3F NA3J NA3M NA3V NA3Z NA4A NA4C NA4CW NA4EA NA4K NA4M NA4MM NA4NA NA4RR NA4W NA4X NA5AR NA5C NA5DX NA5G NA5N NA5NN NA5Q NA5U NA5Z NA6D NA6G NA6L NA6M NA6MB NA6MG NA6O NA7DX NA7KR NA7OM NA7P NA7RH NA7RJ NA7W NA8M NA8V NA8W NA9A NA9J NA9M NA9RB NA9U NB0O NB0Z NB1H NB1N NB1R NB1U NB2S NB2T NB3C NB3I NB3R NB3T NB4C NB4F NB4M NB5N NB7V NB8B NB8I NB8Q NC0B NC0DX NC0JW NC0P NC1C NC1I NC1M NC2V NC2W NC2Y NC3P NC3Y NC4AR NC4CW NC4CX NC4EF NC4G NC4KW NC4MI NC4MM NC4NH NC4ON NC4RB NC4RT NC4S NC4SB NC4SC NC4SU NC4WS NC4Z NC5B NC5G NC5O NC5T NC5Y NC6B NC6D NC6DX NC6K NC6Q NC6RJ NC6U NC6V NC7CH NC7G NC7J NC7L NC7M NC7Q NC8C NC8N NC8T NC8X NC9F NC9W ND0C ND0L ND0M ND0N ND1Y ND2K ND2O ND2T ND3D ND3F ND3N ND3O ND3R ND4G ND4Q ND4V ND4X ND4XE ND4Y ND4Z ND5R ND6M ND6P ND6S ND6U ND7J ND7M ND8DX ND8L ND8M ND8R ND9E ND9Z NE0DA NE0DX NE0F NE0U NE1B NE1C NE1F NE1I NE1QP NE1RD NE2I NE2U NE2X NE2Z NE3E NE3F NE3H NE3I NE3K NE3MD NE4EA NE4H NE4IE NE4N NE4RD NE4TN NE5D NE5DL NE5E NE5EE NE5IL NE5LL NE5OK NE5RO NE5S NE5SD NE5W NE6AA NE6I NE6LE NE6M NE6O NE6R NE6RD NE7D NE8I NE8J NE8K NE8O NE8O/4 NE8P NE8Z NE9DX NE9O NE9U NF0N NF1A NF1J NF1L NF1O NF1R NF2NY NF2RS NF2Z NF3C NF4A NF4GA NF4L NF5Y NF6A NF6H NF6R NF7D NF7E NF7R NF7T NF8C NF8I NF8J NF8M NF8O NF8R NF8U NF9D NF9V NG0E NG0G NG0O NG0T NG0Z NG1G NG1I NG1O NG1P NG1R NG2C NG2D NG2H NG2O NG2P NG2Q NG2T NG3J NG3R NG3X NG4C NG4D NG4L NG4US NG5NG NG6R NG6S NG7A NG7M NG7O NG7Z NG9M NG9R NG9U NH0DX NH0S/KH2 NH2B/KH0 NH2DX NH2P NH2T NH6AB NH6HI NH6P NH6RF NH6T/NZ4 NH6T/W4 NH6V NH6WZ NH6Y NH6YK NH6Z NH7A NH7NJ NH7O NH7PE NH7RO/W5 NH7U NI0C NI0G NI0R NI2F NI2M NI2V NI3I NI3K NI3L NI3O NI3P NI4NN NI5DX NI5F NI5L NI5O NI5T NI6BB NI6E NI6G NI6IW NI6T NI6W NI6Z NI7F NI7J NI7R NI7T NI8G NI8Z NI9DX NJ0F NJ0U NJ1F NJ1H NJ1Q NJ1T NJ1Z NJ2E NJ2F NJ2X NJ3I NJ3K NJ3W NJ4F NJ4LC NJ4M NJ4U NJ4V NJ4X NJ5N NJ5O NJ5T NJ5W NJ6G NJ6K NJ6P NJ6W NJ7K NJ8G NJ8J NJ8L NJ8M NJ9C NJ9L NJ9R NJ9T NJ9U NJ9Y NK0S NK0Z NK1K NK1N NK1Z NK3L NK3U NK3V NK3Y NK4A NK4I NK4K NK4L NK4N NK4P NK5A NK5B NK5G NK5G/5 NK5P NK6A NK7J NK7L NK7U NK7Z NK8I NK8N NK8Q NK8X NK9G NK9H NK9I NK9N NL7G NL7K NL7KF NL7SP NL7V NL7W NL7WW NL8F NM0Q NM0U NM1A NM1C NM1G NM1J NM1JY NM1W NM1Y NM2D NM2L NM2O NM3M NM4O NM4V NM5HD NM5M NM5NM NM5S NM5TF NM5U NM5WB NM5Y NM5Z NM6E NM6E/5 NM6G NM6K NM6M NM8O NM8W NM9K NM9P NN0JS NN0Q NN1AA NN1N NN1SS NN2DX NN2E NN2K NN2L NN2NN NN2V NN3L NN3Q NN3RP NN3U NN3V NN3W NN4AA NN4DF NN4F NN4GG NN4J NN4JM NN4K NN4MM NN4R NN4RB NN4RH NN4RR NN4SA NN4SS NN4X NN5G NN5J NN5T NN5V NN5XX NN5Z NN6AA NN6CH NN6DX NN6EE NN6LL NN6NN NN6R NN6T NN6XX NN7A NN7F NN7NN NN7SS NN7W NN7ZZ NN8M NN8P NN8R NN8UU NN9C NN9W NO0L NO1I NO2D NO2J NO2T NO3M NO4AH NO4FX NO4J NO4S NO4Y NO5G NO5W NO6F NO6T NO7DE NO7R NO7T NO8C NO8D NO8DX NO8I NO8J NO8N NO9C NO9E NO9O NO9Z NP2/AB3TM NP2B/4 NP2KM NP2L NP2MR/4 NP2MR/W4 NP2N NP2P NP2VI NP2X NP3A NP3B NP3CW NP3D NP3IR NP3K NP3M NP3OT NP3PR NP3QL NP3RE NP3U NP3X NP3YL NP4A NP4BM NP4DX NP4EG NP4G NP4JS NP4P NP4RA NP4V NP4WW NP4X NP4Z NQ0I NQ0M NQ0S NQ1C NQ1D NQ1R NQ2D NQ2F NQ2T NQ2W NQ3C NQ3N NQ4I NQ4K NQ5K NQ6B NQ6E NQ6L NQ6N NQ6P NQ7R NQ9A NQ9U NR0L NR0Q NR0R NR0T NR1H NR1R NR1X NR2C NR3E NR3X NR4C NR4CW NR4J NR4M NR4N NR4X NR5M NR6E NR6L NR6M NR6O NR6Q NR6S NR7DX NR7ON NR7Q NR7R NR7RR NR7T NR8I NR8R NR8U NR8Z NR9A NR9J NR9L NR9Q NS0D NS0I NS0M NS0R NS1CC NS1O NS1RA NS1S NS1T NS1Z NS2X NS3L NS3T NS3X NS4DX NS4M NS4SS NS4T NS4X NS5J NS5Z NS6A NS6C NS6D NS6E NS6T NS6V NS7B NS7E NS7K NS7NN NS7V NS8G NS8O NS8Q NS9I NS9N NS9R NT0AF NT0F NT0Z NT1K NT2A NT2DR NT2I NT3S NT4D NT4H NT4K NT4TS NT4X NT4Z NT5A NT5A/6 NT5A/7 NT5I NT5TM NT5V NT5W NT6K NT6X NT7B NT7J NT7S NT8P NT8V NT8Z NT9F NT9M NU0C NU0Q NU0T NU0W NU1AW NU1G NU1O NU2F NU2J NU2K NU2M NU2Q NU3A NU3H NU3K NU3Q NU3Y NU4B NU4C NU4I NU4N NU4X NU4Y NU5DE NU6C NU6O NU6S NU6Y NU7D NU7DX NU7F NU7J NU7P NU7Y NU8L NU8Z NV0P NV0S NV1N NV1O NV1P NV1Q NV1W NV2A NV2K NV4A NV4B NV4G NV4U NV5E NV5M NV6C NV7JB NV9L NV9S NV9X NW0DX NW0F NW0G NW0K NW0M NW0W NW0X NW2I NW2K NW2Q NW3H NW3O NW3R NW3U NW3Y NW3Y/1 NW4J NW4KU NW4N NW4V NW4Z NW5H NW5Q NW5Y NW6/SM3CER NW6H NW6P NW6S NW6UP NW6V NW7D NW7E NW7M NW8E NW8F NW8S NW8U NW9N NW9S NW9V NW9X NX0I NX0X NX1C NX1H NX1P NX1P/7 NX1T NX2C NX2W NX2X NX3L NX3T NX4D NX4DX NX4N NX4Y NX5M NX5O NX6I NX6T NX7F NX7TT NX7U NX8E NX8G NX8G/5 NX8Y NX9G NX9T NY0A NY0P NY0Q NY0T NY0V NY1H NY1P NY1Z NY2DX/4 NY2GB NY2H NY2JA NY2NY NY3A NY3B NY3C NY3DX NY3M NY3Z NY4A NY4D NY4G NY4G/VY2 NY4I NY4N NY4S NY5B NY5Q NY6C NY6DX NY6N NY6Y NY7N NY8C NY8K NY9H NY9X NZ0F NZ0T NZ1B NZ1D NZ1MT NZ1Q NZ1R NZ1U NZ2H NZ3D NZ3M NZ3O NZ3T NZ4CW NZ4Z NZ5A NZ5E NZ5I NZ5M NZ6Q NZ8J NZ8Y NZ9M NZ9Z OA1F OA4/XQ3SA OA4AI OA4O OA4SS OA4TT OA6Q OA7/DL1CW OC4CW OC4WW OD5/F5TLN OD5NJ OD5PY OD5ZZ OE0HQ OE1A OE1ALW OE1BKA OE1C OE1CIW OE1CWA OE1DWC OE1EMS OE1FLS OE1GOA OE1HFC OE1HHB OE1JEW OE1KLW OE1KRQ OE1KRQ/P OE1KYW OE1LFB OE1MBB OE1MHL OE1PEW OE1PFC OE1PMU OE1PPA OE1RKS OE1SGU OE1SSS OE1SZW OE1TAS OE1TKW OE1TOA OE1UHA OE1W OE1W/P OE1WEU OE1WIU OE1WSA OE1WWL OE1XAW OE2BZL OE2CAL OE2DYL OE2E OE2GEN OE2GRL OE2IGP OE2IJL OE2K OE2KGL OE2KNN OE2LCM OE2LRO OE2M OE2S OE2UKL OE2VEL OE2WUL OE36KC OE3ACA OE3AIS OE3AKB OE3BKC OE3CDS OE3CHA OE3CHC OE3CVS OE3DEC OE3DMA OE3DSB OE3DXA OE3EHA OE3EVA OE3EWI OE3FLU OE3FVU OE3GCU OE3GDS OE3GGS OE3GSA OE3HTC OE3HWC OE3IPC OE3JSU OE3JTB OE3JWC OE3K OE3KAB OE3KEU OE3KLU OE3MCS OE3MEU OE3MFC OE3MWS OE3MZC OE3NHW OE3NMS OE3OLW OE3OSB OE3PFS OE3PRU OE3REW OE3RTB OE3SGA OE3SGU OE3TL OE3TWB OE3VSW OE3WHC OE3WMA OE3WMW OE3WXU OE3XAU OE3XMA OE3YSC OE4C OE4HDS OE4HSB OE4NKB OE4VIE OE4WBW OE4YLA OE5ANL OE5BGN OE5BWN OE5CCN OE5CSP OE5CYL OE5D OE5DI OE5DML OE5EBO OE5EGN OE5FIN OE5FPL OE5GA OE5HDN OE5HEL OE5HIL OE5HSN OE5HTL OE5IIO OE5JKL OE5JSL OE5LHM OE5MKM OE5MON OE5MPL OE5MSM OE5OHO OE5ORM OE5PD OE5PEN OE5POP OE5PRL OE5RI OE5SJP OE5SMU OE5STM OE5T OE5UAL OE5WHN OE5XBB OE5XIL OE6AKD OE6BMG OE6CAG OE6ECG OE6GND OE6HLF OE6HOF OE6HTG OE6IMD OE6JTD OE6KDG OE6LUG OE6MBG OE6MDF OE6MMF OE6RAD OE6RDD OE6SMF OE6SQD OE6TXG OE6TZE OE6U OE6V OE6VHF OE6VWG OE6WFF OE6Z OE7AJT OE7DXT OE7FMH OE7FMJ OE7GJ OE7HHW OE7LVI OE7MFI OE7MOH OE7PGI OE7PKJ OE7TTT OE7WGT OE7WRH OE8BAD OE8GMK OE8HAQ OE8HIK OE8Q OE8RZS OE8SKQ OE8SPW OE8TED OE8TLK OE8XBH OE8XJK OE8YMQ OE9GHV OE9ICI OE9KFV OE9LWV OE9MCV OE9MDV OE9MON OE9PCJ OE9PHV OE9RJJ OE9SEI OE9SLH OE9WGI OF2AM OF3ERTC OF40R OG0A OG0Z OG1D OG1M OG25YL OG2A OG2B OG2F OG2K OG2M OG2N OG2P OG2W OG30OJ OG3A OG3I OG3M OG3MS OG3P OG3R OG4T OG4W OG4X OG55W OG5A OG5G OG5HW OG6A OG6N OG73X OG7A OG7F OG7M OG7O OG7X OG8N OG8T OG90AA OG9W OG9X OH0B OH0CC OH0JFP OH0LIH OH0R OH0RJ OH0TA OH0V OH0W OH0X OH0YY OH0Z OH10A OH10X OH1AF OH1AYQ OH1B OH1BOI OH1CH OH1D OH1EB OH1EKU OH1F OH1HB OH1HF OH1HM OH1HS OH1JD OH1JK OH1JO OH1JZ OH1KB OH1KH OH1LA OH1LAR OH1LEG OH1LEU OH1LTU OH1LWZ OH1MA OH1MAR OH1MAW OH1MM OH1MRE OH1MRN OH1MRR OH1MZ OH1ND OH1NDA OH1NJN OH1NX OH1O OH1POR OH1PW OH1QX OH1RX OH1SDR OH1SIC OH1TD OH1TM OH1TN OH1TS OH1TX OH1VR OH1WZ OH1XX OH1XY OH1Z OH2BAD OH2BAH OH2BAI OH2BBM OH2BBT OH2BC OH2BCD OH2BCI OH2BCK OH2BEN OH2BEV OH2BFG OH2BFP OH2BH OH2BKX OH2BLD OH2BLV OH2BMH OH2BN OH2BO OH2BP OH2BPU OH2BR OH2BS OH2BSI OH2BU OH2BUW OH2BV OH2CI OH2CI/1 OH2CK OH2CV OH2DA OH2DP OH2EA OH2ECG OH2EO OH2EPW OH2ET OH2EV OH2FHN OH2FNR OH2FRM OH2FT OH2FTA OH2GBA OH2GEK OH2GI OH2HA OH2HAN OH2HPX OH2HQ OH2HSB OH2HZ OH2ID OH2IS OH2JSR OH2K OH2KI OH2KM OH2KW OH2LHE OH2LIR OH2LNH OH2LP OH2LPQ OH2LU OH2LZC OH2LZI OH2MA OH2MGA OH2MQ OH2MZA OH2MZB OH2N OH2NJN OH2NNE OH2NT OH2PM OH2PQ OH2RI OH2T OH2TA OH2VB OH2VZ OH2WI OH2XF OH2XX OH2YL OH2ZZ OH3AD OH3BU OH3CV OH3DF OH3DP OH3EX OH3FM OH3GD OH3GGQ OH3GLY OH3GZ OH3HS OH3I OH3JF OH3JP OH3JR OH3KAV OH3KJM OH3KQ OH3KRH OH3KX OH3LB OH3M OH3MC OH3MF OH3NB OH3NDH OH3NI OH3NU OH3OJ OH3P OH3RF OH3RT OH3SR OH3UU OH3VX OH3WR OH3WW OH3XA OH3XR OH3Z OH4A OH4AB OH4BNP OH4EA OH4EBD OH4JK OH4JT OH4KA OH4KBC OH4KZM OH4M OH4MCV OH4MDY OH4MFA OH4SS OH4TY OH4XX OH5BM OH5BQ OH5BW OH5C OH5CW OH5CY OH5CZ OH5EHA OH5ELX OH5EMA OH5EP OH5GIO OH5GJZ OH5HUZ OH5JJL OH5KIZ OH5KT OH5KW OH5LBR OH5MNJ OH5NE OH5NQ OH5NZ OH5TS OH5UFO OH5UQ OH5VT OH5XB OH5XK OH5YU OH5Z OH5ZZ OH6AC OH6BA OH6BG OH6CT OH6DH OH6DX OH6E OH6ECM OH6FTR OH6FXL OH6FXW OH6GAW OH6GAZ OH6GDX OH6GHI OH6GQ OH6IO OH6IU OH6JD OH6JE OH6K OH6KZP OH6LDJ OH6LEZ OH6LI OH6MMC OH6MSZ OH6MW OH6NG OH6NIO OH6NT OH6NVC OH6NVT OH6OS OH6R OH6RC OH6RE OH6RP OH6RX OH6SWR OH6TN OH6TS OH6WI OH6WW OH6XA OH6XY OH7CW OH7EBA OH7FF OH7GGX OH7HM OH7JHA OH7JL OH7JR OH7KB OH7KBF OH7KD OH7KNM OH7MA OH7MFO OH7MHL OH7MN OH7MP OH7NE OH7NW OH7R OH7RJ OH7UG OH7VS OH7WN OH7WW OH7XI OH8A OH8CW OH8EJW OH8F OH8FAL OH8FTF OH8KA OH8KTN OH8KVY OH8L OH8LE OH8MBN OH8UV OH8WW OH8X OH9A OH9BS OH9FTW OH9GGY OH9GIT OH9JQF OH9KHC OH9NB OH9RP OH9UFO OH9VC OH9VD OH9W OH9YM OI3V OI7AX OJ0AM OJ0DX OK/LZ3SF OK/OM3CNF OK1A OK1AAZ OK1ABF OK1ACF OK1ADM OK1AGE OK1AHG OK1AHJ OK1AIJ OK1AIT OK1AJR OK1AJY OK1AKB OK1AKE OK1AMF OK1AMM OK1ANP OK1ANT OK1AOU OK1AOV OK1AOZ OK1APV OK1ARN OK1ARO OK1ATH OK1ATP OK1AUP OK1AVG OK1AVV OK1AWC OK1AWG OK1AWH OK1AWZ OK1AXA OK1AXB OK1AXD OK1AXG OK1AY OK1AYD OK1AYU OK1AYW OK1BA OK1BB OK1BIL OK1BJ OK1BLU OK1BMW OK1BP OK1C OK1CDJ OK1CF OK1CLD OK1CRM OK1CSS OK1CT OK1CZ OK1DBE OK1DBS OK1DCF OK1DDQ OK1DDV/P OK1DEK OK1DEZ OK1DG OK1DHP OK1DIG OK1DJS OK1DKA OK1DKO OK1DKR OK1DLA OK1DM OK1DMP OK1DMZ OK1DO OK1DOL OK1DOR OK1DOT OK1DOY OK1DPU OK1DQT OK1DRX OK1DRY OK1DSN OK1DST OK1DTC OK1DVA OK1DVK OK1DVM OK1DW OK1DWC OK1DWF OK1DX OK1DXE OK1DXK OK1DXW OK1DZR OK1EK OK1EP OK1ES OK1EV OK1FA OK1FAB OK1FAI OK1FAK OK1FAO OK1FAV OK1FC OK1FCA OK1FCR OK1FDR OK1FDY OK1FED OK1FFA OK1FFU OK1FFW OK1FGD OK1FGS OK1FHD OK1FHI OK1FIM OK1FKD OK1FKM OK1FLK OK1FLT OK1FMG OK1FMX OK1FOG OK1FPG OK1FPQ OK1FPS OK1FRO OK1FV OK1FZM OK1GK OK1GS OK1GSB OK1GTH OK1GU OK1HCG OK1HCU OK1HEH OK1HFP OK1HL OK1HMP OK1HRA OK1HWB OK1HWI OK1HX OK1IAS OK1IBP OK1ICJ OK1ICQ OK1IE OK1IEC OK1IF OK1II OK1IN OK1IPS OK1ITK OK1IVU OK1IW OK1IWS OK1JBL OK1JD OK1JDJ OK1JFP OK1JKR OK1JOC OK1JOK OK1JPO OK1JRU OK1JST OK1JVS OK1JVT OK1K OK1KA OK1KC OK1KCF OK1KHA OK1KI OK1KJV OK1KK OK1KMU OK1KQH OK1KSL OK1KT OK1KTI OK1KUW OK1KZ OK1KZD OK1LL OK1LM OK1LO OK1LV OK1MA OK1MAC OK1MAG OK1MAM OK1MAW OK1MBZ OK1MCQ OK1MDK OK1MGW OK1MHW OK1MIG OK1MIQ OK1MJA OK1MKU OK1MMN OK1MNI OK1MNV OK1MNW OK1MO OK1MP OK1MR OK1MSJ OK1MSP OK1MU OK1MV OK1MZO OK1NE OK1NF OK1NG OK1NI OK1NK OK1NR OK1NS OK1NWD OK1NY OK1NZ OK1OA OK1OEA OK1OFM OK1OK OK1OPT OK1OX OK1PA OK1PFM OK1PI OK1PL OK1PMA OK1PR OK1PX OK1QM OK1RAF OK1RCA OK1RI OK1RIG OK1RP OK1RR OK1RS OK1RZ OK1SI OK1SP OK1STJ OK1T OK1TA OK1TC OK1TD OK1TFH OK1TN OK1TRA OK1TRW OK1TVL OK1UDC OK1UG OK1UKV OK1ULL OK1UN OK1US OK1USP OK1USU OK1UYR OK1VAM OK1VD OK1VDJ OK1VHV OK1VK OK1VKC OK1VPO OK1W OK1WCF OK1WF OK1WIP OK1WMJ OK1WWJ OK1WZV OK1XBF OK1XC OK1XPP OK1XQ OK1XW OK1XYZ OK1YM OK1YR OK26UD OK2AB OK2ABU OK2AN OK2AW OK2BBD OK2BBJ OK2BBQ OK2BDF OK2BDR OK2BEN OK2BFN OK2BGB OK2BGN OK2BGW OK2BH OK2BHD OK2BHL OK2BIQ OK2BJ OK2BJC OK2BJK OK2BK OK2BLD OK2BME OK2BMI OK2BMU OK2BNC OK2BND OK2BNF OK2BOB OK2BPU OK2BQ OK2BQZ OK2BRQ OK2BRS OK2BRV OK2BRX OK2BSN OK2BSQ OK2BTK OK2BUD OK2BUJ OK2BUT OK2BV OK2BWB OK2BWJ OK2BWM OK2BXA OK2BXE OK2BXU OK2BXW OK2BYW OK2BZ OK2BZE OK2CLW OK2CMW OK2CQR OK2D OK2DM OK2DW OK2EA OK2EC OK2EQ OK2ER OK2EW OK2FB OK2FD OK2FI OK2FQZ OK2FYM OK2GD OK2GU OK2GX OK2HBR OK2HBY OK2HF OK2HFC OK2HI OK2HIJ OK2HZ OK2ILD OK2JE OK2JK OK2JNB OK2JS OK2KDS OK2KFK OK2KG OK2KJI OK2KJU OK2KOJ OK2KR OK2LF OK2LI OK2LW OK2MBP OK2MG OK2MI OK2MJF OK2MRJ OK2MTV OK2NA OK2NAJ OK2NMA OK2OLD OK2OV OK2PAD OK2PAY OK2PBG OK2PCL OK2PDK OK2PDN OK2PDT OK2PEX OK2PF OK2PHI OK2PIM OK2PIP OK2PMF OK2PMS OK2PO OK2PQS OK2PTS OK2PVX OK2PX OK2QA OK2QX OK2RB OK2RDI OK2RJC OK2RN OK2RO OK2RRR OK2RRR/P OK2RU OK2RVM OK2RW OK2RZ OK2SAR OK2SFP OK2SG OK2SGW OK2SGY OK2SLS OK2SPD OK2SPS OK2SRO OK2SSJ OK2SW OK2SWD OK2TBC OK2TC OK2TDM OK2TRN OK2TS OK2TUH OK2UHP OK2UQ OK2UVX OK2V OK2VA OK2VK OK2VWB OK2VX OK2VZE OK2W OK2WED OK2WM OK2WYK OK2XKA OK2YZ OK2ZA OK2ZC OK2ZD OK2ZDL OK2ZI OK2ZL OK2ZO OK2ZU OK2ZV OK2ZW OK3C OK3D OK3EQ OK3KW OK3M OK3MO OK3NR OK3PJ OK3W OK4A OK4DZ OK4FD OK4FX OK4GP OK4K OK4MM OK4NN OK4OK OK4PA OK4RQ OK5D OK5DX OK5ET OK5F OK5IM OK5M OK5MB OK5MK OK5MM OK5N OK5NW OK5OK OK5R OK5RC OK5SA OK5SWL OK5T OK5TFC OK5TK OK5W OK5WF OK5ZH OK5ZZ OK6AA OK6AB OK6D OK6DJ OK6K OK6LZ OK6MA OK6N OK6OK OK6RA OK6RW OK6T OK6W OK6Y OK7AW OK7B OK7CM OK7CW OK7FL OK7GU OK7K OK7LO OK7M OK7MT OK7N OK7O OK7PJ OK7PN OK7RJ OK7T OK7U OK7US OK7V OK7WA OK7XA OK7XC OK7Y OK7Z OK8ACS OK8DD OK8EYJ OK8JOE OK8KM OK8NM OK8RA OK8WW OK8YD OL0A OL0W OL1A OL1C OL1M OL1X OL1Z OL2N OL2U OL3A OL3M OL3R OL3Z OL4A OL4HQ OL4N OL4W OL50OL OL5A OL5E OL5E/P OL5HQ OL5M OL5T OL5W OL5Y OL6A OL6M OL6P OL6T OL6W OL7C OL7M OL7O OL7P OL7T OL7Y OL8M OL8R OL8W OL90OK OL9A OL9M OL9R OL9Z OM0A OM0AD OM0AMR OM0ARX OM0ATP OM0CS OM0DC OM0M OM0WR OM150JM OM150MURGAS OM1ADM OM1ADX OM1AFY OM1BM OM1DK OM1II OM1LA OM1XQ OM20OTC OM2AAZ OM2AD OM2AGN OM2AM OM2APJ OM2AW OM2BK OM2DT OM2FY OM2GA OM2IV OM2KI OM2KW OM2MM OM2MW OM2RA OM2TB OM2UL OM2VL OM2WX OM2XA OM2XW OM2Y OM2ZA OM2ZZ OM3BA OM3BH OM3BY OM3CAQ OM3CAZ OM3CDN OM3CDP OM3CM OM3CND OM3COR OM3CPF OM3CUG OM3CW OM3CWY OM3DQ OM3DX OM3ED OM3EY OM3GI OM3IAG OM3ID OM3IM OM3JA OM3JW OM3KFF OM3KWT OM3KWZ OM3LK OM3LL OM3LO OM3LU OM3MB OM3PA OM3PC OM3PQ OM3PR OM3R OM3RM OM3ROM OM3RP OM3RRC OM3RWB OM3SEM OM3SX OM3TB OM3TBG OM3TLE OM3TPN OM3TSZ OM3TYC OM3TZZ OM3VL OM3WFH OM3WZ OM3YAD OM3YCA OM3YDX OM3ZBG OM3ZWA OM44LTE OM4AA OM4ANJ OM4ANO OM4ASB OM4ASI OM4AY OM4C OM4CI OM4DN OM4DU OM4EA OM4EX OM4F OM4J OM4KK OM4KW OM4M OM4MM OM4O OM4SX OM4TC OM4WW OM4X OM4XA OM5AA OM5ALC OM5AM OM5ATE OM5AW OM5CC OM5CD OM5DP OM5DW OM5DX OM5KM OM5KP OM5LR OM5M OM5MX OM5MZ OM5NA OM5NJ OM5NL OM5NU OM5NZ OM5RM OM5UM OM5VS OM5WW OM5XX OM5ZW OM6A OM6AC OM6AL OM6AMV OM6AT OM6FM OM6H OM6MS OM6RK OM6RM OM6SA OM6SM OM6TX OM6TY OM7A OM7AB OM7ACA OM7AG OM7AT OM7AW OM7AX OM7DX OM7JG OM7JM OM7KW OM7LM OM7M OM7NO OM7OB OM7OM OM7PY OM7RC OM7RM OM7RU OM7SR OM7TJ OM7TQ OM7TW OM7YC OM7ZM OM8A OM8AA OM8ADX OM8AE OM8AHJ OM8AKX OM8AQ OM8AT OM8BU OM8DD OM8FF OM8FR OM8HG OM8JP OM8KT OM8LA OM8LD OM8LM OM8M OM8MF OM8MM OM8ON OM8PG OM8ST OM8VL OM9OT ON1AEY ON1CH ON1DX ON2AD ON2BS ON2CQ ON2CYV ON2HM ON2JF ON2KMJ ON2LLC ON2LVC ON2OPA ON2TD ON2TO ON2VHF ON2WAC ON2XXX ON3AHA ON3AI ON3ANY ON3AR ON3BKM ON3BM ON3BZ ON3CCM ON3DEA ON3DI ON3DMR ON3DV ON3EA ON3ERW ON3FM ON3FU ON3FZT ON3GEO ON3IND ON3JEF ON3KP ON3KS ON3LC ON3NAM ON3NC ON3ND ON3PGL ON3PHD ON3PLE ON3PS ON3PU ON3RDX ON3RSK ON3UZ ON3VS ON3VSB ON4AA ON4AAV ON4ABW ON4ACJ ON4ACW ON4AEF ON4AHF ON4AI ON4AIP ON4AIQ ON4AMC ON4AMP ON4AMY ON4AN ON4APU ON4ARF ON4ARJ ON4ARL ON4AST ON4ATK ON4ATW ON4AUT ON4AVZ ON4AWW ON4AXU ON4BAG ON4BF ON4BHQ ON4BIT ON4BX ON4CAB ON4CAS ON4CAU ON4CBA ON4CBN ON4CCC ON4CCN ON4CCU ON4CD ON4CFB ON4CFO ON4CHK ON4CHN ON4CIG ON4CJG ON4CJQ ON4CKZ ON4CLF ON4CP/P ON4CRD ON4CRD/P ON4CT ON4DA ON4DCU ON4DN ON4DY ON4EB ON4EZ ON4FG ON4FI ON4GI ON4GO ON4GP ON4GPE ON4IA ON4IS ON4JON ON4JV ON4KBZ ON4KCY ON4KEB ON4KEP ON4KGA ON4KGL ON4KHG ON4KLG ON4KMB ON4KNP ON4KST ON4LAN ON4LCX ON4LD ON4LDP ON4LDU ON4LEX ON4LG ON4LGL ON4LL ON4LN ON4LOU ON4MCL ON4MHO ON4MNS/P ON4MW ON4NOK/P ON4NT ON4OG ON4ON ON4PAL ON4PJA ON4PM ON4PQ ON4PU ON4QJ ON4QX ON4RBO ON4RO ON4SM ON4SV ON4TC ON4TO ON4TV ON4UN ON4UP ON4UZ ON4VDV ON4VMA ON4VP ON4VT ON4WIY ON4WLR/A ON4WRC/P ON4WW ON4WY ON5AFB ON5AI ON5AV ON5DE ON5DI ON5DVO ON5EL ON5EN ON5GF ON5GM ON5GQ ON5GY ON5HC ON5HY ON5HZ ON5IB ON5IO ON5JD ON5JK ON5JT ON5KHE ON5KQ ON5LGS ON5LL/P ON5LO ON5LS ON5MB ON5MEV ON5NQ ON5NT ON5PB ON5PO ON5PV ON5QD ON5RA ON5RO ON5RV ON5RZ ON5SD ON5SE ON5SV ON5SY ON5TB ON5TC ON5TL ON5TO ON5TQ ON5UJ ON5UK ON5WL ON5YT ON6AB ON6ARE ON6AT ON6BR ON6BV ON6CK/P ON6CQ ON6CX ON6DP ON6ED ON6EE ON6EF ON6FC ON6FV ON6GV ON6HC ON6HH ON6HV ON6HX ON6HZ ON6IX ON6KE ON6KZ ON6LEO ON6LO ON6LR ON6LS ON6LX ON6LY ON6MH ON6MM ON6MQ ON6MR ON6MS/P ON6NA ON6NG ON6NL ON6NW ON6OM ON6PQ ON6PW ON6PX ON6PY ON6QO ON6QR ON6QRP ON6QZ ON6SA ON6SM ON6SX ON6UF ON6VG ON6VL ON6VOX ON6VW ON6WY ON6XY ON6YC ON6YH ON6ZK ON6ZM ON6ZV ON7AAU ON7AB ON7ARQ ON7BA ON7BBR ON7BBR/P ON7BM ON7BT ON7CC ON7CFZ ON7CK ON7CL ON7DDG ON7DU ON7DY ON7EC ON7EH ON7ERA ON7GE ON7GO ON7GR ON7HLU ON7HM ON7HW ON7HX ON7IDX ON7IS ON7JM ON7JV ON7KC ON7KEC ON7KM ON7KS ON7LB ON7LE ON7LR ON7LX ON7MU ON7MV ON7NC ON7NT ON7ON ON7PP ON7PQ ON7PS ON7PTR ON7PX ON7RR ON7RU ON7SA ON7SD ON7SS ON7SU ON7TG ON7TK ON7TWA ON7TZ ON7USB ON7VD ON7XN ON7YA ON7ZJ ON7ZM ON8AR ON8BE ON8BV ON8DM ON8DN ON8GT ON8HW ON8KW ON8NT ON8ON ON8ON/P ON8OW ON8PL ON8RD ON8SGA ON8TP ON8UK ON8VC ON8VP ON8WA ON8WR ON8WV ON9CC ON9CDD ON9CEZ ON9CFG OO0A OO1A OO2O OO2T OO4O OO4P OO4T OO5G OO5T OO7F OO7J OO7P OO7R OO7W OO9O OP0HQ OP0P OP1A OP2A OP3A OP3BZ OP3DI OP4A OP4D OP4F OP4K OP4T OP4U OP5T OP6AT OP6FC OP6OM OP6UQ OP7A OP7B OP7EH OP9T OQ4B OQ4CLM OQ4T OQ4U OQ5A OQ5M OQ6A OQ7A OR0A OR1T OR1Z OR2A OR2F OR2R OR3A OR3R OR4K OR4U OR4W OR5A OR5T OR7B OR7Z OR90VL OS0C OS0S OS4U OS5U OS8A OT0T OT1A OT1S OT1V OT2A OT2X OT4A OT4I OT4M OT4R OT4T OT5A OT5X OT6M OT7D OT7E OT7J OT7K OT7N OT7X OT8T OT9Z OU1E OU2I OU2M OU2M/P OU2P OU2V OU2W OU2X OU3A OU4N OU4O OU4X OU5U OU5W OU7Q OU8A OV0V OV1A OV2B OV2V OV3T OV3TH OV3X OV7B OX1B OX3LX OX3OA OX3XR OX5M OX5T OY1CT OY1OF OY4M OY6A OY9JD OY9R OZ/DJ5LA OZ/DL5CW OZ/DL7CX OZ/HA8MT OZ0A OZ0AP OZ0FR OZ0J OZ0JX OZ0NAVY OZ0RS OZ0ST OZ11A OZ1AA OZ1AAR OZ1ABA OZ1ACB OZ1ADL OZ1AOO OZ1AXG OZ1BXG OZ1BZJ OZ1CQQ OZ1CTK OZ1CX OZ1D OZ1DGQ OZ1DJJ OZ1DWK OZ1DYI OZ1ELY OZ1FAO OZ1HHH OZ1HQ OZ1HX OZ1IKW OZ1IKY OZ1IVA OZ1JB OZ1JFK OZ1JHM OZ1JTE OZ1JU OZ1JVX OZ1KEF OZ1KJG OZ1KKH OZ1KVM OZ1LCG OZ1LCW OZ1LFI OZ1LNL OZ1LO OZ1NF OZ1OP OZ1RD OZ1SKY OZ1TTT OZ1XV OZ1ZD OZ1ZE OZ2A OZ2ABI OZ2BKK OZ2CA OZ2CVT OZ2ELA OZ2KC OZ2PBS OZ2PJ OZ2TF OZ2U OZ2Y OZ30EU OZ3ABU OZ3AEV OZ3BJ OZ3DE OZ3LX OZ3SM OZ4ACK OZ4B OZ4CG OZ4FA OZ4FF OZ4HT OZ4KG OZ4LH OZ4MD OZ4NA OZ4O OZ4RT OZ4SOP OZ4UN OZ4VV OZ4VW OZ5AFM OZ5AGJ OZ5BAL OZ5D OZ5DX OZ5E OZ5EV OZ5GX OZ5HP OZ5JC OZ5KSL OZ5KU OZ5L OZ5L/A OZ5N OZ5NJ OZ5RF OZ5RM OZ5TL OZ5TO OZ5TO/P OZ5WQ OZ5XN OZ6ABL OZ6AGD OZ6AGX OZ6AI OZ6EG OZ6EI OZ6GH OZ6KS OZ6OM OZ6PI OZ6TL OZ75AAL OZ7A OZ7AEI OZ7AM OZ7BQ OZ7BQ/P OZ7DK OZ7EA OZ7EDR OZ7HB OZ7HT OZ7IF OZ7IS OZ7KJ OZ7KU OZ7PR OZ7QQ OZ7RQ OZ7SG OZ7X OZ7YL OZ7YY OZ8A OZ8ABE OZ8AE OZ8AGB OZ8CT OZ8PG OZ8QI OZ8RH OZ8RW OZ8SW OZ8UW OZ8X OZ8ZS OZ90IARU OZ9KL OZ9V P29FR P29NO P33P P33W P37F P39P P3F P3J P3M P3N P3Z P40A P40BC P40C P40CX P40F P40HF P40HQ P40L P40LE P40P P40R P40S P40W P43A P43ARC P43E P43K P43L P43R P44W P49X P49Y PA0A PA0AA PA0ABM PA0AGA PA0AKN PA0AMR PA0ANS PA0ASD PA0ATG PA0ATY PA0AWH PA0B PA0BWL PA0C PA0CGB PA0CMU PA0CT PA0DDB PA0DIN PA0DOM PA0EMO PA0FAW PA0FVH PA0GJV PA0GMS PA0GRB PA0HOR PA0HRM PA0IA PA0INA PA0JED PA0JHS PA0JNH PA0JSE PA0LEG PA0LIE PA0LOU PA0LUX PA0M PA0MBD PA0MIR PA0MJM PA0O PA0PFW PA0PVW PA0QRB PA0QX PA0RBA PA0RBO PA0RDY PA0RHA PA0RRA PA0RRS PA0SAN PA0SHY PA0SIM PA0SKP PA0TCA PA0UKC PA0VAJ PA0VDV PA0VHA PA0VLA PA0WKI PA0WLB PA0WPD PA0WRS PA0X PA0ZAV PA0ZH PA1A PA1AT PA1AW PA1B PA1BDO PA1BK PA1BR PA1BX PA1CA PA1CC PA1CPA PA1CW PA1CWI PA1DK PA1DV PA1FJ PA1FNW PA1FR PA1H PA1HCB PA1HR PA1JEP PA1JIM PA1K PA1KW PA1LIO PA1M PA1MAR PA1MR PA1MUC PA1MV PA1NHZ PA1NL PA1PAT PA1PE PA1PVH PA1RLM PA1RZ PA1T PA1TK PA1TO PA1VC PA1VD PA1WBU PA1X PA2A PA2ALF PA2C PA2CHM PA2CVD PA2DW PA2ELS PA2F PA2GRU PA2GWA PA2IP PA2J PA2JJB PA2JWN PA2LO PA2LP PA2LS PA2M PA2MI PA2MRT PA2NJC PA2PCH PA2PDN PA2PKZ PA2PRU PA2REH PA2RU PA2SAM PA2SWL PA2T PA2TA PA2W PA2WO PA2Z PA3A PA3AAV PA3ACA PA3AFF PA3AGF PA3AIN PA3AIW PA3AJI PA3AKE PA3AKP PA3ALK PA3AM PA3ANN PA3AQL PA3ARM PA3ATN PA3ATZ PA3AWW PA3BFH PA3BNT PA3BPZ PA3BQC PA3BUD PA3BWD PA3BWK PA3BWS PA3C PA3CJF PA3CJP PA3CLQ PA3CMF PA3CNI PA3CSG PA3CUI PA3CUK PA3CVI PA3CVJ PA3CVR PA3CWN PA3CZS PA3DAT PA3DBS PA3DCU PA3DCX PA3DDP PA3DHH PA3DHR PA3DJY PA3DRL PA3DTR PA3DVA PA3DZM PA3EAQ PA3EBP PA3ECJ PA3EEG PA3EER PA3EHT PA3ELQ PA3EMN PA3EPX PA3EQO PA3EVY PA3EWG PA3EWP PA3EYC PA3EYK PA3EYP PA3EZC PA3FAL PA3FKY PA3FLA PA3FOE PA3FQA PA3FQH PA3FR PA3FTX PA3FWM PA3FYG PA3FYM PA3GBJ PA3GBK PA3GCU PA3GCV PA3GDD PA3GDG PA3GDY PA3GEO PA3GFE PA3GGB PA3GGI PA3GGW PA3GPA PA3GQF PA3GRM PA3GVI PA3GVQ PA3GXB PA3GXF PA3HCC PA3HCL PA3HCM PA3HDM PA3HEB PA3HFJ PA3HFX PA3HGC PA3HGF PA3HGP PA3HHO PA3HHT PA3HK PA3HS PA3I PA3J PA3JD PA3JQD PA3KVE PA3KVL PA3MET PA3MM PA3MR PA3MRO PA3N PA3P PA3RIS PA3S PA3T PA3TG PA3TOP PA3XYZ PA40FAW PA44AH PA45AH PA4A PA4AO PA4B PA4G PA4HM PA4J PA4JJ PA4LA PA4M PA4MRS PA4MSA PA4N PA4O PA4PS PA4RD PA4T PA4VHF PA4WG PA4XA PA5AD PA5BW PA5CA PA5CB PA5CW PA5EM PA5F PA5FN PA5GU PA5HA PA5J PA5JS PA5JSB PA5K PA5KT PA5LV PA5MW PA5O PA5P PA5PJB PA5PR PA5RJ PA5TT PA5V PA5VK PA5VL PA5WK PA5WT PA5YL PA6A PA6ANT PA6HQ PA6K PA6NB PA6T PA6USA PA6V PA6W PA6WRD PA6Y PA6YT PA7A PA7AL PA7BAS PA7DX PA7F PA7FA PA7FB PA7FRN PA7G PA7J PA7JWC PA7KG PA7LV PA7LZ PA7PA PA7PTT PA7PYR PA7RA PA7T PA7WW PA8AD PA8DX PA8F PA8KW PA8N PA8R PA8W PA8ZB PA9BC PA9CC PA9CW PA9DD PA9HR PA9IGB PA9LUC PA9M PA9RD PA9WOR PA9X PB0ACU PB0AMU PB0P PB1HF PB2A PB4FUN PB4W PB5A PB5DX PB5X PB7JOS PB7XYL PB7Z PB8DX PB8YL PC1A PC1EMR PC1H PC200ZVL PC2A PC2C PC2D PC2F PC2J PC2S PC2T PC2X PC3H PC3M PC4C PC4H PC4Y PC5C PC5D PC5M PC5Q PC5WB PC6F PC73X PC7B PC7T PC9T PD/DO1BEN PD/VA2KKM PD0AD PD0ADR PD0AG PD0ARI PD0DEF PD0EJD PD0FSB PD0HF PD0HHG PD0HMA PD0JHM PD0JMH PD0JW PD0KDF PD0MBY PD0ME PD0MGX PD0MHZ PD0MLO PD0MM PD0MNF PD0MV PD0MW PD0MWG PD0NMF PD0OYF PD0P PD0PHA PD0PMS PD0PVL PD0R PD0RB PD0RKA PD0ROC PD0RON PD0RS PD0RWL PD0RXP PD0SBR PD0SCY PD0WR PD0WVB PD0WVD PD1ABO PD1ADK PD1AEC PD1AJM PD1ALW PD1ARE PD1AT PD1ATH PD1B PD1BHZ PD1BT PD1CMP PD1CW PD1DX PD1EN PD1JFB PD1JFW PD1RO PD1RP PD1T PD1TV PD1TVH PD1WO PD1WSL PD2AD PD2ATG PD2BA PD2C PD2DK PD2EDR PD2EP PD2GSP PD2HT PD2J PD2JAM PD2MZ PD2PKM PD2TW PD3AHW PD3AL PD3ALX PD3ATM PD3BVI PD3EM PD3GYS PD3HB PD3HIM PD3MDM PD3MR PD3OES PD3TG PD3TRU PD3WO PD3X PD4B PD4DLM PD4DX PD4HDB PD4JOF PD4JP PD4KH PD4M PD4RD PD4RW PD4SAM PD4WIM PD5CW PD5DJ PD5JFK PD5L PD5MJF PD5MS PD5S PD5T PD6NUKE PD70BZH PD7B PD7BZ PD7CJT PD7DB PD7DX PD7H PD7M PD7MDJ PD7RB PD7RF PD7YY PD8A PD8J PD8SL PD9DB PD9DX PD9NR PD9T PD9W PD9WS PD9X PE0MVJ PE0NYJ PE0TS PE1AED PE1BNF PE1CIM PE1CPJ PE1CUP PE1CZG PE1DGM PE1DH PE1DXL PE1EEJ PE1ER PE1EWR PE1EXD PE1F PE1FTV PE1GNP PE1GQE PE1GRJ PE1GWX PE1HB PE1HWO PE1ITR PE1IVR PE1IWT PE1JXI PE1KL PE1L PE1LJS PE1LTY PE1LUB PE1MMQ PE1NBD PE1ODY PE1OLM PE1OPK PE1ORG PE1OXP PE1OXS PE1PIC PE1RDP PE1RF PE1RLF PE1RMO PE1RNU PE1RPK PE1RUS PE1RWL PE1WH PE2AAB PE2AE PE2CML PE2EMS PE2HD PE2HLA PE2JMR PE2K PE2KY PE2LZ PE2W PE30K PE3V PE4A PE4AD PE4BAS PE5B PE5ENJ PE5HV PE5JW PE5ROS PE5TS PE7T PE9GG PF14A PF15ANT PF1MO PF4T PF5M PF5X PF9A PF9W PG1A PG1R PG200KMAR PG2AA PG2P PG2W PG3N PG4DX PG4I PG5M PG5V PG6F PG6G PG6W PG7A PG7V PG8M PH0AS PH0NO PH1KW PH1UW PH2A PH2L PH2M PH44ZU PH4E PH4X PH5C PH5T PH7A PH9B PI25COM PI4A PI4AAG PI4AMF PI4ASV/P PI4BRD PI4CC PI4CG PI4COM PI4D PI4DHV PI4DX PI4ETL PI4ETL/P PI4F PI4FRG PI4H PI4KAR PI4KGL PI4M PI4OTC PI4TUE PI4TX PI4VAD PI4VNW PI4VPO/P PI4W/P PI4YLC PI4ZOD PJ2D PJ2T PJ2V PJ4A PJ4D PJ4DX PJ4F PJ4G PJ4J PJ4LS PJ4NX PJ4Q PJ4S PJ4T PJ4V PJ4X PJ4Z PJ5/OL8R PJ5W PJ6/G4IUF PJ6/NM1Y PJ6A PJ7AA PJ7PL PJ7TM PJ7W PP11CZ PP1CZ PP1ER PP2BIL PP2CC PP2EG/5 PP2FRS PP2JT PP2MD PP2OK PP2PR PP2RON PP5/HB9CJX PP5AMP PP5ASF PP5AX PP5BI PP5BK PP5BS PP5BZ PP5CIT PP5EG PP5EI PP5EJ PP5FB PP5JA PP5JAK PP5JD PP5JN PP5JR PP5JY PP5KC PP5KR PP5MQ PP5NS PP5NY PP5UP PP5VX PP5WG PP5XX PP5YZ PP5ZAP PP5ZP PP6MS PP6ZZ PP7JR PP8ZAC PQ5B PQ5FB PQ5M PQ70FEB PQ7MM PR0F PR1T PR2O PR2W PR2X PR3A PR5A PR5B PR5C PR5D PR5K PR5W PR77AR PR7AA PR7AB PR7AE PR7AF PR7AP PR7AR PR7AYE PR7CPK PR7DX PR7DZ PR7FB PR7HR PR7LO PR7LV PR7RBA PR7RC PR9M PS1M PS2C PS2R PS2T PS5A PS7AB PS7AW PS7DX PS7HD PS7KC PS7YL PS8BR PS8DX PS8ET PS8HF PT2ADM PT2AP PT2AW PT2AZ PT2CM PT2CVA PT2EBR PT2EL PT2LA PT2MAF PT2NP PT2ON PT2ZXR PT3A PT3T PT4Y PT5J PT5ST PT5T PT77ZT PT7AV PT7BXB PT7CG PT7KJ PT7MM/7 PT7WM PT7ZT PT8CW PT9AL PT9BM PT9DX PT9IR PU1KGG PU1KTZ PU1KVA PU1MHZ PU1MIL PU1MKZ PU1NAF PU1PHC PU1RSN PU1TMU PU1YGM PU2KAY PU2KIV PU2KKE PU2KMZ PU2LGU PU2LVF PU2LXM PU2NOE PU2NZO PU2OAG PU2PZZ PU2RTO PU2SDX PU2STZ PU2TES PU2TFT PU2THC PU2TLW PU2TRX PU2TYA PU2UAF PU2VGA PU2WDX PU2WTO PU2XIZ PU2XWR PU2YYP PU2YZP PU3CAL PU3FKW PU3KNG PU3LTA PU3NAT PU3POA PU3TOT PU4HAS PU4HUD PU4YJS PU5AAD PU5AEC PU5AGM PU5BOY PU5CSF PU5DCB PU5DTH PU5FJR PU5MFL PU5RHT PU5SVE PU5UAI PU6LCG PU7DEF PU8MET PU8MRS PU8YPL PU9ATH PV150ITU PV2M PV2P PV70FEB PV7M PV8AA PV8ADI PV8AM PV8BR PV8DR PV8DX PV8RF PW0F PW1A PW2D PW2F PW2T PW5A PW5G PW7MM PW7T PW8PM PX150ITU PX1C PX1M PX1X PX2A PX2B PX2C PX2F PX2T PX2V PX2W PX2X PX3X PX4X PX5E PX5Z PX7C PX8X PY0FF PY11VOY PY1AA PY1AX PY1CAS PY1CMT PY1CPF PY1DO PY1EDB PY1EO PY1FI PY1GQ PY1JPT PY1JR PY1KN PY1KR PY1KS PY1MG PY1MM PY1MT PY1MX PY1NB PY1NP PY1NS PY1NSC PY1NX PY1NYJ PY1ON PY1PDF PY1PL PY1ROG PY1RY PY1SGT PY1SL PY1SX PY1TJ PY1TL PY1TR PY1TTN PY1TV PY1UA PY1VHF PY1VOY PY1WDS PY1WS PY1WW PY1XM PY1ZRT PY1ZV PY22XB PY2AAZ PY2ABN PY2AE PY2ALC PY2AXH PY2BEK PY2BI PY2BN PY2BT PY2CDR PY2COY PY2CTA PY2DN PY2DPM PY2DS PY2DV PY2DXA PY2DY PY2EJ PY2EL PY2ELG PY2ETA PY2EU PY2EX PY2FCL PY2FN PY2FSR PY2HAM PY2HN PY2HT PY2IML PY2IQ PY2ITM PY2IU PY2IV PY2JF PY2JNV PY2JOS PY2KC PY2KJ PY2KP PY2LCD PY2LGU PY2LOB PY2LPM PY2LUC PY2MC PY2MR PY2MTV PY2NA PY2NB PY2NDX PY2NFE PY2NY PY2NZ PY2OC PY2OSL PY2PJA PY2PRB PY2PT PY2QA PY2QG PY2QI PY2QM PY2QT PY2RDZ PY2RF PY2RH PY2RMY PY2RN PY2RX PY2SAA PY2SBY PY2SHF PY2SP PY2SPW PY2TDX PY2TEL PY2TKB PY2TMV PY2TOP PY2TTE PY2UD PY2UDX PY2UV PY2VA PY2VI PY2VM PY2VOA PY2VOX PY2VTC PY2VZ PY2WC PY2WWA PY2WZR PY2XAT PY2XB PY2XC PY2XTA PY2XU PY2XV PY2YP PY2YR PY2YRC PY2YU PY2ZAZ PY2ZEA PY2ZQ PY2ZR PY2ZW PY2ZXU PY2ZZZ PY33IT PY3AA PY3AJB PY3APY PY3AU PY3CAL PY3DJB PY3DX PY3EW PY3FF PY3FJ PY3FOX PY3IT PY3KN PY3KV PY3ML PY3MM PY3MSS PY3MU PY3OZ PY3PA PY3PC PY3TIO PY3UA PY3UR PY3XX PY3YD PY44ARS PY4ARS PY4BZ PY4CR PY4DBU PY4DK PY4EK PY4FL PY4FQ PY4HO PY4LF PY4LH PY4OY PY4RGS PY4RP PY4RR PY4TW PY4VB PY4XX PY4YY PY4ZAG PY4ZE PY4ZO PY4ZW PY5AB PY5AKW PY5ARP PY5AS PY5BH PY5DC PY5DD PY5DK PY5EG PY5FB PY5FO PY5GA PY5IN PY5JO PY5JR PY5KA PY5KC PY5KD PY5PWR PY5QW PY5TJ PY5VC PY5WH PY5XH PY5ZHP PY5ZW PY6TS PY7AHA PY7CRA PY7DJ PY7OJ PY7OO PY7RP PY7SAS PY7VI PY7XC PY7ZBK PY7ZY PY7ZZ PY8FML PY8MUD PY8WW PY90IARU PY9GC PY9MM PY9MP PZ5A PZ5AV PZ5RA R0AA R0ACE R0AEE R0AZ R0CAF R0CM R0CW R0DX R0FA R0JF R0LM R0QA R0SR R0TR R0VZ R0WC R11ALS R11WCU R14CWC R15CWC R1AC R1ADQ R1AK R1AL R1AO R1AT R1AUR R1AZ R1BCE R1BW R1CC R1CT R1DX R1KRG/P R1MA R1NA R1NEO R1NU/P R1NW R1OO R1QA R1QAP R1TE R1TEU R1WAG R1ZAB R22ALS R22CRC R22FIS R22FRS R22LUG R22NOC R2AA R2AB R2AD R2ADI R2ADL R2AF R2AGG R2AGP R2AHS R2AT R2DA R2DCG R2DEM R2DEQ R2DEU R2DFD R2DFE R2DGG R2DGP R2DR R2DT R2DU R2DW R2DX R2DX/3 R2EA R2EL R2GBA R2GM R2LAC R2MA R2OA R2OFF R2OM R2PT R2SA R2UZ R2WW R2YES R2ZA R2ZC R35MWC R3AA R3AAA R3AD R3AP R3AQ R3AT R3BA R3BB R3BM R3BT R3CW R3DAU R3DC R3DCB R3DCX R3DE R3DF R3DG R3DL R3DPM R3DX R3DZ R3EA R3EAM R3EE R3EG R3ER R3EZ R3FC R3FD R3FQ R3FX R3GD R3GM R3GMT R3GO R3GV R3GZ R3HA R3HD R3HQ R3IS R3KAB R3KF R3KM R3KO R3KQ R3LA R3LB R3LBA R3LC R3LM R3LO R3LW R3MA R3MJ R3MM R3MS R3MW R3NA R3NN R3OK R3OM R3OQ R3OR R3PA R3PC R3PR R3PV R3PW R3QA R3QF R3QJ R3QN R3QX R3RAE R3RAF R3RF R3RK R3RK/P R3RM R3RR R3RT R3RZ R3ST R3TG R3VA R3VI R3VL R3VO R3WR R3WW R3WZ R3XAA R3XP R3XX R3YAB R3YC R3ZS R3ZV R3ZW R3ZZ R4CA R4CO R4CQ R4CU R4DX R4FA R4FAD R4FAN R4FD R4FET R4FO R4FY R4IB R4IB/P R4II R4IN R4IO R4IT R4LD R4LZ R4MA R4MM R4MZ R4NX R4RM R4RR R4RT R4RZ R4SA R4SAJ R4SO R4WAA R4WAA/P R4WAB R4WDX R4WT R4WT/P R4WW R4YY R5ACQ R5AJ R5AM R5AM/P R5AO R5AU R5DC R5DC/P R5DF R5DT R5DU R5DV R5DX R5DZ R5FU R5GA R5QA R5WP R5WW R6AC R6AF R6AJ R6AP R6AW R6AZ R6CA R6CC R6CC/P R6CO R6CQ R6CS R6CW R6CZ R6DA R6DAV R6DAZ R6DBT R6DG R6DX R6FAA R6FK R6FS R6GA R6GK R6KA R6KEE R6KT R6KY R6LAQ R6LC R6LE R6MR R6MW R6NS R6YY R7AB R7AB/P R7AC R7AL R7AM R7AO R7AO/P R7AT R7AW R7AX R7AY R7BN R7CA R7CK R7CT R7CW R7DA R7DM R7DX R7ED R7FC R7FF R7FG R7FK R7FL R7FO R7FR R7FX R7GA R7GC R7GX R7HC R7HF R7HL R7IA R7IT R7KA R7KD R7KFX R7KH R7KM R7KMA R7KO R7KQ R7KR R7KU R7KW R7KX R7KZ R7LA R7LP R7LV R7MA R7MC R7MM R7MP R7MT R7MU R7MY R7NA R7NK R7NP R7NW R7RC R7RF R7RF/6 R7RIB R7RM R7TG R7TO R7TU R7TW R80KEDR R80SVG R8CAA R8CT R8FR R8IA R8LA R8LAG R8MC R8MD R8OA R8OA/P R8TA R8TR R8TT R8TX R8US R8UT R8WF R8WO R8XA R8XF R8XF/4 R8XW R8XW/6 R8XW/8 R90IARU R9AAJ R9AAL R9AB R9AD R9AE R9AJ R9AM R9AV R9AX R9CAC R9CB R9CC R9CM R9CP R9CW R9CZA R9DA R9DK R9DX R9FA R9FM R9FN R9FR R9FT R9GM R9GM/P R9HAF R9IR R9JD R9JR R9KD R9KD/6 R9LAA R9LM R9LT R9MJ R9OA R9OAZ R9OC R9OK R9OM R9OO R9OSN R9QQ R9RA R9RT R9SA R9SG R9SK R9SN R9TO R9TV R9UA R9UAG R9UAV R9UC R9UE R9UG R9UP R9UTW R9UVD R9UW R9VA R9WBY R9WDV R9WGM R9WN R9WS R9WWT R9WZZ R9XAC R9XC R9XM R9XS R9XT R9XU R9XV R9XZ R9YA R9YC R9YP RA/DL2KQ RA/KE5JA RA/UU9JC RA/UU9JK RA/UY6IM RA0ACM RA0AM RA0AN RA0ANO RA0APW RA0AQQ RA0AY RA0CGY RA0CHK RA0FF RA0JBL RA0L RA0LE RA0LL RA0LMK RA0LMV RA0LQ RA0QQ RA0R RA0SMS RA0SS RA0TG RA0UBI RA0UF RA0UJ RA0W RA0WHE RA0WU RA0ZN RA1A RA1ABR RA1AG RA1AGL RA1AGU RA1AL RA1AL/1 RA1ALC RA1ALH RA1ANS RA1ANY RA1AO RA1AOB RA1AP RA1APV RA1AW RA1CAG RA1CE RA1CF RA1CP RA1CW RA1NAL RA1OD RA1OT RA1OW RA1QBH RA1QCZ RA1QD RA1QE RA1QEA RA1QG RA1QN RA1QQ RA1QX RA1QY RA1TDX RA1TU RA1TV RA1WA RA1WA/1 RA1WZ RA1ZZ RA1ZZ/3 RA22AA RA22AL RA22AO RA22FF RA22MX RA22QF RA22VG RA22XA RA22XF RA22XU RA2FAC RA2FB RA2FDX RA2FIA RA2FN RA2FU RA2FV RA2FX RA3A RA3AGF RA3AN RA3ATE RA3ATX RA3AV RA3BL RA3BQ RA3BQ/3 RA3BZ RA3C RA3CQ RA3D RA3DAD RA3DGH RA3DIH RA3DJA RA3DNC RA3DQP RA3DX RA3E RA3EA RA3EC RA3EF RA3EK RA3FD RA3FH RA3G RA3GAS RA3GI RA3GJT RA3GK RA3GZ RA3ICK RA3ID RA3LDP RA3LO RA3M RA3MD RA3MQ RA3MU RA3NC RA3NF RA3NQ RA3OA RA3OO RA3OW RA3PPA RA3Q RA3QH RA3QK RA3QPY RA3QSY RA3QUA RA3RA RA3RBL RA3RCL RA3RDW RA3RGD RA3RGQ RA3RLJ RA3RLP RA3RPJ RA3RRP RA3SAE RA3SI RA3SL RA3ST RA3SX RA3T RA3TE RA3THN RA3TJX RA3TT RA3TV RA3TYL RA3U RA3UAG RA3UAG/P RA3UT RA3V RA3VE RA3VFM RA3VX RA3WDK RA3WUG RA3WVG RA3XCZ RA3XDX RA3XEV RA3XGA RA3XGY RA3XI RA3XM RA3XO RA3XT RA3Y RA3YAO RA3YC RA3YDA RA3YZ RA3Z RA3ZH RA4AAJ RA4AAT RA4ACX RA4AR RA4ATZ RA4CA RA4CB RA4CBN RA4CC RA4CEW RA4CLU RA4CVT RA4DAR RA4DB RA4DR RA4DR/1 RA4FK RA4FP RA4FUN RA4FUT RA4FW RA4HBS RA4HL RA4HMT RA4HPI RA4HX RA4I RA4L RA4LBS RA4LFQ RA4LGM RA4LK RA4LO RA4LOC RA4LY RA4M RA4P RA4PBE RA4PKI RA4PQ RA4PTI RA4SR RA4UAT RA4UVK RA4W RA4WA RA4WC RA4Y RA4ZA RA5A RA5AN RA5B RA5C RA5D RA5FB RA5W RA5ZB RA6/YU5DJZ RA6AAW RA6AF RA6AN RA6AQ RA6AR RA6ARI RA6C RA6CA RA6CB RA6CU RA6CZ RA6CZ/P RA6DE RA6DT RA6FG RA6FHY RA6FUZ RA6FYL RA6GW RA6HSM RA6IGE RA6K RA6LES RA6LIS RA6MA RA6ME RA6MQ RA6WF RA6XB RA6XV RA6YDX RA6YJ RA7A RA7C RA7E RA7KO RA7KU RA7KW RA7M RA7R RA7RA RA7RC RA7T RA7Y RA8T RA9A RA9A/P RA9AAA RA9ACS RA9AEA RA9AFZ RA9AKI RA9AMO RA9AN RA9AP RA9APG RA9AU RA9C RA9CCK RA9CIN RA9CMO RA9CNF RA9CUU RA9DP RA9DZ RA9FEL RA9FFY RA9FRD RA9HM RA9I/9 RA9JA RA9JB RA9JBA RA9JM RA9JP/8 RA9KY RA9LAN RA9LT RA9MA RA9MAS RA9MX RA9OFE RA9OG RA9QBQ RA9RW RA9SB RA9SK RA9SKL RA9SN RA9SO RA9U RA9UAD RA9UC RA9UGU RA9UGZ RA9ULK RA9UN RA9UWT RA9W RA9WD RA9WU RA9X RA9XA RA9XSL RA9Y RA9YE RA9YN RA9YRQ RA9YUI RC0AAB RC0LAD RC1C RC1Q RC1Z RC2GB RC2T RC3C RC3D RC3F RC3P RC3T RC3U RC3UA RC3W RC4AA RC4AC RC4HAA RC4HT RC4I/P RC4R RC4W RC5A RC5Z RC6AE RC6R RC6U RC7A RC7A/P RC7C RC7I RC7KY RC7LK RC80KEDR RC8I RC8SA RC9A RC9AR RC9F RC9J RC9M RC9O RC9S RC9T RC9W RC9X RC9XM RC9XM/1 RC9XT RC9YA/P RD0A RD0C RD0CD RD0L RD0W RD0WA RD1A RD1A/P RD1AH RD1AP RD1AR RD1D RD22DD RD2A RD3AB RD3AD RD3AEF RD3AJB RD3AL RD3ARU RD3AT RD3AW RD3BZ RD3DS RD3DY RD3FF RD3FP RD3FT RD3FV RD3FY RD3MF RD3PA RD3TBQ RD3TOK RD3VC RD3WAY RD3WR RD4A RD4AL RD4AM RD4CAQ RD4CAQ/9 RD4F RD4HD RD4W RD4WM RD5A RD7K RD8D RD8O RD9CX RD9CX/6 RD9DX RD9SA RD9U RE3YAA RE9KAA RF4S RF8F RF8O RF8R RF8R/P RF9C RF9W RG0A RG22CD RG22RQ RG22TT RG22XN RG3AR RG3B RG3K RG3P RG3R RG4F RG5A RG5G RG5R RG6A RG6G RG7A RG7K RG80KEDR RG8K RG8U RG9A RG9O RI0F RI1ANC RI1ANP RI1ANT RI1ANU RI1ANZ RI1N RJ22DX RJ22MM RJ22YY RJ3AA RJ3AM RJ3DF RJ3F RJ3ZA RJ4I RJ4P RJ5DX RJ6J RJ9J RK0AB RK0AZC RK0JT RK0LWW RK0SK RK0SM RK0SXR RK0UT RK0W RK1AD RK1AS RK1NA RK1OWZ RK1OWZ/P RK1PWA RK1QWX RK1TWB RK22DG RK22KR RK2A RK2FWG RK2M RK3AO RK3AQW RK3AVO RK3BA RK3DHU RK3DK RK3DSW RK3DU RK3DWH RK3DWW RK3DWW/P RK3DXW RK3DYB RK3ER RK3EWW RK3FM RK3FT RK3FY RK3G RK3IM RK3MXT/P RK3P RK3PWJ RK3PWR RK3QY RK3R RK3RT RK3RX RK3RXG RK3SWB RK3SWB/1 RK3SWS RK3VWA RK3WWA RK3WWB RK3XXA RK3YWA RK3YWA/P RK3YYQ RK3ZWF RK4A RK4CB RK4FAJ RK4FAO RK4FD RK4FF RK4FL RK4FM RK4FU RK4HYT RK4HZ/3 RK4NAB RK4PA RK4PA/9 RK4R RK4S RK4W RK4W/P RK4YYY RK5D RK6AM RK6AQP RK6ATQ RK6AX RK6CC RK6CM RK6DL RK6HG RK7A RK7F RK7M RK7T RK80KEDR RK8I RK8T RK9A RK9AD RK9AK RK9ALD RK9AN RK9AWQ RK9AX RK9AY RK9AY/P RK9CR RK9CYA RK9DC RK9DM RK9DO RK9FBO RK9KWI RK9LWA RK9O RK9QWM RK9SXD RK9UC RK9UE RK9UM RK9UN RL22GM RL2A RL3A RL3AJ RL3AN RL3AW RL3BZ RL3DA RL3DF RL3DI RL3DJ RL3DS RL3DV RL3DX RL3DZ RL3F RL3FA RL3Q RL3QCS RL3T RL3ZZ RL4A RL4F RL5A RL5D RL6LP RL6M RL6MN RL7G RL9A RL9AA RL9F RL9I RL9LD RL9LR RL9M RL9O RL9X RL9Y RM0A RM0F RM0W RM1A RM1M RM1Q RM1T RM22CC RM22DG RM22DM RM22DU RM22MR RM2D RM2E RM2M RM2P RM2T RM2T/P RM2U RM3A RM3D RM3DA RM3F RM3F/P RM3G RM3M RM3N RM3Q RM3Q/P RM3TO RM3U RM3UA RM3V RM3Z RM4A RM4C RM4F RM4HZ RM4I RM4N RM4P RM4R RM4W RM4W/4 RM5A RM5C RM5D RM5K RM5O RM5P RM5Y RM5Z RM6AA RM6C RM6F RM6J RM6Y RM7C RM7F RM7K RM7M RM7M/P RM7X RM8G RM8L RM8W RM9A RM9I RM9RZ RM9T RM9U RM9X RN0A RN0C RN0CT RN0JN RN0SRR RN1A RN1AI RN1AW RN1CM RN1CW RN1ON RN1QA RN22OG RN2A RN2F RN2FQ RN3AAB RN3AC RN3AKK RN3ANT RN3B RN3BO RN3DDR RN3DHB RN3DJY RN3DKE RN3DKP RN3DKQ RN3DMB RN3DN RN3DNM RN3F RN3FA RN3FK RN3FS RN3FT RN3FY RN3GJ RN3GQ RN3K RN3K/3 RN3N RN3OG RN3P RN3QN RN3QO RN3QQT RN3QR RN3RQ RN3TT RN3YA RN3Z RN3ZIC RN3ZJJ RN3ZMX RN3ZQ RN3ZR RN4AA RN4ACX RN4ACZ/1 RN4AM RN4AO RN4CA RN4CQ RN4CU RN4F RN4HAB RN4HFJ RN4HGJ/1 RN4HIF RN4HN RN4LP RN4NF RN4SC RN4SM RN4SN RN4SS RN4W RN4ZT RN5AA RN6A RN6AJ RN6CH RN6DR RN6FM RN6L RN6LG RN6MA RN7A RN7F RN7K RN8W RN9A RN9AV RN9CM RN9N RN9O RN9O/8 RN9RF RN9S RN9SN RN9T RN9U RN9W RN9WA RN9WT RO1B RO1B/6 RO2A RO2E RO3D RO3G RO3O RO3T RO4A RO4F RO4I RO5D RO5I RO5K RO5O RO6A RO6L RO6M RO7T RO80KEDR RO9A RO9O RO9S RO9T RO9U RO9W RP69GR RQ0C/4 RQ2Q RQ3M RQ3P RQ3R RQ4C RQ4D RQ4D/8 RQ4F RQ4N RQ5D RQ7K RQ7L RQ7M RQ7R RQ9I RS3A RS80KEDR RT0B RT0C RT0F RT0Q RT0R RT0T RT0W RT1A RT1C RT1O RT1Q RT1ZD RT22MD RT22SA RT22UA RT22ZS RT2A RT2D RT2D/1 RT2F RT2T RT2Y RT3A RT3D RT3DX RT3F RT3G RT3I RT3K RT3LA RT3M RT3N RT3O RT3P RT3R/3 RT3S RT3T RT3Y RT4A RT4C RT4D RT4F RT4H RT4P RT4RO RT4S RT4W RT5A RT5C RT5C/3 RT5D RT5F RT5G RT5G/P RT5K RT5Q RT5R RT5X RT5Z RT6A RT6K RT6T RT7A RT7F RT7M RT7N RT7T RT80KEDR RT8O RT8U RT9A RT9C RT9I RT9J RT9K/6 RT9OM RT9S RT9T/3 RT9TM RT9U RT9X RT9YA RT9YT RT9YW RU0A RU0AI RU0AT RU0BW RU0LAX RU0LAX/P RU0LL RU0LW RU0ST RU1A RU1AB RU1AT RU1QY RU1ZC RU22PC RU22TU RU22WZ RU3ALR RU3C RU3DBR RU3DDY RU3DM RU3DU RU3DX RU3EJ RU3ER RU3F RU3FB RU3FM RU3FN RU3FT RU3GF RU3K RU3KO RU3OW RU3PY RU3QR RU3SD RU3TJ RU3U RU3UB RU3UN RU3UR RU3UW RU3VV RU3WR RU3XB RU3XK RU3XW RU3XY RU3XY/1 RU3YAA RU4A RU4AA RU4AJ RU4CO RU4CT RU4F RU4HU RU4LM RU4PAA RU4PH RU4PN RU4PP RU4PU RU4SM RU4SO RU4SS RU4SU RU4SW RU4W RU5A RU5TT RU6AM RU6AN RU6AR RU6AV RU6B RU6C RU6CH RU6CO RU6CS RU6DX RU6DX/P RU6JL RU6K RU6L RU6LG RU6LV RU6M RU6MO RU6YJ RU6YK RU6YZ RU7A RU7J RU7K RU7KA RU7KD RU7KN RU7M RU80KEDR RU9AC RU9AT RU9AZ RU9BS RU9CC RU9CD RU9CI RU9CK RU9CZ RU9CZD RU9F RU9HM RU9I RU9MN RU9MX RU9SB RU9SL RU9SO RU9UC RU9WY RU9WZ RU9YF RV0AE RV0C RV0CG RV0SK RV1A RV1AE RV1AP RV1AQ RV1CC RV1OO RV1ZT RV22WB RV3A RV3ABR RV3AMV RV3ATS RV3D RV3DB RV3DBK RV3DBX RV3DHC RV3F RV3FT RV3FU RV3ID RV3LO RV3LZ RV3MA RV3MR RV3NX RV3PN RV3QK RV3QO RV3RM RV3TG RV3TN RV3U RV3UP RV3UQ RV3VL RV3VR RV3YD RV3YM RV3YR RV3ZD RV3ZN RV3ZQ RV4AB RV4AS RV4CO RV4HL RV4LC RV5K RV6AA/P RV6AAA RV6ACC RV6ARS RV6ASU RV6BEH RV6CC RV6FT RV6LCI RV6LCT RV6LMG/3 RV6LN RV6LX RV6YB RV7M RV80KEDR RV9CBW RV9CM RV9CP RV9CQ RV9CTD/P RV9CX RV9DC RV9FT RV9MA RV9MN RV9UP RV9V RV9W RV9WA RV9WB RV9WNH RV9XE RV9YK RV9YP RW0A RW0AB RW0AJ RW0AR RW0BG RW0BG/3 RW0BT RW0CF RW0CN RW0CR RW0LBR RW0LCN RW0LD RW0LDF RW0LL RW0LQ RW0MM RW0S RW0SR RW0UM RW0UU RW0W RW1A RW1AI RW1AM RW1C RW1CM RW1CW RW1CX RW1QZ RW22QA RW2B RW2CW RW2D RW3AI RW3AJX RW3AL RW3AO RW3AZ RW3BK RW3CW RW3DA RW3DC RW3DD RW3DIA RW3DKK RW3DSR RW3DU RW3DVW RW3DW RW3DY RW3FB RW3FR RW3FY RW3LB RW3LL RW3LX RW3PF RW3PK RW3PX RW3PZ RW3QJ RW3QM RW3RG RW3RN RW3RN/HI7 RW3RQ RW3SK RW3SY RW3SZ RW3TT RW3VM RW3WA RW3WR RW3WX RW3XB RW3XM RW3XN RW3XW RW3XZ RW3YB RW3YW RW3Z RW3ZA RW3ZC RW4AD RW4C RW4CBU RW4CLF RW4CLF/3 RW4CR RW4CRV RW4F RW4FD RW4HB RW4HD RW4HFH RW4HM RW4HO RW4HS RW4HZ RW4LC RW4LR RW4NH RW4NJ RW4NN RW4NY RW4O RW4PFF RW4PK RW4RW RW4S RW4W RW4WA RW4WN RW4WZ RW4YD RW5C RW5CW RW5CW/3 RW5D RW5F RW6A RW6AF RW6ALB RW6AM RW6AX RW6CR RW6K RW6LO RW6LZ RW6MBC RW6YY RW7F RW7K RW7M RW8T RW8W RW9AS RW9AW RW9C RW9CD RW9DW RW9DX RW9JD RW9JZ RW9MC RW9MZ RW9OW RW9QA RW9RN RW9SQ RW9SW RW9SW/4 RW9TA RW9TP RW9UHG RW9UR RW9USA RW9UX RW9UY RW9WL RW9WT RW9WW RX0AA RX0AE RX0AF RX0AK RX0L RX0SA RX0SC RX1A RX1AD RX1AG RX1CQ RX1CV RX3ABC RX3AEX RX3AFE RX3AGD RX3AGQ RX3AJM RX3AP RX3AU RX3AW RX3DBG RX3DFL RX3DFW RX3DLH RX3DN RX3DPK RX3DTN RX3F RX3FC RX3I RX3MM RX3MX RX3QFY RX3QP/1 RX3RZ RX3VF RX3VN RX3XA RX3XG RX3XQ RX3Z RX3ZW RX4CD RX4HX RX4W RX4W/3 RX4WX RX4YY RX5A RX6ACJ RX6AKA RX6AM RX6AOB RX6BS RX6CB RX6CC RX6DA RX6FJ RX6LDQ RX6LG RX6LN RX6LOL RX7A RX7K RX7M RX7T RX9AF RX9AX RX9CAZ RX9CBS RX9CC RX9CCJ RX9CDQ RX9CM RX9DJ RX9FB RX9FJ RX9JX RX9KT RX9SN RX9SR RX9T RX9UAG RX9UBW RX9UKF RX9WN RX9WN/P RY0A RY1AAA RY22MC RY22RZ RY2S RY3D RY3F RY4A RY4W RY5WH RY6M RY6UY RY6Y RY7A RY7G RY7K RY7Y RY9C RZ0AF RZ0AI RZ0AQ RZ0CWA RZ0LWA RZ0SB RZ0SR RZ0SW RZ1AG RZ1AWT RZ1O RZ1OA RZ1OK RZ1ZR RZ1ZZ RZ22WW RZ2D RZ3AIA RZ3AL RZ3AMW RZ3ARO/6 RZ3ATG RZ3AUL RZ3AV RZ3AWM RZ3BW RZ3DAO RZ3DC RZ3DJ RZ3DOT RZ3DW RZ3DX RZ3DZ RZ3DZA RZ3DZI RZ3EC RZ3EM RZ3EN RZ3F RZ3FQ RZ3FW RZ3LC RZ3MM RZ3OA RZ3OV RZ3PX RZ3Q RZ3QL RZ3QM RZ3QS RZ3QZ RZ3RZ RZ3TZZ RZ3VA RZ3WQ RZ3XA RZ3Z RZ4AG RZ4AZ RZ4F RZ4FO RZ4HC RZ4LA RZ4W RZ4WZ RZ5D RZ5ZZ RZ6AK RZ6BR RZ6BS RZ6DN RZ6DX RZ6FA RZ6LY RZ6MX RZ6YZ RZ8U RZ9AN RZ9CJ RZ9CX RZ9JZ RZ9OF RZ9ON RZ9OP RZ9OQ RZ9U RZ9UC RZ9UGN RZ9UI RZ9UMA RZ9UO RZ9W/3 RZ9WB RZ9WU RZ9WWB RZ9YI RZ9YQ S0S S21ZBB S50A S50B S50BCC S50BCC/P S50BH S50BN S50C S50C/P S50D S50G S50HQ S50J S50K S50L S50O S50P S50R S50W S50X S50XX S51A S51AE S51AF S51AP S51AU S51B S51BW S51CAB S51CK S51CL S51CN S51CQ S51DA S51DD S51DI S51DX S51EC S51EP S51F S51FB S51FO S51HU S51I S51IB S51IV S51J S51JQ S51JS S51K S51KD S51KM S51KV S51M S51MA S51ME S51MF S51NM S51NP S51NZ S51RE S51RJ S51RU S51SK S51SL S51ST S51SX S51TA S51TC S51TN S51TP S51U S51UJ S51V S51VC S51W S51WO S51WX S51YI S51Z S51ZJ S51ZO S52A S52AAM S52AQ S52AU S52AW S52B S52BB S52BO S52BT S52C S52CC S52DD S52DJW S52F S52FT S52GO S52GP S52GS S52ID S52MM S52MZ S52NR S52OP S52OT S52P S52Q S52QM S52R S52RA S52T S52W S52WD S52WW S52X S52Z S52ZW S530AZV S53A S53AK S53APR S53AR S53BB S53BH S53CC S53DOS S53EA S53EO S53EO/P S53F S53FO S53I S53JW S53K S53M S53MJ S53MM S53N S53NW S53O S53OO S53OQ S53Q S53Q/P S53RA S53RI S53RM S53S S53SI S53V S53W S53X S53XX S53Z S53ZO S54A S54E S54G S54K S54KM S54KP S54MI S54MTB S54O S54U S54W S54X S54ZZ S55DK S55DX S55KM S55M S55N S55O S55OO S55RD S55T S55VM S55W S55X S55Y S55Z S5660R S56A S56ACO S56AX S56B S56FFE S56GD S56GTA S56IHX S56IPS S56L S56LCH S56M S56MI S56OA S56P S56PYZ S56RPJ S56SG S56VJM S56WL S56WYB S56X S56Y S56ZZZ S570Z S57A S57AC S57AJ S57AL S57AM S57AW S57AY S57C S57CV S57DV S57DX S57EA S57F S57HPW S57IPA S57K S57KM S57KV S57KW S57L S57LC S57LM S57LR S57M S57MJC S57MM S57NAW S57NCP S57NEA S57NL S57NML S57NTR S57NW S57O S57OWA S57PEA S57PKT S57PM S57Q S57S S57SKY S57SWR S57T S57TW S57TX S57U S57UN S57UX S57V S57VW S57WJ S57WO S57WVM S57X S57XX S57YK S57YU S57YX S57Z S57ZT S58A S58AA S58AF S58AL S58D S58FA S58J S58KA S58M S58MU S58N S58P S58Q S58RU S58T S58WW S58X S58ZOR S590IARU S59A S59AA S59ABC S59ACP S59AN S59AV S59D S59DCD S59DGO S59DKR S59DM S59DXX S59FOP S59GI S59GS S59N S59SV S59T S59V S59X S59YY S59Z S59ZZ S61PW S79K SA0ACM SA0AQT SA0BMV SA0CAN SA0CNH SA1A SA2BMO SA2CEM SA2CIR SA3ANZ SA3CAT SA3V SA4A SA5A SA5ACL SA5ACR SA5ATV SA5BFZ SA5CDO SA5CFD SA5K SA5N SA6AIN SA6BET SA6CBY SA6CME SA6CMO SA6G SA6P SA7AOI SA7ARD SA7AUH SA7AUW SA7CHU SA7J SA8C SB0A SB3W SB6A SB7W SC0N SC2014ECC SC2M SC3A SC3DX SC3N SC6M SC6W SD0T SD2G SD2M SD3A SD5L SD5X SD6M SD6N SD6T SE0L SE0P SE0X SE2I SE2R SE2T SE3E SE3T SE3X SE3Y SE4E SE5E SE5L SE5N SE5P SE5S SE5Z SE6C SE6E SE6N SE6W SE6Y SE7Q SE90IARU SF0D SF2X/P SF3A SF5D SF5FF SF5X SF6DX SF7WT SF90IARU SF9Q SG0M SG0U SG0W SG0X SG4G SG5G SG5W SG5X SG5Z SG6A SG6T SG7T SG8X SH0G SI2014ECC SI2E SI3A SI4A SI5R SI5Y SI6E SI6I SI6T SI6W SI7T SI9AM SJ2W SJ4F SJ6W SJ7J SJ7M SJ7W SJ8HQ SK0CC SK0HS/0 SK0QO SK2T SK3GM SK3PY SK3W SK4EA SK5LW SK5WB SK6AW SK6HD SK6QA SK7DX SK7K SK7OA SK9HQ SL0W SL3ZB SM0A SM0AQW SM0BDS SM0BSO SM0BYD SM0CMH SM0DTK SM0FPR SM0IMJ SM0JHF SM0LGO SM0LIU SM0LPO SM0MPV SM0MPV/0 SM0MXO SM0NCS SM0NEJ SM0NOR SM0Q SM0RCL SM0S SM0SHG SM0T SM0THU SM0W SM0WRA SM0Y SM1WRA SM2A SM2BJS SM2BJT SM2BLY SM2CEW SM2CVH SM2EJE SM2EKA SM2EKM SM2ELN SM2EZT SM2FYZ SM2GCQ SM2HDF SM2LIY SM2LKW SM2MZC SM2ODB SM2OKD SM2OWW SM2S SM2SUM SM2T SM2TKK SM2YIP SM2Z SM3AGO SM3C SM3CCM SM3DFM SM3DTR SM3DXC SM3EAE SM3EVR SM3GBA SM3GSK SM3HBV SM3LBP SM3LDP SM3M SM3MTR SM3N SM3NFB SM3NXS SM3OKC SM3OMO SM3PXO SM3PYB SM3PZG SM3RAB SM3TLG SM3YBP SM4ASX SM4AWF SM4AZQ SM4CAN SM4CTT SM4DHF SM4DQE SM4EMO SM4EPR SM4PEL SM4RGD SM4TU SM4VPZ SM4WAW SM4WKT SM4XIH SM4YPT SM4YWL SM5ACQ SM5ALJ SM5AOE SM5AOG SM5AQD SM5BJT SM5BMB SM5BS SM5C SM5CAK SM5CBM SM5CBN SM5CCE SM5CEU SM5CIL SM5CKV/P SM5CNQ SM5COP SM5CSS SM5CZQ SM5D SM5DFM SM5DGE SM5DJZ SM5DVS SM5DXR SM5DYC SM5EDX SM5ELV SM5ENX SM5EPO SM5F SM5FQQ SM5FUG SM5GLC SM5GMZ SM5HPB SM5ILE SM5IMO SM5INC SM5ISM SM5J SM5KNV SM5KQS SM5L SM5LNE SM5MEK SM5MX SM5OJH SM5OSZ SM5PBT SM5Q SM5QU SM5R SM5S SM5T SM5UIU SM5V SM5X SM5YMT SM5Z SM6/DF4ZL SM6BGA SM6BGG SM6BSK SM6BZV SM6C SM6CCO SM6CKU SM6CMU SM6CNN SM6CPY SM6CTQ SM6CUK SM6CWK SM6DER SM6DHU SM6DLY SM6DOO SM6DPB SM6E SM6EQO SM6EWB SM6FJY SM6FKF SM6FPG SM6GBM SM6GKT SM6IPL SM6IQD SM6JCC SM6JMZ SM6LJU SM6LPF SM6M SM6MCW SM6MIS SM6MSG SM6MVE SM6NET SM6NJK SM6NOC SM6NT SM6PPS SM6Q SM6RXZ SM6TOL SM6UQL SM6USS SM6V SM6VWG SM6VYP SM6W SM6WET SM6WZH SM6XVI SM6Y SM6YNO SM6YRB SM6Z SM7/DL3KUD SM7A SM7ATL SM7BCX SM7BHM SM7BIC SM7C SM7CBS SM7CIL SM7CTJ SM7DAY SM7DBD SM7DBN SM7DLK SM7DQV SM7E SM7EZP SM7GIB SM7GVF SM7JKD SM7LPY SM7MX SM7N SM7PEV SM7PXS SM7RRF SM7RYR SM7RZJ SM7SJR SM7WDL SM7ZDI SN0BEM SN0DKG SN0HQ SN0LOT SN0MMK SN0MR SN0P SN0RN SN0RX SN0WFF SN0ZHG SN100CL SN150SZ SN1A SN1D SN1J SN1K SN1T SN1Y SN1Z SN2B SN2K SN2M SN2U SN30IL SN30R SN3A SN3B SN3R SN3X SN4F SN50MKS SN5B SN5E SN5G SN5I SN5J SN5L SN5N SN5O SN5R SN5T SN5U SN5V SN5X SN6A SN6F SN6F/1 SN6G SN6O SN777BL SN777E SN777HMY SN7D SN7F SN7O SN7O/P SN7Q SN7V SN7X SN85PZK SN8B SN8C SN8K SN8N SN8T SN8W SN90IARU SN9C SN9K SN9M SN9N SN9O SN9P SN9R SN9U SN9Y SN9Z SO1D SO1RON SO1TH SO2O SO2R SO2W SO3AJS SO4M SO4R SO5MAX SO5O SO5S SO6C SO6X SO6ZG SO7B SO7BIT SO7M SO7O SO85PZK SO8L SO8W SO90IARU SO9C SO9Q SO9T SP0RT SP1ADY SP1AEN SP1C SP1DMD SP1DOZ SP1DPA SP1DSZ SP1EG SP1FPG SP1FRC SP1GZF SP1I SP1II SP1JRF SP1KQR SP1L SP1MGM SP1MHZ SP1MVG SP1MVW SP1MWK SP1MWN SP1NQN SP1NY SP1NZ SP1PWP SP1QXK SP1RKH SP1RKR SP1RKT SP2AEK SP2ALT SP2AYC SP2B SP2BLC SP2BUC SP2BZK SP2CA SP2CBS SP2CHY SP2CNW SP2CQF SP2CYK SP2DKI SP2DNI SP2EPV SP2EUI SP2EWQ SP2FAP SP2FAV SP2FGO SP2FOV SP2FUD SP2GCE SP2GCJ SP2GJI SP2GJV SP2GK SP2GKQ SP2GOW SP2GTJ SP2GUC SP2HCK SP2HFH SP2HMN SP2HMY SP2HNL SP2HPM SP2HPM/7 SP2HWW SP2HYO SP2IJ SP2ILQ SP2IU SP2IW SP2JLR SP2JMB SP2JMR SP2JVT SP2KAC SP2KJH SP2KPD SP2LNW SP2MF SP2MHC SP2MHD SP2MKI SP2MKT SP2MKZ SP2MPO SP2OFR SP2PAQ SP2PUT SP2QCW SP2QG SP2QOT SP2RIQ SP2SV SP2SWR/P SP2TQW SP2WGB SP2WKB SP2XX SP2YWL SP2ZIE SP3A SP3AMO SP3ASN SP3AZO SP3BEJ SP3BES SP3BGD SP3BHG SP3BJK SP3BVI SP3CFM SP3CJS SP3CMX SP3CUG SP3CYY SP3DIK SP3DOF SP3DOI SP3DRM SP3DV SP3DVG SP3EA SP3EQE SP3FHV SP3FLQ SP3FPF SP3FTA SP3FXG SP3FYX SP3FZN SP3GAX SP3GEM SP3GTS SP3GXH SP3HLM SP3HRN SP3HZG SP3IC SP3IOE SP3J SP3JHY SP3JIA SP3JUN SP3JZX SP3KEY SP3KRE SP3L SP3LAU SP3LPG SP3LPR SP3LWP SP3MEP SP3NX SP3NYC SP3NYG SP3NYR SP3OL SP3PGR SP3PJY SP3PKC SP3PL SP3PMA SP3POW SP3POZ SP3PWL SP3QDM SP3RBG SP3S SP3SLA SP3SLU SP3SRN SP3TYF SP3UCW SP3UIW SP3UQG SP3UY SP3VSE SP3VT SP3YOR SP4AAZ SP4AVG SP4AWE SP4AXU SP4BEU SP4BPH SP4CGJ SP4CJA SP4CMY SP4CQU SP4CUF SP4D SP4DDS SP4DEU SP4DNX SP4DZT SP4EOO SP4GDC SP4GFG SP4GHL SP4GL SP4ICN SP4INT SP4ISX SP4JCP SP4JCQ SP4JFR SP4JTJ SP4K SP4KA SP4KSY SP4LVK SP4MPA SP4MPH SP4PBI SP4R SP4SHD SP4TKR SP4TXI SP4W SP4YPB SP4YR SP4Z SP50KJU SP55DXC SP5AGU SP5APW SP5ATO SP5AUC SP5AUY SP5BB SP5BMU SP5BNB SP5BUJ SP5C SP5CGN SP5CIB SP5CJQ SP5CJY SP5CNA SP5CQI SP5CWQ SP5DDJ SP5DL SP5DRE SP5DU SP5DXU SP5EAF SP5EAQ SP5ELA SP5ELW SP5ENA SP5ENG SP5ENM SP5EPP SP5ES SP5ETS SP5EWX SP5FHF SP5FKW SP5GDY SP5GH SP5GKN SP5GMM SP5ICQ SP5ICS SP5IOU SP5IVC SP5JSZ SP5KAB SP5KCR SP5KOG SP5KP SP5KW SP5LCS SP5LGN SP5LJP SP5LKJ SP5LS SP5MBI SP5MNT SP5MXZ SP5NHK SP5NON SP5NZA SP5OXJ SP5PDA SP5PMF SP5POT SP5RE SP5SA SP5SR SP5T SP5TAT SP5TAZ SP5TT SP5UAF SP5UD SP5UUD SP5VYI SP5WA SP5X SP5XMI SP5XO SP5XOV SP5XSD SP5XSL SP5XVL SP5XXX SP5YW SP5Z SP5ZRW SP6A SP6AEG SP6AO SP6AXW SP6BAA SP6BEN SP6BXM SP6CC SP6CES SP6CIK SP6CJK SP6CZ SP6DHH SP6DMI SP6DNZ SP6DT SP6DVP SP6EIY SP6EQZ SP6EVZ SP6EWB SP6FJ SP6FRF SP6FXY SP6GCU SP6GJY SP6GNJ SP6GTN SP6HEQ SP6IEQ SP6IHE SP6IWG SP6IXU SP6JIU SP6JOE SP6JQC SP6JZL SP6JZP SP6KCN SP6KEP SP6LMQ SP6LUV SP6LV SP6M SP6MLX SP6MQO SP6NIC SP6NIF SP6NIK SP6NIN SP6NVN SP6NXG SP6OJE SP6OJK SP6OPZ SP6OWY SP6PLH SP6PWT SP6QKP SP6QKS SP6RGB SP6RLK SP6RYD SP6T SP6TRH SP6TRX SP6UM SP6WM SP6YAQ SP6YG SP6ZC SP6ZDA SP6ZT SP70VD SP7AH SP7ATA SP7AWG SP7BCA SP7BYU SP7CCB SP7CHR SP7CVW SP7DBI SP7DCS SP7DSI SP7EWD SP7EWL SP7FAH SP7FBQ SP7FGA SP7GIQ SP7GXK SP7HOV SP7IFM SP7IIT SP7IWA SP7JLH SP7JOA SP7JPN SP7JQQ SP7LIE SP7LSL SP7MC SP7MFU SP7NHS SP7OGP SP7P SP7PCA SP7PCZ SP7PTK SP7PZS SP7QHR SP7QO SP7QPG SP7SEW SP7SMF SP7SQM SP7SZK SP7SZW SP7TF SP7UWL SP7VC SP7VTQ SP7WJ SP7XK SP85PZK SP8AJK SP8ATI SP8BOZ SP8BQL SP8BWE SP8BWR SP8CGU SP8CIV SP8CUR SP8CUW SP8D SP8DIP SP8FB SP8FHM SP8FNA SP8GEY SP8GNF SP8GQU SP8H SP8HKT SP8HPW SP8HWM SP8HXN SP8ICV SP8IMG SP8IQR SP8JMA SP8JPR SP8JUR SP8K SP8LBK SP8LXE SP8MRD SP8MVC SP8NCJ SP8NFZ SP8NR SP8ONB SP8OOB SP8P SP8PRZ SP8QC SP8QEJ SP8R SP8RX SP8SN SP8SW SP8UFB SP8VJV SP8W SP90IARU SP9A SP9AK SP9AMN SP9AQF SP9ATE SP9BCH SP9BGL SP9BGS SP9BMH SP9BNM SP9BWA SP9CCA SP9CLO SP9CLU SP9CQ SP9CQD SP9CTS SP9CTW SP9CUX SP9CV SP9CVY SP9CXN SP9DEM SP9DFH SP9DLY SP9DNO SP9DTE SP9DTH SP9DUX SP9EMI SP9EML SP9ERY SP9EWM SP9EZE SP9EZM SP9FKQ SP9FOW SP9FQI SP9FRZ SP9GFI SP9GKJ SP9GKM SP9GLJ SP9GMI SP9GNM SP9GPW SP9GR SP9H SP9HQJ SP9HVV SP9HZF SP9HZW SP9IBJ SP9IEK SP9IGY SP9IHP SP9IKN SP9IVD SP9JZT SP9JZU SP9KAO SP9KAT SP9KDA SP9KDU SP9KJU SP9KOL SP9KR SP9LAS SP9LJD SP9LWH SP9M SP9MA SP9MDY SP9MRN SP9MRO SP9MRP SP9MZH SP9NLI SP9NLX SP9NSJ SP9NSJ/9 SP9NSV SP9NSY SP9NWN SP9ODY SP9OHL SP9OHP SP9OHY SP9OYB SP9PRR SP9QMP SP9R SP9RCL SP9RI SP9RM SP9RPW SP9RQH SP9RTL SP9S SP9SDR SP9TPV SP9TPZ SP9TTT SP9UNX SP9UOP SP9UPH SP9UX SP9VEG SP9VFR SP9VJ SP9W SP9WAV SP9WZA SP9WZJ SP9WZO SP9WZP SP9WZS SP9XCW SP9XW SP9YFF SP9YFF/3 SP9Z SP9ZKN SP9ZPS SQ1BHH SQ1BVG/2 SQ1EIC SQ1EIX SQ1EUG SQ1FTC SQ1GQT SQ1K SQ1KW SQ1OD SQ1PTO SQ1RMM SQ2A SQ2BNM SQ2DMX SQ2EAN SQ2EEQ SQ2EJP SQ2HCK SQ2HL SQ2HNA SQ2KLU SQ2KLZ SQ2KUM SQ2LKM SQ2LKT SQ2MMS SQ2MTK SQ2NNN SQ2PHG SQ2RCM SQ2RGB SQ2RH SQ2TOM SQ2WHH SQ3A SQ3BDQ SQ3F SQ3HMM SQ3JPV SQ3KKR SQ3MVC SQ3MZM SQ3OGP SQ3PMM SQ3PMX SQ3POS SQ3POX SQ3R SQ3REB SQ3RLC SQ3RX SQ3SD SQ3SIB SQ3SWD SQ3TCM SQ3WW SQ3XBC SQ4AVD SQ4CTS SQ4G SQ4JEN SQ4LP SQ4NR SQ4O SQ5AAG SQ5ARG SQ5ASR SQ5BUO SQ5CQ SQ5CSW SQ5CZP SQ5EF SQ5FGB SQ5FGB/5 SQ5FLP SQ5GLB SQ5GVY SQ5IRO SQ5JUP SQ5JUP/5 SQ5KWJ SQ5LNU SQ5LTL SQ5LTT SQ5M SQ5MJB SQ5MRI SQ5NBE SQ5NRY SQ5NWD SQ5OVL SQ5PGK SQ5PMB SQ5Q SQ5RDX SQ5RIX SQ5RWP SQ5SAA SQ5STN SQ5SUL SQ6DGO SQ6H SQ6ILZ SQ6IYV SQ6KQJ SQ6KV SQ6LJV SQ6MS SQ6NDJ SQ6NEF SQ6NTM SQ6ODD SQ6OU SQ6OXC SQ6PHP SQ6PLH SQ6PLM SQ6PNP SQ6POM SQ6PPI SQ6PWJ SQ6R SQ6RGG SQ6RKY SQ6SGV SQ6STI SQ6VIA SQ6WWW SQ6WZ SQ6ZZZ SQ7ACP SQ7B SQ7BFS SQ7BQC SQ7BRQ SQ7BTY SQ7FPD SQ7FPQ SQ7HJZ SQ7IQI SQ7IQM SQ7LQJ SQ7LRT SQ7MHN SQ7NSN SQ7OFB SQ7OVZ SQ7OXU SQ7PGO SQ7PSP SQ7RL SQ85PZK SQ8BGR SQ8CMF SQ8GBG SQ8GUM SQ8J SQ8JLF SQ8JLU SQ8JMC SQ8JMZ SQ8KEZ SQ8KFM SQ8KJF SQ8LEC SQ8LSB SQ8LSC SQ8MFB SQ8MFE SQ8MFM SQ8MHI SQ8MXK SQ8MXS SQ8MZW SQ8NGP SQ8NGV SQ8NZB SQ8OAU SQ8OQE SQ8RAL SQ8RK SQ8SET SQ8Z SQ90IARU SQ9AC SQ9ANS SQ9BDB SQ9C SQ9CAQ SQ9CXC SQ9DXN SQ9DXT SQ9E SQ9EI SQ9FCF SQ9FMU SQ9FQY SQ9HHG SQ9HQ SQ9HZM SQ9I SQ9IAU SQ9IDE SQ9IDG SQ9JKG SQ9JTI SQ9JYK SQ9KCT SQ9KDO SQ9KEJ SQ9LOM SQ9MEE SQ9MSI SQ9MUO SQ9MZ SQ9NFC SQ9NFQ SQ9NIS SQ9NIU SQ9NJ SQ9NOS SQ9OH SQ9OKV SQ9ORQ SQ9OUD SQ9OUM SQ9PPW SQ9QH SQ9S SQ9SHR SQ9UM SQ9V SQ9ZAT SQ9ZBC ST2M SU0ERA SU1HZ SU9AF SU9IG SV/OE5JKL SV0JQ SV0JZ SV0XCC/9 SV1/SV9TJ SV1AAK SV1ABB SV1ACL SV1ACT SV1AER SV1AGJ SV1AIN SV1AJO SV1AOW SV1AVD SV1BAC SV1BFW SV1BJW SV1BTK SV1CAL SV1CAZ SV1CDN SV1CEI SV1CIB SV1CJF SV1CNS SV1CQN SV1DOJ SV1DOO SV1DPI SV1DPJ SV1DPP SV1EBV SV1EET SV1EIG SV1EJU SV1ELF SV1ELI SV1EML SV1EMY SV1ENG SV1EV SV1GRB SV1GRD SV1GRN SV1GSV SV1GSW SV1GSX SV1GYG SV1HEM SV1HEM/3 SV1HFY SV1HKD SV1HKH SV1IXK SV1JFT SV1JG SV1JGN SV1JGX SV1JMF SV1JSN SV1JSO SV1KU SV1KWA SV1KWD SV1KYC SV1LK SV1LV SV1ME SV1MF SV1MNF SV1MO SV1NJA SV1NJW SV1NK SV1NN SV1NZR SV1NZX SV1OBN SV1OCA SV1OCN SV1OCQ SV1OCR SV1OH SV1ONV SV1PAJ SV1PIZ SV1PL SV1PMH SV1PMQ SV1PMR SV1QN SV1QT SV1QXU SV1RB SV1RHL SV1RK SV1RMB SV1TN SV1UL SV1VN SV1XV SV2/LZ1ZJ SV2/RW3AL SV2AMD SV2AOK SV2AVP SV2BFN SV2BXA SV2CLJ SV2CUI SV2CXI SV2DCD SV2DFK SV2DSB SV2DSJ SV2FLM SV2FLQ SV2FNN SV2FWV SV2GJV SV2HJQ SV2HNE SV2HOB SV2HTI SV2HTX SV2HWR SV2HXV SV2HYB SV2JAO SV2KBB SV2KF SV2LLM SV2MJY SV2OJJ SV2QQR SV2RJV SV2YC SV3/SV1NN SV3/SV9FBP SV3ALB SV3ALC SV3AQR SV3AUW SV3BSF SV3DCX SV3EXU SV3FUB SV3FUO SV3FUP SV3GKU SV3HHH SV3IBP SV3ICL SV3KH SV3OQJ SV3QUP SV3QUQ SV3RF SV4AAQ SV4ALI SV4FFL SV4LQW SV5/DL2JRM SV5/DL3DRN SV5/G2JL SV5/MW0JZE SV5/OK6Y SV5/SM8C SV5AZP SV5BYP SV5BYR SV5BYR/5 SV5DKL SV6DBL SV6JHA SV6NNR SV7BOT SV7BVM SV7CUD SV7CUD/2 SV7JJZ SV7LNX SV7LWI SV8BHN SV8CRI SV8CS SV8CYR SV8DOU SV8DTD SV8GFW SV8GKE SV8LMQ SV8OVP SV8PMM SV8QDJ SV8RHR SV9BMG SV9CJO SV9COL SV9CVY SV9DJO SV9FBG SV9FBK SV9FBM SV9FBP SV9GPV SV9OFS SV9RNG SV9RPE SW3JH SW44M SW5CC SW8WW SW8YY SW9AA SW9FF SW9XB SX0HQ SX150ITU SX2AG SX2I SX2V SX3B SX5P SX8M SX8SA SX8V SX9C SY1AEA SY1BCL SY2AMH SZ1A SZ2TSL SZ3P SZ6P SZ7SER SZ8L/P SZ8LSV T32AZ T32RC T32TM T40HE T40HQ T42R T43GDXC T43T T44R T46A T46X T48G T48K T48LT T49A T49C T6MC T6RH T6TM T71DX T77BL T77C T77LA T88AZ T88HZ T88ON T88WJ T8TT TA/UR8UA TA0/LZ3FN TA0ATA TA1AGA TA1AJJ TA1AL TA1AMO TA1API TA1BJ TA1BM TA1BX TA1CM TA1CQ TA1CR TA1DX TA1ED TA1FA/2 TA1HZ/2 TA1L TA1MRT TA2AD TA2AGO TA2AKG TA2AKX TA2ANB TA2ANL TA2AO/4 TA2B TA2EJ TA2IB TA2IRB TA2K TA2LP TA2MES TA2OQ TA2OTT TA2RC TA2ST TA2TR TA3AER TA3AMH TA3AMT TA3D TA3EL TA3EP TA3GO TA3IUY TA3IW TA3PZ TA3SA TA3TTT TA3X TA4A TA4ACV TA4AKS TA4CS TA4ED TA4IM TA4OSK TA4PR TA5BS TA5CV TA5FA TA5IW TA6MD TA7AO TA7AOF TA7ASN TA7AZC TA7EB TA7EM TA7I TA7JE TA7OM TA8A TA8AT TB2DRB TC0A TC0BOZ TC0F TC100KT TC1DX TC1HQ TC2BC TC2C TC2MK TC3D TC3HQ TC3O TC3P TC3T TC3TC TC3W TC7S TC7T TC7V TC90A TE2M TF1AM TF2CT TF2LL TF2MSN TF2R TF3AM TF3AO TF3CW TF3CY TF3DC TF3DX TF3EO TF3GB TF3IG TF3IRA TF3JB TF3MHN TF3PKN TF3PPN TF3SG TF3VS TF3VS/P TF3W TF3Y TF4M TF4X TF8CY TF8GX TF8HP TG0AA TG9ADQ TG9AEB TG9AJR TG9AMD TG9ANF TG9ANF/7 TG9AWS TG9AXF TG9IIN TG9NX TI/HB9FIH TI2CLX TI2KAC TI2KWN TI2OY TI2SD TI5/HB9FIH TI5M TI5W TI8/AA8HH TI8/W1USN TI8II TI8M TI9/3Z9DX TJ3AY TJ3TS TK1NB TK4LS TK5AE TK5EP TK5MH TK5NJ TK5XN TK6K TK9R TK9T TM0GA TM0HQ TM0R TM0T TM0X TM16C TM1A TM1GM TM1K TM1O TM1T TM1X TM22TSF TM2B TM2F TM2G TM2T TM2Y TM33A TM35O TM3M TM3T TM40RADS TM4L TM4P TM4Q TM55BM TM57M TM5A TM5CD TM5CR TM5G TM5GBW TM5J TM5KD TM5L TM5M TM5OTT TM5T TM5Y TM6C TM6D TM6M TM6T TM6V TM6X TM72C TM77M TM7A TM7D TM7F TM7G TM7GY TM7M TM7X TM7XX TM8A TM9K TM9R TO0X TO1A TO1E TO22C TO2A TO4C TO4K TO5A TO5Y TO66R TO6D TO7A TO7BC TR8CA TU2CI TU5XV TX7G TX8B TX8C TY2AB TZ6BB U1BA U1BD U3DI U5EX UA0A UA0AAS UA0ABB UA0ABK UA0ACG UA0ADX UA0AKY UA0ALQ UA0APV UA0ASS UA0AV UA0AXX UA0AYA UA0BA UA0C UA0CA UA0CB UA0CID UA0CKW UA0CMG UA0CNX UA0CW UA0DBX UA0DM UA0DX UA0FAM UA0FGN UA0FX UA0IDZ UA0JF UA0JFG UA0KBG UA0LBF UA0LCZ UA0LD UA0LDW UA0LDY UA0LGY UA0LNA UA0LNL UA0LS UA0NL UA0OD UA0OK UA0QNV UA0S UA0SBQ UA0SBQ/P UA0SC UA0SDX UA0SE UA0SF UA0SOX UA0SR UA0SW UA0UK UA0UV UA0UY UA0W UA0WF UA0WG UA0WW UA0WY UA0XAK UA0ZAM UA0ZC UA0ZED UA0ZEO UA0ZS UA1A UA1AAQ UA1AAR UA1ABO UA1AFT UA1AFZ UA1AIR UA1AJ UA1AJW UA1ANA UA1APX UA1AQA UA1ATD UA1ATD/P UA1AUW UA1CAK UA1CBM UA1CE UA1CEC UA1CEI UA1CGS UA1CIO UA1CKC UA1CUR UA1F UA1F/P UA1NFA UA1NFA/P UA1ODM UA1OIZ UA1OJL UA1OMB UA1OMS UA1OOX UA1ORK UA1QW UA1RG UA1T UA1TAN UA1TGQ UA1WA UA1WBV UA1WCF UA1WDG UA1ZCT UA1ZCX/3 UA1ZFK UA1ZFL UA1ZGK UA1ZIK UA1ZJV UA1ZLN UA1ZZ UA1ZZ/P UA2AB UA2CZ UA2F UA2FAK UA2FBQ UA2FF UA2FL UA2FP UA2FT UA2FX UA2FZ UA2K UA3AAJ UA3AB UA3ABF UA3ABJ UA3AC UA3AFJ UA3AGU UA3AGW UA3AHA UA3AKI UA3AKO UA3AMZ UA3AO UA3AP UA3AUP UA3BL UA3BV UA3BX UA3BZ UA3D UA3DA UA3DCE UA3DCM UA3DDA UA3DER UA3DJC UA3DJY UA3DKT UA3DLD UA3DOM UA3DPM UA3DSN UA3DSS UA3DTT UA3DUJ UA3DVB UA3ECJ UA3EDQ UA3EKG UA3EKK UA3EUW UA3FO UA3FQ UA3FX UA3GAF UA3GBV UA3GR UA3GVT UA3IAH UA3IBD UA3ICF UA3IHJ UA3IVF UA3K UA3KW UA3L UA3LAR UA3LDU/3 UA3LDZ UA3LG UA3LID UA3LIU UA3LIZ UA3LLR UA3LMR UA3MIF UA3MOM UA3NFI UA3O UA3OQ UA3P UA3PC UA3PI UA3PP UA3QAM UA3QGT UA3QJJ UA3QNS UA3QPA UA3QR UA3QTD UA3QUO UA3R UA3RA UA3RAB UA3RAW UA3RAX UA3RBP UA3RC UA3RE UA3RF UA3RJ UA3RKK UA3RN UA3RO UA3RRT UA3RU UA3RW UA3S UA3SAK UA3SAO UA3SAQ UA3SCW UA3SKV UA3T UA3TCJ UA3TJF UA3TN UA3TW UA3UAD UA3UAT UA3UBT UA3UCD UA3UJP UA3UNP UA3UX UA3VFS UA3VLO UA3VRV UA3VVB UA3WW UA3X UA3XAC UA3XAG UA3XAO UA3XO UA3YAA UA3YCX UA3YCZ UA3YDH UA3YDI UA3YET UA3YFL UA3YLP UA3YNI UA3YY UA3Z UA3ZAY UA4AAC UA4ACP UA4AGO UA4ANZ UA4AQL UA4ARF UA4ASE/6 UA4ATB UA4ATR UA4AVN UA4C UA4CBJ UA4CC UA4CCG UA4CDL UA4CDO UA4CIF UA4CNJ UA4CNZ UA4CQN UA4CR UA4FBG UA4FCO UA4FDL UA4FEN UA4FER UA4FRJ UA4FTA UA4FX UA4HAM UA4HBM UA4HBW UA4HDB UA4HEZ UA4HGL UA4HIP UA4HJ UA4HLX UA4HOX UA4HQA UA4HRZ UA4HTT UA4HTT/P UA4L UA4LCH UA4LS UA4LX UA4M UA4NAL UA4NBA UA4NC UA4NCE UA4NCI UA4NDX UA4NE UA4NE/P UA4NF UA4NU UA4PAN UA4PAQ UA4PAY UA4PCF UA4PCM UA4PDO UA4PF UA4PI UA4PKN UA4PL UA4PN UA4PNT UA4PRU UA4PT UA4QK UA4RF UA4RW UA4S UA4SBZ UA4SJO UA4SJS UA4SN UA4UBW UA4UT UA4W UA4WAU UA4WEF UA4WFN UA4WGM UA4WI UA4WJ UA4WW UA4YA UA4YE UA4Z UA5A UA5B UA5C UA5D UA5F UA6AA UA6ABE UA6ACA UA6ACZ UA6AH UA6AIR UA6AK UA6AKD UA6ANB UA6ARR UA6ART UA6ATG UA6AUA UA6AVA UA6BFE UA6BGM UA6BJY UA6BRD UA6CC UA6CE UA6CEH UA6CGH UA6EC UA6EE UA6EED UA6EU UA6FF UA6FP UA6FZ UA6G UA6GE UA6GF UA6GG UA6GK UA6GO UA6HFI UA6HI UA6HLN UA6HLP UA6HRX UA6HZ UA6JBQ UA6JFG UA6JQ UA6K UA6LCG UA6LCJ UA6LCN UA6LFQ UA6LGO UA6LJB UA6LN UA6LQ UA6LUQ UA6MA UA6MM UA6UEK UA6XDX UA6XES UA6XT UA6YGN UA6YH UA6YI UA6YN UA6YW UA7A UA7F UA7G UA7GU UA7K UA7N UA7Q UA7T UA8A UA8AA UA8U UA8WAA UA8WAA/5 UA9AB UA9AC UA9ADG UA9AEU UA9AFS UA9AGX UA9ALE UA9AU UA9AX UA9AZ UA9BA UA9CBO UA9CBQ UA9CBR UA9CC UA9CCL UA9CDC UA9CDV UA9CEP UA9CES UA9CGL UA9CHL UA9CHL/P UA9CKP UA9CNV UA9CNX UA9CR UA9CSR UA9CTT UA9CU UA9CUA UA9CVQ UA9DR UA9FAR UA9FFV UA9FGJ UA9FGR UA9FKH UA9FLK UA9FM UA9HN UA9JDP UA9JEC UA9JFA UA9JFH UA9JFR UA9JLL UA9JNT UA9KAA UA9KB UA9KFX UA9LAO UA9LBQ UA9LDD UA9LEW UA9LIF UA9LL UA9LR UA9MA UA9MHN UA9MJW UA9MRX/3 UA9MUY UA9MW UA9NN UA9NP UA9OA UA9OBW UA9OC UA9ODU UA9OGF UA9OME UA9OMT UA9OOQ UA9OPU UA9OQM UA9OR UA9OV UA9QFF UA9QM UA9R UA9SAW UA9SCX UA9SMU UA9SUV UA9TF UA9UDR UA9UDX UA9UHN UA9UKL UA9UOI UA9UPG UA9UR UA9URF UA9URI UA9UUD UA9UX UA9W UA9WOB UA9WTF UA9XBJ UA9XF UA9XL UA9XMC UA9XO UA9YE UA9YK UA9YMT UA9YTN UB0A UB0ADE UB1ADP UB1AGD UB1CAK UB3A UB3AFJ UB3DAO UB3PBB UB4ABP UB6AII UB6LEX UB6LLF UB7K UB8AAT UB8CAA UB8QAA UB9JBF UB9SBH UB9UAT UC0A UC0L UC2K UC4A UC4C UC4I UC5D UC5G UC6A UC7A UC7K UC8I UC8U UC9A UD1A UD3D UD3T UD4F UD4FD UD6A UD8A UD8V UE16ST UE1KR UE22A UE2GC UE70Y UF0A UF0W UF2F UF3D UF4M UF5D UF5F UF6VO UF8T UG3G UG4A UI2K UI3A UI3A/7 UI3D UI4I UI5F UI5R UI6A UI6M UI7F UI7K UI8CM UI8U UI8W UI9I UI9O UK7AL UK7AZ UK8AR UK8ICM UK8OM UK8OWW UK9AA UN0C UN0GL UN0L UN0L/A UN0LE UN0LL UN1F UN1HQ UN1L UN1O UN1Z UN1ZZZ UN2E UN2G UN2L UN3GX UN3M UN3Z UN4PD UN4PG UN5C UN5GAV UN5J UN5P UN6G UN6GDX UN6GK UN6LN UN6P UN6QDD UN6T UN7AB UN7BCF UN7BEW UN7BTC UN7CAD UN7CAW UN7CN UN7CW UN7ECA UN7EG UN7EV UN7FW UN7GBM UN7GDR UN7ID UN7IT UN7JID UN7JX UN7LAN UN7LZ UN7MMM UN7MWU UN7OGA UN7QCC UN7QF UN7RL UN7TDB UN7TO UN7TW UN7TWA UN7TX UN7ZZ UN8CC UN8FM UN8GA UN8LYA UN8P UN8PA UN8PT UN9FWW UN9GD UN9L UN9LAB UN9LES UN9LU UN9LW UN9PQ UP0F UP0KEDR UP0L UP1G UP2F UP2KEDR UP2L UP3KEDR UP4KEDR UP4L UP6KEDR UP6P UP7G UP7P UP80KEDR UP9L UR0CB UR0EE UR0EJ UR0ET UR0EV UR0HQ UR0IQ UR0MM UR0MZ UR1MI UR1MM UR1YAA UR1YDD UR2HA UR2LX UR2MO UR2MR UR2VA UR2Y UR3ABI UR3ABM UR3AC UR3AFS UR3AHF UR3CMA UR3EO UR3GO UR3GU UR3HC UR3LM UR3LPM UR3LPP UR3PGW UR3PGX UR3PHG UR3QM UR3QNV UR3QOD UR3QRW UR3QWA UR3UK UR3UR UR3UT UR4CU UR4CW UR4CYT UR4EI UR4ES UR4EWP UR4EZA UR4GU UR4I UR4IOR UR4IXM UR4IZ UR4L UR4LBL UR4LCB UR4LIN UR4LQ UR4LRG UR4LTX UR4MF UR4MG UR4MGJ UR4MHI UR4MKK UR4MKY UR4MS UR4MTJ UR4PWC UR4QHB UR4QQF UR4QRH UR4RWW UR4RXJ UR4U UR4WXL UR5AKU UR5AMJ UR5ANO UR5AO UR5AS UR5AW UR5BO UR5BV UR5CC UR5CDD UR5CMF UR5CML UR5CN UR5E UR5EAF UR5EDX UR5EFL UR5EIH UR5EIT UR5EKI UR5ELI UR5EPG UR5EPV UR5ER UR5ETN UR5EU UR5FA UR5FBM UR5FCM UR5FEO UR5FHD UR5FS UR5GAW UR5GBB UR5GDX UR5GGL UR5IFB UR5IFM UR5IHD UR5IHQ UR5IKN UR5IPW UR5IRM UR5ITU UR5KED UR5KHZ UR5KJK UR5KO UR5LAK UR5LAM UR5LBM UR5LCV UR5LCZ UR5LF UR5LJD UR5LY UR5MA UR5MAF UR5MBA UR5MBB UR5MD UR5MDY UR5MIJ UR5MM UR5MQS UR5MW UR5NF UR5PG UR5QA UR5QBB UR5QU UR5QUM UR5QW UR5ROY UR5RP UR5SAU UR5TEX UR5TGK UR5TL UR5TLN UR5TW UR5UBR UR5UJ UR5UZ UR5VAA UR5VFS UR5VR UR5WA UR5WCQ UR5WCW UR5WDQ UR5WFP UR5WHQ UR5WIK UR5WMM UR5WX UR5XMM UR5YAF UR5YCS UR5YEI UR5ZDZ UR5ZEK UR5ZEL UR5ZEP UR5ZIW UR5ZQV UR5ZSU UR5ZTH UR6AJ UR6EA UR6EO UR6GWZ UR6ID UR6II UR6IJ UR6IKK UR6IM UR6LAF UR6LEY UR7AA UR7CB UR7CQ UR7CT UR7EC UR7EN UR7EU UR7EW UR7EZ UR7GG UR7GM UR7GO UR7GP UR7HCX UR7HN UR7IKJ UR7LY UR7MA UR7MG UR7MN UR7MZ UR7QC UR7QM UR7R UR7TT UR7UD UR7UM UR7VA UR7ZO UR8EQ UR8GM UR8GX UR8IDX UR8IF UR8IW UR8QR UR8QV UR8RF UR8UZ UR9LD UR9MB UR9QQ US0AK US0FF US0GA US0HB US0HZ US0IJ US0IW US0KF US0KW US0LW US0MF US0MS US0NJ US0QG US0SY US0TA US0UX US0VA US0YA US0YW US0ZK US0ZZ US1GCU US1GFW US1I US1ITU US1IV US1IW US1MM US1PM US1Q US1U US1UU US1UX US1VM US1VS US2E US2IC US2IR US2IZ US2LX US2MT US2VA US2WU US2YW US3D US3ER US3IJV US3IM US3IP US3IRX US3IS US3ITA US3IY US3IZ US3LR US3LX US3QQ US3WO US4AS US4EG US4EM US4EX US4IDY US4IQ US4IQS US4IRT US4MXX US5ABI US5CAO US5CB US5CCO US5CW US5D US5E US5EEK US5EFU US5ELM US5EOI US5ETV US5EY US5FA US5IND US5ISV US5LO US5LPO US5MEU US5MSJ US5QRW US5QUB US5UCC US5UO US5UZ US5VX US5WDJ US5WE US5ZCW US5ZE US6CQ US6EX US6IKF US6IKT US6IQ US7AF US7IA US7IB US7IGN US7IID US7IM US7IS US7ISA US7ISE US7IT US7IVW US7IY US7KC US7LM US7MM US7UU US7VF US7WW US8IAT US8IB US8ICM US8IEU US8IIW US8IM US8IZM US8MS US8QQ US8UA US8UX US9IGA US9PA UT/R2MA UT/R6LC UT0AZA UT0CK UT0EL UT0EO UT0FC UT0L UT0LK UT0MF UT0NB UT0NN UT0NT UT0QA UT0RF UT0RM UT0U UT0UM UT0UY UT0VE UT1AA UT1AN UT1CDX UT1DX UT1EI UT1IA UT1IF UT1IM UT1IR UT1KWA UT1KY UT1PG UT1PO UT1QQ UT1UL UT1US UT1UW UT1V UT1XX UT2AA UT2AB UT2DW UT2EF UT2G UT2G/P UT2GW UT2HC UT2HM UT2II UT2IO UT2IV UT2IW UT2IZ UT2LU UT2LY UT2PX UT2QQ UT2QT UT2RI UT2T UT2UB UT2UN UT2UU UT2VU UT2XX UT3EK UT3EV UT3GB UT3GF UT3I UT3IA UT3IB UT3IJ UT3IT UT3IW UT3IZ UT3L UT3LW UT3MA UT3MS UT3N UT3NF UT3NK UT3Q UT3QD UT3QN UT3QU UT3QZ UT3RN UT3RS UT3SO UT3UA UT3UBR UT3UCP UT3UV UT3UX UT3UY UT3UZ UT3WJ UT3WM UT3WS UT3WW UT3WX UT3XA UT4AA UT4ES UT4EW UT4FJ UT4FJ/P UT4HZ UT4LW UT4MF UT4MM UT4MW UT4MWA UT4NW UT4NY UT4NZ UT4PR UT4PZ UT4QV UT4TA UT4UB UT4UEG UT4UFU UT4UFZ UT4UH UT4UI UT4UMZ UT4UO UT4UP UT4UQ UT4UWE UT4VW UT4WA UT4WT UT4XU UT4ZG UT4ZX UT5A UT5C UT5CB UT5CL UT5CY UT5DD UT5DJ UT5EA UT5ECZ UT5EDU UT5EL UT5EO UT5EOX UT5EPP UT5ERP UT5ERV UT5EUQ UT5HX UT5IA UT5ID UT5IM UT5IZ UT5IZO UT5JAJ UT5JCE UT5KO UT5KQ UT5LO UT5M UT5MB UT5NA UT5PI UT5PQ UT5PY UT5R UT5RB UT5SI UT5T UT5UDX UT5UGR UT5UHX UT5UIA UT5UJO UT5ULB UT5ULQ UT5ULX UT5UML UT5UN UT5UQN UT5UQV UT5URW UT5UT UT5UUV UT5UX UT5UY UT5VX UT5W UT5XS UT5YY UT5ZA UT5ZB UT5ZC UT5ZY UT6CW UT6EE UT6ER UT6HX UT6IE UT6IS UT6UA UT6UD UT7AW UT7AXA UT7CA UT7CR UT7DK UT7DU UT7E UT7EI UT7EJ UT7EL UT7EM UT7EZ UT7EZZ UT7FO UT7HA UT7HM UT7I UT7IA UT7IF UT7IG UT7IL UT7IS UT7LA UT7LM UT7LW UT7MD UT7MR UT7MT UT7NI UT7NW UT7NY UT7Q UT7QB UT7QF UT7QL UT7TA UT7U UT7UD UT7UJ UT7UU UT7UX UT7UZ UT7VR UT7WR UT7WZA UT7XT UT7Y UT7ZZ UT8AL UT8AS UT8EL UT8ER UT8EU UT8IA UT8IK UT8IM UT8IO UT8IT UT8L UT8LN UT8LO UT8LU UT8MM UT8NT UT8UD UT8UF UT8UL UT8UU UT9FJ UT9IO UT9LC UT9NA UT9UZ UU0A UU0JM UU1CW UU1JE UU1JN UU1JO UU1JUR UU1K UU2CW UU2J UU2JA UU2JG UU2JQ UU2JW UU4JC UU4JCR UU4JDD UU4JIM UU4JMG UU4JO UU4JQE UU4JQR UU5AF UU5J UU5JHQ UU5JIB UU5JMV UU5TN UU5WW UU6J UU6JJ UU7J UU7JD UU7JF UU7JJ UU7JM UU7JX UU8JM UU8JW UU8JY UU9CI UU9JC UU9JK UU9JQ UU9JR UU9JWA/P UV1GW UV1IW UV3QF UV3RT UV5EEO UV5ERY UV5EUK UV5EVW UV5EVZ UV5QR UV5U UV7E UV7QA UV7V UW0K UW0L UW1G UW1GX/A UW1GZ UW1M UW1U UW1WU UW2L UW2M UW2Q UW2ZL UW2ZM UW3E UW3HM UW3L UW3M UW3M/P UW3U UW3WU UW4E UW4I UW4SU UW5M UW5Q UW5RG UW5U UW5W UW5Y UW5ZM UW5ZO UW6M UW7CF UW7CN UW7D UW7E UW7F UW7LL UW7M UW7RV UW7W UW8SM UX0DL UX0FF UX0HO UX0KN UX0KR UX0LL UX0RR UX0SX UX0UW UX0ZAB UX0ZZ UX1AA UX1BZ UX1CL UX1CW UX1HW UX1IB UX1IL UX1IM UX1LW UX1MH UX1QQ UX1UA UX1UF UX1UX UX1VT UX1VX UX2HB UX2HH UX2HO UX2HX UX2IB UX2IJ UX2IO UX2KA UX2LM UX2MF UX2MK UX2QA UX2SB UX2VA UX2X UX3HA UX3HX UX3IA UX3IO UX3IT UX3IW UX3MF UX3UN UX3UW UX3ZW UX4CR UX4E UX4FC UX4IJ UX4MX UX4U UX4UA UX4UL UX5D UX5IO UX5L UX5MZ UX5NQ UX5Q UX5TQ UX5UN UX5UO UX5UU UX5UW UX5VK UX6IB UX6IR UX6VA UX7BV UX7FC UX7FD UX7IA UX7IW UX7LL UX7LT UX7MA UX7MB UX7MR UX7QD UX7QG UX7QV UX7U UX7UU UX7UW UX7VA UX8IW UX8IX UX8ML UX8ZA UX9IX UX9Q UY0CA UY0IW UY0IX UY0ZG UY1HY UY1IP UY1LA UY2IF UY2IG UY2IZ UY2LU UY2MQ UY2RA UY2UA UY2UQ UY2UR UY2VC UY2ZA UY2ZZ UY3AW UY3CC UY3IC UY3IF UY3IQ UY3MW UY3QT UY3QW UY3WX UY4W UY5AA UY5AR UY5AX UY5BA UY5BO UY5LQ UY5MB UY5MR UY5OO UY5QJ UY5QQ UY5QZ UY5TE UY5TG UY5VA UY5YA UY5YB UY5ZI UY5ZZ UY6IM UY6U UY7CA UY7IQ UY7IS UY7LM UY7LU UY7MM UY7MZ UY7QN UY8IF UY8IO UY8IX UY9IL UZ0U UZ1RM UZ2FWB UZ2HZ UZ2I UZ2I/A UZ2I/P UZ2L UZ2M UZ2Q UZ3I UZ3U UZ4E UZ4I UZ5DX UZ5DZ UZ5Q UZ5U UZ5UA UZ5ZV UZ7HO UZ7I UZ7M UZ8I V21ZG V25A V26B V26K V26M V2BM V31AJ V31AT V31JP V31MA V31NN V31RL V31RU V31SO V31TF V31TP V31YB V31YN V31ZM V3A V4/KK4PHP V4/W6HGF V4/WJ2O V43L V44KAI V44KBP V47JA V47T V49J V51B V51W V51WW V51YJ V55HQ V55V V6A V73AX V73AY V73NS V73XP V84O V85AVE V85SS V85TL V85ZX VA1BOB VA1CC VA1CHP VA1MM VA1OTA VA1SEA VA2AAB VA2AFH VA2AGW VA2AM VA2AN VA2ASS VA2BBW VA2CO VA2CT VA2CZ VA2DF VA2EI VA2EK VA2EN VA2ES VA2EU VA2EW VA2FSQ VA2GU VA2IC VA2III VA2KF VA2LGQ VA2LM VA2MM VA2MO VA2MP VA2NB VA2OBW VA2OKG VA2PC VA2PGB VA2PL VA2PR VA2QR VA2RAC VA2RC VA2RIO VA2RO/W4 VA2RWN VA2SCH VA2SCJ VA2SG VA2SNL VA2SPO VA2SS VA2TG VA2TTA VA2TY VA2UP VA2VJ VA2WA VA2WT VA2WV VA2ZO VA2ZZ VA3AAA VA3AB VA3AG VA3AH VA3AR VA3ARG VA3ARI VA3ATB VA3ATT VA3ATW VA3BD VA3BGO VA3BP VA3CCO VA3CD VA3CME VA3CWT VA3DBT VA3DDX VA3DF VA3DJL/W8 VA3DN VA3DNB VA3DP VA3DVE VA3DX VA3DXA VA3DZ VA3EC VA3ECO VA3EEB VA3EJN VA3EOJ VA3EON VA3FLN VA3FN VA3FP VA3FS VA3GD VA3GKO VA3GUY VA3IK VA3IPG VA3IR VA3ITA VA3JLF VA3KA VA3KAI VA3KGS VA3KHH VA3KS VA3KSF VA3KSS VA3KVI VA3LX VA3MET VA3MJ VA3MJR VA3MN VA3MO VA3MPF VA3MQS VA3MTT VA3MW VA3NGE VA3NQ VA3NW VA3NXM VA3OB VA3OL VA3ONO VA3OPP VA3OT VA3PAW VA3PC VA3PCJ VA3PDG VA3PM VA3PMM VA3PUX VA3QN VA3QV VA3RAC VA3RKM VA3RKO VA3RMW VA3RNJ VA3ROC VA3SB VA3SF VA3SK VA3SRV VA3SWG VA3SZ VA3TAL VA3TBS VA3TIC VA3TPS VA3TPV VA3TUR VA3UG VA3UU VA3UW VA3VF VA3VU VA3VVV VA3VW VA3WLD VA3WR VA3WU VA3WWX VA3XH VA3XOV VA3YG VA3YOJ VA3YP VA3YT VA3YV VA3ZC VA3ZDX VA3ZLT VA3ZNQ VA3ZTZ VA3ZV VA4CAM VA4CQD VA4HZ VA5AA VA5DX VA5LF VA5RI VA6AK VA6AM VA6AW VA6BKX VA6CV VA6DB VA6EFR VA6FOX VA6FZ VA6KOL VA6LM VA6MA VA6NJK VA6RP VA6RP/W7 VA6SP VA6TT VA6UK VA6UX VA6WV VA6XDX VA6ZZZ VA7AAA VA7ACQ VA7AD VA7AM VA7AQ VA7AQD VA7BEC VA7BS VA7BWG VA7CAB VA7CRO VA7CRZ VA7CW VA7DP VA7DX VA7DXC VA7DZ VA7EU VA7FC VA7GAP VA7GEM VA7GL VA7GRR VA7HU VA7HZ VA7IR VA7JC VA7JW VA7KH VA7KO VA7MG VA7MM VA7MP VA7MPG VA7MPG/W4 VA7ND VA7ODX VA7OM VA7OO VA7QB VA7QIH VA7QLT VA7RME VA7RMM VA7RP VA7RR VA7RY VA7ST VA7SZ VA7TF VA7TT VA7VJ VA7VX VA7WWV VA7XB VA7XJ VA7XNL VA7XX VA7ZM VA7ZOO VA7ZR VA7ZT VB7A VB7C VB7R VB7X VC1S VC2M VC2P VC2R VC2T VC2W VC3M VC3R VC3V VC6IARU VC6K VC6R VC6X VC6Z VC7G VC7GL VC7J VC7M VC7O VC7X VD1M VE1ANU VE1AYY VE1BAB VE1BB VE1BLX VE1BMW VE1BVD VE1BZI VE1CEL VE1CHL VE1CHW VE1CZ VE1DI VE1DO VE1DT VE1DX VE1DXA VE1EJ VE1FOX VE1FZ VE1HS VE1JBC VE1JIM VE1JS VE1KY VE1LD VE1LV VE1MDO VE1MW VE1NB VE1OMI VE1OP VE1OU VE1PEW VE1PZ VE1RAR VE1RGB VE1RM/3 VE1RSM VE1SD VE1SQ VE1TK VE1TTT VE1TWM VE1UT VE1UY VE1WOW VE1WT VE1YX VE1ZA VE1ZAC VE1ZD VE1ZJ VE1ZZ VE2ACP VE2AEJ VE2AWR VE2AWW VE2AXO VE2BCH VE2BR VE2BU VE2BVV VE2BWL VE2BZO VE2CAQ VE2CCF VE2CJR VE2COK VE2CQF VE2CSI VE2CWQ VE2CWT VE2DC VE2DJC VE2DQO VE2DXY VE2EBK VE2EBL VE2ER VE2ESU VE2EVN VE2EW VE2EZD VE2FFE VE2FK VE2FKZ VE2FSU VE2FU VE2FWW VE2FXL VE2GDZ VE2GHI VE2GK VE2GSO VE2GT VE2GTZ VE2HAY VE2HB VE2HIT VE2HLS VE2IM VE2IR VE2JCW VE2JD VE2JM VE2JR VE2KH VE2KOT VE2LG VE2LH VE2LX VE2MAM VE2NMB VE2NYP VE2OBE VE2OCH VE2OJ VE2OPB VE2OPL VE2PDT VE2PIB VE2PIJ VE2PLX VE2PZ VE2QR VE2QV VE2QY VE2RFI VE2RO VE2RYY VE2SCA VE2SDM VE2SG VE2SJR VE2SRP VE2STC VE2SVF VE2SYQ VE2TFL VE2TH VE2TI VE2TJL VE2TSM VE2TZT VE2UMS VE2WU VE2XX VE2YA VE2YTQ VE2ZA VE2ZC VE2ZT VE2ZV VE3AAA VE3AAQ VE3AD VE3ADQ VE3AJ VE3ARF VE3AT VE3AUO VE3AXC VE3AXW VE3AYR VE3BBM VE3BDN VE3BFU VE3BI VE3BIK VE3BK VE3BKM VE3BLR VE3BR VE3BSJ VE3BVA VE3BW VE3BWA VE3BXI VE3BZ VE3CA VE3CBK VE3CES VE3CFF VE3CFK VE3CGR VE3CH VE3CIQ VE3CKG VE3CKO VE3CMM VE3CPI VE3CR VE3CRG VE3CSJ VE3CSK VE3CUI VE3CV VE3CWM VE3CWN VE3CWN/W4 VE3CWU VE3CX VE3CXD VE3DBP VE3DC VE3DDG VE3DFA VE3DO VE3DOU VE3DQN VE3DSE VE3DTI VE3DV VE3DVV VE3DVY VE3DXK VE3DZ VE3EBM VE3EDX VE3EDY VE3EEI VE3EEJ VE3EEU VE3EH VE3EIB VE3EJ VE3EK VE3ELM VE3EN VE3EP VE3EUS VE3EUZ VE3EVN VE3EWW VE3EXY VE3EY VE3EZ VE3FAL VE3FAS VE3FC VE3FCT VE3FDP VE3FEE VE3FEX VE3FGU VE3FH VE3FJ VE3FJB VE3FK VE3FLT VE3FST VE3FTG VE3FTM VE3FU VE3FWF VE3FZ VE3GFM VE3GFM/W4 VE3GFN VE3GJ VE3GN VE3GNF VE3GNI VE3GNO VE3GO VE3GOL VE3GTC VE3GYL VE3GYY VE3HED VE3HEU VE3HFQ VE3HG VE3HGX VE3HIA VE3HJP VE3HK VE3HLS VE3HMK VE3HTF VE3HUT VE3HX VE3IAE VE3IBW VE3IC VE3ICV VE3IDT VE3IGJ VE3IKT VE3IQ VE3IQZ VE3IRR VE3JAQ VE3JDF VE3JDF/W4 VE3JEV VE3JG VE3JI VE3JJA VE3JK VE3JKN VE3JM VE3JOC VE3JSO VE3JSQ VE3JWH VE3KAO VE3KEH VE3KFS VE3KGC VE3KGK VE3KI VE3KJQ VE3KKQ VE3KL VE3KP VE3KQK VE3KQN VE3KRP VE3KTB VE3KTB/VY0 VE3KY VE3KZ VE3LC VE3LFA VE3LFN VE3LHY VE3LJQ VE3LJT VE3LLV/W7 VE3LMM VE3LOE VE3LUZ VE3LVW VE3LXL VE3LZ VE3MA VE3MBI VE3MCF VE3MEW VE3MF VE3MFA VE3MGY VE3MIS VE3MM VE3MMQ VE3MNE VE3MT VE3MV VE3NAE VE3NB VE3NDI VE3NDQ VE3NE VE3NEA VE3NI VE3NLS VE3NOO VE3NQM VE3NR VE3NRG VE3NRT VE3NYX VE3NZ VE3ODR VE3ODX VE3OEN VE3OI VE3OIL VE3OKK VE3OM VE3OP VE3OSC VE3OSZ VE3OTL VE3OU VE3OZB/W3 VE3PM VE3PMA VE3PN VE3PQ VE3PTC VE3PUX VE3PV VE3PVI VE3PYG VE3PYJ VE3QAM VE3QBH VE3QEE VE3QN VE3QO VE3RA VE3RB VE3RC VE3RCMP VE3RCN VE3RHD VE3RHE VE3RIA VE3RM VE3RRH VE3RSA VE3RTL VE3RUV VE3RX VE3RYI VE3RZ VE3SAO VE3SAR VE3SB VE3SD VE3SGB VE3SIQ VE3SKX VE3SMA VE3SMN VE3SOO VE3SR VE3SS VE3SSR VE3SST VE3SSV VE3SUA VE3SUB VE3SUN VE3SWA VE3SWS VE3TA VE3TAZ VE3TCV VE3TES VE3TG VE3THX VE3TMG VE3TMT VE3TU VE3TW VE3TWG VE3UK VE3UKY VE3USP VE3UTA VE3UTT VE3UZ VE3VA VE3VC VE3VCF VE3VDI VE3VDX VE3VE VE3VEE VE3VEU VE3VGI VE3VHB VE3VID VE3VIG VE3VJ VE3VM VE3VN VE3VOC VE3VOE VE3VS VE3VSM VE3VTG VE3VV VE3VZ VE3WA VE3WDM VE3WEJ VE3WG VE3WIG VE3WPZ VE3WRL VE3WTD VE3WZ VE3WZI VE3XAT VE3XB VE3XC VE3XD VE3XEM VE3XL VE3XM VE3XN VE3XP VE3XQ VE3XR VE3XRA VE3XT VE3XTM VE3YAA VE3YF VE3YN VE3YT VE3YV VE3YXO VE3YYK VE3YYP VE3ZF VE3ZI VE3ZN VE3ZT VE3ZV VE3ZY VE3ZZ VE4AFL VE4AKF VE4BAE VE4BB VE4BG VE4CWF VE4DDO VE4DDW VE4DPR VE4DR VE4DRK VE4DXR VE4EA VE4EAR VE4FEEL VE4GTR VE4GV VE4HAZ VE4HQ VE4JWC VE4KT VE4MAR VE4ME/W4 VE4MG VE4PDD VE4RA VE4RAC VE4RON VE4RW VE4SN VE4TTH VE4TV VE4VT VE4VTR VE4XC VE4XI VE4XT VE4YU VE4ZP VE4ZZ VE5AAD VE5BCS VE5CON VE5DLD VE5DLM VE5DMN VE5EIS VE5EL VE5FX VE5GC VE5JZX VE5KC VE5KS VE5LBL VE5LWF VE5MX VE5PK VE5PV VE5RAC VE5RC VE5RI VE5SDH VE5SF VE5SS VE5SWL VE5TLW VE5UA VE5UF VE5UO VE5VA VE5VG VE5WD VE5XO VE5XU VE5ZC VE5ZG VE5ZX VE690IARU VE6ADF VE6AMI VE6AO VE6AOC VE6ARS VE6AVK VE6AX VE6BBP VE6BF VE6BHO VE6BI VE6BIR VE6BIR/3 VE6BMX VE6CCM VE6CGH VE6CMV VE6CN VE6CZT VE6DDD VE6DJT VE6DKC VE6DNS VE6EC VE6EFR VE6EPK VE6EX VE6EY VE6FI VE6FLH VE6FN VE6FT VE6GCE VE6GD VE6GEL VE6HII VE6HPT VE6IVN VE6JSJ VE6JY VE6KC VE6KD VE6KEE VE6KK VE6LB VE6LK VE6LRR VE6MO VE6MRV VE6MV VE6NR VE6NS VE6NU VE6PL VE6QO VE6QU VE6RA VE6RAC VE6RFM VE6RMB VE6RST VE6SH VE6SKY VE6SPS VE6SQ VE6SV VE6TA VE6TEQ VE6TI VE6TL VE6TN VE6UM VE6UX VE6VS VE6WP VE6WQ VE6WR VE6WTF VE6WZ VE6WZL VE6XH VE6YC VE6ZC VE6ZZZ VE7/DJ6OZ VE7ABC VE7ACN VE7AF VE7AFZ VE7AHA VE7AHT VE7AIJ VE7APF VE7AS VE7AWV VE7AX VE7BAV VE7BC VE7BEE VE7BFC VE7BGP VE7BPS VE7BQO VE7BST VE7BV VE7BYI VE7BZR VE7CA VE7CC VE7CKZ VE7CLX VE7CMC VE7CMD VE7CNW VE7COJ VE7CT VE7CUP VE7CUS VE7CV VE7CXZ VE7CYU VE7DAQ VE7DDG VE7DH VE7DP VE7DPD VE7DQO VE7DS VE7DSC VE7DX VE7DXF VE7DXH VE7DXK VE7EDZ VE7EEX VE7EMI VE7EPO VE7EPP VE7FCO VE7FEI VE7FI VE7FM VE7FO VE7FSB VE7GBO VE7GL VE7GM VE7GRQ VE7GTC VE7GYR VE7HBS VE7HH VE7HJ VE7IAD VE7IG VE7IGQ VE7IO VE7JDZ VE7JH VE7JKZ VE7JMN VE7JO VE7JR VE7JT VE7JZ VE7KA VE7KB VE7KJR VE7KPM VE7KW VE7KWA VE7LE VE7LGI VE7LGP VE7LGX VE7LX VE7MH VE7MHC VE7MR VE7NA VE7NBQ VE7NEM VE7NI VE7NSR VE7NX VE7NY VE7NZ VE7OGO VE7ON VE7OR VE7PCH VE7QC VE7QZQ VE7RAC VE7RE VE7RG VE7RK VE7RPX VE7RSV VE7SA VE7SAR VE7SCC VE7SL VE7SLY VE7SO VE7SQ VE7SV VE7SZ VE7TI VE7TJF VE7TK VE7UF VE7UM VE7URN VE7VAW VE7VF VE7VGO VE7VIB VE7VQ VE7VR VE7VV VE7VZ VE7WF VE7WJ VE7WNK VE7WO VE7WWW VE7WY VE7XDT VE7XF VE7XS VE7XT VE7XV VE7YA VE7YAN VE7YL VE7YMM VE7YU VE7ZO VE7ZR VE8DAV VE8DX VE8EV VE8GER VE8NSD VE8RAC VE8YK VE9AA VE9ACL VE9BK VE9BWK VE9DX VE9EX VE9FX VE9GFD VE9GJ VE9GU VE9HF VE9IM VE9KW VE9ML VE9MM VE9MY VE9NC VE9OA VE9OX VE9PLS VE9RAC VE9SF VE9UN VE9UNB VE9VHF VE9WH VE9WW VE9XX VE9XX/6 VE9ZY VE9ZZ VER20151023 VI3RVAC VK1CC VK1GG VK1MA VK1MJ VK1OO VK1ZZ VK2014TDF VK2ACD VK2AET VK2ALR VK2AT VK2AU VK2AWD VK2AXX VK2AYD VK2BCQ VK2BD VK2BJ VK2BNG VK2BO VK2BPL VK2BXE VK2BYI VK2CA VK2CCC VK2CCJ VK2CZ VK2DAG VK2DX VK2EL VK2ELF VK2FDGC VK2FJ VK2FJC VK2GE VK2GFC VK2GGC VK2GOM VK2GR VK2GWK VK2HDX VK2HOT VK2HTM VK2HV VK2IG VK2IM VK2IR VK2IUW VK2KDP VK2KJJ VK2KTT VK2LBG VK2LEE VK2LX VK2MI VK2MIC VK2MJM VK2MOR VK2MWG VK2ND VK2NR VK2NRB VK2NSS VK2OXZ VK2PN VK2PR VK2PWR VK2PWS VK2PX VK2QQ VK2RT VK2SR VK2TTP VK2UZ VK2VR VK2WWV VK2XE VK2YW VK2ZMT VK2ZQ VK3ACE VK3ACT VK3ADW VK3AKK VK3AMK VK3APG VK3AUQ VK3AVV VK3AVZ VK3AWG VK3AXF VK3BF VK3BM VK3BQ VK3BY VK3CM VK3DGN VK3DOG VK3DU VK3DXJ VK3EW VK3FM VK3FONZ VK3FQSO VK3FT VK3GDM VK3GFS VK3GK VK3HDX VK3HEX VK3HJ VK3HJA VK3HRU VK3IJ VK3IM VK3IO VK3JA VK3JLS VK3JMB VK3JR VK3KCD VK3KE VK3KRH VK3KTO VK3KW VK3LK VK3LM VK3MEG VK3MI VK3MJS VK3MO VK3MSD VK3MTV VK3NDX VK3NRW VK3OD VK3OHM VK3OT VK3OY VK3PLP VK3PTO VK3QN VK3SIM VK3SX VK3TCX VK3TZ VK3UP VK3VBC VK3VIN VK3VKT VK3VT VK3VTH VK3WF VK3WMM VK3YE VK3ZGP VK4AAV VK4AFU VK4ATH VK4BL VK4BRT VK4BUI VK4CAG VK4CC VK4CL VK4CMV VK4CQ VK4CT VK4DH VK4DMP VK4DNA VK4DX VK4EF VK4FAAS VK4FFAB VK4FI VK4FJ VK4FNQ VK4GH VK4GMH VK4HG VK4HH VK4HY VK4IU VK4JU VK4KW VK4KX VK4LAT VK4LC VK4MA VK4MAX VK4MN VK4MON VK4MWG VK4NH VK4NM VK4OH VK4OQ VK4PN VK4QA VK4QH VK4QO VK4QS VK4RZ VK4SC VK4SDD VK4SN VK4SP VK4TH VK4TJF VK4TS VK4TT VK4UC VK4UR VK4VAZ VK4VDX VK4VI VK4WDM VK4WIE VK4WIL VK4WR VK4XAC VK4XY VK4YB VK4ZD VK4ZJR VK4ZN VK5AKH VK5ARG VK5CE VK5CE/P VK5CJC VK5CM VK5DC VK5DG VK5DT VK5EEE VK5FH VK5LJ VK5LTD VK5MPJ VK5MTM VK5NIG VK5PAS VK5PO VK5RK VK5WIA VK5ZK VK5ZM VK5ZZ VK6AA VK6AJ VK6ANC VK6APZ VK6BP VK6DU VK6DW VK6DXI VK6EH VK6FLAB VK6FZM VK6GOM VK6HG VK6IR VK6IT VK6KJ VK6KRC VK6LC VK6LCK VK6LK VK6LW VK6MAB VK6NC VK6NE VK6NI VK6NTE VK6QM VK6RC VK6RO VK6RZ VK6SMK VK6VCK VK6VZ VK6WX VK6XX VK6YO VK6YS VK7AC VK7AD VK7BO VK7CC VK7CW VK7DZ VK7FG VK7GK VK7GN VK7KT VK7NET VK7ROY VK7WH VK7XX VK7ZGK VK8AA VK8AV VK8GM VK9LM VK9XSP VO1ABN VO1AX VO1BB VO1BBN VO1BE VO1BQ VO1CAL VO1COD VO1DJT VO1DRD VO1GO VO1HP VO1HZ VO1JLB VO1KVT VO1MP VO1MX VO1OK VO1OR VO1QU VO1RAC VO1ROS VO1SA VO1SO VO1TTT VO1TX VO1UL VO1VR VO1XT VO1YV VO2AAA VO2AC VO2CQ VO2DX VO2MW VO2NS VO3A VP2EAQ VP2EC VP2EIM VP2ERJ VP2EWX VP2EZZ VP2MDG VP2MDX VP2MLL VP2MLU VP2MMM VP2MXA VP2MXI VP2VAK VP2VGG VP5CW VP5DX VP5E VP5H VP5S VP5T VP8KF VP8LP VP8NO VP8QJM VP8RAF VP9/DL3YM VP9/K4KGG VP9/KG2A VP9/N3AD VP9/UU5WW VP9/W6PH VP9AD VP9BO VP9GE VP9HQ VP9I VP9ID VP9KD VQ9JC VR2/IK7YTT VR2/IV3TAN VR2CB VR2CO VR2HF VR2HKS VR2KF VR2KW VR2PX VR2S VR2UU VR2UW VR2VIY VR2XAN VR2XLQ VR2XMC VR2XMT VR2YDC VR2ZQZ VR2ZQZ/P VU2ABS VU2BGS VU2BL VU2CDP VU2CPL VU2CVS VU2DCC VU2DED VU2DK VU2DSI VU2GRM VU2GUR VU2HOT VU2IIX VU2JOS VU2LBW VU2MRM VU2MTM VU2MUD VU2NFG VU2NKS VU2PAI VU2PEP VU2PHD VU2PTT VU2RBI VU2RCT VU2RMS VU2SGW VU2SMS VU2TS VU2UR VU2UUU VU2VID VU2XO VU2YVK VU3ARP VU3DJQ VU3DMP VU3DNS VU3INK VU3KPL VU3LMS VU3MES VU3NXI VU3ONE VU3PRH VU3SIO VU3TMO VU3TYG VU3WIJ VU4KV VX7SV VX7SZ VY0/VE3KTB VY0/VE3VID VY1AAA VY1EI VY1JA VY1MAB VY1MB VY1RAC VY1RM VY1XY VY2/W5AJ VY2/WJ5DX VY2GF VY2GM VY2GQ VY2HR VY2LI VY2MGY/3 VY2MP VY2OM VY2OX VY2RAC VY2RG VY2RX VY2SS VY2TT VY2ZM W0AA W0AAA W0ABC W0AD W0AF W0AG W0AG/7 W0AH W0AIH W0AJU W0AK W0ALC W0AMK W0AMP W0ANH W0ANT W0AO W0ARW W0ATI W0BAV W0BB W0BBI W0BBO W0BH W0BLK W0BM W0BNW W0BR W0BTU W0BV W0BVR W0CAR W0CC W0CCA W0CEL W0CET W0CG W0CKI W0CN W0CO W0CP W0CQC W0CSR W0CZ W0CZE W0DB W0DC W0DD W0DET W0DEW W0DF W0DIO W0DJH W0DLE W0DR W0DSW W0DV W0DYD W0EA W0EAR W0EB W0ECS W0EDK W0EEE W0EET W0EJ W0ELT W0ELT/9 W0EM W0EP W0ERH W0ERJ W0ERP W0ETT W0EWD W0FAA W0FG W0FK W0FLS W0FM W0FOB W0FRC W0FRV W0FS W0GAF W0GFM W0GG W0GHZ W0GJ W0GKP W0GLB W0GM W0GMO W0GN W0GTL W0GTS W0GUS W0GUY W0GXA W0GXQ W0GZI W0GZR W0HBH W0HDC W0HI W0HJW W0HJW/6 W0HL W0HNV W0HT W0HW W0HXB W0HXL W0IE W0IM W0IMD W0IW W0IZ W0JA W0JBR W0JEC W0JIM W0JLC W0JLF W0JM W0JMP W0JPL W0JRP W0JTC W0JW W0JWR W0JX W0KAN W0KC W0KEU W0KIT W0KK W0KSD W0KT W0KU W0KVA W0LEO W0LEZ W0LFA W0LI W0LLN W0LM W0LOY W0LPF W0LS W0LSB W0LSD W0LWU W0MA W0MHK W0MI W0MM W0MPM W0MR W0MRM W0MU W0MY W0NA W0NAC W0ND W0NEB W0NEO W0NFD W0NFL W0NFS W0NMD W0NO W0NQW W0NT W0NTA W0NWT W0NYA W0NZG W0ODS W0OF W0OFX W0OJW W0OJY W0OOA W0OPW W0OR W0OR/4 W0OS W0OTM W0OTV W0OVM W0PAN W0PB W0PC W0PC/7 W0PE W0PER W0PI W0PNA W0PPA W0PPF W0PR W0PT W0PV W0PXM W0PY W0QBX W0QE W0QKL W0QQ W0QQG W0QU W0RAA W0RH W0RIC W0RJE W0RK W0RO W0RPZ W0RSB W0RSP W0RSR W0RTV W0RU W0RUN W0RX W0SA W0SD W0SEB W0SEI W0SG W0SGM W0SHL W0SK W0SKU W0SLW W0SM W0SO W0SUN W0SV W0SZ W0TF W0TK W0TLE W0TLX W0TT W0TUP W0TXX W0TY W0UA W0UCE W0UD W0UO W0UVC W0UY W0VB W0VD W0VLL W0VTT W0VX W0WAB W0WDF W0WLL W0WML W0WOI W0WP W0WQ W0WSP W0XA W0XE W0XI W0XL W0XV W0XW W0XXX W0YBS W0YHE W0YJT W0YK W0YR W0YSE W0YVA W0YY W0YZZ W0ZA W0ZC W0ZD W0ZF W0ZH W0ZIM W0ZK W0ZP W0ZQ W0ZR W0ZRK W0ZS W0ZT W0ZTL W0ZWY W0ZZ W1/CT1AGF W1/DL4NAC W1/DL6MHW W1/SP4Z W1/UA9CDC W1/YO7ARY W100AW W100AW/4 W1AAC W1AAX W1ABO W1AD W1AES W1AF W1AH W1AIR W1AJT W1ALI W1AMJ W1AN W1AO W1APZ W1AQ W1ASB W1AST W1ATP W1ATV W1AUT W1AVK W1AW W1BEM W1BFC W1BGL W1BHC W1BJ W1BNC W1BO W1BOS W1BP W1BRS W1BRU W1BV W1BWA W1BXY W1CAA W1CBY W1CCE W1CEK W1CK W1CLA W1CRK W1CRP W1CSM W1CT W1CTN W1CU W1CVC W1CVE W1CX W1DAD W1DBD W1DDD W1DEE W1DEL W1DF W1DFL W1DGL W1DOC W1DQ W1DQD W1DV W1DWA W1DX W1DY W1DYJ W1EAT W1EBI W1EBM W1ECH W1ECT W1EE W1EEB W1EG W1EHQ W1EL W1EM W1EME W1END W1EQ W1EQO W1ESE W1EZ W1FA W1FJ W1FM W1FMR W1FNB W1FNJ W1FO W1FP W1FQ W1FSY W1FV W1FY W1FYM W1FZ W1GC W1GD W1GF W1GIV W1GKB W1GKT W1GNR W1GQ W1GRC W1GS W1GSH W1GSS W1GUD W1GUE W1GWL W1GWN W1GXZ W1GY W1HAI W1HAM W1HBR W1HFF W1HFG W1HI W1HIJ W1HIS W1HP W1HQ W1HT W1HY W1IBI W1IBN W1IBQ W1IDL W1IDP W1IE W1IG W1II W1IL W1IRA W1IS W1ITT W1IZL W1JAW W1JCW W1JN W1JNZ W1JPR W1JPZ W1JQ W1JR W1JSB W1JWC W1KBN W1KDA W1KF W1KM W1KMA W1KOK W1KQ W1KRS W1KSZ W1KT W1KV W1KX W1KYD W1LAU W1LBC W1LBV W1LDD W1LEA W1LIC W1LQ W1LTX W1LWH W1LXA W1LY W1LZ W1MA W1MAD W1MAW W1MBB W1MD W1MJ W1MJB W1MK W1MKA W1MLG W1MO W1MR W1MRQ W1MSN W1MSW W1MU W1NA W1NA/5 W1NG W1NH W1NK W1NKA W1NN W1NRG W1NSK W1NT W1NV W1NVT W1NXC W1NY W1OHM W1OO W1OOO W1OP W1OU W1OX W1PBR W1PH W1PID W1PIT W1PL W1PR W1PR/6 W1PV W1QA W1QG W1QH W1QI W1QJ W1QK W1QR W1QS W1RAA W1RAN W1RH W1RJ W1RKT W1RM W1RMM W1RO W1RPG W1RQ W1RTS W1SD W1SFR W1SJ W1SKP W1SKY W1SLF W1SMC W1SNE W1SRD W1SZ W1TAM W1TEF W1TI W1TJL W1TM W1TMS W1TO W1TR W1TRB W1TS W1TSM W1TSP W1TU W1TW W1TY W1UE W1UE/HR9 W1UJ W1UK W1UL W1UN W1UO W1UR W1URV W1USN W1UT W1UU W1UV W1VD W1VE W1VIV W1VJ W1VK W1VO W1VRY W1VT W1VVX W1WBB W1WC W1WCN W1WCT W1WEF W1WIU W1WLW W1WMG W1WMU W1WQG W1WTD W1WV W1WWW W1XH W1XP W1XR W1XV W1XWX W1XX W1YK W1YL/4 W1YM W1YRC W1YW W1YY/7 W1ZC W1ZD W1ZD/7 W1ZE W1ZFG W1ZIY W1ZK W1ZQ W1ZR W1ZS W1ZT W1ZU W1ZX W1ZZ W2AA W2AAB W2ACH W2ACY W2AE W2AIV W2ANQ W2ARB W2ARP W2AW W2AXR W2AYM W2BC W2BEE W2BEW W2BJN W2BK W2BSN W2BUD W2CCC W2CCW W2CDO W2CG W2CH W2CKL W2CMD W2CO W2CR W2CRA W2CS W2CSI W2CVW W2DAN W2DAS W2DB W2DEN W2DFC W2DLH W2DLT W2DMZ W2DPT W2DRW W2DSC W2DSX W2DX W2DXE W2DZ W2EB W2EF W2EFI W2EG W2EJC W2EJG W2EN W2ESX W2EZB W2FCP W2FD W2FDB W2FDJ W2FE W2FF W2FG W2FJA W2FKN W2FMB W2FP W2FU W2FU/0 W2GB W2GD W2GDJ W2GEZ W2GH W2GHD W2GN W2GPS W2GR W2GS W2GSA W2GSB W2GTX W2GW W2GZB W2HCB W2HDI W2HOG W2HTI W2HUV W2HZ W2ID W2IDF W2II W2IIT W2IKN W2IL W2IQK W2IRT W2IUC W2IW W2IX W2IY W2JAT W2JAZ W2JD W2JDB W2JEK W2JGQ W2JIT W2JJ W2JJT W2JLK W2JSJ W2JTM W2JU W2JV W2JZ W2KAI W2KFV W2KJ W2KKJ W2KKZ W2KQ W2KRD W2KS W2KV W2LB W2LC W2LCQ W2LE W2LGA W2LJ W2LK W2LLR W2LO W2LP W2LPL W2LTD W2LU W2LV W2MC W2MDW W2MEB W2MF W2MGF W2MH W2MIA W2MKM W2MKW W2MMD W2MN W2MRD W2MU W2MV W2MXL W2MYA W2NAF W2NBJ W2NDG W2NJ W2NK W2NNY W2NO W2NPR W2NPT W2NQ W2NQ/7 W2NRA W2NTV W2NY W2NYW W2OB W2ODY W2OIB W2OK W2OKM W2OL W2OO W2OP W2OR W2ORC W2ORO W2OSR W2OU W2OW W2PA W2PD W2PFA W2PH W2PIP W2PJ W2PK W2PKY W2PS W2PV W2QF W2QO W2RC W2RD W2RDM W2RDS W2RDX W2RE W2REA W2RES W2RF W2RLB W2RLK W2RM W2RME W2RMF W2RQ W2RR W2RRU W2RS W2RTV W2RTW W2RTY W2RZS W2SA W2SFD W2SH W2SKI W2SM W2SNX W2SO W2SZ W2TA W2TB W2TD W2TF W2TIN W2TMD W2TN W2TX W2TZ W2UDT W2UI W2UP W2UQ W2VE W2VI W2VJN W2VKT W2VM W2VO W2VQ W2VQ/4 W2VRK W2VT W2VTV W2VU W2VUF W2WC W2WCM W2WD W2WGK W2WI W2WKD W2XB W2XI W2XL W2XM W2XO W2XS W2YC W2YD W2YE W2YK W2YR W2ZDP W2ZEP W2ZI W2ZRA W2ZS W2ZV W3AAX W3ACO W3AFC W3AG W3ANJ W3AO W3APL W3ASR W3ASW W3AT W3ATT W3ATV W3AV W3AW W3AYT W3AZD W3BA W3BAY W3BBO W3BC W3BEE W3BFC W3BG W3BGN W3BJ W3BRF W3BTX W3BUI W3BW W3BZN W3CB W3CC W3CCX W3CF W3CL W3CNB W3CQ W3CQB W3CRZ W3CUV W3CWE W3DA W3DAD W3DDT W3DF W3DG W3DIY W3DKT W3DLM W3DNA W3DNQ W3DP W3DQ W3DQN W3DQN/5 W3DQT W3DSX W3DZH W3EA W3EAR W3EC W3ECK W3EDP W3EEK W3EF W3EFE W3EH W3EK W3EKT W3EM W3EME W3ENM W3EP W3FA W3FAY W3FF W3FI W3FIZ W3FJ W3FME W3FOX W3FRC/WMF W3FV W3FVT W3FW W3GFM W3GH W3GIS W3GJN W3GK W3GLH W3GLL W3GM W3GMT W3GNQ W3GQ W3GR W3GTL W3GV W3GVX W3GW W3GWU W3GY W3GYK W3HAC W3HDH W3HH W3HHN W3HKK W3HMS W3HNK W3HVY W3HWE W3HZU W3IBT W3IDT W3II W3IK W3IL W3IP W3IQ W3IUU W3IWJ W3IZ W3JAR W3JJ W3JLV W3JM W3JO W3JTV W3JX W3KB W3KDR W3KFI W3KHQ W3KL W3KLG W3KN W3KWH W3KX W3LD W3LH W3LJ W3LL W3LPL W3LR W3LRC W3LWH W3LZR W3MAT W3MC W3MF W3MIE W3ML W3MLK W3MMI W3MR W3MRL W3MS W3MTP W3MUM W3MWR W3NA W3NCR W3NO W3NR W3NRJ W3NU W3NX W3NZL W3OA W3OD W3OFD W3OFT W3OK W3ON W3OU W3PA W3PD W3PH W3PHL W3PN W3PP W3PV W3PX W3QJ W3QT W3RI W3RJ W3RJW W3RL W3RLO W3RMS W3RTY W3RW W3SA W3SAX W3SC W3SD W3SFG W3SK W3SM W3SMF W3SO W3SOX W3SQ W3TB W3TC W3TDF W3TE W3TLN W3TM W3TMB W3TMC W3TMS W3TMZ W3TRW W3TS W3TWB W3TZ W3UA W3UAS W3UC W3UDX W3UEC W3UL W3ULS W3UM W3UR W3US W3UTD W3VPJ W3VPR W3VYK W3WC W3WGW W3WH W3WHK W3WKP W3WKX W3WL W3WN W3WOT W3WST W3WT W3WTW W3WW W3XZ W3YA W3YI W3YJ W3YR W3YW W3YX W3YY W3YZM W3ZA W3ZAP W3ZGD W3ZKU W3ZL W3ZQI W3ZR W3ZV W3ZYF W4/DK8FZ W4/G3LIK W4/LY5W W4/PA3BHF W4/SP4Z W4/UR5MID W4/VE3RZ W4AA W4AAA W4AAX W4AAZ W4ABC W4ACM W4AD W4ADI W4AFB W4AG W4AGT W4AKO W4ALA W4ALE W4ALF W4AM W4AMP W4AN W4ANR W4ANT W4AO W4AQL W4ARM W4AS W4ASE W4ATL W4AU W4AUB W4AV W4AVY W4AX W4BAB W4BAI W4BCG W4BCU W4BCX W4BFB W4BFL W4BGH W4BIX W4BK W4BMH W4BNO W4BQF W4BRG W4BSF W4BTZ W4BUW W4BVH W4BW W4BXI W4CA W4CB W4CBZ W4CC W4CCH W4CCS W4CDA W4CHI W4CI W4CLJ W4CMM W4CNA W4COH W4CQ W4CRN W4CRV W4CU W4CUL W4CV W4CVC W4CVY W4CWA W4CYM W4CZU W4DAN W4DAO W4DD W4DDZ W4DEE W4DEP W4DFG W4DFR W4DHT W4DKB W4DKR W4DKS W4DL W4DMA W4DN W4DNN W4DNT W4DR W4DSL W4DSM W4DTA W4DTB W4DU W4DUG W4DUK W4DVG W4DW W4DX W4DXA W4DXL W4DXX W4EA W4EAB W4EAZ W4EB W4ECZ W4ED W4EE W4EEH W4EF W4EFB W4EG W4EJG W4ELP W4ENN W4EON W4EPM W4ES W4ETB W4EY W4EYJ W4EZ W4FC W4FCR W4FDA W4FDE W4FF W4FHC W4FI W4FID W4FLN W4FNC W4FOA W4FPA W4FRA W4FS W4FT W4FUN W4GAL W4GCB W4GD W4GDG W4GE W4GEH W4GFQ W4GFY W4GH W4GHS W4GHW W4GIW W4GKA W4GKM W4GKR W4GM W4GMT W4GO W4GOK W4GR W4GRC W4GRV W4GRW W4GV W4GWL W4GZX W4HCR W4HFH W4HG W4HGW W4HK W4HLD W4HM W4HML W4HNG W4HOD W4HOG W4HQF W4HRC W4HS W4HSA W4HZ W4IHI W4II W4IM W4IMD W4IND W4IOP W4IOU W4IOW W4IR W4IT W4IWH W4IX W4IXE W4IY W4JAM W4JBB W4JDS W4JFR W4JHC W4JHU W4JKC W4JKG W4JL W4JNC W4JNH W4JOV W4JRK W4JRQ W4JS W4JSI W4JTB W4JTP W4JUU W4JVN W4JVY W4KA W4KAR W4KAZ W4KBX W4KCN W4KES W4KFF W4KK W4KKN W4KLH W4KLY W4KMR W4KNB W4KPG W4KPR W4KRN W4KRT W4KS W4KSZ W4KTR W4KVB W4KVS W4KW W4KYA W4KZ W4LC W4LGR W4LHS W4LJS W4LK W4LLP W4LLX W4LLY W4LM W4LOS W4LQ W4LSC W4LT W4LVH W4LWW W4LWZ W4LX W4MAA W4MBD W4MC W4MEA W4MEL W4MHA W4MJA W4ML W4MLB W4MLN W4MMW W4MOZ W4MPJ W4MPS W4MQC W4MR W4MT W4MY W4MYA W4MZ W4NA W4NB W4NBS W4NC W4NDX W4NE W4NF W4NFT W4NHJ W4NI W4NJA W4NJK W4NL W4NP W4NRM W4NT W4NTA W4NUN W4NYS W4NZ W4NZC W4OC W4OCO W4ODB W4ODR W4OEP W4OEQ W4OG W4OJV W4OLB W4OM W4OT W4OTN W4OV W4OWY W4OX W4PA W4PAH W4PAY W4PBG W4PBU W4PDX W4PF W4PFM W4PG W4PGM W4PH W4PHS W4PJW W4PK W4PL W4PM W4PR W4PRE W4PRO W4PSS W4PTY W4PUD W4PV W4PVT W4PWF W4QDC W4QJ W4QK W4QN W4QNW W4QO W4QQI W4QYV W4RAA W4RCJ W4RCM W4RDD W4REM W4RER W4REX W4RIK W4RJ W4RJC W4RJF W4RJL W4RK W4RKC W4RKV W4RL W4RLW W4RM W4RPE W4RQ W4RRE W4RTT W4RVU W4RX W4RYW W4SAA W4SCV W4SDD W4SDJ W4SHL W4SIG W4SJD W4SJT W4SJV W4SK W4SLT W4SO W4SOH W4SPA W4STR W4SVO W4SVP W4SYV W4SYY W4TA W4TAA W4TG W4TIJ W4TKI W4TLZ W4TMO W4TNF W4TSP W4TTM W4TTT W4TTY W4TTZ W4TUN W4TV W4TVG W4TZM W4TZX W4UAL W4UAT W4UD W4UEF W4UFO W4UG W4UH W4UK W4UKE W4UM W4UNA W4UNP W4UQ W4UT W4UTI W4UV W4UW W4UX W4VA W4VAB W4VAS W4VG W4VIC W4VIY W4VPZ W4VQ W4WAM W4WBA W4WC W4WCC W4WHL W4WJ W4WKN W4WN W4WNT W4WQ W4WRS W4WT W4WWQ W4WYI W4XD W4XMT W4XO W4XR W4YAT W4YBB W4YBV W4YCC W4YDY W4YE W4YES W4YFJ W4YHD W4YK W4YN W4YOK W4YPW W4YWW W4YWX W4YY W4ZAO W4ZBB W4ZD W4ZFL W4ZGH W4ZGR W4ZHE W4ZHR W4ZLZ W4ZN W4ZOW W4ZPR W4ZR W4ZRZ W4ZV W4ZYT W5/NH7C W5/UA3TT W5ACA W5AD W5ADD W5AFV W5AFW W5AG W5AH W5AJ W5AK W5AMI W5AMU W5ANR W5AP W5APS W5ASP W5AZ W5BEK W5BEN W5BGP W5BKV W5BL W5BM W5BN W5BXY W5CF W5CFI W5CHA W5CJB W5CL W5CO W5COV W5CRD W5CSC W5CSM W5CT W5CW W5CWT W5DAW W5DDX W5DET W5DKK W5DLW W5DM W5DNT W5DRZ W5DT W5DXR W5DXS W5DZ W5EEA W5EEX W5EIM W5EK W5EMP W5EN W5ESE W5EST W5ETJ W5ETZ W5EW W5EXJ W5FIT W5FWR W5FZ W5GA W5GAD W5GAI W5GCX W5GDX W5GFI W5GFR W5GG W5GIX W5GN W5GTI W5GWD W5GWH W5HD W5HFF W5HJJ W5HNK W5HNS W5HVV W5HY W5IF W5IFP W5IL W5INC W5IP W5IV W5IZ W5JAW W5JAY W5JBB W5JBO W5JDF W5JE W5JJ W5JJG W5JK W5JLR W5JNL W5JNP W5JR W5JR/4 W5JXV W5JY W5JZ W5KAL W5KB W5KDM W5KFT W5KI W5KK W5KL W5KNE W5KS W5LA W5LE W5LEW W5LKB W5LMM W5LRU W5LUA W5MF W5MI W5MJ W5MK W5MKT W5MPZ W5MRM W5MT W5MX W5MZX W5NE W5NEM W5NFL W5NUT W5NZ W5OE W5OM W5OM/6 W5OMU W5ONE W5OOO W5OU W5OX W5OXJ W5PD W5PDO W5PDW W5PET W5PF W5PJW W5PKE W5PKK W5PQ W5PR W5PUF W5QAP W5QC W5QLF W5QM W5QQ W5QZ W5RAW W5RCG W5RDW W5RE W5RF W5RGS W5RH W5RJH W5ROK W5ROS W5RQ W5RRP W5RTA W5RU W5RWF W5RYA W5RYC W5RZ W5SAT W5SG W5SGL W5SJ W5SMD W5SQA W5SS W5SSS W5SUM W5SWV W5TA W5TCR W5TDY W5TEN W5THT W5TJS W5TKZ W5TM W5TMC W5TMP W5TT W5TTE W5TTY W5TV W5TX W5TZC W5UDV W5UE W5UFA W5UHQ W5UN W5UNT W5UP W5UR W5UU W5UXE W5VAN W5VE W5VEK W5VFO W5VGR W5VOL W5VQ W5VX W5VY W5VYH W5WB W5WEE W5WFF W5WI W5WIL W5WLX W5WMU W5WN W5WRE W5WSS W5WT W5WTM W5WY W5WZ W5XB W5XC W5XD W5XJ W5XTX W5XU W5XX W5XZ W5YA W5YD W5YDM W5YH W5YKU W5YM W5YZ W5ZAX W5ZE W5ZG W5ZN W5ZO W5ZPA W5ZQ W5ZR W5ZZ W6/K2RP W6/SM5CSS W6/UA3TT W6AAJ W6AAN W6AAX W6AEA W6AEA/7 W6AEQ W6AER W6AF W6AFA W6AIM W6AKF W6AMY W6AOZ W6APO W6AQ W6ARA W6ARU W6AT W6AUG W6AUN W6AWK W6AWW W6AYC W6BB W6BBL W6BCE W6BDW W6BIV W6BJH W6BK W6BO W6BVB W6BX W6BXQ W6CA W6CCC W6CCP W6CHP W6CSA W6CT W6CWM W6CZ W6DAA W6DAS W6DCC W6DDC W6DE W6DEF W6DEN W6DFT W6DGD W6DLO W6DOE W6DOJ W6DPD W6DR W6DTJ W6DVS W6EB W6EDY W6EEI W6ENZ W6EU W6EW W6EWS W6FA W6FB W6FD W6FDU W6FM W6FMO W6FPS W6FRD W6FTA W6FUV W6GA W6GEE W6GJB W6GJI W6GL W6GMP W6GMT W6GMU W6GPM W6GRT W6GRV W6GU W6GX W6HD W6HDG W6HGF W6HTC W6HXW W6HYI W6HYK W6IGK W6IHG W6IHG/4 W6II W6IJ W6IM W6INO W6IT W6IYS W6IZT W6JBR W6JEO W6JEX W6JGR W6JHB W6JJJ W6JJW W6JK W6JMP W6JPK W6JPP W6JSM W6JTI W6JV W6JVA W6JWK W6JWP W6JXH W6JZH W6KA W6KAN W6KAP W6KBX W6KC W6KGP W6KH W6KJ W6KLE W6KRF W6KW W6KY W6LC W6LD W6LED W6LEN W6LFB W6LG W6LH W6LPW W6LSU W6LSX W6LW W6LWG W6LX W6ML W6MQI W6MSB W6MTR W6MUB W6MUL W6MWY W6MYN W6ND W6NEV W6NF W6NIF W6NJB W6NL W6NN W6NS W6NUC W6NV W6NWG W6NWS W6NY W6OAR W6OAT W6OEZ W6OGC W6OGJ W6OLA W6OOL W6OPO W6OQI W6ORZ W6OTC W6OU W6OUL W6OVP W6OZI W6PDX W6PG W6PH W6PJ W6PJB W6PJJ W6PK W6PMD W6PNX W6POC W6PST W6PU W6PW W6PWM W6PZ W6PZA W6QAR W6QBF W6QE W6QEG W6QET W6QN W6QO W6QR W6QU W6QUV W6RA W6RDF W6RFF W6RFL W6RFU W6RGG W6RGS W6RIG W6RJ W6RKC W6RKE W6RLK W6RLL W6RLL/7 W6RMC W6RO W6ROX W6RQR W6RS W6RW W6RWC W6RYI W6SA W6SAI W6SAN W6SC W6SD W6SDM W6SDW W6SF W6SFG W6SFK W6SFM W6SGJ W6SHM W6SIY W6SJ W6SL W6SQC W6SR W6SW W6SWC W6SX W6SZG W6SZN W6TA W6TCP W6TD W6TDX W6TJI W6TJK W6TK W6TMD W6TPR W6TRI W6TYG W6UB W6UC W6UDO W6UE W6UFO W6UM W6UP W6UQ W6US W6USN W6UV W6UW W6UX W6VA W6VAR W6VM W6VMT W6VNQ W6VNR W6VY W6WA W6WAT W6WB W6WF W6WHD W6WRT W6WTI W6WVW W6XB W6XI W6XK W6XR W6XR/2 W6XU W6YA W6YI W6YO W6YV W6YW W6YX W6YXY W6ZBA W6ZE W6ZN W6ZO W6ZQ W6ZR W6ZX W7/HB9FHV W7AAA W7AAD W7AAR W7AB W7ABT W7ACM W7ACW W7ADO W7AE W7AGA W7AH W7AIT W7AL W7AQK W7ASF W7AT W7AV W7AX W7AYY W7BA W7BBQ W7BC W7BDB W7BEB W7BEM W7BGO W7BIL W7BKN W7BO W7BP W7BPD W7BPM W7BQ W7BRM W7BRO W7BU W7BV W7BYK W7CAR W7CB W7CCE W7CFR W7CH W7CLO W7CNA W7CNP W7CP W7CPI W7CQW W7CT W7CWD W7CWR W7CY W7DAU W7DDD W7DFO W7DG W7DHH W7DK W7DN W7DO W7DR W7DRM W7DRO W7DX W7DXW W7DXX W7DY W7DZD W7EB W7ECK W7EDC W7EF W7EIR W7EJ W7EJS W7EKB W7EKG W7ER W7ESE W7EW W7EWG W7FB W7FD W7FE W7FGS W7FI W7FIA W7FKF W7FP W7FSL W7FTX W7FW W7FYV W7FYW W7GA W7GB W7GDK W7GDU W7GEM W7GET W7GF W7GKF W7GKM W7GKP W7GLC W7GSV W7GT W7GTF W7GVE W7GWS W7GX W7HB W7HG W7HJ W7HJ/4 W7HJL W7HPW W7HR W7HWR W7HY W7IDM W7IFG W7IIT W7IJ W7ILL W7IMU W7IPA W7ISG W7IU W7IUO W7IV W7IVM W7IWW W7IY W7IZ W7JET W7JFF W7JK W7JLC W7JOI W7JSD W7JW W7JWM W7JWT W7JY W7KAM W7KAT W7KB W7KBI W7KEY W7KF W7KHZ W7KKC W7KKR W7KNX W7KPL W7KRS W7KTE W7KU W7KW W7LD W7LEB W7LGG W7LKB W7LKG W7LNG W7LOV W7LR W7LRD W7LW W7LZ W7MAD W7MAL W7MAY W7MBR W7MCK W7MCM W7MCP W7MDQ W7MEM W7MEX/0 W7MHW W7MJJ W7MLE W7MLG W7MMQ W7MRG W7MTL W7NAT W7NBH W7NUW W7NX W7NZ W7OE W7OID W7OIL W7OL W7OLY W7OM W7ON W7OO W7OQ W7OR W7OTV W7OXB W7PE W7PEB W7PI W7PIG W7PJ W7PLJ W7POE W7PP W7PRA W7PSK W7PT W7PU W7PV W7PX W7QC W7QDM W7QHZ W7QL W7QN W7QR W7RCA W7RG W7RH W7RIS W7RIV W7RN W7RNF W7RNX W7RPT W7RRS W7RT W7RTL W7RTX W7RV W7RY W7SA W7SAG W7SE W7SLS W7SLY W7SO W7SP W7SQ W7SST W7SUR W7SW W7SY W7TAN W7TB W7TDZ W7TGC W7TJ W7TKO W7TOA W7TR W7TSQ W7TVC W7TX W7TYN W7UB W7UDG W7UDI W7UPF W7USA W7UT W7UUU W7UV W7UZ W7VAS W7VJ W7VO W7VP W7VPK W7VS W7VSM W7VT W7VV W7VXS W7WA W7WEC W7WES W7WH W7WHO W7WHY W7WIA W7WKR W7WLL W7WM W7WMO W7WOF W7WOW W7WPR W7WQ W7WR W7WSV W7WVF W7WW W7WZ W7XQ W7XRX W7XT W7XU W7XZ W7YAQ W7YAQ/6 W7YED W7YEY W7YKM W7YKN W7YOW W7YOZ W7YPZ W7YS W7ZB W7ZCU W7ZF W7ZI W7ZJ W7ZOI W7ZR W7ZRC W7ZT W7ZV W7ZZ W8/UR5MID W8/UT5UDX W8AAX W8AB W8ACW W8AJS W8AJT W8AJV W8AKS W8AL W8ALP W8AN W8AQ W8ARC W8ARU W8ASA W8AV W8AZA W8BAQ W8BAR W8BBM W8BBQ W8BC W8BD W8BFX W8BG W8BI W8BN W8BS W8BSM W8BTD W8BUD W8BVH W8BZY W8CAA W8CAG W8CAR W8CCA W8CCI W8CMC W8CMK W8CO W8CQP W8CQU W8CT W8CZN W8DC W8DCH W8DCQ W8DE W8DEO W8DFW W8DGN W8DHG W8DJ W8DLD W8DM W8DO W8DPK W8DRZ W8DSN W8DW W8DX W8DXA W8EDU W8EEY W8EH W8EI W8EIR W8EO W8EOC W8EPC W8ERN W8FAX W8FBE W8FCD W8FD W8FDX W8FIB W8FJ W8FN W8FR W8FSM W8FY W8GEX W8GJ W8GNM W8GNM/8 W8GOC W8GP W8GU W8GVB W8GWS W8GX W8GXB W8HAP W8HCS W8HF W8HFY W8HGH W8HH W8HMK W8HN W8HOG W8HOM W8HP W8HPJ W8HW W8HY W8IDM W8IDW W8ILC W8IM W8IOF W8IPD W8IQ W8ISZ W8IW W8IXF W8IXP W8IZC W8JA W8JE W8JGU W8JH W8JHA W8JK W8JPF W8JRK W8JTW W8JWN W8JY W8KA W8KEN W8KH W8KHP W8KJS W8KKK W8KNO W8KQE W8KR W8KRS W8KRZ W8KSC W8KT W8KTQ W8KVK W8KX W8KZP W8LIG W8LJB W8LKY W8LM W8LMG W8LRL W8LRO W8LWB W8LYJ W8MDG W8MET W8MHW W8MIL W8MJ W8MJH W8MKR W8MLS W8MOX W8MP W8MRL W8MRM W8MSC W8MSK W8MSP W8MZ W8NCK W8NDB W8NFM W8NGA W8NH W8NIC W8NN W8NNC W8NNX W8NOR W8NT W8NVC W8NYK W8OH W8OHT W8OMI W8OOO W8OP W8OTR W8OTY W8OV W8PC W8PEN W8PG W8PI W8PLP W8PN W8PO W8PR W8PS W8PT W8PU W8QLY W8QM W8QR W8QZ W8RA W8REG W8REJ W8REW W8RGE W8RHM W8RIK W8RJL W8RLS W8RT W8RTJ W8RTN W8RU W8SAX W8SBH W8SDG W8SH W8SJ W8SM W8SP W8SQ W8TA W8TDA W8TE W8TEE W8TFI W8TK W8TM W8TN W8TNO W8TOM W8TOP W8TU W8TVO W8TWA W8TZA W8UD W8UE W8UE/2 W8UF W8UFO W8UL W8ULM W8UM W8UMH W8UN W8USA W8UV W8UVZ W8UZ W8VCI W8VCK W8VI W8VK W8VKD W8VO W8VP W8VPV W8VS W8VVE W8VY W8WA W8WCQ W8WD W8WDR W8WDW W8WE W8WEJ W8WFC W8WGT W8WLK W8WOJ W8WOM W8WTD W8WTS W8WVU W8WY W8XC W8YCM/6Y5 W8YF W8YFL W8YG W8YU W8YV W8ZA W8ZC W8ZHO W8ZJT W8ZN W8ZPF W8ZR W9/G4DBL W9/NP2I W9ACB W9ACE W9AEB W9AEM W9AIU W9AJM W9AKS W9AMM W9AN W9AQ W9ARO W9ARS W9ATB W9ATU W9AV W9AWE W9AWX W9AZ W9BEA W9BF W9BGJ W9BGX W9BK W9BM W9BNO W9BP W9BU W9BWR W9CA W9CC W9CDX W9CF W9CHD W9CJO W9CLL W9CN W9CO W9CPV W9CQG W9CSX W9CTJ W9DAD W9DC W9DCA W9DCS W9DHD W9DKB W9DTO W9DUP W9DX W9DZ W9EAU W9EBE W9EBV W9EJB W9EV W9EVT W9EWZ W9EX W9EXP W9FAM W9FFA W9FI W9FLH W9FPA W9FPZ W9FR W9FV W9FX W9FY W9FZ W9GD W9GE W9GEB W9GFB W9GG W9GHX W9GIG W9GIV W9GL W9GLG W9GM W9GS W9GT W9GVW W9GY W9GYA W9GYK W9HAK W9HAM W9HB W9HBH W9HHX W9HLA W9HLY W9HM W9HPJ W9HT W9HZ W9IE W9IFW W9II W9IIX W9IK W9IKU W9IL W9ILF W9ILY W9IPR W9ITV W9IU W9IV W9JA W9JEF W9JET W9JF W9JFK W9JGV W9JH W9JJB W9JJT W9JL W9JLW W9JN W9JOE W9JP W9JP/100 W9JSN W9JTG W9JWC W9JXN W9KAY/5 W9KB W9KEY W9KHH W9KK W9KP W9KVR W9KXQ W9KY W9KZ W9LC W9LCL W9LD W9LDX W9LGI W9LHG W9LMB W9LO W9LP W9LR W9LSD W9LU W9LW W9MAF W9MAK W9MAR W9MBL W9MC W9MDG W9MGB W9MIC W9MJ W9MK W9MKS W9MMZ W9MNC W9MO W9MQB W9MS W9MSE W9MSL W9MU W9MVA W9MXQ W9NAA W9NAW W9NBG W9NC W9NE W9NED W9NGA W9NHX W9NJM W9NJY W9NON W9NWY W9NXM W9NY W9NZ W9OA W9OA/9 W9OAB W9OD W9OFQ W9OG W9OL W9OO W9OOO W9OP W9OS W9OSI W9OY W9PA W9PA/4 W9PDS W9PL W9PN W9PRD W9PSE W9QF W9QL W9QO W9QQ W9RE W9REA W9RF W9RFX W9RGB W9RIT W9RK W9RM W9RN W9RNK W9RNY W9ROB W9ROG W9RPM W9RR W9RTF W9RUK W9RWB W9RWF W9RWS W9SDX W9SE W9SLB W9SMC W9SN W9SUN W9SWT W9SX W9SZ W9TB W9TC W9TE W9TN W9TOC W9TS W9TT W9TTY W9TVX W9TW W9TY W9UAL W9UBP W9UBT W9UD W9UIH W9UK W9UKB W9UM W9UX W9VA W9VCF W9VCL W9VH W9VHL W9VNE W9VQ W9WDW W9WGN W9WGV W9WI W9WJ W9WJM W9WLX W9WO W9WS W9WTF W9XA W9XG W9XN W9XS W9XT W9XY W9YA W9YAC W9YB W9YE W9YK W9YOY W9YS W9YSX W9YX W9YXX W9ZCL W9ZE W9ZJ W9ZJX W9ZL W9ZR W9ZSJ W9ZV WA0AAM WA0ACF WA0AUX WA0AVL WA0BJR WA0BNX WA0BSW WA0CED WA0CRI WA0CSL WA0CTZ WA0DDC WA0DE WA0DGW WA0DKC WA0EBZ WA0FAA WA0FQK WA0GMH WA0GUD WA0HHX WA0HQQ WA0HRC WA0ILD WA0IYY WA0JCO WA0JH WA0JIM WA0JRD WA0JZK WA0KDS WA0KNP WA0LJM WA0LPV WA0LRE WA0MHJ WA0N WA0NLK WA0OFM WA0PFC WA0PNB WA0QJE WA0QVC WA0RB WA0RBW WA0RIM WA0RKQ WA0RSX WA0SHK WA0SKN WA0SMX WA0SXV WA0TPN WA0USA WA0VPJ WA0VQY WA0VSW WA0WDV WA0WOV WA0WWW WA0WWW/7 WA0YEI WA0YSL WA0ZDE WA1APX/8 WA1AR WA1BR WA1BXY WA1CQF WA1DBR WA1DRQ WA1EHK WA1EMG WA1EOX WA1ERJ WA1ESO WA1F WA1FCN WA1FDP WA1FOK WA1FVJ WA1FXK WA1GOS WA1GPO WA1HEW WA1HFF WA1HRH WA1IIE WA1IVN WA1JMP WA1KKM WA1LJD WA1LWS WA1LWS/3 WA1MAD WA1MTI WA1N WA1NPZ WA1NRA WA1NRQ WA1OEJ WA1OTZ WA1OUI WA1PCY WA1PMA WA1Q WA1QDP WA1QYM WA1RR WA1S WA1SAZ WA1SKQ WA1SVS WA1SYH WA1T WA1TAC WA1TCA WA1TTL WA1TUT WA1UJU WA1UZO WA1UZX WA1VIL WA1WOK WA1YZN WA1Z WA1ZAM WA1ZYX WA2AAW WA2ACV WA2AIC WA2ALY WA2AXD WA2AXO WA2BCK WA2BFW WA2BJN WA2BLE WA2BMH WA2BQU WA2BXY WA2C WA2CCN WA2CP WA2DFP WA2DIY WA2DKJ WA2EMF WA2EQF WA2ERR WA2ETU WA2EXZ WA2FAX WA2FBN WA2FON WA2FTC WA2GBF WA2HIP WA2HMB WA2HMM WA2HOM WA2HQL WA2HYO WA2HZO WA2HZS WA2IID WA2IIE WA2IKL WA2IVN WA2JLW WA2JQK WA2JQZ WA2KDE WA2KEK WA2KHO WA2LET WA2LLN WA2LOT WA2LTH WA2LXE WA2MAV WA2MBP WA2MCR WA2MFU WA2MUA WA2NBG WA2NCF WA2NDV WA2NHA WA2NYY WA2NZA WA2OAX WA2OCG WA2OMT WA2OOB WA2P WA2PJI WA2PNI WA2PYX WA2QAU WA2QIN WA2QQF WA2RAS WA2RKO WA2RVJ WA2RXS WA2SCB WA2SES WA2SNA WA2SON WA2SVM WA2TDE WA2TIY WA2TMC WA2TMF WA2TRF WA2TVS WA2UBK WA2UFD WA2USA WA2VAX WA2VJL WA2VQF WA2VQV WA2VUM WA2VUN WA2VUY WA2VYA WA2VZQ WA2WDT WA2WDT/W3 WA2WGF WA2WMJ WA2WVL WA2YCP WA2YSJ WA2ZVN WA3A WA3AAN WA3AER WA3AFS WA3AUM WA3C WA3COM WA3DMD WA3DMT WA3DQS WA3EJL WA3EKL WA3ELQ WA3EOQ WA3EQJ WA3F WA3FET WA3FRP WA3FWA WA3GGM WA3GM WA3GOS WA3GYW WA3HAE WA3HGW WA3HVR WA3IHV WA3IIA WA3IVV WA3JMV WA3JPY WA3KCP WA3KKB WA3KVN WA3KYY WA3LAB WA3LKT WA3LWR WA3MD WA3MDY WA3MEJ WA3MIX WA3OFC WA3OPY WA3PFA WA3RGH WA3RHW WA3RNC WA3RSL WA3SEE WA3SOR WA3SRU WA3SWJ WA3SXX WA3TD WA3THL WA3TMR WA3TOY WA3UCR WA3USG WA3UYJ WA3V WA3WLH WA3WNT WA3WOM WA3WZR WA3YKI WA3YMM WA3YRI WA3YZD WA3ZHG WA3ZMH WA3ZSC WA3ZTR WA3ZWC WA4ALA WA4AMG WA4AN WA4APB WA4ASJ WA4AXT WA4BCS WA4BQM WA4BUO WA4CAX WA4CQ WA4CQG WA4CR WA4DBY WA4DJ WA4DT WA4DXP WA4EEZ WA4ELW WA4EMU WA4ETI WA4EUL WA4FG WA4FXT WA4GBU WA4GGK WA4GIF WA4GQG WA4GZK WA4HHG WA4HMR WA4HXC WA4ICK WA4III WA4ILO WA4JA WA4JJY WA4JQS WA4JUK WA4JYK WA4KNP WA4KSO WA4KWK WA4KXX WA4KY WA4LLL WA4LMG WA4MCM WA4MIT WA4MLD WA4MQW WA4MYO WA4NIV WA4NMS WA4NUF WA4NZD WA4OAB WA4OTD WA4OZF WA4PGM WA4PIG WA4PKL WA4PSC WA4PSO WA4REE WA4RNN WA4RTE WA4SSG WA4TA WA4TII WA4TL WA4TT WA4UFG WA4USA WA4UWD WA4UYW WA4VEK WA4VGZ WA4VKA WA4VKD WA4VMC WA4WKL WA4WPD WA4WTG WA4WW WA4YBC WA4YBP WA4YDK WA4YHA WA4YIZ WA4YJB WA4ZNY WA4ZOF WA4ZOF/KH6 WA4ZPZ WA4ZSQ WA4ZXV WA4ZZ WA5ABR WA5AFD WA5BDU WA5BJB WA5BKN WA5CMI WA5DSS WA5DTK WA5FWC WA5ICA WA5IRC WA5IYX WA5JAN WA5KGW WA5KSC WA5LFD WA5LIS WA5LOU WA5MS WA5NFC WA5NNV WA5NOM WA5OEN WA5OYU WA5PAF WA5PFJ WA5POK WA5POK/4 WA5PSV WA5RML WA5SAT WA5SNL WA5SOG WA5SWN WA5TEF WA5TVO WA5TYJ WA5VGI WA5WA WA5WFE WA5YNE WA5YOM WA5ZFP WA5ZKO WA5ZUP WA6AEE WA6APQ WA6AUP WA6BJH WA6BKR WA6CAL WA6CDR WA6DBC WA6DIL WA6EJO WA6ERA WA6FFJ WA6FGV WA6FWN WA6FXT WA6G WA6GFR WA6GXQ WA6HFP WA6HZY WA6IAF WA6IQO WA6JRZ WA6KHK WA6KJV WA6KYR WA6LDI WA6LIE WA6LJS WA6LOC WA6MHZ WA6MM WA6MRK WA6NEQ WA6NFJ WA6NHC WA6NKM WA6NPA WA6NPC WA6O WA6OSX WA6POZ WA6PPX WA6PSI WA6PWP WA6PY WA6QYS WA6RYA WA6SCW WA6ST WA6TLA WA6TLL WA6TMY WA6TQT WA6URY WA6UXA WA6VHU WA6WGS WA6WPG WA6ZTY WA7AA WA7AJ WA7AMJ WA7AR WA7BME WA7BNG WA7BNM WA7BZI WA7DCG WA7DIA WA7DUH WA7DX WA7FUS WA7G WA7GCS WA7HJV WA7HJV/9 WA7HR WA7IGV WA7IIR WA7IR WA7ITZ WA7JHQ WA7JT WA7JTM WA7JUJ WA7KSJ WA7LAW WA7LNW WA7LT WA7MLH WA7MMM WA7NB WA7NBU WA7ND WA7NPX WA7NVT WA7NWL WA7OJA WA7PRC WA7PVE WA7QOK WA7RCT WA7RLL WA7RS WA7RZW WA7SCH WA7SHP WA7SRZ WA7TC WA7TNT WA7TOY WA7U WA7UQV WA7UTM WA7XX WA7YAZ WA7YUL WA7YXY WA7ZWD WA8A WA8AEN WA8AXF WA8BIJ WA8CDU WA8CLT WA8COB WA8DXB WA8EQP WA8FRE WA8FTA WA8FZZ WA8HSB WA8IUS WA8KAN WA8KHP WA8KIW WA8KKN WA8KQQ WA8LE WA8LOW WA8M WA8MCD WA8MKY WA8NSS WA8OJR WA8OLD WA8PGE WA8QYJ WA8QZS WA8RCN WA8REI WA8RJF WA8RM WA8RPK WA8RQU WA8RRA WA8RSA WA8SAN WA8SDF WA8SHP WA8TJL WA8TON WA8TWM WA8UEG WA8UMT WA8UPB WA8VPN WA8VTD WA8WZG WA8Y WA8YVF WA8YWG WA8ZBT WA8ZIP WA8ZTZ WA9AFM/5 WA9AGG WA9APL WA9AQN WA9ASZ WA9AXQ WA9BZW WA9CFK WA9CUK WA9CWX WA9DKO WA9DU WA9ETL WA9ETW WA9FET WA9FFV WA9FIH WA9FRU WA9FWT WA9GBC WA9HED WA9IVH WA9JBR WA9JHH WA9JIB WA9JM WA9JWL WA9KUX WA9LEY WA9LJK WA9LKF WA9LKZ WA9MAG WA9NJR WA9OEC WA9OEX WA9PIE WA9PIJ WA9RAY WA9RCQ WA9RVM WA9SRO WA9TOP WA9TTC WA9URF WA9WFA WA9WJJ WA9WSJ WA9YI WA9YKK WA9YTQ WA9ZBV WA9ZBW WA9ZWL/6 WB0AOD WB0B WB0CFF WB0CJB WB0CLL WB0DHB WB0DSF WB0EBG WB0GBI WB0GKH WB0ISK WB0IWG WB0IZO WB0JDK WB0KFC WB0KGN WB0KIU WB0KWJ WB0LJK WB0LTE WB0M WB0MCO WB0MNW WB0N WB0NRE WB0O WB0OEW WB0PGZ WB0POH WB0PTO WB0PYF WB0QIR WB0QLU WB0RUR WB0SD WB0SMS WB0SND WB0SNF WB0SOK WB0SSC WB0TEV WB0TEV/5 WB0TKL WB0TML WB0TUA WB0TVY WB0U WB0UKI WB0ULX WB0USI WB0VAK WB0VHF WB0WIE WB0WQS WB0X WB0YEA WB0YYE WB0ZNY WB0ZRD WB0ZWW WB1ADY WB1AEL WB1ASL WB1BUZ WB1DBY WB1DMZ WB1DXD WB1EAZ WB1FVY WB1GCM WB1GQR WB1M WB1P WB1Z WB2AA WB2ABD WB2AFA WB2AIV WB2AMU WB2AQC WB2ART WB2AZE WB2BTJ WB2BTO WB2COY WB2ELD WB2ELW WB2ETR WB2FTQ WB2FUE WB2GHV WB2GJD WB2HJV WB2HPR WB2HRK WB2HRO WB2HTO WB2IDV WB2IOL WB2IVN WB2JEP WB2JFP WB2JIN WB2JNA WB2JOB WB2JUF WB2JVB WB2KAO WB2KEC WB2KEK WB2KHE WB2KLD WB2KSK WB2KSP WB2KXC WB2LMA WB2LPC WB2LSI WB2MKX WB2MZI WB2NFL WB2NJN WB2NVR WB2NWR WB2OMZ WB2OQQ WB2P WB2PEF WB2PJH WB2QJ WB2R WB2RAT WB2RBS WB2REI WB2REM WB2RFV WB2RHM WB2RRF WB2RTG WB2RUU WB2RYV WB2SCT WB2SIH WB2SMK WB2SXY WB2TCV WB2TPS WB2TQE WB2TSL WB2TSV WB2TT WB2TUA WB2UDC WB2UFF WB2UFO WB2UKX WB2UYN WB2VUO WB2WIK WB2WPM WB2Y WB2YZX WB2ZAB WB2ZDD WB2ZEI WB2ZEX WB3AFS WB3AGB WB3AVD WB3AVN WB3AZL WB3BEL WB3BSA WB3CCW WB3CII WB3CJU WB3CQD WB3CQM WB3D WB3DEL WB3DOM WB3DPL WB3DYE WB3EHS WB3EML WB3ESR WB3EVZ WB3EWL WB3FAE WB3FBR WB3FSR WB3IFD WB3IZF WB3JFS WB3JIS WB3JKQ WB3JVD WB3K WB3LGC WB3LHD WB3T WB4AAA WB4AWM WB4AXZ WB4BIN WB4BQX WB4BYQ WB4C WB4CHS WB4CMB WB4CTX WB4DBO WB4DKQ WB4DNL WB4EEH WB4EHG WB4EWS WB4FDT WB4FEV WB4FSF WB4FSV WB4FWQ WB4GHZ WB4GLI WB4GVZ WB4HDC WB4HDM WB4HMA WB4HRH WB4HUC WB4ILW WB4IT WB4IUY WB4JC WB4JFS WB4JTT/KH6 WB4KDI WB4KFO WB4KLI WB4KTF WB4KUU WB4KZI WB4LLV WB4LMH WB4M WB4MDX WB4MM WB4MNK WB4MSG WB4MSN WB4NCT WB4NPK WB4OMM WB4OQX WB4OSS WB4P WB4PPW WB4PWZ WB4QNG WB4RFQ WB4RRD WB4SIA WB4SON WB4SPB WB4SRO WB4TDH WB4VEJ WB4VMH WB4VMP WB4VYH WB4WXE WB4YDL WB4YDM WB4YDY WB4YZ WB4YZA WB4ZBI WB4ZXS WB5AAA WB5AAR WB5ASP WB5BEK WB5DO WB5EIN WB5GNR WB5HAM WB5HOW WB5JC WB5JHY WB5JJJ WB5K WB5KIA WB5LAI WB5LXJ WB5MXO WB5NHL WB5NIN WB5NOQ WB5OSD WB5OZA WB5PDZ WB5Q WB5QNA WB5R WB5RYB WB5STU WB5TKI WB5TOI WB5TUF WB5VYR WB5VZL WB5WAJ WB5XX WB6AAJ WB6ASQ WB6BDD WB6BEE WB6BET WB6BFG WB6CIA WB6CKT WB6CLZ WB6CZG WB6DJI WB6EGP WB6ETY WB6EWM WB6FVE WB6FWS WB6GCL WB6HVW WB6HYH WB6I WB6JJJ WB6JNN WB6JSB WB6JVP WB6KQA WB6KWL WB6L WB6MAX WB6MIO WB6MKS WB6MMQ WB6NBU WB6NER WB6NJA WB6NNQ WB6NOA WB6NVB WB6OEE WB6OJB WB6OTS WB6OVH WB6OWZ WB6PJC WB6PSY WB6PVU WB6QCS WB6QPG WB6QQU WB6RAB WB6RIG WB6RJH WB6RSE WB6SKS WB6SRP WB6TYP WB6UQT WB6UTW WB6VYH WB6WSQ WB6YIY WB6Z WB6ZAM WB6ZXX WB7A WB7AAV WB7AKE WB7ATA WB7B WB7BBQ WB7BBU WB7CYO WB7DDI WB7DJR WB7FHC WB7FJG WB7GR WB7JEP WB7OTL WB7PMP WB7PTF WB7PVL WB7Q WB7QMR WB7QXU WB7RCL WB7RUK WB7S WB7SS WB7TIR WB7TVS WB7USJ WB7UZO WB7W WB7X WB8AHT WB8AKW WB8ART WB8AXK WB8B WB8BIL WB8BNX WB8BPU WB8BZK WB8CLX WB8CQV WB8DC WB8EJN WB8EKG WB8EYE WB8FSV WB8FVB WB8IMY WB8JAY WB8JUI WB8K WB8LCD WB8LEM WB8MIW WB8NTA WB8NUT WB8NXG WB8O WB8ODF WB8QXH WB8R WB8RAE WB8RDN WB8REI WB8RFB WB8ROL WB8SBI WB8SJM WB8SKP WB8TDG WB8TLI WB8TNN WB8TQZ WB8UJS WB8VGE WB8VLC WB8VLO WB8WKQ WB8WNF WB8WNV WB8YHD WB8YJF/4 WB8YLO WB8YOK WB8YQJ WB8YYY WB8ZRL WB8ZRY WB8ZZR WB9AYW WB9B WB9BWP WB9CIF WB9COY WB9CTP WB9DBD WB9DKL WB9EDL WB9EDP WB9EEE WB9EFP WB9EXL WB9FBO WB9FIP WB9FMC WB9FMR WB9FOP WB9G WB9G/4 WB9HFK WB9IRF WB9IWN WB9IXS WB9JNZ WB9JOX WB9JPS WB9JPS/6 WB9JYZ WB9K WB9KPT WB9LRK WB9LUR WB9MEP WB9MSM WB9MYQ WB9NHV WB9NMN WB9NOO WB9OJE WB9ONU WB9PAR WB9PUB WB9QAF WB9QDL WB9QVR WB9SBD WB9SFG WB9SJZ WB9TAE WB9TFH WB9TJD WB9TRJ WB9UGX WB9UJS WB9UWA WB9VGO WB9VKZ WB9WKT WB9WOZ WB9YJE WB9YTG WB9Z WC0G WC0N WC0W WC0WB WC1M WC1P WC1X WC2C WC2FD WC2K WC2L WC2W WC3A WC3N WC3O WC3Q WC3W WC4E WC4EM WC4H WC4X WC5B WC5D WC5P WC5W WC6DX WC6H WC6S WC7CW WC7Q WC7S WC7WB WC8P WC8VOA WC8Z WC9C WC9N WD0BC WD0BGZ WD0BMR WD0BMS WD0CNZ WD0DMO WD0EBZ WD0EDK WD0FAA WD0GTY WD0HHJ WD0L WD0MR WD0T WD0TBE WD0X WD1H WD1M WD1S WD1V WD1W WD2B WD2F WD3B WD3C WD3K WD4AHZ WD4AVY WD4BDS WD4CTP WD4DC WD4DTI WD4ED WD4ELG WD4EOG WD4ESX WD4EXG WD4FNY WD4GBW WD4GPO WD4GXT WD4HBC WD4ISK WD4IXD WD4JJ WD4K WD4KGC WD4KHI WD4KTF WD4LAZ WD4LBR WD4LTF WD4LUR WD4LYV WD4MRT WD4MSM WD4NGB WD4OAZ WD4OHD WD4OIN WD4OJM WD4PG WD4SEU WD5ABC WD5ACR WD5AGO WD5BJT WD5BKV WD5BZN WD5CAW WD5CAY WD5CCA WD5COV WD5CVN WD5DBV WD5DJW WD5DZC WD5F WD5FGZ WD5GBD WD5GBS WD5HIO WD5HJF WD5IQR WD5IYT WD5JNC WD5K WD5R WD5USA WD6DX WD6FF WD6R WD7DX WD7I WD7K WD8AFB WD8AHR WD8ANZ WD8BAH WD8BP WD8CRQ WD8CW WD8DSB WD8DYO WD8E WD8EBS WD8EOL WD8H WD8IIR WD8IOU WD8IXC WD8JLD WD8JP WD8JQN WD8KNC WD8KND WD8KQX WD8KYW WD8LQT WD8NHA WD8OSE WD8OSS WD8PBF WD8PRM WD8QGE WD8QKJ WD8RIF WD8RUW WD8RWI WD8RYC WD8S WD8TD WD8W WD8Y WD9ABG WD9APQ WD9CIR WD9CVI WD9DZV WD9E WD9ERO WD9EZB WD9F WD9FJL WD9FMB WD9FTZ WD9GJK WD9GMK WD9GNF WD9GUT WD9HBC WD9HSY WD9HZK WD9IGY WD9IQN WD9ISQ WD9IVE WD9Q WE0G WE0Q WE0R WE1P WE2N WE2T WE2W WE3C WE3C/4 WE3ST WE4H WE4I WE4M WE4S WE5DX WE5E WE5ST WE5V WE6C WE6EZ WE6L WE6M WE6Z WE7H WE7OMG WE7P WE8J WE8P WE8R WE8UPJ WE9A WE9N WE9R WE9V WF0C WF0GM WF0RT WF0T WF1G WF1H WF1L WF2B WF2D WF2S WF2V WF2W WF3A WF3C WF3J WF3M WF4B WF4U WF4W WF5E WF5K WF5W WF5X WF6C WF6F WF6Q WF7L WF7T WF8E WF9A WF9V WG0G WG0I WG0M WG0U WG0Y WG1X WG2B WG2Y WG3C WG3J WG4M WG5F WG5G WG5H WG7X WG7Y WG8Y WG9L WG9V WH2DX WH6DZP WH6DZX WH6E WH6LE WH6LU WH6OR WH6R WH7AA WH7DX WH7GG WH7H WH7M WH7W WH7Z WI0WA WI1G WI1I WI1S WI2A WI2E WI2LYP WI2W WI3J WI3R WI3V WI3Y WI4A WI4L WI4R WI4T WI4USA WI5ID WI5P WI6I WI6Q WI6R WI6T WI7J WI7N WI7U WI8G WI9B WI9FLY WI9H WI9RAH WI9WI WI9X WI9Z WJ0J WJ0T WJ1B WJ1R WJ1X WJ2D WJ2O WJ3P WJ4HCP WJ4N WJ6T WJ6Y WJ7H WJ7U WJ8Y WJ9B WJ9E WJ9X WK0N WK0P WK1D WK1J WK1O WK1Q WK2G WK2H WK2P WK2T WK2V WK2X WK3A WK3T WK3V WK4AA WK4CW WK4J WK4LR WK4P WK4U WK4WK WK4Y WK5T WK6I WK6RF WK7G WK7P WK7S WK9J WK9U WK9V WL7AUV WL7BDO WL7BKA WL7CG WL7E WL7F WL7N WL7O WL7OU WL7YQ WM0CW WM0L WM1F WM1K WM1V WM2W WM2Z WM3T WM3X WM4AA WM4D WM4DE WM4G WM4P WM4U WM5DX WM5H WM5O WM5Q WM5TS WM6H WM6P WM6Q WM7C WM7D WM7H WM7X WM7Y WM7Z WM8C WM8W WM9F WM9I WM9Q WN0DRC WN0L WN0X WN1E WN1G WN1GIV WN1X WN2DX WN2E WN2IHJ WN2O WN3I WN3N WN4AFP WN4AT WN4JC WN4N WN4R WN4S WN5G WN5GBX WN5TL WN5V WN6E WN6K WN6M WN6W WN7L WN7RRX WN7T WN7Y WN8QGV WN8R WN8U WN9GDX WN9M WN9MFC WN9O WN9Q WN9VMR WN9ZWC WO0C WO0KEE WO1I WO1N WO1X WO2H WO2M WO2N WO2Q WO2T WO2X WO2Y WO3H WO3O WO3P WO3T WO3Z WO4D WO4DX WO4L WO4MW WO4O WO4R WO5I WO5R WO7A WO7R WO7T WO7V WO8HIO WO8J WO8USA WO9B WO9G WO9S WO9U WO9Z WP2/WA0ROI WP2/WC3W WP2/WQ6X WP2AA WP2B WP2NN WP2XX WP2Z WP3A WP3C WP3CW WP3DX WP3E WP3EF WP3GW WP3R WP3UX WP3Y WP4AOO WP4AZT WP4BJU WP4CL WP4D WP4DMN WP4DT WP4EHK WP4EJH WP4F WP4GUH WP4I WP4IZI WP4JCF WP4L WP4MTS WP4NIX WP4NQR WP4NXO WP4OFO WP4ONJ WP4PGY WP4Q WP4SD WP4SK WP4U WP4WW WP4X WQ1C WQ1H WQ2N WQ3E WQ3G WQ3N WQ3P WQ3U WQ3X WQ4F WQ4RP WQ4S WQ5C WQ5L WQ5N WQ5O WQ5R WQ6C WQ6K WQ6X WQ7A WQ7K WQ7L WQ7R WQ7X WQ8Q WQ8RP WQ9T WR0N WR0U WR1B WR1E WR1Q WR1ST WR1TC WR1U WR2G WR2K WR3L WR3O WR3R WR3T WR3Y WR3Z WR4A WR4B WR4F WR4I WR4JW WR4K WR5G WR5J WR5O WR5U WR6DX WR6K WR7K WR7Q WR7X WR8TC WR9AN WR9D WR9L WR9Y WS0Q WS0WA WS0Z WS1C WS1D WS1SM WS2E WS2U WS2W WS3C WS3S WS4AM WS4C WS4DX WS4F WS4H WS4WW WS4Y WS5C WS5H WS5K WS5K/KH8 WS5W WS6K WS6K/8 WS6X WS7I WS7L WS7N WS7V WS7X WS8K WS8KCC WS9E WS9H WS9I WS9K WS9M WS9M/6 WS9V WS9W WS9X WT0A WT0J WT0O WT1A WT1B WT1M WT2P WT3H WT3Q WT4BT WT4O WT4P WT4Y WT5L WT5RZ WT6A WT6H WT6K WT6P WT7D WT7O WT7TT WT8C WT8E WT8N WT8V WT8X WT9B WT9Q WT9U WU0A WU0L WU1E WU1ITU WU2B WU2G WU2M WU2O WU2Q WU2SWS WU2T WU2X WU3A WU3B WU3O WU3U WU4B WU4G WU5E WU5X WU6C WU6TT WU6W WU6X WU7F WU7Q WU8P WU8R WU8Y WU9B WU9D WU9F WV0BEN WV0CQ WV0H WV0Q WV1H WV1K WV1M WV1N WV2C WV2H WV2M WV2ZOW WV4ED WV4H WV4L WV4R WV4TN WV4V WV4Y WV5D WV5Y WV6E WV6N WV7H WV7Q WV8A WV8JBH WV8P WV9E WV9Y WW0AU WW0E WW0K WW0SS WW0WWW WW0Z WW1DX WW1M WW1ME WW1MM WW1USA WW1WW WW2CW WW2DX WW2E WW2IND WW2NC WW2O WW2P WW2PT WW2V WW2Y WW3N WW3QB WW3S WW3Y WW4A WW4B WW4CP WW4DD WW4E WW4JF WW4LL WW4N WW4R WW4SF WW5TT WW6D WW6G WW6M WW6O WW6OR WW6RG WW7B WW7D WW7Q WW7RY WW7Y WW8OH WW8Q WW8RR WW9DX WW9F WW9R WX0B WX0E WX0EK WX0U WX0V WX0Z WX1MAN WX1O WX1S WX2F WX2I WX2N WX2S WX2T WX2U WX3B WX3F WX3G WX3K WX3MAS WX3P WX3SKY WX4A/KP4 WX4B WX4CAZ WX4ET WX4F WX4G WX4MLB WX4MT WX4Q WX4RM WX4US WX4X WX5BA WX5W WX6/SM3EVR WX6B WX6V WX7A WX7B WX7E WX7G WX7JM WX7L WX7M WX7MB WX7SJ WX7T WX8C WX8F WX8G WX8J WX8NN WX8V WX9E WX9EMS WX9EP WX9HV WX9TOM WX9U WX9Z WY0A WY0Q WY0V WY1C WY2E WY2U WY3A WY3P WY4I WY5I WY6DX WY6N WY7AA WY7ET WY7FD WY7GC WY7I WY7JR WY7KY WY7SS WY8DX WY8I WY9S WY9T WY9V WZ0R WZ1F WZ1R WZ1V WZ2L WZ2MM WZ2T WZ4DAY WZ4F WZ4L WZ4P WZ6G WZ6P WZ6T WZ6X WZ6Z WZ6ZZ WZ7E WZ7U WZ7Z WZ7ZR WZ8D WZ8DX WZ8I WZ8P WZ8T WZ9B WZ9Z XE1AC XE1AO XE1AY XE1B XE1BY XE1CQ XE1CRG XE1CT XE1CTJ XE1CWJ XE1EE XE1ETY XE1FXM XE1GK XE1GXG XE1GXJ XE1GYZ XE1GZU XE1H XE1HG XE1HON XE1IM XE1KK XE1LM XE1MEX XE1MM XE1NVA XE1OGG XE1RBV XE1RCS XE1REF XE1REW/XE2 XE1RF XE1RP XE1RZL XE1SDK XE1SGW XE1SVT XE1TD XE1UL XE1USG XE1UYS XE1V XE1VY XE1XOE XE1XR XE1XZQ XE1ZTW XE1ZW XE2AA XE2AU XE2B XE2BY XE2CQ XE2D XE2ES XE2EX XE2FGC XE2FL XE2G XE2HQI XE2HUQ XE2IC XE2IF XE2JA XE2JOC XE2JS XE2JUM XE2K XE2KEC XE2KHS XE2KJ XE2LVM XE2ML XE2MVY XE2MX XE2MXZ XE2N XE2NB XE2NBW XE2NL XE2O XE2OK XE2PDZ XE2PMG XE2PXZ XE2S XE2ST XE2TH XE2TPJ XE2TZP XE2X XE2YWH XE2YWI XE3D XE3DX XE3N XE3WAO XE3WMA XE7S XF1T XL3A XL3T XP1A XP1AB XP2I XP3A XQ1CR XQ1KZ XQ1TUW XQ1UIC XQ3BPC XQ3ON XQ3PC XQ3UP XQ4CW XQ6BQ XQ7UP XR1C XR1DA XR1H XR2V XR3A XR3HQ XR3O XR3P XR3Y XR6T XT2FCJ XU7AEZ XU7TZG XV2G XV2RZ XV4Y XV5HS XV9NPS XW0YJY XW0ZJZ XW1IC XW4YT XX9LT XX9O XX9R XZ1J YB0AI/7 YB0AJZ YB0ANN YB0AZ YB0COU YB0COX YB0DJ YB0ECT YB0IBM YB0JS YB0JZS YB0MWM YB0MZI/4 YB0NDT YB0NFL YB0NSI YB0OHG YB1AQD YB1AR YB1BGI YB1BML YB1BRS YB1C YB1EGP YB1FWO YB1JYL YB1KI YB1LZ YB1PEF YB1TJ YB1TS YB1UUN YB2BBY YB2CPO YB2DX YB2ECG YB2EMK YB2ERL YB2FWQ YB2LSR YB2TJV YB2TX YB2WWW/5 YB3EDD YB3FBZ YB3IZK YB3MM YB3MM/8 YB3ZP YB4IR YB4IR/7 YB5BOY YB5EHQ YB5QZ YB6DE YB6EI YB6IXJ YB6LAY YB6VK YB7SKM YB7XO YB8ADX YB8BRI YB8C YB8CIM YB8EDO YB8FIJ YB8FL YB8HI YB8HZ YB8IBD YB8QF YB8ROP YB8RW YB8RXA YB8SI/0 YB8SNX YB8TK YB8ZCM YB8ZL YB9/HA3JB YB9BON YB9GV YB9KA YB9WAN YB9WZJ YB9Y YC0IEM YC0KBE YC0LOU YC0NDN YC0OST YC0QR YC1BFZ YC1BJX YC1CWK YC1DOL YC1DPM YC1EGP YC1HLT YC1LA YC1ME YC1NOE YC1PAG YC1UUU YC2BYC YC2FAJ YC2LEV YC2MDU YC2NBY YC2NDX YC2SBG YC2TDA YC3ELS YC3SIF YC3TKH YC5OO YC6MYO YC8RBI YC8ROP YC8TWE YC8UTI YC8VRA YC9GWR YC9VL YC9WIC YD1ARM YD1DPM YD1GCL YD1MRI YD1NAA YD2MDU YD2NDX YD4IRS YD9RWY YD9SBP YE0HQ YE1C YE1GD YE1K YE1NZ YE1ZAL YE1ZAT YE2A YE2C YE2R YE2W YE3AA YE4IJ YF1AR YF3BPL YG3BPL YJ0OU YJ0X YL0Y YL1S YL1WT YL1XN YL1YI YL1ZT YL1ZX YL2014C YL2014G YL2014W YL2014Z YL2AG YL2BJ YL2BR YL2CA YL2CF YL2CI YL2CP YL2CV YL2CZ YL2EC YL2GD YL2GJR YL2GP YL2GQG YL2GUV YL2HK YL2II YL2IP YL2JR YL2JZ YL2KF YL2KO YL2LW YL2NK YL2NN YL2ON YL2PA YL2PJ YL2PP YL2PZ YL2QN YL2QV YL2SM YL2SW YL2TD YL2TQ YL2UI YL2VW YL390UI YL3AD YL3CU YL3CW YL3DJ YL3FO YL3FP YL3FT YL3FW YL3FX YL3GAZ YL3GDM YL3GIR YL3GU YL3GV YL3GX YL3ID YL3IR YL3IZ YL4A YL4HQ YL4U YL5T YL5W YL5X YL6W YL6Z YL7A YL7X YL8M YL9T YM1KD YM1KT YM2KA YM2KK YM2KQ YM3KB YM3KM YM4KT YM7KA YM7KK YM8KRD YN2AA YN2CC YN2GY YN2NC YN2RP YN3M YN5SU/4 YN5Z YN7SU YN9SU YO/OH2HOD YO2ADQ YO2AQB YO2AQO YO2BBX YO2BLX YO2CJX YO2CMI YO2DFA YO2DGR YO2GL YO2II YO2IS YO2KJI YO2KJJ YO2LAN YO2LCP YO2LDU YO2LEA YO2LEL YO2LFP YO2LGX YO2LIE YO2LIM YO2LIW YO2LXW YO2MBG YO2MBU YO2MCK YO2MFC YO2MHF YO2MHJ YO2MJZ YO2MKI YO2MKL YO2MLS YO2MNE YO2MOH YO2MPE YO2MSP YO2MTG YO2NAA YO2QY YO2RR YO2SH YO3AAJ YO3AIS YO3APJ YO3BA YO3BIZ YO3CBZ YO3CCC YO3CEN YO3CVG YO3CZW YO3DAC YO3DDZ YO3DLK YO3EOV YO3FF YO3FFF YO3FGO YO3FOM YO3FOU YO3FRI YO3FVR/P YO3GCL YO3GD YO3GFH YO3GGO YO3GLW YO3GNF YO3HA YO3HOT YO3IFX YO3IMD YO3IPR YO3IZT YO3JF YO3JOS YO3JR YO3JV YO3JW YO3LW YO3ND YO3RU YO3VU YO3YV YO3YX YO4AAC YO4AH YO4AJ YO4AR YO4ASD YO4ATW YO4AUL YO4BEW YO4BEX YO4BXX YO4CAH YO4CAI YO4CAS YO4CSL YO4CVT YO4CVV YO4DCF YO4DI YO4DW YO4FKO YO4FTE YO4FZX YO4GM YO4GPC YO4GVC YO4HAB YO4HHP YO4KAK YO4KCC YO4MM YO4PX YO4RDW YO4RIU YO4RIW YO4RST YO4RXX YO4SI YO4TL YO4UQ YO4US YO5AIR YO5AJR YO5ALI YO5AM YO5AVN YO5AXF YO5BLA YO5BMT YO5BQQ YO5BRE YO5BRZ YO5BXI YO5BYV YO5CCQ YO5CRQ YO5CUQ YO5DAS YO5FMT YO5KAD YO5KAI YO5LD YO5NI YO5NY YO5OBA YO5ODL YO5ODT YO5OED YO5OFP YO5OHO YO5OHY YO5OLD YO5OO YO5PBF YO5PBW YO5PCB YO5PCY YO5PJB YO5PQP YO5PQP/P YO5PQQ YO5PTH YO5TP YO6BGT YO6CFB YO6CUF YO6DBA YO6DBL YO6DMR YO6EX YO6FGZ YO6FPW YO6HOY YO6HSU YO6KNE YO6KNY YO6KPT YO6LA YO6LB YO6LV YO6OAF YO6ODP YO6OEK YO6OHS YO6PEG YO6PVK YO6QT YO6UO YO6XK YO6ZS YO7AGD YO7ARY YO7ARZ YO7AWZ YO7BEM YO7BGB YO7BPC YO7CDB YO7CJB YO7CKQ YO7CVL YO7DAA YO7DBR YO7DJ YO7DMX YO7DO YO7FB YO7GNL YO7HBY YO7ISK YO7LCB YO7LDT YO7LGI YO7LYM YO7MGG YO7NK YO7NW YO7YO YO8ATT YO8AXP YO8BDQ YO8BFB YO8BFC YO8BGE YO8BNG YO8BOD YO8CHF YO8CIY YO8COK YO8COQ YO8CRU YO8DDP YO8DOH YO8KGL YO8KUS YO8MF YO8MI YO8OH YO8OU YO8PN YO8PS YO8RAA YO8RAC YO8RAW YO8RFJ YO8RFS YO8RHM YO8RIX YO8ROO YO8RSL YO8RZJ YO8SBQ YO8SGQ/P YO8SGZ YO8SJM YO8SMM YO8SS YO8SSB YO8SSQ YO8ST YO8SXX YO8THG YO8TNB YO8TTT YO8TYT YO8WW YO8XXX YO9AFT YO9AGI YO9AGN YO9BLY YO9BPX YO9BXE YO9CB YO9CFA YO9CKJ YO9CSM YO9CWY YO9CX YO9DL YO9FEH YO9FLD YO9FNP YO9FOC YO9FTN YO9GDN YO9GSB YO9GVP YO9HG YO9HH YO9HOW YO9HP YO9HRB YO9HXQ YO9HZN YO9IAB YO9IE YO9IF YO9IGT YO9IGV YO9IJP YO9IKW YO9IOE YO9IPF YO9IRF YO9IXC YO9KPD YO9NG YO9OC YO9RAO YO9RIJ YO9WF YO9XC YP0A YP0C YP0HQ YP10KQT YP10NATO YP25CJX YP2DX YP2X YP3A YP5A YP5C YP5T YP5Z YP6C YP6Z YP7A YP7P YP8A YP8T YP9L YP9W YQ555BU YQ5C YQ5Q YQ6A YQ9S YR0HQ YR0W YR0WL YR1A YR1C YR30A YR5K YR5N YR6M YR6V YR80KEDR YR8D YR8E YR8I YR8V YR90IARU YR9F YS1/NP3J YS1JBL YS1YS YT0A YT0HQ YT0I YT0PUPIN YT0T YT0W YT0WFF YT0Z YT1A YT1AD YT1BX YT1CI YT1CS YT1ET YT1FZ YT1HA YT1KC YT1ML YT1MN YT1NT YT1Q YT1RA YT1RK YT1RW YT1S YT1T YT1TM YT1TU YT1UM YT1UR YT1V YT1VP YT1WA YT1X YT1XN YT1ZA YT1ZP YT1ZW YT2AA YT2AAA YT2AZD YT2B YT2DDK YT2ISM YT2KID YT2MS YT2PFR YT2R YT2RX YT2SMS YT2SS YT2T YT2TA YT2U YT2VM YT2VP YT2W YT3A YT3E YT3H YT3M YT3PL YT3T YT3TPS YT3W YT3X YT3Z YT45FD YT4A YT4B YT4HFD YT4RA YT4T YT4TT YT4W YT4W/P YT5A YT5CT YT5EA YT5FD YT5L YT5M YT5N YT5OZC YT5RA YT5TAS YT5W YT5Z YT6A YT6M YT6T YT6W YT7A YT7AT YT7AW YT7B YT7CF YT7DB YT7DQ YT7DX YT7EC YT7EE YT7IM YT7KM YT7M YT7R YT7T YT7TA YT7W YT7Z YT8A YT8T YT8WW YT90NS YT9A YT9M YT9VM YT9W YT9X YU/S52GP YU/S56A YU0A YU0T YU0U YU0W YU177SB YU1AAV YU1AB YU1AHW YU1AIF YU1AM YU1AO YU1AR YU1AST YU1AVQ YU1BAU YU1BBV YU1BC YU1BFG YU1BM YU1BN YU1CA YU1CC YU1DW YU1DW/P YU1DX YU1EA YU1ED YU1EL YU1EO YU1EW YU1EXY YU1FG YU1FJK YU1FW YU1GN YU1GU YU1HFG YU1IG YU1JF YU1JF/P YU1JW YU1KN YU1KT YU1KX YU1LA YU1LM YU1MI YU1ML YU1MS YU1NNN YU1NR YU1NT YU1NVA YU1OO YU1OS YU1Q YU1QU YU1R YU1RA YU1RH YU1RK YU1RW YU1SAT YU1SMA YU1SMR YU1TO YU1TY YU1UN YU1USA YU1VG YU1WC YU1WN YU1XW YU1XX YU1YV YU1ZZ YU2A YU2AA YU2DBZ YU2EF YU2FG YU2M YU2STR YU2U YU3AAA YU45DX YU45MM YU5A YU5B YU5C YU5CW YU5D YU5GM YU5M YU5MAA YU5R YU5RY YU5T YU5VV YU5W YU6DX YU6MM YU7AF YU7AJM YU7AOP YU7AU YU7AV YU7BCD YU7BW YU7D YU7EE YU7FN YU7GMN YU7GW YU7JDE YU7KM YU7KR YU7KW YU7KWX YU7LS YU7PG YU7RL YU7RQ YU7U YU7WW YU7YZ YU7ZZ YU8A YU8NU YU90IARU YU9A YU9CF YU9DX YU9MBA YV1DIG YV1EMH YV1FM YV1GJW YV1KK YV1RDX YV2BYT YV2CAR YV3CR YV4AW YV4BCD YV4CW YV4DX YV4FUE YV4JJC YV4KW YV4MP YV4MT YV4NN YV4YC YV5AAX YV5AJ YV5ALO YV5AM YV5ANF YV5CBJ YV5CHJ YV5EAH YV5EN YV5EPM YV5FRD YV5GPA YV5GRB YV5HNJ YV5IAL YV5IUA YV5JBI YV5JDP YV5JGO YV5KAH YV5KAJ YV5KG YV5KQH YV5LAY YV5LI YV5LMW YV5NEA YV5NWG YV5OIE YV5PCA YV5TNT YV5WZ YV6BFE YV6BXN YV6CR YV7BMZ YV8AD YV8ER YW1A YW2LV YW4D YW5N YW5T YY1MAV YY1YLY YY2CAR YY2CQD YY2GAL YY4CEG YY4DNN YY4IVB YY4JCF YY4KCV YY4MGC YY4RDC YY4TSS YY5AJI YY5DOG YY5JAK YY5LAY YY5MKI YY5SKA YY5SSG YY5TTT YY5VJL YY5WB YY5WG YY6CAM YY6DFF YY9JDT Z21MG Z30A Z30HQ Z31A Z31JY Z31MM Z31RQ Z31WW Z32TO Z32ZM Z33A Z33F Z33RW Z33W Z33Z Z35A Z35BY Z35F Z35G Z35GL Z35M Z35T Z35W Z36N Z36T Z36W Z37M Z37Y Z39A Z39Z Z6/LZ1BJ Z6/S56A Z60A Z60WW Z61DX Z61KR Z61VB Z62FB Z63MED Z68BH Z81B Z81D Z81R Z81X Z81Z ZA/F4GFE ZA/IW2JOP ZA/OU2I ZA/S56A ZA/YT7DQ ZA/YU7CM ZA/Z35T ZA1G ZA1KS ZB2CW ZB2FB ZC4MIS ZD7VC ZD8D ZD8JR ZD8M ZD8O ZD8R ZD8RH ZD8W ZD8X ZF1A ZF2AH ZF2AM ZF2AV ZF2BH ZF2BN ZF2DF ZF2DX ZF2EE ZF2KE ZF2LC ZF2NC ZF2NT ZF2PG ZF2XF ZF35A ZF35LC ZF3HA ZK3E ZK3Q ZL1AA ZL1AAR ZL1AFU ZL1AIH ZL1AIX ZL1ALA ZL1ALZ ZL1ANH ZL1AQ ZL1BHQ ZL1BVB ZL1BYZ ZL1CDX ZL1DK ZL1FTH ZL1G ZL1GKB ZL1GO ZL1GSM ZL1HD ZL1IF ZL1JV ZL1KEN ZL1MRC ZL1MVL ZL1NZ ZL1OE ZL1OGX ZL1PI ZL1SLO ZL1T ZL1WAI ZL1WN ZL1X ZL1XX ZL1Y ZL1YE ZL2ACG ZL2AFT ZL2AGY ZL2AIM ZL2AJ ZL2AL ZL2ASH ZL2ATU ZL2AUB ZL2AUJ ZL2AYB ZL2AYZ ZL2AZ ZL2B ZL2BAQ ZL2CC ZL2CS ZL2FT ZL2GLG ZL2GLM ZL2GR ZL2IFB ZL2JU ZL2LF ZL2MF ZL2MM ZL2OK ZL2OPB ZL2ST ZL2TTS ZL2UN ZL2UO ZL2WG ZL2WL ZL2YL ZL3AB ZL3ADT ZL3CC ZL3CW ZL3DW ZL3GA ZL3IX ZL3JT ZL3KR ZL3LF ZL3NB ZL3PAH ZL3TE ZL3TRV ZL3VZ ZL3X ZL4AS ZL4AU ZL4AX ZL4CZ ZL4DH ZL4NR ZL4OL ZL4PLM ZL4PN ZL4PW ZL4SS ZL5ZED ZL6HQ ZL7AAA ZM1A ZM1G ZM1M ZM2B ZM2IO ZM3T ZM4A ZM4G ZM4M ZM4T ZM90DX ZP5AA ZP5CGL ZP5MAL ZP5PAM ZP5WBM ZP5YW ZP6A ZP6CW ZP6DYA ZP6EYA ZP6VT ZP8T ZP9EH ZP9MCE ZR1WZ ZR6DX ZR6NX ZR9C ZS1BHJ ZS1C ZS1CT ZS1EL ZS1JX ZS1JY ZS1LA ZS1LS ZS1OIN ZS1PZ ZS1RJQ ZS1ROM ZS1S ZS1SA ZS1SR ZS1TMJ ZS1VV ZS1X ZS1XG ZS1ZC ZS1ZS ZS2ABE ZS2DL ZS2EC ZS2GH ZS2I ZS2NF ZS2XD ZS3D ZS4A ZS4AZ ZS4BM ZS4BS ZS4L ZS4TX ZS4WRC ZS5J ZS5JY ZS5NK ZS5SAM ZS5XT ZS6/VA7DX ZS6A ZS6AI ZS6AKU ZS6BAF ZS6BK ZS6BNE ZS6BRZ ZS6BYT ZS6C ZS6DX ZS6ELI ZS6EZ ZS6FDX ZS6GF ZS6GRL ZS6JM ZS6JP ZS6JR ZS6LH ZS6MAR ZS6NL ZS6RF ZS6RJ ZS6TAN ZS6TQ ZS6UT ZS6WB ZS6WN ZS6WR ZS6XT ZS6YH ZS90SARL ZS9HQ ZS9M ZS9MADIBA ZS9Z ZT1T ZV150ITU ZV1M ZV2K ZV5D ZV5O ZV5WPX ZV8F ZW0HQ ZW1ELO ZW1M ZW2HQ ZW5B ZW5T ZW7REF ZW8K ZW8T ZX14PE ZX150ITU ZX1X ZX2B ZX2F ZX2WPX ZY150ITU ZY2A ZY2B ZY57J ZY5M ZY8T ZZ150ITU ZZ2T ZZ5T ZZ5Z ZZ7Z ZZ80ES ZZ80MT ZZ80PB ZZ80PE ZZ80PI ZZ80RJ ZZ80SP ZZ90IARU 7QNL 7QAA XE3/K5ENS OZ/DJ1XT OZ/DJ5LA tlf-1.3.0/share/help.txt0000644000175000017520000000645113014014714012017 00000000000000Keys (shortcuts) to be used in TLF If you want to see some of the start up parameters try: 'tlf -h'. Alt-a Cluster info Alt-b Band up Alt-t Tune Alt-n Note in log Alt-v Band down (CW Speed?) Alt-p turn PTT on/off Alt-h show help.txt Alt-w CW Weight Alt-i See talk messages Alt-j See QRG's Alt-k CW from Keyboard Alt-x exit program (Alt-q) Alt-m Multi display (Alt-c) Alt-s Score window (Alt-r) Alt-, show Bandmap Alt-j show frequency Alt-z show worked zones Alt-g grab Call (min. 2 letters from bandmap) Ctrl-a add a spot to list Ctrl-c Quit tlf Ctrl-b Cluster send Ctrl-g Grab a bandmap spot Ctrl-p MUF display Ctrl-page-up Auto CQ delay + Ctrl-page-down Auto CQ delay - Ctrl-k CW from keyboard Ctrl-f frequency control window Ctrl-t Send message Ctrl-r LPT0 pin 14 on/off (SSB mic) '+' Switch RUN/S&P (default, TR Log mode) '+' Send exchange (CT log mode) 'Insert' Log QSO (CT log mode) PG-UP CW + 2wpm PG-DWN CW - 2wpm ',' CW from Keyboard '.' filter bandmap content ';' Note in log F1 - F12 Send F1 - F12 msg TAB Switch fields ENTER Log qso, call cq SPACE Switch from call input to exchange field '\' Log qso w/o CW Up-arrow Edit prev qso '-' Delete last qso '_' confirm last serial nr '=' confirm last call L-arrow Edit call L/R Arrow Band change ESCAPE stop TX '"' Talk message '#' save/go to a MEM Frequency ! New shell :ssb Switch to ssb :cwm Switch to cw :dig Switch to rtty :hel Help :mes Set cw messages :set Edit config file :cfg Edit config file :sim CW CQWW Simulator :ZONes show list of zones to be worked :cty list of coutries to be worked :cqd CW delay :rit reset RIT after QSO is logged :VIEw show complete log :EDIt edit the log :LISt list CW messages :MESsage change CW messages :CHEck open Check window :NOCheck close Check window :pac open Terminal :CLUster open Terminal :SPOts only DX spots sorted by time :FILter filter DX Cluster content :map filter band map content :SYNc synchronize log in network :EXIt exit program :MULt toggle remaing multi display :CONtest toggle contest mode on/off :SCOre toggle score window on/off :FREq show frequency :CLOff Cluster off :INFo network status :TRXcont toggle TRX control on/off :CHAR Autosend: number of chars before starting to send :DEBug_tty test rig link :SOUnd record sound files :SCAnner scanner function (experimental) :wri Write cabrillo :adi Write Adif :exi Exit tlf :inf Network info : Telnet window :ton Set sidetone (0 = off) :res Rescore :sou Sound utility tlf-1.3.0/share/ea_sections0000644000175000017520000000022013014014714012531 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.3.0/share/spdxmults0000644000175000017520000000004713014014714012307 00000000000000B C D F G R J K L M O P S U W Z -end- tlf-1.3.0/share/arrldx_mults0000644000175000017520000000027513014014714012767 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.3.0/Makefile.am0000644000175000017520000000014713014014714011254 00000000000000ACLOCAL_AMFLAGS = -I macros SUBDIRS = doc rules src share scripts CLEANFILES = *~ man_MANS = tlf.1 tlf-1.3.0/compile0000755000175000017520000001624513014014733010605 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 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 ) 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tlf-1.3.0/config.guess0000755000175000017520000012612313014014733011544 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2016 Free Software Foundation, Inc. timestamp='2016-04-02' # 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: # http://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. Operation modes: -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-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; 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 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac 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*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 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 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; 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 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) eval $set_cc_for_build X86_64_ABI= # If there is a compiler, see if it is configured for 32-bit objects. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then X86_64_ABI=x32 fi fi echo ${UNAME_MACHINE}-pc-linux-${LIBC}${X86_64_ABI} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp 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` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tlf-1.3.0/src/0000755000175000017520000000000013046414414010073 500000000000000tlf-1.3.0/src/searchcallarray.h0000644000175000017520000000171713014014714013324 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.3.0/src/Makefile.in0000644000175000017520000007264613046414406012100 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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) 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) \ fldigixmlrpc.$(OBJEXT) freq_display.$(OBJEXT) focm.$(OBJEXT) \ genqtclist.$(OBJEXT) get_time.$(OBJEXT) getctydata.$(OBJEXT) \ getexchange.$(OBJEXT) getmessages.$(OBJEXT) getpx.$(OBJEXT) \ getsummary.$(OBJEXT) gettxinfo.$(OBJEXT) getwwv.$(OBJEXT) \ grabspot.$(OBJEXT) initial_exchange.$(OBJEXT) keyer.$(OBJEXT) \ lancode.$(OBJEXT) last10.$(OBJEXT) listmessages.$(OBJEXT) \ log_to_disk.$(OBJEXT) logit.$(OBJEXT) logview.$(OBJEXT) \ locator2longlat.$(OBJEXT) main.$(OBJEXT) makelogline.$(OBJEXT) \ messagechange.$(OBJEXT) muf.$(OBJEXT) nicebox.$(OBJEXT) \ note.$(OBJEXT) netkeyer.$(OBJEXT) paccdx.$(OBJEXT) \ parse_logcfg.$(OBJEXT) prevqso.$(OBJEXT) printcall.$(OBJEXT) \ qrb.$(OBJEXT) qsonr_to_str.$(OBJEXT) qtc_log.$(OBJEXT) \ qtcwin.$(OBJEXT) qtcutil.$(OBJEXT) readcalls.$(OBJEXT) \ readqtccalls.$(OBJEXT) readctydata.$(OBJEXT) \ recall_exchange.$(OBJEXT) rules.$(OBJEXT) score.$(OBJEXT) \ scroll_log.$(OBJEXT) searchcallarray.$(OBJEXT) \ searchlog.$(OBJEXT) sendbuf.$(OBJEXT) sendqrg.$(OBJEXT) \ sendspcall.$(OBJEXT) set_tone.$(OBJEXT) setcontest.$(OBJEXT) \ setparameters.$(OBJEXT) show_help.$(OBJEXT) showinfo.$(OBJEXT) \ showpxmap.$(OBJEXT) showscore.$(OBJEXT) showzones.$(OBJEXT) \ sockserv.$(OBJEXT) speedupndown.$(OBJEXT) stoptx.$(OBJEXT) \ store_qso.$(OBJEXT) sunup.$(OBJEXT) splitscreen.$(OBJEXT) \ startmsg.$(OBJEXT) rtty.$(OBJEXT) time_update.$(OBJEXT) \ ui_utils.$(OBJEXT) write_keyer.$(OBJEXT) \ writecabrillo.$(OBJEXT) writeparas.$(OBJEXT) zone_nr.$(OBJEXT) tlf_OBJECTS = $(am_tlf_OBJECTS) tlf_DEPENDENCIES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles 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@ 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 \ 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 \ fldigixmlrpc.c freq_display.c focm.c \ genqtclist.c \ get_time.c getctydata.c getexchange.c getmessages.c getpx.c \ getsummary.c gettxinfo.c getwwv.c grabspot.c \ initial_exchange.c \ keyer.c \ lancode.c last10.c listmessages.c log_to_disk.c \ logit.c logview.c locator2longlat.c \ main.c makelogline.c messagechange.c muf.c \ nicebox.c note.c netkeyer.c\ paccdx.c parse_logcfg.c prevqso.c printcall.c \ qrb.c qsonr_to_str.c qtc_log.c qtcwin.c qtcutil.c \ readcalls.c readqtccalls.c readctydata.c recall_exchange.c rules.c \ score.c scroll_log.c searchcallarray.c searchlog.c sendbuf.c \ sendqrg.c sendspcall.c set_tone.c setcontest.c \ setparameters.c show_help.c showinfo.c showpxmap.c \ showscore.c showzones.c sockserv.c speedupndown.c \ stoptx.c store_qso.c sunup.c splitscreen.c startmsg.c\ rtty.c time_update.c ui_utils.c \ write_keyer.c writecabrillo.c writeparas.c \ zone_nr.c tlf_LDADD = @LIBM_LIB@ @PTHREAD_LIBS@ @GLIB_LIBS@ @PANEL_LIBS@ @CURSES_LIBS@ \ @HAMLIB_LIBS@ @LIBXMLRPC_LIB@ @LIBXMLRPC_CLIENT_LIB@ \ @LIBXMLRPC_UTIL_LIB@ noinst_HEADERS = \ addarea.h addcall.h addmult.h addpfx.h addspot.h audio.h autocq.h \ background_process.h bandmap.h \ calledit.h callinput.h changefreq.h changepars.h checklogfile.h checkqtclogfile.h \ checkparameters.h cleanup.h clear_display.h clusterinfo.h cwkeyer.h \ cw_utils.h \ dxcc.h \ deleteqso.h displayit.h \ edit_last.h editlog.h \ 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 \ initial_exchange.h \ keyer.h \ lancode.h last10.h listmessages.h \ log_to_disk.h logit.h logview.h locator2longlat.h \ makelogline.h messagechange.h muf.h \ nicebox.h note.h netkeyer.h\ paccdx.h parse_logcfg.h prevqso.h printcall.h \ qrb.h qsonr_to_str.h qtc_log.h qtcvars.h qtcwin.h qtcutil.h \ readcalls.h readqtccalls.h readctydata.h recall_exchange.h \ rules.h \ score.h scroll_log.h searchcallarray.h searchlog.h sendbuf.h \ sendqrg.h sendspcall.h set_tone.h setcontest.h \ setparameters.h show_help.h showinfo.h showpxmap.h showscore.h \ showzones.h sockserv.h speedupndown.h \ splitscreen.h startmsg.h stoptx.h store_qso.h sunup.h \ rtty.h time_update.h tlf.h tlf_curses.h tlf_panel.h ui_utils.h \ write_keyer.h writecabrillo.h writeparas.h \ zone_nr.h all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addcall.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addmult.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addpfx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addspot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/autocq.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/background_process.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bandmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calledit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callinput.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/changefreq.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/changepars.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checklogfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkparameters.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkqtclogfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clear_display.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clusterinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cw_utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deleteqso.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/displayit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dxcc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit_last.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editlog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fldigixmlrpc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/focm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freq_display.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genqtclist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getctydata.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getexchange.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getmessages.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getsummary.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettxinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getwwv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grabspot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/initial_exchange.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lancode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/last10.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listmessages.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/locator2longlat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log_to_disk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makelogline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/messagechange.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/muf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netkeyer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nicebox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/note.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paccdx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_logcfg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prevqso.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printcall.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qrb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qsonr_to_str.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtc_log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtcutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtcwin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readcalls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readctydata.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readqtccalls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recall_exchange.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtty.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/score.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scroll_log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/searchcallarray.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/searchlog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendbuf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendqrg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendspcall.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_tone.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setcontest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setparameters.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show_help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showpxmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showscore.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showzones.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockserv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speedupndown.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splitscreen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/startmsg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stoptx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/store_qso.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sunup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time_update.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write_keyer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writecabrillo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writeparas.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zone_nr.Po@am__quote@ .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: $(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 -rf ./$(DEPDIR) -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 -rf ./$(DEPDIR) -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 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.3.0/src/callinput.c0000644000175000017520000007276013046414310012161 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2005 Rein Couperus * 2009-2016 Thomas Beierlein * 2013 Ervin Hegedüs - HA2OS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * Callinput handles the call input field * *--------------------------------------------------------------*/ #include #include #include #include #include #include "addspot.h" #include "autocq.h" #include "bandmap.h" #include "calledit.h" #include "callinput.h" #include "changefreq.h" #include "changepars.h" #include "clear_display.h" #include "cleanup.h" #include "cw_utils.h" #include "edit_last.h" #include "deleteqso.h" #include "getctydata.h" #include "grabspot.h" #include "lancode.h" #include "muf.h" #include "netkeyer.h" #include "nicebox.h" // Includes curses.h #include "note.h" #include "prevqso.h" #include "printcall.h" #include "qtcvars.h" // Includes globalvars.h #include "qtcwin.h" #include "rtty.h" #include "searchlog.h" // Includes glib.h #include "sendbuf.h" #include "sendspcall.h" #include "show_help.h" #include "showinfo.h" #include "showpxmap.h" #include "speedupndown.h" #include "splitscreen.h" #include "stoptx.h" #include "time_update.h" #include "ui_utils.h" #include "writeparas.h" #include #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include #endif #define TUNE_UP 6 /* tune up for 6 s (no more than 10) */ void send_bandswitch(int freq); int autosend(void); int plain_number(char *str); /** callsign input loop * * \return code of last typed character */ char callinput(void) { extern int itumult; extern int wazmult; extern int no_arrows; extern int isdupe; // LZ3NY auto-b4 patch extern int contest; extern int dxped; extern int cwstart; extern int early_started; extern char hiscall[]; extern char hiscall_sent[]; extern char comment[]; extern int cqmode; extern int trxmode; extern char mode[]; extern char lastcall[]; extern char band[9][4]; extern int bandinx; extern int cqdelay; extern char his_rst[]; extern char backgrnd_str[]; extern int cluster; extern int announcefilter; extern char message[][80]; extern char ph_message[14][80]; extern float freq; extern float mem; #ifdef HAVE_LIBHAMLIB extern freq_t outfreq; #else extern int outfreq; #endif extern int trx_control; extern float bandfrequency[]; 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; static float 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; float spotfreq; char call[15]; }; static struct grab_t grab = { .state = NONE }; int cury, curx; int i, j, ii, rc, t, x = 0; char instring[2] = { '\0', '\0' }; static int lastwindow; attron(modify_attr(COLOR_PAIR(NORMCOLOR))); printcall(); /* print call input field */ searchlog(hiscall); for (i = strlen(hiscall); i <= 13; i++) { 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 BMAUTOADD is active and user has input a call sign * (indicated by non-zeor freqstore) check if he turns away * from frequency and if so add call to spot list */ if (bmautoadd != 0 && freqstore != 0) { if (strlen(hiscall) >= 3) { if (fabsf(freq-freqstore) > 0.1) { add_to_spots(hiscall, freqstore); hiscall[0] = '\0'; HideSearchPanel(); freqstore = 0; } } } /* if BMAUTOGRAB is active 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 != 0 && *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(hiscall)); printcall(); searchlog(hiscall); } } /* 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) <= 0.1) grab.state = REACHED; /* Check if we tune away from old freq before a grabbed spot is * reached. If so stop grab process */ /* if we have grabbed a call from spot list and tune away * then forget about it */ if (fabsf(freq-grab.spotfreq) > 0.1 && grab.state == REACHED) { grab.state = NONE; hiscall[0] = '\0'; printcall(); HideSearchPanel(); showinfo(0); } /* 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 (i == 0 || *hiscall == '\0') { if ((x == '+') && (*hiscall == '\0') && (ctcomp == 0)) { /* switch to other mode */ if (cqmode == CQ) { cqmode = S_P; } else cqmode = CQ; /* and show new mode */ attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); if (cqmode == CQ) { mvprintw(0, 2, "Log "); strcpy(mode, "Log "); } else { mvprintw(0, 2, "S&P "); strcpy(mode, "S&P "); } cleanup(); } // , sends CQ message (F1), starts autoCQ, or sends S&P message. if ((x == '\n' || x == KEY_ENTER) && *hiscall == '\0') { if (cqmode == CQ) { if (noautocq != 1) x = auto_cq(); } else { sendspcall(); break; } } // Up Arrow or Alt-e, edit last QSO if (x == KEY_UP || x == 229) { edit_last(); break; } // Equals, confirms last callsign already logged if call field is empty. if (x == '=' && *hiscall == '\0') { char *str = g_strdup_printf("%s TU ", lastcall); sendmessage(str); g_free(str); break; } } switch (x) { // Plus, in CT mode send exchange, log QSO, no message sent. case '+': { if ((ctcomp != 0) && (strlen(hiscall) > 2)) { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(message[2]); /* F3 */ } else play_file(ph_message[2]); if (((cqww == 1) || (wazmult == 1)) && (*comment == '\0')) strcpy(comment, cqzone); if ((itumult == 1) && (*comment == '\0')) strcpy(comment, ituzone); x = 92; // '\' } break; } // Ctrl-Q (^Q), open QTC window for receiving or sending QTCs. case 17: { if (qtcdirection == 1 || qtcdirection == 3) { // in case of QTC=RECV or QTC=BOTH qtc_main_panel(RECV); } if (qtcdirection == 2) { // in case of QTC=SEND qtc_main_panel(SEND); } x = KEY_LEFT; continue; } // Ctrl-S (^S), open QTC window for sending QTCs. case 19: { if (qtcdirection == 2 || qtcdirection == 3) { // in case of QTC=SEND ot QTC=BOTH qtc_main_panel(SEND); } x = KEY_LEFT; continue; } // , enter call edit when call field is not empty. case KEY_HOME: { if ((*hiscall != '\0') && (ungetch(x) == OK)) { calledit(); } break; } // Left Arrow, enter call edit when call field is not empty, or band down. case KEY_LEFT: { if (*hiscall != '\0') { calledit(); } if (bandinx >= 0 && *hiscall == '\0' && no_arrows == 0) { bandinx--; if (bandinx == -1) bandinx = 8; if ((contest == 1) && (dxped == 0) && ((bandinx == 3) || (bandinx == 5) || (bandinx == 7))) bandinx--; attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); mvprintw(12, 0, band[bandinx]); i--; if (trx_control == 1) { outfreq = (int) (bandfrequency[bandinx] * 1000); } send_bandswitch(bandinx); } break; } // Right Arrow, band up when call field is empty. case KEY_RIGHT: { if (bandinx <= 8 && *hiscall == '\0' && no_arrows == 0) { bandinx++; if (bandinx > 8) bandinx = 0; if ((contest == 1) && (dxped == 0) && ((bandinx == 3) || (bandinx == 5) || (bandinx == 7))) bandinx++; attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); mvprintw(12, 0, band[bandinx]); if (trx_control == 1) { freq = bandfrequency[bandinx]; outfreq = (int) (bandfrequency[bandinx] * 1000); } send_bandswitch(bandinx); } break; } // Alt-w (M-w), set Morse weight. case 247: { char weightbuf[5] = ""; char *end; mvprintw(12, 29, "Wght: -50..50"); nicebox(1, 1, 2, 12, "Cw"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(2, 2, "Speed: %2d ", GetCWSpeed()); mvprintw(3, 2, "Weight: %3d ", weight); refreshp(); usleep(800000); mvprintw(3, 10, " "); echo(); mvgetnstr(3, 10, weightbuf, 3); noecho(); g_strchomp(weightbuf); int tmp = strtol(weightbuf, &end, 10); if ((weightbuf[0] != '\0') && (*end == '\0')) { /* successful conversion */ if (tmp > -51 && tmp < 51) { weight = tmp; netkeyer(K_WEIGHT, weightbuf); } } clear_display(); printcall(); break; } // Alt-v (M-v), change Morse speed in CW mode, else band down. case 246: { if (ctcomp == 1) { while (x != 27) //escape { nicebox(1, 1, 2, 12, "Cw"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(2, 2, "Speed: %2d ", 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, "%2d", GetCWSpeed()); } else if (x == KEY_DOWN) { speeddown(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2d", GetCWSpeed()); } else x = 27; // clear_display(); } } else { // trlog compatible, band switch if (bandinx >= 0 && *hiscall == '\0') { bandinx--; if (bandinx == -1) bandinx = 8; if ((contest == 1) && (dxped == 0) && ((bandinx == 3) || (bandinx == 5) || (bandinx == 7))) bandinx--; attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); mvprintw(12, 0, band[bandinx]); printcall(); i--; if (trx_control == 1) { outfreq = (int) (bandfrequency[bandinx] * 1000); } send_bandswitch(bandinx); } } 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]++; 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, "%2d", 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]--; no_rst ? : mvprintw(12, 44, his_rst); mvprintw(12, 29, hiscall); } } else { speeddown(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2d", GetCWSpeed()); } break; } // , log QSO in CT mode, else test if B4 message should be sent. case '\n': case KEY_ENTER: { if (strlen(hiscall) > 2 && ctcomp == 1) { /* there seems to be a call * means: log it (in CT mode */ x = 92; // '\' log without sending message break; } if (strlen(hiscall) < 3 || nob4 == 1) break; /* check b4 QSO if call is long enough and 'nob4' off */ isdupe = 0; // LZ3NY auto-b4 patch searchlog(hiscall); if (isdupe != 0) { sendmessage(message[6]); /* as with F7 */ cleanup(); clear_display(); } break; } // , send exchange in CT mode case KEY_IC: { if (ctcomp != 0) { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(message[1]); // F2 } else play_file(ph_message[1]); } break; } // Colon, prefix for entering commands or changing parameters. case ':': { changepars(); hiscall[0] = '\0'; x = 0; clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 29, " "); mvprintw(12, 29, ""); refreshp(); break; } // Hash, save xcvr freq to mem or restore mem to xcvr. case '#': { if (mem == 0.0) { mem = freq; mvprintw(14, 68, "MEM: %7.1f", mem); } else { freq = mem; outfreq = (int) (mem * 1000); mem = 0.0; mvprintw(14, 68, " "); } mvprintw(29, 12, " "); mvprintw(29, 12, ""); refreshp(); break; } // Minus, delete previous QSO from log. case '-': { delete_qso(); break; } // Semicolon or Alt-n (M-n), insert note in log. case ';': case 238: { include_note(); x = -1; break; } // Alt-0 to Alt-9 (M-0...M-9), send CW/Digimode messages 15-24. case 176 ... 185: { sendmessage(message[x - 162]); /* alt-0 to alt-9 */ break; } // F1, send CQ or S&P call message. case KEY_F(1): { if (trxmode == CWMODE || trxmode == DIGIMODE) { if (cqmode == 0) { sendspcall(); } else { sendmessage(message[0]); /* CQ */ } if (simulator != 0) { simulator_mode = 1; } } else { if (cqmode == 0) play_file(ph_message[5]); /* S&P */ else play_file(ph_message[0]); } break; } // F2-F11, send messages 2 through 11. case KEY_F(2) ... KEY_F(11): { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(message[x - KEY_F(1)]); // F2...F11 - F1 = 1...10 } else play_file(ph_message[x - KEY_F(1)]); 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') { if (trxmode == CWMODE || trxmode == DIGIMODE) { strcat(hiscall, " ?"); sendmessage(message[4]); hiscall[strlen(hiscall) - 2] = '\0'; } else { play_file(ph_message[4]); } } 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(hiscall) ); searchlog(hiscall); refreshp(); } i--; x = -1; break; } break; } // Alt-r (M-r) or Alt-s (M-s), toggle score window. case 242: case 243: { if (showscore_flag == 0) showscore_flag = 1; else { showscore_flag = 0; } clear_display(); break; } // Alt-k (M-k), synonym for Ctrl-K (^K). case 235: { x = 11; // Ctrl-K break; } // Alt-a (M-a), cycle cluster window. case 225: { if (cluster == NOCLUSTER) { cluster = CLUSTER; // alt-A announcefilter = FILTER_ALL; } else if (cluster == CLUSTER) { attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (ii = 14; ii < 24; ii++) mvprintw(ii, 0, backgrnd_str); refreshp(); cluster = MAP; } else if (cluster == MAP) { attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (ii = 14; ii < 24; ii++) mvprintw(ii, 0, backgrnd_str); refreshp(); cluster = NOCLUSTER; } break; } // Alt-b (M-b), band-up for TR-Log mode. case 226: { if (ctcomp == 0) { if (bandinx <= 8 && *hiscall == '\0') { bandinx++; if (bandinx > 8) bandinx = 0; if ((contest == 1) && (dxped == 0) && ((bandinx == 3) || (bandinx == 5) || (bandinx == 7))) bandinx++; attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); mvprintw(12, 0, band[bandinx]); if (trx_control == 1) { freq = bandfrequency[bandinx]; outfreq = (int) (bandfrequency[bandinx] * 1000); } send_bandswitch(bandinx); } } break; } // Alt-j (M-j), show station frequencies. case 234: { if (cluster != FREQWINDOW) { lastwindow = cluster; cluster = FREQWINDOW; } else cluster = lastwindow; break; } // Alt-h (M-h), show help. case 232: { show_help(); break; } // Alt-, (M-,) or period, change bandmap filter config. case 172: case '.': { bm_menu(); break; } // Alt-c (M-c), toggle check window. case 227: { if (searchflg != SEARCHWINDOW) searchflg = SEARCHWINDOW; else searchflg = 0; break; } // Alt-m (M-m), show multipliers. case 237: { show_mults(); refreshp(); break; } // Alt-p (M-p), toggle PTT via cwdaemon case 240: { if (k_ptt == 0) { k_ptt = 1; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 2, "PTT on "); mvprintw(12, 29, ""); refreshp(); netkeyer(K_PTT, "1"); // ptt on x = key_get(); // any character to stop tuning if (x == 240) // Alt-P (M-p) netkeyer(K_PTT, "0"); // ptt off k_ptt = 0; mvprintw(0, 2, "%s", mode); refreshp(); } else netkeyer(K_PTT, "0"); // ptt off in any case. break; } // Alt-t (M-t), tune xcvr via cwdaemon. case 244: { int count; gchar *buff; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 2, "Tune "); mvprintw(12, 29, ""); refreshp(); buff = g_strdup_printf("%d", TUNE_UP); netkeyer(K_TUNE, buff); // cw on g_free(buff); count = (int) (TUNE_UP / 0.25); while (count != 0) { usleep( 250000 ); if ((key_poll()) != -1) // any key pressed ? break; count--; } netkeyer( K_ABORT, ""); // cw abort mvprintw(0, 2, "%s", mode); refreshp(); break; } // Alt-z (M-z), show zones worked. case 250: { if (cqww == 1) { if (zonedisplay == 0) zonedisplay = 1; else { zonedisplay = 0; clear_display(); } } else { multiplierinfo(); } break; } // Alt-q (M-q) or Alt-x (M-x), Exit case 241: case 248: { mvprintw(13, 29, "You want to leave tlf? (y/n): "); while (x != 'n' && x != 'N') { x = key_get(); if (x == 'y' || x == 'Y') { writeparas(); cleanup_telnet(); endwin(); puts("\n\nThanks for using TLF.. 73\n"); exit(0); } } x = 27; // break; } // , clear call input or stop sending. case 27: { if (early_started == 0) { /* if CW not started early drop call and start anew */ cleanup(); clear_display(); } else { /* otherwise just stop sending */ stoptx(); *hiscall_sent = '\0'; early_started = 0; } freqstore = 0; break; } // Underscore, confirm last exchange. case '_': { prev_qso(); break; } // Exclamation, open a new shell. case '!': { endwin(); rc=system("clear"); rc=system("sh"); rc=system("clear"); set_term(mainscreen); clear_display(); break; } // Ctrl-L (^L), resets screen. case 12: { endwin(); set_term(mainscreen); clear_display(); break; } // Ctrl-P (^P), show MUF display. case 16: { int currentterm = miniterm; miniterm = 0; muf(); miniterm = currentterm; clear_display(); break; } // Ctrl-A (^A), add a spot and share on LAN. case 1: { addspot(); HideSearchPanel(); showinfo(0); grab.state = REACHED; grab.spotfreq = freq; break; } // Ctrl-B (^B), send spot to DX cluster. case 2: { announcefilter = 0; cluster = CLUSTER; send_cluster(); break; } // Ctrl-F (^F), change frequency dialog. case 6: { change_freq(); break; } // Ctrl-G (^G), grab next DX spot from bandmap. case 7: { grab_next(); grab.state = IN_PROGRESS; grab.spotfreq = outfreq/1000.; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 2, "%s", mode); freqstore = 0; break; } // Alt-g (M-g), grab first spot matching call field chars. case 231: { grabspot(); grab.state = IN_PROGRESS; grab.spotfreq = outfreq/1000.; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 2, "%s", mode); freqstore = 0; break; } // Double quote, send talk message to other nodes. case '\"': { if (lan_active != 0) talk(); break; } // Ctrl-R (^R), toogle trx1, trx2 via lp0 pin 14. case 18: { if (k_pin14 == 0) { k_pin14 = 1; netkeyer(K_SET14, "1"); } else { k_pin14 = 0; netkeyer(K_SET14, "0"); } break; } // Ctrl-T (^T) or Alt-i (M-i), show talk messages. case 20: case 233: { if (lan_active != 0) { for (t = 0; t <= 5; t++) mvprintw(14 + t, 1, " "); for (t = 0; t <= 4; t++) mvprintw(15 + t, 1, talkarray[t]); nicebox(14, 0, 5, 59, "Messages"); refreshp(); key_get(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (t = 0; t <= 6; t++) mvprintw(14 + t, 0, " "); clear_display(); } break; } } /* end switch */ // Ctrl-, increase cqdelay by 1/2 second. // Alt-, same for terminals that consume Ctrl-. if ((key_kPRV3 && x == key_kPRV3) || (key_kPRV5 && x == key_kPRV5)) { if (cqdelay <= 60) { cqdelay++; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 19, " "); mvprintw(0, 19, "%i", cqdelay); } break; } // Ctrl-, decrease cqdelay by 1/2 Second. // Alt-, same for terminals that consume Ctrl-. if ((key_kNXT3 && x == key_kNXT3) || (key_kNXT5 && x == key_kNXT5)) { if (cqdelay >= 4) { cqdelay--; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 19, " "); mvprintw(0, 19, "%i", cqdelay); } break; } /* Convert to upper case */ if (x >= 'a' && x <= 'z') x = x - 32; /* Add character to call input field. */ if (x >= '/' && x <= 'Z') { if (strlen(hiscall) < 13) { instring[0] = x; instring[1] = '\0'; addch(x); strcat(hiscall, instring); if (cqmode == CQ && cwstart > 0 && trxmode == CWMODE && contest == 1) { /* early start keying after 'cwstart' characters but only * if input field contains at least one nondigit */ if (strlen(hiscall) == cwstart && !plain_number(hiscall)) { x = autosend(); } } } if (atoi(hiscall) < 1800) { /* no frequency */ showinfo( getctydata(hiscall) ); searchlog(hiscall); } refreshp(); freqstore = freq; } if (cqmode == CQ && cwstart < 0 && trxmode == CWMODE && contest == 1) { if (x == '\n' || x == KEY_ENTER) { /* early start keying after 'Enter' but only if input field * contains at least two chars, one or more of it nondigit */ if (strlen(hiscall) >= 2 && !plain_number(hiscall)) { x = autosend(); } } } if ((x == '\n' || x == KEY_ENTER) || x == 32 || x == 9 || x == 11 || x == 44 || x == 92) { break; } } return (x); } /** check if string is plain number * * Check if string contains only digits * \param str the string to check * \return true if only digits inside * false at least one none digit */ int plain_number(char *str) { int i; for (i=0; i < strlen(str); i++) { if (!isdigit(str[i])) { return false; } } return true; } /** autosend function * * autosend allow an operator in RUN mode to just enter the call of the * other station. TLF will start sending the call and switch automatically * to sending the exchange when typing stops. * - starts after 2..5 characters * - shorter calls have to be finished with ENTER key * - as soon as autosend starts only alfanumerical keys are accepted * - no edit after input possible * - calculates expected time to send call from cw speed and * - switches to sending exchange after that time is reached * * \return last typed key, ESC or \n * ESC - transmission has stopped * \n - timeout or CR pressed -> send exchange */ int autosend() { extern int early_started; extern int sending_call; extern char hiscall_sent[]; extern char hiscall[]; GTimer *timer; double timeout, timeout_sent; int x; int char_sent; early_started = 1; sending_call = 1; sendmessage(hiscall); sending_call = 0; strcpy(hiscall_sent, hiscall); char_sent = 0; /* no char sent so far */ timeout_sent = (1.2 / GetCWSpeed()) * getCWdots(hiscall[char_sent]); timer = g_timer_new(); timeout = (1.2 / GetCWSpeed()) * cw_message_length(hiscall); x = -1; while ((x != 27) && (x != '\n' && x != KEY_ENTER)) { x = -1; while ((x == -1) && (g_timer_elapsed(timer, NULL) < timeout)) { highlightCall(char_sent + 1); usleep(10000); if (g_timer_elapsed(timer, NULL) > timeout_sent) { /* one char sent - display and set new timeout */ char_sent ++; timeout_sent += (1.2 / GetCWSpeed()) * getCWdots(hiscall[char_sent]); } /* make sure that the wrefresh() inside getch() shows the cursor * in the input field */ wmove(stdscr, 12, 29 + strlen(hiscall)); x = key_poll(); } if (x == -1) { /* timeout */ x = '\n'; continue; } // if (x == 27) { stoptx(); *hiscall_sent = '\0'; early_started = 0; continue; } /* convert to upper case */ if (x >= 'a' && x <= 'z') x = x - 32; int len = strlen(hiscall); if (len < 13 && x >= '/' && x <= 'Z') { char append[2]; /* insert into hiscall */ hiscall[len] = x; hiscall[len+1] = '\0'; /* display it */ printcall(); /* send it to cw */ append[0] = x; append[1] = '\0'; sendmessage(append); /* add char length to timeout */ timeout += (1.2 / GetCWSpeed()) * getCWdots((char) x); len = strlen(hiscall_sent); hiscall_sent[len] = x; hiscall_sent[len+1] = '\0'; } } g_timer_destroy(timer); return x; } int play_file(char *audiofile) { extern int txdelay; extern unsigned char rigptt; int fd,rc; char playcommand[120]; if (*audiofile == '\0') return (0); if ((fd = open(audiofile, O_RDONLY, 0664)) < 0) { mvprintw(24, 0, "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); } #ifdef HAVE_LIBHAMLIB /* CAT PTT wanted and available, use it. */ if (rigptt == 0x03) { /* Request PTT On */ rigptt |= (1 << 3); /* 0x0b */ } else { /* Fall back to netkeyer interface */ #endif netkeyer(K_PTT, "1"); // ptt on #ifdef HAVE_LIBHAMLIB } #endif usleep(txdelay * 1000); rc=system(playcommand); printcall(); #ifdef HAVE_LIBHAMLIB /* CAT PTT wanted, available, and active. */ if (rigptt == 0x07) { /* Request PTT Off */ rigptt |= (1 << 4); /* 0x17 */ } else { /* Fall back to netkeyer interface */ #endif netkeyer(K_PTT, "0"); // ptt off #ifdef HAVE_LIBHAMLIB } #endif } return (0); } void send_bandswitch(int freq) { extern int use_bandoutput; extern int bandinx; extern int bandindexarray[]; char outnibble[3]; int bandswitch = 0; if (use_bandoutput == 1) { if (freq > 15) { // cannot be a freq... switch ((int) freq) { 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); } } tlf-1.3.0/src/logview.h0000644000175000017520000000164313014014714011636 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.3.0/src/displayit.c0000644000175000017520000000343613014014714012161 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2014 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------------------ * scroll the loglines of the keyer terminal and show them * ---------------------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "tlf_curses.h" void displayit(void) { extern char termbuf[]; extern char backgrnd_str[]; extern char terminal1[]; extern char terminal2[]; extern char terminal3[]; extern char terminal4[]; char term2buf[81] = ""; g_strlcpy(term2buf, termbuf, sizeof(term2buf)); g_strchomp(term2buf); g_strlcat(term2buf, backgrnd_str, sizeof(term2buf)); /* fill with blanks */ strcpy(terminal1, terminal2); strcpy(terminal2, terminal3); strcpy(terminal3, terminal4); strcpy(terminal4, term2buf); termbuf[0] = '\0'; mvprintw(5, 0, ""); clear_display(); } tlf-1.3.0/src/sendspcall.h0000644000175000017520000000201213014014714012301 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.3.0/src/changefreq.h0000644000175000017520000000166113014014714012265 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.3.0/src/setparameters.h0000644000175000017520000000167313014014714013044 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.3.0/src/deleteqso.h0000644000175000017520000000175713014014714012155 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.3.0/src/readctydata.h0000644000175000017520000000172613014014714012451 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 load_ctydata(char *filename); int readctydata(void); #endif /* READCTYDATA_H */ tlf-1.3.0/src/checkparameters.c0000644000175000017520000000236213014014714013315 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) { extern int emptydir; FILE *fp; if ((fp = fopen(".paras", "r")) == NULL) { writeparas(); emptydir = 1; } else { fclose(fp); } return (0); } tlf-1.3.0/src/checkqtclogfile.c0000644000175000017520000000465213014014714013307 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.3.0/src/readctydata.c0000644000175000017520000000455613014014714012450 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" /** 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; } 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.3.0/src/getexchange.h0000644000175000017520000000166313014014714012446 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 getexchange(void); #endif /* GETEXCHANGE_H */ tlf-1.3.0/src/clear_display.h0000644000175000017520000000167413014014714013001 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CLEAR_DISPLAY_H #define CLEAR_DISPLAY_H void clear_display(void); #endif /* CLEAR_DISPLAY_H */ tlf-1.3.0/src/checklogfile.h0000644000175000017520000000173613014014714012604 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.3.0/src/set_tone.c0000644000175000017520000000444013014014714011773 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 "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) { mvprintw(24, 0, "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.3.0/src/cw_utils.c0000644000175000017520000001217713014014714012012 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.3.0/src/startmsg.h0000644000175000017520000000212713014014714012024 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 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.3.0/src/deleteqso.c0000644000175000017520000001167313014014714012146 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * delete last qso * *--------------------------------------------------------------*/ #include #include #include #include #include "clear_display.h" #include "deleteqso.h" #include "printcall.h" #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "qsonr_to_str.h" #include "tlf_curses.h" #include "scroll_log.h" #include "ui_utils.h" #define QTCRECVCALLPOS 30 #define QTCSENTCALLPOS 35 void delete_last_qtcs(char *call, char *bandmode) { int rc, 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); rc = 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); } } rc = 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 - (96+qtclen)), SEEK_SET); rc = read(qtcfile, logline, 95); if (!(strncmp(call, logline+QTCSENTCALLPOS, strlen(call)) == 0 && strncmp(bandmode, logline, 5) == 0)) { // stop searching look = 0; } else { qtclen += 96; qtc_dec(call, SEND); qsoflags_for_qtc[s] = 0; next_qtc_qso = s; while(s >= 0 && qsoflags_for_qtc[s] != 1) { s--; } } } rc = ftruncate(qtcfile, qstatbuf.st_size - qtclen); nr_qtcsent--; fsync(qtcfile); } close(qtcfile); } } void delete_qso(void) { int x, rc; struct stat statbuf; int lfile; char logline[100]; char call[15], bandmode[6]; mvprintw(13, 29, "OK to delete last qso (y/n)?"); x = key_get(); if ((x == 'y') || (x == 'Y')) { if ((lfile = open(logfile, O_RDWR)) < 0) { mvprintw(24, 0, "I can not find the logfile..."); refreshp(); sleep(2); } 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); rc = 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); } rc = ftruncate(lfile, statbuf.st_size - LOGLINELEN); } fsync(lfile); close(lfile); if (qsos[nr_qsos][0] != ';') { band_score[bandinx]--; qsonum--; qsonr_to_str(); } nr_qsos--; qsos[nr_qsos][0] = '\0'; } scroll_log(); } attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(13, 29, " "); printcall(); clear_display(); } tlf-1.3.0/src/addspot.h0000644000175000017520000000171613014014714011621 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 void add_to_spots(char *call, float freq); int addspot(void); #endif /* ADDSPOT_H */ tlf-1.3.0/src/stoptx.h0000644000175000017520000000163713014014714011526 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.3.0/src/bandmap.c0000644000175000017520000006027213014014714011562 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2011 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include "bandmap.h" #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "searchcallarray.h" #include "tlf_curses.h" #include "ui_utils.h" #define TOLERANCE 100 /* spots with a QRG +/-TOLERANCE will be counted as the same QRG */ #define SPOT_COLUMN_WIDTH 22 #define SPOT_FREQ_WIDTH 7 #define SPOT_CALL_WIDTH SPOT_COLUMN_WIDTH-SPOT_FREQ_WIDTH-4 /* 3 space before and 1 after call */ unsigned int bandcorner[NBANDS][2] = {{ 1800000, 2000000 }, // band bottom, band top { 3500000, 4000000 }, { 7000000, 7300000 }, { 10100000, 10150000 }, { 14000000, 14350000 }, { 18068000, 18168000 }, { 21000000, 21450000 }, { 24890000, 24990000 }, { 28000000, 29700000 }}; unsigned int cwcorner[NBANDS] = { 1838000, 3580000, 7040000, 10140000, 14070000, 18095000, 21070000, 24915000, 28070000}; unsigned int ssbcorner[NBANDS] = { 1840000, 3600000, 7040000, 10150000, 14100000, 18120000, 21150000, 24930000, 28300000 }; 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 */ }; short bm_initialized = 0; extern float freq; extern int trx_control; extern int bandinx; extern int trxmode; extern char thisnode; extern struct worked_t worked[]; extern int contest; 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\n", sp->call, sp->freq, sp->mode, sp->band, sp->node, (int)sp->timeout, sp->dupe); 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; timediff = 0; 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; } 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 convert frequency to bandnumber * * \return bandnumber or -1 if not in any band */ int freq2band(unsigned int freq) { int i; for (i = 0; i < NBANDS; i++) { if (freq >= (unsigned int)bandcorner[i][0] && freq <= (unsigned int)bandcorner[i][1]) return i; /* in actual band */ } return -1; /* not in any band */ } /** \brief guess mode based on frequency * * \return CWMODE, DIGIMODE or SSBMODE */ int freq2mode(int 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 node = ' '; line = g_strdup(s); if (strncmp(line, "DX de ", 6) != 0) { g_free(line); return; } if (strncmp(line + 6, "TLF-", 4) == 0) node = line[10]; /* get sending node id */ bandmap_addspot (strtok(line+26, " \t") , (unsigned int)(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, unsigned int 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; /* add only HF spots */ if (freq > 30000000) return; band = freq2band(freq); if (band < 0) /* 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 (abs(((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. */ 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 && (abs(((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); } if (found->next && (abs(((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); } 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); } } pthread_mutex_unlock( &bm_mutex ); } int bm_ismulti( char * call) { return 0; } /** \todo should check band AND mode if already worked.... */ int bm_isdupe( char *call, int band ) { int found = -1; struct t_qtc_store_obj *qtc_obj; /* spot for warc bands are never dupes */ if (IsWarcIndex(band)) return 0; found = searchcallarray(call); if (found == -1) /* new call */ return 0; if (qtcdirection > 0) { qtc_obj = qtc_get(call); if (qtc_obj->total > 0 && qtc_obj->total < 10) { return 0; } if (qtc_obj->total == 0 && (qtc_obj->capable > 0)) { return 0; } } if (worked[found].band & inxes[band]) { return 1; } else { return 0; } } void bm_show_info() { int curx, cury; getyx( stdscr, cury, curx); /* remember cursor */ /* show info field on the right */ attrset(COLOR_PAIR(CB_DUPE)|A_BOLD); move(14,66); vline(ACS_VLINE,10); mvprintw (19, 68, "bands: %s", bm_config.allband ? "all" : "own"); mvprintw (20,68, "modes: %s", bm_config.allmode ? "all" : "own"); mvprintw (21,68, "dupes: %s", bm_config.showdupes ? "yes" : "no"); attrset(COLOR_PAIR(CB_NEW)|A_STANDOUT); mvprintw( 22 ,69, "MULTI"); attrset(COLOR_PAIR(CB_NEW)|A_BOLD); printw( " NEW"); attrset(COLOR_PAIR(CB_NORMAL)); mvprintw( 23,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(data->call)) attron(A_STANDOUT); 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 ", (float)(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 == 24) { *y = 14; *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. */ float bm_get_center(band, mode) { float 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 / 1000.; } 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' switches filtering for band, dupes and mode on or off. */ GList *list; spot *data; int curx, cury; int bm_x, bm_y; int i,j; short dupe; float centerfrequency; 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 */ 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)) { 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 line 14, column 0 */ bm_y = 14; 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 < bm_y + 10; 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; 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*1000 - 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*1000 + 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 < 14) { max_below = 30 - above_qrg - 1; } else max_below = 15; startindex = (below_qrg < max_below)? 0 : (below_qrg - max_below); } /* calculate the index+1 of the last spot to show */ stopindex = (spots->len < startindex + 30 - (1 - on_qrg)) ? spots->len : (startindex + 30 - (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, "============"); } 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 or upes 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; } 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; 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, unsigned int 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, float 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*1000) < TOLERANCE) && (!bm_config.skipdupes || data->dupe == 0)) { strcpy(dest, data->call); break; } } pthread_mutex_unlock( &bm_mutex ); } } tlf-1.3.0/src/sunup.c0000644000175000017520000000355513014014714011333 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.3.0/src/background_process.h0000644000175000017520000000205313014014714014033 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 *); #endif /* end of include guard: BACKGROUND_PROCESS_H */ tlf-1.3.0/src/recall_exchange.c0000644000175000017520000000555213014014714013264 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); 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.3.0/src/prevqso.h0000644000175000017520000000177613014014714011670 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.3.0/src/qtcutil.c0000644000175000017520000001203613014014714011640 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], flag[2], msg[18]; 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.3.0/src/getwwv.h0000644000175000017520000000163713014014714011510 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef GETWWV_H #define GETWWV_H int getwwv(void); #endif /* GETWWV_H */ tlf-1.3.0/src/speedupndown.h0000644000175000017520000000207313014014714012673 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.3.0/src/sunup.h0000644000175000017520000000173713014014714011340 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.3.0/src/focm.c0000644000175000017520000001516613014014714011106 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" 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, 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, 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.3.0/src/paccdx.h0000644000175000017520000000212513014014714011420 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.3.0/src/makelogline.h0000644000175000017520000000171613014014714012452 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.3.0/src/locator2longlat.c0000644000175000017520000000770713014014714013272 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; } int check_qra(char * qra) { if (strlen(qra) < 4) { return 1; } if (strlen(qra) >= 4) { if (qra[0] < 65 || qra[0] > 82 || qra[1] < 65 || qra[1] > 82 || qra[2] < 48 || qra[2] > 57 || qra[3] < 48 || qra[3] > 57) { return 1; } } return 0; } tlf-1.3.0/src/addspot.c0000644000175000017520000000460713014014714011616 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2010-2016 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * * Add spot to bandmap * * *--------------------------------------------------------------*/ #include #include #include #include #include "get_time.h" #include "lancode.h" #include "splitscreen.h" #include "tlf.h" #include "tlf_curses.h" /** add call to list of spots * * format a fake DX spot from call and frequency add it to the spot list * and send it to other stations in the LAN */ void add_to_spots(char *call, float 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, call); strcat(spotline, " "); get_time(); strftime(spottime, sizeof(spottime), "%H%MZ", time_ptr); strcpy(spotline + 70, spottime); strcat(spotline, "\n\n"); send_lan_message(TLFSPOT, spotline); lanspotflg = 1; addtext(spotline); lanspotflg = 0; } int addspot(void) { extern float freq; extern char hiscall[]; extern int trx_control; char frequency[8]; if (strlen(hiscall) < 3) return(0); if (trx_control == 0) { attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(13, 20, "freq.: "); echo(); getnstr(frequency, 7); noecho(); freq = atof(frequency); } add_to_spots(hiscall, freq); hiscall[0] = '\0'; return (0); } tlf-1.3.0/src/addmult.c0000644000175000017520000002266713046414310011621 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" #define MULTS_POSSIBLE(n) ((char *)g_ptr_array_index(mults_possible, n)) enum { ALL_BAND, PER_BAND }; /** Converts bandindex to bandmask */ int inxes[NBANDS] = \ { BAND160, BAND80, BAND40, BAND30, BAND20, BAND17, BAND15, BAND12, BAND10 }; 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++) { if ((strstr(ssexchange, MULTS_POSSIBLE(i)) != NULL) && (strlen(MULTS_POSSIBLE(i)) > 1)) { if (strlen(MULTS_POSSIBLE(i)) > matching_len) { matching_len = strlen(MULTS_POSSIBLE(i)); idx = i; } } } if (idx >= 0) { remember_multi(MULTS_POSSIBLE(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++) { // check if valid mult.... if (strcmp(ssexchange, MULTS_POSSIBLE(i)) == 0) { idx = i; break; } } if (idx >= 0) { shownewmult = remember_multi(MULTS_POSSIBLE(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++) { if (strstr(ssexchange, MULTS_POSSIBLE(i)) != NULL) { if (strlen(MULTS_POSSIBLE(i)) > matching_len) { matching_len = strlen(MULTS_POSSIBLE(i)); idx = i; } } } if (idx >= 0) { shownewmult = remember_multi(MULTS_POSSIBLE(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++) { if ((strstr(ssexchange, MULTS_POSSIBLE(i)) != NULL) && (strlen(MULTS_POSSIBLE(i)) > 1)) { if (strlen(MULTS_POSSIBLE(i)) > matching_len) { matching_len = strlen(MULTS_POSSIBLE(i)); idx = i; } } } if (idx >= 0) { remember_multi(MULTS_POSSIBLE(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); } /* compare functions to sort multi by aphabetic order */ gint cmp_size (char **a, char **b) { return g_strcmp0(*a, *b); } /** 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 GPtrArray *mults_possible; extern char multsfile[]; // Set by parse_logcfg() FILE *cfp; char s_inputbuffer[186] = ""; char mults_location[_POSIX_PATH_MAX * 2]; // 512 chars. Larger? int count = 0; if (mults_possible) { /* free old array if exists */ g_ptr_array_free(mults_possible, TRUE); } mults_possible = g_ptr_array_new_with_free_func( g_free ); 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) { while (fgets(s_inputbuffer, 85, cfp) != NULL) { /* drop comments starting with '#' */ if (*s_inputbuffer == '#') continue; /* strip leading and trailing whitespace */ g_strstrip(s_inputbuffer); s_inputbuffer[9] = '\0'; /* drop empty lines */ if (*s_inputbuffer == '\0') continue; g_ptr_array_add(mults_possible, g_strdup(s_inputbuffer)); count++; } 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 (count); } /** initialize mults scoring * * empties mults[] and mult_bands[] arrays and set the number of * mults to 0. */ void init_mults() { int n; for (n = 0; n < MAX_MULTS; n++) { mults[n][0] = '\0'; mult_bands[n] = 0; } multarray_nr = 0; } /** register worked multiplier and check if its new * * Check if multiplier is already registered. If not make a new entry in * mults[] array and increment the total mults count 'multarray_nr'. * 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 < multarray_nr; i++) { /* already in list? */ if (strcmp(mults[i], multiplier) == 0) { found = 1; /* new band? */ if ((mult_bands[i] & inxes[band]) == 0) { mult_bands[i] |= 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 = multarray_nr; /* return index of new mult */ strcpy(mults[multarray_nr], multiplier); mult_bands[multarray_nr] |= inxes[band]; multscore[band]++; multarray_nr++; } return index; } tlf-1.3.0/src/getexchange.c0000644000175000017520000006267313046414310012452 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004-2005 Rein Couperus * 2011-2012 Thomas Beierlein * 2013-2014 Ervin Hegedus - HA2OS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * Getexchange handles the comment field * *--------------------------------------------------------------*/ #include #include #include #include "addspot.h" #include "cw_utils.h" #include "keyer.h" #include "lancode.h" #include "locator2longlat.h" #include "logit.h" #include "qtcvars.h" // Includes globalvars.h #include "qtcwin.h" #include "recall_exchange.h" #include "rtty.h" #include "score.h" #include "searchlog.h" // Includes glib.h #include "sendbuf.h" #include "speedupndown.h" #include "stoptx.h" #include "time_update.h" #include "tlf_curses.h" #include "ui_utils.h" #define MULTS_POSSIBLE(n) ((char *)g_ptr_array_index(mults_possible, n)) #define LEN(array) (sizeof(array) / sizeof(array[0])) int play_file(char *audiofile); int checkexchange (int x); int getlastpattern (char *checkstring); char *getgrid (char *comment); 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 message[][80]; 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] = ""; int retval = 0; 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) retval = recall_exchange(); if ((arrldx_usa == 1) && (trxmode != CWMODE)) retval = recall_exchange(); if (arrl_fd == 1) retval = 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) { retval = recall_exchange(); } /* parse input and modify exchange field accordingly */ commentfield = 1; i = strlen(comment); while (1) { refresh_comment(); /* wait for next char pressed, but update time, cluster and TRX qrg */ /* main loop waiting for input */ x = -1; while (x < 1) { usleep(10000); time_update(); if (trxmode == DIGIMODE) { show_rtty(); } /* make sure that the wrefresh() inside getch() shows the cursor * in the input field */ wmove(stdscr, 12, 54 + strlen(comment)); x = key_poll(); } switch (x) { case 17: // Ctl-q (^Q)--Open QTC panel for receiving or sending QTCs { if (qtcdirection == 1 || qtcdirection == 3) { // in case of QTC=RECV or QTC=BOTH qtc_main_panel(RECV); } if (qtcdirection == 2) { // in case of QTC=SEND qtc_main_panel(SEND); } x = KEY_LEFT; continue; } case 19: // Ctl+s (^S)--Open QTC panel for sending QTCs { if (qtcdirection == 2 || qtcdirection == 3) { // in case of QTC=SEND ot QTC=BOTH qtc_main_panel(SEND); } x = KEY_LEFT; continue; } case 1: // Ctl-a (^A) { addspot(); *comment = '\0'; x = 9; // break; } case KEY_BACKSPACE: // Erase (^H or ) { if (i >= 1) { comment[strlen(comment) - 1] = '\0'; i -= 1; } break; } case 27: // { stoptx(); /* stop sending CW */ if (comment[0] != '\0') { /* if comment not empty */ /* drop exchange so far */ comment[0] = '\0'; i = 0; } else { /* back to callinput */ x = 9; // } break; } case 160: // For CT compatibility Meta- (M- ) { if (ctcomp != 0) { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(message[1]); // F2 } else play_file(ph_message[1]); } break; } case '+': // for CT compatibility { if ((ctcomp != 0) && (strlen(hiscall) > 2)) { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(message[2]); /* F3 */ } else play_file(ph_message[2]); x = 92; // '\' } break; } case KEY_F(1): { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(call); /* F1 */ } else play_file(ph_message[5]); // call break; } case KEY_F(2) ... KEY_F(11): { if (trxmode == CWMODE || trxmode == DIGIMODE) { /* F2...F11 - F1 = 1...10 */ sendmessage(message[x - KEY_F(1)]); } else play_file(ph_message[x - KEY_F(1)]); break; } // case KEY_F(11): // { // if (trxmode == CWMODE || trxmode == DIGIMODE) { // sendmessage(message[10]); /* F11 */ // } else // play_file(ph_message[10]); // break; // } case 176 ... 185: /* Alt-0 to Alt-9 */ { sendmessage(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]++; no_rst ? : mvprintw(12, 49, my_rst); } } else { /* speed up */ speedup(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2d", GetCWSpeed()); } break; } case KEY_NPAGE: /* Page-Down--change MY RST */ { if (change_rst == 1) { if (my_rst[1] > 49) { my_rst[1]--; no_rst ? : mvprintw(12, 49, my_rst); } } else { /* speed down */ speeddown(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2d", GetCWSpeed()); } break; } case ',': // Keyboard Morse case 11: // Ctrl-K { mvprintw(5, 0, ""); keyer(); x = 0; break; } case '\n': case KEY_ENTER: { /* log QSO immediately if CT compatible * or not in contest */ if ((ctcomp == 1) || (contest != 1)) x = 92; // '\' // if (dxped == 1) x = 92; break; } } // End switch if (x >= 'a' && x <= 'z') x = x - 32; // Promote to upper case if (i < 25) { /* normal character -> insert if space left */ if (x >= ' ' && x <= 'Z') { instring[0] = x; addch(x); strcat(comment, instring); i++; refreshp(); } } if ((serial_section_mult == 1) || (dx_arrlsections == 1) || (sectn_mult == 1) || (arrlss == 1) || (cqww == 1) || (stewperry_flg == 1)) { x = checkexchange(x); } /* , , Ctl-K, '\' */ if (x == '\n' || x == KEY_ENTER || x == 9 || x == 11 || x == 92) { if ((exchange_serial == 1 && comment[0] >= '0' && comment[0] <= '9')) { /* align serial nr. */ if (strlen(comment) == 1) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "00"); strcat(comment, commentbuf); } if (strlen(comment) == 2) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "0"); strcat(comment, commentbuf); } } if (wpx == 1 && pfxmult == 0) { /* align serial nr. */ if ((strlen(comment) == 1) || (comment[1] == ' ')) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "00"); strcat(comment, commentbuf); } if ((strlen(comment) == 2) || (comment[2] == ' ')) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "0"); strcat(comment, commentbuf); } } if (sprint == 1) { if ((comment[1] == ' ') && (comment[0] != ' ')) { strcpy(commentbuf, "00"); commentbuf[2] = comment[0]; commentbuf[3] = '\0'; strcat(commentbuf, comment + 1); strcpy(comment, commentbuf); } if ((comment[2] == ' ') && (comment[1] != ' ')) { strcpy(commentbuf, "0"); commentbuf[1] = comment[0]; commentbuf[2] = comment[1]; commentbuf[3] = '\0'; strcat(commentbuf, comment + 2); strcpy(comment, commentbuf); } } if ((pacc_pa_flg == 1) && (countrynr != mycountrynr)) { if (strlen(comment) == 1) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "00"); strcat(comment, commentbuf); } if (strlen(comment) == 2) { strcpy(commentbuf, comment); comment[0] = '\0'; strcat(comment, "0"); strcat(comment, commentbuf); } } if ((arrlss == 1) && (x != 9) && (strlen(section) < 2)) { mvprintw(13, 54, "section?"); mvprintw(12, 54, comment); x = 0; } else if (((serial_section_mult == 1) || (sectn_mult == 1)) && ((x != 9) && (strlen(section) < 1))) { if (serial_or_section == 0 || (serial_or_section == 1 && country_found(hiscall) == 1)) { mvprintw(13, 54, "section?", section); mvprintw(12, 54, comment); refreshp(); } break; } else if (serial_grid4_mult == 1) { // mvprintw(13,54, "section?"); mvprintw(12, 54, comment); refreshp(); gridmult = getgrid(comment); strcpy(section, gridmult); section[4] = '\0'; break; // x = 0; //##debug } else if (stewperry_flg == 1) { if (check_qra(comment) > 0) { mvprintw(13, 54, "locator?"); mvprintw(12, 54, comment); break; } refreshp(); break; } else if (cqww == 1 && trxmode == DIGIMODE && ((countrynr == w_cty) || (countrynr == ve_cty))) { if (strlen(comment) < 5) { mvprintw(13, 54, "state/prov?"); mvprintw(12, 54, comment); if (x == '\n' || x == KEY_ENTER || x == 92) { x = 0; } else { refreshp(); break; } x = 0; } else { refreshp(); break; } } else break; } } refresh_comment(); commentfield = 0; return (x); } /* ------------------------------------------------------------------------ */ char cmpattern[32] = " "; // global char ssexchange[30] = ""; char section[8] = ""; char callupdate[7]; int call_update = 0; char zone_export[3] = " "; char zone_fix[3] = ""; /* ------------------------------------------------------------------------ */ int checkexchange(int x) { extern char comment[]; extern char ssexchange[]; extern GPtrArray *mults_possible; 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 < mults_possible->len; jj++) { char *multi = g_strdup(MULTS_POSSIBLE(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 < mults_possible->len; jj++) { if ((strlen(MULTS_POSSIBLE(jj)) >= 1) && (strcmp(checksection, MULTS_POSSIBLE(jj)) == 0)) { strcpy(section, MULTS_POSSIBLE(jj)); break; // new } } } } } // 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'; for (jj = 0; jj < mults_possible->len; jj++) { if ((strlen(MULTS_POSSIBLE(jj)) >= 1) && (strstr(checksection, MULTS_POSSIBLE(jj)) != NULL)) { strcpy(section, MULTS_POSSIBLE(jj)); } } } } // 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 < mults_possible->len; jj++) { if ((strlen(MULTS_POSSIBLE(jj)) == strlen(checksection)) && (strstr(checksection, MULTS_POSSIBLE(jj)) != NULL)) { strcpy(section, MULTS_POSSIBLE(jj)); // if (strlen(section) == strlen(mults_possible[jj])) break; } } } } // end dx_arrlsections callupdate[0] = '\0'; } // get call update for (ii = 0; ii < LEN(callpats); ii++) { hr = getlastpattern(callpats[ii]); if (hr > 0) { if (((comment[hr] == 'A') && (comment[hr + 1] > 59)) || (comment[hr] == 'K') || (comment[hr] == 'N') || (comment[hr] == 'W') || (comment[hr] == 'V') || (comment[hr] == 'C')) { switch (ii) { case 0 ... 1: strncpy(callupdate, comment + hr, 4); callupdate[4] = '\0'; break; case 2 ... 3: strncpy(callupdate, comment + hr, 5); callupdate[5] = '\0'; break; case 4: strncpy(callupdate, comment + hr, 6); callupdate[6] = '\0'; } if (strlen(callupdate) > 3) { if (call_update == 1) strcpy(hiscall, callupdate); mvprintw(12, 29, " "); mvprintw(12, 29, "%s", hiscall); mvprintw(12, 54, "%s", comment); } } } } OnLowerSearchPanel(32, " "); OnLowerSearchPanel(32, section); /* show section on lower frame of Worked window */ ssexchange[0] = '\0'; /* if (serial_section_mult == 1) { strcat (ssexchange,serial); strcat (ssexchange, " "); } */ strcat(ssexchange, section); // ---------------------------end mults -------------------------- mvprintw(12, 54, comment); refreshp(); return (x); } /* ------------------------------------------------------------------------ */ /** search checkstring in cmpattern * * find first occurence of checkstring in cmpattern * \parm checkstring - the pattern to be found * \return offset of checkstring in cmpattern (or 0 if not found) */ int getlastpattern(char *checkstring) { extern char comment[]; char newpat[80]; int i, x = 0; if ((strlen(cmpattern) - strlen(checkstring)) > 0) { for (i = 0; i < (strlen(cmpattern) - strlen(checkstring)) - 1; i++) { newpat[0] = '\0'; strncat(newpat, cmpattern + i, strlen(comment)); if (strncmp(newpat, checkstring, strlen(checkstring)) == 0) { x = i; } } if (x > strlen(comment)) x = 0; } return (x); } /* ------------------------------------------------------------------------ * return a pointer to the start of grid locator */ char *getgrid(char *comment) { char *gridmult = ""; int multposition = 0; int i = 0; /* search for first letter, that should be the start of the Grid locator*/ for (i = 0; i < strlen(comment); i++) { if (comment[i] > 64 && comment[i] < 91) { multposition = i; break; } } gridmult = comment + multposition; return (gridmult); } /* ------------------------------------------------------------------------ */ /** Edit exchange field */ void exchange_edit (void) { extern char comment[]; int l, b; int i = 0, j; char comment2[27]; l = strlen(comment); b = l - 1; while ((i != 27) && (b <= strlen(comment))) { attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 54, " "); mvprintw(12, 54, comment); mvprintw(12, 54 + b, ""); i = key_get(); // Ctrl-A (^A) or , move to beginning of comment field. if (i == 1 || i == KEY_HOME) { b = 0; // Ctrl-E (^E) or , move to end of comment field, exit edit mode. } else if (i == 5 || i == KEY_END) { b = strlen(comment); break; // Left arrow, move cursor left one position. } else if (i == KEY_LEFT) { if (b > 0) b--; // Right arrow, move cursor right one position. } else if (i == KEY_RIGHT) { if (b < strlen(comment) - 1) { b++; } else break; /* stop edit */ // , erase character under the cursor, // shift all characters to the right of the cursor left one position. } else if (i == KEY_DC) { l = strlen(comment); for (j = b; j <= l; j++) { comment[j] = comment[j + 1]; /* move to left incl.\0 */ } // , erase character to the left of the cursor, // shift all characters to the right of the cursor left one position. } else if (i == KEY_BACKSPACE) { if (b > 0) { b--; l = strlen(comment); for (j = b; j <= l; j++) { comment[j] = comment[j + 1]; } } // not received. } else if (i != 27) { // Promote lower case to upper case. if ((i >= 'a') && (i <= 'z')) i = i - 32; // Accept printable characters. if ((i >= ' ') && (i <= 'Z')) { if (strlen(comment) <= 24) { /* copy including trailing \0 */ strncpy(comment2, comment + b, strlen(comment) - (b - 1)); comment[b] = i; comment[b + 1] = '\0'; strcat(comment, comment2); b++; } } else if (i != 0) i = 27; } } attron(A_STANDOUT); refresh_comment(); } tlf-1.3.0/src/readqtccalls.c0000644000175000017520000001010013014014714012603 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 "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; clear(); qtc_init(); if (qtcdirection & SEND) { mvprintw(4, 0, "Reading QTC sent logfile...\n"); refreshp(); /* 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) { mvprintw(5, 0, "Error opening QTC sent logfile.\n"); refreshp(); 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 0) { mvprintw(4, 0, "Reading QTC callsigns file...\n"); refreshp(); if ((fp = fopen(qtc_cap_calls, "r")) == NULL) { mvprintw(5, 0, "Error opening QTC callsigns file.\n"); refreshp(); 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); } mvprintw(4, 0, "Reading QTC meta logfile...\n"); refreshp(); if ((fp = fopen(QTC_META_LOG, "r")) == NULL) { mvprintw(5, 0, "QTC meta logfile missing, skipping this step.\n"); refreshp(); } else { while (fgets(inputbuffer, 100, fp) != NULL) { /* remember callsign, set marked QTC states */ parse_qtc_flagline(inputbuffer); } fclose(fp); } return s; } tlf-1.3.0/src/zone_nr.c0000644000175000017520000000230613014014714011624 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.3.0/src/cleanup.h0000644000175000017520000000164313014014714011611 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 int cleanup(void); #endif /* CLEANUP_H */ tlf-1.3.0/src/parse_logcfg.c0000644000175000017520000012434713046414310012620 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * 2011-2015 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 "bandmap.h" #include "cw_utils.h" #include "getctydata.h" #include "getpx.h" #include "lancode.h" #include "locator2longlat.h" #include "parse_logcfg.h" #include "qtcvars.h" // Includes globalvars.h #include "setcontest.h" #include "startmsg.h" #include "tlf_curses.h" #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include #endif extern int cwkeyer; extern int digikeyer; 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; int exist_in_country_list(); int continent_found(); char inputbuffer[160]; FILE *fp; void KeywordNotSupported(char *keyword); void ParameterNeeded(char *keyword); void WrongFormat(char *keyword); #define MAX_COMMANDS 236 /* commands in list */ int read_logcfg(void) { extern int nodes; extern int node; extern char *config_file; char defltconf[80]; int status = PARSE_OK; 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; 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 (Read Only) file", defltconf); } } else showstring("Opening config file", config_file); while ( fgets(inputbuffer, 120, fp) != NULL ) { if ((inputbuffer[0] != '#') && (strlen(inputbuffer) > 1)) { /* skip comments and * empty lines */ status |= parse_logcfg(inputbuffer); } } fclose(fp); return( status ); } /** convert band string into index number (0..NBANDS-1) */ int getidxbybandstr(char *confband) { static char bands_strings[NBANDS][4] = {"160", "80", "40", "30", "20", "17", "15", "12", "10"}; int i; g_strchomp(confband); for(i=0; i 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; /* 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; default: break; } } } if (bm_fields[1] != NULL) { int livetime; g_strstrip(bm_fields[1]); livetime = atoi(bm_fields[1]); if (livetime >= 30) /* aging called each second */ bm_config.livetime = livetime; } g_strfreev(bm_fields); } break; } case 33:{ KeywordNotSupported(teststring); break; } case 34:{ showscore_flag = 1; break; } case 35:{ searchflg = 1; break; } case 36:{ KeywordNotSupported(teststring); break; } case 37:{ demode = 1; break; } case 38:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncat(buff, fields[1], 2); SetCWSpeed(atoi(buff)); break; } case 39:{ int tone; PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); tone = atoi(buff); if ((tone > -1) && (tone < 1000)) { sprintf(tonestr, "%d", tone); } break; } case 40:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); weight = atoi(buff); if (weight < -50) weight = -50; if (weight > 50) weight = 50; break; } case 41:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); txdelay = atoi(buff); if (txdelay > 50) txdelay = 50; if (txdelay < 0) txdelay = 0; break; } case 42:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); outputbuff[0] = '\0'; sprintf(outputbuff, "WWV R=%d\n", atoi(buff)); strcpy(lastwwv, outputbuff); break; } case 43:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); outputbuff[0] = '\0'; sprintf(outputbuff, "WWV SFI=%d\n", atoi(buff)); strcpy(lastwwv, outputbuff); break; } case 44:{ showfreq = 1; break; } case 45:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if ((strncmp(buff, "mcedit", 6) == 0) || (strncmp(buff, "mc", 2) == 0) || (strncmp(buff, "MC", 2) == 0)) { editor = EDITOR_MC; break; } j = strstr(fields[1], "joe"); if (j != NULL) { editor = EDITOR_JOE; break; } j = strstr(fields[1], "vi"); if (j != NULL) { editor = EDITOR_VI; break; } else { editor = EDITOR_E3; break; } } case 46:{ partials = 1; break; } case 47:{ use_part = 1; break; } /*case 48:{ fixedmult = 5; break; } case 49:{ fixedmult = 2; break; } case 50:{ fixedmult = 1; break; } */ case 51:{ KeywordNotSupported(teststring); break; } case 52:{ exchange_serial = 1; break; } case 53:{ country_mult = 1; break; } case 54:{ KeywordNotSupported(teststring); break; } case 55:{ portable_x2 = 1; break; } case 56:{ mixedmode = 1; break; } case 57:{ PARAMETER_NEEDED(teststring); g_strlcpy(pr_hostaddress, g_strchomp(fields[1]), 48); break; } case 58:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncat(buff, fields[1], 5); portnum = atoi(buff); packetinterface = TELNET_INTERFACE; break; } case 59:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if (strlen(buff) > 2) { strncpy(tncportname, buff, 39); } else tncport = atoi(buff) + 1; packetinterface = TNC_INTERFACE; break; } case 60:{ packetinterface = FIFO_INTERFACE; break; } case 61:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if (strncmp(buff, "ORION", 5) == 0) rignumber = 2000; else rignumber = atoi(buff); #ifdef HAVE_LIBHAMLIB myrig_model = (rig_model_t) rignumber; #endif 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); buff[0] = '\0'; strcat(buff, fields[1]); strncpy(rigportname, buff, 39); break; } case 65:{ cwkeyer = NET_KEYER; break; } case 66:{ PARAMETER_NEEDED(teststring); netkeyer_port = atoi(fields[1]); break; } case 67:{ PARAMETER_NEEDED(teststring); g_strlcpy(netkeyer_hostaddress, g_strchomp(fields[1]), 16); break; } case 68:{ PARAMETER_NEEDED(teststring); if (node < MAXNODES) { /* split host name and port number, separated by colon */ char **an_fields; an_fields = g_strsplit(fields[1], ":", 2); /* copy host name */ g_strlcpy(bc_hostaddress[node], g_strchomp(an_fields[0]), sizeof(bc_hostaddress[0])); if (an_fields[1] != NULL) { /* copy host port, if found */ g_strlcpy(bc_hostservice[node], g_strchomp(an_fields[1]), sizeof(bc_hostservice[0])); } g_strfreev(an_fields); if (node++ < MAXNODES) nodes++; } lan_active = 1; break; } case 69:{ char c; PARAMETER_NEEDED(teststring); c = toupper(fields[1][0]); if (c >= 'A' && c <= 'H') thisnode = c; else WrongFormat(teststring); break; } case 70:{ cqwwm2 = 1; break; } case 71:{ landebug = 1; break; } case 72 ... 81:{ /* messages */ PARAMETER_NEEDED(teststring); strcpy(message[ii - 58], fields[1]); break; } case 82:{ call_update = 1; break; } case 83:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncat(buff, fields[1], 3); timeoffset = atoi(buff); if (timeoffset > 23) timeoffset = 23; if (timeoffset < -23) timeoffset = -23; break; } case 84:{ time_master = 1; break; } case 85:{ ctcomp = 1; break; } case 86:{ two_point = 1; universal = 1; break; } case 87:{ PARAMETER_NEEDED(teststring); g_strlcpy(multsfile, g_strchomp(fields[1]), 80); multlist = 1; universal = 1; break; } case 88:{ serial_section_mult = 1; break; } case 89:{ sectn_mult = 1; break; } case 90:{ PARAMETER_NEEDED(teststring); strcpy(markerfile, g_strchomp(fields[1])); xplanet = 1; break; } case 91:{ dx_arrlsections = 1; setcontest(); break; } case 92:{ PARAMETER_NEEDED(teststring); strcpy(markerfile, g_strchomp(fields[1])); xplanet = 2; break; } case 93:{ PARAMETER_NEEDED(teststring); strcpy(markerfile, g_strchomp(fields[1])); xplanet = 3; break; } case 94:{ nob4 = 1; break; } case 95:{ /* COUNTRYLIST (in file or listed in logcfg.dat) LZ3NY */ int counter = 0; static char country_list_raw[50] = ""; /* use only first COUNTRY_LIST definition */ char temp_buffer[255] = ""; char buffer[255] = ""; FILE *fp; PARAMETER_NEEDED(teststring); if (strlen(country_list_raw) == 0) {/* only if first definition */ /* First of all we are checking if the parameter in COUNTRY_LIST= is a file name. If it is we start parsing the file. If we find a line starting with our case insensitive contest name, we copy the countries from that line into country_list_raw. If the input was not a file name we directly copy it into country_list_raw (must not have a preceeding contest name). */ g_strlcpy(temp_buffer, fields[1], sizeof(temp_buffer)); g_strchomp(temp_buffer); /* drop trailing whitespace */ if ((fp = fopen(temp_buffer, "r")) != NULL) { while ( fgets(buffer, sizeof(buffer), fp) != NULL ) { g_strchomp( buffer ); /* no trailing whitespace*/ /* accept only a line starting with the contest name * (CONTEST=) followed by ':' */ if (strncasecmp (buffer, whichcontest, strlen(whichcontest) - 1) == 0) { strncpy(country_list_raw, buffer + strlen(whichcontest) + 1, strlen(buffer) - 1); } } fclose(fp); } else { /* not a file */ if (strlen(temp_buffer) > 0) strcpy(country_list_raw, temp_buffer); } } /* parse the country_list_raw string into an array * (countrylist) for future use. */ tk_ptr = strtok(country_list_raw, ":,.- \t"); counter = 0; if (tk_ptr != NULL) { while (tk_ptr) { strcpy(countrylist[counter], tk_ptr); tk_ptr = strtok(NULL, ":,.-_\t "); counter++; } } /* on which multiplier side of the rules we are */ getpx(call); mult_side = exist_in_country_list(); setcontest(); break; } case 96:{ // COUNTRY_LIST_POINTS PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (countrylist_points == -1) countrylist_points = atoi(c_temp); break; } case 97:{ // COUNTRY_LIST_ONLY countrylist_only = 1; if (mult_side == 1) countrylist_only = 0; break; } case 98:{ //HOW Many points scores my country lz3ny PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (my_country_points == -1) my_country_points = atoi(c_temp); break; } case 99:{ //MY_CONTINENT_POINTS lz3ny PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (my_cont_points == -1) my_cont_points = atoi(c_temp); break; } case 100:{ //DX_CONTINENT_POINTS lz3ny PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (dx_cont_points == -1) dx_cont_points = atoi(c_temp); break; } /* end LZ3NY mod */ case 101:{ // show time in searchlog window show_time = 1; break; } case 102:{ // use rxvt colours use_rxvt = 1; break; } case 103 ... 116:{ // get phone messages PARAMETER_NEEDED(teststring); g_strlcpy(ph_message[ii - 103], g_strchomp(fields[1]), 71); mvprintw(15, 5, "A: Phone message #%d is %s", ii - 103, ph_message[ii - 103]); // (W9WI) refreshp(); // system ("sleep 2"); 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 138:{ int i = 0; PARAMETER_NEEDED(teststring); tk_ptr = strtok(fields[1], ":,.-_\t "); if (tk_ptr != NULL) { while (tk_ptr) { if (i < 20) scale_values[i] = atoi(tk_ptr); tk_ptr = strtok(NULL, ":,.-_\t "); i++; } } break; } case 139:{ // dsp for s-meter 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); if (strncmp(fields[1], "RECV", 4) == 0) { qtcdirection = RECV; } if (strncmp(fields[1], "SEND", 4) == 0) { qtcdirection = SEND; } else if (strcmp(fields[1], "BOTH")) { qtcdirection = RECV | SEND; } if (qtcdirection == 0) { KeywordNotSupported(teststring); } else { int q; for(q=0; q 0) strcpy(cont_multiplier_list, temp_buffer); } } /* creating the array */ tk_ptr = strtok(cont_multiplier_list, ":,.- \t"); counter = 0; if (tk_ptr != NULL) { while (tk_ptr) { strncpy(continent_multiplier_list[counter], tk_ptr, 2); tk_ptr = strtok(NULL, ":,.-_\t "); counter++; } } setcontest(); break; } case 164:{ // CONTINENT_LIST_POINTS PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (continentlist_points == -1) { continentlist_points = atoi(c_temp); } break; } case 165:{ // CONTINENT_LIST_ONLY continentlist_only = 1; break; } case 166:{ // BANDWEIGHT_POINTS PARAMETER_NEEDED(teststring); static char bwp_params_list[50] = ""; int bandindex = -1; if (strlen(bwp_params_list) == 0) { g_strlcpy(bwp_params_list, fields[1], sizeof(bwp_params_list)); g_strchomp(bwp_params_list); } tk_ptr = strtok(bwp_params_list, ";:,"); if (tk_ptr != NULL) { while (tk_ptr) { bandindex = getidxbybandstr(g_strchomp(tk_ptr)); tk_ptr = strtok(NULL, ";:,"); if (tk_ptr != NULL && bandindex >= 0) { bandweight_points[bandindex] = atoi(tk_ptr); } tk_ptr = strtok(NULL, ";:,"); } } break; } case 167:{ // BANDWEIGHT_MULTIS PARAMETER_NEEDED(teststring); static char bwm_params_list[50] = ""; int bandindex = -1; if (strlen(bwm_params_list) == 0) { g_strlcpy(bwm_params_list, fields[1], sizeof(bwm_params_list)); g_strchomp(bwm_params_list); } tk_ptr = strtok(bwm_params_list, ";:,"); if (tk_ptr != NULL) { while (tk_ptr) { bandindex = getidxbybandstr(g_strchomp(tk_ptr)); tk_ptr = strtok(NULL, ";:,"); if (tk_ptr != NULL && bandindex >= 0) { bandweight_multis[bandindex] = atoi(tk_ptr); } tk_ptr = strtok(NULL, ";:,"); } } break; } case 168:{ /* based on LZ3NY code, by HA2OS PFX_NUM_MULTIS (in file or listed in logcfg.dat), We directly copy it into pfxnummulti_str, then parse the prefixlist and fill the pfxnummulti array. */ int counter = 0; int pfxnum; static char pfxnummulti_str[50] = ""; char parsepfx[15] = ""; PARAMETER_NEEDED(teststring); g_strlcpy(pfxnummulti_str, fields[1], sizeof(pfxnummulti_str)); g_strchomp(pfxnummulti_str); /* creating the array */ tk_ptr = strtok(pfxnummulti_str, ","); counter = 0; if (tk_ptr != NULL) { while (tk_ptr) { parsepfx[0] = '\0'; if (isdigit(tk_ptr[strlen(tk_ptr)-1])) { sprintf(parsepfx, "%sAA", tk_ptr); } else { sprintf(parsepfx, "%s0AA", tk_ptr); } pfxnummulti[counter].countrynr = getctydata(parsepfx); for(pfxnum=0; pfxnum<10; pfxnum++) { pfxnummulti[counter].qsos[pfxnum] = 0; } tk_ptr = strtok(NULL, ","); counter++; } } pfxnummultinr = counter; setcontest(); break; } case 169:{ /* wpx style prefixes mult */ pfxmultab = 1; /* enable pfx on all band */ break; } case 170 ... 181: { PARAMETER_NEEDED(teststring); strcpy(qtc_recv_msgs[ii - 170], fields[1]); break; } case 182 ... 193: { PARAMETER_NEEDED(teststring); strcpy(qtc_send_msgs[ii - 182], fields[1]); break; } case 194 ... 207:{ // get QTC recv phone messages PARAMETER_NEEDED(teststring); g_strlcpy(qtc_phrecv_message[ii - 194], g_strchomp(fields[1]), 71); mvprintw(15, 5, "A: QTC RECV phone message #%d is %s", ii - 194, qtc_phrecv_message[ii - 194]); refreshp(); break; } case 208 ... 221:{ // get QTC send phone messages PARAMETER_NEEDED(teststring); g_strlcpy(qtc_phsend_message[ii - 208], g_strchomp(fields[1]), 71); mvprintw(15, 5, "A: QTC SEND phone message #%d is %s", ii - 208, qtc_phrecv_message[ii - 208]); refreshp(); break; } case 222: { qtcrec_record = 1; break; } case 223: { PARAMETER_NEEDED(teststring); int p, q = 0, i = 0, s = 0; for(p=0; p 0 && fields[1][p] == ' ') { s = 1; qtcrec_record_command_shutdown[p] = '\0'; } if (s == 0) { qtcrec_record_command_shutdown[p] = fields[1][p]; } if (fields[1][p] == '$') { qtcrec_record_command[i][q] = '\0'; i=1; p++; q=0; } if (fields[1][p] != '\n') { qtcrec_record_command[i][q] = fields[1][p]; } q++; qtcrec_record_command[i][q] = ' '; } if (qtcrec_record_command[i][q-1] != '&') { qtcrec_record_command[i][q++] = ' '; qtcrec_record_command[i][q++] = '&'; } qtcrec_record_command[i][q] = '\0'; break; } case 224: { PARAMETER_NEEDED(teststring); if (strcmp(g_strchomp(fields[1]), "CONTINENTLIST") == 0) { if (strlen(continent_multiplier_list[0]) == 0) { showmsg ("WARNING: you need to set the CONTINENTLIST parameter..."); sleep(5); exit(1); } exclude_multilist_type = 1; } else if (strcmp(g_strchomp(fields[1]), "COUNTRYLIST") == 0) { if (strlen(countrylist[0]) == 0) { showmsg ("WARNING: you need to set the COUNTRYLIST parameter..."); sleep(5); exit(1); } exclude_multilist_type = 2; } else { showmsg ("WARNING: choose one of these for EXCLUDE_MULTILIST: CONTINENTLIST, COUNTRYLIST"); sleep(5); exit(1); } break; } case 225:{ PARAMETER_NEEDED(teststring); strcpy(message[SP_CALL_MSG], fields[1]); break; /* end messages */ } case 226:{ PARAMETER_NEEDED(teststring); g_strlcpy(qtc_cap_calls, g_strchomp(fields[1]), sizeof(exchange_list)); break; } case 227: { qtc_auto_filltime = 1; break; } case 228: { bmautograb = 1; break; } case 229: { bmautoadd = 1; break; } case 230: { qtc_recv_lazy = 1; break; } case 231: { sprint_mode = 1; break; } case 232:{ #ifndef HAVE_LIBXMLRPC showmsg ("WARNING: XMLRPC not compiled - skipping setup."); sleep(2); digikeyer = NO_KEYER; #else if (fields[1] != NULL) { g_strlcpy(fldigi_url, g_strchomp(fields[1]), sizeof(fldigi_url)); } digikeyer = FLDIGI; #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; } 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 not supported keyword */ void KeywordNotSupported(char *keyword) { char msgbuffer[100]; sprintf(msgbuffer, "Keyword '%s' not supported. See man page.\n", keyword); Complain(msgbuffer); } /** Complain about missing parameter */ void ParameterNeeded(char *keyword) { char msgbuffer[100]; sprintf(msgbuffer, "Keyword '%s' must be followed by an parameter ('=....'). See man page.\n", keyword); Complain(msgbuffer); } /** Complain about wrong parameter format */ void WrongFormat(char *keyword) { char msgbuffer[100]; sprintf(msgbuffer, "Wrong parameter format for keyword '%s'. See man page.\n", keyword); Complain(msgbuffer); } tlf-1.3.0/src/changepars.c0000644000175000017520000005761013046414310012276 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 "gettxinfo.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 "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" #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include #endif #define MULTS_POSSIBLE(n) ((char *)g_ptr_array_index(mults_possible, n)) int debug_tty(void); int changepars(void) { extern int cluster; extern int shortqsonr; extern int searchflg; extern int demode; extern int contest; extern int announcefilter; extern int showscore_flag; extern int zonedisplay; extern int trxmode; extern char hiscall[]; extern int rit; extern int trx_control; extern int editor; extern int packetinterface; extern int nopacket; extern int cqdelay; extern int ctcomp; extern char *config_file; extern int miniterm; extern int total; #ifdef HAVE_LIBHAMLIB extern freq_t outfreq; #else extern int outfreq; #endif extern int simulator; extern int cwkeyer; extern char synclogfile[]; extern char sc_volume[]; extern int cwstart; char parameterstring[20]; char parameters[51][19]; char cmdstring[80]; int i, k, x, nopar = 0; int maxpar = 50; int volumebuffer; int currentmode = 0; int rc; 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"); strcpy(parameters[45], "DEBUG"); strcpy(parameters[46], "MINITERM"); strcpy(parameters[47], "RTTY"); strcpy(parameters[48], "SOUND"); strcpy(parameters[49], "CWMODE"); strcpy(parameters[50], "CHARS"); nopar = 0; attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 29, "PARAMETER? "); refreshp(); mvprintw(12, 29, " "); mvprintw(12, 29, ""); refreshp(); echo(); getstr(parameterstring); noecho(); for (k = 0; parameterstring[k]; k++) parameterstring[k] = toupper(parameterstring[k]); for (i = 0; i <= maxpar; i++) { if (strncmp(parameterstring, parameters[i], 3) == 0) { break; } } switch (i) { case 0: /* SPOTS) */ { /* SPOTS not supported anymore * - default to MAP*/ cluster = MAP; break; } case 1: /* BANDMAP */ { cluster = MAP; break; } case 2: /* CLOFF */ { cluster = NOCLUSTER; break; } case 3: /* CLUSTER */ { cluster = CLUSTER; announcefilter = FILTER_ALL; break; } case 4: /* SHORTNR */ { shortqsonr = SHORTCW; break; } case 5: /* LONGNR */ { shortqsonr = LONGCW; break; } case 6: /* MESSAGE */ { message_change(i); break; } case 7: /* LIST */ { listmessages(); break; } case 8: /* CHECK */ { searchflg = SEARCHWINDOW; break; } case 9: /* NOCHECK */ { searchflg = 0; break; } case 10: /* TONE */ { set_tone(); break; } case 11: /* EDIT */ { logedit(); break; } case 12: /* VIEW */ { logview(); break; } case 13: /* HELP */ { show_help(); break; } case 14: /* DEMODE */ { if (demode == SEND_DE) demode = 0; else demode = SEND_DE; mvprintw(13, 29, "DE-mode is %d", demode); refreshp(); sleep(1); break; } case 15: /* CONTEST */ { if (contest == CONTEST) contest = 0; else { contest = CONTEST; searchflg = SEARCHWINDOW; } mvprintw(13, 29, "CONTEST-mode is %d", contest); refreshp(); sleep(1); break; } case 16: /* FILTER */ { announcefilter++; if (announcefilter > 3) announcefilter = 0; mvprintw(13, 29, "FILTER-mode is %d", announcefilter); refreshp(); sleep(1); break; } case 17: /* SCORE */ { if (showscore_flag == 0) showscore_flag = 1; else { showscore_flag = 0; } mvprintw(13, 29, "Show score-mode is %d", showscore_flag); refreshp(); sleep(1); break; } case 18: /* WRITE CABRILLO FILE */ { int old_cluster = cluster; cluster = NOCLUSTER; write_cabrillo(); cluster = old_cluster; break; } case 19: /* EXIT */ case 38: /* QUIT */ { writeparas(); clear(); cleanup_telnet(); endwin(); puts("\n\nThanks for using TLF.. 73\n"); exit(0); break; } case 20: /* TXFILE */ { break; } case 21: /* ZONES */ { if (zonedisplay == 0) zonedisplay = 1; else { zonedisplay = 0; } break; } case 22: /* COUNTRIES */ { show_mults(); refreshp(); sleep(1); break; } case 23: /* MODE */ { if (trxmode == CWMODE) trxmode = SSBMODE; else if (trxmode == SSBMODE) trxmode = DIGIMODE; else trxmode = CWMODE; if (trxmode == CWMODE) { mvprintw(13, 29, "TRXMODE = CW"); } else if (trxmode == SSBMODE) mvprintw(13, 29, "TRXMODE = SSB"); else mvprintw(13, 29, "TRXMODE = DIG"); refreshp(); sleep(1); break; } case 24: /* SET PARAMETERS */ case 29: /* CFG PARAMETERS */ { clear(); if (editor == EDITOR_JOE) { strcpy(cmdstring, "joe "); } else if (editor == EDITOR_VI) { strcpy(cmdstring, "vi "); } else if (editor == EDITOR_MC) { strcpy(cmdstring, "mcedit "); } else { strcpy(cmdstring, "e3 "); } strcat(cmdstring, config_file); rc = system(cmdstring); read_logcfg(); read_rules(); /* also reread rules file */ writeparas(); mvprintw(24, 0, "Logcfg.dat loaded, parameters written.."); refreshp(); 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; if (trx_control == 1) outfreq = SETCWMODE; break; } case 31: /* SSBMODE */ { trxmode = SSBMODE; outfreq = SETSSBMODE; break; } case 32: /* DIGIMODE */ { trxmode = DIGIMODE; break; } case 33: /* PACKET */ { if ((nopacket == 0) && (packetinterface > 0)) packet(); break; } case 34: /* SIMULATOR */ { if (simulator == 0) { simulator = 1; if (ctcomp == 1) { mvprintw(13, 19, "The simulator only works in TRmode. Switching to TRmode"); ctcomp = 0; } else mvprintw(13, 29, "Simulator on"); refreshp(); if (cwkeyer == NET_KEYER) { if (netkeyer(K_WORDMODE, NULL) < 0) { mvprintw(24, 0, "keyer not active; switching to SSB"); trxmode = SSBMODE; clear_display(); } } } else { simulator = 0; mvprintw(13, 29, "Simulator off"); refreshp(); if (cwkeyer == NET_KEYER) { if (netkeyer(K_RESET, NULL) < 0) { mvprintw(24, 0, "keyer not active; switching to SSB"); trxmode = SSBMODE; clear_display(); } } } break; } case 35: /* INFO */ { int currentterm = miniterm; miniterm = 0; networkinfo(); miniterm = currentterm; if (currentmode == DIGIMODE) trxmode = DIGIMODE; break; } case 36: /* CLOFF */ { cluster = FREQWINDOW; break; } case 37: /* RECONNECT */ { if ((nopacket == 0) && (packetinterface > 0)) { cleanup_telnet(); init_packet(); packet(); } break; } case 39: /* CQDELAY */ { mvprintw(12, 29, "CQD: pgup/dwn", cqdelay); refreshp(); x = 1; while (x) { x = key_get(); switch (x) { // , increase autoCQ delay by 1/2 second. case KEY_PPAGE: { if (cqdelay <= 60) { cqdelay++; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 19, " "); mvprintw(0, 19, "%i", cqdelay); break; } } // , decrease autoCQ delay by 1/2 second. case KEY_NPAGE: { if (cqdelay >= 1) { cqdelay--; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 19, " "); mvprintw(0, 19, "%i", cqdelay); break; } default: x = 0; } } } attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 29 + strlen(hiscall), ""); break; } case 40: /* ADIF */ { write_adif(); break; } case 41: /* SYNC */ { if (strlen(synclogfile) > 0) synclog(synclogfile); scroll_log(); /** \todo register return value */ total = 0; readcalls(); if (qtcdirection > 0) { readqtccalls(); } clear_display(); break; } case 42: /* RESCORE */ { /** \todo register return value */ total = 0; readcalls(); if (qtcdirection > 0) { readqtccalls(); } clear_display(); break; } case 43: /* SCVOLUME - set soundcard volume */ { volumebuffer = atoi(sc_volume); mvprintw(12, 29, "Vol: pgup/dwn"); refreshp(); usleep(500000); mvprintw(12, 29, "Vol: "); mvprintw(12, 29, "Vol: %d", volumebuffer); x = 1; while (x) { x = key_get(); switch (x) { // , increase volume by 5%. case KEY_PPAGE: { if (volumebuffer < 95) volumebuffer += 5; break; } // , decrease volume by 5%. case KEY_NPAGE: { if (volumebuffer >= 5) volumebuffer -= 5; break; } default: x = 0; } attron(COLOR_PAIR(COLOR_GREEN) | A_STANDOUT); mvprintw(12, 34, " "); mvprintw(12, 34, "%d", volumebuffer); if (volumebuffer >= 0 && volumebuffer <= 99) sprintf(sc_volume, "%d", volumebuffer); netkeyer(K_STVOLUME, sc_volume); } clear_display(); break; } case 44: /* SCAN */ { int currentterm = miniterm; miniterm = 0; testaudio(); clear_display(); miniterm = currentterm; break; } case 45: /* DEBUG */ { debug_tty(); clear_display(); break; } case 46: /* MINITERM ON/OFF */ { if (miniterm == 1) miniterm = 0; else miniterm = 1; break; } case 47: /* RTTY Initialize mode (MFJ1278B controller) */ { sendmessage("MODE VB\015K\015"); trxmode = DIGIMODE; break; } case 48: /* SOUND */ { clear_display(); record(); clear_display(); break; } case 50: /* CHARS */ { mvprintw(13, 29, "Autosend: (0, 2..5, m)?"); refreshp(); x = 1; /* wait for correct input or ESC */ while ((x != 0) && !((x >= 2) && (x <= 5)) && !(x == 'm' - '0') ) { x = key_get(); if (x == 27) break; x = x - '0'; } /* remember new setting */ if (x != 27) { if (x == 0 || (x >= 2 && x <= 5)) cwstart = x; else cwstart = -1; } if (cwstart > 0) mvprintw(13,29, "Autosend now: %1d ", cwstart); else { if (cwstart < 0 ) mvprintw(13,29, "Autosend now: Manual "); else mvprintw(13,29, "Autosend now: OFF "); } refreshp(); break; } 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); } /* -------------------------------------------------------------- */ int 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 i, j, inode; clear(); attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 0; j <= 24; j++) mvprintw(j, 0, " "); 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(); attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); for (i = 0; i <= 24; i++) mvprintw(i, 0, " "); clear_display(); return (0); } /* -------------------------------------------------------------- */ int multiplierinfo(void) { extern int arrlss; extern int serial_section_mult; extern int sectn_mult; extern char mults[MAX_MULTS][12]; extern int mult_bands[MAX_MULTS]; extern int multarray_nr; extern GPtrArray *mults_possible; int j, k, vert, hor, cnt, found; char mprint[50]; clear(); attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 0; j <= 24; j++) mvprintw(j, 0, " "); 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 >= mults_possible->len) break; for (hor = 5; hor < 15; hor++) { if (cnt >= mults_possible->len) break; g_strlcpy(chmult, MULTS_POSSIBLE(cnt), sizeof(chmult)); /* check if in worked multis */ found = 0; for (j = 0; j < multarray_nr; j++) { g_strlcpy(ch2mult, mults[j], 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, MULTS_POSSIBLE(cnt), 5); mvprintw(vert, hor * 4, "%s", mprint); cnt++; } } } if (serial_section_mult == 1 || (sectn_mult == 1 && arrlss != 1)) { char * tmp; int worked_at; mvprintw(0, 30, "REMAINING SECTIONS"); cnt = 0; for (vert = 2; vert < 22; vert++) { if (cnt >= mults_possible->len) break; for (hor = 0; hor < 7; hor++) { if (cnt >= mults_possible->len) break; worked_at = 0; /* lookup if already worked */ for (k = 0; k < multarray_nr; k++) { if (strstr(mults[k], MULTS_POSSIBLE(cnt)) != NULL) { worked_at = mult_bands[k]; break; } } tmp = g_strndup(MULTS_POSSIBLE(cnt), 4); sprintf(mprint, "%-4s", tmp); g_free(tmp); strcat(mprint, (worked_at & BAND160)?"*":"-"); strcat(mprint, (worked_at & BAND80)?"*":"-"); strcat(mprint, (worked_at & BAND40)?"*":"-"); strcat(mprint, (worked_at & BAND20)?"*":"-"); strcat(mprint, (worked_at & BAND15)?"*":"-"); strcat(mprint, (worked_at & BAND10)?"*":"-"); mprint[11] = '\0'; mvprintw(vert, 2 + hor * 11, "%s", mprint); cnt++; } } } attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); mvprintw(23, 22, " --- Press a key to continue --- "); refreshp(); (void)key_get(); attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); for (j = 0; j <= 24; j++) mvprintw(j, 0, " "); clear_display(); return (0); } /* ------------------------- radio link debug ------------------------------ */ int debug_tty(void) { extern char rigportname[]; extern int serial_rate; int fdSertnc; int tncport = 0; int i, rc; 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(); rc = 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); } tlf-1.3.0/src/autocq.c0000644000175000017520000000616313014014714011453 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 "printcall.h" #include "sendbuf.h" #include "stoptx.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #include "time_update.h" int play_file(char *audiofile); /* FIXME: Needs refactorization and cleanup of logic */ int auto_cq(void) { extern char mode[]; extern char message[][80]; extern char ph_message[14][80]; extern int cqdelay; extern int cqmode; extern int trxmode; extern char hiscall[]; int inchar = -1, delayval = 0, cw_message_len = 0, realspeed = 0, j = 0; long message_time = 0; char cwmessage[80]; int letter = 0; strcpy(mode, "AUTO_CQ "); clear_display(); while (delayval == 0) { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(message[11]); } else play_file(ph_message[11]); mvprintw(12, 29 + strlen(hiscall), ""); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); delayval = cqdelay; if (trxmode == CWMODE) { realspeed = GetCWSpeed(); strncpy(cwmessage, message[11], 79); cw_message_len = cw_message_length(cwmessage); message_time = (long) (1200.0 / realspeed) * cw_message_len; for (j = 0; j < 10; j++) { usleep(message_time * 100); time_update(); inchar = key_poll(); if (inchar > 0) { letter = inchar; stoptx(); break; } } } for (delayval = cqdelay; delayval > 0; delayval--) { if (inchar < 0) { mvprintw(12, 29, "Auto cq %d ", delayval - 1); refreshp(); } else { break; } usleep(500000); time_update(); if (inchar < 0) inchar = key_poll(); letter = inchar; if (inchar > 0) break; } mvprintw(12, 29, " "); mvprintw(12, 29, ""); refreshp(); } if (cqmode == CQ) strcpy(mode, "Log "); else strcpy(mode, "S&P "); clear_display(); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); // Promote lower case letters to uppercase. if (letter > 96 && letter < 123) letter -= 32; mvprintw(12, 29, " "); printcall(); if (inchar == 27) return (27); else return (letter); } tlf-1.3.0/src/cleanup.c0000644000175000017520000000334513046414310011606 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * Cleanup call input field * *--------------------------------------------------------------*/ #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #include "write_keyer.h" int cleanup(void) { extern char hiscall[]; extern char comment[]; extern char my_rst[]; extern char his_rst[]; extern int defer_store; int k = 0; attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 29, " "); mvprintw(12, 54, " "); mvprintw(12, 29, ""); attron(COLOR_PAIR(C_LOG | A_STANDOUT)); for (k = 1; k <= 5; k++) { mvprintw(k, 0, "%s", " "); } refreshp(); hiscall[0] = '\0'; comment[0] = '\0'; his_rst[1] = '9'; my_rst[1] = '9'; defer_store = 0; keyer_flush(); return (0); } tlf-1.3.0/src/searchlog.c0000644000175000017520000005356613046414310012140 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 */ /* ------------------------------------------------------------ * Search log for calls / bands / countries * *--------------------------------------------------------------*/ #include #include #include #include "dxcc.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" GPtrArray *callmaster = NULL; 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); } static char searchresult[MAX_CALLS][82]; static char result[MAX_CALLS][82]; /* DJ1YFK "worked window"-patch */ static char band_yfk[5] = ""; static char testcall_yfk[14] = ""; static char hiscall_yfk[14] = " "; /* */ void searchlog(char *searchstring) { extern int isdupe; // LZ3NY auto-b4 patch extern int searchflg; extern int dupe; extern char band[9][4]; extern int bandinx; extern int partials; extern int cqww; extern int pacc_pa_flg; extern int pacc_qsos[10][10]; extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern int countrynr; extern int contest; extern int wpx; extern int arrlss; extern int zones[MAX_ZONES]; extern char pxstr[]; 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; extern int countries[MAX_DATALINES]; extern int use_part; extern int block_part; extern int mixedmode; extern int ignoredupe; extern int qso_once; extern int trxmode; extern char qsos[MAX_QSOS][LOGLINELEN+1]; extern char hiscall[]; extern char zone_export[]; extern char zone_fix[]; extern int show_time; extern int wazmult; extern int itumult; extern int country_mult; extern int minitest; extern struct worked_t worked[]; extern struct tm *time_ptr; int srch_index = 0; int r_index = 0; int xx; int yy; int bandnr; int bm[6]; char s_inputbuffer[LOGLINELEN+1] = ""; char s_inputbuffercpy[LOGLINELEN+1] = ""; char printres[14] = ""; char *loc; dxcc_data *dx; static char zonebuffer[3] = ""; static int z, z1; static int i, j, k, l; static long int m; static int pxnr; static int qso_index = 0; static int xwin = 1; static int ywin = 1; char qtccall[15]; // temp str for qtc search char qtcflags[6] = {' ', ' ', ' ', ' ', ' ', ' '}; int pfxnumcntidx; int found, dupe_veto, mod; time_t currtime; get_time(); struct t_qtc_store_obj *qtc_temp_ptr; if (!initialized) { InitSearchPanel(); initialized = 1; } l = 0; z = 0; s_inputbuffer[0] = '\0'; zonebuffer[0] = '\0'; /* show checkwindow and partials */ if (strlen(hiscall) > 1 && searchflg == SEARCHWINDOW) { ShowSearchPanel(); if (strlen(hiscall) == 2) z1 = 0; qso_index = 0; srch_index = 0; r_index = 0; /* durchsuche komplettes Log nach 'hiscall' als substring und * kopiere gefundene QSO's nach 'searchresults' */ while (strlen(qsos[qso_index]) > 4) { if (((qsos[qso_index][3] == 'C' && trxmode == CWMODE) || (qsos[qso_index][3] == 'S' && trxmode == SSBMODE) || (qsos[qso_index][3] == 'D' && trxmode == DIGIMODE)) || mixedmode == 0) { // ist letzterTest korrekt? strncpy(s_inputbuffer, qsos[qso_index], LOGLINELEN); if (strstr(s_inputbuffer, hiscall) != 0) { strcpy(searchresult[srch_index], s_inputbuffer); searchresult[srch_index][80] = '\0'; if (srch_index++ > MAX_CALLS - 1) break; } } qso_index++; } // initialize array best matching callsigns for (xx = 0; xx < 6; xx++) { bm[xx] = 0; } for (r_index = 0; r_index < srch_index; r_index++) { strncpy(result[r_index], searchresult[r_index], 7); /* band + mode */ result[r_index][6] = '\0'; if (show_time == 1) // show qso time strncat(result[r_index], searchresult[r_index] + 17, 5); else // show qso number strncat(result[r_index], searchresult[r_index] + 22, 5); strncat(result[r_index], searchresult[r_index] + 28, 12); /* call */ strncat(result[r_index], searchresult[r_index] + 52, 16); /* exch */ } /* DJ1YFK worked-window patch */ strncpy(band_yfk, searchresult[r_index], 3); band_yfk[3] = '\0'; bandnr = atoi(band_yfk); strncpy(testcall_yfk, searchresult[r_index] + 29, 12); testcall_yfk[13] = '\0'; // Create string with his call + whitespaces strcpy(hiscall_yfk, " "); for (xx = 0; xx < strlen(hiscall); xx++) { hiscall_yfk[xx] = hiscall[xx]; } // find out how many characters match yy = 0; for (xx = 0; xx < 13; xx++) { if (hiscall_yfk[xx] == testcall_yfk[xx]) { yy++; } } // delete QSOs that match worse than anything before // of course still less-good matching QSOs can be in the array, // but *before* the better matching one, so they will be // overwritten later. switch (bandnr) { case 160:{ if (yy < bm[0]) { result[r_index][0] = '\0'; } else { bm[0] = yy; } break; } case 80:{ if (yy < bm[1]) { result[r_index][0] = '\0'; } else { bm[1] = yy; } break; } case 40:{ if (yy < bm[2]) { result[r_index][0] = '\0'; } else { bm[2] = yy; } break; } case 20:{ if (yy < bm[3]) { result[r_index][0] = '\0'; } else { bm[3] = yy; } break; } case 15:{ if (yy < bm[4]) { result[r_index][0] = '\0'; } else { bm[4] = yy; } break; } case 10:{ if (yy < bm[5]) { result[r_index][0] = '\0'; } else { bm[5] = yy; } } } /* end of patch */ dupe = NODUPE; wbkgd( search_win, (chtype)(' ' | COLOR_PAIR(C_LOG)) ); werase( search_win ); wnicebox(search_win, 0, 0, nr_bands, 37, "Worked"); if (qtcdirection > 0) { mvwprintw(search_win, 0, 35, "Q"); } wattrset(search_win, COLOR_PAIR(C_LOG) | A_STANDOUT ); for (i = 0; i < nr_bands; i++) mvwprintw(search_win, i + 1, 1, " "); mvwprintw(search_win, 1, 1, " 10"); mvwprintw(search_win, 2, 1, " 15"); mvwprintw(search_win, 3, 1, " 20"); mvwprintw(search_win, 4, 1, " 40"); mvwprintw(search_win, 5, 1, " 80"); mvwprintw(search_win, 6, 1, "160"); if (IsAllBand()) { mvwprintw(search_win, 7, 1, " 12"); mvwprintw(search_win, 8, 1, " 17"); mvwprintw(search_win, 9, 1, " 30"); } refreshp(); wattrset(search_win, COLOR_PAIR(C_WINDOW) | A_STANDOUT); k = 0; /* print resulting call in line according to band in check window */ for (r_index = 0; r_index < srch_index; r_index++) { strcpy(s_inputbuffer, result[r_index]); s_inputbuffer[37] = '\0'; if ((hiscall[0] == s_inputbuffer[12]) && (strlen(hiscall) >= 3 && (s_inputbuffer[12 + strlen(hiscall)] == ' '))) { if ((strncmp(band[bandinx], s_inputbuffer, 3) == 0) || (qso_once == 1)) { if (ignoredupe == 0) { dupe_veto = 1; if (minitest > 0) { found = searchcallarray(hiscall); if (found > -1) { currtime = mktime(time_ptr); mod = ((long)currtime)%minitest; /* how many secods passed till last period */ if (worked[found].qsotime[trxmode][bandinx] < (((long)currtime)-mod)) { dupe_veto = 0; } } } if (dupe_veto == 1) { if (mixedmode == 0) { wattrset(search_win, COLOR_PAIR(C_DUPE)); dupe = ISDUPE; beep(); } else { if (((s_inputbuffer[3] == 'C') && (trxmode == CWMODE)) || ((s_inputbuffer[3] == 'S') && (trxmode == SSBMODE))) { wattrset(search_win, COLOR_PAIR(C_DUPE)); dupe = ISDUPE; beep(); } } // end mixed } } // end ignore } } if (s_inputbuffer[1] == '1' && s_inputbuffer[2] == '0') j = 1; if (s_inputbuffer[1] == '1' && s_inputbuffer[2] == '5') j = 2; if (s_inputbuffer[1] == '2') j = 3; if (s_inputbuffer[1] == '4') j = 4; if (s_inputbuffer[1] == '8') j = 5; if (s_inputbuffer[1] == '6') j = 6; if (s_inputbuffer[1] == '1' && s_inputbuffer[2] == '2') j = 7; if (s_inputbuffer[1] == '1' && s_inputbuffer[2] == '7') j = 8; if (s_inputbuffer[1] == '3' && s_inputbuffer[2] == '0') j = 9; 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); } if ((j < 7) || IsAllBand()) { mvwprintw(search_win, j, 1, "%s", s_inputbuffer); } } if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) { z = 0; if (strlen(s_inputbuffer) >= 24) { strncpy(zonebuffer, s_inputbuffer + 25, 2); zonebuffer[2] = '\0'; z1 = zone_nr(zonebuffer); } else z = zone_nr(zone_export); if (z1 != 0) z = z1; } wattron(search_win, COLOR_PAIR(C_WINDOW) | A_STANDOUT); if ((partials == 1) && (strlen(hiscall) >= 2)) { if (strlen(s_inputbuffer) != 0) strncpy(s_inputbuffercpy, s_inputbuffer + 12, 6); if (s_inputbuffercpy[5] == ' ') s_inputbuffercpy[5] = '\0'; if (s_inputbuffercpy[4] == ' ') s_inputbuffercpy[4] = '\0'; } s_inputbuffer[0] = '\0'; } /* prepare and print lower line of checkwindow */ wattroff(search_win, A_STANDOUT); dx = dxcc_by_index(countrynr); if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) { if (z == 0) { if (strlen(zone_fix) > 1) { strncpy(zonebuffer, zone_fix, 2); } else strncpy(zonebuffer, zone_export, 2); zonebuffer[2] = '\0'; z = zone_nr(zonebuffer); } } 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); i = strlen(dx->countryname); if (itumult != 1) mvwprintw(search_win, nr_bands + 1, 32, "%s", zonebuffer); else mvwprintw(search_win, nr_bands + 1, 28, "ITU:%s", zonebuffer); s_inputbuffer[0] = '\0'; if (wpx == 1) { mvwprintw(search_win, nr_bands + 1, 2 + i + 3, pxstr); } /* print worked zones and countrys for each band in checkwindow */ wattron(search_win, COLOR_PAIR(C_HEADER) | A_STANDOUT); if (qtcdirection > 0) { for(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"); } } refreshp(); /* print list of partials in upper left region */ if (partials == 1) { l = 0; j = 0; attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); for (k = 1; k <= 5; k++) { mvprintw(k, 0, "%s", " "); } attrset(COLOR_PAIR(C_DUPE)); mvprintw(1, 1, "??"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); refreshp(); j = 0; m = 0; /* check what we have worked first */ /** \todo the method below parses through the array of already * looked up search results from the search window. That is quick * but has the drawback, that we have no band information and * therefore print some entries more than once. * Better would be to lookup the partial call in the array of * worked stations 'callarray' - it is there only once and we can * also see from 'call_band' if it is a dupe here. * be aware of the problem of marking it dupe only for a complete * match. */ for (m = 0; m < srch_index; m++) { if (strlen(hiscall) > 2 && strlen(searchresult[m]) > 2) { if ( strstr(searchresult[m], hiscall) != NULL ) { printres[0] = '\0'; strncat(printres, searchresult[m] + 29, 12); /* cut string just at first space after call */ loc = strchr(printres, ' '); if (loc) *loc = '\0'; if (dupe == ISDUPE) { attrset(COLOR_PAIR(C_DUPE)); } else { attron(modify_attr(COLOR_PAIR(C_BORDER) | A_STANDOUT)); } mvprintw(xwin + l, ywin + j, "%s ", printres); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); attroff(A_BOLD); refreshp(); j += (strlen(printres) + 1); if (j >= 30) { l++; j = 0; } if (l > 4) break; } } } if (strcmp(hiscall, printres) != 0) { /* and now check callmaster database */ for (m = 0; m < callmaster->len; m++) { if ( strstr(CALLMASTERARRAY(m), hiscall) != NULL ) { attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); mvprintw(xwin + l, ywin + j, "%s ", CALLMASTERARRAY(m)); if (strlen(s_inputbuffercpy) == 0) strcpy(s_inputbuffercpy, CALLMASTERARRAY(m)); j += (strlen(CALLMASTERARRAY(m))) + 1; if (j >= 30) { l++; j = 0; } if (l > 4) break; } } } if ((j <= 13) && (l == 0) && (use_part == 1) && (block_part == 0)) { attron(modify_attr(COLOR_PAIR(C_HEADER) | A_STANDOUT)); mvprintw(13, 0, s_inputbuffercpy); if (strlen(s_inputbuffercpy) > strlen(hiscall)) { strcpy(hiscall, s_inputbuffercpy); beep(); } } refreshp(); } /* 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(100000); } else isdupe = 0; // LZ3NY auto-b4 patch printcall(); } else { HideSearchPanel(); } } void init_callmaster(void) { if (callmaster) g_ptr_array_free(callmaster, TRUE); callmaster = g_ptr_array_new_full(16000, g_free); } /** loads callmaster database from file * returns number of loaded calls */ int load_callmaster(void) { extern int arrlss; FILE *cfp = NULL; char callmaster_location[80]; char s_inputbuffer[186] = ""; init_callmaster(); strcpy(callmaster_location, "callmaster"); if ((cfp = fopen(callmaster_location, "r")) == NULL) { callmaster_location[0] = '\0'; strcpy(callmaster_location, PACKAGE_DATA_DIR); strcat(callmaster_location, "/callmaster"); if ((cfp = fopen(callmaster_location, "r")) == NULL) { mvprintw(24, 0, "Error opening callmaster file.\n"); refreshp(); sleep(2); return 0; } } while ( fgets(s_inputbuffer, 85, cfp) != NULL ) { g_strchomp(s_inputbuffer); if (s_inputbuffer[0] == '#') /* skip comment lines */ continue; if ( strlen(s_inputbuffer) < 3 ) /* calls are at least 3 char long */ continue; s_inputbuffer[12] = '\0'; /* terminate line length */ if (arrlss == 1) { /* keep only NA stations */ if ((s_inputbuffer[0] == 'A') || (s_inputbuffer[0] == 'K') || (s_inputbuffer[0] == 'W') || (s_inputbuffer[0] == 'V') || (s_inputbuffer[0] == 'C') || (s_inputbuffer[0] == 'N')) { g_ptr_array_add(callmaster, g_strdup(s_inputbuffer)); } } else { g_ptr_array_add(callmaster, g_strdup(s_inputbuffer)); } } fclose(cfp); return callmaster->len; } /* -------------------------------------------------------------- */ void show_needed_sections(void) { extern int arrlss; extern int multarray_nr; extern char mults[MAX_MULTS][12]; extern GPtrArray *mults_possible; int j, vert, hor, cnt, found; char mprint[50]; if (arrlss == 1) { cnt = 0; wattron(search_win, modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 1; j < 7; j++) mvwprintw(search_win, j, 1, " "); for (vert = 1; vert < 7; vert++) { if (cnt >= mults_possible->len) break; for (hor = 0; hor < 9; hor++) { if (cnt >= mults_possible->len) break; strcpy(mprint, g_ptr_array_index(mults_possible, cnt)); found = 0; for (j = 0; j < multarray_nr; j++) { if (strncmp(mults[j], 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) { wattrset(search_win, modify_attr(COLOR_PAIR(C_BORDER))); mvwprintw(search_win, 7, x, str); } tlf-1.3.0/src/log_to_disk.c0000644000175000017520000001037513014014714012454 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" #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include #endif pthread_mutex_t disk_mutex = PTHREAD_MUTEX_INITIALIZER; /** \brief logs one record to disk * Logs one record to disk which may come from different sources * (direct from tlf or from other instance via LAN) * * \param from_lan true - Log lanmessage, false - normal message */ int log_to_disk(int from_lan) { extern char hiscall[]; extern char comment[]; extern char my_rst[]; extern char his_rst[]; extern char last_rst[4]; extern char qsonrstr[5]; extern char lan_logline[]; extern int rit; extern int trx_control; extern int cqmode; #ifdef HAVE_LIBHAMLIB extern freq_t outfreq; #else extern int outfreq; #endif 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 */ hiscall[0] = '\0'; /* reset the call string */ comment[0] = '\0'; /* reset the comment string */ strncpy(last_rst, his_rst, sizeof(last_rst)); /* remember last report */ his_rst[1] = '9'; /* restore RST to 599 */ my_rst[1] = '9'; } else { // qso from lan strncpy(lan_logline, lan_message + 2, 87); strcat(lan_logline, " "); if (cqwwm2 == 1) { if (lan_logline[0] != thisnode) lan_logline[79] = '*'; } lan_logline[87] = '\0'; total = total + score2(lan_logline); addcall2(); store_qso(lan_logline); } if (from_lan) lan_mutex = 2; else lan_mutex = 1; scroll_log(); lan_mutex = 0; attron(modify_attr(COLOR_PAIR(NORMCOLOR))); /* erase comment field */ if (!from_lan) mvprintw(12, 54, " "); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); if (!from_lan) { mvprintw(7, 0, logline0); mvprintw(8, 0, logline1); mvprintw(9, 0, logline2); } mvprintw(10, 0, logline3); mvprintw(11, 0, logline4); refreshp(); attron(COLOR_PAIR(C_WINDOW)); mvprintw(12, 23, qsonrstr); if (no_rst) { mvaddstr(12, 44, "---"); mvaddstr(12, 49, "---"); } else { mvaddstr(12, 44, his_rst); mvaddstr(12, 49, my_rst); } sync(); if ((rit == 1) && (trx_control == 1)) outfreq = RESETRIT; block_part = 0; /* unblock use partials */ pthread_mutex_unlock(&disk_mutex); return (0); } tlf-1.3.0/src/genqtclist.c0000644000175000017520000000632213014014714012331 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 "qtcvars.h" // Includes globalvars.h void genqtcline(char * qtc, char * line); /** generate list of QTCs to send * * \param callsign - the call of the station we send the QTCs to * \param nrofqtc - maximum number of lines to send * \return number of actual lines in the qtclist */ int genqtclist(char * callsign, int nrofqtc) { int qtclistlen; int s = 0, i = 0; qtclistlen = QTC_LINES; if (nrofqtc >= 0 && nrofqtc < QTC_LINES) { qtclistlen = nrofqtc; } /* initialize qtclist */ qtclist.serial = nr_qtcsent+1; qtclist.marked = 0; qtclist.totalsent = 0; qtclist.count = 0; strncpy(qtclist.callsign, callsign, strlen(callsign)); for(s = 0; s < qtclistlen; s++) { qtclist.qtclines[s].qtc[0] = '\0'; qtclist.qtclines[s].flag = 0; qtclist.qtclines[s].saved = 0; qtclist.qtclines[s].sent = 0; qtclist.qtclines[s].senttime[0] = '\0'; } s=next_qtc_qso; while (qtclist.count < qtclistlen && s < nr_qsos) { if (strlen(callsign) == 0 || strncmp(qsos[s]+29, callsign, strlen(callsign)) != 0) { /* exclude current callsign */ if (qsoflags_for_qtc[s] == 0) { /* qso line not yet used for QTC */ genqtcline(qtclist.qtclines[i].qtc, qsos[s]); if (trxmode == DIGIMODE) { qtclist.qtclines[i].flag = 1; qtclist.marked++; } else { if (i == 0) { qtclist.qtclines[i].flag = 1; qtclist.marked++; } else { qtclist.qtclines[i].flag = 0; } } /* remember number of the corresponding QSO line */ qtclist.qtclines[i].qsoline = s; qtclist.count++; i++; /* next qtcline */ } } s++; /* try next qso */ } return qtclist.count; } void genqtcline(char * qtc, char * qsoline) { int i, qpos; /* 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 4 digit exchange */ strncpy(qtc+qpos, qsoline+54, 4); qpos += 4; qtc[qpos] = '\0'; } tlf-1.3.0/src/get_time.c0000644000175000017520000000274613046414310011760 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.3.0/src/freq_display.c0000644000175000017520000002310613014014714012635 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 "freq_display.h" #include "nicebox.h" // Includes curses.h #include "tlf.h" #include "ui_utils.h" int freq_display(void) { extern float freq; extern int trxmode; int x_position = 40; int y_position = 17; int location = 0; char fbuffer[8]; print_space(y_position, x_position); print_space(y_position + 1, x_position); print_space(y_position + 2, x_position); print_space(y_position + 3, x_position); print_space(y_position + 4, x_position); nicebox(16, 39, 5, 35, "TRX"); print_dot(y_position + 4, 28 + x_position + 1); sprintf(fbuffer, "%7.1f", freq); location = 32; if (fbuffer[0] != ' ') print_big_number(fbuffer[0] - 48, y_position, x_position, 4); if (fbuffer[1] != ' ') print_big_number(fbuffer[1] - 48, y_position, x_position, 9); if (fbuffer[2] != ' ') print_big_number(fbuffer[2] - 48, y_position, x_position, 14); if (fbuffer[3] != ' ') print_big_number(fbuffer[3] - 48, y_position, x_position, 19); if (fbuffer[4] != ' ') print_big_number(fbuffer[4] - 48, y_position, x_position, 24); if (fbuffer[6] != ' ') print_big_number(fbuffer[6] - 48, y_position, x_position, 31); 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(); return (0); } int 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; } } refreshp(); return (0); } int print_dot(int y, int x) { attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(y, x, " "); return (0); } int print_space(int y, int x) { attroff(A_STANDOUT); attron(modify_attr(COLOR_PAIR(C_LOG))); mvprintw(y, x, " "); return (0); } tlf-1.3.0/src/grabspot.h0000644000175000017520000000170013014014714011775 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 void grabspot (void); void grab_next (void); #endif /* GRABSPOT_H */ tlf-1.3.0/src/ui_utils.h0000644000175000017520000000225213014014714012014 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(); #endif /* UI_UTILS_H */ tlf-1.3.0/src/readcalls.c0000644000175000017520000004124213046414310012107 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedüs - HA2OS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * Initialize call array for dupes * *--------------------------------------------------------------*/ #define _XOPEN_SOURCE #include #include #include #include #include #include "addmult.h" #include "addpfx.h" #include "get_time.h" #include "getctydata.h" #include "getpx.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "paccdx.h" #include "startmsg.h" #include "tlf_curses.h" #include "zone_nr.h" int readcalls(void) { extern char continent_multiplier_list[7][3]; extern int continentlist_only; extern int pfxnummultinr; extern t_pfxnummulti pfxnummulti[]; extern int exclude_multilist_type; extern char countrylist[][6]; char inputbuffer[160]; char tmpbuf[20]; char bndbuf[20]; char zonebuf[3]; char checkcall[20]; int i = 0, l = 0, n = 0, r = 0, s = 0; unsigned int k = 0; int m = 0; int t = 0, tt = 0; int z = 0; int add_ok; char multbuffer[40]; char presentcall[20]; // copy of call.. char *tmpptr; int points; int pfxnumcntidx; int pxnr; int excl_add_veto; char date_and_time[16]; struct tm qsotime; time_t qsotimets; int qsomode; int linenr = 0; FILE *fp; clear(); mvprintw(4, 0, "Reading logfile...\n"); refreshp(); /* reset counter and score anew */ for (s = 0; s < MAX_QSOS; s++) qsos[s][0] = '\0'; for (i = 0; i < MAX_CALLS; i++) { *worked[i].exchange = '\0'; *worked[i].call = '\0'; worked[i].band = 0; worked[i].country = -1; for(l=0; l<3; l++) { for(n=0; n 0) { for(i=0; i= 100) { r = 0; printw("*"); refreshp(); } strcat(inputbuffer, " "); /* repair the logfile */ inputbuffer[LOGLINELEN-1] = '\0'; for (t = 0; t <= strlen(inputbuffer); t++) { if (inputbuffer[t] == '\n') inputbuffer[t] = ' '; } strncpy(qsos[s], inputbuffer, LOGLINELEN); s++; if (inputbuffer[0] == ';') continue; /* note in log */ strncpy(presentcall, inputbuffer + 29, 13); presentcall[13] = '\0'; strncpy(bndbuf, inputbuffer + 1, 2); bndbuf[2] = '\0'; if (bndbuf[0] == '1' && bndbuf[1] == '0') bandinx = BANDINDEX_10; if (bndbuf[0] == '1' && bndbuf[1] == '5') bandinx = BANDINDEX_15; if (bndbuf[0] == '2') bandinx = BANDINDEX_20; if (bndbuf[0] == '4') bandinx = BANDINDEX_40; if (bndbuf[0] == '8') bandinx = BANDINDEX_80; if (bndbuf[0] == '6') bandinx = BANDINDEX_160; if (bndbuf[0] == '1' && bndbuf[1] == '2') bandinx = BANDINDEX_12; if (bndbuf[0] == '1' && bndbuf[1] == '7') bandinx = BANDINDEX_17; if (bndbuf[0] == '3') bandinx = BANDINDEX_30; /* get the country number, not known at this point */ tmpptr = strchr(presentcall, ' '); if (tmpptr) *tmpptr = '\0'; strcpy(tmpbuf, presentcall); countrynr = getctydata(tmpbuf); if (continentlist_only == 1) { int ci = 0; int cont_in_list = 0; while(strlen(continent_multiplier_list[ci]) != 0) { if(strcmp(continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if (cont_in_list == 0) { band_score[bandinx]++; continue; } } if (contest == 1) { strncpy(tmpbuf, inputbuffer + 76, 2); /* get the points */ tmpbuf[2] = '\0'; points = atoi(tmpbuf); total = total + points; if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) { strncpy(zonebuf, inputbuffer + 54, 2); /* get the zone */ zonebuf[2] = '\0'; z = zone_nr(zonebuf); } if (wysiwyg_once == 1 || wysiwyg_multi == 1 || unique_call_multi != 0 || arrlss == 1 || serial_section_mult == 1 || serial_grid4_mult == 1 || sectn_mult == 1 || ((dx_arrlsections == 1) && ((countrynr == w_cty) || (countrynr == ve_cty)))) { multbuffer[0] = '\0'; if (arrlss == 1) { other_flg = 0; if (inputbuffer[63] == ' ') strncpy(multbuffer, inputbuffer + 64, 3); else strncpy(multbuffer, inputbuffer + 63, 3); multbuffer[3] = '\0'; } else if (serial_section_mult == 1) { tt = 0; memset(multbuffer, 0, 39); for (t = 54; t < 64; t++) { if (inputbuffer[t] >= 'A' && inputbuffer[t] <= 'Z') { multbuffer[tt] = inputbuffer[t]; tt++; } } } else if (serial_grid4_mult == 1) { memset(multbuffer, 0, 39); for (t = 0; t < 4; t++) { multbuffer[t] = inputbuffer[t + 59]; } } else if (unique_call_multi != 0) { g_strlcpy(multbuffer, inputbuffer + 68, 10); g_strchomp(multbuffer); } else { strncpy(multbuffer, inputbuffer + 54, 10); // normal case multbuffer[10] = '\0'; g_strchomp(multbuffer); } remember_multi( multbuffer, bandinx, 0 ); } // end wysiwig if (other_flg == 1) { /* mult = max 3 characters */ strncpy(multbuffer, inputbuffer + 54, 3); multbuffer[3] = '\0'; if (multbuffer[3] == ' ') multbuffer[3] = '\0'; if (multbuffer[2] == ' ') multbuffer[2] = '\0'; if (multbuffer[1] == ' ') multbuffer[1] = '\0'; remember_multi( multbuffer, bandinx, 0 ); } } /* once per call ! */ for (k = 0; k < i; k++) { // changed k=< i m = strcmp(worked[k].call, presentcall); if (m == 0) { l = k; break; } else l = i; } strncpy(worked[l].call, inputbuffer + 29, 19); worked[l].call[19] = 0; strtok(worked[l].call, " \r"); /* delimit first word */ worked[l].country = countrynr; g_strlcpy(worked[l].exchange, inputbuffer + 54, 12); g_strchomp(worked[l].exchange); /* strip trailing spaces */ if (strncmp("CW ", inputbuffer+3, 3) == 0) { qsomode = CWMODE; } else if (strncmp("SSB", inputbuffer+3, 3) == 0) { qsomode = SSBMODE; } else if (strncmp("DIG", inputbuffer+3, 3) == 0) { qsomode = DIGIMODE; } else { mvprintw(5, 0, "Invalid line format in line %d.\n", linenr); refreshp(); sleep(2); exit(1); } /* calculate QSO timestamp from logline */ strncpy(date_and_time, inputbuffer+7, 15); strptime(date_and_time, "%d-%b-%y %H:%M", &qsotime); qsotimets = mktime(&qsotime); worked[l].qsotime[qsomode][bandinx] = qsotimets; add_ok = 1; /* look if calls are excluded */ if ((arrldx_usa == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) add_ok = 0; if (pacc_pa_flg == 1) { strcpy(hiscall, presentcall); add_ok = pacc_pa(); if (add_ok == 0) { band_score[bandinx]++; } hiscall[0] = '\0'; } if (pfxmultab == 1) { getpx(presentcall); add_pfx(pxstr); } if (pfxnummultinr > 0) { getpx(presentcall); pxnr = pxstr[strlen(pxstr) - 1] - 48; getctydata(presentcall); int pfxi = 0; while(pfxi < pfxnummultinr) { if (pfxnummulti[pfxi].countrynr == countrynr) { pfxnumcntidx = pfxi; break; } pfxi++; } add_ok = 1; } if (continentlist_only == 0 && exclude_multilist_type == 1) { int ci = 0; int cont_in_list = 0; while(strlen(continent_multiplier_list[ci]) != 0) { if(strcmp(continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if (cont_in_list == 1 && continentlist_only == 0 && exclude_multilist_type == 1) { excl_add_veto = 1; } } if (exclude_multilist_type == 2) { int ci = 0; int countrynr_tocheck = countrynr; while (strlen(countrylist[ci]) != 0) { if (getctydata(countrylist[ci]) == countrynr_tocheck) { excl_add_veto = 1; break; } ci++; } } if (add_ok == 1) { worked[l].band |= inxes[bandinx]; /* mark band as worked */ band_score[bandinx]++; /* qso counter per band */ if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) zones[z] |= inxes[bandinx]; if (pfxnumcntidx < 0) { if (excl_add_veto == 0) { countries[countrynr] |= inxes[bandinx]; } } else { pfxnummulti[pfxnumcntidx].qsos[pxnr] |= inxes[bandinx]; } } /* end add_ok */ if (l == i) i++; } fclose(fp); /* remember nuber of callarray entries */ nr_worked = i; if (wpx == 1) { /* build prefixes_worked array from list of worked stations */ InitPfx(); for (n = 0; n < i; n++) { strcpy(checkcall, worked[n].call); getpx(checkcall); add_pfx(pxstr); } } if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) { for (n = 1; n < MAX_ZONES; n++) { if ((zones[n] & BAND160) != 0) zonescore[BANDINDEX_160]++; if ((zones[n] & BAND80) != 0) zonescore[BANDINDEX_80]++; if ((zones[n] & BAND40) != 0) zonescore[BANDINDEX_40]++; if ((zones[n] & BAND20) != 0) zonescore[BANDINDEX_20]++; if ((zones[n] & BAND15) != 0) zonescore[BANDINDEX_15]++; if ((zones[n] & BAND10) != 0) zonescore[BANDINDEX_10]++; } } if (cqww == 1) { for (n = 1; n <= MAX_DATALINES - 1; n++) { if ((countries[n] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[n] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[n] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[n] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[n] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[n] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } /* end cqww */ if (dx_arrlsections == 1) { int cntr; for (cntr = 1; cntr < MAX_DATALINES; cntr++) { if (cntr != w_cty && cntr != ve_cty) // W and VE don't count here... { if ((countries[cntr] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[cntr] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[cntr] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[cntr] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[cntr] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[cntr] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } } // end dx_arrlsections if ((arrldx_usa == 1) && (countrynr != w_cty) && (countrynr != ve_cty)) { int cntr; for (cntr = 1; cntr < MAX_DATALINES; cntr++) { if ((countries[cntr] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[cntr] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[cntr] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[cntr] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[cntr] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[cntr] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } /* end arrldx_usa */ if (pacc_pa_flg == 1) { for (n = 1; n < MAX_DATALINES; n++) { if ((countries[n] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[n] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[n] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[n] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[n] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[n] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } if (country_mult == 1 || pfxnummultinr > 0) { for (n = 1; n <= MAX_DATALINES - 1; n++) { // first, check pfxnummultinr array, the country 'n' exists int pfxnumcntnr = -1; // pfxnummultinr is length of pfxnummulti array if (pfxnummultinr > 0) { int pcntnr; // find the current country // n is the country in the external loop // pfxnummulti[I].countrynr contains the country codes, I:=[0..pfxnummultinr] // it depends from the order of prefixes in rules, eg: // PFX_NUM_MULTIS=W,VE,VK,ZL,ZS,JA,PY,UA9 // pfxnummulti[0].countrynr will be nr of USA // pfxnummulti[1].countrynr will be nr of Canada for(pcntnr=0; pcntnr 0 && pfxnumcntnr >= 0) { int pfxnum; // walking pfxnummulti[N].qsos, which is a 10 element array // each element represent a number of the country code // eg: K0, K1, K2, ..., K9 for(pfxnum=0; pfxnum<10; pfxnum++) { if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND160) != 0) { countryscore[BANDINDEX_160]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND80) != 0) { countryscore[BANDINDEX_80]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND40) != 0) { countryscore[BANDINDEX_40]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND20) != 0) { countryscore[BANDINDEX_20]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND15) != 0) { countryscore[BANDINDEX_15]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND10) != 0) { countryscore[BANDINDEX_10]++; } } } else { // simple 'country_mult', but it's works together with pfxnummultinr if ((countries[n] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[n] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[n] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[n] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[n] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[n] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } } if (qsonum == 1) { InitPfx(); total = 0; for (i = 0; i < NBANDS; i++) band_score[i] = 0; for (i = 0; i < NBANDS; i++) countryscore[i] = 0; for (i = 0; i < NBANDS; i++) multscore[i] = 0; } return (s); // nr of lines in log } //------------------------------------------------------------------------ int synclog(char *synclogfile) { extern char logfile[]; extern struct tm *time_ptr; int rc; 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 -w79 > %s", logfile); if (system(wgetcmd) == 0) showmsg("Merging logs successfull\n"); else { showmsg("Problem merging logs.\nExiting...\n"); sleep(5); exit(1); } sleep(1); rc = system("rm log1"); rc = system("rm log2"); return (0); } tlf-1.3.0/src/showzones.c0000644000175000017520000000366513014014714012222 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" int show_zones(int bandinx) { extern int zonedisplay; extern int bandindex; extern int zones[MAX_ZONES]; int i = 0, j = 0; int xloc = 19; int yloc = 15; if (zonedisplay != 1) return (0); switch (bandinx) { case 0:{ bandindex = BAND160; break; } case 1:{ bandindex = BAND80; break; } case 2:{ bandindex = BAND40; break; } case 4:{ bandindex = BAND20; break; } case 6:{ bandindex = BAND15; break; } case 8: bandindex = BAND10; } attron(COLOR_PAIR(C_INPUT) | A_STANDOUT); for (i = 0; i <= 7; i++) { for (j = 1; j <= 5; j++) { if ((zones[(i * 5) + j] & bandindex) == 0) { mvprintw(i + yloc, (j * 3) + xloc, " %02d", (i * 5) + j); } else { mvprintw(i + yloc, (j * 3) + xloc, " "); } } } nicebox(14, 22, 8, 14, "Zones"); return (0); } tlf-1.3.0/src/checklogfile.c0000644000175000017520000001472013014014714012574 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 "startmsg.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" /** Repair log file * * Try to repair log file if some lines are too short. * Same is used to convert old logfile format v1 to new v2 * * \return 0 on success */ int repair_log(char *filename) { gchar *backupfile; gchar *cmd; char buffer[200]; gchar *fill; int rc; FILE *infp; FILE *outfp; /* make a backup of the original file */ backupfile = g_strconcat(filename, ".bak", NULL); showstring ( "Backing up original file as: ", backupfile); cmd = g_strconcat("cp ", filename, " ", backupfile, NULL); rc = system(cmd); g_free(cmd); if (rc != 0) { showmsg( "Could not backup logfile. Giving up!" ); return 1; } showmsg( "Converting file to new format"); if ((infp = fopen(backupfile, "r")) == NULL) { showmsg( "Could not convert logfile. Sorry!" ); return 1; } if ((outfp = fopen(filename, "w")) == NULL) { fclose(infp); showmsg( "Could not convert logfile. Sorry!" ); return 1; } while (fgets(buffer, sizeof(buffer), infp)) { /* strip trailing whitespace (and newline) */ g_strchomp(buffer); /* append spaces */ fill = g_strnfill( (LOGLINELEN-1) - strlen(buffer), ' ' ); strcat(buffer, fill); g_free(fill); fputs(buffer, outfp); fputs("\n", outfp); } fclose(outfp); fclose(infp); g_free(backupfile); showmsg( "Done" ); sleep(2); return 0; } int checklogfile_new(char *filename) { int lineno; int tooshort; char buffer[160]; FILE *fp; /* check if logfile exist and can be opened for read */ if ((fp = fopen(filename, "r")) == NULL) { if (errno == EACCES) { showstring( "Can not access log file: ", filename); return 1; } if (errno == ENOENT) { /* File not found, create new one */ showmsg( "Log file not found, creating new one"); sleep(2); if ((fp = fopen(filename, "w")) == NULL) { /* cannot create logfile */ showmsg( "Creating logfile not possible"); return 1; } /* New logfile created */ fclose(fp); return 0; } showstring( "Can not check log file: ", filename); return 1; } /* check each line of the logfile of correct format */ lineno = 0; tooshort = 0; while (fgets(buffer, sizeof(buffer), fp)) { int band, linelen; int bandok = 0; lineno++; /* if no logline -> complain and back */ band = atoi(buffer); if ((band == 160) || (band == 80) || (band == 40) || (band == 30) || (band == 20) || (band == 17) || (band == 15) || (band == 12) || (band == 10)) bandok = 1; if (!((buffer[0] == ';') || bandok)) { /* msg no valid logline in line #, cannot handle it */ shownr( "No valid log line in line ", lineno); return 1; } linelen = strlen(buffer); /* if to long -> complain and back */ if (linelen > LOGLINELEN) { /* msg length of line # to long, * cannot handle that log file format */ shownr( "Log line to long in line ", lineno); showmsg( "Can not handle that log format"); return 1; } /* if to short -> remember */ if (linelen < LOGLINELEN) { tooshort = 1; } } fclose(fp); if (tooshort) { char c; /* some lines in logfile are too short, maybe old logfile format */ showmsg( "Some log lines are too short (maybe an old log format)!" ); showmsg( "Shall I try to repair? Y/(N) " ); echo(); c = toupper( key_get() ); noecho(); if (c != 'Y') { return 1; /* giving up */ } /* trying to repair */ return repair_log(filename); } return 0; } void checklogfile(void) { extern char logfile[]; extern char backgrnd_str[]; int lfile; int qsobytes; int qsolines; int errbytes; int rc; struct stat statbuf; char inputbuffer[800]; char *rp; FILE *infile; FILE *outfile; FILE *fp; if ((fp = fopen(logfile, "a")) == NULL) { fprintf(stdout, "Opening logfile not possible.\n"); exit(1); } else { fstat(fileno(fp), &statbuf); qsobytes = statbuf.st_size; qsolines = qsobytes / LOGLINELEN; errbytes = qsobytes % LOGLINELEN; if (errbytes != 0) { fclose(fp); if ((infile = fopen(logfile, "r")) == NULL) { mvprintw(24, 0, "Unable to open logfile..."); refreshp(); sleep(2); } else { if ((outfile = fopen("./cpyfile", "w")) == NULL) { mvprintw(24, 0, "Unable to open cpyfile..."); refreshp(); fclose(infile); sleep(2); } else { while (!(feof(infile))) { rp = fgets(inputbuffer, 160, infile); if (strlen(inputbuffer) != LOGLINELEN) { strcat(inputbuffer, backgrnd_str); inputbuffer[LOGLINELEN] = '\0'; } fputs(inputbuffer, outfile); } fclose(infile); fclose(outfile); } if ((lfile = open("./cpyfile", O_RDWR)) < 0) { mvprintw(24, 0, "I can not find the copy file..."); refreshp(); sleep(2); } else { fstat(lfile, &statbuf); if (statbuf.st_size > 80) { rc = ftruncate(lfile, statbuf.st_size - LOGLINELEN); fsync(lfile); } close(lfile); } rename("./cpyfile", logfile); remove("./cpyfile"); } } else fclose(fp); } } tlf-1.3.0/src/getwwv.c0000644000175000017520000000540113014014714011474 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" int getwwv(void) { extern char lastwwv[]; extern char backgrnd_str[]; extern double r; extern int mycountrynr; extern int timeoffset; char printbuffer[81] = ""; char *i; char r_value[6]; char sf_value[6]; char timebuff[80]; double sfi, d; time_t now; struct tm *ptr1; attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(24, 0, backgrnd_str); if (strlen(lastwwv) >= 2) { lastwwv[78] = '\0'; /* cut the bell chars */ if ((strncmp(lastwwv, "WCY", 3) == 0) || (strncmp(lastwwv, "WWV", 3) == 0)) { strcat(printbuffer, "Condx: "); i = strstr(lastwwv, "<"); if (i != NULL) { strncat(printbuffer, i + 1, 2); strcat(printbuffer, " GMT "); } i = strstr(lastwwv, "R="); if (i != NULL) { strncat(printbuffer, i, 5); r_value[0] = '\0'; strncat(r_value, i + 2, 3); r = atof(r_value); } strcat(printbuffer, " "); i = strstr(lastwwv, "SFI="); if (i != NULL) { strncat(printbuffer, i, 7); sf_value[0] = '\0'; strncat(sf_value, i + 4, 3); sfi = atof(sf_value); r = ((sfi - 70.0) * (200.0 / 180.0)); } i = strstr(lastwwv, "eru"); if (i != NULL) strcat(printbuffer, " eruptive "); i = strstr(lastwwv, "act"); if (i != NULL) strcat(printbuffer, " act "); i = strstr(lastwwv, "Au=au"); if (i != NULL) strcat(printbuffer, " AURORA!"); strcpy(lastwwv, printbuffer); mvprintw(24, 0, lastwwv); /* print WWV info */ d = dxcc_by_index(mycountrynr) -> timezone; now = (time(0) + (long)((timeoffset - d) * 3600)); ptr1 = gmtime(&now); strftime(timebuff, 80, "%H:%M", ptr1); printbuffer[0] = '\0'; mvprintw(24, 64, "local time %s", timebuff); } printcall(); } return (0); } tlf-1.3.0/src/bandmap.h0000644000175000017520000000724413014014714011567 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 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() */ } 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; } bm_config_t; extern bm_config_t bm_config; enum { CB_DUPE = 8, CB_OLD, CB_NORMAL, CB_NEW, CB_MULTI }; /* * write bandmap spots to a file */ void bmdata_write_file(); void bm_init(); void bm_add(char *s); void bm_menu(); /** check if call is new multi * * \return true if new multi */ int bm_ismulti(char *call); /** check if call is a dupe * * \return true if is dupe */ int bm_isdupe(char *call, int band); /** add a new spot to bandmap data * \param call the call to add * \param frequ 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, unsigned int frequ, 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, unsigned int freq); void get_spot_on_qrg(char *dest, float freq); #endif tlf-1.3.0/src/clear_display.c0000644000175000017520000001026713014014714012772 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Thomas Beierlein #include #include "cw_utils.h" #include "get_time.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "printcall.h" #include "qsonr_to_str.h" #include "searchlog.h" // Includes glib.h #include "showscore.h" #include "tlf_curses.h" #include "ui_utils.h" void clear_display(void) { extern char mode[]; extern int cqdelay; extern char headerline[]; extern char terminal1[]; extern char terminal2[]; extern char terminal3[]; extern char terminal4[]; extern char backgrnd_str[]; extern char band[9][4]; extern int bandinx; extern int trxmode; extern char my_rst[]; extern char his_rst[]; extern char qsonrstr[]; extern int cqww; extern int arrldx_usa; extern char comment[]; extern char hiscall[]; extern int searchflg; extern int m; extern struct tm *time_ptr; extern char whichcontest[]; extern int no_rst; char time_buf[80]; char speedbuf[4] = " "; int cury, curx; snprintf(speedbuf, 3, "%2d", GetCWSpeed()); getyx(stdscr, cury, curx); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 0, " "); mvprintw(0, 0, " %s S=%s D=%i ", mode, speedbuf, cqdelay); mvprintw(0, 21, headerline); attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); mvaddstr(1, 0, terminal1); mvaddstr(2, 0, terminal2); mvaddstr(3, 0, terminal3); mvaddstr(4, 0, terminal4); mvaddstr(5, 0, backgrnd_str); attron(COLOR_PAIR(C_HEADER)); mvaddstr(6, 0, backgrnd_str); mvprintw(6, (80 - strlen(whichcontest))/2 - 4, " == %s == ", whichcontest); showscore(); attron(modify_attr(COLOR_PAIR(C_LOG) | A_STANDOUT)); mvaddstr(7, 0, logline0); mvaddstr(8, 0, logline1); mvaddstr(9, 0, logline2); mvaddstr(10, 0, logline3); mvaddstr(11, 0, logline4); attron(COLOR_PAIR(C_WINDOW)); mvaddstr(12, 0, backgrnd_str); mvaddstr(12, 0, band[bandinx]); get_time(); if (trxmode == CWMODE) strftime(time_buf, 60, "CW %d-%b-%y %H:%M ", time_ptr); else if (trxmode == SSBMODE) strftime(time_buf, 60, "SSB %d-%b-%y %H:%M ", time_ptr); else strftime(time_buf, 60, "DIG %d-%b-%y %H:%M ", time_ptr); m = time_ptr->tm_mon; /* month for muf calc */ mvprintw(12, 3, time_buf); qsonr_to_str(); mvaddstr(12, 23, qsonrstr); if (trxmode != SSBMODE) { my_rst[2] = '9'; his_rst[2] = '9'; } else { my_rst[2] = ' '; his_rst[2] = ' '; } if (no_rst) { mvaddstr(12, 44, "---"); mvaddstr(12, 49, "---"); } else { mvaddstr(12, 44, his_rst); mvaddstr(12, 49, my_rst); } if (cqww == 1) { attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvaddstr(12, 54, comment); } if (arrldx_usa == 1) { attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvaddstr(12, 54, comment); } if (searchflg == SEARCHWINDOW) searchlog(hiscall); printcall(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(24, 0, backgrnd_str); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(cury, curx, ""); refreshp(); } tlf-1.3.0/src/Makefile.am0000644000175000017520000000551013046414310012043 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 \ 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 \ fldigixmlrpc.c freq_display.c focm.c \ genqtclist.c \ get_time.c getctydata.c getexchange.c getmessages.c getpx.c \ getsummary.c gettxinfo.c getwwv.c grabspot.c \ initial_exchange.c \ keyer.c \ lancode.c last10.c listmessages.c log_to_disk.c \ logit.c logview.c locator2longlat.c \ main.c makelogline.c messagechange.c muf.c \ nicebox.c note.c netkeyer.c\ paccdx.c parse_logcfg.c prevqso.c printcall.c \ qrb.c qsonr_to_str.c qtc_log.c qtcwin.c qtcutil.c \ readcalls.c readqtccalls.c readctydata.c recall_exchange.c rules.c \ score.c scroll_log.c searchcallarray.c searchlog.c sendbuf.c \ sendqrg.c sendspcall.c set_tone.c setcontest.c \ setparameters.c show_help.c showinfo.c showpxmap.c \ showscore.c showzones.c sockserv.c speedupndown.c \ stoptx.c store_qso.c sunup.c splitscreen.c startmsg.c\ rtty.c time_update.c ui_utils.c \ write_keyer.c writecabrillo.c writeparas.c \ zone_nr.c tlf_LDADD = @LIBM_LIB@ @PTHREAD_LIBS@ @GLIB_LIBS@ @PANEL_LIBS@ @CURSES_LIBS@ \ @HAMLIB_LIBS@ @LIBXMLRPC_LIB@ @LIBXMLRPC_CLIENT_LIB@ \ @LIBXMLRPC_UTIL_LIB@ noinst_HEADERS = \ addarea.h addcall.h addmult.h addpfx.h addspot.h audio.h autocq.h \ background_process.h bandmap.h \ calledit.h callinput.h changefreq.h changepars.h checklogfile.h checkqtclogfile.h \ checkparameters.h cleanup.h clear_display.h clusterinfo.h cwkeyer.h \ cw_utils.h \ dxcc.h \ deleteqso.h displayit.h \ edit_last.h editlog.h \ 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 \ initial_exchange.h \ keyer.h \ lancode.h last10.h listmessages.h \ log_to_disk.h logit.h logview.h locator2longlat.h \ makelogline.h messagechange.h muf.h \ nicebox.h note.h netkeyer.h\ paccdx.h parse_logcfg.h prevqso.h printcall.h \ qrb.h qsonr_to_str.h qtc_log.h qtcvars.h qtcwin.h qtcutil.h \ readcalls.h readqtccalls.h readctydata.h recall_exchange.h \ rules.h \ score.h scroll_log.h searchcallarray.h searchlog.h sendbuf.h \ sendqrg.h sendspcall.h set_tone.h setcontest.h \ setparameters.h show_help.h showinfo.h showpxmap.h showscore.h \ showzones.h sockserv.h speedupndown.h \ splitscreen.h startmsg.h stoptx.h store_qso.h sunup.h \ rtty.h time_update.h tlf.h tlf_curses.h tlf_panel.h ui_utils.h \ write_keyer.h writecabrillo.h writeparas.h \ zone_nr.h tlf-1.3.0/src/fldigixmlrpc.h0000644000175000017520000000240013046414310012637 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 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 fldigi_send_text(char * line); void fldigi_to_rx(); void xmlrpc_showinfo(); #endif /* end of include guard: FLDIGIXMLRPC_H */ tlf-1.3.0/src/write_keyer.c0000644000175000017520000000636113046414310012511 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 "netkeyer.h" #include "tlf.h" #include "tlf_curses.h" #include "fldigixmlrpc.h" char wkeyerbuffer[400] = ""; int data_ready = 0; pthread_mutex_t keybuffer_mutex = PTHREAD_MUTEX_INITIALIZER; /** append string to key buffer*/ void keyer_append(const char *string) { pthread_mutex_lock( &keybuffer_mutex ); g_strlcat(wkeyerbuffer, string, sizeof(wkeyerbuffer)); data_ready = 1; pthread_mutex_unlock( &keybuffer_mutex ); } /** flush key buffer */ void keyer_flush() { pthread_mutex_lock( &keybuffer_mutex ); wkeyerbuffer[0] = '\0'; data_ready = 0; pthread_mutex_unlock( &keybuffer_mutex ); } /** write key buffer to keying device * * should be called periodically from the background task */ int write_keyer(void) { extern int trxmode; extern int cwkeyer; extern int digikeyer; extern char controllerport[]; extern char rttyoutput[]; FILE *bfp = NULL; int rc; char outstring[420] = ""; // this was only 120 char length, but wkeyerbuffer is 400 char *tosend = NULL; if (trxmode != CWMODE && trxmode != DIGIMODE) return (1); pthread_mutex_lock( &keybuffer_mutex ); if (data_ready == 1) { /* allocate a copy of the data and free the buffer */ tosend = g_strdup(wkeyerbuffer); wkeyerbuffer[0] = '\0'; data_ready = 0; } pthread_mutex_unlock( &keybuffer_mutex ); if (tosend != NULL) { if (digikeyer == FLDIGI && trxmode == DIGIMODE) { fldigi_send_text(tosend); } else if (cwkeyer == NET_KEYER) { netkeyer(K_MESSAGE, tosend); } else if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { if ((bfp = fopen(controllerport, "a")) == NULL) { mvprintw(24, 0, "1278 not active. Switching to SSB mode."); sleep(1); trxmode = SSBMODE; clear_display(); } else { fputs(tosend, bfp); fclose(bfp); } } else if (digikeyer == GMFSK) { if (strlen(rttyoutput) < 2) { mvprintw(24, 0, "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); rc = system(outstring); } g_free (tosend); tosend = NULL; } return (0); } tlf-1.3.0/src/netkeyer.h0000644000175000017520000000304513014014714012006 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.3.0/src/parse_logcfg.h0000644000175000017520000000202613014014714012611 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_logcfg(char *inputbuffer); #endif // PARSE_LOGCFG_H tlf-1.3.0/src/writecabrillo.h0000644000175000017520000000172713014014714013027 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.3.0/src/muf.h0000644000175000017520000000165113014014714010750 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef MUF_H #define MUF_H int muf(void); #endif /* end of include guard: MUF_H */ tlf-1.3.0/src/getmessages.c0000644000175000017520000001113413022321330012452 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 "tlf_curses.h" int getmessages(void) { extern char call[]; extern int mycountrynr; extern char mycqzone[]; extern char mycontinent[]; extern char logfile[]; extern int qsonum; extern char qsonrstr[]; extern char backgrnd_str[]; extern double QTH_Lat; extern double QTH_Long; extern int emptydir; FILE *fp; dxcc_data *mydx; int i, ii; char logline[5][82]; char printcall[12] = ""; char *rp; printw("\n Call = "); printcall[0] = '\0'; strncat(printcall, call, sizeof(printcall) - 1); printw(printcall); mycountrynr = getctydata(call); /* whoami? */ mydx = dxcc_by_index(mycountrynr); mycqzone[0] = '\0'; sprintf(mycqzone, "%02d", mydx -> cq); strcpy(mycontinent, mydx->continent); QTH_Lat = mydx->lat; /* whereami? */ QTH_Long = mydx->lon; printw(" My Zone = "); printw(mycqzone); printw(" My Continent = "); printw(mycontinent); printw("\n\n"); refreshp(); checklogfile(); if ((fp = fopen(logfile, "r")) == NULL) { printw("\nError opening logfile.\nExiting...\n"); refreshp(); sleep(5); exit(1); } for (i = 5; i >= 1; i--) { ii = 5 - i; if (fseek(fp, -1L * i * LOGLINELEN, SEEK_END) == 0) { rp=fgets(logline[ii], 85, fp); } else { strncpy(logline[ii], backgrnd_str, 81); } logline[ii][80] = '\0'; logline[ii][78] = 32; logline[ii][79] = 32; } strncpy(qsonrstr, logline[4] + 23, 4); qsonrstr[4] = '\0'; qsonum = atoi(qsonrstr) + 1; if (qsonum == 1) { strncpy(qsonrstr, logline[3] + 23, 4); qsonrstr[4] = '\0'; qsonum = atoi(qsonrstr) + 1; qsonr_to_str(); } if (strlen(logline[0]) >= 75) strncpy(logline0, logline[0], 80); else strcpy(logline0, backgrnd_str); if (strlen(logline[1]) >= 75) strncpy(logline1, logline[1], 80); else strcpy(logline1, backgrnd_str); if (strlen(logline[2]) >= 75) strncpy(logline2, logline[2], 80); else strcpy(logline2, backgrnd_str); if (strlen(logline[3]) >= 75) strncpy(logline3, logline[3], 80); else strcpy(logline3, backgrnd_str); if (strlen(logline[4]) >= 75) strncpy(logline4, logline[4], 80); else strcpy(logline4, backgrnd_str); refreshp(); fclose(fp); if (emptydir == 1) { printw("\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\n This program is copyright 2002, 2003, 2004 by Rein Couperus, PA0R\n\n"); printw (" It is free software; you can redistribute it and/or modify"); printw (" it under the terms of the GNU General Public License as published by"); printw (" the Free Software Foundation; either version 2 of the License, or"); printw(" (at your option) any later version.\n\n"); printw (" This program is distributed in the hope that it will be useful,"); printw (" but WITHOUT ANY WARRANTY; without even the implied warranty of"); printw (" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. �See the"); printw(" GNU General Public License for more details.\n"); refreshp(); sleep(5); } return (0); } tlf-1.3.0/src/write_keyer.h0000644000175000017520000000175613046414310012521 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WRITE_KEYER_H #define WRITE_KEYER_H void keyer_append(const char *string); void keyer_flush(); int write_keyer(void); #endif /* WRITE_KEYER_H */ tlf-1.3.0/src/addpfx.c0000644000175000017520000000515613014014714011426 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" #define MAX_PFX_LEN 5 int nr_of_px = 0; int nr_of_px_ab = 0; struct { char pfx[MAX_PFX_LEN + 1]; int bands; } prefixes_worked[MAX_CALLS]; int pfxs_per_band[NBANDS] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; int add_pfx(char *pxstr) { extern int pfxmultab; extern int bandinx; 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[bandinx]) { bandfound = 1; } else { /* pfx new on band */ prefixes_worked[q].bands |= inxes[bandinx]; nr_of_px_ab++; pfxs_per_band[bandinx]++; } 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[bandinx]; nr_of_px++; nr_of_px_ab++; pfxs_per_band[bandinx]++; } if (pfxmultab != 1) { return (found); } else { return (bandfound); } } int GetNrOfPfx_once() { return nr_of_px; } int GetNrOfPfx_multiband() { return nr_of_px_ab; } int GetNrOfPfx_OnBand(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.3.0/src/checkqtclogfile.h0000644000175000017520000000201513014014714013303 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.3.0/src/qtcwin.h0000644000175000017520000000170713014014714011470 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.3.0/src/sendspcall.c0000644000175000017520000000473013046414310012306 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); 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 */ if (demode == SEND_DE) { strcat(buf, hiscall); strcat(buf, " DE "); } strcat (buf, call); strcat (buf, "}"); /* => ctrl-r */ } else { if (demode == SEND_DE ) { strcat(buf, hiscall); strcat(buf, " DE "); } strcat(buf, call); } } 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.3.0/src/tlf_panel.h0000644000175000017520000000255413014014714012130 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 #ifdef HAVE_CONFIG_H # include #endif #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.3.0/src/startmsg.c0000644000175000017520000000317713014014714012025 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 "tlf.h" #include "tlf_curses.h" static int linectr; // global void showmsg(char *message) { extern int verbose; if (linectr == 24) linectr = 1; mvprintw(linectr, 0, message); refreshp(); if (verbose == 1) sleep(1); linectr++; } //--------------------------------------------------------------- void shownr(char *message, int nr) { extern int verbose; if (linectr == 24) linectr = 1; mvprintw(linectr, 0, "%s %d", message, nr); refreshp(); if (verbose == 1) sleep(1); linectr++; } //---------------------------------------------------------------- void showstring(char *message1, char *message2) { extern int verbose; if (linectr == 24) linectr = 1; mvprintw(linectr, 0, "%s %s", message1, message2); refreshp(); if (verbose == 1) sleep(1); linectr++; } tlf-1.3.0/src/lancode.c0000644000175000017520000002312213022321330011550 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 "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"; 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]; float 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 = 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); 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)) { mvprintw(24, 0, "LAN: send problem...!"); refreshp(); 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 ----------*/ int talk(void) { char talkline[61] = ""; mvprintw(24, 0, " "); mvprintw(24, 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(24, 0, " "); refreshp(); return (0); } /* ----------------- send freq. message ----------*/ int send_freq(float freq) { extern int bandinx; extern int trx_control; char fbuffer[8]; if (trx_control == 1) { sprintf(fbuffer, "%7.1f", freq); } 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.3.0/src/addcall.h0000644000175000017520000000204013014014714011536 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.3.0/src/getpx.h0000644000175000017520000000164713014014714011315 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.3.0/src/splitscreen.c0000644000175000017520000006322113046414310012511 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 #include "bandmap.h" #include "clear_display.h" #include "get_time.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "lancode.h" #include "splitscreen.h" #include "sockserv.h" #include "tlf_curses.h" #include "tlf_panel.h" #include "ui_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 *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 addlog(char *s) { extern char lastwwv[]; extern char spot_ptr[MAX_SPOTS][82]; extern char lastmsg[]; extern int nr_of_spots; extern int clusterlog; int len; FILE *fp; struct tln_logline *temp; pthread_mutex_lock (&spot_ptr_mutex); for (len = 0; len < strlen(s); len += 80) { strncpy(spot_ptr[nr_of_spots], s + len, 82); if (strlen(spot_ptr[nr_of_spots]) > 5) { lastmsg[0] = '\0'; strncat(lastmsg, spot_ptr[nr_of_spots], 82); } if (clusterlog == 1) { if ((fp = fopen("clusterlog", "a")) == NULL) { mvprintw(24, 0, "Opening clusterlog not possible."); } else { if (strlen(lastmsg) > 20) { fputs(lastmsg, fp); fputs("\n", fp); } fclose(fp); } } nr_of_spots++; if (nr_of_spots > MAX_SPOTS - 1) { int idx; for (idx = 10; idx <= MAX_SPOTS - 1; idx++) strncpy(spot_ptr[idx - 10], spot_ptr[idx], 82); for (idx = MAX_SPOTS - 1; idx >= MAX_SPOTS - 11; idx--) spot_ptr[idx][0] = '\0'; nr_of_spots = MAX_SPOTS - 10; } } pthread_mutex_unlock (&spot_ptr_mutex); // \todo drop it later tb mar11 bm_add(s); if ((strncmp( s, "WWV", 3) == 0) || strncmp ( s, "WCY", 3) == 0) strncpy (lastwwv, s, 82); if (tln_loglines >= maxtln_loglines) { temp = loghead; loghead = loghead->next; loghead->prev = NULL; if (viewing == temp) { viewing = loghead; } free(temp->text); } else { temp = (struct tln_logline *) malloc(sizeof(struct tln_logline)); if (temp == NULL) return; /* drop line if no line puffer available */ tln_loglines++; } temp->next = NULL; temp->text = strdup(s); temp->attr = curattr; if (loghead) { logtail->next = temp; temp->prev = logtail; } else { loghead = temp; temp->prev = NULL; } logtail = temp; } int logattr(void) { if (!viewing) return 0; else return viewing->attr; } char *firstlog(void) { viewing = loghead; view_state = STATE_VIEWING; return viewing->text; } char *lastlog(void) { viewing = logtail; view_state = STATE_VIEWING; return viewing->text; } char *nextlog(void) { if (view_state == STATE_EDITING) viewing = loghead; else if (viewing) viewing = viewing->next; if (viewing) { view_state = STATE_VIEWING; return viewing->text; } else { viewing = logtail; return NULL; } } char *prevlog(void) { if (view_state == STATE_EDITING) viewing = logtail; else if (viewing) viewing = viewing->prev; if (viewing) { view_state = STATE_VIEWING; return viewing->text; } else { viewing = loghead; return NULL; } } void start_editing(void) { werase(entwin); currow = curcol = 0; viewing = NULL; view_state = STATE_EDITING; } void delete_prev_char(void) { int i, j; int 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 (view_state != STATE_EDITING) { if (c == '\n') resume_editing(); else if (c == KEY_PPAGE) pageup(SCROLLSIZE); else if (c == KEY_NPAGE) pagedn(SCROLLSIZE); else if (c == KEY_UP) pageup(1); else if (c == KEY_DOWN) pagedn(1); else if (c == KEY_HOME) viewtop(); else if (c == KEY_END) viewbottom(); } else { if (litflag) { wprintw(sclwin, "Keycode = %o octal\n", c); wrefresh(sclwin); litflag = FALSE; return 0; } if (c == erasechar() || c == KEY_BACKSPACE) delete_prev_char(); else if (c == killchar() || c == KEY_CLEAR) start_editing(); else if (c == '\n') return 1; else if (c == KEY_IC) insmode = TRUE; else if (c == KEY_EIC) insmode = FALSE; else if (c == KEY_F(10)) insmode = !insmode; else if (c == KEY_DOWN) { if (currow < ENTRYROWS) currow++; wmove(entwin, currow, curcol); } else if (c == KEY_UP) { if (currow > 0) currow--; wmove(entwin, currow, curcol); } else if (c == KEY_PPAGE) { viewlog(); } else if (c == KEY_LEFT) { left_arrow(); } else if (c == KEY_RIGHT) { right_arrow(); } else if (c == KEY_HOME || c == '\001') { currow = curcol = 0; wmove(entwin, currow, curcol); } else if (c == KEY_END || c == '\005') { move_eol(); } else if (c == KEY_DC) { right_arrow(); delete_prev_char(); } else if (c == KEY_EOS) { wclrtobot(entwin); } else if (c == KEY_EOL) { wclrtoeol(entwin); } else if (c == KEY_F(9)) { litflag = TRUE; } else if (c == (c & A_CHARTEXT)) { if (insmode) { if (currow < ENTRYROWS - 1) { int i; i = A_CHARTEXT & mvwinch(entwin, currow, COLS - 1); mvwinsch(entwin, currow + 1, 0, i); } mvwinsch(entwin, currow, curcol, c); } else { waddch(entwin, c); } curcol++; if (curcol == COLS && currow < ENTRYROWS - 1) { curcol = 0; currow++; } wmove(entwin, currow, curcol); } } return 0; } void sanitize(char *s) { char *t = s; for (; *s != '\0'; s++) { if (*s == '\007') beep(); else if (*s == '\015'); else if (*s < 0) *t++ = *s - 128; else *t++ = *s; } *t = '\0'; } void 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 float freq; 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(24, 0, " "); 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(24, 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, ": "); freq = atof(spotpointer + 5); if (freq > 1800.0 && freq < 30000.0) { if (freq >= 100000.0) { sprintf(spotline + 16, "%5.1f ", freq); sprintf(spotline + 26, "%s", spotpointer + 14); } else if (freq >= 10000.0) { sprintf(spotline + 17, "%5.1f ", freq); sprintf(spotline + 26, "%s", spotpointer + 13); } else if (freq >= 1000.0) { sprintf(spotline + 18, "%5.1f ", freq); sprintf(spotline + 26, "%s", spotpointer + 12); } else { sprintf(spotline + 19, "%5.1f ", freq); sprintf(spotline + 26, "%s", spotpointer + 11); } for (m = 25; m < 38; m++) { if (spotline[m] > 96) spotline[m] -= 32; } strcat(spotline, " "); get_time(); // strftime(spottime, 80, "%H%MZ", time_ptr); ### bug fix strftime(spottime, sizeof(spottime), "%H%MZ", time_ptr); strcpy(spotline + 70, spottime); spotline[75] = '\0'; strcat(spotline, " <<\n"); strcpy(s, spotline); } } else { for (t = 0; t < 4; t++) strcpy(talkarray[t], talkarray[t + 1]); if (s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = '\0'; // remove the newline talkarray[4][0] = '\0'; strncat(talkarray[4], s + 8, 60); if (s[strlen(s) - 1] != '\n') strcat(s, "\n"); // we need to restore newline here... } } // end cluster private spotting interface for (i = 0; i < strlen(s); i++) { if (s[i] == '\n' || i + l + 1 >= COLS) { addlog(tln_input_buffer); if (lan_active == 1 && lanspotflg == 0) { if ((strlen(tln_input_buffer) > 0) && (tln_input_buffer[0] > 32) && (tln_input_buffer[0] < 126)) { strncpy(lan_out, tln_input_buffer, 78); lan_out[78] = '\0'; strcat(lan_out, "\n"); if (strlen(s) == 0) tln_input_buffer[0] = '\0'; send_lan_message(CLUSTERMSG, lan_out); lan_out[0] = '\0'; } } l = strlen(tln_input_buffer); l = -i - 1; } else { if (s[i] != '\0') tln_input_buffer[i + l] = s[i]; } tln_input_buffer[i + l + 1] = '\0'; } } /* ========================================= = = This initializes the packet windows = ===========================================*/ WINDOW *packet_win; PANEL *packet_panel; 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 addrarg; 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); addrarg = 0; 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 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]); initialized = 1; noecho(); cbreak(); wtimeout(entwin, 30); wrefresh(sclwin); start_editing(); curattr = attr[NORMAL_ATTR]; } 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 (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, count; static int sent_login = 0; in_packetclient = 1; sleep(1); show_panel(packet_panel); wrefresh(sclwin); wclear(entwin); wrefresh(entwin); count = 0; 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"); 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) { int rc; line[strlen(line) - 1] = 13; line[strlen(line)] = '\0'; rc = 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(24, 0, " "); mvprintw(24, 0, ">"); refreshp(); echo(); getnstr(line, MAX_CMD_LEN); noecho(); if (strlen(line) > 0) { strcat(line, "\n"); if (packetinterface == TNC_INTERFACE) { int rc; line[strlen(line) - 1] = '\r'; line[strlen(line)] = '\0'; /* not needed */ rc = write(fdSertnc, line, strlen(line)); } else if ((packetinterface == TELNET_INTERFACE) && (prsock > 0)) usputs(prsock, line); } attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(24, 0, " "); refreshp(); line[0] = '\0'; /* not needed */ return (0); } tlf-1.3.0/src/time_update.c0000644000175000017520000001112213014014714012446 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2003 Rein Couperus * 2011-2012 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * * Update time * * also updates windows every second *--------------------------------------------------------------*/ #include #include "bandmap.h" #include "clusterinfo.h" #include "freq_display.h" #include "get_time.h" #include "getwwv.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "lancode.h" #include "printcall.h" #include "showscore.h" #include "showzones.h" #include "tlf_curses.h" #include "ui_utils.h" /** broadcast to LAN * * every 120s broadcast frequency via LAN and * act as time master if allowed */ void broadcast_lan(void) { extern int time_master; extern float freq; static int frcounter = 0; frcounter++; if (frcounter >= 60) { // every 60 calls frcounter = 0; if (lan_active != 0) { send_freq(freq); if (time_master == 1) send_time(); } } } /** update band, date and time */ void update_line(char *timestr) { extern struct tm *time_ptr; static int daysecs = 0; char time_buf[40] = ""; attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); strncpy(time_buf, timestr, 8); mvaddstr(12, 0, band[bandinx]); mvprintw(12, 17, time_buf); daysecs++; if (daysecs >= 60) { // update the date 1x per minute daysecs = 0; get_time(); strftime(time_buf, 60, "%d-%b-%y", time_ptr); mvprintw(12, 7, time_buf); } } /** show frequency and frequency memory if rig control is active */ void show_freq(void) { extern int showfreq; extern int showscore_flag; extern float mem; extern int trx_control; extern float freq; if (trx_control == 1) { attron(modify_attr(COLOR_PAIR(C_LOG))); if ((showfreq == 0) || (showscore_flag == 1)) mvprintw(13, 68, "TRX: %7.1f", freq); if (mem > 0.0) mvprintw(14, 68, "MEM: %7.1f", mem); else mvprintw(14, 68, " "); if ((showfreq == 1) && (showscore_flag == 0)) { freq_display(); } } } void time_update(void) { extern struct tm *time_ptr; extern char qsonrstr[]; extern int bandinx; extern int this_second; extern int system_secs; extern int miniterm; char time_buf[11]; int currentterm = 0; static int s = 0; static int m = 0; static int bm_timeout = 0; static int oldsecs = -1; /* trigger immediate update */ get_time(); this_second = time_ptr->tm_sec; /* seconds */ system_secs = time_ptr->tm_min * 60 + time_ptr->tm_sec; if (this_second != oldsecs) { /* do it every second */ oldsecs = this_second; if (wpx == 1) { if (minute_timer > 0) minute_timer--; } show_freq(); bandmap_age(); /* age bandmap spots every second */ clusterinfo(); /* update cluster and bandmap display */ /* write bandmap spots to file every 10s */ bm_timeout = (bm_timeout + 1) % 10; if (bm_timeout == 0) { bmdata_write_file(); } s = (s + 1) % 2; if (s > 0) { /* every 2 seconds */ strftime(time_buf, 10, "%H:%M:%S", time_ptr); time_buf[5] = '\0'; if ((time_buf[6] == '1') && (m >= 30)) { m = 0; getwwv(); } else { m++; } currentterm = miniterm; miniterm = 0; broadcast_lan(); update_line(time_buf); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(7, 0, logline0); mvprintw(8, 0, logline1); mvprintw(9, 0, logline2); mvprintw(10, 0, logline3); mvprintw(11, 0, logline4); mvprintw(13, 0, " "); attron(COLOR_PAIR(C_WINDOW)); mvprintw(12, 23, qsonrstr); printcall(); showscore(); /* update score window every 2 seconds */ show_zones(bandinx); miniterm = currentterm; } } } tlf-1.3.0/src/sendqrg.c0000644000175000017520000001353313046414310011622 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 "sendqrg.h" // Sets HAVE_LIBHAMLIB if enabled #include "startmsg.h" void send_bandswitch(int trxqrg); int sendqrg(void) { extern char hiscall[]; extern int trx_control; #ifdef HAVE_LIBHAMLIB //extern RIG *my_rig; extern freq_t outfreq; #else //extern int my_rig; extern int outfreq; #endif float trxqrg; if (trx_control != 1) return (0); /* nothing to do here */ trxqrg = atof(hiscall); switch ((int) trxqrg) { case 0 ... 1799:{ trxqrg = 0; break; } case 1800 ... 2000: case 3500 ... 4000: case 7000 ... 7300: case 10100 ... 10150: case 14000 ... 14350: case 18068 ... 18168: case 21000 ... 21450: case 24890 ... 24990: case 28000 ... 29700: { #ifdef HAVE_LIBHAMLIB outfreq = (freq_t) (trxqrg * 1000); #else outfreq = (int) (trxqrg * 1000); #endif send_bandswitch((int) trxqrg); break; } default: trxqrg = 0; } return ((int)trxqrg); } /**************************************************************************/ #ifdef HAVE_LIBHAMLIB //code for Hamlib interface int init_tlf_rig(void) { extern RIG *my_rig; extern rig_model_t myrig_model; extern freq_t outfreq; extern char rigconf[]; 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; char *cnfparm, *cnfval; int rigconf_len, i; 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 num %d", (int) myrig_model); return (-1); } else { if (strlen(rigportname) > 1) { rigportname[strlen(rigportname) - 1] = '\0'; // remove '\n' strncpy(my_rig->state.rigport.pathname, rigportname, FILPATHLEN); } else { showmsg("Missing rig port name!"); return (-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; cnfparm = cnfval = rigconf; rigconf_len = strlen(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; } } 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 == 1) { // debug routines 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); outfreq = 14000000; //test set frequency retcode = rig_set_freq(my_rig, RIG_VFO_CURR, outfreq); if (retcode != RIG_OK) { showmsg("Problem with rig set freq!"); sleep(1); } else { showmsg("Rig set freq ok!"); } outfreq = 0; 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); } sleep(10); } // end debug sleep(1); 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("port %s closed ok \n", rigportname); return (0); } #endif // end code for Hamlib interface tlf-1.3.0/src/calledit.c0000644000175000017520000001301313014014714011730 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2011 Thomas Beierlein #include "getctydata.h" #include "searchlog.h" // Includes glib.h #include "showinfo.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" void calledit(void) { extern char hiscall[]; extern int block_part; int i = 0, l, b = 0; int j = 0; int x = 0; int cnt = 0, insertflg = 0; char call1[30], call2[10]; l = strlen(hiscall); b = l - 1; while ((i != 27) && (b <= strlen(hiscall))) { attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 29, " "); mvprintw(12, 29, hiscall); mvprintw(12, 29 + b, ""); /* no refreshp() here as getch() calls wrefresh() for the * panel with last output (whre the cursor should go */ i = key_get(); // or if ((i == KEY_DC) || (i == KEY_IC)) cnt++; else { if (i != 27) cnt = 0; } // if (i == 9) block_part = 1; else block_part = 0; // Ctrl-A (^A) or , move to head of callsign field. if (i == 1 || i == KEY_HOME) { b = 0; x = 0; } // Ctrl-E (^E) or , move to end of callsign field, exit edit mode. if (i == 5 || i == KEY_END) { b = strlen(hiscall); break; } // 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(hiscall) ); if (cnt > 1) searchlog(hiscall); // } else if (i == KEY_BACKSPACE) { if (b > 0) { b--; l = strlen(hiscall); for (j = b; j <= l; j++) { hiscall[j] = hiscall[j + 1]; } showinfo( getctydata(hiscall) ); if (cnt > 1) searchlog(hiscall); } // } else if (i == KEY_IC) { if (insertflg == 0) insertflg = 1; else insertflg = 0; // Any character left other than . } else if (i != 27) { // Promote lower case to upper case. if ((i >= 97) && (i <= 122)) i = i - 32; // Accept A-Z or / and 1-9 if (((i >= 65) && (i <= 90)) || ((i >= 47) && (i <= 57))) { call2[0] = '\0'; if (b <= 12) { strncpy(call1, hiscall, b); strncpy(call2, hiscall + b, strlen(hiscall) - (b - 1)); } if (strlen(hiscall) + 1 == 12) break; // leave insert mode if (((i >= 65) && (i <= 90)) || ((i >= 47) && (i <= 57))) { call1[b] = i; call1[b + 1] = '\0'; if ((strlen(call1) + strlen(call2)) < 12) { strcat(call1, call2); // if (strlen(call1) + strlen(hiscall) >= 12) break; if (strlen(call1) >= 12) break; strcpy(hiscall, call1); } } if ((b < strlen(hiscall) - 1) && (b <= 12)) b++; else break; showinfo( getctydata(hiscall) ); searchlog(hiscall); } else if (x != 0) i = 27; } else i = 27; } attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 29, hiscall); mvprintw(12, 29, " "); refreshp(); attron(A_STANDOUT); searchlog(hiscall); } int insert_char(int curposition) { extern char hiscall[]; char call1[30], call2[10]; int ichr = 0; attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); call1[0] = '\0'; call2[0] = '\0'; while (ichr != 27) { ichr = key_get(); // Leave insert mode if , , or are received. if ((ichr == 9) || (ichr == '\n') || (ichr == KEY_ENTER) || (ichr == 127)) break; // Promote lower case to upper case. if ((ichr >= 97) && (ichr <= 122)) ichr = ichr - 32; if (curposition <= 10) { strncpy(call1, hiscall, curposition); } if (curposition <= 10) { strncpy(call2, hiscall + curposition, strlen(hiscall) - (curposition - 1)); } // Too long! if (strlen(hiscall) + 1 == 13) break; // leave insert mode // Accept A-Z or / and 1-9 if (((ichr >= 65) && (ichr <= 90)) || ((ichr >= 47) && (ichr <= 57))) { call1[curposition] = ichr; call1[curposition + 1] = '\0'; if ((strlen(call1) + strlen(call2)) < 12) { strcat(call1, call2); if (strlen(call1) + strlen(hiscall) >= 12) break; strcpy(hiscall, call1); } } else break; attroff(A_STANDOUT); attron(COLOR_PAIR(C_HEADER)); mvprintw(12, 29, hiscall); curposition++; mvprintw(12, 29 + curposition, ""); refreshp(); } ichr = 27; return (ichr); } tlf-1.3.0/src/editlog.c0000644000175000017520000000675413014014714011614 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 "clear_display.h" #include "scroll_log.h" #include "tlf.h" #include "tlf_curses.h" int logedit(void) { extern char logfile[]; extern char backgrnd_str[]; extern int editor; extern int stop_backgrnd_process; char comstr[40] = ""; int j; int lfile; int qsobytes; int qsolines; int errbytes; int rc; struct stat statbuf; FILE *infile; FILE *outfile; char inputbuffer[800]; char *rp; if (editor == EDITOR_JOE) strcat(comstr, "joe "); /* my favorite editor */ else if (editor == EDITOR_VI) strcat(comstr, "vi "); else if (editor == EDITOR_MC) strcat(comstr, "mcedit "); else strcat(comstr, "e3 "); strcat(comstr, logfile); rc = system(comstr); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); erase(); refreshp(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } if ((lfile = open(logfile, O_RDONLY)) < 0) { mvprintw(24, 0, "I can not find the logfile..."); refreshp(); sleep(2); } else { fstat(lfile, &statbuf); qsobytes = statbuf.st_size; qsolines = qsobytes / LOGLINELEN; errbytes = qsobytes - (qsolines * LOGLINELEN); if (errbytes != 0) { close(lfile); stop_backgrnd_process = 1; if ((infile = fopen(logfile, "r")) == NULL) { mvprintw(24, 0, "Unable to open logfile..."); refreshp(); sleep(2); } else { if ((outfile = fopen("./cpyfile", "w")) == NULL) { mvprintw(24, 0, "Unable to open cpyfile..."); refreshp(); fclose(infile); sleep(2); } else { while (!(feof(infile))) { rp = fgets(inputbuffer, 160, infile); if (strlen(inputbuffer) != LOGLINELEN) { strcat(inputbuffer, backgrnd_str); inputbuffer[LOGLINELEN] = '\0'; } fputs(inputbuffer, outfile); } fclose(infile); fclose(outfile); } if ((lfile = open("./cpyfile", O_RDWR)) < 0) { mvprintw(24, 0, "I can not find the copy file..."); refreshp(); sleep(2); } else { fstat(lfile, &statbuf); if (statbuf.st_size > 80) { rc = ftruncate(lfile, statbuf.st_size - LOGLINELEN); fsync(lfile); } close(lfile); } rename("./cpyfile", logfile); remove("./cpyfile"); } } else close(lfile); stop_backgrnd_process = 0; } close(lfile); scroll_log(); refreshp(); return (0); } tlf-1.3.0/src/audio.c0000644000175000017520000004441213014014714011257 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 #include "audio.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include #endif #ifdef __OpenBSD__ # include #else # include #endif extern char sc_device[]; int afd; #define ABUFSIZE 4000 void init_audio() { char afile[40]; /* Audio device name */ int sndfmt; /* Encoding of audio from */ int channels; /* Number of channels to record */ int speed; /* Sample rate of audio */ sndfmt = AFMT_MU_LAW; channels = 1; speed = 8000; /* Audio device setup */ strcpy(afile, sc_device); if ((afd = open(afile, O_RDONLY, 0)) == -1) { perror(afile); exit(errno); } if (ioctl(afd, SNDCTL_DSP_SETFMT, &sndfmt) == -1) { perror("mu law"); exit(errno); } if (ioctl(afd, SNDCTL_DSP_CHANNELS, &channels) == -1) { perror("mono"); exit(errno); } if (ioctl(afd, SNDCTL_DSP_SPEED, &speed) == -1) { perror("8000 sps"); exit(errno); } } int close_audio() { close(afd); return (0); } /* ------------ rescale bar ----------*/ int rescale(int testvalue) { extern int scale_values[]; if (testvalue > scale_values[0]) testvalue = 19; else if (testvalue > scale_values[1]) testvalue = 18; else if (testvalue > scale_values[2]) testvalue = 17; else if (testvalue > scale_values[3]) testvalue = 16; else if (testvalue > scale_values[4]) testvalue = 15; else if (testvalue > scale_values[5]) testvalue = 14; else if (testvalue > scale_values[6]) testvalue = 13; else if (testvalue > scale_values[7]) testvalue = 12; else if (testvalue > scale_values[8]) testvalue = 11; else if (testvalue > scale_values[9]) testvalue = 10; else if (testvalue > scale_values[10]) testvalue = 9; else if (testvalue > scale_values[11]) testvalue = 8; else if (testvalue > scale_values[12]) testvalue = 7; else if (testvalue > scale_values[13]) testvalue = 6; else if (testvalue > scale_values[14]) testvalue = 5; else if (testvalue > scale_values[15]) testvalue = 4; else if (testvalue > scale_values[16]) testvalue = 3; else if (testvalue > scale_values[17]) testvalue = 2; else if (testvalue > scale_values[18]) testvalue = 1; else testvalue = 0; return (testvalue); } float get_audio_sample(void) { int rc = 0; /* Return value from subs */ static float avg = 128.0; static float maxval = 0; static float minval = 0; static float retval = 0.0; unsigned char abuf[ABUFSIZE]; /* Audio data buffer */ int i, k; for (k = 0; k < 4; k++) { if ((rc = read(afd, abuf, ABUFSIZE)) == -1) { perror("audio read"); exit(errno); } for (i = 0; i < rc; i++) // calculate average { if ((maxval - minval) != 0.0) { if (i > 2) avg = avg + (abuf[i] + abuf[i - 1] + abuf[i - 2] + abuf[i - 3]) / 5; else avg = avg + (abuf[i] + abuf[i + 1] + abuf[i + 2] + abuf[i + 3]) / 5; } if (avg >= 188.0) avg = 128.0; if (avg <= 60.0) avg = 128.0; } for (i = 0; i < rc; i++) // calculate maximum avg value { if (abuf[i] >= avg) { if (i > 0) maxval = ((510 * maxval) + abuf[i] + abuf[i - 1]) / 512; else maxval = ((510 * maxval) + abuf[i] + abuf[i + 1]) / 512; if (maxval < avg) maxval = avg + 1; } else { if (i > 0) minval = ((510 * minval) + abuf[i] + abuf[i - 1]) / 512; else minval = ((510 * minval) + abuf[i] + abuf[i + 1]) / 512; if (minval >= avg) minval = avg - 1; } } retval = (maxval - minval); if (retval < 0.0) retval = 0.0; } mvprintw(23, 5, " "); mvprintw(23, 5, "%4.0f", retval); refreshp(); retval = rescale(retval); return (retval); } /* ----------make bar for s meter ------------*/ int make_bar(int xpos, int ypos, int yheight, unsigned int value, int bar_type) { int i; if (bar_type == S_BAR) { for (i = 0; i < yheight; i++) mvprintw(ypos - i, xpos, " "); } /* Make the bar */ if (bar_type == S_BAR || bar_type == PAN_BAR) { for (i = 0; i < value && i < 20; i++) mvprintw(ypos - i, xpos, "#"); } else mvprintw(21 - value, xpos, "@"); refreshp(); return (0); } /* ------------ draw noise bridge screen ----------*/ int draw_nb_screen(int xpos, int ypos, int yheight, int bar_type) { int i; attroff(A_BOLD); for (i = 0; i < 21; i++) { switch (i) { case 0: case 20: mvprintw(ypos + i, xpos, "+---------+---------+---------+---------+---------+"); break; case 1 ... 4: case 6 ... 9: case 11 ... 14: case 16 ... 19: mvprintw(ypos + i, xpos, "| | | | | | | | | | |"); break; case 5: case 10: case 15: mvprintw(ypos + i, xpos, "+----+----+----+----+----+----+----+----+----+----+"); } } attron(A_BOLD); mvprintw(ypos + 1, 2, "%2d-", 0); // 0 mvprintw(ypos + 3, 2, "%2d-", 3); // 3 mvprintw(ypos + 5, 2, "%2d-", 6); // 6 mvprintw(ypos + 10, 2, "%2d-", 10); mvprintw(ypos + 15, 2, "%2d-", 20); // 20 mvprintw(ypos + 20, 2, "%2d-", 40); return (0); } /* ------------ draw scanner screen ----------*/ int drawscreen(int xpos, int ypos, int yheight, int bar_type) { int i; attroff(A_BOLD); for (i = 0; i < 21; i++) { switch (i) { case 0: case 20: mvprintw(ypos + i, xpos, "+---------+---------+---------+---------+---------+"); break; case 1 ... 4: case 6 ... 9: case 11 ... 14: case 16 ... 19: mvprintw(ypos + i, xpos, "| | | | | | | | | | |"); break; case 5: case 10: case 15: mvprintw(ypos + i, xpos, "+----+----+----+----+----+----+----+----+----+----+"); } } attron(A_BOLD); mvprintw(ypos + 1, 2, "%2d-", 20); mvprintw(ypos + 3, 2, "%2d-", 10); mvprintw(ypos + 5, 2, "%2d-", 9); mvprintw(ypos + 7, 2, "%2d-", 8); mvprintw(ypos + 9, 2, "%2d-", 7); mvprintw(ypos + 11, 2, "%2d-", 6); mvprintw(ypos + 13, 2, "%2d-", 5); mvprintw(ypos + 15, 2, "%2d-", 4); mvprintw(ypos + 17, 2, "%2d-", 3); mvprintw(ypos + 19, 2, "%2d-", 2); return (0); } /* ------------ draw S meter screen ----------*/ int drawSmeter(int xpos, int ypos, int yheight, float testvalue) { int i; for (i = 0; i < 21; i++) { switch (i) { case 0: case 20: mvprintw(ypos + i, xpos, "+---+"); break; case 1 ... 4: case 6 ... 19: mvprintw(ypos + i, xpos, "| |"); break; case 5: attron(modify_attr(COLOR_PAIR(C_HEADER) | A_STANDOUT)); mvprintw(ypos + i, xpos, "> <"); attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); } } mvprintw(ypos + 1, 3, "%2d", 20); mvprintw(ypos + 3, 3, "%2d", 10); mvprintw(ypos + 5, 3, "%2d", 9); mvprintw(ypos + 7, 3, "%2d", 8); mvprintw(ypos + 9, 3, "%2d", 7); mvprintw(ypos + 11, 3, "%2d", 6); mvprintw(ypos + 13, 3, "%2d", 5); mvprintw(ypos + 15, 3, "%2d", 4); mvprintw(ypos + 17, 3, "%2d", 3); mvprintw(ypos + 19, 3, "%2d", 2); make_bar(7, 20, 20, (int) testvalue, S_BAR); refreshp(); return (0); } /* ------------------ Panoramic scan -------------------- */ int panscan(void) { #ifdef HAVE_LIBHAMLIB extern freq_t outfreq; #else extern int outfreq; #endif int rc, j, key = 0; float testvalue; float FromFrequency = 0.0; float FrequencyStep = 0.0; float frequencies[51]; while (1) { key = 0; attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 0; j <= 24; j++) mvprintw(j, 0, " "); drawscreen(5, 1, 21, 0); mvprintw(1, 60, "- PANORAMIC SCAN -"); mvprintw(5, 60, "Frequency: "); refreshp(); echo(); rc = scanf("%f", &FromFrequency); noecho(); mvprintw(5, 72, "%5.1f", FromFrequency); mvprintw(22, 1, "%5.1f", FromFrequency); refreshp(); mvprintw(7, 60, "Step (kHz): "); refreshp(); rc = scanf("%f", &FrequencyStep); mvprintw(7, 72, "%5.1f", FrequencyStep); refreshp(); for (j = 0; j < 51; j++) { frequencies[j] = FromFrequency + j * FrequencyStep; switch (j) { case 10: case 20: case 30: case 40: case 50: mvprintw(22, j + 1, "%5.1f", frequencies[j]); break; default: ; } } refreshp(); /* ------------- scan --------------------- */ for (j = 0; j < 5; j++) testvalue = get_audio_sample(); for (j = 0; j < 51; j++) { int i; for (i = 0; i < 100; i++) { if (outfreq == 0) break; usleep(10000); } #ifdef HAVE_LIBHAMLIB outfreq = (freq_t) (frequencies[j] * 1000); #else outfreq = (int) (frequencies[j] * 1000); #endif usleep(50 * 1000); testvalue = get_audio_sample(); make_bar(5 + j, 20, 20, (int) testvalue, PAN_BAR); key = key_poll(); if (key == 27 || key == '\n' || key == KEY_ENTER) break; } // end for /* -----------end scan -------------------- */ mvprintw(23, 60, "---- Key? ----"); j = key_get(); if (j == 27) break; } // end while return (0); } /* ------------------ Noise bridge scan -------------------- */ int nbscan(void) { #ifdef HAVE_LIBHAMLIB extern freq_t outfreq; #else extern int outfreq; #endif int rc, j, key = 0; float testvalue; float FromFrequency = 0.0; float FrequencyStep = 0.0; float frequencies[51]; float values[51]; while (1) { key = 0; attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 0; j <= 24; j++) // wipe the screen mvprintw(j, 0, " "); draw_nb_screen(5, 1, 21, 0); // draw the grid mvprintw(1, 60, "- NOISE BRIDGE -"); // get the parameters mvprintw(5, 60, "Frequency: "); refreshp(); rc = scanf("%f", &FromFrequency); mvprintw(5, 72, "%5.1f", FromFrequency); mvprintw(22, 1, "%5.1f", FromFrequency); refreshp(); mvprintw(7, 60, "Step (kHz): "); refreshp(); rc = scanf("%f", &FrequencyStep); mvprintw(7, 72, "%5.1f", FrequencyStep); refreshp(); for (j = 0; j < 51; j++) { // draw the X scale frequencies[j] = FromFrequency + j * FrequencyStep; switch (j) { case 10: case 20: case 30: case 40: case 50: mvprintw(22, j + 1, "%5.1f", frequencies[j]); break; default: ; } } refreshp(); /* ------------- scan --------------------- */ for (j = 0; j < 5; j++) testvalue = get_audio_sample(); for (j = 0; j < 51; j++) { int i; for (i = 0; i < 100; i++) { if (outfreq == 0) break; usleep(10000); } #ifdef HAVE_LIBHAMLIB outfreq = (freq_t) (frequencies[j] * 1000); #else outfreq = (int) (frequencies[j] * 1000); #endif usleep(50 * 1000); testvalue = get_audio_sample(); values[j] = testvalue; if (j > 0) testvalue = (values[j - 1] + values[j]) / 2; make_bar(5 + j, 20, 20, (int) testvalue, SPOT_BAR); key = key_poll(); if (key == 27 || key == '\n' || key == KEY_ENTER) break; } // end for /* -----------end scan -------------------- */ mvprintw(23, 60, "---- Key? ----"); j = key_get(); if (j == 27) break; } // end while return (0); } void scanmenu(void) { int j; attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 0; j <= 24; j++) mvprintw(j, 0, " "); mvprintw(1, 20, "--- TLF SCANNER UTILITY ---"); mvprintw(6, 20, "0.: Calibrate S-meter on S9 !"); mvprintw(8, 20, "1.: Panorama scan"); mvprintw(9, 20, "2.: Noise bridge scan"); //mvprintw (10, 20, "3.: Channel scan (n.a.)"); //mvprintw (11, 20, "4.: Beacon scan (n.a.)"); mvprintw(11, 20, "ESC: Exit scan function"); mvprintw(23, 20, " --- Press a key to continue --- "); refreshp(); } /* -------------------main test routine ------- */ int testaudio() { float testvalue; char key = '\0'; int runnit = 1; clear(); scanmenu(); /* ------------initialize sound card --------*/ init_audio(); while (runnit == 1) { testvalue = get_audio_sample(); drawSmeter(5, 1, 21, testvalue); key = key_poll(); switch (key) { case '1': panscan(); scanmenu(); break; case '2': nbscan(); scanmenu(); break; // case 27: runnit = 0; } } close_audio(); clear(); return (0); } void recordmenue(void) { int j; attron(modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (j = 0; j <= 24; j++) mvprintw(j, 0, " "); mvprintw(1, 20, "--- TLF SOUND RECORDER UTILITY ---"); mvprintw(6, 20, "F1 ... F12, S, C: Record Messages"); mvprintw(9, 20, "1.: Enable contest recorder"); mvprintw(10, 20, "2.: Disable contest recorder"); mvprintw(11, 20, "3.: Play back file"); mvprintw(13, 20, "ESC: Exit sound recorder function"); refreshp(); } /*--------------------------------------------------------------------------*/ void do_record(int message_nr) { extern char ph_message[14][80]; int rc; 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 rc = system(commands); //G4KNO: Loop until keypress while (1) { if (key_get() == 27) { //kill process (SIGINT=Ctrl-C). rc = system("pkill -SIGINT -n rec"); break; } } } /*--------------------------------------------------------------------------*/ void record(void) { extern char ph_message[14][80]; int rc, 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': rc = system("echo " " > ~/.VRlock"); rc = 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); rc = system("rm ~/.VRlock"); rc = system("pkill -f soundlogs > /dev/null 2> /dev/null "); runnit = 0; break; // List contest recordings. case '3': sounddir = opendir("$HOME/tlf/soundlogs/"); // (W9WI) if (sounddir == NULL) break; for (i = 4; i < 15; i++) mvprintw(i, 0, " "); mvprintw(4, 10, ""); for (i = 10; i < 81; i += 10) { soundfilename = readdir(sounddir); if (soundfilename == NULL) break; else { if (strstr(soundfilename->d_name, ".au") != NULL) { if (i > 60) { i = 10; j++; } strncpy(printname, soundfilename->d_name, 6); mvprintw(j, i, "%s", printname); refreshp(); } else if (i >= 10) i -= 10; } } closedir(sounddir); // Play back contest recording. case '4': mvprintw(15, 20, "Play back file (ddhhmmxx): "); refreshp(); echo(); getnstr(playbackfile, 8); noecho(); strcpy(commands, "play -d "); strcat(commands, sc_device); strcat(commands, " ~/tlf/soundlogs/"); if (strlen(playbackfile) > 6) { strncat(commands, playbackfile, 6); strcat(commands, ".au trim "); strcat(commands, playbackfile + 6); } else if (strlen(playbackfile) < 5) { strcat(commands, playbackfile); strcat(commands, "00.au"); } else { strcat(commands, playbackfile); strcat(commands, ".au"); } mvprintw(16, 20, "Use Ctrl-c to stop and return to tlf"); mvprintw(18, 20, ""); refreshp(); rc = system(commands); runnit = 0; break; case 27: runnit = 0; } } } tlf-1.3.0/src/note.h0000644000175000017520000000163713014014714011132 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.3.0/src/nicebox.c0000644000175000017520000000345713014014714011611 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.3.0/src/editlog.h0000644000175000017520000000164313014014714011611 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EDITLOG_H #define EDITLOG_H int logedit(void); #endif /* EDITLOG_H */ tlf-1.3.0/src/qtcwin.c0000644000175000017520000014020013046414310011454 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 "keyer.h" #include "lancode.h" #include "nicebox.h" // Includes curses.h #include "qtc_log.h" #include "qtcutil.h" #include "qtcvars.h" // Includes globalvars.h #include "rtty.h" #include "sendbuf.h" #include "speedupndown.h" #include "time_update.h" #include "tlf_panel.h" #include "ui_utils.h" #include "write_keyer.h" #include /* 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 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 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); 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; itotal))); activefield = 0; } /* save the current callsign to previous call variable */ strncpy(prevqtccall, qtclist.callsign, strlen(qtclist.callsign)); prevqtccall[strlen(qtclist.callsign)] = '\0'; qtccallsign = qtclist.callsign; /* save the address of the counter of SEND qtc structure */ qtccount = &qtclist.count; /* set the QTC win header */ sprintf(qtchead, "QTC send"); } void qtc_main_panel(int direction) { char tempc[40]; int i, x; int tfi, tlen = 0; int currqtc = -1; attr_t attributes; short cpair; /* fill the callsign fields of the current qtc direction structure * with hiscall or the last call if hiscall is empty */ if (strlen(hiscall) > 0) { fill_qtc_callsign(direction, hiscall); } else if (strlen(lastcall) > 0) { fill_qtc_callsign(direction, lastcall); } /* save the value of the direction variable */ qtccurrdirection = direction; /* here are the mandatory steps, if the direction is RECV */ if (direction == RECV) { prepare_for_recv(); } /* here are the mandatory steps, if the direction is SEND */ if (direction == SEND) { prepare_for_send(); } init_qtc_panel(); draw_qtc_panel(direction); i=1; x = -1; /* main loop */ while(x != 27) { while (x < 1) { usleep(5000); time_update(); if (trxmode == DIGIMODE) { show_rtty(); } x = key_poll(); } switch(x) { //case 227: // ALT-c // Ctrl-T (^T) case 20: if (trxmode == DIGIMODE) { show_rtty_lines(); } // Up Arrow case KEY_UP: if (direction == RECV) { if (activefield > 0) { // nr of QTC record field idx if (activefield == 1 || activefield == 2) { activefield = 0; showfield(1); showfield(2); } else if (activefield == 3 || activefield == 4) { activefield -= 2; showfield(activefield+2); } else { activefield -= 3; showfield(activefield+3); } } showfield(activefield); curpos = 0; } if (direction == SEND && ((trxmode != DIGIMODE && qtclist.totalsent < *qtccount) || (trxmode == DIGIMODE && qtclist.totalsent == *qtccount))) { switch (activefield) { case 0: activefield = 12; show_help_msg(activefield); showfield(0); wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[9].qtc); break; case 2: activefield = 0; showfield(2); showfield(0); break; case 3: activefield = 2; showfield(2); wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, activefield+1, 4, "%s", qtclist.qtclines[0].qtc); break; case 4 ... 12: show_help_msg(activefield); wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield-3)].qtc); activefield--; wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield-3)].qtc); break; } } break; // Down Arrow case KEY_DOWN: if (direction == RECV) { if (activefield < 30) { // last line serial field idx if (activefield == 0) { activefield = 1; showfield(0); } else if (activefield == 1 || activefield == 2) { activefield += 2; showfield(1); showfield(2); } else { activefield += 3; showfield(activefield-3); } } showfield(activefield); curpos = 0; } if (direction == SEND && ((trxmode != DIGIMODE && qtclist.totalsent < *qtccount) || (trxmode == DIGIMODE && qtclist.totalsent == *qtccount))) { switch (activefield) { case 0: activefield = 2; showfield(0); showfield(2); break; case 2: activefield = 3; show_help_msg(activefield); showfield(2); wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[0].qtc); break; case 3 ... 11: show_help_msg(activefield); wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield-3)].qtc); activefield++; wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield-3)].qtc); break; case 12: activefield = 0; wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, 14, 4, "%s", qtclist.qtclines[9].qtc); showfield(0); break; } } break; // Left Arrow case KEY_LEFT: if (DIRCLAUSE) { if (curpos < curfieldlen) { // curpos is a shift, means lenght - position curpos++; showfield(activefield); } } break; // Right Arrow case KEY_RIGHT: if (DIRCLAUSE) { if (curpos > 0) { curpos--; showfield(activefield); } } break; // case '\n': case KEY_ENTER: if (activefield > 2) { if (direction == RECV) { currqtc = ((activefield-3)/3); if ((qtcreclist.qtclines[currqtc].status == 0 && strlen(qtcreclist.qtclines[currqtc].time) == 4 && strlen(qtcreclist.qtclines[currqtc].callsign) > 0 && strlen(qtcreclist.qtclines[currqtc].serial) > 0) || qtc_recv_lazy == 1 ) { if (qtc_recv_lazy == 1) { fill_lazy_line(&qtcreclist.qtclines[currqtc]); showfield(3*(currqtc+1)); showfield((3*(currqtc+1))+1); showfield((3*(currqtc+1))+2); } get_time(); tempc[0] = '\0'; strftime(tempc, 40, "%d-%b-%y %H:%M", time_ptr); strncpy(qtcreclist.qtclines[currqtc].receivedtime, tempc, 15); qtcreclist.qtclines[currqtc].receivedtime[15] = '\0'; qtcreclist.qtclines[currqtc].status = 2; show_status(currqtc); if (currqtc < *qtccount) { if (trxmode == DIGIMODE) { qtcreclist.qtclines[currqtc].confirmed = 1; // compatibility for other modes qtcreclist.confirmed++; activefield+=3; // go to next line exch field showfield(activefield-3); } else { if (qtcreclist.qtclines[currqtc].confirmed == 0) { qtcreclist.qtclines[currqtc].confirmed = 1; qtcreclist.confirmed++; if (trxmode == CWMODE) { sendmessage(qtc_recv_msgs[2]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[2]); } } tfi = (activefield-3)%3; //activefield++; // go to next line time field activefield += (3-tfi); showfield(activefield-(3-tfi)); } showfield(activefield); } } else if (qtcreclist.qtclines[currqtc].status == 1 && qtcreclist.qtclines[currqtc].confirmed != 1) { if (trxmode == CWMODE) { sendmessage(qtc_recv_msgs[7]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[7]); } if (trxmode == DIGIMODE) { char *str = g_strdup_printf("%s %02d %02d\n", g_strchomp(qtc_recv_msgs[7]), currqtc+1, currqtc+1); sendmessage(str); g_free(str); } } if (*qtccount > 0 && qtcreclist.confirmed == *qtccount) { if (qtcreclist.sentcfmall == 0) { qtcreclist.sentcfmall = 1; log_recv_qtc_to_disk(nr_qsos); if (record_run > -1) { stop_qtc_recording(); } if (trxmode == DIGIMODE || trxmode == CWMODE) { sendmessage(qtc_recv_msgs[9]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[9]); } } x = 27; // close the window } } if (direction == SEND && trxmode != DIGIMODE) { if (qtclist.qtclines[activefield-3].sent == 0) { qtclist.qtclines[activefield-3].sent = 1; get_time(); tempc[0] = '\0'; strftime(tempc, 40, "%d-%b-%y %H:%M", time_ptr); strncpy(qtclist.qtclines[activefield-3].senttime, tempc, 15); qtclist.qtclines[activefield-3].senttime[15] = '\0'; qtclist.totalsent++; } tempc[0] = '\0'; replace_spaces(qtclist.qtclines[activefield-3].qtc, tempc); if (trxmode == CWMODE) { sendmessage(tempc); } mvwprintw(qtcwin, activefield, 30, "*"); qtclist.qtclines[activefield-3].flag = 1; // scroll down if not at end of qtclist: if (activefield-3 < *qtccount-1) { wattrset(qtcwin, LINE_NORMAL); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield-3)].qtc); activefield++; wattrset(qtcwin, LINE_CURRINVERTED); mvwprintw(qtcwin, activefield, 4, "%s", qtclist.qtclines[(activefield-3)].qtc); } if (*qtccount > 0 && qtclist.totalsent == *qtccount) { wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CTRL+S to SAVE!"); refreshp(); show_help_msg(6); } } } if (activefield == 2) { if (direction == RECV && strlen(qtcreclist.callsign) > 0 && qtcreclist.serial > 0 && qtcreclist.count > 0 && qtcreclist.confirmed == 0 ) { if (trxmode == CWMODE) { sendmessage(qtc_recv_msgs[1]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[1]); } start_qtc_recording(); activefield++; showfield(activefield); } } if (trxmode == DIGIMODE) { if (direction == SEND && (activefield == 0 || activefield == 2) && qtclist.totalsent == 0) { if (qtc_send_msgs[1][strlen(qtc_send_msgs[1])-1] == 10) { qtc_send_msgs[1][strlen(qtc_send_msgs[1])-1] = '\0'; } tlen = strlen(qtc_send_msgs[1])-5; // len("sr/nr") = 5 char tmess[300], timec[40]; int ql; tmess[0] = '\0'; if (tlen > 0 && strncmp(qtc_send_msgs[1] + tlen, "sr/nr", 5) == 0) { tempc[0] = '\0'; strncpy(tempc, qtc_send_msgs[1], tlen-1); tempc[tlen-1] = '\0'; sprintf(tmess, "%s %d/%d %s %d/%d\n", tempc, qtclist.serial, *qtccount, tempc, qtclist.serial, *qtccount); } timec[0] = '\0'; get_time(); strftime(timec, 40, "%d-%b-%y %H:%M", time_ptr); for(ql = 0; ql < *qtccount; ql++) { qtclist.qtclines[ql].sent = 1; strncpy(qtclist.qtclines[ql].senttime, timec, 15); qtclist.qtclines[ql].senttime[15] = '\0'; qtclist.totalsent++; tempc[0] = '\0'; replace_spaces(qtclist.qtclines[ql].qtc, tempc); strcat(tmess, tempc); mvwprintw(qtcwin, ql+3, 30, "*"); qtclist.qtclines[ql].flag = 1; } keyer_append(tmess); write_keyer(); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CTRL+S to SAVE!"); refreshp(); show_help_msg(6); showfield(activefield); } else { if (direction == SEND) { tempc[0] = '\0'; replace_spaces(qtclist.qtclines[activefield-3].qtc, tempc); sendmessage(tempc); } } } if (activefield == 0) { start_qtc_recording(); } if (activefield < 2) { if (direction == RECV) { activefield++; showfield(activefield-1); showfield(activefield); } } break; // Ctrl-S (^S), save QTC case 19: if (qtccurrdirection == SEND && *qtccount > 0 && qtclist.totalsent == *qtccount) { log_sent_qtc_to_disk(nr_qsos); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "QTC's have been saved!"); prevqtccall[0] = '\0'; qtccallsign[0] = '\0'; refreshp(); sleep(1); x = 27; // close the window } if (qtccurrdirection == RECV && trxmode == DIGIMODE) { qtc_ry_capture = 1; wattr_get(qtcwin, &attributes, &cpair, NULL); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); wattrset(qtcwin, attributes); showfield(activefield); refreshp(); show_rtty_lines(); } break; // Ctrl-E (^E), end capture case 5: if (qtccurrdirection == RECV && trxmode == DIGIMODE) { qtc_ry_capture = 0; wattr_get(qtcwin, &attributes, &cpair, NULL); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); wattrset(qtcwin, attributes); showfield(activefield); refreshp(); } break; // F1...F10 case KEY_F(1) ... KEY_F(10): if (trxmode == CWMODE || trxmode == DIGIMODE) { if(direction == RECV) { sendmessage(qtc_recv_msgs[x - KEY_F(1)]); /* 0-9 */ /* start recording */ if (trxmode == CWMODE && strncmp(qtc_recv_msgs[x - KEY_F(1)], "QRV", 3) == 0) { start_qtc_recording(); } /* stop recording */ if (trxmode == CWMODE && strncmp(qtc_recv_msgs[x - KEY_F(1)], "QSL ALL", 7) == 0 && record_run > -1) { stop_qtc_recording(); } if (trxmode == DIGIMODE && strncmp(qtc_recv_msgs[x - KEY_F(1)], "QRV", 3) == 0) { qtc_ry_capture = 1; wattr_get(qtcwin, &attributes, &cpair, NULL); wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); wattrset(qtcwin, attributes); showfield(activefield); refreshp(); show_rtty_lines(); } } if(direction == SEND && strlen(qtc_send_msgs[x - KEY_F(1)]) > 0) { if (qtc_send_msgs[x - KEY_F(1)][strlen(qtc_send_msgs[x - KEY_F(1)])-1] == '\n') { qtc_send_msgs[x - KEY_F(1)][strlen(qtc_send_msgs[x - KEY_F(1)])-1] = 0; } tlen = strlen(qtc_send_msgs[x - KEY_F(1)])-5; // len("sr/nr") = 5 char tmess[40]; tmess[0] = '\0'; if (tlen > 0 && strncmp(qtc_send_msgs[x - KEY_F(1)] + tlen, "sr/nr", 5) == 0) { tempc[0] = '\0'; strncpy(tempc, qtc_send_msgs[x - KEY_F(1)], tlen-1); tempc[tlen-1] = '\0'; sprintf(tmess, "%s %d/%d ", tempc, qtclist.serial, *qtccount); sendmessage(tmess); } else if ((activefield-3) >= 0) { if (x - KEY_F(1) == 4) { // F5, TIME strncpy(tmess, qtclist.qtclines[activefield-3].qtc, 5); tmess[5] = '\0'; sendmessage(tmess); } if (x - KEY_F(1) == 5) { // F6, CALLSIGN strncpy(tmess, qtclist.qtclines[activefield-3].qtc+5, 13); for(i=12; tmess[i] == ' '; i--) ; tmess[i+1] = ' '; tmess[i+2] = '\0'; sendmessage(tmess); } if (x - KEY_F(1) == 6) { // F7, SERIAL strncpy(tmess, qtclist.qtclines[activefield-3].qtc+20, 4); tmess[4] = ' '; tmess[5] = '\0'; sendmessage(tmess); } } else { sendmessage(qtc_send_msgs[x - KEY_F(1)]); } } } if (trxmode == SSBMODE) { if (direction == RECV) { if (x == KEY_F(2)) { // F2, "QRV" start_qtc_recording(); } if (x == KEY_F(10) && record_run > -1) { // F10, "QSL ALL" stop_qtc_recording(); } play_file(qtc_phrecv_message[x - KEY_F(1)]); } if (direction == SEND) { play_file(qtc_phsend_message[x - KEY_F(1)]); } } break; // , Keypad case KEY_DC: if (DIRCLAUSE) { delete_from_field(0); } if (direction == SEND && activefield > 2 && trxmode != DIGIMODE) { qtclist.qtclines[activefield-3].sent = 0; qtclist.qtclines[activefield-3].flag = 0; wattrset(qtcwin, LINE_CURRNORMAL); mvwprintw(qtcwin, activefield, 30, " "); qtclist.totalsent--; } break; // case 9: if (direction == RECV) { if (trxmode == DIGIMODE) { if (activefield == 32) { activefield = 0; showfield(32); } else { activefield++; showfield(activefield-1); } } else { if ((activefield < 3) || (activefield-3)%3 < 2) { activefield++; showfield(activefield-1); } else { /* (activefield-3)%3 == 2*/ activefield -= 2; showfield(activefield+2); } } showfield(activefield); } if (direction == SEND) { switch (activefield) { case 0: activefield = 2; showfield(0); showfield(2); break; case 2: activefield = 0; showfield(2); showfield(0); break; default: break; } } curpos = 0; break; // Shift case KEY_BTAB: if (direction == RECV) { if (trxmode == DIGIMODE) { if (activefield == 0) { activefield = 32; showfield(0); } else { activefield--; showfield(activefield+1); } } else { if ((activefield > 0 && activefield < 3) || ((activefield-3)%3 > 0)) { activefield--; showfield(activefield+1); } else { /* (activefield-3)%3 == 0) */ activefield += 2; showfield(activefield-2); } } showfield(activefield); } if (direction == SEND) { switch (activefield) { case 0: activefield = 2; showfield(0); showfield(2); break; case 2: activefield = 0; showfield(2); showfield(0); break; default: break; } } curpos = 0; break; // case ' ': if (DIRCLAUSE) { if (direction == RECV) { if (activefield > 2) { if (activefield%3 == 2) { activefield -= 2; showfield(activefield+2); } else { activefield++; showfield(activefield-1); } showfield(activefield); } if (activefield == 2) { if (strlen(qtcreclist.callsign) > 0 && qtcreclist.serial > 0 && qtcreclist.count > 0 && qtcreclist.confirmed == 0 ) { if (trxmode == CWMODE) { sendmessage(qtc_recv_msgs[1]); } if (trxmode == SSBMODE) { play_file(qtc_phrecv_message[1]); } start_qtc_recording(); activefield++; showfield(activefield); } } if (activefield < 2) { if (activefield == 0) { start_qtc_recording(); } activefield++; showfield(activefield-1); showfield(activefield); } } } break; // Numerals case '0' ... '9': if (DIRCLAUSE) { modify_field(x); } break; /*case 65 ... 90: // letters modify_field(x); break;*/ // Convert lower case to upper case case 'a' ... 'z': if (DIRCLAUSE) { modify_field(x-32); } break; // Slash case '/': if (DIRCLAUSE) { modify_field(x); } break; // Query case '?': if (DIRCLAUSE) { modify_field(x); } break; // case KEY_BACKSPACE: if (DIRCLAUSE) { delete_from_field(1); } break; // case KEY_PPAGE: speedup(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2d", GetCWSpeed()); break; // case KEY_NPAGE: speeddown(); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(0, 14, "%2d", GetCWSpeed()); break; // Comma or Ctrl-K (^K), keyboard window case ',': case 11: mvprintw(5, 0, ""); keyer(); x = 0; break; // Ctrl-L (^L), mark callsign for late QTC case 12: if (strlen(g_strstrip(qtccallsign)) > 3) { qtc_inc(g_strstrip(qtccallsign), QTC_LATER); sprintf(tempc, "%s;L\n", qtccallsign); send_lan_message(QTCFLAG, tempc); } break; // Ctrl-N (^N), mark callsign for explicit NO QTC case 14: if (strlen(g_strstrip(qtccallsign)) > 3) { qtc_inc(g_strstrip(qtccallsign), QTC_NO); sprintf(tempc, "%s;N\n", qtccallsign); send_lan_message(QTCFLAG, tempc); } break; // Ctrl-F (^F), fill time fields with first 2 chars case 6: if (activefield > 2) { fill_qtc_times(qtcreclist.qtclines[(activefield-3)/3].time); showfield(activefield); } break; // Ctrl-R (^R), start/stop recording case 18: if (direction == RECV) { if (record_run < 0) { start_qtc_recording(); showfield(activefield); } else { stop_qtc_recording(); } } } refreshp(); if (x != 27) { x = 0; } } hide_panel(qtc_panel); } void showfield(int fidx) { char fieldval[20], filled[20]; int qtcrow, winrow, fi, posidx, i; fieldval[0] = '\0'; posidx = 0; if (fidx == 0) { sprintf(fieldval, "%s", qtccallsign); winrow = 1; posidx = 0; qtc_temp_obj = qtc_get(qtccallsign); put_qtc(); } else if (fidx == 1) { sprintf(fieldval, "%4d", qtcreclist.serial); winrow = 2; posidx = 1; } else if (fidx == 2) { sprintf(fieldval, "%d", *qtccount); winrow = 2; posidx = 2; } else { fi = fidx-3; winrow = (fi/3)+3; qtcrow = winrow-3; switch(fi%3) { case 0: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].time); posidx = 3; break; case 1: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].callsign); posidx = 4; break; case 2: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].serial); posidx = 5; break; } show_status(qtcrow); } curfieldlen = strlen(fieldval); for(i=0; i 0) { curpos--; } recalc_qtclist(); showfield(0); } else if (activefield == 1 && isdigit(pressed)) { sprintf(fieldval, "%d", (qtcreclist.serial)*10); fieldval[strlen(fieldval)-(1+curpos)] = pressed; if (curpos > 0) { curpos--; } if(strlen(fieldval) <= pos[1][2]) { qtcreclist.serial = atoi(fieldval); showfield(1); } } else if (activefield == 2 && isdigit(pressed)) { sprintf(fieldval, "%d", (*qtccount)*10); fieldval[strlen(fieldval)-(1+curpos)] = pressed; if (curpos > 0) { curpos--; } if(strlen(fieldval) <= pos[2][2] && atoi(fieldval) <= 10) { qtc_temp_obj = qtc_get(qtccallsign); if (qtccurrdirection == SEND) { if (*qtccount != atoi(fieldval)) { if ((atoi(fieldval) + (qtc_temp_obj->total)) >= 10) { sprintf(fieldval, "%d", (10 - (qtc_temp_obj->total))); } *qtccount = genqtclist(qtccallsign, atoi(fieldval)); show_sendto_lines(); put_qtc(); } } if (qtccurrdirection == RECV) { if ((atoi(fieldval) + (qtc_temp_obj->total)) >= 10) { sprintf(fieldval, "%d", (10 - (qtc_temp_obj->total))); } *qtccount = atoi(fieldval); } number_fields(); showfield(2); } } else if (activefield >= 3 && activefield <= 32) { fi = activefield-3; winrow = (fi/3)+3; qtcrow = winrow-3; stridx = fi%3; switch(stridx) { case 0: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].time); posidx = 3; break; case 1: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].callsign); posidx = 4; break; case 2: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].serial); posidx = 5; break; } if (pressed == '?') { qtcreclist.qtclines[qtcrow].status = 1; // set incomplete the qtc status show_status(qtcrow); } if ( ( ( (stridx == 0 || stridx == 2) && (isdigit(pressed) || pressed == '?') ) || stridx == 1) && strlen(fieldval) < pos[posidx][2]) { fieldval[strlen(fieldval)-curpos] = pressed; switch(stridx) { case 0: strcpy(qtcreclist.qtclines[qtcrow].time, fieldval); if (qtc_auto_filltime == 1) { fill_qtc_times(fieldval); } break; case 1: strcpy(qtcreclist.qtclines[qtcrow].callsign, fieldval); break; case 2: strcpy(qtcreclist.qtclines[qtcrow].serial, fieldval); break; } if (curpos > 0) { curpos--; } showfield(activefield); if (stridx == 0 && strlen(fieldval) == pos[posidx][2] && activefield <= 32) { // auto TAB if curr field is QTC time, and len is 4 curpos = 0; activefield++; showfield(activefield-1); showfield(activefield); } } } } void delete_from_field(int dir) { char fieldval[16]; int fi, winrow, qtcrow, stridx; fieldval[0] = '\0'; if (activefield == 0) { if (strlen(qtccallsign) > 0) { sprintf(fieldval, "%s", qtccallsign); shift_left(fieldval, dir); strncpy(qtccallsign, fieldval, strlen(fieldval)); qtccallsign[strlen(fieldval)] = '\0'; recalc_qtclist(); showfield(0); } } else if (activefield == 1) { sprintf(fieldval, "%d", qtcreclist.serial); if(strlen(fieldval) > 0) { //sprintf(fieldval, "%d", qtcreclist.serial/10); shift_left(fieldval, dir); qtcreclist.serial = atoi(fieldval); showfield(1); } } else if (activefield == 2) { sprintf(fieldval, "%d", *qtccount); if(strlen(fieldval) > 0) { //sprintf(fieldval, "%d", *qtccount/10); shift_left(fieldval, dir); *qtccount = atoi(fieldval); showfield(2); } } else { fi = activefield-3; winrow = (fi/3)+3; qtcrow = winrow-3; stridx = fi%3; switch(stridx) { case 0: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].time); break; case 1: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].callsign); break; case 2: sprintf(fieldval, "%s", qtcreclist.qtclines[qtcrow].serial); break; } if (strlen(fieldval) > 0) { shift_left(fieldval, dir); fieldval[strlen(fieldval)] = '\0'; switch(stridx) { case 0: strcpy(qtcreclist.qtclines[qtcrow].time, fieldval); break; case 1: strcpy(qtcreclist.qtclines[qtcrow].callsign, fieldval); break; case 2: strcpy(qtcreclist.qtclines[qtcrow].serial, fieldval); break; } showfield(activefield); } } } void shift_left(char * fieldval, int shift) { int i; for(i=strlen(fieldval)-(curpos+shift); i 0 && strlen(qtcreclist.qtclines[currqtc].serial) > 0 ) { mvwprintw(qtcwin, ++j, 36, "Press ENTER to mark as RCVD"); } } else { mvwprintw(qtcwin, ++j, 36, help_rec_msgs[msgidx]); } } if (qtccurrdirection == SEND) { if (msgidx > 2 && msgidx < 6) { msgidx = 3; } mvwprintw(qtcwin, ++j, 36, help_send_msgs[msgidx]); } wattrset(qtcwin, LINE_INVERTED); mvwprintw(qtcwin, ++j, 36, "PgUP/PgDW: QRQ/QRS CTRL-N: NO QTC"); if (qtccurrdirection == RECV) { mvwprintw(qtcwin, ++j, 36, "ENTER: R & next OR AGN CTRL-L: LATER "); } if (qtccurrdirection == SEND) { mvwprintw(qtcwin, ++j, 36, "ENTER: send QTC CTRL-L: LATER "); } for(i=0; i<12 && j < 12; i++) { if (qtccurrdirection == RECV) { if (strlen(qtc_recv_msgs[i]) > 0) { strncpy(buff, qtc_recv_msgs[i], strlen(qtc_recv_msgs[i])-1); buff[strlen(qtc_recv_msgs[i])-1] = '\0'; mvwprintw(qtcwin, ++j, 36, "F%-2d: %s", (i+1), buff); } if (i == 1) { mvwprintw(qtcwin, j-1, 56, "CTRL-F: FILL TIMES"); } if (i == 2) { mvwprintw(qtcwin, j-1, 56, "CTRL-R: RECORD"); } } if (qtccurrdirection == SEND) { if (strlen(qtc_send_msgs[i]) > 0) { strncpy(buff, qtc_send_msgs[i], strlen(qtc_send_msgs[i])-1); buff[strlen(qtc_send_msgs[i])-1] = '\0'; mvwprintw(qtcwin, ++j, 36, "F%-2d: %s", (i+1), buff); } } } if (trxmode == DIGIMODE && qtccurrdirection == RECV) { mvwprintw(qtcwin, ++j, 36, "CTRL-T: Terminal window"); mvwprintw(qtcwin, ++j, 36, "CTRL-S: Start capture"); mvwprintw(qtcwin, ++j, 36, "CTRL-E: End capture"); } } int parse_ry_line(char * line) { int j, i = 0, t = -1, f; char lline[40], *token, *wtoken, ttoken[50], tokens[5][15] = {"", "", "", "", ""}; // 5 members, cause possible callsign will AB/CD1EF/P, which will use 3 char *saveptr1, *saveptr2; char sep[6] = ""; int tactivefield; static int nr_parsed_line = 0; int serial_nr = 0; int maxlength[] = {4, 14, 4}; if (*qtccount == 0 || qtcreclist.serial == 0) { nr_parsed_line = 0; } if ((*qtccount > 0 || qtcreclist.serial > 0) && nr_parsed_line == 0) { nr_parsed_line = 1; } strncpy(lline, line, strlen(line)); tactivefield = activefield; if (nr_parsed_line == 0) { // 1st line: SERIAL/NR wtoken = strtok_r(lline, " ", &saveptr1); while(wtoken != NULL && nr_parsed_line == 0) { serial_nr = 0; strcpy(ttoken, wtoken); sep[0] = '/'; sep[1] = '\0'; token = strtok_r(ttoken, sep, &saveptr2); t = -1; while(token != NULL && t < 2) { t++; strcpy(tokens[t], token); token = strtok_r(NULL, sep, &saveptr2); } f = 0; for(i=0; i<=t; i++) { f = 1; for(j=0; j 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 maxlength[i]) { tokens[i][maxlength[i]] = '\0'; } if (f == 1) { tactivefield = activefield; activefield = (nr_parsed_line*3)+i; showfield(tactivefield); for(j=0;j0)?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() { char boxhead[38]; int prevline; char currline[50] = "", firstline[50] = ""; int x, j; static int actline = 1; int oactivefield, tactivefield; oactivefield = activefield; tactivefield = activefield; show_panel(ry_panel); top_panel(ry_panel); werase(ry_win); show_panel(ry_help_panel); top_panel(ry_help_panel); werase(ry_help_win); sprintf(boxhead, "HELP"); wnicebox(ry_help_win, 0, 0, 3, 73, "HELP"); wbkgd(ry_help_win, (chtype)(A_NORMAL | COLOR_PAIR(QTCRECVWINBG))); wattrset(ry_help_win, LINE_INVERTED); // "1234567890123456789012345678901234567890123456789012345678901234567890123" mvwprintw(ry_help_win, 1, 1, "CTRL-R: Reset lines - CTRL-S: Start capture - CTRL-E: End capture "); mvwprintw(ry_help_win, 2, 1, "ENTER: add current line to QTC - Up/Down: move "); mvwprintw(ry_help_win, 3, 1, "ESC: hide RTTY window "); strcpy(boxhead, "RTTY"); wnicebox(ry_win, 0, 0, 12, 38, boxhead); wattrset(ry_win, LINE_NORMAL); for(j=1; j<13; j++) { mvwprintw(ry_win, j, 1, " "); } refreshp(); if (qtc_ry_capture == 1) { mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); } else { mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); } x = -1; j = 1; prevline = -1; curs_set(0); while(x != 27) { while (x < 1) { usleep(1000); time_update(); if (trxmode == DIGIMODE) { 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 1) { actline--; } else { if (qtc_ry_currline > 0) { actline = qtc_ry_currline; } } wattrset(ry_win, LINE_CURRNORMAL); print_rtty_line(qtc_ry_lines[actline-1], actline); wattrset(ry_win, LINE_NORMAL); break; // Down arrow case KEY_DOWN: wattrset(ry_win, LINE_NORMAL); print_rtty_line(qtc_ry_lines[actline-1], actline); if (actline < qtc_ry_currline) { actline++; } else { actline = 1; } wattrset(ry_win, LINE_CURRNORMAL); print_rtty_line(qtc_ry_lines[actline-1], actline); wattrset(ry_win, LINE_NORMAL); break; // Ctrl-R (^R) case 18: for(j=0; j<12; j++) { qtc_ry_lines[j].content[0] = '\0'; qtc_ry_lines[j].attr = 0; mvwprintw(ry_win, (j+1), 1, " "); } prevline = -1; actline = 1; qtc_ry_currline = 0; qtc_ry_copied = 0; break; // Ctrl-S (^S), start capture case 19: qtc_ry_capture = 1; mvwprintw(qtcwin, 2, 11, "CAPTURE ON "); break; // Ctrl-E (^E), end capture case 5: qtc_ry_capture = 0; mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); break; // , add to qtc case 10: if (qtc_ry_lines[actline-1].attr == 0) { parse_ry_line(qtc_ry_lines[actline-1].content); qtc_ry_lines[actline-1].attr = 1; } wattrset(ry_win, LINE_CURRNORMAL); print_rtty_line(qtc_ry_lines[actline-1], actline); wattrset(ry_win, LINE_NORMAL); break; } refreshp(); if (x != 27) { x = -1; } if (*qtccount > 0 && qtc_ry_copied == qtcreclist.count) { qtc_ry_capture = 0; mvwprintw(qtcwin, 2, 11, "CAPTURE OFF"); } } hide_panel(ry_panel); hide_panel(ry_help_panel); curs_set(1); tactivefield = activefield; activefield = oactivefield; showfield(tactivefield); showfield(oactivefield); } void put_qtc() { char qtcdirstring[3][10] = {"", "Received", "Sent"}; wattrset(qtcwin, LINE_NORMAL); if (qtc_temp_obj->capable == -1 && qtc_temp_obj->total == 0) { mvwprintw(qtcwin, 1, 19, "FLAG: NO QTC"); } else { mvwprintw(qtcwin, 1, 19, "%s %2d QTC", qtcdirstring[qtccurrdirection], qtc_temp_obj->total); } } void replace_spaces(char *src, char *tempc) { int tsp, tdp; tsp = 0; tdp = 0; g_strstrip(src); while(src[tsp] != '\0') { if (src[tsp] != ' ') { tempc[tdp] = src[tsp]; tdp++; } else { if (trxmode == DIGIMODE) { tempc[tdp] = '-'; } else { tempc[tdp] = ' '; } tdp++; while(src[tsp+1] == ' ' || src[tsp+1] == '-') { tsp++; } } tsp++; } tempc[tdp] = '\n'; tdp++; tempc[tdp] = '\0'; } void show_sendto_lines() { int i; wattrset(qtcwin, LINE_INVERTED); for(i=0; i 0 && strcmp(qtccallsign, prevqtccall) != 0) { qtc_temp_obj = qtc_get(qtccallsign); *qtccount = genqtclist(qtccallsign, (10-(qtc_temp_obj->total))); show_sendto_lines(); showfield(2); put_qtc(); } } strncpy(prevqtccall, qtccallsign, strlen(qtccallsign)); prevqtccall[strlen(qtccallsign)] = '\0'; } tlf-1.3.0/src/tlf.h0000644000175000017520000001042513046414310010746 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef TLF_H #define TLF_H #define NO_KEYER 0 #define LPT_KEYER 1 /* deprecated */ #define COM1_KEYER 2 /* deprecated */ #define NET_KEYER 3 #define MFJ1278_KEYER 4 #define ORION_KEYER 5 /* deprecated */ #define K2_KEYER 6 /* deprecated */ #define GMFSK 7 #define FLDIGI 8 #define SINGLE 0 /* single op */ #define MULTI 1 /* multi op / single tx */ #define TELNET_INTERFACE 1 #define TNC_INTERFACE 2 #define NETWORK_INTERFACE 3 #define FIFO_INTERFACE 4 #define NOCLUSTER 0 /* no cluster info */ #define MAP 1 /* show spots */ #define CLUSTER 3 /* full cluster info */ #define FREQWINDOW 4 /* M/M frequencies */ #define SHORTCW 1 /* short cw characters in exchange (e.g. 0 = T, 9 = N) */ #define LONGCW 0 #define SEARCHWINDOW 1 /* searchflg on */ #define CQ 1 /* cqmode on */ #define S_P 0 /* S&P mode on */ #define SEND_DE 1 /* de_mode on */ #define CONTEST 1 /* contest mode on */ #define FILTER_ANN 1 /* filter announcements */ #define FILTER_DX 3 #define FILTER_ALL 0 #define FILTER_TALK 2 #define CWMODE 0 #define SSBMODE 1 #define DIGIMODE 2 #define BAND30 256 #define BAND17 128 #define BAND12 64 #define BAND160 32 #define BAND80 16 #define BAND40 8 #define BAND20 4 #define BAND15 2 #define BAND10 1 #define IsWarcMask(x) ((x == BAND12) || (x == BAND17) || (x == BAND30)) enum { BANDINDEX_160 = 0, BANDINDEX_80, BANDINDEX_40, BANDINDEX_30, BANDINDEX_20, BANDINDEX_17, BANDINDEX_15, BANDINDEX_12, BANDINDEX_10, NBANDS // not yet used everywhere, }; // many places have hardcode 9 // (or 8, being the maximum band index) // extern int inxes[NBANDS]; /*< conversion from BANDINDEX to BAND-mask, see addmult.c */ #define IsWarcIndex(index) ((index == BANDINDEX_12) || \ (index == BANDINDEX_17) || (index == BANDINDEX_30)) /* display color sets */ enum { C_HEADER = 2, C_BORDER, C_INPUT, C_DUPE, C_WINDOW, C_LOG }; #define NORMCOLOR C_INPUT #define ISDUPE 1 #define NODUPE 0 #define MAX_QSOS 20000 /* internal qso array */ #define MAX_DATALINES 1000 /* from ctydb.dat */ #define MAX_CALLS 5000 /* max nr of calls in dupe array */ #define MAX_MULTS 1000 /* max nr of mults in mults array */ #define MAX_SPOTS 200 /* max nr. of spots in spotarray */ #define MAX_CALLMASTER 50000 /* max number of calls in callmaster array */ #define CQ_ZONES 40 #define ITU_ZONES 90 #define MAX_ZONES (ITU_ZONES + 1) /* size of zones array */ #define EDITOR_JOE 0 #define EDITOR_VI 1 #define EDITOR_E3 2 #define EDITOR_MC 3 #define UNIQUECALL_ALL 1 #define UNIQUECALL_BAND 2 #define LOGLINELEN (88) /* Length of logline in logfile (including linefeed) */ #define MINITEST_DEFAULT_PERIOD 600 /* ignore dupe state when MINITEST is set * and last QSO was not in actual period */ /* special message numbers */ enum { SP_TU_MSG = 12, CQ_TU_MSG = 13, SP_CALL_MSG = 24 }; /** worked station * * contains all informations about an already worked station */ struct worked_t { char call[20]; /*< call of the station */ char exchange[12]; /*< the last exchange */ int band; /*< bitmap for worked bands */ int country; /*< its country number */ long qsotime[3][NBANDS]; /*< last timestamp of qso in gmtime for all modes and bands */ }; #define MAXPFXNUMMULT 30 typedef struct { int countrynr; int qsos[10]; } t_pfxnummulti; void refreshp(); #endif /* TLF_H */ tlf-1.3.0/src/callinput.h0000644000175000017520000000171413014014714012154 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 char callinput(void); int play_file(char *audiofile); #endif /* CALLINPUT_H */ tlf-1.3.0/src/get_time.h0000644000175000017520000000165013014014714011755 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.3.0/src/rtty.h0000644000175000017520000000225313014014714011162 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * rtty.h rtty mini terminal * *--------------------------------------------------------------*/ #ifndef RTTY_H #define RTTY_H int init_controller() ; void deinit_controller(); int rx_rtty () ; int show_rtty(void); #endif /* end of include guard: RTTY_H */ tlf-1.3.0/src/score.h0000644000175000017520000000206013014014714011267 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013-2014 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _SCORE_H #define _SCORE_H int score(void); int score2(char *line); int country_found(char prefix[]); #endif /* end of include guard: _SCORE_H */ tlf-1.3.0/src/listmessages.h0000644000175000017520000000171613014014714012666 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.3.0/src/grabspot.c0000644000175000017520000000604413022321330011770 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 "bandmap.h" #include "fldigixmlrpc.h" #include "getctydata.h" #include "searchlog.h" // Includes glib.h #include "showinfo.h" #include "tlf.h" #include "tlf_curses.h" #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include #endif void send_bandswitch(int outfreq); void grabspot(void) { extern char hiscall[]; extern char mode[]; extern int cqmode; extern int trx_control; extern float mem; extern float freq; #ifdef HAVE_LIBHAMLIB extern freq_t outfreq; #else extern int outfreq; #endif spot *data; if (trx_control == 0) return; if (hiscall[0] != '\0') { data = bandmap_lookup( hiscall ); if (data != NULL) { outfreq = data -> freq; outfreq -= fldigi_get_carrier(); send_bandswitch( (int) outfreq ); strcpy( hiscall, data->call ); showinfo( getctydata( hiscall ) ); searchlog( hiscall ); /* if in CQ mode switch to S&P and remember QRG */ if (cqmode == CQ) { cqmode = S_P; strcpy(mode, "S&P "); mem = freq; mvprintw(14, 68, "MEM: %7.1f", mem); } refreshp(); g_free( data->call ); g_free( data ); } } } void grab_next(void) { extern char hiscall[]; extern char mode[]; extern int cqmode; extern int trx_control; extern float mem; extern float freq; #ifdef HAVE_LIBHAMLIB extern freq_t outfreq; #else extern int outfreq; #endif static int dir = 1; /* start scanning up */ spot *data; if (trx_control == 0) return; data = bandmap_next( dir, (unsigned int)(freq*1000) ); if (data == NULL) { /* nothing in that direction */ /* try other one */ dir = 1 - dir; data = bandmap_next( dir, (unsigned int)(freq*1000)); } if (data != NULL) { outfreq = data -> freq; outfreq -= fldigi_get_carrier(); send_bandswitch( (int) outfreq ); strcpy( hiscall, data->call ); showinfo( getctydata( hiscall ) ); searchlog( hiscall ); /* if in CQ mode switch to S&P and remember QRG */ if (cqmode == CQ) { cqmode = S_P; strcpy(mode, "S&P "); mem = freq; mvprintw(14, 68, "MEM: %7.1f", mem); } refreshp(); g_free( data->call ); g_free( data ); } } tlf-1.3.0/src/getctydata.h0000644000175000017520000000202213014014714012303 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 getctydata2(char *checkcall); #endif /* end of include guard: GETCTYDATA_H */ tlf-1.3.0/src/log_to_disk.h0000644000175000017520000000167513014014714012464 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef LOG_TO_DISK_H #define LOG_TO_DISK_H int log_to_disk (int from_lan); #endif /* LOG_TO_DISK_H */ tlf-1.3.0/src/qrb.h0000644000175000017520000000204613014014714010744 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef QRB_H #define QRB_H int qrb(double lon1, double lat1, double lon2, double lat2, double *distance, double *azimuth); int qrb_(double *range, double *bearing); #endif /* end of include guard: QRB_H */ tlf-1.3.0/src/readqtccalls.h0000644000175000017520000000171213014014714012621 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.3.0/src/changefreq.c0000644000175000017520000000561313014014714012261 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" #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include #endif void change_freq (void) { extern float freq; extern int trx_control; #ifdef HAVE_LIBHAMLIB extern freq_t outfreq; #else extern int outfreq; #endif int brkflg = 0; int x; if (trx_control == 0) return; curs_set(0); while (1) { freq_display(); if (outfreq == 0) { x = key_get(); switch (x) { // Up arrow, raise frequency by 100 Hz. case KEY_UP: { #ifdef HAVE_LIBHAMLIB outfreq = (freq_t) (freq * 1000); #else outfreq = (int) (freq * 1000); #endif outfreq += 100; break; } // Down arrow, lower frequency by 100 Hz. case KEY_DOWN: { #ifdef HAVE_LIBHAMLIB outfreq = (freq_t) (freq * 1000); #else outfreq = (int) (freq * 1000); #endif outfreq -= 100; break; } // Right arrow, raise frequency by 20 Hz. case KEY_RIGHT: { #ifdef HAVE_LIBHAMLIB outfreq = (freq_t) (freq * 1000); #else outfreq = (int) (freq * 1000); #endif outfreq += 20; break; } // Left arrow, lower frequency by 20 Hz. case KEY_LEFT: { #ifdef HAVE_LIBHAMLIB outfreq = (freq_t) (freq * 1000); #else outfreq = (int) (freq * 1000); #endif outfreq -= 20; break; } // , raise frequency by 500 Hz. case KEY_PPAGE: { #ifdef HAVE_LIBHAMLIB outfreq = (freq_t) (freq * 1000); #else outfreq = (int) (freq * 1000); #endif outfreq += 500; break; } // , lower frequency by 500 Hz. case KEY_NPAGE: { #ifdef HAVE_LIBHAMLIB outfreq = (freq_t) (freq * 1000); #else outfreq = (int) (freq * 1000); #endif outfreq -= 500; break; } default:{ brkflg = 1; break; } } } if (brkflg == 1) { brkflg = 0; break; } freq_display(); time_update(); usleep(100000); } curs_set(1); } tlf-1.3.0/src/freq_display.h0000644000175000017520000000210413014014714012635 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 int freq_display (void); int print_dot(int y, int x); int print_space(int y, int x); int print_big_number(int number, int y_position, int x_position, int location); #endif /* FREQ_DISPLAY_H */ tlf-1.3.0/src/setcontest.h0000644000175000017520000000165713014014714012362 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SETCONTEST_H #define SETCONTEST_H int setcontest(void); #endif /* SETCONTEST_H */ tlf-1.3.0/src/dxcc.h0000644000175000017520000000255113014014714011102 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 typedef struct { char *pfx; short cq; short itu; short dxcc_index; } prefix_data; typedef struct { char *countryname; short cq; short itu; char *continent; float lat; float lon; float timezone; char *pfx; char starred; } dxcc_data; void prefix_init(void); int prefix_count(void); prefix_data *prefix_by_index(int index); void prefix_add (char *pfxstr); void dxcc_init(void); int dxcc_count(void); dxcc_data *dxcc_by_index(int index); void dxcc_add (char * dxcc_line); #endif /* DXCC_H */ tlf-1.3.0/src/keyer.h0000644000175000017520000000166113014014714011301 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef KEYER_H #define KEYER_H int keyer(void); #endif /* end of include guard: KEYER_H */ tlf-1.3.0/src/recall_exchange.h0000644000175000017520000000170313014014714013263 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.3.0/src/fldigixmlrpc.c0000644000175000017520000002544413046414310012647 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2014-2002-2003 Rein Couperus * 2011, 2014, 2016 Thomas Beierlein * 2014, 2016 Ervin Hegedus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "startmsg.h" #include // need for abs() #include #include // need for va_list... #include #include #ifdef HAVE_CONFIG_H # include #endif #include "fldigixmlrpc.h" #ifdef HAVE_LIBXMLRPC # include # include # include #endif #ifdef HAVE_LIBHAMLIB # include #endif #define NAME "Tlf" #define XMLRPCVERSION "1.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 */ #ifdef HAVE_LIBHAMLIB extern RIG *my_rig; #endif extern char fldigi_url[50]; int fldigi_var_carrier = 0; int fldigi_var_shift_freq = 0; static int initialized = 0; pthread_mutex_t xmlrpc_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 // 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] */ #ifdef HAVE_LIBXMLRPC xmlrpc_env env; xmlrpc_server_info * serverInfoP = NULL; #endif int fldigi_xmlrpc_init() { #ifdef HAVE_LIBXMLRPC 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; return -1; } initialized = 1; #endif return 0; } int fldigi_xmlrpc_cleanup() { #ifdef HAVE_LIBXMLRPC if (serverInfoP != NULL) { xmlrpc_server_info_free(serverInfoP); serverInfoP = NULL; initialized = 0; } #endif return 0; } #ifdef HAVE_LIBXMLRPC int fldigi_xmlrpc_query(xmlrpc_res * local_result, xmlrpc_env * local_env, char * methodname, char * format, ...) { static int connerr = 0; 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; if (initialized == 0) { return -1; } pthread_mutex_lock( &xmlrpc_mutex ); /* 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 */ if (connerr == 1) { if (connerrcnt == 10) { connerr = 0; connerrcnt = 0; } else { connerrcnt++; } } local_result->stringval = NULL; local_result->byteval = NULL; if (connerr == 0) { 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); 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); 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); 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) { pthread_mutex_unlock( &xmlrpc_mutex ); return 0; } else { pthread_mutex_unlock( &xmlrpc_mutex ); return -1; } } #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 } int fldigi_send_text(char * line) { int rc = 0; #ifdef HAVE_LIBXMLRPC xmlrpc_res result; xmlrpc_env env; rc = fldigi_xmlrpc_query(&result, &env, "main.get_trx_state", ""); if (rc != 0) { return -1; } if (strcmp(result.stringval, "TX") == 0) { free((void *)result.stringval); 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); } 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; } int fldigi_get_rx_text(char * line) { #ifdef HAVE_LIBXMLRPC int rc; xmlrpc_res result; xmlrpc_env env; static int lastpos = 0; int textlen = 0; int retval = 0; rc = fldigi_xmlrpc_query(&result, &env, "text.get_rx_length", ""); if (rc != 0) { return 0; } textlen = result.intval; if (lastpos == 0) { lastpos = textlen; } else { if (lastpos < textlen) { rc = fldigi_xmlrpc_query(&result, &env, "text.get_rx", "dd", lastpos, textlen); if (rc != 0) { return 0; } if (result.intval > 0 && result.byteval != NULL) { memcpy(line, result.byteval, result.intval); line[result.intval] = '\0'; retval = result.intval; } if (result.byteval != NULL) { free((void *)result.byteval); } } } lastpos = textlen; return retval; #else return 0; #endif } int fldigi_xmlrpc_get_carrier() { #ifndef HAVE_LIBXMLRPC return 0; #else extern int rigmode; extern int trx_control; int rc; xmlrpc_res result; xmlrpc_env env; int signum; int modeshift; rc = fldigi_xmlrpc_query(&result, &env, "modem.get_carrier", ""); if (rc != 0) { return -1; } fldigi_var_carrier = (int)result.intval; #ifdef HAVE_LIBHAMLIB 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 0; } fldigi_var_shift_freq = CENTER_FREQ-fldigi_var_carrier; } } } if (rigmode != RIG_MODE_NONE) { switch (rigmode) { case RIG_MODE_USB: signum = 1; modeshift = 0; break; case RIG_MODE_LSB: signum = -1; modeshift = 0; break; case RIG_MODE_RTTY: signum = 0; modeshift = -100; // on my TS850, in FSK mode, the QRG is differ by 100Hz up // possible need to check in other rigs modeshift = 0; break; case RIG_MODE_RTTYR: signum = 0; // not checked - I don't have RTTY-REV mode on my RIG modeshift = -100; break; default: signum = 0; // this is the "normal" modeshift = 0; } fldigi_var_carrier = ((signum)*fldigi_var_carrier)+modeshift; } } #endif return 0; #endif } int fldigi_get_carrier() { #ifdef HAVE_LIBXMLRPC return fldigi_var_carrier; #else return 0; #endif } 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.3.0/src/calledit.h0000644000175000017520000000167613014014714011751 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.3.0/src/store_qso.c0000644000175000017520000000304613014014714012172 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.3.0/src/sendqrg.h0000644000175000017520000000213513014014714011622 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 #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include int init_tlf_rig (void); int close_tlf_rig (RIG *my_rig); #endif int sendqrg(void); #endif /* end of include guard: SENDQRG_H */ tlf-1.3.0/src/changepars.h0000644000175000017520000000201513014014714012267 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); int networkinfo(void); int multiplierinfo(void); #endif /* end of include guard: CHANGEPARS_H */ tlf-1.3.0/src/genqtclist.h0000644000175000017520000000175013014014714012336 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.3.0/src/show_help.c0000644000175000017520000000371313014014714012145 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 "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) { int rc; 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(); rc=system("clear"); rc=system(cmdstr); rc=system("clear"); g_free(helpfile); g_free(cmdstr); set_term(mainscreen); clear_display(); return 0; } tlf-1.3.0/src/paccdx.c0000644000175000017520000000723113014014714011416 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" 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; 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.3.0/src/writecabrillo.c0000644000175000017520000007117713046414310013031 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2012-2013 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * write cabrillo file * *--------------------------------------------------------------*/ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include #include #include #include #include "getsummary.h" #include "qtcvars.h" // Includes globalvars.h #include "tlf_curses.h" #include "ui_utils.h" extern char call[]; /* list of different tags for QSO: 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 /* conversion table between tag name in format file and internal tag */ struct tag_conv { char *item_name; enum tag_t tag; } 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 } }; /* describes one item for printing the QSO: line in cabrillo */ struct line_item { enum tag_t tag; /* item type */ int len; /* max. item length */ }; /* 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; float freq; int tx; int qtc_serial; int qtc_number; char * qtc_qtime; char * qtc_qcall; char * qtc_qserial; int qtcdirection; int qsots; }; int is_comment(char *buffer); struct qso_t *get_next_record (FILE *fp); struct qso_t *get_next_qtc_record (FILE *fp, int qtcdirection); void free_qso(struct qso_t *ptr); /** check if logline is only a comment */ int is_comment(char *buf) { if (buf[0] != ';' && strlen(buf) > 60) /** \todo better check */ return 0; else return 1; } /** get next qso record from log * * Read next line from logfile until it is no comment. * Then parse the logline into a new allocated QSO data structure * and return that structure. * * \return ptr to new qso record (or NULL if eof) */ struct qso_t *get_next_record (FILE *fp) { char buffer[160]; char *tmp; char *sp; struct qso_t *ptr; struct tm date_n_time; while ((fgets(buffer, sizeof(buffer), fp)) != NULL) { if (!is_comment(buffer)) { ptr = g_malloc0 (sizeof(struct qso_t)); /* remember whole line */ ptr->logline = g_strdup( buffer ); ptr->qtcdirection = 0; ptr->qsots = 0; /* split buffer into parts for qso_t record and parse * them accordingly */ tmp = strtok_r( buffer, " \t", &sp); /* band */ ptr->band = atoi( tmp ); /* mode */ if ( strcasestr( tmp, "CW")) ptr->mode = CWMODE; else if (strcasestr( tmp, "SSB" )) ptr->mode = SSBMODE; else ptr->mode = DIGIMODE; /* date & time */ memset( &date_n_time, 0, sizeof(struct tm) ); strptime ( strtok_r( NULL, " \t", &sp ), "%d-%b-%y", &date_n_time); strptime ( strtok_r( NULL, " \t", &sp ), "%H:%M", &date_n_time); ptr->year = date_n_time.tm_year + 1900; /* convert to 1968..2067 */ ptr->month = date_n_time.tm_mon + 1; /* tm_mon = 0..11 */ ptr->day = date_n_time.tm_mday; ptr->hour = date_n_time.tm_hour; ptr->min = date_n_time.tm_min; /* qso number */ ptr->qso_nr = atoi( strtok_r( NULL, " \t", &sp ) ); /* his call */ ptr->call = g_strdup( strtok_r( NULL, " \t", &sp ) ); /* RST send and received */ ptr->rst_s = atoi( strtok_r( NULL, " \t", &sp ) ); ptr->rst_r = atoi( strtok_r( NULL, " \t", &sp ) ); /* comment (exchange) */ ptr->comment = g_strndup( buffer + 54, 13 ); /* tx */ ptr->tx = (buffer[79] == '*') ? 1 : 0; /* frequency */ ptr->freq = atof( buffer + 80 ); if ( ( ptr->freq < 1800. ) || ( ptr->freq >= 30000. ) ) { 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; 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; } else { pos = 33; } 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 ); if ( ( ptr->freq < 1800. ) || ( ptr->freq >= 30000. ) ) { ptr->freq = 0.; } return ptr; } return NULL; } /** free qso record pointed to by ptr */ void free_qso(struct qso_t *ptr) { 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(); } /** free cabrillo format description */ void free_cabfmt(struct cabrillo_desc *desc) { int i; 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 ); g_free( desc->name ); g_free( desc ); } /* 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; } /* 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; } char *to_mode[] = { "CW", "PH", "RY" }; /* converts band to frequency of start of band */ float band2freq(int band) { float freq; switch (band) { case 160: freq = 1800.; break; case 80: freq = 3500.; break; case 40: freq = 7000.; break; case 30: freq = 10100.; break; case 20: freq = 14000.; break; case 17: freq = 18068; break; case 15: freq = 21000.; break; case 12: freq = 24890; break; case 10: freq = 28000.; 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[]; int freq; int i; char tmp[80]; struct line_item *item; gchar *token; int item_count; GPtrArray *item_array; freq = (int)qso->freq; if (freq < 1800.) freq = (int)band2freq( qso->band ); if (qso->qtcdirection == 0) { strcpy( buf, "QSO:" ); /* start the line */ item_count = desc->item_count; item_array = desc->item_array; } else { 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", freq ); 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 %-14s %s", qso->qtc_qtime, qso->qtc_qcall, qso->qtc_qserial); add_rpadded( buf, g_strchomp(tmp), item->len ); case NO_ITEM: default: tmp[0] = '\0'; } } strcat( buf, "\n" ); /* closing nl */ } int write_cabrillo(void) { extern char* cabrillo; extern char logfile[]; extern char exchange[]; extern char call[]; char* cab_dfltfile; struct cabrillo_desc *cabdesc; char cabrillo_tmp_name[80]; char buffer[4000] = ""; FILE *fp1, *fp2, *fpqtcrec = NULL, *fpqtcsent = NULL; struct qso_t *qso, *qtcrec = NULL, *qtcsent = NULL; int qsonr, qtcrecnr, qtcsentnr; if (cabrillo == NULL) { info("Missing CABRILLO= keyword (see man page)"); sleep(2); return(1); } /* Try to read cabrillo format first from local directory. * Try also in default data dir if not found. */ cabdesc = read_cabrillo_format("cabrillo.fmt", cabrillo); if (!cabdesc) { cab_dfltfile = g_strconcat(PACKAGE_DATA_DIR, G_DIR_SEPARATOR_S, "cabrillo.fmt", NULL); cabdesc = read_cabrillo_format(cab_dfltfile, cabrillo); g_free(cab_dfltfile); } if (!cabdesc) { info("Cabrillo format specification not found!"); sleep(2); return(2); } /* open logfile and create a cabrillo file */ strcpy(cabrillo_tmp_name, call); g_strstrip(cabrillo_tmp_name); /* drop \n */ strcat(cabrillo_tmp_name, ".cbr"); if ((fp1 = fopen(logfile, "r")) == NULL) { info("Can't open logfile."); sleep(2); free_cabfmt( cabdesc ); return (1); } if (cabdesc->qtc_item_array != NULL) { if (qtcdirection & 1) { fpqtcrec = fopen(QTC_RECV_LOG, "r"); if (fpqtcrec == NULL) { info("Can't open received QTC logfile."); sleep(2); free_cabfmt( cabdesc ); fclose(fp1); return (1); } } if (qtcdirection & 2) { fpqtcsent = fopen(QTC_SENT_LOG, "r"); if (fpqtcsent == NULL) { info("Can't open sent QTC logfile."); sleep(2); free_cabfmt( cabdesc ); fclose(fp1); if (fpqtcrec != NULL) fclose(fpqtcrec); return (1); } } } if ((fp2 = fopen(cabrillo_tmp_name, "w")) == NULL) { info("Can't create cabrillo file."); sleep(2); free_cabfmt( cabdesc ); fclose(fp1); if (fpqtcsent != NULL) fclose(fpqtcsent); if (fpqtcrec != NULL) fclose(fpqtcrec); return (2); } /* ask for exchange and header information */ ask(buffer, "Your exchange (e.g. State, province, age etc... (# if serial number)): "); strncpy(exchange, buffer, 10); getsummary( fp2 ); info("Writing cabrillo file"); qsonr = 0; qtcrecnr = 0; qtcsentnr = 0; while ((qso = get_next_record(fp1))) { qsonr++; prepare_line(qso, cabdesc, buffer); if (strlen(buffer) > 5) { fputs(buffer, fp2); } if (fpqtcrec != NULL && qtcrec == NULL) { qtcrec = get_next_qtc_record(fpqtcrec, RECV); if (qtcrec != NULL) { qtcrecnr = qtcrec->qso_nr; } } if (fpqtcsent != NULL && qtcsent == NULL) { qtcsent = get_next_qtc_record(fpqtcsent, SEND); if (qtcsent != NULL) { qtcsentnr = qtcsent->qso_nr; } } while (qtcrecnr == qsonr || qtcsentnr == qsonr) { if (qtcsent == NULL || (qtcrec != NULL && qtcrec->qsots > qtcsent->qsots)) { prepare_line(qtcrec, cabdesc, buffer); if (strlen(buffer) > 5) { fputs(buffer, fp2); free_qso(qtcrec); } qtcrec = get_next_qtc_record(fpqtcrec, RECV); if (qtcrec != NULL) { qtcrecnr = qtcrec->qso_nr; } else { qtcrecnr = 0; } } else { prepare_line(qtcsent, cabdesc, buffer); if (strlen(buffer) > 5) { fputs(buffer, fp2); free_qso(qtcsent); } qtcsent = get_next_qtc_record(fpqtcsent, SEND); if (qtcsent != NULL) { qtcsentnr = qtcsent->qso_nr; } else { qtcsentnr = 0; } } } free_qso(qso); } fclose(fp1); fputs("END-OF-LOG:\n", fp2); fclose(fp2); if (fpqtcrec != NULL) { fclose(fpqtcrec); } free_cabfmt( cabdesc ); return 0; } /* The ADIF function has been written according ADIF v1.00 specifications as shown on http://www.adif.org LZ3NY */ int write_adif(void) { extern char logfile[]; extern char exchange[]; extern char whichcontest[]; extern int exchange_serial; extern char modem_mode[]; char buf[181] = ""; char buffer[181] = ""; char standardexchange[70] = ""; char adif_tmp_name[40] = ""; char adif_tmp_call[13] = ""; char adif_tmp_str[2] = ""; char adif_year_check[3] = ""; char adif_rcvd_num[16] = ""; char resultat[16]; char adif_tmp_rr[5] = ""; double freq; char freq_buf[16]; int adif_mode_dep = 0; FILE *fp1, *fp2; if ((fp1 = fopen(logfile, "r")) == NULL) { info("Opening logfile not possible."); sleep(2); return (1); } strcpy(adif_tmp_name, whichcontest); strcat(adif_tmp_name, ".adi"); if ((fp2 = fopen(adif_tmp_name, "w")) == NULL) { info("Opening ADIF file not possible."); sleep(2); fclose(fp1); //added by F8CFE return (2); } if (strlen(exchange) > 0) strcpy(standardexchange, exchange); /* in case using write_adif() without write_cabrillo() before * just ask for the needed information */ if ((strlen(standardexchange) == 0) && (exchange_serial != 1)) { ask(buffer, "Your exchange (e.g. State, province, age etc... (# if serial number)): "); strncpy(standardexchange, buffer, 10); } info("Writing ADIF file"); /* write header */ fputs ("################################################################################\n", fp2); fputs ("# ADIF v1.00 data file exported by TLF\n", fp2); fputs ("# according to specifications on http://www.adif.org\n", fp2); fputs("#\n", fp2); fputs ("################################################################################\n", fp2); fputs("1.00\n\n", fp2); while (fgets(buf, sizeof(buf), fp1)) { buffer[0] = '\0'; if ((buf[0] != ';') && ((buf[0] != ' ') || (buf[1] != ' ')) && (buf[0] != '#') && (buf[0] != '\n') && (buf[0] != '\r')) { /* CALLSIGN */ strcat(buffer, ""); strcat(buffer, adif_tmp_call); /* BAND */ if (buf[1] == '6') strcat(buffer, "160M"); else if (buf[1] == '8') strcat(buffer, "80M"); else if (buf[1] == '4') strcat(buffer, "40M"); else if (buf[1] == '3') strcat(buffer, "30M"); else if (buf[1] == '2') strcat(buffer, "20M"); else if (buf[1] == '1' && buf[2] == '5') strcat(buffer, "15M"); else if (buf[1] == '1' && buf[2] == '7') strcat(buffer, "17M"); else if (buf[1] == '1' && buf[2] == '2') strcat(buffer, "12M"); else if (buf[1] == '1' && buf[2] == '0') strcat(buffer, "10M"); /* FREQ if available */ if (strlen(buf) > 81) { freq = atof(buf+80); freq_buf[0] = '\0'; if ((freq > 1799.) && (freq < 10000.)) { sprintf(freq_buf, "%.4f", freq/1000.); } else if (freq >= 10000.) { sprintf(freq_buf, "%.4f", freq/1000.); } 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.3.0/src/qsonr_to_str.c0000644000175000017520000000313313014014714012705 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * i-to-a function for qso number (4 chars) * *--------------------------------------------------------------*/ #include int qsonr_to_str(void) { extern int qsonum; extern char qsonrstr[5]; static int x; static int thousands; static int hundreds; static int tens; static char buffer[5]; x = qsonum; thousands = (x / 1000); x = x - (thousands * 1000); hundreds = (x / 100); x = x - (hundreds * 100); tens = (x / 10); x = x - (tens * 10); buffer[0] = thousands + 48; buffer[1] = hundreds + 48; buffer[2] = tens + 48; buffer[3] = x + 48; buffer[4] = '\0'; strncpy(qsonrstr, buffer, 4); return (0); } tlf-1.3.0/src/addarea.h0000644000175000017520000000165113014014714011542 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.3.0/src/qtcvars.h0000644000175000017520000001002213014014714011634 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 */ #include "globalvars.h" #ifndef QTCVARS_H #define QTCVARS_H #define QTC_SENT_LOG "QTC_sent.log" #define QTC_RECV_LOG "QTC_recv.log" #define QTC_META_LOG "QTC_meta.log" #define QTC_LINES 10 #define QTC_RY_LINE_NR 12 #define RECV 1 // QTC RECV direction #define SEND 2 // QTC SEND direction #define QTC_CAP 4 // QTC CAPABLE station #define QTC_LATER 8 // QTC LATER #define QTC_NO 16 // NO QTC for/from this station typedef struct { int qsoline; // qsos[INDEX] int flag; // flag to mark for send int saved; // indicates QTC has saved int sent; // indicates QTC has sent at least once char qtc[25]; // QTC line by concatenated fields char senttime[16]; // sent time: YY-Mon-dd HH:MM\0 } t_qtcline; typedef struct { int serial; // qtc serial int count; // nr of qtc line in block int marked; // nr of marked to send int totalsent; // nr of sent qtc's char callsign[15]; // current callsign; helps to detect if QSO has dropped t_qtcline qtclines[QTC_LINES]; } t_qtclist; typedef struct { int status; // received, failed, nothing char time[5]; // time of qso char callsign[15]; // callsign char serial[5]; // qso serial int confirmed; // qtc had confirmed char receivedtime[16]; // received time: YY-Mon-dd HH:MM\0 } t_qtcrecline; typedef struct { int serial; int count; int confirmed; int sentcfmall; char callsign[15]; t_qtcrecline qtclines[QTC_LINES]; } t_qtcreclist; typedef struct { char content[50]; int attr; // meta attr: 0 => not nopied, 1 => copied } t_qtc_ry_line; extern int next_qtc_qso; // the next non-sent QSO, which can // be send next as QTC extern int qsoflags_for_qtc[MAX_QSOS]; // array of flag to log lines of QSOs // for QTC's; this is an array of // flags, which marks when a QSO // sent as QTC extern int qtcdirection; // 1: RECV, 2: SEND, 3: BOTH extern t_qtclist qtclist; // the QTC list to send extern t_qtcreclist qtcreclist; // the QTC list which received extern int nr_qtcsent; // number of sent QTC blocks; this used // at the QTC header, eg. 23/10 - here the 23 // is the value of this variable extern t_qtc_ry_line qtc_ry_lines[QTC_RY_LINE_NR]; // when QTC is set, // and mode is RTTY, then the modem // lines stored this array extern int qtc_ry_currline; // current line of QTC RTTY modem extern int qtc_ry_capture; // enable or disable QTC RTTY capturing extern int qtc_ry_copied; // stores the number of copied lines i // from QTC RTTY terminal to QTC window extern int qtcrec_record; // do we record the received QTCs extern char qtcrec_record_command[2][50]; // command to start recording extern char qtcrec_record_command_shutdown[50]; // coomand to stop recording /* arras of CW/Digimode messages for QTC receive and send */ extern char qtc_recv_msgs[12][80]; extern char qtc_send_msgs[12][80]; /* arras of SSB fiel names for QTC receive and send */ extern char qtc_phrecv_message[14][80]; extern char qtc_phsend_message[14][80]; extern char qtc_cap_calls[40]; extern int qtc_auto_filltime; // set QTC auto filltime; when DX sent first // QTC line, the first two digits will be copied to others extern int qtc_recv_lazy; // ignore check of received QTC lines #endif /* end of include guard: QTCVARS_H */ tlf-1.3.0/src/printcall.c0000644000175000017520000000366213014014714012150 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * printcall * *--------------------------------------------------------------*/ #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" void printcall(void) { extern char hiscall[]; extern int miniterm; extern int cqmode; extern int cwstart; int currentterm; attr_t attrib = modify_attr(A_STANDOUT); currentterm = miniterm; miniterm = 0; attron(COLOR_PAIR(C_INPUT) | attrib); mvprintw(12, 29, " "); mvprintw(12, 29, hiscall); if ((cqmode == CQ) && (cwstart > 0)) mvchgat(12, 29 + cwstart, 12 - cwstart, attrib | A_UNDERLINE, C_INPUT, NULL); refreshp(); miniterm = currentterm; } /** highlight the first n characters of the call input field * * \param n number of characters to highlight */ void highlightCall(unsigned int n) { attr_t attrib = modify_attr(A_NORMAL); /* use NORMAL here as normal display uses STANDOUT */ mvchgat(12, 29, n, attrib, C_INPUT, NULL); } tlf-1.3.0/src/edit_last.c0000644000175000017520000001357413022321330012125 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 "globalvars.h" // Includes glib.h and tlf.h #include "logview.h" #include "scroll_log.h" #include "tlf_curses.h" #include "ui_utils.h" #define NR_LINES 5 #define NR_COLS 80 /* highlight the edit line and set the cursor */ static void highlight_line(int row, char *line, int column) { char ln[NR_COLS+1]; g_strlcpy (ln, line, NR_COLS+1); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(7 + row, 0, ln); mvprintw(7 + row, column, ""); refreshp(); } /* reset the highlight state */ static void unhighlight_line(int row, char *line) { char ln[NR_COLS+1]; g_strlcpy (ln, line, NR_COLS+1); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(7 + row, 0, ln); } /* get a copy of selected QSO into the buffer */ void get_qso(int nr, char *buffer) { assert (nr < nr_qsos); strcpy (buffer, qsos[nr]); assert (strlen(buffer) == (LOGLINELEN - 1)); } /* save editbuffer back to log */ void putback_qso (int nr, char *buffer) { FILE *fp; assert (strlen(buffer) == (LOGLINELEN - 1)); assert (nr < nr_qsos); if ((fp = fopen(logfile, "r+")) == NULL) { mvprintw(24, 0, "Can not open logfile..."); refreshp(); sleep(2); }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_backgrnd_process = 1; //(no qso add during edit process) b = 29; /* start with last QSO */ get_qso (nr_qsos - (NR_LINES - editline), editbuffer); while (j != 27 && j != '\n' && j != KEY_ENTER) { highlight_line(editline, editbuffer, b); j = key_get(); // Ctrl-A (^A) or , beginning of line. if (j == 1 || j == KEY_HOME) { b = 1; // Ctrl-E (^E) or , end of line. } else if (j == 5 || j == KEY_END) { b = 77; // , next field. } else if (j == 9) { if (b < 17) b = 17; else if (b < 29) b = 29; else if (b < 54) b = 54; else if (b < 68) b = 68; else if (b < 77) b = 77; else b = 1; // Up arrow, move to previous line. } else if (j == KEY_UP) { if (editline > (NR_LINES - nr_qsos) && (editline > 0)) { unhighlight_line(editline, editbuffer); putback_qso (nr_qsos - (NR_LINES -editline), editbuffer); editline--; get_qso (nr_qsos - (NR_LINES - editline), editbuffer); } else { logview(); j = 27; } // Down arrow, move to next line. } else if (j == KEY_DOWN) { if (editline < NR_LINES-1) { unhighlight_line(editline, editbuffer); putback_qso (nr_qsos - (NR_LINES -editline), editbuffer); editline++; get_qso (nr_qsos - (NR_LINES - editline), editbuffer); } else j = 27; /* escape */ // Left arrow, move cursor one position left. } else if (j == KEY_LEFT) { if (b >= 1) b--; // Right arrow, move cursor one position right. } else if (j == KEY_RIGHT) { if (b < 79) b++; // , positions 0 to 27. } else if ((j == KEY_IC) && (b >= 0) && (b < 28)) { for (k = 28; k > b; k--) editbuffer[k] = editbuffer[k - 1]; editbuffer[b] = ' '; // , positions 29 to 38. } else if ((j == KEY_IC) && (b >= 29) && (b < 39)) { for (k = 39; k > b; k--) editbuffer[k] = editbuffer[k - 1]; editbuffer[b] = ' '; // , positions 54 to 63. } else if ((j == KEY_IC) && (b >= 54) && (b < 64)) { for (k = 64; k > b; k--) editbuffer[k] = editbuffer[k - 1]; editbuffer[b] = ' '; // , positions 68 to 75. } else if ((j == KEY_IC) && (b >= 68) && (b < 76)) { for (k = 76; k > b; k--) editbuffer[k] = editbuffer[k - 1]; editbuffer[b] = ' '; // , positions 1 to 27. } else if ((j == KEY_DC) && (b >= 1) && (b < 28)) { for (k = b; k < 28; k++) editbuffer[k] = editbuffer[k + 1]; // , positions 29 to 38. } else if ((j == KEY_DC) && (b >= 29) && (b < 39)) { for (k = b; k < 39; k++) editbuffer[k] = editbuffer[k + 1]; // , positions 68 to 75. } else if ((j == KEY_DC) && (b >= 68) && (b < 76)) { for (k = b; k < 76; k++) editbuffer[k] = editbuffer[k + 1]; // , positions 54 to 63. } else if ((j == KEY_DC) && (b >= 54) && (b < 64)) { for (k = b; k < 64; k++) editbuffer[k] = editbuffer[k + 1]; } else if (j != 27) { // Promote lower case to upper case. if ((j >= 97) && (j <= 122)) j = j - 32; // Accept most all printable characters. if ((j >= 32) && (j < 97)) { editbuffer[b] = j; if ((b < strlen(editbuffer) - 2) && (b < 80)) b++; } } } unhighlight_line(editline, editbuffer); putback_qso (nr_qsos - (NR_LINES - editline), editbuffer); scroll_log(); stop_backgrnd_process = 0; } tlf-1.3.0/src/makelogline.c0000644000175000017520000002546013046414310012450 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003-2004-2005 Rein Couperus * 2011-2014 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * Makelogline takes care of formatting the log * items *--------------------------------------------------------------*/ #include #include #include #include #include "addpfx.h" #include "dxcc.h" #include "get_time.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "qsonr_to_str.h" #include "score.h" void prepare_fixed_part(void); void prepare_specific_part(void); void fillto(int n); /** Construct a new line to add to the logfile. * * Prepare a logline for storage in log in 'logline4' * * The structure of a logline entry is as follows: * - each logline contains exactly 87 characters followed by a newline. * - it consists of 3 parts * | fixed part (54 chars) | contest dependent part (26 chars) | frequ (8 chars) * * See function definitions below */ void makelogline(void) { extern int trx_control; extern float 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); 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 float freq; static char time_buf[80]; char khz[5] = " 000"; strcpy(logline4, band[bandinx]); if (trxmode == CWMODE) strcat(logline4, "CW "); else if (trxmode == SSBMODE) strcat(logline4, "SSB"); else strcat(logline4, "DIG"); get_time(); strftime(time_buf, 60, " %d-%b-%y %H:%M ", time_ptr); strcat(logline4, time_buf); qsonr_to_str(); if (logfrequency == 1 && trx_control == 1 && ((strcmp(whichcontest, "qso") == 0) || (strcmp(whichcontest, "dxped") == 0))) { sprintf(khz, " %3d", ((int)freq)%1000); // show freq. strcat(logline4, khz); } else { if ((lan_active == 1) && (exchange_serial == 1)) { // show qso nr strcat(logline4, lastqsonr); lastqsonr[0] = '\0'; } else strcat(logline4, qsonrstr); } if (lan_active == 1 && cqwwm2 == 1) { logline4[27] = thisnode; // set node ID... logline4[28] = '\0'; strcat(logline4, " "); } else strcat(logline4, " "); strncat(logline4, hiscall, 15); /* 29 */ fillto(44); if (no_rst) { strcat(logline4, "--- --- "); /* instead of RST */ } else { if ((trxmode == CWMODE) || (trxmode == DIGIMODE)) { his_rst[2] = '9'; my_rst[2] = '9'; } else { his_rst[2] = ' '; my_rst[2] = ' '; } strcat(logline4, his_rst); /* till 54 */ strcat(logline4, " "); strcat(logline4, my_rst); strcat(logline4, " "); } } /** Construct contest dependent part of logline * * - contest dependent part (list may not complete):\n * - QSO mode * \verbatim * 5 6 7 8 * 56789012345678901234567890 * comment................\endverbatim * - wpx * \verbatim * 5 6 7 8 * 56789012345678901234567890 * serialnr pfx pp\endverbatim * pfx - new prefix, pp -points * - cqww * \verbatim * 5 6 7 8 * 56789012345678901234567890 * hiszone pfx zn pp\endverbatim * zn - new zone * - normal contest * \verbatim * 5 6 7 8 * 56789012345678901234567890 * exchange mult pp\endverbatim * mult - multi (cty, province, ...) * - arllss * \verbatim * 5 6 7 8 * 56789012345678901234567890 * nr.. p cc sctn pp\endverbatim * nr - serial exchange, p - precedent, cc - check, sctn - ARRL/RAC section * - arrlfd * 5 6 7 8 * 56789012345678901234567890 * class sctn pp\endverbatim * class - TX count + operator class, sctn - ARRL/RAC section */ void prepare_specific_part(void) { extern int pfxnummultinr; extern int excl_add_veto; int new_pfx; int sr_nr = 0; char grid[7] = ""; int i; if (arrlss == 1) { // ----------------------------arrlss---------------- strncat(logline4, ssexchange, 22); section[0] = '\0'; } else if (serial_section_mult == 1) { //-------------------------serial_section--------------- strncat(logline4, comment, 22); section[0] = '\0'; } else if (serial_grid4_mult == 1) { //-------------------------serial_grid 4 characters--------------- sr_nr = atoi(comment); for (i = 0; i < 11; i++) { if (comment[i] > 64 && comment[i] < 91) { break; } } strncpy(grid, comment + i, 6); grid[6] = '\0'; sprintf(logline4 + 54, "%4.0d %s", sr_nr, grid); section[4] = '\0'; } else if (sectn_mult == 1) { //-------------------------section only--------------- strncat(logline4, section, 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) == 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, mults[shownewmult], 9); shownewmult = -1; } fillto(77); } else if ((dx_arrlsections == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) { logline4[68] = '\0'; if (shownewmult >= 0) { strncat(logline4, mults[shownewmult], 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.3.0/src/logit.c0000644000175000017520000001504613046414310011276 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 "callinput.h" #include "clear_display.h" #include "getexchange.h" #include "keyer.h" #include "log_to_disk.h" #include "printcall.h" #include "recall_exchange.h" #include "searchlog.h" // Includes glib.h #include "sendbuf.h" #include "sendqrg.h" // Sets HAVE_LIBHAMLIB if enabled #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 *ptr) { extern char mode[]; extern int trxmode; extern char hiscall[]; extern int cqmode; extern int contest; extern char message[][80]; extern char ph_message[14][80]; extern char comment[]; extern int cqww; extern char cqzone[]; extern char itustr[]; extern char cq_return[]; extern char sp_return[]; extern int defer_store; extern int stop_backgrnd_process; extern int recall_mult; extern int simulator; extern int simulator_mode; extern int ctcomp; extern int wazmult; extern int itumult; extern int qsonum; extern int exchange_serial; extern char tonestr[]; extern int dxped; extern int sprint_mode; char callreturn = 0; int cury, curx; int qrg_out = 0; strcpy(mode, "Log "); clear_display(); defer_store = 0; stop_backgrnd_process = 0; /* start it up */ while (1) { printcall(); if ((callreturn == 0) && (defer_store == 2)) callreturn = ' '; else callreturn = callinput(); qrg_out = sendqrg(); if (qrg_out == 0) { /* no frequency entered? */ if ((trxmode == CWMODE || trxmode == DIGIMODE) && (callreturn == '\n') && ctcomp == 1) { callreturn = 92; /* '\' */ strcpy(comment, cqzone); } if ((callreturn == 9 || callreturn == 32)) { callreturn = getexchange(); } if (callreturn == '\n' && strlen(hiscall) >= 3) { if ((*comment == '\0') && contest == CONTEST && !ctcomp && !dxped) defer_store = 0; if ((cqmode == CQ) && (contest == CONTEST) && (defer_store == 0)) { /* CQ mode */ if (trxmode == CWMODE || trxmode == DIGIMODE) sendmessage(message[2]); /* send F3 on ENTER */ else { play_file(ph_message[2]); if (exchange_serial == 1) mvprintw(13, 29, "Serial number: %d", qsonum); refreshp(); } if (simulator != 0) { strcpy(tonestr, "700"); write_tone(); if (strstr(hiscall, "?") != NULL) simulator_mode = 3; else simulator_mode = 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) { if (recall_exchange() == -1) { /* get the power */ comment[0] = '\0'; refresh_comment(); } } 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) { if (recall_exchange() == -1) { /* get the mult */ comment[0] = '\0'; refresh_comment(); } } if (trxmode == CWMODE || trxmode == DIGIMODE) sendspcall(); else { play_file(ph_message[5]); if (exchange_serial == 1) mvprintw(13, 29, "Serial number: %d", qsonum); refreshp(); } callreturn = 0; defer_store = 1; } if (defer_store == 1) { defer_store++; callreturn = 0; } else if (defer_store > 1) { if ((cqmode == CQ) && (contest == CONTEST)) { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(cq_return); /* send cq return */ if (simulator != 0) simulator_mode = 1; if (simulator != 0) write_tone(); } else { play_file(ph_message[CQ_TU_MSG]); } defer_store = 0; } if ((cqmode == S_P) && (contest == CONTEST)) { if (trxmode == CWMODE || trxmode == DIGIMODE) { sendmessage(sp_return); /* send S&P return */ } else play_file(ph_message[SP_TU_MSG]); defer_store = 0; } log_to_disk(false); if (sprint_mode == 1) { change_mode(); } HideSearchPanel(); } } if ((callreturn == 92) && (*hiscall != '\0')) { defer_store = 0; log_to_disk(false); if (sprint_mode == 1) { change_mode(); } HideSearchPanel(); } if (callreturn == 11 || callreturn == 44) { /* CTRL K */ getyx(stdscr, cury, curx); mvprintw(5, 0, ""); keyer(); mvprintw(cury, curx, ""); } } else { /* user entered frequency -> clear input field */ hiscall[0] = '\0'; HideSearchPanel(); } } } /** reprint comment field */ void refresh_comment(void) { extern char comment[]; attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(12, 54, " "); mvprintw(12, 54, comment); } void change_mode(void) { extern char mode[]; extern int cqmode; /* switch to other mode */ if (cqmode == CQ) { cqmode = S_P; } else { cqmode = CQ; } /* and show new mode */ attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); if (cqmode == CQ) { mvprintw(0, 2, "Log "); strcpy(mode, "Log "); } else { mvprintw(0, 2, "S&P "); strcpy(mode, "S&P "); } cleanup(); } tlf-1.3.0/src/qtcutil.h0000644000175000017520000000262313014014714011646 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 * line, 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.3.0/src/qsonr_to_str.h0000644000175000017520000000166713014014714012724 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef QSONR_TO_STR_H #define QSONR_TO_STR_H int qsonr_to_str(void); #endif /* QSONR_TO_STR_H */ tlf-1.3.0/src/autocq.h0000644000175000017520000000167213014014714011460 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.3.0/src/cwkeyer.h0000644000175000017520000000415713014014714011636 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CWKEYER_H #define CWKEYER_H #define MACRO_QSONUMBER '#' #define MACRO_CALL '@' #define MACRO_RST '~' #define MACRO_SPEED_UP '+' #define MACRO_SPEED_DOWN '-' #define CWKEYER_IOC_MAGIC 'k' #define CWKEYER_IOCRESET _IO(CWKEYER_IOC_MAGIC, 0) /* * S means "Set" through a ptr, * T means "Tell" directly with the argument value * G means "Get": reply by setting through a pointer * Q means "Query": response is on the return value * X means "eXchange": G and S atomically * H means "sHift": T and Q atomically */ #define CWKEYER_IOCSSPEED _IOW(CWKEYER_IOC_MAGIC, 1, int) #define CWKEYER_IOCSFREQ _IOW(CWKEYER_IOC_MAGIC, 2, int) #define CWKEYER_IOCSMONI _IOW(CWKEYER_IOC_MAGIC, 3, int) #define CWKEYER_IOCSWEIGTH _IOW(CWKEYER_IOC_MAGIC, 4, int) #define CWKEYER_IOCSTXDELAY _IOW(CWKEYER_IOC_MAGIC, 5, int) #define CWKEYER_IOCSFLUSH _IOW(CWKEYER_IOC_MAGIC, 6, void *) #define CWKEYER_IOCSCALL _IOW(CWKEYER_IOC_MAGIC, 7, char[16]) #define CWKEYER_IOCSQSONUMBER _IOW(CWKEYER_IOC_MAGIC, 8, char[16]) #define CWKEYER_IOCSRST _IOW(CWKEYER_IOC_MAGIC, 9, char[16]) #define CWKEYER_IOCSPOSNEGKEY _IOW(CWKEYER_IOC_MAGIC, 10, int) #define CWKEYER_IOC_MAXNR 9 /* * Serial port keyer */ #define CWTONE 0xCC01 #define CWSPEED 0xCC02 #define CWMUTE 0xCC03 #endif /* CWKEYER_H */ tlf-1.3.0/src/prevqso.c0000644000175000017520000000261713014014714011656 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 %d ", last_rst, qsonum-1); for (i=0; i < strlen(str); i++) { str[i] = short_number(str[i]); } sendmessage(str); g_free(str); } tlf-1.3.0/src/showzones.h0000644000175000017520000000166313014014714012223 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.3.0/src/scroll_log.h0000644000175000017520000000166013014014714012320 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.3.0/src/audio.h0000644000175000017520000000234313014014714011261 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.3.0/src/sendbuf.h0000644000175000017520000000202213014014714011600 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); #endif /* SENDBUF_H */ tlf-1.3.0/src/showpxmap.h0000644000175000017520000000165413014014714012212 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SHOWPXMAP_H #define SHOWPXMAP_H int show_mults(void); #endif /* SHOWPXMAP_H */ tlf-1.3.0/src/muf.c0000644000175000017520000002006413014014714010742 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2010-2011 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "dxcc.h" #include "get_time.h" #include "sunup.h" #include "tlf.h" #include "tlf_panel.h" #include "ui_utils.h" #define RADIAN (180.0 / M_PI) extern double r; extern int m; extern struct tm *time_ptr; double yt; double xt; double yr; double xr; int t = 21; double xn, xs, ls, h, ff, x, yn_, q, k, lm, u, a; //FIXME: q should be local variable static double power(man, ex) double man, ex; { return exp(ex * log(man)); } static void interlat() { double yi; /* Intermediate Latitude & Longitude calculations */ q = cos(u / RADIAN) * cos(xt / RADIAN) * sin(k * lm / RADIAN); x = q + sin(xt / RADIAN) * cos(k * lm / RADIAN); xn = atan(x / sqrt(1 - x * x + 1e-12)) * RADIAN; q = cos(k * lm / RADIAN) - sin(xt / RADIAN) * sin(xn / RADIAN); yi = (M_PI_2 - atan(x / sqrt(1 - x * x + 1e-12))) * RADIAN; if (u < 180.0) yi = -yi; yn_ = yt + yi; if (yn_ > 180.0) yn_ -= 360.0; if (yn_ < -180.0) yn_ += 360.0; } static void mini_f2() { double temp, tl, yf, ex, yz, yg, zo, z, mh, xh, wx, sx, ty, fo, sf; yz = yn_; if (yn_ < -160.0) yz = yn_ + 360.0; yg = (20.0 - yz) / 50; temp = 1 - (yg / 7.0); zo = 20.0 * yg / (1 + yg + yg * yg) + 5.0 * (temp * temp); z = xn - zo; tl = t - yn_ / 15.0; if (tl > 24.0) tl -= 24.0; if (tl < 0.0) tl += 24.0; mh = m; if (z <= 0.0) { z = -z; mh += 6; } xh = cos(30.0 * (mh - 6.5) / RADIAN); /* 1 week delay on equinoxes */ sx = (fabs(xh) + xh) / 2.0; /* F-layer local summer variance */ wx = (fabs(xh) - xh) / 2.0; /* F-layer local winter variance */ if (z > 77.5) z = 77.5; ty = tl; if (ty < 5.0) ty = tl + 24.0; yf = (ty - 14.0 - sx * 2.0 + wx * 2.0 - r / 175.0) * (7.0 - sx * 3.0 + wx * 4.0 - r / (150.0 - wx * 75.0)); if (fabs(yf) > 60.0) yf = 60.0; x = 1 + r / (175.0 + sx * 175.0); fo = 6.5 * x * cos(yf / RADIAN) * sqrt(cos((z - sx * 5.0 + wx * 5.0) / RADIAN)); ex = -0.5; temp = cos(a / RADIAN) * 6367.0 / (6367.0 + h); sf = power(1.0 - temp * temp, ex); ff = fo * sf; ff *= 1.15; } static void e_layer() { double temp, fe, se, ex, xz; q = sin(xn / RADIAN) * sin(xs / RADIAN); x = q + cos(xn / RADIAN) * cos(xs / RADIAN) * cos((yn_ - 15.0 * (t - 12.0)) / RADIAN); xz = (M_PI_2 - atan(x / sqrt(1 - x * x + 1e-12))) * RADIAN; if (xz <= 85.0) { ex = 1.0 / 3.0; fe = 3.4 * (1.0 + 0.0016 * r) * power(cos(xz / RADIAN), ex); } else { ex = -0.5; fe = 3.4 * (1.0 + 0.0016 * r) * power(xz - 80.0, ex); } temp = cos(a / RADIAN); se = power(1.0 - (0.965 * temp * temp), ex); //se /= 4; //se += 1; ls = 0.028 * fe * fe * se; // ls *= 15; } int muf(void) { extern double QTH_Lat; extern double QTH_Long; extern double DEST_Lat; extern double DEST_Long; double sunrise; double sundown; extern int mycountrynr; extern int countrynr; extern char lastwwv[]; dxcc_data *dx; int row; static double la, l, mf, lh; static long ve, ho; static int correct; char mycountry[40]; char country[40]; int i; char time_buf[25]; int su, sd, su_min, sd_min, iv; double ab; double n; double td; PANEL *pan; WINDOW *win; win = newwin( 25, 80, 0, 0); pan = new_panel(win); correct = 0; n = 0.0; xt = QTH_Lat; yt = QTH_Long; xr = DEST_Lat; yr = DEST_Long; get_time(); //strftime(time_buf, 60, " %d-%b-%Y %H:%M ", time_ptr); ### bug fix strftime(time_buf, sizeof(time_buf), " %d-%b-%Y %H:%M ", time_ptr); q = sin(xt / RADIAN) * sin(xr / RADIAN); x = q + cos(xt / RADIAN) * cos(xr / RADIAN) * cos(yt / RADIAN - yr / RADIAN); la = (M_PI_2 - atan(x / sqrt(1 - x * x + 1e-12))) * RADIAN; l = 111.1 * la; q = sin(xr / RADIAN) - sin(xt / RADIAN) * cos(la / RADIAN); x = q / cos(xt / RADIAN) / sin(la / RADIAN); u = (M_PI_2 - atan(x / sqrt(1 - x * x + 1e-12))) * RADIAN; if (yt - yr <= 0) u = 360 - u; h = 275 + r / 2; xs = 23.4 * cos(30 * (m - 6.25) / RADIAN); n++; lh = l / n; while (lh > 4000.0) { n++; lh = l / n; } lm = la / n; a = atan((cos(0.5 * lm / RADIAN) - 6367.0 / (h + 6367.0)) / sin(0.5 * lm / RADIAN)) * RADIAN; while (a < 1.5) { n++; lh /= n; while (lh > 4000.0) { n++; lh = l / n; } lm = la / n; a = atan((cos(0.5 * lm / RADIAN) - 6367.0 / (h + 6367.0)) / sin(0.5 * lm / RADIAN)) * RADIAN; } dx = dxcc_by_index(mycountrynr); strncpy(mycountry, dx->countryname, 25); dx = dxcc_by_index(countrynr); strncpy(country, dx->countryname, 25); wclear(win); wattron(win, modify_attr(COLOR_PAIR(C_WINDOW) | A_STANDOUT)); for (i = 0; i < 25; i++) mvwprintw(win, i, 0, " "); mvwprintw(win, 1, 40, "%s", country); mvwprintw(win, 1, 0, " SSN: %3.0f ", r); mvwprintw(win, 3, 40, "Dist : %5ld KM", (long) floor(l + 0.5)); mvwprintw(win, 4, 40, "Azim : %3ld degrees.", (long) floor(u + 0.5)); mvwprintw(win, 5, 40, "F-hops: %2.0f", n); sunup(xr, &sunrise, &sundown); /* calculate local sunup and down at destination lattitude */ /* transform to UTC based on longitude from country description */ td = (yr * 4) / 60 ; /* 4 degree/min */ sunrise += td; sundown += td; if (sunrise >= 24.0) sunrise -= 24.0; else if (sunrise <= 0.0) sunrise += 24.0; if (sundown >= 24.0) sundown -= 24.0; else if (sundown <= 0.0) sundown += 24.0; su = (int) (sunrise); sd = (int) (sundown); su_min = (int) ((sunrise - su) * 60); sd_min = (int) ((sundown - sd) * 60); mvwprintw(win, 3, 0, time_buf); mvwprintw(win, 7, 40, "sun : %02d:%02d-%02d:%02d UTC", su, su_min, sd, sd_min); lastwwv[75] = '\0'; /* cut the bell chars */ if ((strlen(lastwwv) >= 28) && (r != 0)) mvwprintw(win, 10, 40, "Condx: %s", lastwwv + 26); /* print WWV info */ q = 34.0; row = 4; while (q >= 2.0) { if ((row == 7) || (row == 10) || (row == 14) || (row == 17)) { mvwprintw(win, row, 0, "|_________________________|%2.0f", q); } else mvwprintw(win, row, 0, "| |%2.0f", q); /* 25 spaces */ q -= 2.0; row++; } mvwprintw(win, 20, 0, "---------------------------"); /* 27 dashes */ mvwprintw(win, 21, 0, " 0 2 4 6 8 10 14 18 22 H (UTC)"); mvwprintw(win, 4, 30, "MHz"); refreshp(); for (t = 1; t <= 24; t++) { ab = 0.0; k = 0.5; interlat(); mini_f2(); mf = ff; k = n - 0.5; interlat(); mini_f2(); if (ff < mf) mf = ff; iv = (int) floor(mf / 2.0 + 0.5); ve = 21 - (long) floor(mf / 2.0 + 0.5); ho = t + 1; if (ve < 4) ve = 4; mvwprintw(win, (int) ve, (int) ho, "+"); while (k <= n - 0.25) { interlat(); e_layer(); ab += ls; k += 0.5; } ve = 20 - (long) floor(ab + 0.5); if (ve < 4) ve = 4; if (ve > 20) ve = 20; mvwprintw(win, (int) ve, (int) ho, "-"); } mvwprintw(win, 23, 0, " --- Press a key to continue --- "); refreshp(); (void)key_get(); hide_panel(pan); del_panel(pan); delwin(win); return (0); } tlf-1.3.0/src/logit.h0000644000175000017520000000172213014014714011276 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.3.0/src/netkeyer.c0000644000175000017520000001034013014014714011775 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 "netkeyer.h" #include "tlf.h" #include "tlf_curses.h" int netkeyer_port = 6789; char netkeyer_hostaddress[16] = "127.0.0.1"; static int socket_descriptor; static struct sockaddr_in address; int netkeyer_init(void) { /* Translate a host name to IP address */ struct hostent *hostbyname; hostbyname = gethostbyname(netkeyer_hostaddress); if (hostbyname == NULL) { perror("gethostbyname failed"); return -1; } /* Initialize socket address structure for Internet Protocols The address comes from the datastructure returned by gethostbyname() */ bzero(&address, sizeof(address)); /* empty data structure */ address.sin_family = AF_INET; memcpy(&address.sin_addr.s_addr, hostbyname->h_addr, sizeof(address.sin_addr.s_addr)); address.sin_port = htons(netkeyer_port); /* Create a UDP socket */ socket_descriptor = socket(AF_INET, SOCK_DGRAM, 0); if (socket_descriptor == -1) { perror("socket call failed"); return -1; } return 0; } /*-------------------------end netkeyer_init---------------*/ int netkeyer_close(void) { int close_rc; close_rc = close(socket_descriptor); if (close_rc == -1) { perror("close call failed"); return -1; } return 0; } /*-------------------------end netkeyer_close---------------*/ #define BUFSIZE 81 #define CMD(x) { do { buf[0] = '\e'; \ buf[1] = x; \ buf[2] = 0; } while(0); } int netkeyer(int cw_op, char *cwmessage) { char buf[BUFSIZE] = ""; ssize_t sendto_rc = 0; int add_message = 0; switch (cw_op) { case K_RESET: CMD('0'); // reset: 0 break; case K_MESSAGE: buf[0] = 0; add_message = 1; // play cw message break; case K_SPEED: CMD('2'); // speed: 2NN add_message = 1; break; case K_TONE: CMD('3'); // tone: 3NN add_message = 1; break; case K_ABORT: CMD('4'); // message abort: 4 break; case K_STOP: CMD('5'); // keyer daemon stop: 5 break; case K_WORDMODE: CMD('6'); // non-interruptible: 6 break; case K_WEIGHT: CMD('7'); // set weight: 7NN add_message = 1; break; case K_DEVICE: CMD('8'); // set device: 8NN add_message = 1; break; case K_PTT: CMD('a'); // PTT on/off: aNN add_message = 1; break; case K_SET14: CMD('b'); // set pin 14 of lp port: bNN add_message = 1; break; case K_TUNE: CMD('c'); // tune: cNN add_message = 1; break; case K_TOD: CMD('d'); // set Turn On Delay (TXDELAY): dNN add_message = 1; break; case K_SWITCH: CMD('e'); // set band switch output: eNN add_message = 1; break; case K_SIDETONE: CMD('f'); // set sidetone output to sound card: fs buf[2] = 's'; break; case K_STVOLUME: CMD('g'); // set sound card output volume: gNN add_message = 1; break; default: return 0; } if (add_message) { g_strlcat(buf, cwmessage, BUFSIZE); } sendto_rc = sendto(socket_descriptor, buf, strlen(buf) + 1, 0, (struct sockaddr *) &address, sizeof(address)); if (sendto_rc == -1) { mvprintw(24, 0, "Keyer send failed...!"); refreshp(); sleep(2); return -1; } return 0; } tlf-1.3.0/src/getmessages.h0000644000175000017520000000166313014014714012473 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 int getmessages(void); #endif /* GETMESSAGES_H */ tlf-1.3.0/src/stoptx.c0000644000175000017520000000302013046414310011506 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 "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) { mvprintw(24,0, "keyer not active; switching to SSB"); trxmode = SSBMODE; clear_display(); } } } else { return(1); } return(0); } tlf-1.3.0/src/searchcallarray.c0000644000175000017520000000315013014014714013310 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.3.0/src/readcalls.h0000644000175000017520000000202613014014714012110 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedüs - HA2OS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef READCALLS_H #define READCALLS_H int readcalls(void); int synclog(char *synclogfile); #endif /* READCALLS_H */ tlf-1.3.0/src/gettxinfo.c0000644000175000017520000001664413046414310012174 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 "fldigixmlrpc.h" #include "gettxinfo.h" #include "tlf.h" #include "tlf_curses.h" #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include #ifdef RIG_PASSBAND_NOCHANGE #define TLF_DEFAULT_PASSBAND RIG_PASSBAND_NOCHANGE #else #define TLF_DEFAULT_PASSBAND RIG_PASSBAND_NORMAL #endif #endif int gettxinfo(void) { #ifdef HAVE_LIBHAMLIB extern RIG *my_rig; extern freq_t outfreq; extern int cw_bandwidth; extern int trxmode; extern int rigmode; extern int digikeyer; #else extern int outfreq; #endif extern float freq; extern int bandinx; extern float bandfrequency[]; extern int trx_control; extern unsigned char rigptt; #ifdef HAVE_LIBHAMLIB freq_t rigfreq; vfo_t vfo; pbwidth_t bwidth; int retval; int retvalmode; #else float rigfreq; #endif static int oldbandinx; static int fldigi_carrier; static int fldigi_shift_freq; void send_bandswitch(int freq); if (trx_control != 1) return (0); #ifdef HAVE_LIBHAMLIB /* 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 */ } #endif if (outfreq == 0) { rigfreq = 0.0; #ifdef HAVE_LIBHAMLIB // Code for Hamlib interface 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, (rmode_t *)&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 (0); } #endif if (rigfreq >= 1800000.0) { freq = rigfreq / 1000.0; /* kHz */ } switch ((int)freq) { case 1800 ... 2000:{ bandinx = 0; break; } case 3500 ... 4000:{ bandinx = 1; break; } case 7000 ... 7300:{ bandinx = 2; break; } case 10100 ... 10150:{ bandinx = 3; break; } case 14000 ... 14350:{ bandinx = 4; break; } case 18068 ... 18168:{ bandinx = 5; break; } case 21000 ... 21450:{ bandinx = 6; break; } case 24890 ... 24990:{ bandinx = 7; break; } case 28000 ... 29700:{ bandinx = 8; break; } default: bandinx = NBANDS; /* out of band */ } if (bandinx != NBANDS) bandfrequency[bandinx] = freq; if (bandinx != oldbandinx) // band change on trx { oldbandinx = bandinx; send_bandswitch((int) freq); #ifdef HAVE_LIBHAMLIB // Code for Hamlib interface if (trxmode == SSBMODE) { if (freq < 14000.0) retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_LSB, TLF_DEFAULT_PASSBAND); else retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_USB, TLF_DEFAULT_PASSBAND); if (retval != RIG_OK) { mvprintw(24, 0, "Problem with rig link: set mode!\n"); refreshp(); sleep(1); } } else if (trxmode == DIGIMODE) { if ((rigmode & (RIG_MODE_LSB | RIG_MODE_USB | RIG_MODE_RTTY | RIG_MODE_RTTYR)) != rigmode) { retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_LSB, TLF_DEFAULT_PASSBAND); if (retval != RIG_OK) { mvprintw(24, 0, "Problem with rig link: set mode!\n"); refreshp(); sleep(1); } } } else { // retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_CW, TLF_DEFAULT_PASSBAND); if (cw_bandwidth == 0) { retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_CW, TLF_DEFAULT_PASSBAND); } else { retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_CW, cw_bandwidth); } if (retval != RIG_OK) { mvprintw(24, 0, "Problem with rig link: set mode!\n"); refreshp(); sleep(1); } } #endif } } else if (outfreq == SETCWMODE) { #ifdef HAVE_LIBHAMLIB // Code for Hamlib interface if (cw_bandwidth == 0) { retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_CW, TLF_DEFAULT_PASSBAND); } else { retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_CW, cw_bandwidth); } if (retval != 0) { mvprintw(24, 0, "Problem with rig link!\n"); refreshp(); sleep(1); } #endif outfreq = 0; } else if (outfreq == SETSSBMODE) { #ifdef HAVE_LIBHAMLIB // Code for Hamlib interface if (freq > 13999.9) retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_USB, TLF_DEFAULT_PASSBAND); else retval = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_LSB, TLF_DEFAULT_PASSBAND); if (retval != RIG_OK) { mvprintw(24, 0, "Problem with rig link!\n"); refreshp(); sleep(1); } #endif outfreq = 0; } else if (outfreq == RESETRIT) { #ifdef HAVE_LIBHAMLIB // Code for Hamlib interface retval = rig_set_rit(my_rig, RIG_VFO_CURR, 0); if (retval != RIG_OK) { mvprintw(24, 0, "Problem with rig link!\n"); refreshp(); sleep(1); } #endif outfreq = 0; } else { #ifdef HAVE_LIBHAMLIB // Code for Hamlib interface retval = rig_set_freq(my_rig, RIG_VFO_CURR, outfreq); if (retval != RIG_OK) { mvprintw(24, 0, "Problem with rig link: set frequency!\n"); refreshp(); sleep(1); } if (retval != 0) { mvprintw(24, 0, "Problem with rig link: set frequency!\n"); refreshp(); sleep(1); } #endif outfreq = 0; } return (0); } tlf-1.3.0/src/speedupndown.c0000644000175000017520000000540013046414310012664 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 "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, "%2d", GetCWSpeed()); if (cwkeyer == NET_KEYER) { retval = netkeyer(K_SPEED, buff); if (retval < 0) { mvprintw(24, 0, "keyer not active"); // trxmode = SSBMODE; sleep(1); 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); } int setweight(int weight) { // write weight to netkeyer 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) { mvprintw(24, 0, "keyer not active ?"); sleep(1); clear_display(); } } return (0); } tlf-1.3.0/src/qtc_log.h0000644000175000017520000000217213014014714011610 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 int log_recv_qtc_to_disk (int qtcnr); int log_sent_qtc_to_disk (int qtcnr); void store_recv_qtc (char * loglineptr); void store_sent_qtc (char * loglineptr); #endif /* end of include guard: LOG_RECV_QTC_TO_DISK_H */ tlf-1.3.0/src/dxcc.c0000644000175000017520000000667313014014714011106 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 "dxcc.h" GPtrArray *dxcc; GPtrArray *prefix; void prefix_free(gpointer data) { prefix_data *pfx_data = data; g_free(pfx_data -> pfx); 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 */ int prefix_count(void) { return prefix->len; } /* give pointer to prefix struct at 'index' */ prefix_data *prefix_by_index(int index) { 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); 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 */ int dxcc_count(void) { return dxcc->len; } /* give pointer to dxcc_data struct at 'index' */ dxcc_data *dxcc_by_index(int index) { 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 = 1; } else { new_dxcc -> pfx = g_strdup(split[7]); new_dxcc -> starred = 0; } g_ptr_array_add (dxcc, new_dxcc); g_strfreev (split); } tlf-1.3.0/src/edit_last.h0000644000175000017520000000175613014014714012137 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.3.0/src/addmult.h0000644000175000017520000000206413014014714011612 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 int addmult( void); int addmult2( void); 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.3.0/src/main.c0000644000175000017520000006271213046414310011106 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 #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" // Sets HAVE_LIBHAMLIB if enabled #include "set_tone.h" #include "splitscreen.h" #include "startmsg.h" #include "tlf_panel.h" #include "ui_utils.h" #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBHAMLIB # include #endif SCREEN *mainscreen; extern int lan_active; char pr_hostaddress[48] = "131.155.192.179"; char *config_file = NULL; int portnum = 0; int use_rxvt = 0; int use_xterm = 0; int tlfcolors[8][2] = { {COLOR_BLACK, COLOR_WHITE}, {COLOR_GREEN, COLOR_YELLOW}, {COLOR_WHITE, COLOR_RED}, {COLOR_CYAN, COLOR_WHITE}, {COLOR_WHITE, COLOR_BLACK}, {COLOR_WHITE, COLOR_MAGENTA}, {COLOR_BLUE, COLOR_YELLOW}, {COLOR_WHITE, COLOR_BLACK} }; int debugflag = 0; int editor = EDITOR_JOE; int tune_val = 0; int use_bandoutput = 0; int no_arrows = 0; int bandindexarray[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int cqwwm2 = 0; /* predefined contests */ int cqww = 0; int wpx = 0; int dxped = 0; int sprint = 0; int arrldx_usa = 0; int arrl_fd = 0; int arrlss = 0; int pacc_pa_flg = 0; int stewperry_flg = 0; int focm = 0; int sprint_mode = 0; int minitest = 0; /**< if set, length of minitest period in seconds */ int unique_call_multi = 0; /* do we count calls as multiplier */ int universal = 0; int addcallarea; int pfxmult = 0; int pfxmultab = 0; int exc_cont = 0; int manise80; int other_flg; int one_point = 0; int two_point = 0; int three_point = 0; int ssbpoints; int cwpoints; int lowband_point_mult = 0; int sc_sidetone; char sc_volume[4] = ""; /* LZ3NY mods */ int my_country_points = -1; int my_cont_points = -1; int dx_cont_points = -1; char countrylist[255][6]; int countrylist_only = 0; int countrylist_points = -1; char continent_multiplier_list[7][3]; // SA, NA, EU, AF, AS and OC int continentlist_points = -1; int continentlist_only = 0; int exclude_multilist_type = 0; int mult_side = 0; /* end LZ3NY mods */ int portable_x2 = 0; int recall_mult = 0; int exchange_serial = 0; int wysiwyg_once = 0; int wysiwyg_multi = 0; int country_mult = 0; float fixedmult = 0.0; int sectn_mult = 0; int dx_arrlsections = 0; int serial_section_mult = 0; int serial_or_section = 0; /* exchange is serial OR section, like HA-DX */ int serial_grid4_mult = 0; int qso_once = 0; int addcallarea_once = 0; int noleadingzeros; int ctcomp = 0; int isdupe = 0; // 0 if nodupe -- for auto qso b4 (LZ3NY) int nob4 = 0; // allow auto b4 int ignoredupe = 0; int noautocq = 0; int 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 trxmode = CWMODE; int rigmode = 0; /* RIG_MODE_NONE in hamlib/rig.h, but if hamlib not compiled, then no dependecy */ int mixedmode = 0; char his_rst[4] = "599"; char my_rst[4] = "599"; char last_rst[4] = "599"; /* Report for last QSO */ /* TODO Maybe we can use the following */ int mults_per_band = 1; /* mults count per band */ int shortqsonr = LONGCW; /* 1 = short cw char in exchange */ int cluster = NOCLUSTER; /* 0 = OFF, 1 = FOLLOW, 2 = spots 3 = all */ int clusterlog = 0; /* clusterlog on/off */ int searchflg = 0; /* 1 = display search window */ int show_time = 0; int cqmode = CQ; /* 1 = CQ 0 = S&P */ int demode = 0; /* 1 = send DE before s&p call */ int contest = 0; /* 0 = General, 1 = contest */ int announcefilter = FILTER_ANN; /* filter cluster announcements */ int showscore_flag = 0; /* show score window */ int change_rst = 0; char exchange[40]; char whichcontest[40] = "qso"; int defer_store = 0; char call[20]; char logfile[120] = "general.log"; char *cabrillo = NULL; /**< Name of the cabrillo format definition */ char synclogfile[120]; char markerfile[120] = ""; int xplanet = 0; unsigned char rigptt = 0; /**< Bitmask for Hamlib CAT PTT * bit 0 set: CAT PTT wanted--RIGPTT in logcfg.dat (set in parse_logcfg) * bit 1 set: CAT PTT available--from rig caps (set in sendqrg) * bit 2 set: PTT active (set/unset in gettxinfo) * bit 3 set: PTT On (set/unset in callinput) * bit 4 set: PTT Off (set/unset in callinput) */ char 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 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[9][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[9]; 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 cwkeyer = NO_KEYER; int digikeyer = NO_KEYER; char keyer_device[10] = ""; // ttyS0, ttyS1, lp0-2 for net_keyer char controllerport[80] = "/dev/ttyS0"; // for GMFSK or MFJ-1278 char rttyoutput[120]; // where to GMFSK digimode output int txdelay = 0; int weight = 0; char weightbuf[4]; char tonestr[5] = "600"; int cqdelay = 8; int k_tune; int k_pin14; int k_ptt; int miniterm = 0; /* is miniterm for digimode active? */ char modem_mode[8]; int commentfield = 0; /* 1 if we are in comment/excahnge input */ /*-------------------------------------packet-------------------------------*/ char spot_ptr[MAX_SPOTS][82]; /* Array of cluster spot lines */ int nr_of_spots; /* Anzahl Lines in spot_ptr array */ char lastwwv[120] = ""; int packetinterface = 0; int fdSertnc = 0; int tncport = 1; char tncportname[40]; char rigconf[80]; int tnc_serial_rate = 2400; char clusterlogin[80] = ""; int bmautoadd = 0; int bmautograb = 0; /*-------------------------------------rigctl-------------------------------*/ #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; /*----------------------------------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 */ char mults[MAX_MULTS][12]; int mult_bands[MAX_MULTS]; int multarray_nr = 0; GPtrArray *mults_possible; 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; 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; float freq; float mem; int logfrequency = 0; int rit; int trx_control = 0; int showfreq = 0; float bandfrequency[9] = { 1830.0, 3525.0, 7010.0, 10105.0, 14025.0, 18070.0, 21025.0, 24900.0, 28025.0 }; char headerline[81] = " 1=CQ 2=DE 3=RST 4=73 5=HIS 6=MY 7=B4 8=AGN 9=? \n"; char backgrnd_str[81] = " "; char logline_edit[5][LOGLINELEN+1]; char terminal1[88] = ""; char terminal2[88] = ""; char terminal3[88] = ""; char terminal4[88] = ""; char termbuf[88] = ""; int termbufcount = 0; double QTH_Lat = 51.; double QTH_Long = -7.; double DEST_Lat = 51.; double DEST_Long = 1.; double r = 50; int m = 1; char hiscountry[40]; int this_second; int stop_backgrnd_process = 1; /* dont start until we know what we are doing */ int wazmult = 0; /* to add the ability of WAZ zones to be multiplier */ int itumult = 0; /* to add the ability of ITU zones to be multiplier */ char itustr[3]; int nopacket = 0; /* set if tlf is called with '-n' */ int no_trx_control = 0; /* set if tlf is called with '-r' */ int bandweight_points[NBANDS] = {1, 1, 1, 1, 1, 1, 1, 1, 1}; int bandweight_multis[NBANDS] = {1, 1, 1, 1, 1, 1, 1, 1, 1}; pthread_t background_thread; static struct termios oldt, newt; /** parse program options */ void parse_options(int argc, char *argv[]) { while ((argc > 1) && (argv[1][0] == '-')) { switch (argv[1][1]) { /* verbose option */ case 'f': if (strlen(argv[1] + 2) > 0) { if ((*(argv[1] + 2) == '~') && (*(argv[1] + 3) == '/')) { /* tilde expansion */ config_file = g_strconcat( g_get_home_dir(), argv[1] + 3, NULL); } else { config_file = g_strdup(argv[1] + 2); } } break; case 's': if (strlen(argv[1] + 2) > 0) strcpy(synclogfile, argv[1] + 2); break; case 'd': // debug rigctl debugflag = 1; break; case 'v': // verbose startup verbose = 1; break; case 'V': // output version printf("Version: tlf-%s\n", VERSION); exit(0); break; case 'n': // disable packet nopacket = 1; break; case 'r': no_trx_control = 1; // disable radio control break; default: printf("Use: tlf [-v] Verbose\n"); printf(" [-V] Version\n"); printf(" [-f] Configuration file\n"); printf(" [-d] Debug mode\n"); printf(" [-h] This message\n"); printf(" [-n] Start without cluster hookup\n"); printf(" [-r] Start without radio control\n"); exit(0); break; } --argc; ++argv; } } /** 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) { use_xterm = 1; use_rxvt = 1; } else putenv("TERM=rxvt"); /*or going to native console linux driver */ /* 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); } showmsg(""); } if (!has_colors() || (start_color() == ERR)) { showmsg("Sorry, terminal does not support color"); showmsg("Try TERM=linux or use a text console !!"); sleep(2); 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\n\n"); return EXIT_FAILURE; } if (multlist == 1) { showmsg("reading multiplier data "); if (strlen(multsfile) == 0) { mvprintw(9, 0, "No multiplier file specified, exiting.. !!\n"); refreshp(); sleep(5); exit(1); } } 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() { #ifdef HAVE_LIBHAMLIB // Code for hamlib interface int status; showmsg("HAMLIB compiled in"); 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); } } #else showmsg("No Hamlib compiled in!"); trx_control = 0; showmsg( "Disabling rig control!"); sleep(1); #endif /* HAVE_LIBHAMLIB */ } 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, "%2d", 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(); } } /** 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); } // commented out for the moment as it will segfault if called twice // cleanup_telnet(); if (trxmode == CWMODE && cwkeyer == NET_KEYER) netkeyer_close(); else deinit_controller(); #ifdef HAVE_LIBHAMLIB if (my_rig) { close_tlf_rig(my_rig); } #endif #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 tlfversion[80] = ""; parse_options(argc, argv); 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'; strcpy(sp_return, message[SP_TU_MSG]); strcpy(cq_return, message[CQ_TU_MSG]); sprintf(tlfversion, " Welcome to tlf-%s by PA0R!!" , VERSION); showmsg(tlfversion); showmsg(""); total = 0; if (databases_load() == EXIT_FAILURE) { sleep(2); endwin(); exit(EXIT_FAILURE); } /* now setup colors */ ui_color_init(); // if (strlen(synclogfile) > 0) // synclog(synclogfile); hamlib_init(); fldigi_init(); lan_init(); keyer_init(); clear(); mvprintw(0, 0, " Welcome to tlf-%s by PA0R!!\n\n" , VERSION); refreshp(); checkparameters(); /* check .paras file */ getmessages(); /* read .paras file */ packet_init(); getwwv(); /* get the latest wwv info from packet */ scroll_log(); /* read the last 5 log lines and set the qso number */ nr_qsos = readcalls(); /* read the logfile for score and dupe */ clear_display(); /* tidy up the display */ attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; 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(NULL); return 0; } tlf-1.3.0/src/sendbuf.c0000644000175000017520000002150113046414310011577 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 "displayit.h" #include "lancode.h" #include "netkeyer.h" #include "tlf.h" #include "tlf_curses.h" #include "write_keyer.h" #define BUFSIZE 81 char buffer[BUFSIZE]; /** shorten CW numbers */ char short_number( char c) { extern int shortqsonr; if (shortqsonr == SHORTCW) { if (c == '9') return 'N'; if (c == '0') return 'T'; } return c; } /* * Replace occurences of 'what' in 'buf' by 'rep'. * The amount of bytes assigned to 'buf' is 'size'. * This includes the terminating \0, i.e. max length of 'buf' is 'size'-1 * Replacements are done in-place, no other memory area than 'buf' is used. * Maximum 'count' replacements are done. * */ void replace_n(char *buf, int size, const char *what, const char *rep, int count) { int len = strlen(buf); if (len > size - 1) { // input string already too long, don't touch it return; } int len_what = strlen(what); if (len_what == 0) { return; } int len_rep = strlen(rep); int len_overlap = (len_rep < len_what ? len_rep : len_what); buf[size - 1] = 0; // ensure proper termination char *p = buf; char *q; while (count-- > 0 && (q = strstr(p, what)) != NULL) { char *dst; const char *src; int n, overflow = 0; strncpy(q, rep, len_overlap); if (len_rep < len_what) { // // ....WHATabcdef // ....REPTabcdef // q^ || // dst^| // src^ // // ....REPabcdef // // shift rest down dst = q + len_overlap; src = q + len_what; n = buf + len + 1 - src; // include terminating \0 memmove(dst, src, n); // result gets shorter len -= len_what - len_rep; } else if (len_rep > len_what) { // // ....Wabcdef // ....Rabcdef // q^| | // src^ | // dst^ // // ....R__abcdef // ....REPabcdef // // shift rest up dst = q + len_rep; src = q + len_overlap; n = buf + len + 1 - src; // include terminating \0 if (dst + n - 1 >= buf + size - 1) { // would be longer than (size-1), shift only a part n = buf + size - 1 - dst; if (n <= 0) { // even a part wont fit; no operation n = 0; overflow = 1; } } memmove(dst, src, n); // copy tail of rep dst = q + len_overlap; src = rep + len_overlap; n = len_rep - len_what; if (dst + n - 1 >= buf + size - 1) { // only a part of rep fits n = buf + size - 1 - dst; overflow = 1; } memcpy(dst, src, n); if (overflow) { break; } // result gets longer len += len_rep - len_what; } p = q + len_rep; } } void replace_1(char *buf, int size, const char *what, const char *rep) { replace_n(buf, size, what, rep, 1); } void replace_all(char *buf, int size, const char *what, const char *rep) { replace_n(buf, size, what, rep, 999); } void ExpandMacro(void) { extern char call[20]; extern char hiscall[20]; extern char hiscall_sent[]; extern char his_rst[]; extern char qsonrstr[5]; extern char comment[]; extern char lastqsonr[]; extern int early_started; extern int noleadingzeros; extern int lan_active; extern int exchange_serial; int i; static char comstr[BUFSIZE] = ""; static char qsonroutput[5] = ""; static char rst_out[4] = ""; strcpy(comstr, call); comstr[strlen(call) - 1] = '\0'; // skip trailing \n replace_all(buffer, BUFSIZE, "%", comstr); /* mycall */ if (NULL != strstr(buffer, "@")) { char *p = hiscall + strlen(hiscall_sent); if (strlen(hiscall_sent) != 0) { hiscall_sent[0] = '\0'; early_started = 0; // sending_call = 0; } replace_1(buffer, BUFSIZE, "@", p); /* his call, 1st occurence */ replace_all(buffer, BUFSIZE, "@", hiscall); /* his call, further occurrences */ } strncpy(rst_out, his_rst, 4); rst_out[1] = short_number(rst_out[1]); rst_out[2] = short_number(rst_out[2]); rst_out[3] = '\0'; replace_all(buffer, BUFSIZE, "[", rst_out); /* his RST */ if (NULL != strstr(buffer, "#")) { int leading_zeros = 0; int lead = 1; for (i = 0; i <= 4; i++) { if (lead && qsonrstr[i] == '0') { ++leading_zeros; } else { lead = 0; } qsonroutput[i] = short_number(qsonrstr[i]); } qsonroutput[4] = '\0'; if (noleadingzeros != 1 && leading_zeros > 1) { leading_zeros = 1; } replace_all(buffer, BUFSIZE, "#", qsonroutput + leading_zeros); /* serial nr */ if ((lan_active == 1) && (exchange_serial == 1)) { strncpy(lastqsonr, qsonrstr, 5); send_lan_message(INCQSONUM, qsonrstr); } } replace_all(buffer, BUFSIZE, "!", comment); } void sendbuf(void) { extern int trxmode; extern int searchflg; extern char termbuf[]; extern char backgrnd_str[]; extern int cwkeyer; extern int digikeyer; extern int simulator; extern int simulator_mode; extern int sending_call; static char printlinebuffer[82] = ""; printlinebuffer[0] = '\0'; if ((trxmode == CWMODE && cwkeyer != NO_KEYER ) || (trxmode == DIGIMODE && digikeyer != NO_KEYER)) { ExpandMacro(); if ((strlen(buffer) + strlen(termbuf)) < 80) { if (simulator == 0) strcat(termbuf, buffer); // if (sending_call == 1) { // strcat (termbuf, " "); // sending_call = 0; // } } if (simulator == 0) strncat(printlinebuffer, termbuf, strlen(termbuf)); else strncat(printlinebuffer, termbuf, strlen(termbuf)); if (searchflg == 0 && simulator == 0) strncat(printlinebuffer, backgrnd_str, 80 - strlen(printlinebuffer)); else { int len = 40 - (int)strlen(printlinebuffer); if (len > 0) { strncat(printlinebuffer, backgrnd_str, len); } if (strlen(printlinebuffer) > 45) { printlinebuffer[42] = '.'; printlinebuffer[43] = '.'; printlinebuffer[44] = '.'; printlinebuffer[45] = '\0'; } } attron(COLOR_PAIR(C_LOG) | A_STANDOUT); if ((simulator_mode == 0)) { mvprintw(5, 0, printlinebuffer); refreshp(); } refreshp(); if (trxmode == DIGIMODE) { if (digikeyer == MFJ1278_KEYER) { int i = 0; for (i = 0; i < strlen(buffer); i++) if (buffer[i] == '\n') buffer[i] = 13; for (i = 0; i < strlen(buffer); i++) if (buffer[i] == 123) buffer[i] = 20; /* ctrl-t */ for (i = 0; i < strlen(buffer); i++) if (buffer[i] == 125) buffer[i] = 18; /* ctrl-r */ } keyer_append(buffer); } if (trxmode == CWMODE) { if (cwkeyer == MFJ1278_KEYER) { int i = 0; for (i = 0; i < strlen(buffer); i++) if (buffer[i] == '\n') buffer[i] = 13; } keyer_append(buffer); } if (simulator == 0) { if (sending_call == 0) displayit(); refreshp(); } buffer[0] = '\0'; } } /** \brief send message * * Send the message via CW or DIGI mode, but only if not empty * \param msg message to send */ void sendmessage(const char *msg) { if (strlen(msg) != 0) { g_strlcpy(buffer, msg, sizeof(buffer)); sendbuf(); } } tlf-1.3.0/src/messagechange.h0000644000175000017520000000167513014014714012761 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef MESSAGECHANGE_H #define MESSAGECHANGE_H int message_change(int x); #endif /* MESSAGECHANGE_H */ tlf-1.3.0/src/keyer.c0000644000175000017520000001610413046414310011273 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2003 Rein Couperus * 2012-2014 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /*------------------------------------------------------------------------ CW keyboard routine ------------------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "netkeyer.h" #include "nicebox.h" // Includes curses.h #include "sendbuf.h" #include "speedupndown.h" #include "stoptx.h" #include "tlf.h" #include "tlf_panel.h" #include "ui_utils.h" #include "write_keyer.h" /* size and position of keyer window */ #define KEYER_LINE_WIDTH 60 #define KEYER_WIN_WIDTH (KEYER_LINE_WIDTH+2) #define KEYER_WIN_HEIGHT 3 #define KEYER_X (80-KEYER_WIN_WIDTH)/2 #define KEYER_Y 7 void mfj1278_control(int x); int keyer(void) { extern int cqmode; extern char mode[20]; extern char message[][80]; extern int trxmode; extern int cwkeyer; extern int digikeyer; extern int weight; WINDOW *win = NULL; PANEL *panel = NULL; int x = 0, j = 0; int cury, curx; char nkbuffer[2]; char keyerstring[KEYER_LINE_WIDTH+1] = ""; int keyerstringpos = 0; char weightbuf[15]; const char txcontrolstring[2] = { 20, '\0' }; // ^t const char rxcontrolstring[2] = { 18, '\0' }; // ^r const char crcontrolstring[2] = { 13, '\0' }; // cr const char ctl_c_controlstring[2] = { 92, '\0' }; // '\' if ((trxmode == CWMODE && cwkeyer == NO_KEYER) || (trxmode == DIGIMODE && digikeyer == NO_KEYER)) /* no keyer present */ return 1; strcpy(mode, "Keyboard"); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); if (panel == NULL) { win = newwin(KEYER_WIN_HEIGHT, KEYER_WIN_WIDTH, KEYER_Y, KEYER_Y ); if (win == NULL) return 1; panel = new_panel(win); if (panel == NULL) { delwin(win); return 1; } } show_panel(panel); werase(win); wnicebox(win, 0, 0, 1, KEYER_LINE_WIDTH, "CW Keyer"); if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { /* switch to tx */ keyer_append(txcontrolstring); } while (1) { wattron(win, COLOR_PAIR(C_LOG) | A_STANDOUT); wmove (win, 1, 1); for (j = 0; j < KEYER_LINE_WIDTH; j++) { waddch (win, ' '); } mvwprintw(win, 1, 1, "%s", keyerstring); refreshp(); x = key_get(); // Send space instead of double quote. if (x == 34) { x = 32; } // Send space instead of newline or return. if (x == '\n' || x == KEY_ENTER) x = 32; // , Ctrl-K (^K), Alt-k (M-k) if (x == 27 || x == 11 || x == 235) { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { /* switch back to rx */ keyer_append(rxcontrolstring); } else { stoptx(); } break; } // Promote lower case to upper case. if (x > 96 && x < 123) x = x - 32; if (x > 9 && x < 91) { /* drop all other control char... */ if (x > 31 || x == 10) { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { mfj1278_control(x); } else if (cwkeyer == NET_KEYER) { nkbuffer[0] = x; // 1 char at the time ! nkbuffer[1] = '\0'; keyer_append(nkbuffer); } /* if display field is full move text one left */ if (keyerstringpos == KEYER_LINE_WIDTH - 1) { for (j = 0; j < KEYER_LINE_WIDTH - 1; j++) { keyerstring[j] = keyerstring[j + 1]; } keyerstringpos--; } /* add new character for display */ keyerstring[keyerstringpos++] = x; keyerstring[keyerstringpos] = '\0'; } } else { switch (x) { case '\n': case 13: case KEY_ENTER: { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(crcontrolstring); } break; } case 123: /* { */ { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(txcontrolstring); } break; } case 125: /* } */ { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(rxcontrolstring); } break; } case 92: /* \ */ { if (cwkeyer == MFJ1278_KEYER || digikeyer == MFJ1278_KEYER) { sendmessage(ctl_c_controlstring); } break; } case 247: // Alt-w, set weight { mvprintw(1, 0, "Weight= "); mvprintw(1, 7, ""); refreshp(); echo(); getnstr(weightbuf, 2); noecho(); weight = atoi(weightbuf); netkeyer(K_WEIGHT, weightbuf); break; } // , increase CW speed. case KEY_PPAGE: { speedup(); clear_display(); break; } // , decrease CW speed. case KEY_NPAGE: { speeddown(); clear_display(); break; } case KEY_F(1): { getyx(stdscr, cury, curx); mvprintw(5, 0, ""); sendmessage(message[0]); /* F1 */ mvprintw(cury, curx, ""); break; } case KEY_F(2): { sendmessage(message[1]); /* F2 */ break; } case KEY_F(3): { sendmessage(message[2]); /* F3 */ break; } case KEY_F(4): { sendmessage(message[3]); /* F4 */ break; } case KEY_F(5): { sendmessage(message[4]); /* F5 */ break; } case KEY_F(6): { sendmessage(message[5]); /* F6 */ break; } case KEY_F(7): { sendmessage(message[6]); /* F7 */ break; } case KEY_F(8): { sendmessage(message[7]); /* F8 */ break; } case KEY_F(9): { sendmessage(message[8]); /* F9 */ break; } case KEY_F(10): { sendmessage(message[9]); /* F10 */ break; } case KEY_F(11): { sendmessage(message[10]); /* F11 */ break; } case KEY_F(12): { sendmessage(message[11]); /* F12 */ break; } default: x = x; } } } hide_panel(panel); if (cqmode == CQ) strcpy(mode, "Log "); else strcpy(mode, "S&P "); clear_display(); return 0; /* show end of keyer routine */ } /* ---------------- convert input for 1278 ctrl -----------------------*/ void mfj1278_control(int x) { extern int trxmode; char buffer[2]; if (trxmode == CWMODE || trxmode == DIGIMODE) { if (trxmode == DIGIMODE) { if (x == 10) x = 13; // tnc needs CR instead of LF } buffer[0] = x; // 1 char at the time ! buffer[1] = '\0'; keyer_append(buffer); } } tlf-1.3.0/src/showinfo.h0000644000175000017520000000167613014014714012024 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 int showinfo(int x); #endif /* end of include guard: SHOWINFO_H */ tlf-1.3.0/src/addcall.c0000644000175000017520000003000313046414310011532 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 * *--------------------------------------------------------------*/ #define _XOPEN_SOURCE #include #include #include #include #include "addcall.h" #include "addmult.h" #include "addpfx.h" #include "getctydata.h" #include "getpx.h" #include "paccdx.h" #include "searchcallarray.h" #include "tlf.h" #include "zone_nr.h" #include "get_time.h" int excl_add_veto; /* This variable helps to handle in other modules, that station is multiplier or not */ /* In addcall2(), this variable helps to handle the excluded multipliers, which came from lan_logline * the Tlf scoring logic is totally completely different in local and LAN source * the addcall() function doesn't increment the band_score[] array, that maintains the score() * function. Here, the addcall2() is need to separate the points and multipliers. * This variable is used in readcall() too. */ int addcall(void) { extern char hiscall[]; extern int nr_worked; extern struct worked_t worked[]; extern char comment[]; extern int cqww; extern int bandinx; extern int countries[MAX_DATALINES]; extern int zones[]; extern int countryscore[]; extern int addcty; extern int zonescore[]; extern int addzone; extern int countrynr; extern int arrldx_usa; extern int pacc_pa_flg; extern int universal; extern int country_mult; extern int w_cty; extern int ve_cty; extern int dx_arrlsections; extern int wazmult; extern int itumult; extern char pxstr[]; extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern int addcallarea; extern int continentlist_only; extern char continent_multiplier_list[7][3]; extern char continent[]; extern int exclude_multilist_type; extern char countrylist[][6]; extern int trxmode; extern struct tm *time_ptr; static int found = 0; static int i, j, z = 0; static int add_ok; int pfxnumcntidx = -1; int pxnr = 0; excl_add_veto = 0; get_time(); found = searchcallarray(hiscall); if (found == -1) { i = nr_worked; g_strlcpy(worked[i].call, hiscall, 20); nr_worked++; } else i = found; worked[i].qsotime[trxmode][bandinx] = (long)mktime(time_ptr); j = getctydata(hiscall); worked[i].country = j; if (strlen(comment) >= 1) { /* remember last exchange */ strcpy(worked[i].exchange, comment); if ((cqww == 1) || (wazmult == 1) || (itumult == 1)) { /* if (strlen(zone_fix) > 1) { z = zone_nr(zone_fix); } else z = zone_nr(zone_export); */ z = zone_nr(comment); } } add_ok = 1; /* look if certain calls are excluded */ if ((arrldx_usa == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) add_ok = 0; if ((country_mult == 1) && (universal == 1)) add_ok = 1; if ((dx_arrlsections == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) add_ok = 0; if (pacc_pa_flg == 1) add_ok = pacc_pa(); // if pfx number as multiplier if (pfxnummultinr > 0) { getpx(hiscall); pxnr = pxstr[strlen(pxstr) - 1] - 48; getctydata(hiscall); int pfxi = 0; while(pfxi < pfxnummultinr) { if (pfxnummulti[pfxi].countrynr == countrynr) { pfxnumcntidx = pfxi; break; } pfxi++; } } if (continentlist_only == 1 || (continentlist_only == 0 && exclude_multilist_type == 1)) { int ci = 0; int cont_in_list = 0; while(strlen(continent_multiplier_list[ci]) != 0) { if(strcmp(continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if ((cont_in_list == 0 && continentlist_only == 1) || (cont_in_list == 1 && continentlist_only == 0 && exclude_multilist_type == 1)) { add_ok = 0; addcty = 0; addcallarea = 0; excl_add_veto = 1; } } if (exclude_multilist_type == 2) { int ci = 0; while (strlen(countrylist[ci]) != 0) { if (getctydata(countrylist[ci]) == j) { add_ok = 0; addcty = 0; addcallarea = 0; excl_add_veto = 1; } ci++; } } if (add_ok == 1) { worked[i].band |= inxes[bandinx]; /* worked on this band */ switch (bandinx) { case BANDINDEX_160: case BANDINDEX_80: case BANDINDEX_40: case BANDINDEX_20: case BANDINDEX_15: case BANDINDEX_10: if (pfxnumcntidx < 0) { if (j != 0 && (countries[j] & inxes[bandinx]) == 0) { countries[j] |= inxes[bandinx]; countryscore[bandinx]++; addcty = j; } if (z != 0 && (zones[z] & inxes[bandinx]) == 0) { zones[z] |= inxes[bandinx]; zonescore[bandinx]++; addzone = z; } } else { if ((pfxnummulti[pfxnumcntidx].qsos[pxnr] & inxes[bandinx]) == 0) { pfxnummulti[pfxnumcntidx].qsos[pxnr] |= inxes[bandinx]; addcallarea = 1; countryscore[bandinx]++; zonescore[bandinx]++; } } break; case BANDINDEX_12: case BANDINDEX_17: case BANDINDEX_30: if (j != 0 && (countries[j] & inxes[bandinx]) == 0) { countries[j] |= inxes[bandinx]; addcty = j; } if (z != 0 && (zones[z] & inxes[bandinx]) == 0) { zones[z] |= inxes[bandinx]; addzone = z; } break; } } addmult(); /* for wysiwyg */ return (j); } /* -------------------------for network qso's-----------------------------------------*/ int addcall2(void) { extern int nr_worked; extern struct worked_t worked[]; extern int cqww; extern int countries[MAX_DATALINES]; extern int zones[]; extern int countryscore[]; extern int zonescore[]; extern int pacc_pa_flg; extern int universal; extern int country_mult; extern char lan_logline[]; extern int band_score[]; extern int wpx; extern int wazmult; extern int itumult; extern char cqzone[]; extern char pxstr[]; extern t_pfxnummulti pfxnummulti[MAXPFXNUMMULT]; extern int pfxnummultinr; extern int addcallarea; extern int countrynr; extern int continentlist_only; extern char continent_multiplier_list[7][3]; extern char continent[]; extern int pfxmultab; extern int exclude_multilist_type; extern char countrylist[][6]; extern int trxmode; int found = 0; int i, j, p, z = 0; int add_ok; char lancopy[6]; char zonebuffer[4]; char hiscall[20]; char comment[40]; int bandinx; int k; 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); for (k = 0; k < strlen(hiscall); k++) { // terminate string at first space if (hiscall[k] == ' ') { hiscall[k] = '\0'; break; } } g_strlcpy(comment, lan_logline + 54, 31); for (k = 0; k < strlen(comment); k++) { // terminate string at first space if (comment[k] == ' ') { comment[k] = '\0'; break; } } found = searchcallarray(hiscall); if (found == -1) { i = nr_worked; g_strlcpy(worked[i].call, hiscall, 20); nr_worked++; } else i = found; g_strlcpy(zonebuffer, cqzone, 4); //hack: getctydata should not change zone! j = getctydata2(hiscall); g_strlcpy(cqzone, zonebuffer, 4); //idem.... bandinx = get_band(lan_logline); /* calculate QSO timestamp from lan_logline */ 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) && ((countrynr == w_cty) || (countrynr == ve_cty))) add_ok = 0; */ if ((country_mult == 1) && (universal == 1)) add_ok = 1; 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; getctydata(hiscall); int pfxi = 0; while(pfxi < pfxnummultinr) { if (pfxnummulti[pfxi].countrynr == countrynr) { pfxnumcntidx = pfxi; break; } pfxi++; } add_ok = 1; } if (continentlist_only == 1 || (continentlist_only == 0 && exclude_multilist_type == 1)) { int ci = 0; int cont_in_list = 0; while(strlen(continent_multiplier_list[ci]) != 0) { if(strcmp(continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if ((cont_in_list == 0 && continentlist_only == 1) || (cont_in_list == 1 && continentlist_only == 0 && exclude_multilist_type == 1)) { excl_add_veto = 1; } } if (exclude_multilist_type == 2) { int ci = 0; while (strlen(countrylist[ci]) != 0) { if (getctydata(countrylist[ci]) == j) { excl_add_veto = 1; } ci++; } } if (add_ok == 1) { bandinx = get_band(lan_logline); band_score[bandinx]++; worked[i].band |= inxes[bandinx]; /* worked on this band */ if (excl_add_veto == 0) { switch (bandinx) { case BANDINDEX_160: case BANDINDEX_80: case BANDINDEX_40: case BANDINDEX_20: case BANDINDEX_15: case BANDINDEX_10: if (pfxnumcntidx < 0) { if (j != 0 && (countries[j] & inxes[bandinx]) == 0) { countries[j] |= inxes[bandinx]; countryscore[bandinx]++; // addcty = j; } if (z != 0 && (zones[z] & inxes[bandinx]) == 0) { zones[z] |= inxes[bandinx]; zonescore[bandinx]++; // addzone = z; } } else { if ((pfxnummulti[pfxnumcntidx].qsos[pxnr] & BAND10) == 0) { pfxnummulti[pfxnumcntidx].qsos[pxnr] |= inxes[bandinx]; addcallarea = 1; zonescore[bandinx]++; countryscore[bandinx]++; } } break; case BANDINDEX_30: case BANDINDEX_17: case BANDINDEX_12: if (j != 0 && (countries[j] & inxes[bandinx]) == 0) { countries[j] |= inxes[bandinx]; } if (z != 0 && (zones[z] & inxes[bandinx]) == 0) { zones[z] |= inxes[bandinx]; } break; } } } if (wpx == 1 || pfxmultab == 1) { if (lan_logline[68] != ' ') { strcpy(lancopy, " "); /* max 5 char for prefix written in makelogline */ strncpy(lancopy, lan_logline + 68, 5); for (p = 0; p <= 5; p++) { // terminate at first space if (lancopy[p] == ' ') { lancopy[p] = '\0'; break; } } if (pfxmultab == 1) { bandinx = get_band(lan_logline); } add_pfx(lancopy); } } addmult2(); /* for wysiwyg from LAN */ return (j); } int get_band(char *logline) { int j = 0; switch (atoi(logline)) { case 160: j = BANDINDEX_160; break; case 80: j = BANDINDEX_80; break; case 40: j = BANDINDEX_40; break; case 20: j = BANDINDEX_20; break; case 15: j = BANDINDEX_15; break; case 10: j = BANDINDEX_10; break; case 12: j = BANDINDEX_12; break; case 17: j = BANDINDEX_17; break; case 30: j = BANDINDEX_30; break; } return (j); } tlf-1.3.0/src/splitscreen.h0000644000175000017520000000352313014014714012514 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 #define SERVICE "telnet" #define ALLOWCOLOR has_colors() #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); void addtext(char *s); int init_packet(void) ; int cleanup_telnet (void); int packet(void); int receive_packet(void); int send_cluster(void); #endif /* end of include guard: SPLITSCREEN_H */ tlf-1.3.0/src/locator2longlat.h0000644000175000017520000000367513014014714013277 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.3.0/src/checkparameters.h0000644000175000017520000000170313014014714013320 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.3.0/src/sockserv.c0000644000175000017520000003210113022321330011777 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 "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 (*newin) (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] = newin; 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 { if (sockbuf[ifds].whole_lines) { *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] + 256 * (a[2] + 256 * (a[1] + 256 * 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.3.0/src/lancode.h0000644000175000017520000000256713014014714011575 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 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 *buffer) ; int send_lan_message(int opcode , char *message); int talk(void); int send_freq(float freq); int send_time(void) ; #endif /* LANCODE_H */ tlf-1.3.0/src/getpx.c0000644000175000017520000000543713046414310011312 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.3.0/src/cw_utils.h0000644000175000017520000000210313014014714012003 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.3.0/src/show_help.h0000644000175000017520000000200313014014714012141 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.3.0/src/clusterinfo.c0000644000175000017520000002312413014014714012510 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 "get_time.h" #include "getctydata.h" #include "lancode.h" #include "nicebox.h" // Includes curses.h #include "printcall.h" #include "tlf.h" #include "ui_utils.h" #define MAXMINUTES 30 extern int bandinx; extern pthread_mutex_t spot_ptr_mutex; char *bandmap[MAX_SPOTS]; int spotarray[MAX_SPOTS]; /* Array of indices into spot_ptr */ int loadbandmap(void); int getclusterinfo(void); void clusterinfo(void) { extern int cluster; extern char backgrnd_str[]; extern float freq; extern char band[9][4]; extern int bandinx; extern int trx_control; extern char spot_ptr[MAX_SPOTS][82]; extern float 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 == 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]); } 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 <= 22; j++) { mvprintw(j, 1, "%s", inputbuffer); } /** \todo minimize lock time */ pthread_mutex_lock (&spot_ptr_mutex); getclusterinfo(); k = 0; while (spotarray[k] > -1) { k++; if (k > (MAX_SPOTS - 2)) break; } k -= 9; if (k < 0) k = -1; for (j = 15; j <= 22; j++) { if (k < (MAX_SPOTS - 2) && 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 { mvprintw(24, 0, "error in packet table"); } if (strlen(inputbuffer) > 14) { mvprintw(j, 1, "%s", inputbuffer); } } } pthread_mutex_unlock (&spot_ptr_mutex); nicebox(14, 0, 8, 78, "Cluster"); refreshp(); } printcall(); } /* ----------------------------------------------------*/ int loadbandmap(void) { extern int cluster; 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]; float spot_freq[MAX_SPOTS]; char thisline[83]; char spotcall[20]; char spottime[6]; char spotline[38]; char callcopy[81]; FILE *fp; char marker_out[60]; char color[20]; int lon; int lat; int zz; int nofile = 0; int iswarc = 0; char xplanetmsg[160]; dxcc_data *dx; for (i = 0; i < MAX_SPOTS; i++) { if (bandmap[i] != NULL) { g_free(bandmap[i]); bandmap[i] = NULL; } spot_age[i] = 0; spot_freq[i] = 0.; } j = 0; i = 0; get_time(); sysminutes = 60 * time_ptr->tm_hour + time_ptr->tm_min; /* parse log of cluster output and find DX announcements. * Copy them to bandmap array and find spot_age and spot_freq */ pthread_mutex_lock (&spot_ptr_mutex); for (j = 0; j < nr_of_spots; j++) { strncpy ( thisline, spot_ptr[j], 82); if (strncmp(thisline, "DX de ", 6) == 0) { g_strlcpy(spotcall, thisline + 26, 6); strncpy(spottime, thisline + 70, 4); // how old? spottime[4] = spottime[3]; spottime[3] = spottime[2]; spottime[2] = ':'; spottime[5] = '\0'; spotminutes = 60 * atoi(spottime) + atoi(spottime + 3); timediff = (sysminutes - spotminutes) + 5; if (timediff + 30 < 0) timediff += 1440; /* is spot recent? */ if ((timediff + 30) <= (MAXMINUTES + 30)) { /* look for duplicates already in bandmap * => kill older one and keep younger entry */ for (k = 0; k < i; k++) { g_strlcpy(callcopy, bandmap[k] + 26, 6); if (strncmp(callcopy, spotcall, 4) == 0) { bandmap[k][0] = 'd'; break; } } bandmap[i] = g_strdup(thisline); spot_age[i] = timediff; spot_freq[i] = atof(thisline + 17); i++; } } } pthread_mutex_unlock (&spot_ptr_mutex); linepos = (i < 8 ? 0 : i - 8); /* prune markerfile by opening it for write */ if (xplanet > 0 && nofile == 0) { if ((fp = fopen(markerfile, "w")) == NULL) { nofile = 1; /* remember: no write possible */ mvprintw(24, 0, "Opening marker file not possible.\n"); refreshp(); } 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) { mvprintw(24, 0, "Opening markerfile not possible.\n"); } 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) { mvprintw(24, 0, "Opening markerfile not possible.\n"); } 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 int cluster; extern char call[]; extern int bandinx; int i; int si = 0; char calldupe[12]; strcpy(calldupe, call); calldupe[strlen(call) - 1] = '\0'; i = 0; si = 0; for (si = 0; si < (MAX_SPOTS - 2); si++) spotarray[si] = -1; si = 0; while (1) { if (strstr(spot_ptr[i], "DX de") != NULL) { spotarray[si] = i; si++; i++; } else if (strstr(spot_ptr[i], calldupe) != NULL) { if ((announcefilter <= 2)) { spotarray[si] = i; si++; i++; } else i++; } else if (strstr(spot_ptr[i], "To ALL") != NULL) { if ((announcefilter <= 1)) { spotarray[si] = i; si++; } i++; } else if ((announcefilter == 0) && (strlen(spot_ptr[i]) > 20)) { spotarray[si] = i; si++; i++; } else i++; if (i > (nr_of_spots - 1)) break; } return (si - 1); } tlf-1.3.0/src/addarea.c0000644000175000017520000000525713014014714011543 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) { addarea = 0; multscore[bandinx]++; } return (found); } tlf-1.3.0/src/showscore.h0000644000175000017520000000212113014014714012166 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SHOWSCORE_H #define SHOWSCORE_H /* get total number of points */ int get_nr_of_points(); /* get total number of multis */ int get_nr_of_mults(); /* calculate total score */ int get_total_score(); int showscore(void); #endif /* SHOWSCORE_H */ tlf-1.3.0/src/set_tone.h0000644000175000017520000000172513014014714012003 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.3.0/src/addpfx.h0000644000175000017520000000202013014014714011416 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); int GetNrOfPfx_once(); int GetNrOfPfx_multiband(); int GetNrOfPfx_OnBand(int bandindex); void InitPfx(); #endif /* ADDPFX_H */ tlf-1.3.0/src/getsummary.c0000644000175000017520000001004613014014714012347 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" #ifdef HAVE_CONFIG_H # include #endif 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.3.0/src/zone_nr.h0000644000175000017520000000165413014014714011636 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.3.0/src/setparameters.c0000644000175000017520000001142013014014714013026 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 "clear_display.h" #include "checklogfile.h" #include "getmessages.h" #include "getwwv.h" #include "readcalls.h" #include "scroll_log.h" #include "setcontest.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[]; extern int stop_backgrnd_process; int i = '9'; char callcpy[12] = ""; char logbuffer[20]; stop_backgrnd_process = 1; /* to prevent race condition */ while ((i == '7') || (i == '8') || (i == '9')) { for (i = 14; i <= 22; i++) mvprintw(i, 2, " "); if (cluster == NOCLUSTER) mvprintw(14, 2, "1: Cluster = OFF"); else if (cluster == MAP) mvprintw(14, 2, "1: Cluster = BANDMAP"); else mvprintw(14, 2, "1: Cluster = Full info"); if (shortqsonr == SHORTCW) mvprintw(15, 2, "2: SHORT QSONR"); else mvprintw(15, 2, "2: LONG QSONR"); if (searchflg == SEARCHWINDOW) mvprintw(16, 2, "3: Duping ON"); else mvprintw(16, 2, "3: Duping OFF"); if (contest == CONTEST) mvprintw(17, 2, "4: CONTEST MODE"); else mvprintw(17, 2, "4: QSO MODE"); if (announcefilter == FILTER_ANN) mvprintw(18, 2, "5: FILTER ON"); else mvprintw(18, 2, "5: FILTER OFF"); if (showscore_flag == 0) mvprintw(19, 2, "6: Score window OFF"); else mvprintw(19, 2, "6: Score window ON"); mvprintw(20, 2, "7: Logfile: %s", logfile); strncpy(callcpy, call, strlen(call) - 1); mvprintw(21, 2, "8: Call: %s", callcpy); mvprintw(22, 2, "9: Contest: %s", whichcontest); attroff(A_STANDOUT); mvprintw(23, 25, "Change parameter: 7,8,9, none"); refreshp(); i = key_get(); if (i == '7') { mvprintw(20, 14, " "); mvprintw(20, 14, ""); echo(); getnstr(logbuffer, 20); noecho(); logfile[0] = '\0'; // if (logbuffer[0] != '.') // strcat(logfile, "./"); strcat(logfile, logbuffer); logfile[strlen(logfile) - 1] = '\0'; writeparas(); clear(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); getmessages(); /* read .paras file */ sleep(2); checklogfile(); /* make sure logfile is there */ setcontest(); /* set contest parameters */ getwwv(); /* get the latest wwv info from packet */ scroll_log(); /* read the last 5 log lines and set the qso number */ readcalls(); /* read the logfile for score and dupe */ clear_display(); /* tidy up the display */ return (0); } if (i == '8') { mvprintw(21, 14, " "); mvprintw(21, 14, ""); echo(); getnstr(call, 20); noecho(); strcat(call, "\n"); } if (i == '9') { mvprintw(1, 2, "cqww "); mvprintw(2, 2, "wpx "); mvprintw(3, 2, "arrldx_usa"); mvprintw(4, 2, "pacc_pa "); mvprintw(5, 2, "dxped "); mvprintw(6, 2, "qso "); mvprintw(7, 2, "waedc "); mvprintw(1, 12, " other "); mvprintw(2, 12, " "); mvprintw(3, 12, " arrldx_dx "); mvprintw(4, 12, " pacc_dx "); mvprintw(5, 12, " "); mvprintw(6, 12, " "); mvprintw(7, 12, " waedc "); mvprintw(22, 14, " "); mvprintw(22, 14, ""); echo(); getnstr(whichcontest, 20); noecho(); setcontest(); } writeparas(); beep(); } stop_backgrnd_process = 0; /* release backgrnd process */ return (0); } tlf-1.3.0/src/last10.c0000644000175000017520000000412113014014714011253 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.3.0/src/displayit.h0000644000175000017520000000200413014014714012154 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.3.0/src/rules.h0000644000175000017520000000174213014014714011314 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.3.0/src/initial_exchange.h0000644000175000017520000000357013014014714013456 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); /** * Free linked list of all allocated entries pointed * to by 'head'. */ void free_ie_list(struct ie_list *head); /** * Print linked list from initial exchange file. * File must be in CALL,EXCHANGE format. * Returns 0 if o.k. */ int test_ie_list (struct ie_list *example_ie_list); #endif /* INITIAL_EXCHANGE_H */ tlf-1.3.0/src/writeparas.h0000644000175000017520000000165713014014714012350 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(void); #endif /* WRITEPARAS_H */ tlf-1.3.0/src/showpxmap.c0000644000175000017520000000622013022321330012171 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * show prefix map * *--------------------------------------------------------------*/ #include #include "dxcc.h" #include "focm.h" #include "changepars.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" int show_mults(void) { extern int countries[MAX_DATALINES]; extern int bandinx; extern int cqww; extern int focm; int i, j, k, l, bandmask = 0; static char prefix[5]; static char zonecmp[3] = ""; int ch; int iMax = dxcc_count(); if (focm == 1) { foc_show_cty(); return 0; } if (cqww == 1) { mvprintw(12, 29, "E,A,F,N,S,O"); refreshp(); ch = key_get(); while (ch != '\n' && ch != KEY_ENTER) { if (ch == 27) break; zonecmp[0] = '\0'; if (ch == 'E' || ch == 'e') strcat(zonecmp, "EU"); else if (ch == 'A' || ch == 'a') strcat(zonecmp, "AS"); else if (ch == 'F' || ch == 'f') strcat(zonecmp, "AF"); else if (ch == 'N' || ch == 'n') strcat(zonecmp, "NA"); else if (ch == 'S' || ch == 's') strcat(zonecmp, "SA"); else if (ch == 'O' || ch == 'o') strcat(zonecmp, "OC"); else strcat(zonecmp, "EU"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (l = 1; l < 6; l++) mvprintw(l, 0, " "); i = 0; for (k = 1; k < 6; k++) { for (j = 0; j <= 19; j++) { while ((i < iMax) && ((strncmp(dxcc_by_index(i) -> continent, zonecmp, 2)) != 0)) { i++; } if (i == iMax) break; bandmask = inxes[bandinx]; if ((countries[i] & bandmask) == 0) { prefix[0] = '\0'; strncat(prefix, dxcc_by_index(i)->pfx, 3); strncat(prefix, " ", 4 - strlen(prefix)); attron(modify_attr(COLOR_PAIR(C_INPUT))); mvprintw(k, j * 4, prefix); refreshp(); i++; } else { mvprintw(k, j * 4, " "); refreshp(); i++; } } if (i == iMax) break; } ch = key_get(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); } // end while attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (l = 1; l < 6; l++) mvprintw(l, 0, " "); } else multiplierinfo(); return (0); } tlf-1.3.0/src/qtc_log.c0000644000175000017520000002007213014014714011602 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 float freq; int add_to_qtcline(char *line, char *toadd, int pos) { int len = strlen(toadd); strncpy(line + pos, toadd, len); return pos + len; } int log_recv_qtc_to_disk(int qsonr) { char qtclogline[100], temp[80]; int qpos = 0, i, tempi; 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 memset(qtclogline, sizeof(qtclogline)/sizeof(qtclogline[0]), ' '); qpos = 0; // QTC: 3799 PH 2003-03-23 0711 YB1AQS 001/10 DL8WPX 0330 DL6RAI 1021 // QTC: 21086 RY 2001-11-10 0759 HA3LI 1/10 YB1AQS 0003 KB3TS 003 sprintf(temp, "%3s", band[bandinx]); if (trxmode == CWMODE) { strcat(temp, "CW "); } else if (trxmode == SSBMODE) { strcat(temp, "SSB "); } else { strcat(temp, "DIG "); } qpos = add_to_qtcline(qtclogline, temp, qpos); sprintf(temp, "%04d", qsonr); qpos = add_to_qtcline(qtclogline, temp, qpos); sprintf(temp, " %s ", qtcreclist.qtclines[i].receivedtime); qpos = add_to_qtcline(qtclogline, temp, qpos); if (lan_active == 1) { qtclogline[qpos++] = thisnode; // set node ID... } else { qtclogline[qpos++] = ' '; } qtclogline[qpos++] = ' '; sprintf(temp, "%-14s", qtcreclist.callsign); qpos = add_to_qtcline(qtclogline, temp, qpos); sprintf(temp, " %04d", qtcreclist.serial); qpos = add_to_qtcline(qtclogline, temp, qpos); sprintf(temp, " %04d", qtcreclist.count); qpos = add_to_qtcline(qtclogline, temp, qpos); sprintf(temp, " %s", qtcreclist.qtclines[i].time); qpos = add_to_qtcline(qtclogline, temp, qpos); sprintf(temp, " %-14s", qtcreclist.qtclines[i].callsign); qpos = add_to_qtcline(qtclogline, temp, qpos); tempi = atoi(qtcreclist.qtclines[i].serial); if(tempi < 1000) { sprintf(temp, " %03d ", tempi); } else { sprintf(temp, " %04d ", tempi); } qpos = add_to_qtcline(qtclogline, temp, qpos); if (trx_control == 1) { snprintf(temp, 8, "%7.1f", freq); } else { snprintf(temp, 8, " *"); } qpos = add_to_qtcline(qtclogline, temp, qpos); qtclogline[qpos] = '\n'; qtclogline[qpos + 1] = '\0'; store_recv_qtc(qtclogline); // send qtc to other nodes...... if (lan_active == 1) { send_lan_message(QTCRENTRY, qtclogline); } } } /* 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 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-1 == next_qtc_qso) { next_qtc_qso = tempi; } } /* remember callsign, build number of sent or received QTC's */ parse_qtcline(loglineptr, callsign, direction); qtc_inc(callsign, direction); } void store_sent_qtc(char *loglineptr) { store_qtc(loglineptr, SEND); } void store_recv_qtc(char *loglineptr) { store_qtc(loglineptr, RECV); } tlf-1.3.0/src/globalvars.h0000644000175000017520000000623413046414310012320 00000000000000#ifndef TLF_H # include "tlf.h" #endif #include extern char qsos[MAX_QSOS][LOGLINELEN+1];// array of log lines of QSOs so far; // note that not every log line needs // to be a QSO, it could also be a // comment, starting with a semicolon extern int nr_qsos; // number of lines in qsos[] extern char mults[MAX_MULTS][12]; // array of multipliers worked so far extern int multarray_nr; // number of entries in mults[] extern int mult_bands[]; // bitfield indicating on which band(s) // the multiplier has been worked; // bits assigned according to // BAND160..BAND10 defined in tlf.h extern int multscore[NBANDS]; // number of multipliers worked per // band; index is // BANDINDEX_160 ... BANDINDEX_10 // note: until 200409111, // index was 0...5 for only // the non-warc bands! extern int nr_worked; // number of worked station // entries in worked[] extern struct worked_t worked[MAX_CALLS]; // worked stations extern int countries[MAX_DATALINES]; // for every country, a bitfield // indicating bands on which it has // been worked extern int bandinx; // band we're currently working on extern char logfile[]; extern int contest; extern int cqww; extern int arrldx_usa; extern int pacc_pa_flg; extern int country_mult; extern int other_flg; extern char hiscall[20]; extern int total; extern int band_score[NBANDS]; 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 int stop_backgrnd_process; extern char band[9][4]; extern struct tm *time_ptr; extern int inxes[NBANDS]; // = {BAND160,BAND80,BAND40,0,BAND20,0,BAND15,0,BAND10} ; // from addmult.c extern char cqzone[]; extern char ituzone[]; extern char continent[]; extern char zone_export[]; extern int itumult; extern GPtrArray *mults_possible; /* growing array of possible mutlipliers */ 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 int rigmode; extern char lastqsonr[]; extern int cqwwm2; extern char thisnode; extern char lastcall[]; extern char my_rst[]; extern char his_rst[]; extern char section[]; extern int wazmult; extern int addcallarea; extern int addcty; extern char zone_fix[]; extern int universal; extern int arrl_fd; extern int one_point; extern int two_point; extern int three_point; extern int dxped; extern int addzone; tlf-1.3.0/src/showinfo.c0000644000175000017520000000617013014014714012011 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 "dxcc.h" #include "qrb.h" #include "tlf.h" #include "tlf_curses.h" #include "ui_utils.h" int 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; double d; time_t now; struct tm *ptr1; dx = dxcc_by_index(x); strcpy(pxstr, dx->pfx); strcpy(countrystr, dx->countryname); /* country */ if (strlen(cqzone) < 2) { sprintf(zonestr, "%02d", dx->cq); /* cqzone */ strcpy(cqzone, zonestr); } else { strncpy(zonestr, cqzone, 2); zonestr[2] = '\0'; } if (strlen(ituzone) < 2) { sprintf(itustr, "%02d", dx->itu); /* itu zone */ } else { strncpy(itustr, ituzone, 2); itustr[2] = '\0'; } d = dx->timezone; /* GMT difference */ now = (time(0) + (long)((timeoffset - d) * 3600) + timecorr); ptr1 = gmtime(&now); strftime(timebuff, 80, "%H:%M", ptr1); DEST_Lat = dx->lat; /* where is he? */ DEST_Long = dx->lon; strncpy(contstr, dx->continent, 2); /* continent */ contstr[2] = '\0'; getyx(stdscr, cury, curx); attron(COLOR_PAIR(C_HEADER) | A_STANDOUT); mvprintw(24, 0, " %s %s ", pxstr, countrystr); mvprintw(24, 26, " %s %s ", contstr, zonestr); if (x != 0 && x != mycountrynr) { qrb_(&range, &bearing); mvprintw(24, 35, "%.0f km/%.0f deg ", range, bearing); } mvprintw(24, 64, " DX time: %s", timebuff); attron(modify_attr(COLOR_PAIR(NORMCOLOR))); mvprintw(cury, curx, ""); return (0); } tlf-1.3.0/src/writeparas.c0000644000175000017520000000761313014014714012341 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 "cw_utils.h" #include "tlf.h" #include "tlf_curses.h" int writeparas(void) { extern char call[]; extern char message[][80]; extern char headerline[]; extern char logfile[]; extern char whichcontest[]; extern int shortqsonr; extern char para_word[]; extern int cluster; extern int searchflg; extern int demode; extern int contest; extern int announcefilter; extern int showscore_flag; extern int cqdelay; extern int trxmode; extern int stop_backgrnd_process; FILE *fp; int i; stop_backgrnd_process = 1; sleep(1); if (strlen(call) <= 3) { mvprintw(24, 0, "Cannot write parameters file: data corrupt... "); refreshp(); sleep(1); return (-1); } if ((fp = fopen(".paras", "w")) == NULL) { mvprintw(24, 0, "writeparas.c: Error opening file.\n"); refreshp(); sleep(1); endwin(); exit(1); } 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("# 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); stop_backgrnd_process = 0; return (0); } tlf-1.3.0/src/printcall.h0000644000175000017520000000202213014014714012142 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.3.0/src/tlf_curses.h0000644000175000017520000000467313014014714012341 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 #ifdef HAVE_CONFIG_H # include #endif #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.3.0/src/clusterinfo.h0000644000175000017520000000201513014014714012511 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.3.0/src/sockserv.h0000644000175000017520000000552513014014714012024 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 ** login = 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 (*login) (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 ** s = [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 *s, 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.3.0/src/getsummary.h0000644000175000017520000000172713014014714012362 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.3.0/src/nicebox.h0000644000175000017520000000207313014014714011607 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.3.0/src/showscore.c0000644000175000017520000002343513046414310012175 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2010 - 2015 Thomas Beierlein * 2013 Ervin Hegedüs - HA2OS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * showscore * *-------------------------------------------------------------*/ #include #include "addpfx.h" #include "focm.h" #include "globalvars.h" // Includes tlf.h #include "last10.h" #include "nicebox.h" // Includes curses.h #include "printcall.h" #define START_COL 45 /* start display in these column */ /* list of columns to display score for each band */ static int band_cols[6] = { 50, 55, 60, 65, 70, 75 }; /* list of BANDINDEX entries to show in each column * first - for normal contest bands * second - if in warc band */ static int bi_normal[6] = { BANDINDEX_160, BANDINDEX_80, BANDINDEX_40, BANDINDEX_20, BANDINDEX_15, BANDINDEX_10 }; static int bi_warc[6] = { BANDINDEX_160, BANDINDEX_80, BANDINDEX_40, BANDINDEX_30, BANDINDEX_17, BANDINDEX_12 }; /* bands as numbers */ static int bands[NBANDS] = { 160, 80, 40, 30, 20, 17, 15, 12, 10 }; void printfield (int x, int y, int number); void stewperry_show_summary( int points, float fixedmult ); /* show summary line for stewperry */ void stewperry_show_summary( int points, float fixedmult ) { float mult; mvprintw(5, START_COL, " "); /* TODO: respect field boundaries for large numbers */ mult = (fixedmult == 0.0) ? 1.0 : fixedmult; mvprintw(5, START_COL, "Pts: %d Score: %d", points, (int)floor(points * mult)); } /* show summary line */ void show_summary( int points, int multi ) { mvprintw(5, START_COL, " "); /* TODO: respect field boundaries for large numbers */ mvprintw(5, START_COL, "Pts: %d Mul: %d Score: %d", points, multi, points * multi); } /** show scoring header * * show header with active band and number of QSOs. * Use the list of bandindices in 'bi' for that * * \param bi list of band indices to use */ void display_header(int *bi) { int i; /* prepare header line */ attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); mvprintw(1, START_COL, "Band "); for (i = 0; i < 6; i++) { attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT); addstr(" "); if (bandinx == bi[i]) { /* highlight active band */ attrset(COLOR_PAIR(C_DUPE)); } printw("%3d", bands[bi[i]]); } /* show number of QSO */ attron(COLOR_PAIR(C_LOG) | A_STANDOUT); mvprintw(2, START_COL, "QSO's "); for (i = 0; i < 6; i++) { printfield(2, band_cols[i], band_score[bi[i]]); } mvprintw(3, START_COL, " "); mvprintw(4, START_COL, " "); mvprintw(5, START_COL, " "); } extern int focm; extern int foc_get_nr_of_points(); /* get total number of points */ int get_nr_of_points() { return total; } /* get total number of multis */ int get_nr_of_mults() { extern float fixedmult; extern int sprint; extern int multlist; extern int multscore[]; extern int bandweight_multis[NBANDS]; extern int pfxmultab; int n; int totalzones; int totalcountries; int totalmults; /* precalculate summaries */ totalzones = 0; totalcountries = 0; totalmults = 0; for (n = 0; n < 6; n++) { totalzones += (zonescore[bi_normal[n]] * bandweight_multis[bi_normal[n]]); totalcountries += (countryscore[bi_normal[n]] * bandweight_multis[bi_normal[n]]); totalmults += (multscore[bi_normal[n]] * bandweight_multis[bi_normal[n]]); } if (sprint == 1) { /* no multis used */ return 1; } else if (arrlss == 1) { return multarray_nr; } 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 multarray_nr; } else if ((wysiwyg_multi == 1) || (unique_call_multi == UNIQUECALL_BAND) || (serial_section_mult == 1) || (serial_grid4_mult == 1) || (sectn_mult == 1)) { return totalmults; } else if (wpx == 1) { return GetNrOfPfx_once(); } else if (pfxmultab == 1) { return GetNrOfPfx_multiband(); } else if ((itumult == 1) || (wazmult == 1)) { return totalzones; } else /* should never reach that point * * \TODO: so we need some instrument of warning here */ return 1; } /* calculate total score */ int get_total_score() { if (focm == 1) return foc_total_score(); else return get_nr_of_points() * get_nr_of_mults(); } /** show contest score * * display scoring results of contest if activated by 'showscore_flag' */ int showscore(void) { extern int showscore_flag; extern int band_score[9]; extern int cqww; extern int arrldx_usa; extern int arrl_fd; extern int arrlss; extern int pacc_pa_flg; extern int universal; extern int country_mult; extern int wysiwyg_once; extern int wysiwyg_multi; extern int totalmults; extern int qsonum; extern int total; extern int wpx; extern int sprint; extern int bandinx; extern int multscore[]; extern int serial_section_mult; extern int sectn_mult; extern int dx_arrlsections; extern float fixedmult; int i, l10; float p; if (showscore_flag == 1) { /* show header with active band and number of QSOs */ if (!IsWarcIndex(bandinx)) { display_header(bi_normal); } else { display_header(bi_warc); } /* show score per band */ if ((wysiwyg_multi == 1) || (serial_section_mult == 1) || (serial_grid4_mult == 1) || (sectn_mult == 1)) { mvprintw(3, START_COL, "Mult "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], multscore[bi_normal[i]]); } } if ((itumult == 1) || (wazmult == 1)) { mvprintw(3, START_COL, "Mult "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], zonescore[bi_normal[i]]); } } if (pfxmultab == 1) { mvprintw(3, START_COL, "Mult "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], GetNrOfPfx_OnBand(bi_normal[i])); } } if (dx_arrlsections == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } mvprintw(4, START_COL, "Sect"); for (i = 0; i < 6; i++) { printfield(4, band_cols[i], multscore[bi_normal[i]]); } } if (cqww == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } mvprintw(4, START_COL, "Zone "); for (i = 0; i < 6; i++) { printfield(4, band_cols[i], zonescore[bi_normal[i]]); } } if (arrldx_usa == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } } if (universal == 1 && country_mult == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } } if (pacc_pa_flg == 1) { mvprintw(3, START_COL, "Cty "); for (i = 0; i < 6; i++) { printfield(3, band_cols[i], countryscore[bi_normal[i]]); } } /* show score summary */ if (sprint == 1) { mvprintw(5, START_COL, "Score: %d", get_nr_of_points() ); } else if (focm == 1) { foc_show_scoring(START_COL); } else if (stewperry_flg == 1) { /* no normal multis, but may have POWERMULT set (fixedmult != 0.) */ stewperry_show_summary( get_nr_of_points(), fixedmult ); } else { show_summary( get_nr_of_points(), get_nr_of_mults() ); } /* show statistics */ attron(COLOR_PAIR(C_HEADER)); mvprintw(6, 55, " "); if ((cqww == 1) || (wpx == 1) || (arrldx_usa == 1) || (pacc_pa_flg == 1) || (wysiwyg_once == 1) || (universal == 1)) { /* cqww or wpx */ totalmults = get_nr_of_mults(); totalmults = totalmults ? totalmults : 1; /* at least one */ p = ((qsonum - 1) / (float)totalmults); if ((l10 = last10()) >= 1) mvprintw(6, 55, "Q/M %.1f Rate %d ", p, (60 * 10) / l10); else mvprintw(6, 55, "Q/M %.1f ", p); } if (wpx == 1) { if (minute_timer > 0) mvprintw(6, 75, "%d", minute_timer); } printcall(); } return (0); } /** formated print of integer number 0..9999 */ void printfield (int y, int x, int number) { attron(COLOR_PAIR(C_LOG)); mvprintw(y, x, " %4d", number); } tlf-1.3.0/src/focm.h0000644000175000017520000000212513014014714011102 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.3.0/src/rules.c0000644000175000017520000000656513014014714011317 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 */ #include #include #include #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 mit_contest_rule[80]; char contest_conf[80] = ""; // contest_conf needs room for contest name... (PA0R) char basic_contest_conf[75] = PACKAGE_DATA_DIR; FILE *mit_contest_file; 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); } memset(mit_contest_rule, '\0', strlen(whichcontest) + 6); 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 ((mit_contest_file = fopen(contest_conf, "r")) != NULL) { showstring("reading contest rules file:", contest_conf); while ( fgets(mit_contest_rule, sizeof(mit_contest_rule), mit_contest_file) != NULL ) { /* if not comment interpret line */ if ((mit_contest_rule[0] != '#') && (mit_contest_rule[0] != ';')) { status |= parse_logcfg(mit_contest_rule); } } fclose(mit_contest_file); showstring("Using contest rules file: ", contest_conf); } else if ((mit_contest_file = fopen(basic_contest_conf, "r")) != NULL) { showstring("reading contest rules file:", basic_contest_conf); while ( fgets(mit_contest_rule, sizeof(mit_contest_rule), mit_contest_file) != NULL ) { /* if not comment interpret line */ if ((mit_contest_rule[0] != '#') && (mit_contest_rule[0] != ';')) { status |= parse_logcfg(mit_contest_rule); } } fclose(mit_contest_file); showstring("Using contest rules file:", basic_contest_conf); } 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"); refreshp(); } return( status ); } tlf-1.3.0/src/listmessages.c0000644000175000017520000000463713014014714012666 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 "nicebox.h" // Includes curses.h #include "tlf.h" #include "ui_utils.h" #define LIST_HEIGHT 15 #define LIST_WIDTH 78 #define LIST_UPPER 7 #define LIST_LEFT 0 char printbuffer[160]; char *formatMessage(int i) { extern char message[][80]; extern char backgrnd_str[]; /* copy the message string WITHOUT trailing newline */ g_strlcpy (printbuffer, message[i], strlen(message[i])); /* and fill up with spaces */ strcat (printbuffer, backgrnd_str); printbuffer[LIST_WIDTH - 7] = '\0'; return printbuffer; } void listmessages(void) { extern char backgrnd_str[]; int i; nicebox(LIST_UPPER, LIST_LEFT, LIST_HEIGHT, LIST_WIDTH, "Messages"); attron(COLOR_PAIR(C_WINDOW) | A_STANDOUT ); for ( i = 0 ; i < 12 ; i++){ mvprintw(i + LIST_UPPER + 1, 1, " %2i : %s", i+1, formatMessage(i)); } mvprintw(12 + LIST_UPPER + 1, 1, " SPmg: %s", formatMessage(SP_TU_MSG)); mvprintw(13 + LIST_UPPER + 1, 1, " CQmg: %s", formatMessage(CQ_TU_MSG)); mvprintw(14 + LIST_UPPER + 1, 1, " SPCa: %s", formatMessage(SP_CALL_MSG)); attroff(A_STANDOUT); mvprintw(23, 30, "Press any key"); refreshp(); (void)key_get(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (i = 13 ; i <= 23 ; i++){ mvprintw(i, 0, backgrnd_str); } refreshp(); return; } tlf-1.3.0/src/last10.h0000644000175000017520000000163713014014714011271 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.3.0/src/store_qso.h0000644000175000017520000000166713014014714012206 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.3.0/src/background_process.c0000644000175000017520000002037013046414310014031 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 "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" extern int stop_backgrnd_process; 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 float 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; int cw_simulator(void); void *background_process(void *ptr) { extern int landebug; extern struct tm *time_ptr; static int i, t; 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) { while (stop_backgrnd_process == 1) { sleep(1); } 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 * 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] */ if (trxmode == DIGIMODE && (digikeyer == GMFSK || digikeyer == FLDIGI) && trx_control == 1) { if (fldigi_rpc_cnt == 0) { fldigi_xmlrpc_get_carrier(); } 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)) { mvprintw(24, 0, "Warning: NODE ID CONFLICT ?! You should use another ID! "); refreshp(); sleep(5); } 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_recv_qtc(lan_message+2); break; case QTCSENTRY: store_sent_qtc(lan_message+2); 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 { mvprintw(24, 0, " "); mvprintw(24, 0, "%s", prmessage); refreshp(); } addtext(prmessage); break; case TLFSPOT: strncpy(prmessage, lan_message + 2, 80); lanspotflg = 1; addtext(prmessage); lanspotflg = 0; break; case TLFMSG: for (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); mvprintw(24, 0, " "); mvprintw(24, 0, " MSG from %s", talkarray[4]); refreshp(); break; case FREQMSG: if ((lan_message[0] >= 'A') && (lan_message[0] <= 'A' + MAXNODES)) { node_frequencies[lan_message[0] - 'A'] = atof(lan_message + 2); 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); } 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]; static int x; 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) { case 48: strcpy(simulator_tone, "625"); break; case 49: strcpy(simulator_tone, "800"); break; case 50: strcpy(simulator_tone, "650"); break; case 51: strcpy(simulator_tone, "750"); break; case 52: strcpy(simulator_tone, "700"); break; case 53: strcpy(simulator_tone, "725"); break; case 54: strcpy(simulator_tone, "675"); break; case 55: strcpy(simulator_tone, "775"); break; case 56: strcpy(simulator_tone, "600"); break; case 57: strcpy(simulator_tone, "640"); break; default: strcpy(simulator_tone, "750"); break; } strcpy(tonestr, simulator_tone); write_tone(); 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(); strcpy(callcpy, CALLMASTERARRAY(callnumber)); x = getctydata(callcpy); str = g_strdup_printf("TU 5NN %2s", zone_export); sendmessage(str); g_free(str); simulator_mode = 0; write_keyer(); strcpy(tonestr, tonecpy); write_tone(); } if (simulator_mode == 3) { char *str; strcpy(tonecpy, tonestr); strcpy(tonestr, simulator_tone); write_tone(); strcpy(callcpy, CALLMASTERARRAY(callnumber)); x = getctydata(callcpy); str = g_strdup_printf("DE %s TU 5NN %s", CALLMASTERARRAY(callnumber), zone_export); sendmessage(str); g_free(str); simulator_mode = 0; write_keyer(); strcpy(tonestr, tonecpy); write_tone(); } return (0); } tlf-1.3.0/src/qrb.c0000644000175000017520000001013613014014714010736 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedus * 2014 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * qrb() function comes from HAMLIB src/locator.c * * author Stephane Fillod and the Hamlib Group * date 2000-2010 * * Hamlib Interface - locator, bearing, and conversion calls * * * Hamlib Interface - locator and bearing conversion calls * Copyright (c) 2001-2010 by Stephane Fillod * Copyright (c) 2003 by Nate Bargmann * Copyright (c) 2003 by Dave Hines * * * Code to determine bearing and range was taken from the Great Circle, * by S. R. Sampson, N5OWK. * Ref: "Air Navigation", Air Force Manual 51-40, 1 February 1987 * Ref: "ARRL Satellite Experimenters Handbook", August 1990 * * Code to calculate distance and azimuth between two Maidenhead locators, * taken from wwl, by IK0ZSN Mirko Caserta. * * New bearing code added by N0NB was found at: * http://williams.best.vwh.net/avform.htm#Crs * */ #include #include "qrb.h" #define ARC_IN_KM 111.2 #define RADIAN (180.0 / M_PI) /* Compute the Bearing and Range */ int 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 (0); 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.3.0/src/ui_utils.c0000644000175000017520000001416313014014714012013 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 "stoptx.h" #include "tlf_panel.h" #include "startmsg.h" extern int use_rxvt; 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); /** 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(); nodelay(stdscr, FALSE); return x; } /* New onechar() that takes advantage of Ncurses keypad mode and processes * certain escaped keys and assigns them to Ncurses values known by * keyname(). Also catches Escape and processes it immediately as well * as calling stoptx() for minimal delay. */ static int onechar(void) { int x = 0; int trash = 0; x = getch(); /* Replace Ctl-H and Backspace with KEY_BACKSPACE */ if (x == 8 || x == 127) x = KEY_BACKSPACE; if (x == 27) { nodelay(stdscr, TRUE); x = getch(); /* Escape pressed, not an escaped key. */ if (x == ERR) { stoptx(); return x = 27; } else if (x != 91) { switch (x) { case 32 ... 57: // Alt-Space to Alt-9, 160 - 185 case 97 ... 122: // Alt-a to alt-z, 225 - 250 x += 128; break; /* Not all terminals support Ctl-Shift-ch so * treat them as Alt-ch */ case 65 ... 78: // alt-A to alt-N, 225 - 238 case 80 ... 90: // alt-P to alt-Z, 240 - 250 x += 160; break; case 79: { x = getch(); /* Catch Alt-O */ if (x == ERR) { x = 239; break; } /* Key codes for Shift-F1 to Shift-F4 in Xfce terminal. */ if (x == 49) { x = getch(); if (x == 59) { x = getch(); if (x == 50) { x = getch(); switch (x) { case 80: { x = KEY_F(13); break; } case 81: { x = KEY_F(14); break; } case 82: { x = KEY_F(15); break; } case 83: { x = KEY_F(16); break; } } } } } } } nodelay(stdscr, FALSE); } else { nodelay(stdscr, FALSE); x = getch(); /* Get next code after 91 */ switch (x) { /* Key codes for this section: * 27 91 49 126 Home * 27 91 52 126 End */ case 49: { x = getch(); if (x == 126) { x = KEY_HOME; break; } } case 52: { x = KEY_END; trash = getch(); break; } } } } /* It seems Xterm treats Alt-Space through Alt-9 with a prefix * character of 194 followed by 160 through 185. */ if (x == 194) { nodelay(stdscr, TRUE); trash = getch(); if (trash == ERR) return x; x = trash; // Alt-Space to Alt-9 if (x >= 160 && x <= 185) { nodelay(stdscr, FALSE); return x; } } /* It seems Xterm treats Alt-a to Alt-z with a prefix * character of 195 followed by 161-186 (a-z) or * 129-154 (A-Z). */ if (x == 195) { nodelay(stdscr, TRUE); trash = getch(); if (trash == ERR) return x; x = trash; switch (x) { case 161 ... 186: // Alt-a to Alt-z 225 - 250 x += 64; break; case 129 ... 154: // Alt-A to Alt-Z 225 - 250 x += 96; break; } nodelay(stdscr, FALSE); } return x; } tlf-1.3.0/src/getctydata.c0000644000175000017520000002703413046414310012311 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 "dxcc.h" #include "getpx.h" #include "globalvars.h" // Includes glib.h and tlf.h int getpfxindex(char *checkcallptr) { char checkbuffer[17] = ""; char checkncall[17] = ""; char checkcall[17] = ""; char findcall[17] = ""; prefix_data *pfx; int pfxmax = prefix_count(); int i = 0, w = 0, abnormal_call = 0; char portable = '\0'; int pp = 0; size_t loc; g_strlcpy(checkcall, checkcallptr, 17); portable = '\0'; if (strstr(checkcall, "/QRP") != NULL) /* drop QRP suffix */ checkcall[strlen(checkcall) - 4] = '\0'; if (strstr(checkcall, "/AM") != NULL) // airborne mobile, no country (0), no zone (0) checkcall[0] = '\0'; if (strstr(checkcall, "/MM") != NULL) // maritime mobile, no country, no zone checkcall[0] = '\0'; strncpy(findcall, checkcall, 16); loc = strcspn(checkcall, "/"); if (loc != strlen(checkcall)) { char call1[17]; char call2[17]; strncpy(call1, checkcall, loc); /* 1st part before '/' */ call1[loc] = '\0'; strcpy(call2, checkcall + loc + 1); /* 2nd part after '/' */ if (strlen(call2) < strlen(call1) && strlen(call2) > 1) { sprintf(checkcall, "%s/%s", call2, call1); abnormal_call = 1; loc = strcspn(checkcall, "/"); } if (loc > 3) { strncpy(checkbuffer, (checkcall + loc + 1), (strlen(checkcall) + 1) - loc); if (strlen(checkbuffer) == 1) checkcall[loc] = '\0'; if (checkbuffer[0] == 'M' && strlen(checkbuffer) <= 3) checkcall[loc] = '\0'; if (checkbuffer[0] == 'Q' && strlen(checkbuffer) == 3) /* /QRP */ checkcall[loc] = '\0'; if (checkbuffer[0] == 'A' && strlen(checkbuffer) <= 3) /* /A, /AM etc */ checkcall[loc] = '\0'; if ((strlen(checkbuffer) <= 3) && (checkbuffer[0] <= '9') && (checkbuffer[0] >= '0')) /* /3, etc */ portable = checkbuffer[0]; loc = strcspn(checkcall, "/"); } if (loc != strlen(checkcall)) { if (loc < 5) checkcall[loc] = '\0'; /* "PA/DJ0LN/P */ else { /* DJ0LN/P */ strncpy(checkcall, checkcall, loc + 1); } } /* ------------------------------------------------------------ */ if ((strlen(checkbuffer) == 1) && isdigit(checkbuffer[0])) { /* /3 */ for (pp = strlen(checkcall) - 1; pp > 0; pp--) { if (isdigit(checkcall[pp])) { checkcall[pp] = checkbuffer[0]; break; } } } else if (strlen(checkbuffer) > 1) strcpy(checkcall, checkbuffer); } /* -------------check full call exceptions first...--------------------- */ w = -1; if (abnormal_call == 1) { // pa3fwm 20040111: is pp guaranteed to be properly initialized // if/when we get here?? // pa0r 20040117: It is not. Code changed... // strncpy(checkncall , findcall, pp); strncpy(checkncall, findcall, sizeof(checkncall) - 1); for (i = 0; i < pfxmax; i++) { pfx = prefix_by_index(i); if (strcmp(checkncall, pfx->pfx) == 0) { w = i; break; } } } else { int bestlen = 0; for (i = 0; i < pfxmax; i++) { int l; pfx = prefix_by_index(i); if (*pfx->pfx != findcall[0]) continue; l = strlen(pfx->pfx); if (l <= bestlen) continue; if (strncmp(pfx->pfx, findcall, l) == 0) { bestlen = l; w = i; } } } if (w < 0 && 0 != strcmp(findcall, checkcall)) { // only if not found in prefix full call exception list int bestlen = 0; for (i = 0; i < pfxmax; i++) { int l; pfx = prefix_by_index(i); if (*pfx->pfx != checkcall[0]) continue; l = strlen(pfx->pfx); if (l <= bestlen) continue; if (strncmp(pfx->pfx, checkcall, l) == 0) { bestlen = l; w = i; } } } return w; } int getctynr(char *checkcall) { int w; w = getpfxindex(checkcall); if (w >= 0) return prefix_by_index(w)->dxcc_index; else return 0; /* no country found */ } int getctydata(char *checkcallptr) { char checkbuffer[17] = ""; char checkncall[17] = ""; char checkcall[17] = ""; char findcall[17] = ""; prefix_data *pfx; int pfxmax = prefix_count(); int i = 0, w = 0, x = 0, abnormal_call = 0; char portable = '\0'; int pp = 0; size_t loc; g_strlcpy(checkcall, checkcallptr, 17); portable = '\0'; if (strstr(checkcall, "/QRP") != NULL) /* drop QRP suffix */ checkcall[strlen(checkcall) - 4] = '\0'; if (strstr(checkcall, "/AM") != NULL) // airborne mobile, no country (0), no zone (0) checkcall[0] = '\0'; if (strstr(checkcall, "/MM") != NULL) // maritime mobile, no country, no zone checkcall[0] = '\0'; strncpy(findcall, checkcall, 16); loc = strcspn(checkcall, "/"); if (loc != strlen(checkcall)) { char call1[17]; char call2[17]; strncpy(call1, checkcall, loc); /* 1st part before '/' */ call1[loc] = '\0'; strcpy(call2, checkcall + loc + 1); /* 2nd part after '/' */ if (strlen(call2) < strlen(call1) && strlen(call2) > 1) { sprintf(checkcall, "%s/%s", call2, call1); abnormal_call = 1; loc = strcspn(checkcall, "/"); } if (loc > 3) { strncpy(checkbuffer, (checkcall + loc + 1), (strlen(checkcall) + 1) - loc); if (strlen(checkbuffer) == 1) checkcall[loc] = '\0'; if (checkbuffer[0] == 'M' && strlen(checkbuffer) <= 3) checkcall[loc] = '\0'; if (checkbuffer[0] == 'Q' && strlen(checkbuffer) == 3) /* /QRP */ checkcall[loc] = '\0'; if (checkbuffer[0] == 'A' && strlen(checkbuffer) <= 3) /* /A, /AM etc */ checkcall[loc] = '\0'; if ((strlen(checkbuffer) <= 3) && (checkbuffer[0] <= '9') && (checkbuffer[0] >= '0')) /* /3, etc */ portable = checkbuffer[0]; loc = strcspn(checkcall, "/"); } if (loc != strlen(checkcall)) { if (loc < 5) checkcall[loc] = '\0'; /* "PA/DJ0LN/P */ else { /* DJ0LN/P */ strncpy(checkcall, checkcall, loc + 1); } } /* ------------------------------------------------------------ */ if ((strlen(checkbuffer) == 1) && isdigit(checkbuffer[0])) { /* /3 */ for (pp = strlen(checkcall) - 1; pp > 0; pp--) { if (isdigit(checkcall[pp])) { checkcall[pp] = checkbuffer[0]; break; } } } else if (strlen(checkbuffer) > 1) strcpy(checkcall, checkbuffer); } if (wpx == 1 || pfxmult == 1) /* needed for wpx and other pfx contests */ getpx(checkcall); /* -------------check full call exceptions first...--------------------- */ w = -1; if (abnormal_call == 1) { // pa3fwm 20040111: is pp guaranteed to be properly initialized // if/when we get here?? // pa0r 20040117: It is not. Code changed... // strncpy(checkncall , findcall, pp); strncpy(checkncall, findcall, sizeof(checkncall) - 1); for (i = 0; i < pfxmax; i++) { pfx = prefix_by_index(i); if (strcmp(checkncall, pfx->pfx) == 0) { w = i; x = pfx->dxcc_index; break; } } } else { int bestlen = 0; for (i = 0; i < pfxmax; i++) { int l; pfx = prefix_by_index(i); if (*pfx->pfx != findcall[0]) continue; l = strlen(pfx->pfx); if (l <= bestlen) continue; if (strncmp(pfx->pfx, findcall, l) == 0) { bestlen = l; w = i; } } if (w >= 0) x = prefix_by_index(w)->dxcc_index; } if (w < 0 && 0 != strcmp(findcall, checkcall)) { // only if not found in prefix full call exception list int bestlen = 0; for (i = 0; i < pfxmax; i++) { int l; pfx = prefix_by_index(i); if (*pfx->pfx != checkcall[0]) continue; l = strlen(pfx->pfx); if (l <= bestlen) continue; if (strncmp(pfx->pfx, checkcall, l) == 0) { bestlen = l; w = i; } } if (w >= 0) x = prefix_by_index(w)->dxcc_index; } if (w >= 0 ) { 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); // w must be >0 tb 17feb2011 // strncpy(ituzone, ituarray[w], 2); countrynr = x; g_strlcpy(continent, dxcc_by_index(countrynr) -> continent , 3); return (x); } /* --------------------for background ---------------------------*/ // pa3fwm, 20040113: I didn't "clean" this part yet int getctydata2(char *checkcall) { extern char cqzone[]; extern int countrynr; char checkbuffer[17] = ""; char membuffer[17] = ""; char checkncall[20]; prefix_data *pfx; int pfxmax = prefix_count(); int i = 0, w = 0, x = 0; char portable = '\0'; int pp = 0; size_t loc; strncpy(membuffer, checkcall, 16); portable = '\0'; if (strstr(checkcall, "/QRP") == (checkcall + strlen(checkcall) - 4)) /* drop QRP suffix */ checkcall[strlen(checkcall) - 4] = '\0'; loc = strcspn(checkcall, "/"); if (loc > 4) { strncpy(checkbuffer, (checkcall + loc + 1), (strlen(checkcall) + 1) - loc); if (strlen(checkbuffer) == 1) checkcall[loc] = '\0'; if (checkbuffer[0] == 'M' && strlen(checkbuffer) <= 3) checkcall[loc] = '\0'; if (checkbuffer[0] == 'Q' && strlen(checkbuffer) == 3) /* /QRP */ checkcall[loc] = '\0'; if (checkbuffer[0] == 'A' && strlen(checkbuffer) <= 3) /* /A, /AM etc */ checkcall[loc] = '\0'; if ((strlen(checkbuffer) <= 3) && (checkbuffer[0] <= 57) && (checkbuffer[0] >= 48)) /* /3, etc */ portable = checkbuffer[0]; } loc = strcspn(checkcall, "/"); if (loc != strlen(checkcall)) { if (loc < 5) checkcall[loc] = '\0'; /* "PA/DJ0LN/P */ else { /* DJ0LN/P */ strncpy(checkcall, checkcall, loc + 1); } } /* ------------------------------------------------------------ */ if (strlen(checkbuffer) == 1) { /* /3 */ for (pp = strlen(checkcall) - 1; pp > 0; pp--) { if ((checkcall[pp] <= '9') && (checkcall[pp] >= '0')) if ((checkbuffer[0] <= '9') && (checkbuffer[0] >= '0')) { checkcall[pp] = checkbuffer[0]; break; } } } else if (strlen(checkbuffer) > 1) strcpy(checkcall, checkbuffer); getpx(checkcall); /* ------------------------------------------------------------ */ w = 0; for (pp = 1; pp <= strlen(checkcall); pp++) { strncpy(checkncall, checkcall, pp); checkncall[pp] = '\0'; for (i = 0; i < pfxmax; i++) { pfx = prefix_by_index(i); if ((strncmp (checkncall, pfx->pfx, strlen(pfx->pfx)) == 0)) { if (strlen(checkncall) == strlen(pfx->pfx)) { w = i; x = pfx->dxcc_index; break; } } } } sprintf(cqzone, "%02d", prefix_by_index(w) -> cq); countrynr = x; strncpy(continent, dxcc_by_index(countrynr) -> continent , 3); continent[2] = '\0'; strcpy(checkcall, membuffer); return (x); } tlf-1.3.0/src/score.c0000644000175000017520000002325313022321330011263 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedus * 2013-2015 Thomas Beierlein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * score * *--------------------------------------------------------------*/ #include #include #include #include "focm.h" #include "getctydata.h" #include "locator2longlat.h" #include "qrb.h" #include "tlf.h" int calc_continent(int zone); /* check if hiscall is in COUNTRY_LIST from logcfg.dat */ int country_found(char prefix[]) { extern int countrynr; extern char hiscall[]; extern char call[]; extern char countrylist[][6]; char tmpcall[15]; int counter = 0; if (strlen(hiscall) == 0) { strcpy(tmpcall, call); } else strcpy(tmpcall, hiscall); countrynr = getctydata(tmpcall); while (strlen(countrylist[counter]) != 0) { if (getctydata(countrylist[counter]) == getctydata(tmpcall)) { return 1; } counter++; } return 0; } int exist_in_country_list() { extern char pxstr[]; char prefix[10]; strcpy(prefix, pxstr); if (country_found(prefix) == 1) { return (1); } else { if ((prefix[strlen(prefix) - 1] < 58) /* last char '0'..'9' */ && (prefix[strlen(prefix) - 1] > 47)) { prefix[strlen(prefix) - 1] = '\0'; /* strip number */ if (country_found(prefix) == 1) { return 1; } else { if ((prefix[strlen(prefix) - 1] < 58) /* see above */ && (prefix[strlen(prefix) - 1] > 47)) { prefix[strlen(prefix) - 1] = '\0'; if (country_found(prefix) == 1) return (1); else return (0); } else return 0; } } else return 0; } } /* HA2OS - check if continent is in CONTINENT_LIST from logcfg.dat */ int continent_found() { extern char continent[]; extern char continent_multiplier_list[7][3]; int mit_fg = 0; while (strlen(continent_multiplier_list[mit_fg]) != 0) { if (strcmp(continent_multiplier_list[mit_fg], continent) == 0) { return 1; } mit_fg++; } return 0; } /* apply bandweigth scoring * * at the moment only LOWBAND_DOUBLES (<30m) can be active */ int apply_bandweigth(int points) { extern int lowband_point_mult; extern int bandinx; extern int bandweight_points[]; if (lowband_point_mult != 0 && (bandinx < BANDINDEX_30)) points *= 2; points *= bandweight_points[bandinx]; return points; } /* portable stations may count double * see PORTABLE_X2 */ int portable_doubles(int points) { extern int portable_x2; extern char hiscall[]; char *loc; if (portable_x2 == 1) { // portable x2 loc = strstr(hiscall, "/P"); if (loc == hiscall + strlen(hiscall) - 2) { points *= 2; } } return points; } /* apply points by mode */ int scoreByMode () { extern int cwpoints; extern int ssbpoints; extern int trxmode; switch (trxmode) { case CWMODE: return cwpoints; case SSBMODE: return ssbpoints; default: return 0; } } int scoreByContinentOrCountry () { extern char hiscall[]; extern int countrylist_points; extern int countrylist_only; extern int continentlist_only; extern int continentlist_points; extern int my_country_points; extern int my_cont_points; extern int dx_cont_points; extern int countrynr; extern int mycountrynr; extern char continent[]; extern char mycontinent[]; int points = 0; int inList = 0; inList = exist_in_country_list(); if (countrylist_only == 1) { if (inList == 1 && countrylist_points != -1) points = countrylist_points; } else { if (inList == 1) { if (countrylist_points != -1) points = countrylist_points; if (countrynr == mycountrynr) { if (my_country_points != -1) points = my_country_points; else if (my_cont_points != -1) points = my_cont_points; else points = 0; } } else if (countrynr == mycountrynr) { if (my_country_points != -1) points = my_country_points; else if (my_cont_points != -1) points = my_cont_points; } else if (strcmp(continent, mycontinent) == 0) { if (my_cont_points != -1) points = my_cont_points; } else if (dx_cont_points != -1) points = dx_cont_points; } /* HA2OS mods */ // only continent list allowed if (continentlist_only == 1) { if (continent_found() == 1) { // if we are on DX continent if (strcmp(continent, mycontinent) == 0) { points = my_cont_points; } else if (continentlist_points != -1) { points = continentlist_points; } } else { points = 0; } } return points; } /** default scoring code * * the default scoring rules will be applied if no contest specific rules * are active * \return points for QSO */ int scoreDefault() { extern int cwpoints; extern int ssbpoints; extern int one_point; extern int two_point; extern int three_point; int points; if (one_point == 1) { points = 1; return points; } if (two_point == 1) { points = 2; return points; } if (three_point == 1) { points = 3; return points; } if (ssbpoints != 0 && cwpoints != 0) // e.g. arrl 10m contest points = scoreByMode(); else points = scoreByContinentOrCountry(); points = apply_bandweigth(points); points = portable_doubles(points); return points; } int score() { extern int dupe; extern int band_score[9]; 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.3.0/src/scroll_log.c0000644000175000017520000000676613022321330012321 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 "globalvars.h" // Includes glib.h and tlf.h #include "qsonr_to_str.h" #include "tlf_curses.h" void scroll_log(void) { char *rp; char inputbuffer[800]; static int ii, kk; int mm; FILE *fp; if ((fp = fopen(logfile, "r")) == NULL) { mvprintw(24, 0, "Error opening logfile.\n"); refreshp(); sleep(2); exit(1); } for (ii = 5; ii >= 1; ii--) { inputbuffer[0] = '\0'; if (fseek(fp, -1L * ii * LOGLINELEN, SEEK_END) == 0) rp = fgets(inputbuffer, 90, fp); else strcpy(inputbuffer, " "); kk = 5 - ii; if (strlen(inputbuffer) <= 10) /* log repair */ rp = fgets(inputbuffer, 90, fp); // if (strlen(inputbuffer) != LOGLINELEN) // strcat (inputbuffer, backgrnd_str); inputbuffer[80] = '\0'; switch (kk) { case 0:{ strncpy(logline0, inputbuffer, 80); logline0[80] = '\0'; break; } case 1:{ strncpy(logline1, inputbuffer, 80); logline1[80] = '\0'; break; } case 2:{ strncpy(logline2, inputbuffer, 80); logline2[80] = '\0'; break; } case 3:{ strncpy(logline3, inputbuffer, 80); logline3[80] = '\0'; break; } case 4:{ strncpy(logline4, inputbuffer, 80); logline4[80] = '\0'; break; } } } fclose(fp); mm = qsonum - 1; if (logline4[0] != ';') { strncpy(qsonrstr, logline4 + 23, 4); mm = atoi(qsonrstr); } if (logline3[0] != ';') { if (atoi(logline3 + 23) > mm) { mm = atoi(logline3 + 23); strncpy(qsonrstr, logline3 + 23, 4); } } if (logline2[0] != ';') { if (atoi(logline2 + 23) > mm) { mm = atoi(logline2 + 23); strncpy(qsonrstr, logline2 + 23, 4); } } if (logline1[0] != ';') { if (atoi(logline1 + 23) > mm) { mm = atoi(logline1 + 23); strncpy(qsonrstr, logline1 + 23, 4); } } if ((lan_active == 1) && (exchange_serial == 1)) { if (lan_mutex == 2) { /* last mesagge from lan */ if (atoi(qsonrstr) <= highqsonr) { qsonum = highqsonr; } } else { qsonum = atoi(qsonrstr); if (qsonum < highqsonr) qsonum = highqsonr; if (highqsonr < qsonum) highqsonr = qsonum; } } else qsonum = atoi(qsonrstr); if (logline4[0] != ';') qsonum++; else qsonum = mm + 1; // if((qsonum > highqsonr) && (lan_mutex == 2)) highqsonr++; qsonr_to_str(); } tlf-1.3.0/src/setcontest.c0000644000175000017520000001250713014014714012351 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * 2013 Ervin Hegedus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * Set contest parameters * *--------------------------------------------------------------*/ #include #include "focm.h" #include "getctydata.h" #include "setcontest.h" #include "tlf.h" int setcontest(void) { extern int focm; extern int wpx; extern int pfxmult; extern int cqww; extern int dxped; extern int sprint; extern int arrldx_usa; extern int dx_arrlsections; extern int arrl_fd; extern int arrlss; extern int multlist; extern int pacc_pa_flg; extern int stewperry_flg; extern int universal; extern int other_flg; extern int exchange_serial; extern int wysiwyg_multi; extern int w_cty; extern int ve_cty; extern int zl_cty; extern int ja_cty; extern int py_cty; extern int ce_cty; extern int lu_cty; extern int vk_cty; extern int zs_cty; extern int ua9_cty; extern int contest; extern int showscore_flag; extern int searchflg; extern char whichcontest[]; extern int one_point; extern int two_point; extern int three_point; extern int qso_once; extern int sectn_mult; extern int recall_mult; extern int noleadingzeros; char wcall[] = "W1AW"; char vecall[] = "VE1AA"; char zlcall[] = "ZL1AA"; char jacall[] = "JA1AA"; char pycall[] = "PY1AA"; char cecall[] = "CE1AA"; char lucall[] = "LU1AA"; char vkcall[] = "VK1AA"; char zscall[] = "ZS6AA"; char ua9call[] = "UA9AA"; if (pfxmult == 0 && wpx == 1) wpx = 0; cqww = 0; dxped = 0; sprint = 0; arrldx_usa = 0; pacc_pa_flg = 0; focm = 0; universal = 0; contest = 0; showscore_flag = 0; searchflg = 0; one_point = 0; two_point = 0; three_point = 0; recall_mult = 0; sectn_mult = 0; noleadingzeros = 0; if (strcmp(whichcontest, "wpx") == 0) { wpx = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "cqww") == 0) { cqww = 1; recall_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; w_cty = getctydata(wcall); ve_cty = getctydata(vecall); } if (strcmp(whichcontest, "dxped") == 0) { dxped = 1; recall_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "sprint") == 0) { sprint = 1; contest = 1; showscore_flag = 1; searchflg = 1; one_point = 1; } if (strcmp(whichcontest, "arrldx_usa") == 0) { arrldx_usa = 1; recall_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "arrldx_dx") == 0) { // other_flg = 1; three_point = 1; recall_mult = 1; sectn_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "arrl_ss") == 0) { arrlss = 1; other_flg = 1; two_point = 1; qso_once = 1; exchange_serial = 1; multlist = 1; recall_mult = 0; // sectn_mult = 1; noleadingzeros = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "arrl_fd") == 0) { // other_flg = 1; recall_mult = 1; contest = 1; showscore_flag = 1; searchflg = 1; arrl_fd = 1; } if (strcmp(whichcontest, "pacc_pa") == 0) { pacc_pa_flg = 1; one_point = 1; contest = 1; showscore_flag = 1; searchflg = 1; ve_cty = getctydata(vecall); w_cty = getctydata(wcall); zl_cty = getctydata(zlcall); ja_cty = getctydata(jacall); py_cty = getctydata(pycall); ce_cty = getctydata(cecall); lu_cty = getctydata(lucall); vk_cty = getctydata(vkcall); zs_cty = getctydata(zscall); ua9_cty = getctydata(ua9call); } if (strcmp(whichcontest, "stewperry") == 0) { stewperry_flg = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "focmarathon") == 0) { foc_init(); } if (strcmp(whichcontest, "other") == 0) { other_flg = 1; one_point = 1; recall_mult = 1; wysiwyg_multi = 1; contest = 1; showscore_flag = 1; searchflg = 1; } if (strcmp(whichcontest, "universal") == 0) { contest = 1; showscore_flag = 1; searchflg = 1; } if (dx_arrlsections == 1) { contest = 1; // universal = 1; showscore_flag = 1; searchflg = 1; w_cty = getctydata(wcall); ve_cty = getctydata(vecall); } if (strcmp(whichcontest, "qso") == 0) { contest = 0; searchflg = 1; } else { searchflg = 1; //dxpedition contest = 1; showscore_flag = 1; universal = 1; } return (0); } tlf-1.3.0/src/messagechange.c0000644000175000017520000000570613014014714012753 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * Change CW messages * last change: 25.2.02 11:50 *--------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "nicebox.h" // Includes curses.h #include "tlf.h" #include "ui_utils.h" #include "writeparas.h" int message_change(int x) { extern char backgrnd_str[]; extern char message[][80]; extern char sp_return[]; extern char cq_return[]; int j; int count; int mes_length; int bufnr = 0; char printbuf[80]; clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } nicebox(14, 3, 2, 60, "Enter message (F1-12, C, S)"); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); while (1) { bufnr = toupper(key_get()); if ((bufnr == 'C') || (bufnr == 'S')) break; if (bufnr >= KEY_F(1) && bufnr <= KEY_F(12)) break; } if (bufnr == 'S') { bufnr = 12; } else if (bufnr == 'C') { bufnr = 13; } else { bufnr = bufnr - KEY_F(1); } printbuf[0] = '\0'; strncat(printbuf, message[bufnr], strlen(message[bufnr]) - 1); mvprintw(15, 4, "%s", printbuf); refreshp(); mvprintw(16, 4, ""); message[bufnr][0] = '\0'; echo(); getnstr(message[bufnr], 60); noecho(); strcat(message[bufnr], "\n"); mes_length = strlen(message[bufnr]); if (mes_length < 2) { clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } return (1); } for (count = 0; count <= mes_length; count++) { if ((message[bufnr][count] > 96) && (message[bufnr][count] < 123)) message[bufnr][count] = message[bufnr][count] - 32; } mvprintw(12, 29, ""); refreshp(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13; j <= 23; j++) { mvprintw(j, 0, backgrnd_str); } writeparas(); strncpy(sp_return, message[SP_TU_MSG], 79); strncpy(cq_return, message[CQ_TU_MSG], 79); return (0); } tlf-1.3.0/src/searchlog.h0000644000175000017520000000235613014014714012133 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 extern GPtrArray *callmaster; #define CALLMASTERARRAY(n) ((char *) g_ptr_array_index(callmaster, n)) void InitSearchPanel(void); void ShowSearchPanel(void); void HideSearchPanel(void); void searchlog(char *searchstring); int load_callmaster(void); void show_needed_sections(void); void OnLowerSearchPanel(int x, char *str); #endif /* SEARCHLOG_H */ tlf-1.3.0/src/rtty.c0000644000175000017520000001631313046414310011160 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 "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) { mvprintw(24, 0, "cannot open RTTYlog"); refreshp(); return; } else { fputc(c, ry_fp); fclose(ry_fp); } if ((c & 0x80) != 0) return; /* drop on ascii characters */ if ((c == '\n') || (c == '\r')) { /* start new line */ g_strlcpy(ry_term[0], ry_term[1], 41); g_strlcpy(ry_term[1], ry_term[2], 41); g_strlcpy(ry_term[2], ry_term[3], 41); g_strlcpy(ry_term[3], ry_term[4], 41); ry_term[4][0] = '\0'; k = 0; if (qtc_ry_capture == 1) { if (qtc_ry_currline == (QTC_RY_LINE_NR - 1) && qtc_ry_lines[qtc_ry_currline].content[0] != '\0') { for(i=0; i<(QTC_RY_LINE_NR - 1); i++) { g_strlcpy(qtc_ry_lines[i].content, qtc_ry_lines[i+1].content, 41); qtc_ry_lines[i].attr = qtc_ry_lines[i+1].attr; } } else { if (strlen(qtc_ry_lines[qtc_ry_currline].content) > 0) { qtc_ry_currline++; } } qtc_ry_lines[qtc_ry_currline].content[0] = '\0'; qtc_ry_lines[qtc_ry_currline].attr = 0; } } else { if (iscntrl( c )) { /* replace all other control characters by space */ c = ' '; } if (k >= 40) { // scroll line g_strlcpy(ry_term[0], ry_term[1], 41); g_strlcpy(ry_term[1], ry_term[2], 41); g_strlcpy(ry_term[2], ry_term[3], 41); g_strlcpy(ry_term[3], ry_term[4], 41); ry_term[4][0] = '\0'; k = 0; if (qtc_ry_capture == 1) { if (qtc_ry_currline == (QTC_RY_LINE_NR - 1) && qtc_ry_lines[qtc_ry_currline].content[0] != '\0') { for(i=0; i<(QTC_RY_LINE_NR - 1); i++) { g_strlcpy(qtc_ry_lines[i].content, qtc_ry_lines[i+1].content, 41); qtc_ry_lines[i].attr = qtc_ry_lines[i+1].attr; } } else { qtc_ry_currline++; } qtc_ry_lines[qtc_ry_currline].content[0] = '\0'; qtc_ry_lines[qtc_ry_currline].attr = 0; } } // add char to line if (qtc_ry_capture == 1) { qtc_ry_lines[qtc_ry_currline].content[k] = c; qtc_ry_lines[qtc_ry_currline].content[k+1] = '\0'; } ry_term[4][k++] = c; ry_term[4][k] = '\0'; } } /* ---------------------- display rtty ---------------------------------- */ int show_rtty(void) { extern int miniterm; extern int commentfield; extern char comment[]; if (miniterm == 0) return (-1); attroff(A_STANDOUT); attron(modify_attr(COLOR_PAIR(C_HEADER))); mvprintw(1, 0, " "); mvprintw(1, 0, "%s", ry_term[0]); mvprintw(2, 0, " "); mvprintw(2, 0, "%s", ry_term[1]); mvprintw(3, 0, " "); mvprintw(3, 0, "%s", ry_term[2]); mvprintw(4, 0, " "); mvprintw(4, 0, "%s", ry_term[3]); mvprintw(5, 0, " "); mvprintw(5, 0, "%s", ry_term[4]); if (commentfield == 0) { printcall(); } else { mvprintw(12, 54, comment); } refreshp(); attron(A_STANDOUT); return (0); } /* --------------------- receive rtty ----------------------------------- */ int rx_rtty() { extern int miniterm; extern int digikeyer; int i; int j; char line[40]; char c; static int miniterm_status = 0; /* for one time initialization */ static int state = 0; /* 0 - line start found 1 - ')' found 2 - ':' found 3 - additional space passed */ if (fdcont > 0) { if (miniterm_status == 0 && miniterm == 1) { miniterm_status = 1; ry_term[0][0] = '\0'; ry_term[1][0] = '\0'; ry_term[2][0] = '\0'; ry_term[3][0] = '\0'; ry_term[4][0] = '\0'; } i = read(fdcont, line, 39); if (i == 0) return 0; if (digikeyer == GMFSK) { /* skip begin of line until '):' if keyer == GMFSK */ /* RX (2006-03-31 14:41Z): */ for (j = 0; j < i; j++) { c = line[j]; switch (state) { case 0: if (c == ')') state++; break; case 1: if (c == ':') state++; else state = 0; break; case 2: if (c == '\n') state = 0; else state++; break; case 3: if (c == '\n') state = 0; ry_addchar( c ); break; default: break; } } } else { /* serial modem */ for (j = 0; j < i; j++) { ry_addchar( line[j] ); } } } else if (digikeyer == FLDIGI) { i = fldigi_get_rx_text(line); for (j = 0; j < i; j++) { ry_addchar( line[j] ); } } return (0); } tlf-1.3.0/src/gettxinfo.h0000644000175000017520000000175013014014714012170 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 99 int gettxinfo(void); #endif /* GETTXINFO_H */ tlf-1.3.0/src/time_update.h0000644000175000017520000000166413014014714012465 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef TIME_UPDATE_H #define TIME_UPDATE_H void time_update(void); #endif /* TIME_UPDATE_H */ tlf-1.3.0/src/initial_exchange.c0000644000175000017520000000761613014014714013456 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 list of calls and exchanges from comma separated file * and retrieves them * *-------------------------------------------------------------------------------*/ #include #include #include #include "initial_exchange.h" #include "startmsg.h" 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); } else showstring("Using initial exchange file", file); while (fgets(inputbuffer, 90, fp) != NULL) { linectr++; /* allow empty and comment lines */ if ((inputbuffer[0] == '#') || strspn(inputbuffer, " \t") == strlen(inputbuffer)-1) continue; /* strip trailing newline */ if ((loc = strchr(inputbuffer, '\n')) != NULL) *loc = '\0'; 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) { // comma found 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 */ loc += strspn(loc+1, " \t"); /* skip leading space */ strncpy(new->exchange, loc + 1, MAX_IE_LENGTH); new->exchange[MAX_IE_LENGTH] = '\0'; /* proper termination */ /* prepend new entry to existing list */ new->next = ie_listhead; ie_listhead = new; inputbuffer[0] = '\0'; } else { /* 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; } } fclose(fp); return (ie_listhead); } void free_ie_list(struct ie_list *head) { struct ie_list *next; while (head) { next = head->next; free(head); head = next; } } int test_ie_list(struct ie_list *example_ie_list) { if (example_ie_list == NULL) return (-1); while (1) { showmsg(example_ie_list->call); showmsg(example_ie_list->exchange); if (example_ie_list->next != NULL) example_ie_list = example_ie_list->next; else break; } return (0); } tlf-1.3.0/src/logview.c0000644000175000017520000000302413014014714011624 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 "tlf.h" #include "tlf_curses.h" int logview(void) { extern char logfile[]; extern char backgrnd_str[]; char comstr[40] = ""; int j, rc; strcat(comstr, "less +G "); strcat(comstr, logfile); rc=system(comstr); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); erase(); refreshp(); clear_display(); attron(COLOR_PAIR(C_LOG) | A_STANDOUT); for (j = 13 ; j <= 23 ; j++){ mvprintw(j, 0, backgrnd_str); } refreshp(); return(0); } tlf-1.3.0/src/note.c0000644000175000017520000000500113014014714011112 00000000000000/* * Tlf - contest logging program for amateur radio operators * Copyright (C) 2001-2002-2003 Rein Couperus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ------------------------------------------------------------ * Include note in log * *--------------------------------------------------------------*/ #include #include #include "clear_display.h" #include "globalvars.h" // Includes glib.h and tlf.h #include "nicebox.h" // Includes curses.h #include "scroll_log.h" int include_note(void) { extern char backgrnd_str[]; extern char logfile[]; extern char qsonrstr[]; extern char thisnode; char buffer[80] = ""; char buffer2[LOGLINELEN+1] = ""; int i; FILE *fp; attron(A_STANDOUT); mvprintw(15, 1, " "); nicebox(14, 0, 1, 78, "Note"); attron(A_STANDOUT); mvprintw(15, 1, ""); echo(); getnstr(buffer, 78); noecho(); buffer2[0] = '\0'; if (lan_active == 1) { sprintf(buffer2, "; Node %c, %d : ", thisnode, atoi(qsonrstr) - 1); } else sprintf(buffer2, "; "); if (strlen(buffer) >= 1) { strncat(buffer2, buffer, (LOGLINELEN-1) - strlen(buffer2)); memset(buffer2 + strlen(buffer2), ' ', (LOGLINELEN-1) - strlen(buffer2)); /* fill spaces */ buffer2[LOGLINELEN-1] = '\0'; if ((fp = fopen(logfile, "a")) == NULL) { endwin(); fprintf(stdout, "\nnote.c: Error opening log file.\n"); exit(1); } fputs(buffer2, fp); fputs("\n", fp); fclose(fp); strncpy (qsos[nr_qsos], buffer2, LOGLINELEN-1); nr_qsos++; scroll_log(); strncpy(logline4, buffer2, 80); /* max. 80 columns */ clear_display(); } attron(COLOR_PAIR(C_LOG | A_STANDOUT)); for (i = 14; i <= 16; i++) mvprintw(i, 0, backgrnd_str); return (0); } tlf-1.3.0/missing0000755000175000017520000001533013014014733010620 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 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=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tlf-1.3.0/ChangeLog0000644000175000017520000040263113046414310010777 000000000000002017-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.3.0/NEWS0000644000175000017520000017245113046414310007730 00000000000000tlf-1.3.0 ========= Major release. Besides a some of fixed bugs and i 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.3.0/AUTHORS0000644000175000017520000000033113014014714010263 00000000000000Rein Couperus Thomas Beierlein contributions by: Joop Stakenborg (PG4I), Dimiter Kroumov (LZ3NY), Martin OK1RR Andy G4KNO Fred DH5FS Nate N0NB Mario DH5YM Ervin HA2OS and others tlf-1.3.0/rules/0000755000175000017520000000000013046414414010436 500000000000000tlf-1.3.0/rules/aadx_as0000644000175000017520000000224313014014714011674 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.3.0/rules/Makefile.in0000644000175000017520000005127313046414406012434 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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 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@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GOBJECT_QUERY = @GOBJECT_QUERY@ GREP = @GREP@ HAMLIB_CFLAGS = @HAMLIB_CFLAGS@ HAMLIB_LIBS = @HAMLIB_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBM_LIB = @LIBM_LIB@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXMLRPC_CLIENT_LIB = @LIBXMLRPC_CLIENT_LIB@ LIBXMLRPC_LIB = @LIBXMLRPC_LIB@ LIBXMLRPC_UTIL_LIB = @LIBXMLRPC_UTIL_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_LIBS = @PANEL_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ RULES_FILES = arrl10m_dx arrl160m_usa arrldx_dx arrldx_usa arrlfd arrlss contest cqww \ dxped eusprint focmarathon lzdx pacc_pa pacc_dx qso spdx_dx spdx_sp ssa_mt \ stewperry template wpx waedc_dx waedc_eu waedc_dx_rtty waedc_eu_rtty aadx_dx aadx_as SUBDIRS = rulesdir = $(pkgdatadir)/rules rules_DATA = $(RULES_FILES) EXTRA_DIST = $(RULES_FILES) CLEANFILES = *~ all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rules/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu rules/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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: $(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.3.0/rules/waedc_eu_rtty0000644000175000017520000000245213014014714013134 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.3.0/rules/waedc_dx_rtty0000644000175000017520000000242113014014714013132 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.3.0/rules/wpx0000644000175000017520000000162513014014714011115 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.3.0/rules/arrldx_dx0000644000175000017520000000201213014014714012255 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.3.0/rules/Makefile.am0000644000175000017520000000056113014014714012406 00000000000000RULES_FILES = arrl10m_dx arrl160m_usa arrldx_dx arrldx_usa arrlfd arrlss contest cqww \ dxped eusprint focmarathon lzdx pacc_pa pacc_dx qso spdx_dx spdx_sp ssa_mt \ stewperry template wpx waedc_dx waedc_eu waedc_dx_rtty waedc_eu_rtty aadx_dx aadx_as SUBDIRS = rulesdir = $(pkgdatadir)/rules rules_DATA = $(RULES_FILES) EXTRA_DIST = $(RULES_FILES) CLEANFILES = *~ tlf-1.3.0/rules/stewperry0000644000175000017520000000165013014014714012341 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.3.0/rules/pacc_pa0000644000175000017520000000171313014014714011663 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.3.0/rules/dxped0000644000175000017520000000160213014014714011376 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.3.0/rules/arrldx_usa0000644000175000017520000000165113014014714012442 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.3.0/rules/qso0000644000175000017520000000207413014014714011100 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.3.0/rules/cqww0000644000175000017520000000306413014014714011257 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.3.0/rules/ssa_mt0000644000175000017520000000202113014014714011554 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.3.0/rules/eusprint0000644000175000017520000000170213014014714012144 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.3.0/rules/focmarathon0000644000175000017520000000265113014014714012600 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.3.0/rules/arrlss0000644000175000017520000000231513014014714011602 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 # ################################## # # # 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 CT 83 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 CT 83 # 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= # ####### END ##################### tlf-1.3.0/rules/template0000644000175000017520000000415113014014714012107 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.3.0/rules/waedc_dx0000644000175000017520000000271413014014714012055 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.3.0/rules/arrl10m_dx0000644000175000017520000000173513014014714012252 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.3.0/rules/arrl160m_usa0000644000175000017520000000176713014014714012522 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.3.0/rules/contest0000644000175000017520000000163513014014714011757 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.3.0/rules/spdx_sp0000644000175000017520000000216413014014714011756 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.3.0/rules/spdx_dx0000644000175000017520000000225113014014714011744 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.3.0/rules/pacc_dx0000644000175000017520000000225313014014714011676 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.3.0/rules/arrlfd0000644000175000017520000000317713014014714011555 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.3.0/rules/aadx_dx0000644000175000017520000000231313014014714011702 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.3.0/rules/lzdx0000644000175000017520000000176713014014714011267 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.3.0/rules/waedc_eu0000644000175000017520000000341413014014714012051 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.3.0/macros/0000755000175000017520000000000013046414414010570 500000000000000tlf-1.3.0/macros/ax_pthread.m40000644000175000017520000003267613014014714013101 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 tlf-1.3.0/macros/ax_append_flag.m40000644000175000017520000000533113014014714013676 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.3.0/macros/ax_require_defined.m40000644000175000017520000000230113014014714014562 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.3.0/macros/ax_with_curses_extra.m40000644000175000017520000002404113046414310015200 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.3.0/macros/ax_cflags_warn_all.m40000644000175000017520000001170113014014714014552 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.3.0/macros/ax_with_curses.m40000644000175000017520000006642313046414310014007 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.3.0/configure0000755000175000017520000077033413046414406011152 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Tlf 1.3.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: tlf-devel@nongnu.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Tlf' PACKAGE_TARNAME='tlf' PACKAGE_VERSION='1.3.0' PACKAGE_STRING='Tlf 1.3.0' PACKAGE_BUGREPORT='tlf-devel@nongnu.org' PACKAGE_URL='https://github.com/Tlf/tlf' ac_unique_file="src/tlf.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS AM_CFLAGS LIBXMLRPC_UTIL_LIB LIBXMLRPC_CLIENT_LIB LIBXMLRPC_LIB HAMLIB_LIBS HAMLIB_CFLAGS PANEL_LIBS CURSES_CFLAGS CURSES_LIBS 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__quote 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' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_glibtest with_ncurses with_ncursesw enable_hamlib 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 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.3.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/tlf] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Tlf 1.3.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-glibtest do not try to compile and run a test GLIB program --enable-hamlib Add support for Ham Radio Control Libraries --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 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.3.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ----------------------------------- ## ## Report this to tlf-devel@nongnu.org ## ## ----------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Tlf $as_me 1.3.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.15' 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.3.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' # Checks for programs. 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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # 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 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 # 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 pkg_config_args=glib-2.0 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 min_glib_version=2.0.0 { $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_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable=glib_compile_resources gio-2.0` GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` 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 () { unsigned int major, minor, micro; fclose (fopen ("conf.glibtest", "w")); if (sscanf("$min_glib_version", "%u.%u.%u", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_glib_version"); exit(1); } if ((glib_major_version != $glib_config_major_version) || (glib_minor_version != $glib_config_minor_version) || (glib_micro_version != $glib_config_micro_version)) { printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, glib_major_version, glib_minor_version, glib_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GLib. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((glib_major_version != GLIB_MAJOR_VERSION) || (glib_minor_version != GLIB_MINOR_VERSION) || (glib_micro_version != GLIB_MICRO_VERSION)) { printf("*** GLIB header files (version %d.%d.%d) do not match\n", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", glib_major_version, glib_minor_version, glib_micro_version); } else { if ((glib_major_version > major) || ((glib_major_version == major) && (glib_minor_version > minor)) || ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GLIB (%u.%u.%u) was found.\n", glib_major_version, glib_minor_version, glib_micro_version); printf("*** You need a version of GLIB newer than %u.%u.%u. The latest version of\n", major, minor, micro); printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_glib=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_glib" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&5 $as_echo "yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://www.freedesktop.org/software/pkgconfig/" else if test -f conf.glibtest ; then : else echo "*** Could not run GLIB test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$LIBS $GLIB_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GLIB or finding the wrong" echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GLIB is incorrectly installed." fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GLIB_CFLAGS="" GLIB_LIBS="" GLIB_GENMARSHAL="" GOBJECT_QUERY="" GLIB_MKENUMS="" GLIB_COMPILE_RESOURCES="" : fi rm -f conf.glibtest # 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build Hamlib support" >&5 $as_echo_n "checking whether to build Hamlib support... " >&6; } # Check whether --enable-hamlib was given. if test "${enable_hamlib+set}" = set; then : enableval=$enable_hamlib; wanthamlib=true else wanthamlib=false fi if test "x$wanthamlib" = xtrue; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } hamlib_modules="hamlib >= 1.2.8" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HAMLIB" >&5 $as_echo_n "checking for HAMLIB... " >&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 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $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 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.3.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . Tlf home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Tlf config.status 1.3.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _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" ;; "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. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; 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 Hamlib $wanthamlib With XML RPC $wantfldigixmlrpc -----------------------------------------------------------------------" tlf-1.3.0/depcomp0000755000175000017520000005601613014014733010604 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tlf-1.3.0/INSTALL0000644000175000017520000000137113014014714010251 00000000000000Tlf now comes with automake and autoconf. Starting with TLF-1.0.0 you need pkg-config too. 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. If support for Hamlib (>=1.2.8) is wanted, use ./configure --enable-hamlib 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. See doc/README for more details. tlf-1.3.0/config.h.in0000644000175000017520000001346513046414414011260 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.3.0/README0000644000175000017520000000236113014014714010100 00000000000000Tlf 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. Contribution ------------ * 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.3.0/doc/0000755000175000017520000000000013046414414010051 500000000000000tlf-1.3.0/doc/Makefile.in0000644000175000017520000003436113046414406012046 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ 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 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 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: $(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.3.0/doc/README.ssb0000644000175000017520000001407013014014714011433 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.3.0/doc/Makefile.am0000644000175000017520000000027213014014714012020 00000000000000DOC_FILES = FAQ New_Bandmap.txt README README.cabrillo README.ssb \ README_QTC.txt README_QTC_RTTY.txt README.RTTY doc_DATA = $(DOC_FILES) EXTRA_DIST = $(DOC_FILES) CLEANFILES = *~ tlf-1.3.0/doc/New_Bandmap.txt0000644000175000017520000000670013014014714012702 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 - 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) livetime for new spots in second (number >=300) tlf-1.3.0/doc/FAQ0000644000175000017520000000303413046414310010316 00000000000000Q: Where can I download the latest callmaster call sign data file. A: You can use the master.scp file from http://www.supercheckpartial.com Save it as 'callmaster' and copy it in the actual contest directory or in TLF's global data directory (/usr/local/share/TLF). The file in the actual contest directory takes precedence. Q: Can I add my own list of call signs to the callmaster file. A: Sure. Just add it to the end of the file - each call (in uppercase) on a line by itself. Be aware that at the moment the file is limited to 50000 entries. Q: Where can I find an actual CTY.DAT file for TLF? A: Try http://www.country-files.com/ Make sure to save it as 'cty.dat' in lower case letters. Be aware that there a two different file formats. Make sure to download the file for TLF. Q: TLF thinks that I am in cq zone 5 but in fact I am in another one. How can I fix that? A: At the moment you have to modify your cty.dat file. Look for the entry for your country, e.g. for Canada look for Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE:0 Below that entry there may be lines with special prefixes and call signs which counts also for Canada. Add yourself (VE3XYZ in the following example) to the list with the correct CQ zone appended in parentheses, e.g. VE2IM(2)[4],VY0PW(4)[3],VE3XYZ(3); That would override the default setting for the CQ zone (5 for VE) with your one (3). See also http://www.country-files.com/cty-dat-format/ for a detailed description. tlf-1.3.0/doc/README.RTTY0000644000175000017520000001232413046414310011447 00000000000000Tlf RTTY howto 2016, 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. Starting with TLF-1.3 there are two ways to comunicate with Fldigi - the old GMFSK interface and the actual XMLRPC one. Note: Using the new interface ist recommended. The old GMFSK interface will be no longer maintained and will go away soon. GMFSK interface =============== First you need to create some filesin your $HOME directory: ~$ touch TLFfldigi ~$ touch gmfsk_autofile The TLFfldigi file indicates to Fldigi, that it needs to listen the gmfsk_autofile file. Tlf writes its RTTY messages to that file, and Fldigi reads the messages from it. In your logcfg.dat, you had to set up the following lines: RTTYMODE GMFSK=/home/YOURUSER/gMFSK.log DIGIMODEM=/home/YOURUSER/gmfsk_autofile Note, that GMFSK directive tells Tlf, that it can read the output of modem, and it can be shown in its own modem window. (The miniterm window opens when you type the ":miniterm" command in callsign field.) If you want to use a serial port driven FSK modem, just replace the DIGIMODEM value for your modem path. Eg. I've build an FSK modem with the Arduino board, which reads the serial port of my PC. So, I've set it up like this: DIGIMODEM=/dev/ttyS0 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. IMPORTANT: The FLDIGI command sets the XMLRPC interface as keyer for both CW and DIGIMODE. That means you can not have FLDIGI and NETKEYER (first for Ddigimode, second for CW) at the same time. That limitation will go away in next versions of tlf. 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. 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 73, Ervin HA2OS tlf-1.3.0/doc/README_QTC_RTTY.txt0000644000175000017520000001403513014014714013055 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.3.0/doc/README0000644000175000017520000000415613014014714010651 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.3.0/doc/README_QTC.txt0000644000175000017520000003127013014014714012173 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.3.0/doc/README.cabrillo0000644000175000017520000000655213014014714012441 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: .....