Hello community,

here is the log from the commit of package fldigi for openSUSE:Factory checked 
in at 2017-10-17 01:53:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fldigi (Old)
 and      /work/SRC/openSUSE:Factory/.fldigi.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fldigi"

Tue Oct 17 01:53:08 2017 rev:5 rq:534150 version:4.0.11

Changes:
--------
--- /work/SRC/openSUSE:Factory/fldigi/fldigi.changes    2017-10-09 
19:40:46.391224802 +0200
+++ /work/SRC/openSUSE:Factory/.fldigi.new/fldigi.changes       2017-10-17 
01:53:09.568631756 +0200
@@ -1,0 +2,13 @@
+Sun Oct 15 19:10:12 UTC 2017 - [email protected]
+
+- Update to version 4.0.11
+  * Text Capture
+  * FreeBSD mod
+  * Documentation update
+  * PSK filter
+  * Audio Stream
+  * printf cleanup
+  * CW Multichannel
+  * QSY multi
+
+-------------------------------------------------------------------

Old:
----
  fldigi-4.0.10.tar.gz

New:
----
  fldigi-4.0.11.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fldigi.spec ++++++
--- /var/tmp/diff_new_pack.OaYp8K/_old  2017-10-17 01:53:10.492588479 +0200
+++ /var/tmp/diff_new_pack.OaYp8K/_new  2017-10-17 01:53:10.496588291 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           fldigi
-Version:        4.0.10
+Version:        4.0.11
 Release:        0
 Summary:        Digital modem program (hamradio)
 License:        GPL-3.0

++++++ fldigi-4.0.10.tar.gz -> fldigi-4.0.11.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/ChangeLog new/fldigi-4.0.11/ChangeLog
--- old/fldigi-4.0.10/ChangeLog 2017-09-26 01:42:10.000000000 +0200
+++ new/fldigi-4.0.11/ChangeLog 2017-10-15 05:36:02.000000000 +0200
@@ -1,8 +1,20 @@
 
 
-=Version 4.0.10=
+=Version 4.0.11=
+
+2017-10-14  David Freese  <[email protected]>
+
+       3302f0d: Text Capture
+       35387db: FreeBSD mod
+       6e94d54: Documentation update
+       e4abdbf: PSK filter
+       cd36a46: Audio Stream
+       5a9322f: printf cleanup
+       e8651ed: CW Multichannel
+       89b5207: QSY multi
 
-2017-09-25  David Freese  <[email protected]>
+
+=Version 4.0.10=
 
        949ed87: WX HamQth bug fix
        0142116: win7 mingw build fixes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/configure new/fldigi-4.0.11/configure
--- old/fldigi-4.0.10/configure 2017-09-26 01:42:41.000000000 +0200
+++ new/fldigi-4.0.11/configure 2017-10-15 05:37:13.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for fldigi 4.0.10.
+# Generated by GNU Autoconf 2.69 for fldigi 4.0.11.
 #
 # Report bugs to <[email protected]>.
 #
@@ -582,8 +582,8 @@
 # Identity of this package.
 PACKAGE_NAME='fldigi'
 PACKAGE_TARNAME='fldigi'
-PACKAGE_VERSION='4.0.10'
-PACKAGE_STRING='fldigi 4.0.10'
+PACKAGE_VERSION='4.0.11'
+PACKAGE_STRING='fldigi 4.0.11'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL=''
 
@@ -1479,7 +1479,7 @@
   # 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 fldigi 4.0.10 to adapt to many kinds of systems.
+\`configure' configures fldigi 4.0.11 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1551,7 +1551,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of fldigi 4.0.10:";;
+     short | recursive ) echo "Configuration of fldigi 4.0.11:";;
    esac
   cat <<\_ACEOF
 
@@ -1725,7 +1725,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-fldigi configure 4.0.10
+fldigi configure 4.0.11
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2406,7 +2406,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by fldigi $as_me 4.0.10, which was
+It was created by fldigi $as_me 4.0.11, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2761,9 +2761,9 @@
 
 FLDIGI_VERSION_MINOR=0
 
-FLDIGI_VERSION_PATCH=.10
+FLDIGI_VERSION_PATCH=.11
 
-FLDIGI_VERSION=4.0.10
+FLDIGI_VERSION=4.0.11
 
 FLARQ_VERSION_MAJOR=4
 
@@ -2781,7 +2781,7 @@
 $as_echo "#define FLDIGI_VERSION_MINOR 0" >>confdefs.h
 
 
-$as_echo "#define FLDIGI_VERSION_PATCH \".10\"" >>confdefs.h
+$as_echo "#define FLDIGI_VERSION_PATCH \".11\"" >>confdefs.h
 
 
 $as_echo "#define FLARQ_VERSION_MAJOR 4" >>confdefs.h
@@ -2793,7 +2793,7 @@
 $as_echo "#define FLARQ_VERSION_PATCH \".6\"" >>confdefs.h
 
 
-$as_echo "#define FLDIGI_VERSION \"4.0.10\"" >>confdefs.h
+$as_echo "#define FLDIGI_VERSION \"4.0.11\"" >>confdefs.h
 
 
 $as_echo "#define FLARQ_VERSION \"4.3.6\"" >>confdefs.h
@@ -3432,7 +3432,7 @@
 
 # Define the identity of the package.
  PACKAGE='fldigi'
- VERSION='4.0.10'
+ VERSION='4.0.11'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -13599,7 +13599,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by fldigi $as_me 4.0.10, which was
+This file was extended by fldigi $as_me 4.0.11, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -13665,7 +13665,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-fldigi config.status 4.0.10
+fldigi config.status 4.0.11
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/configure.ac 
new/fldigi-4.0.11/configure.ac
--- old/fldigi-4.0.10/configure.ac      2017-09-26 01:41:55.000000000 +0200
+++ new/fldigi-4.0.11/configure.ac      2017-10-15 05:33:53.000000000 +0200
@@ -9,7 +9,7 @@
 dnl contain other characters or be empty
 m4_define(FLDIGI_MAJOR, [4])
 m4_define(FLDIGI_MINOR, [0])
-m4_define(FLDIGI_PATCH, [.10])
+m4_define(FLDIGI_PATCH, [.11])
 m4_define(FLARQ_MAJOR,  [4])
 m4_define(FLARQ_MINOR,  [3])
 m4_define(FLARQ_PATCH,  [.6])
Binary files old/fldigi-4.0.10/po/de.gmo and new/fldigi-4.0.11/po/de.gmo differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/po/de.po new/fldigi-4.0.11/po/de.po
--- old/fldigi-4.0.10/po/de.po  2017-09-26 05:20:48.000000000 +0200
+++ new/fldigi-4.0.11/po/de.po  2017-10-15 05:52:30.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: fldigi 3.22.01\n"
 "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n"
-"POT-Creation-Date: 2017-09-25 22:20-0500\n"
+"POT-Creation-Date: 2017-10-14 22:52-0500\n"
 "PO-Revision-Date: 2013-10-21 13:07+0100\n"
 "Last-Translator: Marc Richter <[email protected]>\n"
 "Language-Team: German (Marc Richter) <[email protected]>\n"
@@ -1802,15 +1802,15 @@
 msgid "Macro editor - "
 msgstr "Makro Editor - "
 
-#: src/misc/macros.cxx:4110
+#: src/misc/macros.cxx:4148
 msgid "Open macro file"
 msgstr "Makrodatei laden"
 
-#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154
+#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192
 msgid "Fldigi macro definition file\t*.{mdf}"
 msgstr "Fldigi Makro Definitions Datei\t*.{mdf}"
 
-#: src/misc/macros.cxx:4153
+#: src/misc/macros.cxx:4191
 msgid "Save macro file"
 msgstr "Makrodatei speichern"
 
Binary files old/fldigi-4.0.10/po/es.gmo and new/fldigi-4.0.11/po/es.gmo differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/po/es.po new/fldigi-4.0.11/po/es.po
--- old/fldigi-4.0.10/po/es.po  2017-09-26 05:20:47.000000000 +0200
+++ new/fldigi-4.0.11/po/es.po  2017-10-15 05:52:29.000000000 +0200
@@ -12,7 +12,7 @@
 msgstr ""
 "Project-Id-Version: fldigi 3.22.02\n"
 "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n"
-"POT-Creation-Date: 2017-09-25 22:20-0500\n"
+"POT-Creation-Date: 2017-10-14 22:52-0500\n"
 "PO-Revision-Date: 2014-11-18 22:43-0500\n"
 "Last-Translator: Pavel Milanes Costa <[email protected]>\n"
 "Language-Team: Spanish (Pavel Milanes Costa) <[email protected]>\n"
@@ -1817,15 +1817,15 @@
 msgid "Macro editor - "
 msgstr "Editor de  macros - "
 
-#: src/misc/macros.cxx:4110
+#: src/misc/macros.cxx:4148
 msgid "Open macro file"
 msgstr "Abrir archivo de macro"
 
-#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154
+#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192
 msgid "Fldigi macro definition file\t*.{mdf}"
 msgstr "Archivo de definición de macro para Fldigi\t*.mdf"
 
-#: src/misc/macros.cxx:4153
+#: src/misc/macros.cxx:4191
 msgid "Save macro file"
 msgstr "Guardar el archivo de macros"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/po/fldigi.pot 
new/fldigi-4.0.11/po/fldigi.pot
--- old/fldigi-4.0.10/po/fldigi.pot     2017-09-26 05:20:47.000000000 +0200
+++ new/fldigi-4.0.11/po/fldigi.pot     2017-10-15 05:52:29.000000000 +0200
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: fldigi 4.0.10\n"
+"Project-Id-Version: fldigi 4.0.11\n"
 "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n"
-"POT-Creation-Date: 2017-09-25 22:20-0500\n"
+"POT-Creation-Date: 2017-10-14 22:52-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <[email protected]>\n"
@@ -1709,15 +1709,15 @@
 msgid "Macro editor - "
 msgstr ""
 
-#: src/misc/macros.cxx:4110
+#: src/misc/macros.cxx:4148
 msgid "Open macro file"
 msgstr ""
 
-#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154
+#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192
 msgid "Fldigi macro definition file\t*.{mdf}"
 msgstr ""
 
-#: src/misc/macros.cxx:4153
+#: src/misc/macros.cxx:4191
 msgid "Save macro file"
 msgstr ""
 
Binary files old/fldigi-4.0.10/po/fr.gmo and new/fldigi-4.0.11/po/fr.gmo differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/po/fr.po new/fldigi-4.0.11/po/fr.po
--- old/fldigi-4.0.10/po/fr.po  2017-09-26 05:20:47.000000000 +0200
+++ new/fldigi-4.0.11/po/fr.po  2017-10-15 05:52:29.000000000 +0200
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: fldigi 3.22.01\n"
 "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n"
-"POT-Creation-Date: 2017-09-25 22:20-0500\n"
+"POT-Creation-Date: 2017-10-14 22:52-0500\n"
 "PO-Revision-Date: 2010-03-06 13:04+0200\n"
 "Last-Translator: Bernard Seront, F4GAR <[email protected]>\n"
 "Language-Team: French\n"
@@ -1831,16 +1831,16 @@
 msgid "Macro editor - "
 msgstr "Éditeur de macro - "
 
-#: src/misc/macros.cxx:4110
+#: src/misc/macros.cxx:4148
 msgid "Open macro file"
 msgstr "Ouvrir fichier macros"
 
-#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154
+#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192
 #, fuzzy
 msgid "Fldigi macro definition file\t*.{mdf}"
 msgstr "Fichier de définition macro Fldigi\t*.mdf"
 
-#: src/misc/macros.cxx:4153
+#: src/misc/macros.cxx:4191
 msgid "Save macro file"
 msgstr "Enregistrer fichier macros"
 
Binary files old/fldigi-4.0.10/po/it.gmo and new/fldigi-4.0.11/po/it.gmo differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/po/it.po new/fldigi-4.0.11/po/it.po
--- old/fldigi-4.0.10/po/it.po  2017-09-26 05:20:48.000000000 +0200
+++ new/fldigi-4.0.11/po/it.po  2017-10-15 05:52:29.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: fldigi 3.22.01\n"
 "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n"
-"POT-Creation-Date: 2017-09-25 22:20-0500\n"
+"POT-Creation-Date: 2017-10-14 22:52-0500\n"
 "PO-Revision-Date: 2011-12-03 13:04+0100\n"
 "Last-Translator: Pierfrancesco Caci <[email protected]>\n"
 "Language-Team: Italian\n"
@@ -1842,16 +1842,16 @@
 msgid "Macro editor - "
 msgstr "Editor delle macro - "
 
-#: src/misc/macros.cxx:4110
+#: src/misc/macros.cxx:4148
 msgid "Open macro file"
 msgstr "Apri file delle macro"
 
-#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154
+#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192
 #, fuzzy
 msgid "Fldigi macro definition file\t*.{mdf}"
 msgstr "File di definizione delle macro per Fldigi\t*.mdf"
 
-#: src/misc/macros.cxx:4153
+#: src/misc/macros.cxx:4191
 msgid "Save macro file"
 msgstr "Salva file delle macro"
 
Binary files old/fldigi-4.0.10/po/nl.gmo and new/fldigi-4.0.11/po/nl.gmo differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/po/nl.po new/fldigi-4.0.11/po/nl.po
--- old/fldigi-4.0.10/po/nl.po  2017-09-26 05:20:48.000000000 +0200
+++ new/fldigi-4.0.11/po/nl.po  2017-10-15 05:52:30.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: fldigi 3.22.01\n"
 "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n"
-"POT-Creation-Date: 2017-09-25 22:20-0500\n"
+"POT-Creation-Date: 2017-10-14 22:52-0500\n"
 "PO-Revision-Date: 2014-11-10 20:14-0600\n"
 "Last-Translator: Peter van der Post <[email protected]>\n"
 "Language-Team: Dutch\n"
@@ -1800,15 +1800,15 @@
 msgid "Macro editor - "
 msgstr "Macro editor - "
 
-#: src/misc/macros.cxx:4110
+#: src/misc/macros.cxx:4148
 msgid "Open macro file"
 msgstr "Open macrobestand"
 
-#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154
+#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192
 msgid "Fldigi macro definition file\t*.{mdf}"
 msgstr "Fldigi macro-definitiebestand\t*.{mdf}"
 
-#: src/misc/macros.cxx:4153
+#: src/misc/macros.cxx:4191
 msgid "Save macro file"
 msgstr "Bewaar macrobestand"
 
Binary files old/fldigi-4.0.10/po/pl.gmo and new/fldigi-4.0.11/po/pl.gmo differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/po/pl.po new/fldigi-4.0.11/po/pl.po
--- old/fldigi-4.0.10/po/pl.po  2017-09-26 05:20:48.000000000 +0200
+++ new/fldigi-4.0.11/po/pl.po  2017-10-15 05:52:29.000000000 +0200
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: fldigi 3.23.14\n"
 "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n"
-"POT-Creation-Date: 2017-09-25 22:20-0500\n"
+"POT-Creation-Date: 2017-10-14 22:52-0500\n"
 "PO-Revision-Date: 2016-09-24 19:28+0200\n"
 "Last-Translator: Roman Bagiński <[email protected]>\n"
 "Language-Team: Polish (Roman Bagiński) <[email protected]>\n"
@@ -1777,15 +1777,15 @@
 msgid "Macro editor - "
 msgstr "Edytor makro - "
 
-#: src/misc/macros.cxx:4110
+#: src/misc/macros.cxx:4148
 msgid "Open macro file"
 msgstr "Otwórz plik makro"
 
-#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154
+#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192
 msgid "Fldigi macro definition file\t*.{mdf}"
 msgstr "Plik definicji makro Fldigi\t*.mdf"
 
-#: src/misc/macros.cxx:4153
+#: src/misc/macros.cxx:4191
 msgid "Save macro file"
 msgstr "Zapisz plik makro"
 
Binary files old/fldigi-4.0.10/po/ru.gmo and new/fldigi-4.0.11/po/ru.gmo differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/po/ru.po new/fldigi-4.0.11/po/ru.po
--- old/fldigi-4.0.10/po/ru.po  2017-09-26 05:20:49.000000000 +0200
+++ new/fldigi-4.0.11/po/ru.po  2017-10-15 05:52:30.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: fldigi 3.23.21.6\n"
 "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n"
-"POT-Creation-Date: 2017-09-25 22:20-0500\n"
+"POT-Creation-Date: 2017-10-14 22:52-0500\n"
 "PO-Revision-Date: 2017-03-14 14:10+0500\n"
 "Last-Translator: RX9CDR <[email protected]>\n"
 "Language-Team: RX9CDR Russia, tnx for help UV7QAE Ukraina <[email protected]>\n"
@@ -1753,15 +1753,15 @@
 msgid "Macro editor - "
 msgstr "Редактор макросов - "
 
-#: src/misc/macros.cxx:4110
+#: src/misc/macros.cxx:4148
 msgid "Open macro file"
 msgstr "Открыть файл макросов"
 
-#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154
+#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192
 msgid "Fldigi macro definition file\t*.{mdf}"
 msgstr "Fldigi файл определения макроса\t*.{mdf}"
 
-#: src/misc/macros.cxx:4153
+#: src/misc/macros.cxx:4191
 msgid "Save macro file"
 msgstr "Записать файл макроса"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/cw_rtty/view_cw.cxx 
new/fldigi-4.0.11/src/cw_rtty/view_cw.cxx
--- old/fldigi-4.0.10/src/cw_rtty/view_cw.cxx   2017-09-25 13:03:44.000000000 
+0200
+++ new/fldigi-4.0.11/src/cw_rtty/view_cw.cxx   2017-10-02 20:06:08.000000000 
+0200
@@ -47,7 +47,7 @@
 
 extern waterfall *wf;
 
-#define CH_SPACING 25
+#define CH_SPACING 50
 #define VCW_FFT_SIZE 2048 // must be a factor of 2
 
 enum {READY, NOT_READY};
@@ -214,7 +214,7 @@
 //                             && cw_receive_state == POST_TONE) {
 
                                std::string code = morse->rx_lookup(rx_rep_buf);
-                               if (code.length()) {
+                               if (code.empty()) {
                                        decode_str.clear();
                                        cw_receive_state = KEYUP;
                                        rx_rep_buf.clear();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/include/configuration.h 
new/fldigi-4.0.11/src/include/configuration.h
--- old/fldigi-4.0.10/src/include/configuration.h       2017-09-25 
13:03:44.000000000 +0200
+++ new/fldigi-4.0.11/src/include/configuration.h       2017-10-07 
17:22:49.000000000 +0200
@@ -227,9 +227,11 @@
         ELEM_(bool, tx_lowercase, "TX_LOWERCASE",                              
         \
               "Transmit all text in lowercase",                                
         \
               false)                                                           
         \
-        /* PSK, filter can be 0, 1, 2, 3 or 4 */                               
         \
+        /* PSK, filter can be 0, 1, 2 */                                       
         \
         ELEM_(int, PSK_filter, "PSKFILTER",                                    
         \
-              "Not configurable; must always be 0",                            
         \
+              "0 - PskCore filter\n"                                           
         \
+              "1 - Raised cosine / sinc filter\n"                              
         \
+              "2 - G3PLX (gmfsk) filter",                                      
         \
               0)                                                               
         \
         ELEM_(bool, pskbrowser_on, "PSKBROWSER_ON",                            
         \
               "Enable psk multi-channel detector - disable for very slow 
cpus",         \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/include/pskcoeff.h 
new/fldigi-4.0.11/src/include/pskcoeff.h
--- old/fldigi-4.0.10/src/include/pskcoeff.h    2017-07-22 15:25:44.000000000 
+0200
+++ new/fldigi-4.0.11/src/include/pskcoeff.h    2017-10-07 17:22:49.000000000 
+0200
@@ -23,11 +23,13 @@
 
 #define        FIRLEN  64
 
-extern double gmfir1c[FIRLEN];
-extern double gmfir2c[FIRLEN];
+extern double gmfir1c[];
+extern double gmfir2c[];
+extern double pskcore_filter[];
+
 extern double syncfilt[16];
 
-extern void raisedcosfilt(double *);
-extern void wsincfilt(double *, double fc, bool blackman);
+extern void raisedcosfilt(double *, int len);
+extern void wsincfilt(double *, double fc, int len, bool blackman);
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/misc/macros.cxx 
new/fldigi-4.0.11/src/misc/macros.cxx
--- old/fldigi-4.0.10/src/misc/macros.cxx       2017-09-25 13:03:44.000000000 
+0200
+++ new/fldigi-4.0.11/src/misc/macros.cxx       2017-10-02 20:05:06.000000000 
+0200
@@ -55,6 +55,7 @@
 #include "utf8file_io.h"
 #include "xmlrpc.h"
 #include "rigio.h"
+#include "strutil.h"
 
 #include <FL/Fl.H>
 #include <FL/filename.H>
@@ -2926,14 +2927,23 @@
        do_qsy(false);
 }
 
+struct rfafmd { int rf; int af; std::string mdname;
+       rfafmd(int a, int b, std::string nm) { rf = a; af = b; mdname = nm;}
+       rfafmd(int a, int b) {rf = a; af = b; mdname = 
active_modem->get_mode_name();}
+       rfafmd(){rf = af = 0; mdname = active_modem->get_mode_name();}
+};
+static queue<rfafmd> fpairs;
+
 static void pQSY(std::string &s, size_t &i, size_t endbracket)
 {
        if (within_exec) {
                s.replace(i, endbracket - i + 1, "");
                return;
        }
+
+       std::string mdname = active_modem->get_mode_name();
        int rf = 0;
-       int audio = 0;
+       int af = 0;
        float rfd = 0;
        std::string sGoFreq = s.substr(i+5, endbracket - i - 5);
        // no frequency(s) specified
@@ -2941,26 +2951,54 @@
                s.replace(i, endbracket-i+1, "");
                return;
        }
-       // rf first value
-       sscanf(sGoFreq.c_str(), "%f", &rfd);
-       if (rfd > 0)
-               rf = (int)(1000*rfd);
-       size_t pos;
-       if ((pos = sGoFreq.find(":")) != std::string::npos) {
-               // af second value
-               sGoFreq.erase(0, pos+1);
-               if (sGoFreq.length())
-                       sscanf(sGoFreq.c_str(), "%d", &audio);
-               if (audio < 0) audio = 0;
-               if (audio < progdefaults.LowFreqCutoff)
-                       audio = progdefaults.LowFreqCutoff;
-               if (audio > progdefaults.HighFreqCutoff)
-                       audio = progdefaults.HighFreqCutoff;
+
+       if (fpairs.empty()) {
+               std::string triad;
+               size_t pos;
+               while (!sGoFreq.empty()) {
+                       pos = sGoFreq.find(";");
+                       if (pos == std::string::npos) triad = sGoFreq;
+                       else  triad = sGoFreq.substr(0, pos);
+                       sGoFreq.erase(0, triad.length()+1);
+                       sscanf(triad.c_str(), "%f", &rfd);
+                       if (rfd > 0) rf = (int)(1000*rfd);
+                       if ((pos = triad.find(":")) != std::string::npos) {
+                               triad.erase(0,pos+1);
+                               if (triad.length())
+                                       sscanf(triad.c_str(), "%d", &af);
+                               if (af < 0) af = 0;
+                               if (af < progdefaults.LowFreqCutoff) af = 
progdefaults.LowFreqCutoff;
+                               if (af > progdefaults.HighFreqCutoff) af = 
progdefaults.HighFreqCutoff;
+                       } else af = active_modem->get_freq();
+
+                       if ((pos = triad.find(":")) != std::string::npos) {
+                               triad.erase(0, pos+1);
+                               strtrim(triad);
+                               fpairs.push(rfafmd(rf, af, triad));
+                       } else
+                               fpairs.push(rfafmd(rf,af, mdname));
+               }
        }
+
+       struct rfafmd fpair;
+
+       fpair = fpairs.front();
+       rf = fpair.rf;
+       af = fpair.af;
+       if (fpair.mdname != mdname) {
+               for (int m = 0; m < NUM_MODES; m++) {
+                       if (fpair.mdname == mode_info[m].sname) {
+                               init_modem_sync(mode_info[m].mode);
+                               break;
+                       }
+               }
+       }
+       fpairs.pop();
+
        if (rf && rf != wf->rfcarrier())
-               qsy(rf, audio);
+               qsy(rf, af);
        else
-               active_modem->set_freq(audio);
+               active_modem->set_freq(af);
 
        s.replace(i, endbracket - i + 1, "");
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/misc/socket.cxx 
new/fldigi-4.0.11/src/misc/socket.cxx
--- old/fldigi-4.0.10/src/misc/socket.cxx       2017-09-26 01:22:12.000000000 
+0200
+++ new/fldigi-4.0.11/src/misc/socket.cxx       2017-10-13 01:28:12.000000000 
+0200
@@ -618,11 +618,7 @@
        address = addr;
        size_t n = address.size();
 
-#ifdef __FreeBSD__
-       for (anum = n-1; anum >= 1; anum--) {
-#else
        for (anum = n-1; anum >= 0; anum--) {
-#endif
                ainfo = address.get(anum);
                LOG_INFO("Trying %s", address.get_str(ainfo).c_str());
                if ((sockfd = socket(ainfo->ai_family, ainfo->ai_socktype, 
ainfo->ai_protocol)) != -1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/psk/psk.cxx 
new/fldigi-4.0.11/src/psk/psk.cxx
--- old/fldigi-4.0.10/src/psk/psk.cxx   2017-09-25 13:03:44.000000000 +0200
+++ new/fldigi-4.0.11/src/psk/psk.cxx   2017-10-07 17:22:49.000000000 +0200
@@ -682,8 +682,8 @@
        vestigial_sfft = (sfft *)0;
 
        // create impulse response for experimental FIR filters
-       double fir1c[64];
-       double fir2c[64];
+       double fir1c[FIRLEN+1];
+       double fir2c[FIRLEN+1];
 
        for (int i = 0; i < MAX_CARRIERS; i++) {
                if (i < numcarriers) {
@@ -696,53 +696,40 @@
        }
 
        switch (progdefaults.PSK_filter) {
-               case 1:
-                       // use the original gmfsk matched filters
-                       for (int i = 0; i < 64; i++) {
-                               fir1c[i] = gmfir1c[i];
-                               fir2c[i] = gmfir2c[i];
-                       }
+               default :
+               case 0:
+                       // pskcore filter implementation
+                       raisedcosfilt(fir1c, FIRLEN);
+                       for (int i = 0; i <= FIRLEN; i++)
+                               fir2c[i] = pskcore_filter[i];
                        for (int i = 0; i < numcarriers; i++) {
-                               fir1[i]->init(FIRLEN, symbollen > 15 ? 
symbollen / 16 : 1, fir1c, fir1c);
-                               fir2[i]->init(FIRLEN, 1, fir2c, fir2c);
+                               fir1[i]->init(FIRLEN+1, symbollen > 15 ? 
symbollen / 16 : 1, fir1c, fir1c);
+                               fir2[i]->init(FIRLEN+1, 1, fir2c, fir2c);
                        }
                        break;
-               case 2:
-                       // creates fir1c matched sin(x)/x filter w hamming
-                       wsincfilt(fir1c, 1.0 / symbollen, false);
-                       // creates fir2c matched sin(x)/x filter w hamming
-                       wsincfilt(fir2c, 1.0 / 16.0, false);
-                       for (int i = 0; i < numcarriers; i++) {
-                               fir1[i]->init(FIRLEN, symbollen > 15 ? 
symbollen / 16 : 1, fir1c, fir1c);
-                               fir2[i]->init(FIRLEN, 1, fir2c, fir2c);
-                       }
-                       break;
-               case 3:
-                       // creates fir1c matched sin(x)/x filter w hamming
-                       wsincfilt(fir1c, 1.0 / symbollen, false);
+               case 1:
+                       // slightly better performance than G3PLX filter
+                       // creates raised cosine filter
+                       raisedcosfilt(fir1c, FIRLEN);
                        // 1/22 with Hamming window nearly identical to gmfir2c
-                       wsincfilt(fir2c, 1.0 / 22.0, false);
+                       wsincfilt(fir2c, 1.0 / 22.0, FIRLEN, false);
                        for (int i = 0; i < numcarriers; i++) {
-                               fir1[i]->init(FIRLEN, symbollen > 15 ? 
symbollen / 16 : 1, fir1c, fir1c);
-                               fir2[i]->init(FIRLEN, 1, fir2c, fir2c);
+                               fir1[i]->init(FIRLEN+1, symbollen > 15 ? 
symbollen / 16 : 1, fir1c, fir1c);
+                               fir2[i]->init(FIRLEN+1, 1, fir2c, fir2c);
                        }
                        break;
-               case 4:
-                       wsincfilt(fir2c, 1.5 / 16.0, true);
-                       for (int i = 0; i < numcarriers; i++) {
-                               fir1[i]->init_lowpass (FIRLEN, 16, 1.5 / 
symbollen);
-                               fir2[i]->init(FIRLEN, 1, fir2c, fir2c);
+               case 2:
+                       // use the original gmfsk, G3PLX, matched filters
+                       // a raised cosine filter 
+                       for (int i = 0; i <= FIRLEN; i++) {
+                               fir1c[i] = gmfir1c[i];
+                               fir2c[i] = gmfir2c[i];
                        }
-               case 0:
-               default :
-                       // creates fir1c matched sin(x)/x filter w blackman
-                       wsincfilt(fir1c, 1.0 / symbollen, true);
-                       // creates fir2c matched sin(x)/x filter w blackman
-                       wsincfilt(fir2c, 1.0 / 16.0, true);
                        for (int i = 0; i < numcarriers; i++) {
                                fir1[i]->init(FIRLEN, symbollen > 15 ? 
symbollen / 16 : 1, fir1c, fir1c);
                                fir2[i]->init(FIRLEN, 1, fir2c, fir2c);
                        }
+                       break;
        }
 
        snfilt = new Cmovavg(16);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/psk/pskcoeff.cxx 
new/fldigi-4.0.11/src/psk/pskcoeff.cxx
--- old/fldigi-4.0.10/src/psk/pskcoeff.cxx      2017-07-22 15:25:44.000000000 
+0200
+++ new/fldigi-4.0.11/src/psk/pskcoeff.cxx      2017-10-08 15:36:39.000000000 
+0200
@@ -31,13 +31,12 @@
 
 #include <math.h>
 
-
-// 64-tap raised-cosine FIR
+// 65-tap raised-cosine FIR
 // implements
 //  u[n] = (1.0 - cos(2PI * n / 64))/128.0
 // used in gmfsk, twpsk etc.
 
-double gmfir1c[64] = {
+double gmfir1c[FIRLEN+1] = {
        0.000000, //0
        0.000038, //1
        0.000150, //2
@@ -102,13 +101,14 @@
        0.000336, //61
        0.000150, //62
        0.000038, //63
+       0.000000  //64
 };
 
 // 4-bit receive filter for 31.25 baud BPSK
 // Designed by G3PLX
 //
 
-double gmfir2c[64] = {
+double gmfir2c[FIRLEN+1] = {
        0.000625000,
        0.000820912,
        0.001374651,
@@ -172,7 +172,8 @@
        0.003110600,
        0.002188141,
        0.001374651,
-       0.000820912
+       0.000820912,
+       0.000625000
 };
 
 
@@ -199,36 +200,107 @@
        0.097545161
 };
 
+double pskcore_filter[FIRLEN+1] = {
+       4.3453566e-005,         //0
+       -0.00049122414,         //1
+       -0.00078771292,         //2
+       -0.0013507826,          //3
+       -0.0021287814,          //4
+       -0.003133466,           //5
+       -0.004366817,           //6
+       -0.0058112187,          //7
+       -0.0074249976,          //8
+       -0.0091398882,          //9
+       -0.010860157,           //10
+       -0.012464086,           //11
+       -0.013807772,           //12
+       -0.014731191,           //13
+       -0.015067057,           //14
+       -0.014650894,           //15
+       -0.013333425,           //16
+       -0.01099166,            //17
+       -0.0075431246,          //18
+       -0.0029527849,          //19
+       0.0027546292,           //20
+       0.0094932775,           //21
+       0.017113308,            //22
+       0.025403511,            //23
+       0.034099681,            //24
+       0.042895839,            //25
+       0.051458575,            //26
+       0.059444853,            //27
+       0.066521003,            //28
+       0.072381617,            //29
+       0.076767694,            //30
+       0.079481619,            //31
+       0.080420311,            //32
+       0.079481619,            //33
+       0.076767694,            //34
+       0.072381617,            //35
+       0.066521003,            //36
+       0.059444853,            //37
+       0.051458575,            //38
+       0.042895839,            //39
+       0.034099681,            //40
+       0.025403511,            //41
+       0.017113308,            //42
+       0.0094932775,           //43
+       0.0027546292,           //44
+       -0.0029527849,          //45
+       -0.0075431246,          //46
+       -0.01099166,            //47
+       -0.013333425,           //48
+       -0.014650894,           //49
+       -0.015067057,           //50
+       -0.014731191,           //51
+       -0.013807772,           //52
+       -0.012464086,           //53
+       -0.010860157,           //54
+       -0.0091398882,          //55
+       -0.0074249976,          //56
+       -0.0058112187,          //57
+       -0.004366817,           //58
+       -0.003133466,           //59
+       -0.0021287814,          //60
+       -0.0013507826,          //61
+       -0.00078771292,         //62
+       -0.00049122414,         //63
+       4.3453566e-005          //64
+  };
+ 
 // experimental filters (higher precision)
 // identical to the G0TJZ filter but with double precision
-void raisedcosfilt(double *firc)
+// *firc should be double of len+1
+
+void raisedcosfilt(double *firc, int len)
 {
-       for (int i = 0; i < 64; i++)
-               firc[i] = (1.0 - cos(M_PI * i / 32.0))/128.0;
+       for (int i = 0; i <= len; i++)
+               firc[i] = (1.0 - cos(M_PI * i / 32.0))/(2*len);
 }
 
-void wsincfilt(double *firc, double fc, bool blackman)
+// *firc should be double of len+1
+void wsincfilt(double *firc, double fc, int len, bool blackman)
 {
        double normalize = 0;
 // sin(x-tau)/(x-tau)  
-       for (int i = 0; i < 64; i++)
+       for (int i = 0; i <= len; i++)
                if (i == 32)
                        firc[i] = 2.0 * M_PI * fc;
                else
                        firc[i] = sin(2*M_PI*fc*(i - 32))/(i-32);
 // blackman window
        if (blackman)
-               for (int i = 0; i < 64; i++)
-                       firc[i] = firc[i] * (0.42 - 0.5 * cos(2*M_PI*i/64) + 
0.08 * cos(4*M_PI*i/64));
+               for (int i = 0; i <= len; i++)
+                       firc[i] = firc[i] * (0.42 - 0.5 * cos(2*M_PI*i/(len-1)) 
+ 0.08 * cos(4*M_PI*i/len));
 // hamming window
        else
-               for (int i = 0; i < 64; i++)
-                       firc[i] = firc[i] * (0.54 - 0.46 * cos(2*M_PI*i/64));
+               for (int i = 0; i <= len; i++)
+                       firc[i] = firc[i] * (0.54 - 0.46 * cos(2*M_PI*i/len));
 // normalization factor
-       for (int i = 0; i < 64; i++)
+       for (int i = 0; i <= len; i++)
                normalize += firc[i];
 // normalize the filter
-       for (int i = 0; i < 64; i++)
+       for (int i = 0; i <= len; i++)
                firc[i] /= normalize;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/psk/viewpsk.cxx 
new/fldigi-4.0.11/src/psk/viewpsk.cxx
--- old/fldigi-4.0.10/src/psk/viewpsk.cxx       2017-09-25 13:03:44.000000000 
+0200
+++ new/fldigi-4.0.11/src/psk/viewpsk.cxx       2017-10-07 17:22:49.000000000 
+0200
@@ -130,8 +130,8 @@
        if (viewmode == pskmode) return;
        viewmode = pskmode;
 
-       double                  fir1c[64];
-       double                  fir2c[64];
+       double                  fir1c[FIRLEN+1];
+       double                  fir2c[FIRLEN+1];
 
        int idepth = 2;
        int isize = 2;
@@ -213,17 +213,18 @@
                break;
        }
 
-       wsincfilt(fir1c, 1.0 / symbollen, true);        // creates fir1c 
matched sin(x)/x filter w blackman
-       wsincfilt(fir2c, 1.0 / 16.0, true);                     // creates 
fir2c matched sin(x)/x filter w blackman
+       raisedcosfilt(fir1c, FIRLEN);
+       for (int i = 0; i <= FIRLEN; i++)
+               fir2c[i] = pskcore_filter[i];
 
        for (int i = 0; i < MAXCHANNELS; i++) {
                if (channel[i].fir1) delete channel[i].fir1;
                channel[i].fir1 = new C_FIR_filter();
-               channel[i].fir1->init(FIRLEN, symbollen / 16, fir1c, fir1c);
+               channel[i].fir1->init(FIRLEN+1, symbollen / 16, fir1c, fir1c);
 
                if (channel[i].fir2) delete channel[i].fir2;
                channel[i].fir2 = new C_FIR_filter();
-               channel[i].fir2->init(FIRLEN, 1, fir2c, fir2c);
+               channel[i].fir2->init(FIRLEN+1, 1, fir2c, fir2c);
 
                if (_qpsk) {
                        if (channel[i].dec) delete channel[i].dec;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/rigcontrol/rigsupport.cxx 
new/fldigi-4.0.11/src/rigcontrol/rigsupport.cxx
--- old/fldigi-4.0.10/src/rigcontrol/rigsupport.cxx     2017-07-22 
15:25:44.000000000 +0200
+++ new/fldigi-4.0.11/src/rigcontrol/rigsupport.cxx     2017-10-02 
20:08:33.000000000 +0200
@@ -148,11 +148,11 @@
                pMD = &lmodes;
        else if (lmodeCMD.empty() == false)
                pMD = &lmodeCMD;
-printf("initOptionMenus()\n");
+//printf("initOptionMenus()\n");
        if (pMD) {
                MD = pMD->begin();
                while (MD != pMD->end()) {
-printf("adding mode: %s\n", (*MD).SYMBOL.c_str());
+//printf("adding mode: %s\n", (*MD).SYMBOL.c_str());
                        qso_opMODE->add( (*MD).SYMBOL.c_str());
                        MD++;
                }
@@ -174,7 +174,7 @@
        if (pBW) {
                bw = pBW->begin();
                while (bw != pBW->end()) {
-printf("adding BW: %s\n", (*bw).SYMBOL.c_str());
+//printf("adding BW: %s\n", (*bw).SYMBOL.c_str());
                        qso_opBW->add( (*bw).SYMBOL.c_str());
                        bw++;
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/soundcard/sound.cxx 
new/fldigi-4.0.11/src/soundcard/sound.cxx
--- old/fldigi-4.0.10/src/soundcard/sound.cxx   2017-09-25 13:03:44.000000000 
+0200
+++ new/fldigi-4.0.11/src/soundcard/sound.cxx   2017-10-07 13:29:52.000000000 
+0200
@@ -1141,7 +1141,7 @@
        req_sample_rate = sample_frequency = freq;
 
        // do we need to (re)initialise the streams?
-       int ret = 0;
+       int ret = 1;
        int sr[2] = { progdefaults.in_sample_rate, progdefaults.out_sample_rate 
};
 
        // initialize stream if it is a JACK device, regardless of mode
@@ -1167,12 +1167,12 @@
                        // reset the semaphore
                        while (sem_trywait(sd[i].rwsem) == 0);
                        if (errno && errno != EAGAIN) {
-                               pa_perror(errno, "open");
+                               pa_perror(errno, "open failed");
                                throw SndException(errno);
                        }
                        start_stream(i);
 
-                       ret = 1;
+                       ret = 0;
                }
                else {
                        pause_stream(i);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/trx/trx.cxx 
new/fldigi-4.0.11/src/trx/trx.cxx
--- old/fldigi-4.0.10/src/trx/trx.cxx   2017-09-25 13:03:44.000000000 +0200
+++ new/fldigi-4.0.11/src/trx/trx.cxx   2017-10-07 17:22:41.000000000 +0200
@@ -30,6 +30,7 @@
 #include <semaphore.h>
 #include <cstdlib>
 #include <string>
+#include <string.h>
 
 #include "trx.h"
 #include "main.h"
@@ -49,6 +50,8 @@
 #include "rigsupport.h"
 #include "psm/psm.h"
 
+#include "icons.h"
+
 #include "fft-monitor.h"
 
 extern fftmon *fft_modem;
@@ -232,8 +235,9 @@
                if (!progdefaults.is_full_duplex || !RXsc_is_open ||
                        current_RXsamplerate != active_modem->get_samplerate() 
) {
                        current_RXsamplerate = active_modem->get_samplerate();
-                       RXscard->Close(O_RDONLY);
-                       if (RXscard->Open(O_RDONLY, current_RXsamplerate)) {
+                       if (RXscard) {
+                               RXscard->Close(O_RDONLY);
+                               RXscard->Open(O_RDONLY, current_RXsamplerate);
                                REQ(sound_update, progdefaults.btnAudioIOis);
                                RXsc_is_open = true;
                        }
@@ -242,7 +246,7 @@
        catch (const SndException& e) {
                LOG_ERROR("%s. line: %i", e.what(), __LINE__);
                put_status(e.what(), 5);
-               RXscard->Close();
+               if (RXscard) RXscard->Close();
                RXsc_is_open = false;
                current_RXsamplerate = 0;
 //     if (e.error() == EBUSY && progdefaults.btnAudioIOis == SND_IDX_PORT) {
@@ -259,13 +263,15 @@
        ringbuffer<double>::vector_type rbvec[2];
        rbvec[0].buf = rbvec[1].buf = 0;
 
-       RXscard->flush(O_RDONLY);
+       if (RXscard) RXscard->flush(O_RDONLY);
 
        while (1) {
                try {
                        numread = 0;
-                       while (numread < SCBLOCKSIZE && trx_state == STATE_RX)
-                               numread += RXscard->Read(fbuf + numread, 
SCBLOCKSIZE - numread);
+                       if (RXscard) {
+                               while (numread < SCBLOCKSIZE && trx_state == 
STATE_RX)
+                                       numread += RXscard->Read(fbuf + 
numread, SCBLOCKSIZE - numread);
+                       }
                        if (numread > SCBLOCKSIZE) {
                                LOG_ERROR("numread error %lu", (unsigned long) 
numread);
                                numread = SCBLOCKSIZE;
@@ -289,7 +295,7 @@
                        }
                }
                catch (const SndException& e) {
-                       RXscard->Close();
+                       if (RXscard) RXscard->Close();
                        RXsc_is_open = false;
                        LOG_ERROR("%s. line: %i", e.what(), __LINE__);
                        put_status(e.what(), 5);
@@ -342,10 +348,11 @@
                        }
                }
        }
-       if (trx_state == STATE_RESTART) return;
+       if (trx_state == STATE_RESTART)
+               return;
 
        if (!progdefaults.is_full_duplex ) {
-               RXscard->Close(O_RDONLY);
+               if (RXscard) RXscard->Close(O_RDONLY);
                RXsc_is_open = false;
        }
 }
@@ -365,9 +372,11 @@
                try {
                        if (current_TXsamplerate != 
active_modem->get_samplerate() || !TXsc_is_open) {
                                current_TXsamplerate = 
active_modem->get_samplerate();
-                               TXscard->Close(O_WRONLY);
-                               if (TXscard->Open(O_WRONLY, 
current_TXsamplerate))
+                               if (TXscard) {
+                                       TXscard->Close(O_WRONLY);
+                                       TXscard->Open(O_WRONLY, 
current_TXsamplerate);
                                        TXsc_is_open = true;
+                               }
                        }
                } catch (const SndException& e) {
                        LOG_ERROR("%s. line: %i", e.what(), __LINE__);
@@ -418,7 +427,7 @@
                                                        trx_state = STATE_RX;
                                }
                                catch (const SndException& e) {
-                                       TXscard->Close();
+                                       if (TXscard) TXscard->Close();
                                        TXsc_is_open = false;
                                        LOG_ERROR("%s", e.what());
                                        put_status(e.what(), 5);
@@ -440,11 +449,11 @@
 
                trx_xmit_wfall_end(current_TXsamplerate);
 
-               TXscard->flush();
+               if (TXscard) TXscard->flush();
 
                if (trx_state == STATE_RX) {
                        if (!progdefaults.is_full_duplex) {
-                               TXscard->Close(O_WRONLY);
+                               if (TXscard) TXscard->Close(O_WRONLY);
                                TXsc_is_open = false;
                        }
                }
@@ -474,9 +483,11 @@
                        if (!progdefaults.is_full_duplex || !TXsc_is_open ||
                                current_TXsamplerate != 
active_modem->get_samplerate() ) {
                                current_TXsamplerate = 
active_modem->get_samplerate();
-                               TXscard->Close(O_WRONLY);
-                               TXscard->Open(O_WRONLY, current_TXsamplerate);
-                               TXsc_is_open = true;
+                               if (TXscard) TXscard->Close(O_WRONLY);
+                               if (TXscard) {
+                                       TXscard->Open(O_WRONLY, 
current_TXsamplerate);
+                                       TXsc_is_open = true;
+                               }
                        }
                } catch (const SndException& e) {
                        LOG_ERROR("%s. line: %i", e.what(), __LINE__);
@@ -501,7 +512,7 @@
                        xmttune::keyup(active_modem->get_txfreq_woffset(), 
TXscard);
                }
                catch (const SndException& e) {
-                       TXscard->Close();
+                       if (TXscard) TXscard->Close();
                        TXsc_is_open = false;
                        LOG_ERROR("%s. line: %i", e.what(), __LINE__);
                        put_status(e.what(), 5);
@@ -509,11 +520,11 @@
                        current_TXsamplerate = 0;
                        return;
                }
-               TXscard->flush();
+               if (TXscard) TXscard->flush();
 
                if (trx_state == STATE_RX) {
                        if (!progdefaults.is_full_duplex) {
-                               TXscard->Close(O_WRONLY);
+                               if (TXscard) TXscard->Close(O_WRONLY);
                                TXsc_is_open = false;
                        }
                }
@@ -632,6 +643,20 @@
 }
 
 //=============================================================================
+static string reset_loop_msg;
+void show_reset_loop_alert()
+{
+       progdefaults.btnAudioIOis = SND_IDX_NULL; // file i/o
+       sound_update(progdefaults.btnAudioIOis);
+       if (btnAudioIO[0]) {
+               fl_alert2("%s", reset_loop_msg.c_str());
+               btnAudioIO[0]->value(0);
+               btnAudioIO[1]->value(0);
+               btnAudioIO[2]->value(0);
+               btnAudioIO[3]->value(1);
+       }
+}
+
 void trx_reset_loop()
 {
        if (RXscard)  {
@@ -650,12 +675,22 @@
        switch (progdefaults.btnAudioIOis) {
 #if USE_OSS
        case SND_IDX_OSS:
-               RXscard = new SoundOSS(scDevice[0].c_str());
-               RXscard->Open(O_RDONLY, current_RXsamplerate = 8000);
-               RXsc_is_open = true;
-               TXscard = new SoundOSS(scDevice[0].c_str());
-               TXscard->Open(O_WRONLY, current_TXsamplerate = 8000);
-               TXsc_is_open = true;
+               try {
+                       RXscard = new SoundOSS(scDevice[0].c_str());
+                       if (!RXscard) break;
+
+                       RXscard->Open(O_RDONLY, current_RXsamplerate = 8000);
+                       RXsc_is_open = true;
+
+                       TXscard = new SoundOSS(scDevice[0].c_str());
+                       if (!TXscard) break;
+
+                       TXscard->Open(O_WRONLY, current_TXsamplerate = 8000);
+                       TXsc_is_open = true;
+               } catch (...) {
+                       reset_loop_msg = "OSS open failure";
+                       REQ(show_reset_loop_alert);
+               }
                break;
 #endif
 #if USE_PORTAUDIO
@@ -669,6 +704,8 @@
                unsigned long tm1 = zmsec();
                int RXret = 0, TXret = 0;
                int i;
+               RXsc_is_open = false;
+               TXsc_is_open = false;
                for (i = 0; i < 10; i++) { // try 10 times
                        try {
                                if (!RXret)
@@ -687,8 +724,13 @@
                }
                unsigned long tm = zmsec() - tm1;
                if (i == 10) {
+                       if (RXscard) delete RXscard;
+                       if (TXscard) delete TXscard;
+                       RXscard = 0;
+                       TXscard = 0;
                        LOG_PERROR("Port Audio device not available");
-                       abort();
+                       reset_loop_msg = "Port Audio device not available";
+                       REQ(show_reset_loop_alert);
                } else {
                        LOG_INFO ("Port Audio device available after %0.1f 
seconds", tm / 1000.0 );
                }
@@ -697,14 +739,39 @@
 #endif
 #if USE_PULSEAUDIO
        case SND_IDX_PULSE:
-               RXscard = new SoundPulse(scDevice[0].c_str());
-               if (RXscard->Open(O_RDONLY, current_RXsamplerate = 8000))
+               try {
+                       RXscard = new SoundPulse(scDevice[0].c_str());
+                       if (!RXscard) break;
+
+                       RXscard->Open(O_RDONLY, current_RXsamplerate = 8000);
                        RXsc_is_open = true;
 
-               TXscard = new SoundPulse(scDevice[0].c_str());
-               if (progdefaults.is_full_duplex)
-                       if (TXscard->Open(O_WRONLY, current_TXsamplerate = 
8000))
+                       TXscard = new SoundPulse(scDevice[0].c_str());
+                       if (!TXscard) break;
+               
+// needed to open playback device in PaVolumeControl
+                       TXscard->Open(O_WRONLY, current_TXsamplerate = 8000);
+                       double buffer[1024];
+                       for (int i = 0; i < 1024; buffer[i++] = 0);
+                       TXscard->Write_stereo(buffer, buffer, 1024);
+
+                       if (progdefaults.is_full_duplex)
                                TXsc_is_open = true;
+                       else {
+                               TXscard->Close();
+                               TXsc_is_open = false;
+                       }
+               } catch (const SndException& e) {
+                       LOG_ERROR("%s", e.what());
+                       if (RXscard) delete RXscard;
+                       if (TXscard) delete TXscard;
+                       RXscard = 0;
+                       TXscard = 0;
+                       reset_loop_msg = "Pulse Audio error:\n";
+                       reset_loop_msg.append(e.what());
+                       reset_loop_msg.append("\n\nIs the server 
running?\nClose fldigi and execute 'pulseaudio --start'");
+                       REQ(show_reset_loop_alert);
+               }
                break;
 #endif
        case SND_IDX_NULL:
@@ -763,8 +830,36 @@
 #endif
 #if USE_PULSEAUDIO
        case SND_IDX_PULSE:
-               RXscard = new SoundPulse(scDevice[0].c_str());
-               TXscard = new SoundPulse(scDevice[0].c_str());
+               try {
+                       RXscard = new SoundPulse(scDevice[0].c_str());
+                       if (!RXscard) break;
+
+                       TXscard = new SoundPulse(scDevice[0].c_str());
+                       if (!TXscard) break;
+
+// needed to open playback device in PaVolumeControl
+                       TXscard->Open(O_WRONLY, current_TXsamplerate = 8000);
+                       double buffer[1024];
+                       for (int i = 0; i < 1024; buffer[i++] = 0);
+                       TXscard->Write_stereo(buffer, buffer, 1024);
+
+                       if (progdefaults.is_full_duplex)
+                               TXsc_is_open = true;
+                       else {
+                               TXscard->Close();
+                               TXsc_is_open = false;
+                       }
+               } catch (const SndException& e) {
+                       LOG_ERROR("%s", e.what());
+                       if (RXscard) delete RXscard;
+                       if (TXscard) delete TXscard;
+                       RXscard = 0;
+                       TXscard = 0;
+                       reset_loop_msg = "Pulse Audio error:\n";
+                       reset_loop_msg.append(e.what());
+                       reset_loop_msg.append("\n\nIs the server running?");
+                       REQ(show_reset_loop_alert);
+               }
                break;
 #endif
        case SND_IDX_NULL:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fldigi-4.0.10/src/widgets/FTextRXTX.cxx 
new/fldigi-4.0.11/src/widgets/FTextRXTX.cxx
--- old/fldigi-4.0.10/src/widgets/FTextRXTX.cxx 2017-09-25 13:03:44.000000000 
+0200
+++ new/fldigi-4.0.11/src/widgets/FTextRXTX.cxx 2017-10-15 03:37:28.000000000 
+0200
@@ -476,7 +476,7 @@
        Fl_Input2* target = 0;
 
        if (progdefaults.logging != LOG_QSO) {
-               if (call.match(s)) { // point p to substring
+               if ((inpCall->value()[0] == 0) && call.match(s)) { // point p 
to substring
                        const regmatch_t& offsets = call.suboff()[1];
                        p = s + offsets.rm_so;
                        *(s + offsets.rm_eo) = '\0';


Reply via email to