diff --git a/ChangeLog b/ChangeLog
index 0a6f3c79..5308fca3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,34 @@
+2020-06-26 David Freese <w1hkj@bellsouth.net>
+ ca67a417e: alpha
+ 9a6c2ae4c: Field Day Logger
+ a9ccff775: flarq update
-=Version 4.1.13=
+2020-06-25 Rik van Riel <riel@surriel.com>
+
+ a38bb1e36: Navtex
+
+2020-06-22 David Freese <w1hkj@bellsouth.net>
+
+ 85c25e27f: Sound Record
+ f952c0808: Freq Control
+
+2020-06-17 Richard Shaw <hobbes1069@gmail.com>
-2020-05-26 David Freese <w1hkj@bellsouth.net>
+ c5ffb269c: MinGW64
+
+2020-06-12 David Freese <w1hkj@bellsouth.net>
+
+ d9f379f4e: FSK HELL
+ b3f5f6b16: Cabrillo logs
+ ed7c443ec: sound.cxx warning
+ 84f1f3679: SNDFILE
+ 05000ef4b: Store/Recall
+ b70cc0b68: wefax
+ 5a06abd08: Rx Monitor
+
+
+=Version 4.1.13=
a09931a2e: doxygen
1caa2a467: wefax
diff --git a/configure.ac b/configure.ac
index 3e3f58e9..9479e59a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,10 +9,10 @@ dnl major and minor must be integers; patch may
dnl contain other characters or be empty
m4_define(FLDIGI_MAJOR, [4])
m4_define(FLDIGI_MINOR, [1])
-m4_define(FLDIGI_PATCH, [.13])
+m4_define(FLDIGI_PATCH, [.13.18])
m4_define(FLARQ_MAJOR, [4])
m4_define(FLARQ_MINOR, [3])
-m4_define(FLARQ_PATCH, [.7])
+m4_define(FLARQ_PATCH, [.7.08])
AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[]FLDIGI_PATCH, [fldigi-devel@sourceforge.net])
@@ -233,8 +233,11 @@ fi
# Set ac_cv_sndfile to yes/no
# Define USE_SNDFILE in config.h
# Substitute SNDFILE_CFLAGS and SNDFILE_LIBS in Makefile
-AC_FLDIGI_PKG_CHECK([sndfile], [sndfile >= 1.0.10], [yes], [yes],
+# name, version, show-in-help?, optional?, help-text, [am-cond]
+if test "x$ac_cv_want_fldigi" = "xyes"; then
+ AC_FLDIGI_PKG_CHECK([sndfile], [sndfile >= 1.0.10], [yes], [no],
[enable reading/writing of audio files via libsndfile @<:@autodetect@:>@] )
+fi
### portaudio
# Set ac_cv_portaudio to yes/no
@@ -295,6 +298,13 @@ AC_FLDIGI_PKG_CHECK([libmbedtls], [libmbedtls >= 2.16.0],
[yes], [yes], [use mbedtls libraries @<:@autodetect@:>@],
[ENABLE_LIBMBEDTLS])
+### regex
+# Does no provide a pkgconf file, so find manually
+AC_SEARCH_LIBS([regcomp], [regex], [], [
+ AC_MSG_ERROR([Unable to find a compatible regex library.])
+])
+
+
### libintl
# Substitute INTL_CFLAGS in Makefile
# Substitute INTL_LIBS in Makefile
@@ -358,7 +368,6 @@ fi
if test "x$ac_cv_want_fldigi" = "xyes"; then
AC_MSG_RESULT([ fldigi build options:
- sndfile ..................... $ac_cv_sndfile
oss ......................... $ac_cv_oss
portaudio ................... $ac_cv_portaudio
pulseaudio .................. $ac_cv_pulseaudio
diff --git a/data/win32/fldigi.nsi b/data/win32/fldigi.nsi
index 63c3fb26..2d89ea5b 100644
--- a/data/win32/fldigi.nsi
+++ b/data/win32/fldigi.nsi
@@ -121,6 +121,7 @@ SectionEnd
SectionIn RO
SetOutPath $INSTDIR
File "${FLDIGI_BINARY}"
+ File /nonfatal "${DIST_DEPS}/*"
!ifdef FLDIGI_LOCALE_DIR
File /r "${FLDIGI_LOCALE_PATH}/${FLDIGI_LOCALE_DIR}"
!endif
diff --git a/fldigi_doxygen/user_src_docs/WEFAX.txt b/fldigi_doxygen/user_src_docs/WEFAX.txt
index e5414c56..68a67c12 100644
--- a/fldigi_doxygen/user_src_docs/WEFAX.txt
+++ b/fldigi_doxygen/user_src_docs/WEFAX.txt
@@ -81,12 +81,9 @@ Select an input FIR (Finite Impulse Response) filter:
<li> narrow</li>
<li> medium</li>
<li> wide</li>
-<li> Blackman</li>
-<li> Hamming</li>
-<li> Hanning</li>
</ul>
There is rarely any QRM on a government WEFAX broadcast, but the filter selection might
-improve the decoded signal to noise ratio. My preference is to use the Blackman filter.
+improve the decoded signal to noise ratio. Start with the medium filter setting.
<br>
\image html wefax-filter-impulse.png ""
\image latex wefax-filter-impulse.png "" width=5.0in
diff --git a/m4/macosx.m4 b/m4/macosx.m4
index 17545b8c..b61b953c 100644
--- a/m4/macosx.m4
+++ b/m4/macosx.m4
@@ -8,12 +8,15 @@ case "$target_os" in
;;
esac
-if test "$target_darwin" = "yes"; then
- AC_MSG_NOTICE([using bundled GNU regex on $target_os])
- # pretend that the regex.h check failed so that we use the bundled regex code
- ac_cv_header_regex_h=no
- AC_DEFINE([HAVE_REGEX_H], 0, [Define to 1 if you have the <regex.h> header file.])
-fi
+### Try to use system regex
+#
+#if test "$target_darwin" = "yes"; then
+# AC_MSG_NOTICE([using bundled GNU regex on $target_os])
+# # pretend that the regex.h check failed so that we use the bundled regex code
+# ac_cv_header_regex_h=no
+# AC_DEFINE([HAVE_REGEX_H], 0, [Define to 1 if you have the <regex.h> header file.])
+#fi
+
AC_ARG_ENABLE([mac-universal], AC_HELP_STRING([--enable-mac-universal],
[build a universal binary on Mac OS X @<:@no@:>@]),
diff --git a/m4/np-compat.m4 b/m4/np-compat.m4
index 7b8b8100..ca1cc5ee 100644
--- a/m4/np-compat.m4
+++ b/m4/np-compat.m4
@@ -17,9 +17,6 @@ AC_DEFUN([AC_FLDIGI_NP_COMPAT], [
if test "x$target_mingw32" = "xyes"; then
# Newer versions of mingw32 comes with pthread.
sem_libs="pthreadGC2 pthread"
- # pretend that the regex.h check failed so that we use the bundled regex code
- ac_cv_header_regex_h=no
- AC_DEFINE([HAVE_REGEX_H], 0, [Define to 1 if you have the <regex.h> header file.])
else
sem_libs="pthread rt"
fi
diff --git a/scripts/mingw-find-deps b/scripts/mingw-find-deps
new file mode 100755
index 00000000..aff023b5
--- /dev/null
+++ b/scripts/mingw-find-deps
@@ -0,0 +1,89 @@
+#!/bin/bash
+
+# Halt on errors
+set -e
+
+installroot=$PWD/dist;
+
+if [ $# -lt 1 ]; then
+ echo "Usage: $0 win32_binary [--debug]"
+ exit 1;
+fi
+
+if [ ! -f "$1" ]; then
+ echo "Cannot find file $1"
+ echo ""
+ echo "Usage: $0 win32_binary [--debug]"
+ exit 1;
+fi
+
+
+# Note: This script is written to be used with the Fedora mingw environment
+if [ "$(file $1 | grep -o x86-64)" == "x86-64" ]; then
+ echo "Scanning dependencies for $1 (64bit binary)"
+ MINGWROOT=/usr/x86_64-w64-mingw32/sys-root/mingw
+else
+ echo "Scanning dependencies for $1 (32bit binary)"
+ MINGWROOT=/usr/i686-w64-mingw32/sys-root/mingw
+fi
+
+if [ "$2" == "--debug" ]; then
+ withdebug=1
+fi
+
+isqt5=false
+
+# Collect dependencies
+function isnativedll {
+ # If the import library exists but not the dynamic library, the dll ist most likely a native one
+ local lower=${1,,}
+ [ ! -e $MINGWROOT/bin/$1 ] && [ -f $MINGWROOT/lib/lib${lower/%.*/.a} ] && return 0;
+ return 1;
+}
+
+function cpDep {
+# Copy the specified binary dependency
+ destdir="$installroot/${2:-$(dirname $1)}"
+ name="$(basename $1)"
+ test -e "$destdir/$name" && return 0
+ if [ ! -e "$MINGWROOT/$1" ]; then
+ echo "Error: missing $MINGWROOT/$1"
+ return 0
+ fi
+ mkdir -p "$destdir" || return 1
+ echo "Copying $1"
+ cp -a "$MINGWROOT/$1" "$destdir/$name" || return 1
+ if [ $withdebug ]; then test -e "$MINGWROOT/$1.debug" && cp "$MINGWROOT/$1.debug" "$destdir/$name.debug" && echo "Copying $1.debug" || echo "Warning: missing $name.debug"; fi
+ autoCpDeps $destdir/$name || return 1
+ return 0
+}
+
+function autoCpDeps {
+# Collects and links the dependencies of the specified binary
+ for dep in $(mingw-objdump -p "$1" | grep "DLL Name" | awk '{print $3}'); do
+ # Hacks / Workarounds
+ if [ "$dep" == "LIBPQ.dll" ]; then
+ dep="libpq.dll"
+ elif [ "$dep" == "QtUiToolsd4.dll" ]; then
+ continue;
+ elif [ "$dep" == "Qt5Core.dll" ]; then
+ isqt5=true
+ fi
+
+ if [ ! -f "$dep" ] && ! isnativedll "$dep"; then
+ cpDep bin/$dep || return 1
+ fi
+ done
+ return 0
+}
+
+mkdir -p dist/bin
+autoCpDeps $1
+if [ $withdebug ]; then
+ cpDep bin/gdb.exe
+fi
+if [[ $isqt5 == true ]]; then
+ mkdir -p dist/bin/platforms
+ cp -a $MINGWROOT/lib/qt5/plugins/platforms/qwindows.dll dist/bin/platforms/
+ autoCpDeps $MINGWROOT/lib/qt5/plugins/platforms/qwindows.dll
+fi
diff --git a/scripts/mknsisinst.sh b/scripts/mknsisinst.sh
index 3467344a..92995656 100755
--- a/scripts/mknsisinst.sh
+++ b/scripts/mknsisinst.sh
@@ -16,6 +16,7 @@ fi
PWD=`pwd`
data="${PWD}/$1"
build="${PWD}/$2"
+dist="${PWD}/../dist/bin"
# more sanity checks
for d in "$data" "$build"; do
@@ -54,6 +55,8 @@ if test "x$USE_NLS" = "xyes" && make -C "$srcdir/../po" install prefix="$build"
def="$def -DFLDIGI_LOCALE_PATH=$build/share -DFLDIGI_LOCALE_DIR=locale"
fi
+def="$def -DDIST_DEPS=$dist"
+
$MAKENSIS -V2 -NOCD -D"INSTALLER_FILE=$INSTALLER_FILE" -D"LICENSE_FILE=$data/../COPYING" \
-D"SUPPORT_URL=$PACKAGE_HOME" -D"UPDATES_URL=$PACKAGE_DL" -D"FLDIGI_DOCS_URL=$PACKAGE_DOCS" \
-D"FLARQ_DOCS_URL=$FLARQ_DOCS" -D"GUIDE_URL=$PACKAGE_GUIDE" $def "$data/win32/fldigi.nsi"
diff --git a/src/Makefile.am b/src/Makefile.am
index e34fdb53..92442828 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -48,7 +48,7 @@ COMMON_WIN32_RES_SRC = common.rc
BENCHMARK_SRC = include/benchmark.h misc/benchmark.cxx
-REGEX_SRC = compat/regex.h compat/regex.c
+#REGEX_SRC = compat/regex.h compat/regex.c
STACK_SRC = include/stack.h misc/stack.cxx
@@ -980,9 +980,7 @@ flarq_SOURCES += \
flarq-src/include/flarq.h \
flarq-src/include/flarqenv.h \
flarq-src/include/xml_server.h \
- include/Fl_Text_Display_mod.H \
- include/Fl_Text_Editor_mod.H \
- include/FTextView.h \
+ include/F_Edit.h \
include/fileselect.h \
include/flinput2.h \
include/flmisc.h \
@@ -1015,7 +1013,8 @@ flarq_SOURCES += \
widgets/Fl_Text_Buffer_mod.cxx \
widgets/Fl_Text_Display_mod.cxx \
widgets/Fl_Text_Editor_mod.cxx \
- widgets/FTextView.cxx
+ widgets/FTextView.cxx \
+ widgets/F_Edit.cxx
# Additional files that we distribute
EXTRA_DIST = \
diff --git a/src/compat/mingw.c b/src/compat/mingw.c
index efc7dc7f..252459e3 100644
--- a/src/compat/mingw.c
+++ b/src/compat/mingw.c
@@ -30,6 +30,7 @@
// ----------------------------------------------------------------------------
#include <config.h>
+#include <winsock2.h>
#include <ctype.h>
#include "compat.h"
@@ -124,7 +125,7 @@ static void wsa_init(void)
atexit((void(*)(void)) WSACleanup);
}
-int socketpair(int family, int type, int protocol, int *sv)
+int socketpair(int family, int type, int protocol, SOCKET *sv)
{
struct sockaddr_in addr;
SOCKET sfd;
diff --git a/src/compat/mingw.h b/src/compat/mingw.h
index f8cec282..530e52e5 100644
--- a/src/compat/mingw.h
+++ b/src/compat/mingw.h
@@ -50,7 +50,6 @@
extern "C" {
#endif
-typedef int pid_t;
typedef long suseconds_t;
#define hstrerror strerror
@@ -103,7 +102,7 @@ int mingw_rename(const char*, const char*);
#endif
int nanosleep (const struct timespec *req, struct timespec *rem);
-int socketpair(int family, int type, int protocol, int *sv);
+int socketpair(int family, int type, int protocol, SOCKET *sv);
/* uname */
#define UTSNAME_MAX_ 257
diff --git a/src/compat/regex.c b/src/compat/regex.c
index 6045cd0a..74e8ee89 100644
--- a/src/compat/regex.c
+++ b/src/compat/regex.c
@@ -3747,7 +3747,7 @@ re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
regstart[r] = old_regstart[r];
/* xx why this test? */
- if ((int) old_regend[r] >= (int) regstart[r])
+ if ((intptr_t) old_regend[r] >= (intptr_t) regstart[r])
regend[r] = old_regend[r];
}
}
diff --git a/src/dialogs/confdialog.cxx b/src/dialogs/confdialog.cxx
index fa569a49..69e1b8df 100644
--- a/src/dialogs/confdialog.cxx
+++ b/src/dialogs/confdialog.cxx
@@ -7264,6 +7264,12 @@ static void cb_cntTxOffset(Fl_Spinner2* o, void*) {
progdefaults.changed = true;
}
+Fl_Counter *cntRIT=(Fl_Counter *)0;
+
+static void cb_cntRIT(Fl_Counter* o, void*) {
+ progdefaults.RIT=o->value();
+}
+
Fl_ListBox *listbox_wav_samplerate=(Fl_ListBox *)0;
static void cb_listbox_wav_samplerate(Fl_ListBox* o, void*) {
@@ -13549,8 +13555,8 @@ le Earth)"));
{ Fl_Choice* o = wefax_choice_rx_filter = new Fl_Choice(302, 137, 110, 24, _("Filter"));
wefax_choice_rx_filter->down_box(FL_BORDER_BOX);
wefax_choice_rx_filter->callback((Fl_Callback*)cb_wefax_choice_rx_filter);
- o->add("Narrow|Middle|Wide|Blackman|Hanning|Hamming");
- o->value(progdefaults.wefax_filter);
+ o->add("Narrow|Medium|Wide");
+ o->value(progdefaults.wefax_filter < 3 ? progdefaults.wefax_filter : 0);
} // Fl_Choice* wefax_choice_rx_filter
{ Fl_Counter* o = auto_after_nrows = new Fl_Counter(588, 81, 150, 24, _("Enable Auto-align after"));
auto_after_nrows->minimum(5);
@@ -16112,21 +16118,25 @@ i.e. localhost"));
} // Fl_Round_Button* btn_is_full_duplex
AudioDuplex->end();
} // Fl_Group* AudioDuplex
- { AudioAlerts = new Fl_Group(255, 235, 500, 80, _("Alerts / Rx Audio"));
+ { AudioAlerts = new Fl_Group(255, 235, 500, 90);
AudioAlerts->box(FL_ENGRAVED_FRAME);
- AudioAlerts->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
- { menuAlertsDev = new Fl_Choice(427, 255, 310, 25, _("Playback"));
+ AudioAlerts->align(Fl_Align(FL_ALIGN_CENTER));
+ { menuAlertsDev = new Fl_Choice(265, 260, 365, 25, _("Audio device shared by Audio Alerts and Rx Monitor"));
menuAlertsDev->tooltip(_("Audio output device"));
menuAlertsDev->down_box(FL_BORDER_BOX);
menuAlertsDev->callback((Fl_Callback*)cb_menuAlertsDev);
+ menuAlertsDev->align(Fl_Align(FL_ALIGN_TOP_LEFT));
} // Fl_Choice* menuAlertsDev
- { Fl_Round_Button* o = btn_enable_audio_alerts = new Fl_Round_Button(427, 283, 225, 25, _("Enable Audio alerts"));
+ { Fl_Round_Button* o = btn_enable_audio_alerts = new Fl_Round_Button(657, 260, 76, 25, _("Enable"));
btn_enable_audio_alerts->tooltip(_("First select audio alert playback device"));
btn_enable_audio_alerts->down_box(FL_DOWN_BOX);
btn_enable_audio_alerts->selection_color((Fl_Color)1);
btn_enable_audio_alerts->callback((Fl_Callback*)cb_btn_enable_audio_alerts);
o->value(progdefaults.enable_audio_alerts);
} // Fl_Round_Button* btn_enable_audio_alerts
+ { Fl_Box* o = new Fl_Box(265, 295, 473, 22, _("Note: must be selected and enabled for Rx Audio monitoring!"));
+ o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
AudioAlerts->end();
} // Fl_Group* AudioAlerts
CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Devices"));
@@ -16199,11 +16209,10 @@ nce.\nYou may change the state from either location.\n..."));
{ Fl_Group* o = new Fl_Group(200, 0, 600, 350, _("Soundcard/Settings"));
o->box(FL_ENGRAVED_BOX);
o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
- o->hide();
{ grpAudioSampleRate = new Fl_Group(260, 48, 490, 90, _("Sample rate"));
grpAudioSampleRate->box(FL_ENGRAVED_FRAME);
grpAudioSampleRate->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
- { Fl_ListBox* o = menuInSampleRate = new Fl_ListBox(270, 77, 100, 22, _("Capture"));
+ { Fl_ListBox* o = menuInSampleRate = new Fl_ListBox(284, 77, 100, 22, _("Capture"));
menuInSampleRate->tooltip(_("Force a specific sample rate. Select \"Native\" if \"Auto\"\ndoes not work we\
ll with your audio device."));
menuInSampleRate->box(FL_DOWN_BOX);
@@ -16220,7 +16229,7 @@ ll with your audio device."));
o->labelsize(FL_NORMAL_SIZE);
menuInSampleRate->end();
} // Fl_ListBox* menuInSampleRate
- { Fl_ListBox* o = menuOutSampleRate = new Fl_ListBox(270, 107, 100, 22, _("Playback"));
+ { Fl_ListBox* o = menuOutSampleRate = new Fl_ListBox(284, 107, 100, 22, _("Playback"));
menuOutSampleRate->box(FL_DOWN_BOX);
menuOutSampleRate->color(FL_BACKGROUND2_COLOR);
menuOutSampleRate->selection_color(FL_BACKGROUND_COLOR);
@@ -16256,7 +16265,7 @@ ll with your audio device."));
{ Fl_Group* o = new Fl_Group(260, 138, 490, 62, _("Corrections"));
o->box(FL_ENGRAVED_FRAME);
o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
- { Fl_Spinner2* o = cntRxRateCorr = new Fl_Spinner2(270, 168, 85, 20, _("RX ppm"));
+ { Fl_Spinner2* o = cntRxRateCorr = new Fl_Spinner2(284, 165, 85, 20, _("RX ppm"));
cntRxRateCorr->tooltip(_("RX sound card correction"));
cntRxRateCorr->box(FL_NO_BOX);
cntRxRateCorr->color(FL_BACKGROUND_COLOR);
@@ -16273,7 +16282,7 @@ ll with your audio device."));
o->maximum(50000);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Spinner2* cntRxRateCorr
- { Fl_Spinner2* o = cntTxRateCorr = new Fl_Spinner2(431, 168, 85, 20, _("TX ppm"));
+ { Fl_Spinner2* o = cntTxRateCorr = new Fl_Spinner2(431, 165, 85, 20, _("TX ppm"));
cntTxRateCorr->tooltip(_("TX sound card correction"));
cntTxRateCorr->box(FL_NO_BOX);
cntTxRateCorr->color(FL_BACKGROUND_COLOR);
@@ -16290,7 +16299,7 @@ ll with your audio device."));
o->maximum(50000);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Spinner2* cntTxRateCorr
- { Fl_Spinner2* o = cntTxOffset = new Fl_Spinner2(593, 168, 85, 20, _("TX offset"));
+ { Fl_Spinner2* o = cntTxOffset = new Fl_Spinner2(591, 165, 85, 20, _("TX offset"));
cntTxOffset->tooltip(_("Difference between Rx & Tx freq (rig offset)"));
cntTxOffset->box(FL_NO_BOX);
cntTxOffset->color(FL_BACKGROUND_COLOR);
@@ -16309,6 +16318,21 @@ ll with your audio device."));
} // Fl_Spinner2* cntTxOffset
o->end();
} // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(260, 200, 490, 62, _("Frequency Analysis Rx Correction"));
+ o->box(FL_ENGRAVED_FRAME);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
+ { Fl_Counter* o = cntRIT = new Fl_Counter(284, 226, 130, 20, _("RIT"));
+ cntRIT->tooltip(_("Used ONLY for frequency analysis mode"));
+ cntRIT->minimum(-5);
+ cntRIT->maximum(5);
+ cntRIT->step(0.01);
+ cntRIT->callback((Fl_Callback*)cb_cntRIT);
+ cntRIT->align(Fl_Align(FL_ALIGN_RIGHT));
+ o->value(progdefaults.RIT);
+ o->lstep(0.1);
+ } // Fl_Counter* cntRIT
+ o->end();
+ } // Fl_Group* o
CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Settings"));
config_pages.push_back(p);
tab_tree->add(_("Soundcard/Settings"));
diff --git a/src/dialogs/confdialog.fl b/src/dialogs/confdialog.fl
index e6762f1f..b1026f03 100644
--- a/src/dialogs/confdialog.fl
+++ b/src/dialogs/confdialog.fl
@@ -469,7 +469,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
static const char szProsigns[] = "~|%|&|+|=|{|}|<|>|[|]| ";} {}
Fl_Window {} {
label {Fldigi configuration} open
- xywh {503 32 800 380} type Double color 45 selection_color 51 labelsize 18 align 80 resizable size_range {750 380 0 380} visible
+ xywh {604 42 800 380} type Double color 45 selection_color 51 labelsize 18 align 80 resizable size_range {750 380 0 380} visible
} {
Fl_Group {} {
xywh {0 0 201 385} resizable
@@ -6070,7 +6070,7 @@ progdefaults.changed = true;}
}
}
Fl_Group {} {
- label {Modem/Wefax} open selected
+ label {Modem/Wefax}
xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/Wefax"));}
code1 {config_pages.push_back(p);}
@@ -6128,8 +6128,8 @@ progdefaults.changed = true;}
label Filter
callback {progdefaults.wefax_filter=o->value();} open
xywh {302 137 110 24} down_box BORDER_BOX
- code0 {o->add("Narrow|Middle|Wide|Blackman|Hanning|Hamming");}
- code1 {o->value(progdefaults.wefax_filter);}
+ code0 {o->add("Narrow|Medium|Wide");}
+ code1 {o->value(progdefaults.wefax_filter < 3 ? progdefaults.wefax_filter : 0);}
} {}
Fl_Counter auto_after_nrows {
label {Enable Auto-align after}
@@ -9058,25 +9058,28 @@ resetSoundCard();}
code0 {o->value(progdefaults.is_full_duplex);}
}
}
- Fl_Group AudioAlerts {
- label {Alerts / Rx Audio} open
- xywh {255 235 500 80} box ENGRAVED_FRAME align 21
+ Fl_Group AudioAlerts {open
+ xywh {255 235 500 90} box ENGRAVED_FRAME align 0
} {
Fl_Choice menuAlertsDev {
- label Playback
+ label {Audio device shared by Audio Alerts and Rx Monitor}
callback {progdefaults.AlertDevice = o->text();
progdefaults.AlertIndex = reinterpret_cast<intptr_t>(o->mvalue()->user_data());
progdefaults.changed = true;} open
- tooltip {Audio output device} xywh {427 255 310 25} down_box BORDER_BOX
+ tooltip {Audio output device} xywh {265 260 365 25} down_box BORDER_BOX align 5
} {}
Fl_Round_Button btn_enable_audio_alerts {
- label {Enable Audio alerts}
+ label Enable
callback {progdefaults.enable_audio_alerts = o->value();
progdefaults.changed = true;
reset_audio_alerts();}
- tooltip {First select audio alert playback device} xywh {427 283 225 25} down_box DOWN_BOX selection_color 1
+ tooltip {First select audio alert playback device} xywh {657 260 76 25} down_box DOWN_BOX selection_color 1
code0 {o->value(progdefaults.enable_audio_alerts);}
}
+ Fl_Box {} {
+ label {Note: must be selected and enabled for Rx Audio monitoring!}
+ xywh {265 295 473 22} align 16
+ }
}
}
Fl_Group {} {
@@ -9188,8 +9191,8 @@ progdefaults.changed = true;}
}
}
Fl_Group {} {
- label {Soundcard/Settings}
- xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
+ label {Soundcard/Settings} open selected
+ xywh {200 0 600 350} box ENGRAVED_BOX align 21
code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Settings"));}
code1 {config_pages.push_back(p);}
code2 {tab_tree->add(_("Soundcard/Settings"));}
@@ -9204,7 +9207,7 @@ progdefaults.changed = true;}
resetSoundCard();
progdefaults.changed = true;} open
tooltip {Force a specific sample rate. Select "Native" if "Auto"
-does not work well with your audio device.} xywh {270 77 100 22} box DOWN_BOX color 7 align 8
+does not work well with your audio device.} xywh {284 77 100 22} box DOWN_BOX color 7 align 8
code0 {o->clear_changed();}
code1 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_ListBox
@@ -9214,7 +9217,7 @@ does not work well with your audio device.} xywh {270 77 100 22} box DOWN_BOX co
callback {progdefaults.out_sample_rate = o->index() > 1 ? strtol(o->value(), 0, 10) : o->index();
resetSoundCard();
progdefaults.changed = true;} open
- xywh {270 107 100 22} box DOWN_BOX color 7 align 8
+ xywh {284 107 100 22} box DOWN_BOX color 7 align 8
code0 {o->clear_changed();}
code1 {o->tooltip(menuInSampleRate->tooltip());}
code2 {o->labelsize(FL_NORMAL_SIZE);}
@@ -9242,7 +9245,7 @@ o->tooltip(src_get_description(progdefaults.sample_converter));} open
label {RX ppm}
callback {progdefaults.RX_corr = (int)o->value();
progdefaults.changed = true;}
- tooltip {RX sound card correction} xywh {270 168 85 20} align 8
+ tooltip {RX sound card correction} xywh {284 165 85 20} align 8
code0 {o->step(1);}
code1 {o->minimum(-50000);}
code2 {o->maximum(50000);}
@@ -9253,7 +9256,7 @@ progdefaults.changed = true;}
label {TX ppm}
callback {progdefaults.TX_corr = (int)o->value();
progdefaults.changed = true;}
- tooltip {TX sound card correction} xywh {431 168 85 20} align 8
+ tooltip {TX sound card correction} xywh {431 165 85 20} align 8
code0 {o->step(1);}
code1 {o->minimum(-50000);}
code2 {o->maximum(50000);}
@@ -9264,7 +9267,7 @@ progdefaults.changed = true;}
label {TX offset}
callback {progdefaults.TxOffset = (int)o->value();
progdefaults.changed = true;}
- tooltip {Difference between Rx & Tx freq (rig offset)} xywh {593 168 85 20} align 8
+ tooltip {Difference between Rx & Tx freq (rig offset)} xywh {591 165 85 20} align 8
code0 {o->value(progdefaults.TxOffset);}
code1 {o->step(1);}
code2 {o->minimum(-50); o->maximum(50);}
@@ -9272,6 +9275,18 @@ progdefaults.changed = true;}
class Fl_Spinner2
}
}
+ Fl_Group {} {
+ label {Frequency Analysis Rx Correction} open
+ xywh {260 200 490 62} box ENGRAVED_FRAME align 21
+ } {
+ Fl_Counter cntRIT {
+ label RIT
+ callback {progdefaults.RIT=o->value();}
+ tooltip {Used ONLY for frequency analysis mode} xywh {284 226 130 20} align 8 minimum -5 maximum 5 step 0.01
+ code0 {o->value(progdefaults.RIT);}
+ code1 {o->lstep(0.1);}
+ }
+ }
}
Fl_Group {} {
label {Soundcard/Wav file recording}
diff --git a/src/dialogs/fl_digi.cxx b/src/dialogs/fl_digi.cxx
index 03c37fb9..a0d58b2b 100644
--- a/src/dialogs/fl_digi.cxx
+++ b/src/dialogs/fl_digi.cxx
@@ -985,7 +985,7 @@ static const Fl_Menu_Item quick_change_feld[] = {
{ mode_info[MODE_SLOWHELL].name, 0, cb_init_mode, (void *)MODE_SLOWHELL },
{ mode_info[MODE_HELLX5].name, 0, cb_init_mode, (void *)MODE_HELLX5 },
{ mode_info[MODE_HELLX9].name, 0, cb_init_mode, (void *)MODE_HELLX9 },
- { mode_info[MODE_FSKHELL].name, 0, cb_init_mode, (void *)MODE_FSKHELL },
+ { mode_info[MODE_FSKH245].name, 0, cb_init_mode, (void *)MODE_FSKH245 },
{ mode_info[MODE_FSKH105].name, 0, cb_init_mode, (void *)MODE_FSKH105 },
{ mode_info[MODE_HELL80].name, 0, cb_init_mode, (void *)MODE_HELL80 },
{ 0 }
@@ -1668,7 +1668,7 @@ void init_modem(trx_mode mode, int freq)
mode == MODE_SLOWHELL ||
mode == MODE_HELLX5 ||
mode == MODE_HELLX9 ||
- mode == MODE_FSKHELL ||
+ mode == MODE_FSKH245 ||
mode == MODE_FSKH105 ||
mode == MODE_HELL80 ||
mode == MODE_WEFAX_576 ||
@@ -1753,7 +1753,7 @@ void init_modem(trx_mode mode, int freq)
case MODE_SLOWHELL:
case MODE_HELLX5:
case MODE_HELLX9:
- case MODE_FSKHELL:
+ case MODE_FSKH245:
case MODE_FSKH105:
case MODE_HELL80:
startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
@@ -1988,7 +1988,7 @@ void init_modem(trx_mode mode, int freq)
break;
default:
- LOG_ERROR("Unknown mode: %" PRIdPTR, mode);
+ LOG_ERROR("Unknown mode: %d", (int)mode);
mode = MODE_PSK31;
startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
*mode_info[mode].modem = new psk(mode), freq);
@@ -2123,7 +2123,7 @@ void macro_cb(Fl_Widget *w, void *v)
// if (active_modem->get_mode() == MODE_FSQ)
// return;
- int b = (int)(reinterpret_cast<long> (v));
+ int b = (int)(reinterpret_cast<long long> (v));
if (b & 0x80) { // 4 bar docked macros
b &= 0x7F;
@@ -2288,7 +2288,7 @@ void cb_mnuConfigModems(Fl_Menu_*, void*) {
open_config(TAB_DOMINOEX);
break;
case MODE_FELDHELL: case MODE_SLOWHELL: case MODE_HELLX5: case MODE_HELLX9:
- case MODE_FSKHELL: case MODE_FSKH105:case MODE_HELL80:
+ case MODE_FSKH245: case MODE_FSKH105:case MODE_HELL80:
open_config(TAB_FELDHELL);
break;
case MODE_WEFAX_576: case MODE_WEFAX_288:
@@ -2435,7 +2435,6 @@ void cb_view_hide_channels(Fl_Menu_ *w, void *d)
return;
}
-#if USE_SNDFILE
static bool capval = false;
static bool genval = false;
@@ -2553,7 +2552,6 @@ void cb_mnuPlayback(Fl_Widget *w, void *d)
btnAutoSpot->do_callback();
}
}
-#endif // USE_SNDFILE
bool first_tab_select = true;
@@ -2613,7 +2611,7 @@ void cb_mnuVisitURL(Fl_Widget*, void* arg)
// be done with the returned HINSTANCE is to cast it to an
// int and compare it with the value 32 or one of the error
// codes below." (Error codes omitted to preserve sanity).
- if ((int)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32)
+ if ((INT_PTR)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32)
fl_alert2(_("Could not open url:\n%s\n"), url);
#endif
}
@@ -2977,7 +2975,14 @@ void toggleRSID()
cbRSID(NULL, NULL);
}
+static notify_dialog *rx_monitor_alert = 0;
void cb_mnuRxAudioDialog(Fl_Menu_ *w, void *d) {
+ if (!progdefaults.enable_audio_alerts) {
+ if (!rx_monitor_alert) rx_monitor_alert = new notify_dialog;
+ rx_monitor_alert->notify("Audio-Alert / Rx-Monitor device NOT enabled", 10.0);
+ show_notifier(rx_monitor_alert);
+ return;
+ }
if (rxaudio_dialog)
rxaudio_dialog->show();
}
@@ -5755,13 +5760,11 @@ static Fl_Menu_Item menu_[] = {
{ LOG_TO_FILE_MLABEL, 0, cb_logfile, 0, FL_MENU_TOGGLE, FL_NORMAL_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},
-#if USE_SNDFILE
{ icons::make_icon_label(_("Audio")), 0, 0, 0, FL_MENU_DIVIDER | FL_SUBMENU, _FL_MULTI_LABEL, 0, 14, 0},
{_("RX capture"), 0, (Fl_Callback*)cb_mnuCapture, 0, FL_MENU_TOGGLE, FL_NORMAL_LABEL, 0, 14, 0},
{_("TX generate"), 0, (Fl_Callback*)cb_mnuGenerate, 0, FL_MENU_TOGGLE, FL_NORMAL_LABEL, 0, 14, 0},
{_("Playback"), 0, (Fl_Callback*)cb_mnuPlayback, 0, FL_MENU_TOGGLE, FL_NORMAL_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},
-#endif
{ icons::make_icon_label(_("Exit"), log_out_icon), 'x', (Fl_Callback*)cb_E, 0, 0, _FL_MULTI_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},
@@ -5821,7 +5824,7 @@ static Fl_Menu_Item menu_[] = {
{ mode_info[MODE_SLOWHELL].name, 0, cb_init_mode, (void *)MODE_SLOWHELL, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_HELLX5].name, 0, cb_init_mode, (void *)MODE_HELLX5, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_HELLX9].name, 0, cb_init_mode, (void *)MODE_HELLX9, 0, FL_NORMAL_LABEL, 0, 14, 0},
-{ mode_info[MODE_FSKHELL].name, 0, cb_init_mode, (void *)MODE_FSKHELL, 0, FL_NORMAL_LABEL, 0, 14, 0},
+{ mode_info[MODE_FSKH245].name, 0, cb_init_mode, (void *)MODE_FSKH245, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_FSKH105].name, 0, cb_init_mode, (void *)MODE_FSKH105, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_HELL80].name, 0, cb_init_mode, (void *)MODE_HELL80, 0, FL_NORMAL_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},
@@ -8423,7 +8426,7 @@ static void put_rx_char_flmain(unsigned int data, int style)
if (mailclient || mailserver)
rx_chd.rx((unsigned char *)ascii2[data & 0xFF]);
- else if (progdefaults.show_all_codes)
+ else if (progdefaults.show_all_codes && iscntrl(data & 0xFF))
rx_chd.rx((unsigned char *)ascii3[data & 0xFF]);
else if (mode == MODE_RTTY)
@@ -8434,7 +8437,7 @@ static void put_rx_char_flmain(unsigned int data, int style)
} else
rx_chd.rx((unsigned char *)ascii[data & 0xFF]);
else
- rx_chd.rx(data);
+ rx_chd.rx(data & 0xFF);
// feed the decoded data into the RX parser
if (rx_chd.data_length() > 0) {
@@ -8969,20 +8972,16 @@ void put_echo_char(unsigned int data, int style)
if (mode == MODE_CW && progdefaults.QSKadjust)
return;
- REQ(&add_tx_char, data);
+ REQ(&add_tx_char, data & 0xFF);
// select a byte translation table
const char **asc = NULL;//ascii;
- if (mailclient || mailserver || arq_text_available)
+ if (mailclient || mailserver) {
asc = ascii2;
- else if (progdefaults.show_all_codes)
- asc = ascii3;
- else if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST)
- asc = ascii3;
-
- // assign a style to the data
- if (asc == ascii2 && iscntrl(data))
style = FTextBase::CTRL;
+ } else if ((progdefaults.show_all_codes && iscntrl(data & 0xFF)) ||
+ PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST)
+ asc = ascii3;
// receive and convert the data
static unsigned int lastdata = 0;
@@ -8990,12 +8989,12 @@ void put_echo_char(unsigned int data, int style)
if (data == '\r' && lastdata == '\r') // reject multiple CRs
return;
- if (data == '\a') {
+ if (mode == MODE_RTTY && data == '\a') {
if (progdefaults.visibleBELL)
echo_chd.rx((unsigned char *)ascii2[7]);
REQ(TTY_bell);
} else if (asc == NULL)
- echo_chd.rx(data);
+ echo_chd.rx(data & 0xFF);
else
echo_chd.rx((unsigned char *)asc[data & 0xFF]);
diff --git a/src/dialogs/guide.cxx b/src/dialogs/guide.cxx
index 3f4e6f18..3dc7cc54 100644
--- a/src/dialogs/guide.cxx
+++ b/src/dialogs/guide.cxx
@@ -2039,7 +2039,7 @@ numeric keypad’s 0-9 the sequence will be discarded.</p></div>\n\
<div id=\"footer\">\n\
<div id=\"footer-text\">\n\
Last updated\n\
- 2018-02-24 13:42:49 \n\
+ 2020-06-22 01:38:45 \n\
</div>\n\
<div id=\"footer-badges\">\n\
<a href=\"http://validator.w3.org/check?uri=referer\">\n\
diff --git a/src/feld/feld.cxx b/src/feld/feld.cxx
index 813d0a7a..4d927441 100644
--- a/src/feld/feld.cxx
+++ b/src/feld/feld.cxx
@@ -101,13 +101,19 @@ void feld::init()
}
+static void set_HellBW(double val)
+{
+ sldrHellBW->value(val);
+}
+
void feld::restart()
{
- set_bandwidth(hell_bandwidth);
+// set_bandwidth(hell_bandwidth);
RxColumnLen = progdefaults.HellRcvHeight;
TxColumnLen = FELD_COLUMN_LEN;
+ int fbw;
switch (mode) {
// Amplitude modulation modes
case MODE_FELDHELL:
@@ -117,7 +123,10 @@ TxColumnLen = FELD_COLUMN_LEN;
downsampleinc = (double)(rxpixrate/samplerate);
upsampleinc = (double)(txpixrate/samplerate);
hell_bandwidth = txpixrate;
- filter_bandwidth = progdefaults.HELL_BW_FH;
+ fbw = 1.2 * hell_bandwidth;
+ if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+ else fbw -= (fbw % 5);
+ progdefaults.HELL_BW_FH = filter_bandwidth = fbw;
break;
case MODE_SLOWHELL:
feldcolumnrate = 2.1875;
@@ -126,7 +135,10 @@ TxColumnLen = FELD_COLUMN_LEN;
downsampleinc = (double)(rxpixrate/samplerate);
upsampleinc = (double)(txpixrate/samplerate);
hell_bandwidth = txpixrate;
- filter_bandwidth = progdefaults.HELL_BW_SH;
+ fbw = 1.2 * hell_bandwidth;
+ if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+ else fbw -= (fbw % 5);
+ progdefaults.HELL_BW_SH = filter_bandwidth = fbw;
break;
case MODE_HELLX5:
feldcolumnrate = 87.5;
@@ -135,7 +147,10 @@ TxColumnLen = FELD_COLUMN_LEN;
downsampleinc = (double)(rxpixrate/samplerate);
upsampleinc = (double)(txpixrate/samplerate);
hell_bandwidth = txpixrate;
- filter_bandwidth = progdefaults.HELL_BW_X5;
+ fbw = 1.2 * hell_bandwidth;
+ if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+ else fbw -= (fbw % 5);
+ progdefaults.HELL_BW_X5 = filter_bandwidth = fbw;
break;
case MODE_HELLX9:
feldcolumnrate = 157.5;
@@ -144,10 +159,13 @@ TxColumnLen = FELD_COLUMN_LEN;
downsampleinc = (double)(rxpixrate/samplerate);
upsampleinc = (double)(txpixrate/samplerate);
hell_bandwidth = txpixrate;
- filter_bandwidth = progdefaults.HELL_BW_X9;
+ fbw = 1.2 * hell_bandwidth;
+ if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+ else fbw -= (fbw % 5);
+ progdefaults.HELL_BW_X9 = filter_bandwidth = fbw;
break;
// Frequency modulation modes
- case MODE_FSKHELL:
+ case MODE_FSKH245:
feldcolumnrate = 17.5;
rxpixrate = (RxColumnLen * feldcolumnrate);
txpixrate = (TxColumnLen * feldcolumnrate);
@@ -155,7 +173,10 @@ TxColumnLen = FELD_COLUMN_LEN;
upsampleinc = (double)(txpixrate/samplerate);
hell_bandwidth = 122.5;
phi2freq = samplerate / M_PI / (hell_bandwidth / 2.0);
- filter_bandwidth = progdefaults.HELL_BW_FSK;
+ fbw = 3.0 * hell_bandwidth;
+ if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+ else fbw -= (fbw % 5);
+ progdefaults.HELL_BW_FSKH245 = filter_bandwidth = fbw;
cap |= CAP_REV;
break;
case MODE_FSKH105:
@@ -166,7 +187,10 @@ TxColumnLen = FELD_COLUMN_LEN;
upsampleinc = (double)(txpixrate/samplerate);
hell_bandwidth = 55;
phi2freq = samplerate / M_PI / (hell_bandwidth / 2.0);
- filter_bandwidth = progdefaults.HELL_BW_FSK105;
+ fbw = 4.0 * hell_bandwidth;
+ if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+ else fbw -= (fbw % 5);
+ progdefaults.HELL_BW_FSKH105 = filter_bandwidth = fbw;
cap |= CAP_REV;
break;
case MODE_HELL80:
@@ -177,13 +201,20 @@ TxColumnLen = FELD_COLUMN_LEN;
upsampleinc = (double)(txpixrate/samplerate);
hell_bandwidth = 300;
phi2freq = samplerate / M_PI / (hell_bandwidth / 2.0);
- filter_bandwidth = progdefaults.HELL_BW_HELL80;
+ fbw = 2.5 * hell_bandwidth;
+ if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+ else fbw -= (fbw % 5);
+ progdefaults.HELL_BW_HELL80 = filter_bandwidth = fbw;
cap |= CAP_REV;
break;
default :
feldcolumnrate = 17.5;
break;
}
+ set_bandwidth(hell_bandwidth);
+ progdefaults.HELL_BW = filter_bandwidth;
+
+ REQ(set_HellBW, filter_bandwidth);
/*
std::cout <<
"HellRcvHeight: " << progdefaults.HellRcvHeight << "\n" <<
@@ -204,7 +235,7 @@ std::cout <<
feld::~feld()
{
if (hilbert) delete hilbert;
- if (bpfilt) delete bpfilt;
+ if (lpfilt) delete lpfilt;
if (bbfilt) delete bbfilt;
if (minmaxfilt) delete minmaxfilt;
}
@@ -219,17 +250,16 @@ feld::feld(trx_mode m)
restart();
- progdefaults.HELL_BW = filter_bandwidth;
+// progdefaults.HELL_BW = filter_bandwidth;
+// set_bandwidth(hell_bandwidth);
hilbert = new C_FIR_filter();
hilbert->init_hilbert(37, 1);
- set_bandwidth(hell_bandwidth);
-
wf->redraw_marker();
- lp = filter_bandwidth / samplerate;
- bpfilt = new fftfilt(0, lp, 1024);
+ lp = 0.5 * filter_bandwidth / samplerate;
+ lpfilt = new fftfilt(0, lp, 1024);
bbfilt = new Cmovavg(8);
average = new Cmovavg( static_cast<int>(500 / downsampleinc));
@@ -261,7 +291,7 @@ cmplx feld::mixer(cmplx in)
return z;
}
-void feld::FSKHELL_rx(cmplx z)
+void feld::FSKH_rx(cmplx z)
{
guard_lock raster_lock(&feld_mutex);
@@ -299,8 +329,7 @@ void feld::FSKHELL_rx(cmplx z)
vid = f + 0.5;
vid = CLAMP(vid, 0.0, 1.0);
- if (mode == MODE_HELL80)
- vid = 1.0 - vid;
+
if (reverse)
vid = 1.0 - vid;
if (progdefaults.HellBlackboard)
@@ -419,18 +448,18 @@ int feld::rx_process(const double *buf, int len)
case MODE_HELLX9:
progdefaults.HELL_BW_X9 = filter_bandwidth;
break;
- case MODE_FSKHELL:
- progdefaults.HELL_BW_FSK = filter_bandwidth;
+ case MODE_FSKH245:
+ progdefaults.HELL_BW_FSKH245 = filter_bandwidth;
break;
case MODE_FSKH105:
- progdefaults.HELL_BW_FSK105 = filter_bandwidth;
+ progdefaults.HELL_BW_FSKH105 = filter_bandwidth;
break;
case MODE_HELL80:
progdefaults.HELL_BW_HELL80 = filter_bandwidth;
}
- lp = filter_bandwidth / samplerate;
- bpfilt->create_filter(0, lp);
+ lp = 0.5 * filter_bandwidth / samplerate;
+ lpfilt->create_filter(0, lp);
wf->redraw_marker();
}
@@ -439,19 +468,19 @@ int feld::rx_process(const double *buf, int len)
z = cmplx( *buf, *buf );
buf++;
- hilbert->run(z, z);
+/// hilbert transform need for complex frequency shift
- /* ...so it can be shifted in frequency */
+ hilbert->run(z, z);
z = mixer(z);
- n = bpfilt->run(z, &zp);
+ n = lpfilt->run(z, &zp);
switch (mode) {
- case MODE_FSKHELL:
+ case MODE_FSKH245:
case MODE_FSKH105:
case MODE_HELL80:
for (i = 0; i < n; i++) {
- FSKHELL_rx(zp[i]);
+ FSKH_rx(zp[i]);
}
break;
default:
@@ -538,11 +567,11 @@ void feld::send_symbol(int currsymb, int nextsymb)
initKeyWaveform();
}
- if (mode == MODE_FSKHELL || mode == MODE_FSKH105 || mode == MODE_HELL80)
+ if (mode == MODE_FSKH245 || mode == MODE_FSKH105 || mode == MODE_HELL80)
tone += (reverse ? -1 : 1) * (currsymb ? -1 : 1) * bandwidth / 2.0;
for (;;) {
switch (mode) {
- case MODE_FSKHELL : case MODE_FSKH105 : case MODE_HELL80 :
+ case MODE_FSKH245 : case MODE_FSKH105 : case MODE_HELL80 :
break;
case MODE_HELLX5 : case MODE_HELLX9 :
Amp = currsymb;
diff --git a/src/flarq-src/arqdialogs.cxx b/src/flarq-src/arqdialogs.cxx
index 00b0190b..ed3d9b2e 100644
--- a/src/flarq-src/arqdialogs.cxx
+++ b/src/flarq-src/arqdialogs.cxx
@@ -91,7 +91,7 @@ Fl_Box *indCONNECT=(Fl_Box *)0;
Fl_Input2 *txtState=(Fl_Input2 *)0;
-Fl_Text_Display *txtARQ=(Fl_Text_Display *)0;
+FTextView *txtARQ=(FTextView *)0;
Fl_Input2 *txtStatus=(Fl_Input2 *)0;
@@ -105,7 +105,7 @@ static void cb_btnClearText(Fl_Button*, void*) {
cbClearText();
}
-Fl_Text_Display *txtRX=(Fl_Text_Display *)0;
+FTextView *txtRX=(FTextView *)0;
Fl_Input2 *txtTX=(Fl_Input2 *)0;
@@ -194,11 +194,19 @@ Fl_Double_Window* arq_dialog() {
} // Fl_Group* o
o->end();
} // Fl_Group* o
- { txtARQ = new Fl_Text_Display(0, 87, 515, 117);
+ { txtARQ = new FTextView(0, 87, 515, 117);
txtARQ->box(FL_DOWN_BOX);
+ txtARQ->color(FL_BACKGROUND2_COLOR);
+ txtARQ->selection_color(FL_SELECTION_COLOR);
+ txtARQ->labeltype(FL_NORMAL_LABEL);
+ txtARQ->labelfont(0);
+ txtARQ->labelsize(14);
+ txtARQ->labelcolor(FL_FOREGROUND_COLOR);
txtARQ->textfont(4);
+ txtARQ->align(Fl_Align(FL_ALIGN_TOP));
+ txtARQ->when(FL_WHEN_RELEASE);
Fl_Group::current()->resizable(txtARQ);
- } // Fl_Text_Display* txtARQ
+ } // FTextView* txtARQ
{ Fl_Group* o = new Fl_Group(0, 206, 516, 26);
o->box(FL_DOWN_BOX);
{ Fl_Input2* o = txtStatus = new Fl_Input2(5, 208, 220, 22);
@@ -242,11 +250,19 @@ Fl_Double_Window* arq_dialog() {
{ Fl_Group* o = new Fl_Group(0, 235, 515, 180, "Plain Talk");
o->box(FL_ENGRAVED_FRAME);
o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
- { txtRX = new Fl_Text_Display(5, 255, 505, 130);
+ { txtRX = new FTextView(5, 255, 505, 130);
txtRX->box(FL_DOWN_BOX);
+ txtRX->color(FL_BACKGROUND2_COLOR);
+ txtRX->selection_color(FL_SELECTION_COLOR);
+ txtRX->labeltype(FL_NORMAL_LABEL);
+ txtRX->labelfont(0);
+ txtRX->labelsize(14);
+ txtRX->labelcolor(FL_FOREGROUND_COLOR);
txtRX->textfont(4);
+ txtRX->align(Fl_Align(FL_ALIGN_TOP));
+ txtRX->when(FL_WHEN_RELEASE);
Fl_Group::current()->resizable(txtRX);
- } // Fl_Text_Display* txtRX
+ } // FTextView* txtRX
{ Fl_Group* o = new Fl_Group(0, 387, 515, 28);
o->box(FL_ENGRAVED_FRAME);
{ txtTX = new Fl_Input2(5, 390, 450, 22, "input:");
@@ -344,11 +360,18 @@ static void cb_btnOK(Fl_Button*, void*) {
closeConfig();
}
+Fl_Check_Button *btn_restart_beacon=(Fl_Check_Button *)0;
+
+static void cb_btn_restart_beacon(Fl_Check_Button* o, void*) {
+ restart_beacon = (int)(o->value());
+cbSetConfig();
+}
+
Fl_Double_Window* arq_configure() {
Fl_Double_Window* w;
{ Fl_Double_Window* o = new Fl_Double_Window(480, 190, "Configure flarq");
w = o; if (w) {/* empty */}
- { Fl_Input2* o = txtMyCall = new Fl_Input2(98, 13, 150, 24, "My Call:");
+ { Fl_Input2* o = txtMyCall = new Fl_Input2(98, 13, 150, 22, "My Call:");
txtMyCall->box(FL_DOWN_BOX);
txtMyCall->color(FL_BACKGROUND2_COLOR);
txtMyCall->selection_color(FL_SELECTION_COLOR);
@@ -361,7 +384,7 @@ Fl_Double_Window* arq_configure() {
txtMyCall->when(FL_WHEN_RELEASE);
o->value(MyCall.c_str());
} // Fl_Input2* txtMyCall
- { Fl_Input2* o = txtBEACONTXT = new Fl_Input2(98, 42, 370, 24, "Beacon Text");
+ { Fl_Input2* o = txtBEACONTXT = new Fl_Input2(98, 42, 370, 22, "Beacon Text");
txtBEACONTXT->tooltip("Text for the beacon 64 chars max");
txtBEACONTXT->box(FL_DOWN_BOX);
txtBEACONTXT->color(FL_BACKGROUND2_COLOR);
@@ -427,7 +450,7 @@ Fl_Double_Window* arq_configure() {
o->step(15);
o->value(itimeout / 1000);
} // Fl_Spinner2* spnTimeout
- { Fl_Spinner2* o = spnTxDelay = new Fl_Spinner2(317, 98, 70, 22, "Tx delay (msec):");
+ { Fl_Spinner2* o = spnTxDelay = new Fl_Spinner2(317, 126, 70, 22, "Tx delay (msec):");
spnTxDelay->tooltip("delay from Rx to Tx");
spnTxDelay->box(FL_NO_BOX);
spnTxDelay->color(FL_BACKGROUND_COLOR);
@@ -472,6 +495,7 @@ Fl_Double_Window* arq_configure() {
spnIDtimer->labelcolor(FL_FOREGROUND_COLOR);
spnIDtimer->minimum(0);
spnIDtimer->maximum(10);
+ spnIDtimer->value(10);
spnIDtimer->callback((Fl_Callback*)cb_spnIDtimer);
spnIDtimer->align(Fl_Align(FL_ALIGN_LEFT));
spnIDtimer->when(FL_WHEN_RELEASE);
@@ -480,7 +504,7 @@ Fl_Double_Window* arq_configure() {
o->step(1);
o->value(idtimer);
} // Fl_Spinner2* spnIDtimer
- { choiceBlockSize = new Fl_ComboBox(314, 126, 72, 24, "Block Size:");
+ { choiceBlockSize = new Fl_ComboBox(314, 155, 72, 22, "Block Size:");
choiceBlockSize->box(FL_DOWN_BOX);
choiceBlockSize->color(FL_BACKGROUND2_COLOR);
choiceBlockSize->selection_color(FL_BACKGROUND_COLOR);
@@ -496,6 +520,13 @@ Fl_Double_Window* arq_configure() {
{ btnOK = new Fl_Button(406, 154, 62, 24, "Ok");
btnOK->callback((Fl_Callback*)cb_btnOK);
} // Fl_Button* btnOK
+ { Fl_Check_Button* o = btn_restart_beacon = new Fl_Check_Button(448, 101, 20, 20, "Restart Beacon");
+ btn_restart_beacon->tooltip("Restart beacon after disconnect");
+ btn_restart_beacon->down_box(FL_DOWN_BOX);
+ btn_restart_beacon->callback((Fl_Callback*)cb_btn_restart_beacon);
+ btn_restart_beacon->align(Fl_Align(FL_ALIGN_LEFT));
+ o->value(restart_beacon);
+ } // Fl_Check_Button* btn_restart_beacon
o->end();
} // Fl_Double_Window* o
return w;
@@ -543,11 +574,13 @@ Fl_Double_Window* arq_SendSelect() {
return w;
}
+Fl_Input2 *inpMailFrom=(Fl_Input2 *)0;
+
Fl_Input2 *inpMailTo=(Fl_Input2 *)0;
Fl_Input2 *inpMailSubj=(Fl_Input2 *)0;
-Fl_Text_Editor *txtMailText=(Fl_Text_Editor *)0;
+F_Edit *txtMailText=(F_Edit *)0;
Fl_Button *btnOpenComposedMail=(Fl_Button *)0;
@@ -581,9 +614,20 @@ static void cb_btnSaveComposedMail(Fl_Button*, void*) {
Fl_Double_Window* arq_composer() {
Fl_Double_Window* w;
- { Fl_Double_Window* o = new Fl_Double_Window(515, 275, "Flarq Mail Composer");
+ { Fl_Double_Window* o = new Fl_Double_Window(515, 300, "Flarq Mail Composer");
w = o; if (w) {/* empty */}
- { inpMailTo = new Fl_Input2(48, 4, 460, 24, "To:");
+ { inpMailFrom = new Fl_Input2(47, 5, 460, 24, "From");
+ inpMailFrom->box(FL_DOWN_BOX);
+ inpMailFrom->color(FL_BACKGROUND2_COLOR);
+ inpMailFrom->selection_color(FL_SELECTION_COLOR);
+ inpMailFrom->labeltype(FL_NORMAL_LABEL);
+ inpMailFrom->labelfont(0);
+ inpMailFrom->labelsize(14);
+ inpMailFrom->labelcolor(FL_FOREGROUND_COLOR);
+ inpMailFrom->align(Fl_Align(FL_ALIGN_LEFT));
+ inpMailFrom->when(FL_WHEN_RELEASE);
+ } // Fl_Input2* inpMailFrom
+ { inpMailTo = new Fl_Input2(48, 32, 460, 24, "To");
inpMailTo->box(FL_DOWN_BOX);
inpMailTo->color(FL_BACKGROUND2_COLOR);
inpMailTo->selection_color(FL_SELECTION_COLOR);
@@ -594,7 +638,7 @@ Fl_Double_Window* arq_composer() {
inpMailTo->align(Fl_Align(FL_ALIGN_LEFT));
inpMailTo->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpMailTo
- { inpMailSubj = new Fl_Input2(48, 30, 460, 24, "Subj:");
+ { inpMailSubj = new Fl_Input2(48, 59, 460, 24, "Subj");
inpMailSubj->box(FL_DOWN_BOX);
inpMailSubj->color(FL_BACKGROUND2_COLOR);
inpMailSubj->selection_color(FL_SELECTION_COLOR);
@@ -605,42 +649,51 @@ Fl_Double_Window* arq_composer() {
inpMailSubj->align(Fl_Align(FL_ALIGN_LEFT));
inpMailSubj->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpMailSubj
- { txtMailText = new Fl_Text_Editor(0, 56, 510, 188);
+ { txtMailText = new F_Edit(0, 85, 510, 188);
+ txtMailText->box(FL_DOWN_FRAME);
+ txtMailText->color(FL_BACKGROUND2_COLOR);
+ txtMailText->selection_color(FL_SELECTION_COLOR);
+ txtMailText->labeltype(FL_NORMAL_LABEL);
+ txtMailText->labelfont(0);
+ txtMailText->labelsize(14);
+ txtMailText->labelcolor(FL_FOREGROUND_COLOR);
+ txtMailText->textfont(4);
+ txtMailText->align(Fl_Align(FL_ALIGN_TOP));
+ txtMailText->when(FL_WHEN_RELEASE);
Fl_Group::current()->resizable(txtMailText);
- } // Fl_Text_Editor* txtMailText
- { Fl_Pack* o = new Fl_Pack(0, 247, 515, 28);
- o->type(1);
- { btnOpenComposedMail = new Fl_Button(4, 251, 70, 20, "Open");
+ } // F_Edit* txtMailText
+ { Fl_Group* o = new Fl_Group(0, 274, 515, 28);
+ { btnOpenComposedMail = new Fl_Button(4, 278, 70, 20, "Open");
btnOpenComposedMail->tooltip("Open existing Composed email");
btnOpenComposedMail->callback((Fl_Callback*)cb_btnOpenComposedMail);
} // Fl_Button* btnOpenComposedMail
- { new Fl_Box(75, 251, 5, 20);
+ { new Fl_Box(75, 278, 5, 20);
} // Fl_Box* o
- { btnClearComposer = new Fl_Button(81, 251, 70, 20, "Clear");
+ { btnClearComposer = new Fl_Button(81, 278, 70, 20, "Clear");
btnClearComposer->tooltip("Clear all fields");
btnClearComposer->callback((Fl_Callback*)cb_btnClearComposer);
} // Fl_Button* btnClearComposer
- { new Fl_Box(152, 251, 5, 20);
+ { new Fl_Box(152, 278, 5, 20);
} // Fl_Box* o
- { btnUseTemplate = new Fl_Button(159, 251, 70, 20, "Template");
+ { btnUseTemplate = new Fl_Button(159, 278, 70, 20, "Template");
btnUseTemplate->tooltip("Use template file");
btnUseTemplate->callback((Fl_Callback*)cb_btnUseTemplate);
} // Fl_Button* btnUseTemplate
- { Fl_Box* o = new Fl_Box(230, 251, 127, 20);
+ { Fl_Box* o = new Fl_Box(230, 278, 127, 20);
Fl_Group::current()->resizable(o);
} // Fl_Box* o
- { btnCancelComposedMail = new Fl_Button(358, 251, 70, 20, "Cancel");
+ { btnCancelComposedMail = new Fl_Button(358, 278, 70, 20, "Cancel");
btnCancelComposedMail->tooltip("Close Dialog");
btnCancelComposedMail->callback((Fl_Callback*)cb_btnCancelComposedMail);
} // Fl_Button* btnCancelComposedMail
- { new Fl_Box(429, 251, 5, 20);
+ { new Fl_Box(429, 278, 5, 20);
} // Fl_Box* o
- { btnSaveComposedMail = new Fl_Button(436, 251, 70, 20, "Save");
+ { btnSaveComposedMail = new Fl_Button(436, 278, 70, 20, "Save");
btnSaveComposedMail->tooltip("Save this message (shift click Save Template)");
btnSaveComposedMail->callback((Fl_Callback*)cb_btnSaveComposedMail);
} // Fl_Button* btnSaveComposedMail
o->end();
- } // Fl_Pack* o
+ } // Fl_Group* o
o->end();
} // Fl_Double_Window* o
return w;
diff --git a/src/flarq-src/arqdialogs.fl b/src/flarq-src/arqdialogs.fl
index 8ec715e9..cc383fcf 100644
--- a/src/flarq-src/arqdialogs.fl
+++ b/src/flarq-src/arqdialogs.fl
@@ -1,5 +1,5 @@
# data file for the Fltk User Interface Designer (fluid)
-version 1.0304
+version 1.0305
header_name {.h}
code_name {.cxx}
decl {\#include <config.h>} {private local
@@ -20,12 +20,11 @@ decl {\#include "flslider2.h"} {public local
decl {\#include "combo.h"} {public local
}
-Function {arq_dialog()} {open
-} {
+Function {arq_dialog()} {} {
Fl_Window {} {
label flarq
- callback {arqCLOSE();}
- xywh {825 38 515 415} type Double color 50 resizable visible
+ callback {arqCLOSE();} open
+ xywh {848 29 515 415} type Double color 50 resizable visible
} {
Fl_Menu_Bar mnu {open
xywh {0 0 516 22}
@@ -142,6 +141,8 @@ Function {arq_dialog()} {open
}
Fl_Text_Display txtARQ {
xywh {0 87 515 117} box DOWN_BOX textfont 4 resizable
+ code0 {\#include "FTextView.h"}
+ class FTextView
}
Fl_Group {} {open
xywh {0 206 516 26} box DOWN_BOX
@@ -173,6 +174,7 @@ Function {arq_dialog()} {open
} {
Fl_Text_Display txtRX {
xywh {5 255 505 130} box DOWN_BOX textfont 4 resizable
+ class FTextView
}
Fl_Group {} {open
xywh {0 387 515 28} box ENGRAVED_FRAME
@@ -199,26 +201,26 @@ Function {arq_configure()} {open
} {
Fl_Window {} {
label {Configure flarq} open
- xywh {741 499 480 190} type Double resizable visible
+ xywh {658 503 480 190} type Double resizable visible
} {
Fl_Input txtMyCall {
label {My Call:}
callback {changeMyCall(o->value());}
- xywh {98 13 150 24}
+ xywh {98 13 150 22}
code0 {o->value(MyCall.c_str());}
class Fl_Input2
}
Fl_Input txtBEACONTXT {
label {Beacon Text}
callback {changeBeaconText(o->value());}
- tooltip {Text for the beacon 64 chars max} xywh {98 42 370 24} resizable
+ tooltip {Text for the beacon 64 chars max} xywh {98 42 370 22} resizable
code0 {o->value(beacontext.c_str());}
class Fl_Input2
}
Fl_Spinner spnRetries {
label {Retries:}
callback {iretries = (int)o->value();
-cbSetConfig();} selected
+cbSetConfig();}
tooltip {\# retries before connection declared down} xywh {146 71 45 22}
code0 {o->minimum(2);}
code1 {o->maximum(20);}
@@ -252,7 +254,7 @@ cbSetConfig();}
label {Tx delay (msec):}
callback {txdelay = (int)o->value();
cbSetConfig();}
- tooltip {delay from Rx to Tx} xywh {317 98 70 22}
+ tooltip {delay from Rx to Tx} xywh {317 126 70 22}
code0 {o->minimum(200);}
code1 {o->maximum(2000);}
code2 {o->step(100);}
@@ -273,7 +275,7 @@ cbSetConfig();}
label {ID timer (min):}
callback {idtimer = (int)(o->value());
cb_idtimer();}
- tooltip {ID timer\\n0 = disable} xywh {121 155 70 22} minimum 0 maximum 10
+ tooltip {ID timer\\n0 = disable} xywh {121 155 70 22} minimum 0 maximum 10 value 10
code0 {o->minimum(0);}
code1 {o->maximum(10);}
code2 {o->step(1);}
@@ -283,8 +285,8 @@ cb_idtimer();}
Fl_Group choiceBlockSize {
label {Block Size:}
callback {exponent = (int)o->index() + 4;
-cbSetConfig();} open
- xywh {314 126 72 24} box DOWN_BOX color 7 align 4
+cbSetConfig();} open selected
+ xywh {314 155 72 22} box DOWN_BOX color 7 align 4
class Fl_ComboBox
} {}
Fl_Button btnOK {
@@ -292,6 +294,13 @@ cbSetConfig();} open
callback {closeConfig();}
xywh {406 154 62 24}
}
+ Fl_Check_Button btn_restart_beacon {
+ label {Restart Beacon}
+ callback {restart_beacon = (int)(o->value());
+cbSetConfig();}
+ tooltip {Restart beacon after disconnect} xywh {448 101 20 20} down_box DOWN_BOX align 4
+ code0 {o->value(restart_beacon);}
+ }
}
}
@@ -323,64 +332,71 @@ Function {arq_SendSelect()} {} {
Function {arq_composer()} {} {
Fl_Window {} {
label {Flarq Mail Composer} open
- xywh {575 537 515 275} type Double hide resizable
+ xywh {848 430 515 300} type Double hide resizable
} {
+ Fl_Input inpMailFrom {
+ label From
+ xywh {47 5 460 24}
+ class Fl_Input2
+ }
Fl_Input inpMailTo {
- label {To:}
- xywh {48 4 460 24}
+ label To
+ xywh {48 32 460 24}
class Fl_Input2
}
Fl_Input inpMailSubj {
- label {Subj:}
- xywh {48 30 460 24}
+ label Subj
+ xywh {48 59 460 24}
class Fl_Input2
}
Fl_Text_Editor txtMailText {
- xywh {0 56 510 188} resizable
+ xywh {0 85 510 188} textfont 4 resizable
+ code0 {\#include "F_Edit.h"}
+ class F_Edit
}
- Fl_Pack {} {open
- xywh {0 247 515 28} type HORIZONTAL
+ Fl_Group {} {open
+ xywh {0 274 515 28}
} {
Fl_Button btnOpenComposedMail {
label Open
callback {cb_OpenComposeMail();}
- tooltip {Open existing Composed email} xywh {4 251 70 20}
+ tooltip {Open existing Composed email} xywh {4 278 70 20}
code0 {extern void cb_OpenComposeMail();}
}
Fl_Box {} {
- xywh {75 251 5 20}
+ xywh {75 278 5 20}
}
Fl_Button btnClearComposer {
label Clear
callback {cb_ClearComposer();}
- tooltip {Clear all fields} xywh {81 251 70 20}
+ tooltip {Clear all fields} xywh {81 278 70 20}
code0 {extern void cb_ClearComposer();}
}
Fl_Box {} {
- xywh {152 251 5 20}
+ xywh {152 278 5 20}
}
Fl_Button btnUseTemplate {
label Template
callback {cb_UseTemplate();}
- tooltip {Use template file} xywh {159 251 70 20}
+ tooltip {Use template file} xywh {159 278 70 20}
code0 {extern void cb_UseTemplate();}
}
Fl_Box {} {
- xywh {230 251 127 20} resizable
+ xywh {230 278 127 20} resizable
}
Fl_Button btnCancelComposedMail {
label Cancel
callback {cb_CancelComposeMail();}
- tooltip {Close Dialog} xywh {358 251 70 20}
+ tooltip {Close Dialog} xywh {358 278 70 20}
code0 {extern void cb_CancelComposeMail();}
}
Fl_Box {} {
- xywh {429 251 5 20}
+ xywh {429 278 5 20}
}
Fl_Button btnSaveComposedMail {
label Save
callback {cb_SaveComposeMail();}
- tooltip {Save this message (shift click Save Template)} xywh {436 251 70 20}
+ tooltip {Save this message (shift click Save Template)} xywh {436 278 70 20}
code0 {extern void cb_SaveComposeMail();}
}
}
diff --git a/src/flarq-src/flarq.cxx b/src/flarq-src/flarq.cxx
index 17b8d7e2..bbc746da 100644
--- a/src/flarq-src/flarq.cxx
+++ b/src/flarq-src/flarq.cxx
@@ -79,6 +79,8 @@
#include "xml_server.h"
+#include "FTextView.h"
+
#define FLDIGI_port "7322"
#define MPSK_port "3122"
@@ -128,19 +130,9 @@ bool SHOWDEBUG = false;
extern void STATUSprint(string s);
-Fl_Text_Buffer *txtbuffARQ;
-Fl_Text_Buffer *stylebufARQ;
-Fl_Text_Buffer *txtbuffRX;
-Fl_Text_Buffer *stylebufRX;
-Fl_Text_Buffer *txtbuffComposer;
-//Fl_Text_Buffer *styleComposer;
-
-Fl_Text_Display::Style_Table_Entry styletable[] = { // Style table
- { FL_BLACK, FL_SCREEN, FL_NORMAL_SIZE }, // A - RX
- { FL_DARK_RED, FL_SCREEN, FL_NORMAL_SIZE }, // B - TX
- { FL_DARK_GREEN, FL_SCREEN, FL_NORMAL_SIZE }, // C - DEBUG rx text
- { FL_MAGENTA, FL_SCREEN, FL_NORMAL_SIZE } // D - DEBUG tx text
-};
+Fl_Text_Buffer_mod *txtbuffARQ;
+Fl_Text_Buffer_mod *txtbuffRX;
+Fl_Text_Buffer_mod *txtbuffComposer;
Fl_Double_Window *arqwin = 0;
Fl_Double_Window *dlgconfig = 0;
@@ -194,8 +186,10 @@ long itimeout = 60000;
int idtimer = 10;
int bcnInterval = 30;
-bool autobeacon = false;
+enum {OFF, ON, WAIT};
+int autobeacon = OFF;
bool beaconrcvd = false;
+bool restart_beacon = false;
int blocksSent = 0;
@@ -411,14 +405,25 @@ void readComposedFile(string filename)
char szline[10000];
string fline, tempstr;
size_t p;
- txtbuffComposer->text("");
+ txtMailText->clear();
+ inpMailFrom->value("");
+ inpMailTo->value("");
+ inpMailSubj->value("");
while (!textfile.eof()) {
memset(szline,0, 10000);
textfile.getline(szline,10000);
fline = szline;
- if ((p = fline.find("//FLARQ COMPOSER")) != string::npos) continue;
- if ((p = fline.find("Date: ")) != string::npos) continue;
- if ((p = fline.find("From:")) != string::npos) continue;
+ if ((p = fline.find("//FLARQ COMPOSER")) != string::npos)
+ continue;
+ if ((p = fline.find("Date: ")) != string::npos)
+ continue;
+ if ((p = fline.find("Content-Type:")) != string::npos)
+ continue;
+ if ((p = fline.find("From: ")) != string::npos) {
+ tempstr = fline.substr(p + 6);
+ inpMailFrom->value(tempstr.c_str());
+ continue;
+ }
if ((p = fline.find("To: ")) != string::npos) {
tempstr = fline.substr(p + 4);
p = tempstr.find("<");
@@ -433,8 +438,8 @@ void readComposedFile(string filename)
continue;
}
if (strlen(szline) == 0 && txtbuffComposer->length() == 0) continue;
- txtbuffComposer->append(szline);
- txtbuffComposer->append("\n");
+ txtMailText->add(szline);
+ txtMailText->add("\n");
}
textfile.close();
}
@@ -452,7 +457,8 @@ void cb_UseTemplate()
void cb_ClearComposer()
{
sendfilename.clear();
- txtbuffComposer->text("");
+ txtMailText->clear();
+ inpMailFrom->value("");
inpMailTo->value("");
inpMailSubj->value("");
}
@@ -499,10 +505,12 @@ void saveComposedText(string filename)
struct tm *gmt = gmtime(&maildt);
strftime(szmaildt, sizeof(szmaildt), "%x %X", gmt);
textfile << "Date: " << szmaildt << endl;
+ textfile << "From: " << inpMailFrom->value() << endl;
textfile << "To: " << inpMailTo->value() << endl;
- textfile << "From: " << endl;
textfile << "Subject: " << inpMailSubj->value() << endl;
- textfile << endl << txtbuffComposer->text() << endl;
+ textfile << "Content-Type: text/plain; charset=\"UTF-8\"" << endl;
+ textfile << endl;
+ textfile << txtbuffComposer->text() << endl;
textfile.close();
cb_ClearComposer();
}
@@ -552,11 +560,11 @@ void ComposeMail()
if (composer == 0) {
composer = arq_composer();
composer->xclass(PACKAGE_TARNAME);
- txtbuffComposer = new Fl_Text_Buffer();
- txtMailText->buffer(txtbuffComposer);
+ txtbuffComposer = txtMailText->buffer();
txtMailText->wrap_mode(1,80);
}
txtbuffComposer->text("");
+ inpMailFrom->value("");
inpMailTo->value("");
inpMailSubj->value("");
@@ -580,7 +588,7 @@ void createAsciiChars()
AsciiChars += 0x09; // tab
AsciiChars += 0x0A; // lf
AsciiChars += 0x0D; // cr
- for (int n = 20; n < 128; n++) AsciiChars += n;
+ for (int n = 20; n < 256; n++) AsciiChars += n;
}
void initVals()
@@ -637,6 +645,8 @@ void readConfig()
configfile.ignore();
configfile.getline(tempstr, 200);
beacontext = tempstr;
+ configfile >> restart_beacon;
+
digi_arq->myCall(MyCall.c_str());
digi_arq->setExponent(exponent);
digi_arq->setRetries(iretries);
@@ -673,6 +683,7 @@ void saveConfig()
configfile << mainW << endl;
configfile << mainH << endl;
configfile << beacontext.c_str() << endl;
+ configfile << restart_beacon << endl;
configfile.close();
}
}
@@ -891,7 +902,7 @@ char bcnMsg[40];
void arqAutoBeacon(void *)
{
- if (autobeacon == true) {
+ if (autobeacon == ON) {
int currstate = digi_arq->state();
btnCONNECT->deactivate();
btnCONNECT->redraw();
@@ -926,7 +937,7 @@ void arqAutoBeacon(void *)
btnBEACON->redraw();
txtBeaconing->value("Beacon Off");
}
- } else {
+ } else if (autobeacon == OFF) {
autobeaconcounter = 0;
btnCONNECT->activate();
btnCONNECT->redraw();
@@ -936,16 +947,22 @@ void arqAutoBeacon(void *)
btnBEACON->activate();
btnBEACON->redraw();
txtBeaconing->value("Beacon Off");
+ } else { // autobeacon == WAIT
+ btnBEACON->deactivate();
+ btnBEACON->redraw();
+ Fl::repeat_timeout(1.0, arqAutoBeacon);
}
}
void arqBEACON()
{
- if (autobeacon == false) {
- autobeacon = true;
+ if (autobeacon != ON) {
+ autobeacon = ON;
+ btnBEACON->value(1);
Fl::add_timeout(0.01, arqAutoBeacon);
} else {
- autobeacon = false;
+ autobeacon = OFF;
+ btnBEACON->value(0);
}
}
@@ -1107,10 +1124,7 @@ void payloadText(string s)
{
static char szPercent[10];
string text = noCR(s);
- string style;
- style.append(text.length(), 'A');
- stylebufARQ->append(style.c_str());
txtARQ->insert(text.c_str());
txtARQ->show_insert_position();
txtARQ->redraw();
@@ -1278,11 +1292,15 @@ void sendEmailFile()
TX.append(sendfilename.substr(p));
TX.append("\n");
TX.append(arqemail);
- while (textfile.get(cin))
+
// only allow ASCII printable characters
- if ((cin >= ' ' && cin <= '~') ||
- (cin == 0x09 || (cin == 0x0a) || cin == 0x0d) )
- textin += cin;
+ while (textfile.get(cin)) textin += (cin & 0xFF);
+ textfile.close();
+ if ( textin.find_first_not_of(AsciiChars) != string::npos) {
+ fl_alert2("File contains non-ASCII bytes and must be sent as binary.");
+ return;
+ }
+
textfile.close();
txtsize = textin.length();
arqPayloadSize = txtsize;
@@ -1332,13 +1350,14 @@ void sendAsciiFile()
TX.append(p);
TX.append("\n");
TX.append(arqascii);
- while (textfile.get(cin))
- textin += cin;
+
+ while (textfile.get(cin)) textin += (cin & 0xFF);
textfile.close();
if ( textin.find_first_not_of(AsciiChars) != string::npos) {
fl_alert2("File contains non-ASCII bytes and must be sent as binary.");
return;
}
+
txtsize = textin.length();
arqPayloadSize = txtsize;
blocksSent = 0;
@@ -1367,7 +1386,7 @@ void sendImageFile()
fl_alert2("Not connected");
return;
}
- const char *p = FSEL::select("ARQ image file", "*.{png,jpg,bmp}\t*", "");
+ const char *p = FSEL::select(_("ARQ image file"), "Images\t*.{png,jpg,bmp}", "");
char cin;
size_t b64size;
string textin = "";
@@ -1496,89 +1515,103 @@ void send_xml_text(std::string fname, std::string txt)
sendingfile = false;
}
-char statemsg[80];
+static char statemsg[80];
void dispState()
{
+ static int last_state = DOWN;
int currstate = digi_arq->state();
static char xfrmsg[80];
static char szPercent[10];
arqstate = currstate & 0x7F;
-
- if (arqstate == DOWN || arqstate == TIMEDOUT) {
- if (btnCONNECT->active())
- btnCONNECT->label("Connect");
- if (!autobeacon)
+ if (last_state != currstate) {
+ last_state = currstate;
+ if (arqstate == DOWN || arqstate == TIMEDOUT) {
+ if (btnCONNECT->active()) {
+ btnCONNECT->label("Connect");
+ }
btnBEACON->activate();
-// mnuSend->deactivate();
- mnu->redraw();
- }
- else if (arqstate == ARQ_CONNECTED || arqstate == WAITING) {
- if (btnCONNECT->active())
- btnCONNECT->label("Disconnect");
- if (!autobeacon)
- btnBEACON->deactivate();
- mnuSend->activate();
- mnu->redraw();
- }
- if (rxARQfile || sendingfile) {
+ mnu->redraw();
+ }
+ else if (arqstate == ARQ_CONNECTED || arqstate == WAITING) {
+ if (btnCONNECT->active())
+ btnCONNECT->label("Disconnect");
+ if (!autobeacon)
+ btnBEACON->deactivate();
+ mnuSend->activate();
+ mnu->redraw();
+ }
+ if (rxARQfile || sendingfile) {
+ if (btnCONNECT->active())
+ btnCONNECT->label("Abort");
+ }
if (btnCONNECT->active())
- btnCONNECT->label("Abort");
- }
- if (btnCONNECT->active())
- btnCONNECT->redraw_label();
-
- if (currstate <= 0x7F) // receiving
- switch (currstate) {
- case ARQ_CONNECTING :
- snprintf(statemsg, sizeof(statemsg), "CONNECTING: %d", digi_arq->getTimeLeft());
- txtState->value(statemsg);
- txtState->redraw();
- autobeacon = false;
- break;
- case WAITFORACK :
- snprintf(statemsg, sizeof(statemsg), "WAITING FOR ACK ");
- txtState->value(statemsg);
- txtState->redraw();
- autobeacon = false;
- break;
- case ABORT:
- case ABORTING :
- txtState->value("ABORTING XFR");
- txtState->redraw();
- autobeacon = false;
- break;
- case WAITING :
- case ARQ_CONNECTED :
- char szState[80];
- snprintf(szState, sizeof(szState),"CONNECTED - Quality = %4.2f",
- digi_arq->quality());
- indCONNECT->color(FL_GREEN);
- indCONNECT->redraw();
- txtState->value(szState);
- txtURCALL->value( digi_arq->urCall().c_str() );
- autobeacon = false;
- break;
- case TIMEDOUT :
- indCONNECT->color(FL_WHITE);
- indCONNECT->redraw();
- txtState->value("TIMED OUT");
- txtStatus->value("");
- autobeacon = false;
- beaconrcvd = false;
- break;
- case DISCONNECT:
- case DISCONNECTING:
- txtState->value("DISCONNECTING");
- break;
- case DOWN :
- default :
- indCONNECT->color(FL_WHITE);
- indCONNECT->redraw();
- txtState->value("NOT CONNECTED");
- txtStatus->value("");
+ btnCONNECT->redraw_label();
+
+ if (currstate <= 0x7F) { // receiving
+ switch (currstate) {
+ case ARQ_CONNECTING :
+ snprintf(statemsg, sizeof(statemsg), "CONNECTING: %d", digi_arq->getTimeLeft());
+ txtState->value(statemsg);
+ txtState->redraw();
+ autobeacon = WAIT;
+ break;
+ case WAITFORACK :
+ snprintf(statemsg, sizeof(statemsg), "WAITING FOR ACK ");
+ txtState->value(statemsg);
+ txtState->redraw();
+ autobeacon = WAIT;
+ break;
+ case ABORT:
+ case ABORTING :
+ txtState->value("ABORTING XFR");
+ txtState->redraw();
+ autobeacon = WAIT;
+ break;
+ case WAITING :
+ case ARQ_CONNECTED :
+ char szState[80];
+ snprintf(szState, sizeof(szState),"CONNECTED - Quality = %4.2f",
+ digi_arq->quality());
+ indCONNECT->color(FL_GREEN);
+ indCONNECT->redraw();
+ txtBeaconing->value("");
+ txtState->value(szState);
+ txtURCALL->value( digi_arq->urCall().c_str() );
+ autobeacon = WAIT;
+ break;
+ case TIMEDOUT :
+ indCONNECT->color(FL_WHITE);
+ indCONNECT->redraw();
+ txtState->value("TIMED OUT");
+ txtStatus->value("");
+ if (restart_beacon && autobeacon != ON) {
+ autobeacon = ON;
+ Fl::remove_timeout(arqAutoBeacon);
+ Fl::add_timeout(1.0 + txdelay / 1000.0, arqAutoBeacon);
+ }
+ beaconrcvd = false;
+ break;
+ case DISCONNECT:
+ case DISCONNECTING:
+ txtState->value("DISCONNECTING");
+ break;
+ case DOWN :
+ default :
+ if (autobeacon != ON && restart_beacon) {
+ btnBEACON->activate();
+ Fl::remove_timeout(arqAutoBeacon);
+ Fl::add_timeout(1.0 + txdelay / 1000.0, arqAutoBeacon);
+ }
+ indCONNECT->color(FL_WHITE);
+ indCONNECT->redraw();
+ autobeacon = ON;
+ txtState->value("NOT CONNECTED");
+ txtStatus->value("");
+ }
}
+ }
if (sendingfile == true) {
if (digi_arq->transferComplete()) {
@@ -1671,9 +1704,6 @@ void changeBeaconText(const char *txt)
void TALKprint(string s)
{
- string style;
- style.append(s.length(), 'A');
- stylebufRX->append(style.c_str());
txtRX->insert(s.c_str());
txtRX->show_insert_position();
txtRX->redraw();
@@ -1697,14 +1727,11 @@ void STATUSprint(string s, double disptime)
void cbSendTalk()
{
string tosend;
- string style;
tosend = txtTX->value();
if (tosend.empty()) return;
tosend += '\n';
digi_arq->sendPlainText(tosend);
txtTX->value("");
- style.append(tosend.length(), 'B');
- stylebufRX->append(style.c_str());
txtRX->insert(tosend.c_str());
txtRX->show_insert_position();
txtRX->redraw();
@@ -1733,10 +1760,7 @@ void arqlog(string nom,string s)
void DEBUGrxprint(string s)
{
- string style;
string text = noCR(s);
- style.append(text.length(), 'C');
- stylebufRX->append(style.c_str());
txtRX->insert(text.c_str());
txtRX->show_insert_position();
txtRX->redraw();
@@ -1745,10 +1769,7 @@ void DEBUGrxprint(string s)
void DEBUGtxprint(string s)
{
- string style;
string text = noCR(s);
- style.append(text.length(), 'D');
- stylebufRX->append(style.c_str());
txtRX->insert(text.c_str());
txtRX->show_insert_position();
txtRX->redraw();
@@ -1757,11 +1778,8 @@ void DEBUGtxprint(string s)
void TXecho(string s)
{
- string style;
blocksSent += s.length();
string text = noCR(s);
- style.append(text.length(), 'B');
- stylebufARQ->append(style.c_str());
txtARQ->insert(text.c_str());
txtARQ->show_insert_position();
txtARQ->redraw();
@@ -1774,7 +1792,6 @@ void style_unfinished_cb(int, void*) {
void cbClearTalk()
{
txtbuffRX->text("");
- stylebufRX->text("");
}
void cb_arqwin(Fl_Widget *, void*)
@@ -1865,21 +1882,11 @@ int main (int argc, char *argv[] )
menu_mnu[i].labelsize(FL_NORMAL_SIZE);
- txtbuffRX = new Fl_Text_Buffer();
- txtRX->buffer(txtbuffRX);
+ txtbuffRX = txtRX->buffer();
txtRX->wrap_mode(1,80);
- stylebufRX = new Fl_Text_Buffer();
- txtRX->highlight_data(stylebufRX, styletable,
- sizeof(styletable) / sizeof(styletable[0]),
- 'A', style_unfinished_cb, 0);
- txtbuffARQ = new Fl_Text_Buffer();
- txtARQ->buffer(txtbuffARQ);
+ txtbuffARQ = txtARQ->buffer();
txtARQ->wrap_mode(1,80);
- stylebufARQ = new Fl_Text_Buffer();
- txtARQ->highlight_data(stylebufARQ, styletable,
- sizeof(styletable) / sizeof(styletable[0]),
- 'A', style_unfinished_cb, 0);
digi_arq = new arq();
@@ -2043,7 +2050,7 @@ void cb_mnuVisitURL(Fl_Widget*, void* arg)
// be done with the returned HINSTANCE is to cast it to an
// int and compare it with the value 32 or one of the error
// codes below." (Error codes omitted to preserve sanity).
- if ((int)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32)
+ if ((INT_PTR)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32)
fl_alert2(_("Could not open url:\n%s\n"), url);
#endif
}
diff --git a/src/flarq-src/include/arqdialogs.h b/src/flarq-src/include/arqdialogs.h
index 849e834c..3f5a29a8 100644
--- a/src/flarq-src/include/arqdialogs.h
+++ b/src/flarq-src/include/arqdialogs.h
@@ -22,14 +22,14 @@ extern Fl_Input2 *txtBeaconing;
#include <FL/Fl_Box.H>
extern Fl_Box *indCONNECT;
extern Fl_Input2 *txtState;
-#include <FL/Fl_Text_Display.H>
-extern Fl_Text_Display *txtARQ;
+#include "FTextView.h"
+extern FTextView *txtARQ;
extern Fl_Input2 *txtStatus;
extern Fl_Input2 *txtStatus2;
#include <FL/Fl_Progress.H>
extern Fl_Progress *prgStatus;
extern Fl_Button *btnClearText;
-extern Fl_Text_Display *txtRX;
+extern FTextView *txtRX;
extern Fl_Input2 *txtTX;
extern Fl_Button *btnSendTalk;
Fl_Double_Window* arq_dialog();
@@ -56,6 +56,8 @@ extern Fl_Spinner2 *spnBcnInterval;
extern Fl_Spinner2 *spnIDtimer;
extern Fl_ComboBox *choiceBlockSize;
extern Fl_Button *btnOK;
+#include <FL/Fl_Check_Button.H>
+extern Fl_Check_Button *btn_restart_beacon;
Fl_Double_Window* arq_configure();
#include "table.h"
extern Table *tblOutgoing;
@@ -65,11 +67,11 @@ extern Fl_Button *send_Cancel;
extern void sendOK();
extern Fl_Return_Button *send_OK;
Fl_Double_Window* arq_SendSelect();
+extern Fl_Input2 *inpMailFrom;
extern Fl_Input2 *inpMailTo;
extern Fl_Input2 *inpMailSubj;
-#include <FL/Fl_Text_Editor.H>
-extern Fl_Text_Editor *txtMailText;
-#include <FL/Fl_Pack.H>
+#include "F_Edit.h"
+extern F_Edit *txtMailText;
extern void cb_OpenComposeMail();
extern Fl_Button *btnOpenComposedMail;
extern void cb_ClearComposer();
diff --git a/src/flarq-src/include/flarq.h b/src/flarq-src/include/flarq.h
index 5359c6bf..93e51181 100644
--- a/src/flarq-src/include/flarq.h
+++ b/src/flarq-src/include/flarq.h
@@ -66,6 +66,7 @@ extern long iwaittime;
extern long itimeout;
extern int bcnInterval;
extern int idtimer;
+extern bool restart_beacon;
extern void cb_idtimer();
diff --git a/src/fsq/fsq.cxx b/src/fsq/fsq.cxx
index b1d17c8d..2b2a0a62 100644
--- a/src/fsq/fsq.cxx
+++ b/src/fsq/fsq.cxx
@@ -1291,7 +1291,9 @@ int fsq::rx_process(const double *buf, int len)
memmove(rx_stream, // to
&rx_stream[SHIFT_SIZE], // from
BLOCK_SIZE*sizeof(*rx_stream)); // # bytes
- memset(fft_data, 0, sizeof(fft_data));
+ // fft_data gets overwritten each time with a fixed number of
+ // elements. Do we need to zero it out?
+ //memset(fft_data, 0, sizeof(fft_data));
for (int i = 0; i < BLOCK_SIZE; i++) {
double d = rx_stream[i] * a_blackman[i];
fft_data[i] = cmplx(d, d);
diff --git a/src/globals/globals.cxx b/src/globals/globals.cxx
index c0a9a98e..559fda48 100644
--- a/src/globals/globals.cxx
+++ b/src/globals/globals.cxx
@@ -49,7 +49,7 @@ using namespace std;
//struc entries:
// mode, **modem, *sname, *name, *pskmail_name, *adif_name, *export_mode, *export_submode, *vid_name, iface_io
-
+// *** DO NOT PUT A '/' in the name string
const struct mode_info_t mode_info[NUM_MODES] = {
{MODE_NULL,&null_modem,"NULL","NULL","","NULL","","","", DISABLED_IO },
@@ -95,8 +95,8 @@ const struct mode_info_t mode_info[NUM_MODES] = {
{MODE_SLOWHELL,&feld_slowmodem,"SLOWHELL","Slow Hell","","HELL","HELL","","SHLL", DISABLED_IO },
{MODE_HELLX5,&feld_x5modem,"HELLX5","Feld Hell X5","","HELL","HELL","","HLX5", DISABLED_IO },
{MODE_HELLX9,&feld_x9modem,"HELLX9","Feld Hell X9","","HELL","HELL","","HLX9", DISABLED_IO },
-{MODE_FSKHELL,&feld_FMmodem,"FSKHELL","FSK Hell","","FSKHELL","HELL","FSKHELL","FSKHL", DISABLED_IO },
-{MODE_FSKH105,&feld_FM105modem,"FSKH105","FSK Hell-105","","FMHELL","HELL","FMHELL","H105", DISABLED_IO },
+{MODE_FSKH245,&feld_FMmodem,"FSKH245","FSK Hell-245","","FSKH245","HELL","FSKH245","FSKHL", DISABLED_IO },
+{MODE_FSKH105,&feld_FM105modem,"FSKH105","FSK Hell-105","","FSKH105","HELL","FSKH105","H105", DISABLED_IO },
{MODE_HELL80,&feld_80modem,"HELL80","Hell 80","","HELL80","HELL","HELL80","HL80", DISABLED_IO },
{MODE_MFSK8,&mfsk8_modem,"MFSK8","MFSK-8","MFSK8","MFSK8","MFSK","MFSK8","MK 8", DISABLED_IO },
@@ -174,7 +174,7 @@ const struct mode_info_t mode_info[NUM_MODES] = {
{MODE_OLIVIA_16_500,&olivia_16_500_modem,"OLIVIA-16/500","OL 16-500","OLIV 16-500","OLIVIA 16/500","OLIVIA","OLIVIA 16/500","OL16/500", ARQ_IO | KISS_IO },
{MODE_OLIVIA_16_1000,&olivia_16_1000_modem,"OLIVIA-16/1K","OL 16-1K","OLIV 16-1K","OLIVIA 16/1K","OLIVIA","OLIVIA 16/1K","OL16/1K", ARQ_IO | KISS_IO },
-{MODE_OLIVIA_16_1000,&olivia_16_2000_modem,"OLIVIA-16/2K","OL 16-2K","OLIV 16-2K","OLIVIA 16/2K","OLIVIA","OLIVIA 16/2K","OL16/2K", ARQ_IO | KISS_IO },
+{MODE_OLIVIA_16_2000,&olivia_16_2000_modem,"OLIVIA-16/2K","OL 16-2K","OLIV 16-2K","OLIVIA 16/2K","OLIVIA","OLIVIA 16/2K","OL16/2K", ARQ_IO | KISS_IO },
{MODE_OLIVIA_32_1000,&olivia_32_1000_modem,"OLIVIA-32/1K","OL 32-1K","OLIV 32-1K","OLIVIA 32/1K","OLIVIA","OLIVIA 32/1K","OL32/1K", ARQ_IO | KISS_IO },
{MODE_OLIVIA_32_2000,&olivia_32_2000_modem,"OLIVIA-32/2K","OL 32-2K","OLIV 32-2K","OLIVIA 32/2K","OLIVIA","OLIVIA 32/2K","OL32/2K", ARQ_IO | KISS_IO },
diff --git a/src/include/F_Edit.h b/src/include/F_Edit.h
new file mode 100644
index 00000000..f77e742b
--- /dev/null
+++ b/src/include/F_Edit.h
@@ -0,0 +1,82 @@
+// ----------------------------------------------------------------------------
+// FTextView.h
+//
+// Copyright (C) 2007-2009
+// Stelios Bounanos, M0GLD
+//
+// This file is part of fldigi.
+//
+// fldigi is free software; you can 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.
+//
+// fldigi is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU 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 <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef F_EDIT_H_
+#define F_EDIT_H_
+
+#include <stddef.h>
+#include <string>
+
+#include <FL/Fl.H>
+#include <FL/Enumerations.H>
+#include <FL/Fl_Menu_Item.H>
+#include <FL/Fl_Tile.H>
+
+#include "FTextView.h"
+
+/// A FTextBase subclass to display and edit text
+
+class F_Edit : public FTextEdit
+{
+public:
+ F_Edit(int x, int y, int w, int h, const char *l = 0);
+
+ virtual int handle(int event);
+
+ void clear(void);
+ void add_text(std::string s);
+
+ void setFont(Fl_Font f, int attr = NATTR);
+
+protected:
+ enum {
+ EDIT_MENU_CUT, EDIT_MENU_COPY, EDIT_MENU_PASTE,
+ EDIT_MENU_CLEAR, EDIT_MENU_READ, EDIT_MENU_WRAP
+ };
+ int handle_key(int key);
+ int handle_dnd_drag(int pos);
+ void handle_context_menu(void);
+ void menu_cb(size_t item);
+ void change_keybindings(void);
+ static int kf_default(int c, Fl_Text_Editor_mod* e);
+ static int kf_enter(int c, Fl_Text_Editor_mod* e);
+ static int kf_delete(int c, Fl_Text_Editor_mod* e);
+ static int kf_cut(int c, Fl_Text_Editor_mod* e);
+ static int kf_paste(int c, Fl_Text_Editor_mod* e);
+
+private:
+ F_Edit();
+ F_Edit(const F_Edit &t);
+
+protected:
+ static Fl_Menu_Item menu[];
+ int editpos;
+ int bkspaces;
+ static int *p_editpos;
+};
+
+#endif // F_EDIT_H_
+
+// Local Variables:
+// mode: c++
+// c-file-style: "linux"
+// End:
diff --git a/src/include/FreqControl.h b/src/include/FreqControl.h
index 8e034589..b3013e48 100644
--- a/src/include/FreqControl.h
+++ b/src/include/FreqControl.h
@@ -60,9 +60,9 @@ public:
cFreqControl(int x, int y, int w, int h, const char *lbl = "9");
~cFreqControl();
void updatevalue();
- void value(long lv);
- long value(){return val;};
- long int maximum(void);
+ void value(unsigned long int lv);
+ unsigned long int value() {return val;};
+ unsigned long int maximum(void);
void font(Fl_Font fnt);
void SetONCOLOR (uchar r, uchar g, uchar b);
void SetOFFCOLOR (uchar r, uchar g, uchar b);
@@ -122,7 +122,7 @@ private:
Fl_Repeat_Button *Digit[MAX_DIGITS];
Fl_Float_Input *finp;
static const char *Label[];
- long int mult[MAX_DIGITS];
+ unsigned long int mult[MAX_DIGITS];
Fl_Box *decbx;
Fl_Box *hfill1;
Fl_Box *hfill2;
@@ -135,8 +135,8 @@ private:
Fl_Color REVOFFCOLOR;
int nD;
//int active;
- long int maxVal;
- long int minVal;
+ unsigned long int maxVal;
+ unsigned long int minVal;
int pw; // decimal width
int wfill;
@@ -153,7 +153,7 @@ private:
void cancel_kb_entry(void);
protected:
- long int val, oldval;
+ unsigned long int val, oldval;
int precision;
int dpoint;
diff --git a/src/include/analysis.h b/src/include/analysis.h
index 8bb1c21e..930616f4 100644
--- a/src/include/analysis.h
+++ b/src/include/analysis.h
@@ -60,6 +60,7 @@ private:
long int wf_freq;
double dspcnt;
long int passno;
+ int rxcorr;
struct timespec start_time;
struct tm File_Start_Date;
diff --git a/src/include/confdialog.h b/src/include/confdialog.h
index 7c95ecbb..d9d11a59 100644
--- a/src/include/confdialog.h
+++ b/src/include/confdialog.h
@@ -821,6 +821,7 @@ extern Fl_ListBox *menuSampleConverter;
extern Fl_Spinner2 *cntRxRateCorr;
extern Fl_Spinner2 *cntTxRateCorr;
extern Fl_Spinner2 *cntTxOffset;
+extern Fl_Counter *cntRIT;
extern Fl_ListBox *listbox_wav_samplerate;
extern Fl_Check_Button *btn_record_both;
extern Fl_Spinner2 *cntChannels;
diff --git a/src/include/configuration.h b/src/include/configuration.h
index a9f54c84..c788cfcf 100644
--- a/src/include/configuration.h
+++ b/src/include/configuration.h
@@ -570,9 +570,9 @@
ELEM_(double, HELL_BW_SH, "HELL_BW2", "Slow Hell bandwidth", 30.0) \
ELEM_(double, HELL_BW_X5, "HELL_BW3", "X5 Hell bandwidth", 1225.) \
ELEM_(double, HELL_BW_X9, "HELL_BW4", "X9 Hell bandwidth", 2205.0) \
- ELEM_(double, HELL_BW_FSK, "HELL_BW5", "FSK Hell bandwidth", 180.0) \
- ELEM_(double, HELL_BW_FSK105, "HELL_BW6", "FSK105 Hell bandwidth", 100.0) \
- ELEM_(double, HELL_BW_HELL80, "HELL_BW7", "HELL80 bandwidth", 450.0) \
+ ELEM_(double, HELL_BW_FSKH245, "HELL_BW5", "FSKH-245 bandwidth", 250.0) \
+ ELEM_(double, HELL_BW_FSKH105, "HELL_BW6", "FSKH-105 Hell bandwidth", 120.0) \
+ ELEM_(double, HELL_BW_HELL80, "HELL_BW7", "HELL-80 bandwidth", 450.0) \
ELEM_(int, HellRcvWidth, "HELLRCVWIDTH", \
"Horizontal size multiplier for each hell character, 1, 2, or 3", \
2) \
@@ -1581,6 +1581,9 @@
ELEM_(int, TxOffset, "TXOFFSET", \
"Difference between RX and TX freq (rig offset)", \
0) \
+ ELEM_(double, RIT, "RIT", \
+ "Linear frequency correction applied to frequency analysis", \
+ 0) \
ELEM_(int, wavSampleRate, "WAV_SAMPLERATE", \
"Wave file record sample rate\n" \
"0 - 8000, 1 - 11025, 2 - 16000, 3 - 22050\n" \
diff --git a/src/include/fd_view.h b/src/include/fd_view.h
index a1c37c27..d6bfa751 100644
--- a/src/include/fd_view.h
+++ b/src/include/fd_view.h
@@ -10,13 +10,13 @@ extern Fl_Output *view_FD_class;
extern Fl_Output *view_FD_section;
extern Fl_Output *view_FD_mult;
extern Fl_Output *view_FD_score;
-#include <FL/Fl_Box.H>
extern Fl_Output *view_FD_CW[12];
extern Fl_Output *view_FD_CW_OP[12];
extern Fl_Output *view_FD_DIG[12];
extern Fl_Output *view_FD_DIG_OP[12];
extern Fl_Output *view_FD_PHONE[12];
extern Fl_Output *view_FD_PHONE_OP[12];
+#include <FL/Fl_Box.H>
#include <FL/Fl_Group.H>
#include "flinput2.h"
extern Fl_Input2 *inp_fd_tcpip_addr;
diff --git a/src/include/feld.h b/src/include/feld.h
index b05b2827..f2e0208f 100644
--- a/src/include/feld.h
+++ b/src/include/feld.h
@@ -62,7 +62,7 @@ protected:
double phi2freq;
C_FIR_filter *hilbert;
- fftfilt *bpfilt;
+ fftfilt *lpfilt;
Cmovavg *bbfilt;
Cmovavg *minmaxfilt;
Cmovavg *average;
@@ -92,7 +92,7 @@ protected:
cmplx mixer(cmplx);
double nco(double);
void rx(cmplx);
- void FSKHELL_rx(cmplx);
+ void FSKH_rx(cmplx);
void send_symbol(int currsymbol, int nextsymbol);
void send_null_column();
void tx_char(char);
diff --git a/src/include/globals.h b/src/include/globals.h
index a7fe296e..ff4fb8cd 100644
--- a/src/include/globals.h
+++ b/src/include/globals.h
@@ -91,7 +91,7 @@ enum {
MODE_SLOWHELL,
MODE_HELLX5,
MODE_HELLX9,
- MODE_FSKHELL,
+ MODE_FSKH245,
MODE_FSKH105,
MODE_HELL80,
MODE_HELL_FIRST = MODE_FELDHELL,
diff --git a/src/include/qrunner.h b/src/include/qrunner.h
index 36159e61..2350c2a8 100644
--- a/src/include/qrunner.h
+++ b/src/include/qrunner.h
@@ -56,6 +56,7 @@ extern void qrunner_debug(int tid, const char * name);
extern const char *sztid[];
#ifndef __MINGW32__
+typedef int SOCKET;
# define QRUNNER_READ(fd__, buf__, len__) read(fd__, buf__, len__)
# define QRUNNER_WRITE(fd__, buf__, len__) write(fd__, buf__, len__)
#else
@@ -167,7 +168,7 @@ public:
protected:
fqueue *fifo;
- int pfd[2];
+ SOCKET pfd[2];
bool attached;
int _id_no;
std::string _id_string;
diff --git a/src/include/rigsupport.h b/src/include/rigsupport.h
index 5af07872..467de103 100644
--- a/src/include/rigsupport.h
+++ b/src/include/rigsupport.h
@@ -95,7 +95,7 @@ extern void FLRIG_start_flrig_thread();
extern void stop_flrig_thread();
extern void reconnect_to_flrig();
extern void set_flrig_ptt(int on);
-extern void set_flrig_freq(long int fr);
+extern void set_flrig_freq(unsigned long int fr);
extern void set_flrig_mode(const char *md);
extern void set_flrig_bw(int bw1, int bw2 = 0);
extern void set_flrig_notch();
diff --git a/src/include/sound.h b/src/include/sound.h
index 4a11ba22..29d13cfb 100644
--- a/src/include/sound.h
+++ b/src/include/sound.h
@@ -31,9 +31,7 @@
#include <cstring>
#include <climits>
-#if USE_SNDFILE
# include <sndfile.h>
-#endif
#include <samplerate.h>
@@ -74,8 +72,6 @@ protected:
SRC_STATE *rx_src_state;
double *wrt_buffer;
-#if USE_SNDFILE
-
SNDFILE* ofCapture;
SNDFILE* ifPlayback;
SNDFILE* ofGenerate;
@@ -105,13 +101,10 @@ protected:
float modem_play_sr;
bool new_playback;
-
sf_count_t read_file(SNDFILE* file, float* buf, size_t count);
void write_file(SNDFILE* file, float* buf_left, float *buf_right, size_t count);
void write_file(SNDFILE* file, double* buf_left, double *buf_right, size_t count);
-#endif
-
public:
SoundBase();
virtual ~SoundBase();
@@ -125,7 +118,6 @@ public:
virtual void flush(unsigned dir = UINT_MAX) = 0;
virtual bool must_close(int dir = 0) = 0;
-#if USE_SNDFILE
int startCapture(std::string fname, int format);
void stopCapture();
@@ -138,7 +130,6 @@ public:
int AudioMP3(std::string fname);
int AudioWAV(std::string fname);
int Audio(std::string fname);
-#endif
};
diff --git a/src/logbook/fd_logger.cxx b/src/logbook/fd_logger.cxx
index c06f3abb..0eae1126 100644
--- a/src/logbook/fd_logger.cxx
+++ b/src/logbook/fd_logger.cxx
@@ -496,7 +496,8 @@ void FD_logoff()
void FD_band_check() {
if (fd_band != FD_opband()) {
FD_logoff();
-// FD_start();
+ MilliSleep(50);
+ FD_start();
FD_logon();
}
}
@@ -507,7 +508,8 @@ void FD_band_check() {
void FD_mode_check() {
if (fd_mode != FD_opmode()) {
FD_logoff();
-// FD_start();
+ MilliSleep(50);
+ FD_start();
FD_logon();
}
}
diff --git a/src/logbook/fd_view.cxx b/src/logbook/fd_view.cxx
index a265e641..6e80da4c 100644
--- a/src/logbook/fd_view.cxx
+++ b/src/logbook/fd_view.cxx
@@ -65,273 +65,417 @@ Fl_Box *box_fdserver_connected=(Fl_Box *)0;
Fl_Double_Window* make_fd_view() {
Fl_Double_Window* w;
- { Fl_Double_Window* o = new Fl_Double_Window(785, 270, _("Field Day Viewer - use with program \'fdserver\'"));
+ { Fl_Double_Window* o = new Fl_Double_Window(670, 270, _("Field Day Viewer - use with program \'fdserver\'"));
w = o; if (w) {/* empty */}
o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- { Fl_Output* o = view_FD_call = new Fl_Output(98, 6, 77, 24, _("FD Call"));
+ { Fl_Output* o = view_FD_call = new Fl_Output(59, 6, 77, 24, _("FD Call"));
o->value(progdefaults.my_FD_call.c_str());
} // Fl_Output* view_FD_call
- { Fl_Output* o = view_FD_class = new Fl_Output(277, 5, 38, 24, _("FD Class"));
+ { Fl_Output* o = view_FD_class = new Fl_Output(219, 5, 38, 24, _("FD Class"));
o->value(progdefaults.my_FD_class.c_str());
} // Fl_Output* view_FD_class
- { Fl_Output* o = view_FD_section = new Fl_Output(417, 5, 38, 24, _("FD Section"));
+ { Fl_Output* o = view_FD_section = new Fl_Output(341, 5, 38, 24, _("FD Section"));
o->value(progdefaults.my_FD_section.c_str());
} // Fl_Output* view_FD_section
- { Fl_Output* o = view_FD_mult = new Fl_Output(557, 5, 38, 24, _("FD Mult"));
+ { Fl_Output* o = view_FD_mult = new Fl_Output(462, 5, 38, 24, _("FD Mult"));
o->value(progdefaults.my_FD_mult.c_str());
} // Fl_Output* view_FD_mult
- { view_FD_score = new Fl_Output(698, 5, 80, 24, _("Score"));
+ { view_FD_score = new Fl_Output(584, 5, 80, 24, _("Score"));
} // Fl_Output* view_FD_score
- { Fl_Box* o = new Fl_Box(55, 33, 50, 17, _("160"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(114, 33, 50, 17, _("80"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(174, 33, 50, 17, _("40"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(233, 33, 50, 17, _("20"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(293, 33, 50, 17, _("17"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(352, 33, 50, 17, _("15"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(414, 33, 50, 17, _("12"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(476, 33, 50, 17, _("10"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(538, 33, 50, 17, _("6"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(600, 33, 50, 17, _("2"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(660, 33, 60, 17, _("220"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(720, 33, 60, 17, _("440"));
- o->box(FL_FLAT_BOX);
- } // Fl_Box* o
- { view_FD_CW[0] = new Fl_Output(55, 49, 60, 24, _("CW"));
+ { view_FD_CW[0] = new Fl_Output(55, 49, 50, 24, _("CW"));
+ view_FD_CW[0]->textfont(4);
+ view_FD_CW[0]->textsize(12);
} // Fl_Output* view_FD_CW[0]
- { view_FD_CW[1] = new Fl_Output(115, 49, 60, 24);
+ { view_FD_CW[1] = new Fl_Output(106, 49, 50, 24);
+ view_FD_CW[1]->textfont(4);
+ view_FD_CW[1]->textsize(12);
view_FD_CW[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[1]
- { view_FD_CW[2] = new Fl_Output(174, 49, 60, 24);
+ { view_FD_CW[2] = new Fl_Output(156, 49, 50, 24);
+ view_FD_CW[2]->textfont(4);
+ view_FD_CW[2]->textsize(12);
view_FD_CW[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[2]
- { view_FD_CW[3] = new Fl_Output(234, 49, 60, 24);
+ { view_FD_CW[3] = new Fl_Output(207, 49, 50, 24);
+ view_FD_CW[3]->textfont(4);
+ view_FD_CW[3]->textsize(12);
view_FD_CW[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[3]
- { view_FD_CW[4] = new Fl_Output(293, 49, 60, 24);
+ { view_FD_CW[4] = new Fl_Output(258, 49, 50, 24);
+ view_FD_CW[4]->textfont(4);
+ view_FD_CW[4]->textsize(12);
view_FD_CW[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[4]
- { view_FD_CW[5] = new Fl_Output(353, 49, 60, 24);
+ { view_FD_CW[5] = new Fl_Output(309, 49, 50, 24);
+ view_FD_CW[5]->textfont(4);
+ view_FD_CW[5]->textsize(12);
view_FD_CW[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[5]
- { view_FD_CW[6] = new Fl_Output(415, 49, 60, 24);
+ { view_FD_CW[6] = new Fl_Output(360, 49, 50, 24);
+ view_FD_CW[6]->textfont(4);
+ view_FD_CW[6]->textsize(12);
view_FD_CW[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[6]
- { view_FD_CW[7] = new Fl_Output(475, 49, 60, 24);
+ { view_FD_CW[7] = new Fl_Output(411, 49, 50, 24);
+ view_FD_CW[7]->textfont(4);
+ view_FD_CW[7]->textsize(12);
view_FD_CW[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[7]
- { view_FD_CW[8] = new Fl_Output(536, 49, 60, 24);
+ { view_FD_CW[8] = new Fl_Output(462, 49, 50, 24);
+ view_FD_CW[8]->textfont(4);
+ view_FD_CW[8]->textsize(12);
view_FD_CW[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[8]
- { view_FD_CW[9] = new Fl_Output(598, 49, 60, 24);
+ { view_FD_CW[9] = new Fl_Output(513, 49, 50, 24);
+ view_FD_CW[9]->textfont(4);
+ view_FD_CW[9]->textsize(12);
view_FD_CW[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[9]
- { view_FD_CW[10] = new Fl_Output(659, 49, 60, 24);
+ { view_FD_CW[10] = new Fl_Output(564, 49, 50, 24);
+ view_FD_CW[10]->textfont(4);
+ view_FD_CW[10]->textsize(12);
view_FD_CW[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[10]
- { view_FD_CW[11] = new Fl_Output(719, 49, 60, 24);
+ { view_FD_CW[11] = new Fl_Output(615, 49, 50, 24);
+ view_FD_CW[11]->textfont(4);
+ view_FD_CW[11]->textsize(12);
view_FD_CW[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW[11]
- { view_FD_CW_OP[0] = new Fl_Output(55, 73, 60, 24, _("Oper\'"));
+ { view_FD_CW_OP[0] = new Fl_Output(55, 75, 50, 24, _("Oper\'"));
+ view_FD_CW_OP[0]->textfont(4);
+ view_FD_CW_OP[0]->textsize(12);
} // Fl_Output* view_FD_CW_OP[0]
- { view_FD_CW_OP[1] = new Fl_Output(115, 73, 60, 24);
+ { view_FD_CW_OP[1] = new Fl_Output(106, 73, 50, 24);
+ view_FD_CW_OP[1]->textfont(4);
+ view_FD_CW_OP[1]->textsize(12);
view_FD_CW_OP[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[1]
- { view_FD_CW_OP[2] = new Fl_Output(174, 73, 60, 24);
+ { view_FD_CW_OP[2] = new Fl_Output(156, 73, 50, 24);
+ view_FD_CW_OP[2]->textfont(4);
+ view_FD_CW_OP[2]->textsize(12);
view_FD_CW_OP[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[2]
- { view_FD_CW_OP[3] = new Fl_Output(234, 73, 60, 24);
+ { view_FD_CW_OP[3] = new Fl_Output(207, 73, 50, 24);
+ view_FD_CW_OP[3]->textfont(4);
+ view_FD_CW_OP[3]->textsize(12);
view_FD_CW_OP[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[3]
- { view_FD_CW_OP[4] = new Fl_Output(293, 73, 60, 24);
+ { view_FD_CW_OP[4] = new Fl_Output(258, 73, 50, 24);
+ view_FD_CW_OP[4]->textfont(4);
+ view_FD_CW_OP[4]->textsize(12);
view_FD_CW_OP[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[4]
- { view_FD_CW_OP[5] = new Fl_Output(353, 73, 60, 24);
+ { view_FD_CW_OP[5] = new Fl_Output(309, 73, 50, 24);
+ view_FD_CW_OP[5]->textfont(4);
+ view_FD_CW_OP[5]->textsize(12);
view_FD_CW_OP[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[5]
- { view_FD_CW_OP[6] = new Fl_Output(415, 73, 60, 24);
+ { view_FD_CW_OP[6] = new Fl_Output(360, 73, 50, 24);
+ view_FD_CW_OP[6]->textfont(4);
+ view_FD_CW_OP[6]->textsize(12);
view_FD_CW_OP[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[6]
- { view_FD_CW_OP[7] = new Fl_Output(475, 73, 60, 24);
+ { view_FD_CW_OP[7] = new Fl_Output(411, 73, 50, 24);
+ view_FD_CW_OP[7]->textfont(4);
+ view_FD_CW_OP[7]->textsize(12);
view_FD_CW_OP[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[7]
- { view_FD_CW_OP[8] = new Fl_Output(536, 73, 60, 24);
+ { view_FD_CW_OP[8] = new Fl_Output(462, 73, 50, 24);
+ view_FD_CW_OP[8]->textfont(4);
+ view_FD_CW_OP[8]->textsize(12);
view_FD_CW_OP[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[8]
- { view_FD_CW_OP[9] = new Fl_Output(598, 73, 60, 24);
+ { view_FD_CW_OP[9] = new Fl_Output(513, 73, 50, 24);
+ view_FD_CW_OP[9]->textfont(4);
+ view_FD_CW_OP[9]->textsize(12);
view_FD_CW_OP[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[9]
- { view_FD_CW_OP[10] = new Fl_Output(659, 73, 60, 24);
+ { view_FD_CW_OP[10] = new Fl_Output(564, 73, 50, 24);
+ view_FD_CW_OP[10]->textfont(4);
+ view_FD_CW_OP[10]->textsize(12);
view_FD_CW_OP[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[10]
- { view_FD_CW_OP[11] = new Fl_Output(719, 73, 60, 24);
+ { view_FD_CW_OP[11] = new Fl_Output(615, 73, 50, 24);
+ view_FD_CW_OP[11]->textfont(4);
+ view_FD_CW_OP[11]->textsize(12);
view_FD_CW_OP[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_CW_OP[11]
- { view_FD_DIG[0] = new Fl_Output(55, 103, 60, 24, _("DIG"));
+ { view_FD_DIG[0] = new Fl_Output(55, 102, 50, 24, _("DIG"));
+ view_FD_DIG[0]->textfont(4);
+ view_FD_DIG[0]->textsize(12);
} // Fl_Output* view_FD_DIG[0]
- { view_FD_DIG[1] = new Fl_Output(115, 103, 60, 24);
+ { view_FD_DIG[1] = new Fl_Output(106, 103, 50, 24);
+ view_FD_DIG[1]->textfont(4);
+ view_FD_DIG[1]->textsize(12);
view_FD_DIG[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[1]
- { view_FD_DIG[2] = new Fl_Output(174, 103, 60, 24);
+ { view_FD_DIG[2] = new Fl_Output(156, 103, 50, 24);
+ view_FD_DIG[2]->textfont(4);
+ view_FD_DIG[2]->textsize(12);
view_FD_DIG[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[2]
- { view_FD_DIG[3] = new Fl_Output(234, 103, 60, 24);
+ { view_FD_DIG[3] = new Fl_Output(207, 103, 50, 24);
+ view_FD_DIG[3]->textfont(4);
+ view_FD_DIG[3]->textsize(12);
view_FD_DIG[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[3]
- { view_FD_DIG[4] = new Fl_Output(293, 103, 60, 24);
+ { view_FD_DIG[4] = new Fl_Output(258, 103, 50, 24);
+ view_FD_DIG[4]->textfont(4);
+ view_FD_DIG[4]->textsize(12);
view_FD_DIG[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[4]
- { view_FD_DIG[5] = new Fl_Output(353, 103, 60, 24);
+ { view_FD_DIG[5] = new Fl_Output(309, 103, 50, 24);
+ view_FD_DIG[5]->textfont(4);
+ view_FD_DIG[5]->textsize(12);
view_FD_DIG[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[5]
- { view_FD_DIG[6] = new Fl_Output(415, 103, 60, 24);
+ { view_FD_DIG[6] = new Fl_Output(360, 103, 50, 24);
+ view_FD_DIG[6]->textfont(4);
+ view_FD_DIG[6]->textsize(12);
view_FD_DIG[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[6]
- { view_FD_DIG[7] = new Fl_Output(475, 103, 60, 24);
+ { view_FD_DIG[7] = new Fl_Output(411, 103, 50, 24);
+ view_FD_DIG[7]->textfont(4);
+ view_FD_DIG[7]->textsize(12);
view_FD_DIG[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[7]
- { view_FD_DIG[8] = new Fl_Output(536, 103, 60, 24);
+ { view_FD_DIG[8] = new Fl_Output(462, 103, 50, 24);
+ view_FD_DIG[8]->textfont(4);
+ view_FD_DIG[8]->textsize(12);
view_FD_DIG[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[8]
- { view_FD_DIG[9] = new Fl_Output(598, 103, 60, 24);
+ { view_FD_DIG[9] = new Fl_Output(513, 103, 50, 24);
+ view_FD_DIG[9]->textfont(4);
+ view_FD_DIG[9]->textsize(12);
view_FD_DIG[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[9]
- { view_FD_DIG[10] = new Fl_Output(659, 103, 60, 24);
+ { view_FD_DIG[10] = new Fl_Output(564, 103, 50, 24);
+ view_FD_DIG[10]->textfont(4);
+ view_FD_DIG[10]->textsize(12);
view_FD_DIG[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[10]
- { view_FD_DIG[11] = new Fl_Output(719, 103, 60, 24);
+ { view_FD_DIG[11] = new Fl_Output(615, 103, 50, 24);
+ view_FD_DIG[11]->textfont(4);
+ view_FD_DIG[11]->textsize(12);
view_FD_DIG[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG[11]
- { view_FD_DIG_OP[0] = new Fl_Output(55, 128, 60, 24, _("Oper\'"));
+ { view_FD_DIG_OP[0] = new Fl_Output(55, 129, 50, 24, _("Oper\'"));
+ view_FD_DIG_OP[0]->textfont(4);
+ view_FD_DIG_OP[0]->textsize(12);
} // Fl_Output* view_FD_DIG_OP[0]
- { view_FD_DIG_OP[1] = new Fl_Output(115, 128, 60, 24);
+ { view_FD_DIG_OP[1] = new Fl_Output(106, 128, 50, 24);
+ view_FD_DIG_OP[1]->textfont(4);
+ view_FD_DIG_OP[1]->textsize(12);
view_FD_DIG_OP[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[1]
- { view_FD_DIG_OP[2] = new Fl_Output(174, 128, 60, 24);
+ { view_FD_DIG_OP[2] = new Fl_Output(156, 128, 50, 24);
+ view_FD_DIG_OP[2]->textfont(4);
+ view_FD_DIG_OP[2]->textsize(12);
view_FD_DIG_OP[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[2]
- { view_FD_DIG_OP[3] = new Fl_Output(234, 128, 60, 24);
+ { view_FD_DIG_OP[3] = new Fl_Output(207, 128, 50, 24);
+ view_FD_DIG_OP[3]->textfont(4);
+ view_FD_DIG_OP[3]->textsize(12);
view_FD_DIG_OP[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[3]
- { view_FD_DIG_OP[4] = new Fl_Output(293, 128, 60, 24);
+ { view_FD_DIG_OP[4] = new Fl_Output(258, 128, 50, 24);
+ view_FD_DIG_OP[4]->textfont(4);
+ view_FD_DIG_OP[4]->textsize(12);
view_FD_DIG_OP[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[4]
- { view_FD_DIG_OP[5] = new Fl_Output(353, 128, 60, 24);
+ { view_FD_DIG_OP[5] = new Fl_Output(309, 128, 50, 24);
+ view_FD_DIG_OP[5]->textfont(4);
+ view_FD_DIG_OP[5]->textsize(12);
view_FD_DIG_OP[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[5]
- { view_FD_DIG_OP[6] = new Fl_Output(415, 128, 60, 24);
+ { view_FD_DIG_OP[6] = new Fl_Output(360, 128, 50, 24);
+ view_FD_DIG_OP[6]->textfont(4);
+ view_FD_DIG_OP[6]->textsize(12);
view_FD_DIG_OP[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[6]
- { view_FD_DIG_OP[7] = new Fl_Output(475, 128, 60, 24);
+ { view_FD_DIG_OP[7] = new Fl_Output(411, 128, 50, 24);
+ view_FD_DIG_OP[7]->textfont(4);
+ view_FD_DIG_OP[7]->textsize(12);
view_FD_DIG_OP[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[7]
- { view_FD_DIG_OP[8] = new Fl_Output(536, 128, 60, 24);
+ { view_FD_DIG_OP[8] = new Fl_Output(462, 128, 50, 24);
+ view_FD_DIG_OP[8]->textfont(4);
+ view_FD_DIG_OP[8]->textsize(12);
view_FD_DIG_OP[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[8]
- { view_FD_DIG_OP[9] = new Fl_Output(598, 128, 60, 24);
+ { view_FD_DIG_OP[9] = new Fl_Output(513, 128, 50, 24);
+ view_FD_DIG_OP[9]->textfont(4);
+ view_FD_DIG_OP[9]->textsize(12);
view_FD_DIG_OP[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[9]
- { view_FD_DIG_OP[10] = new Fl_Output(659, 128, 60, 24);
+ { view_FD_DIG_OP[10] = new Fl_Output(564, 128, 50, 24);
+ view_FD_DIG_OP[10]->textfont(4);
+ view_FD_DIG_OP[10]->textsize(12);
view_FD_DIG_OP[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[10]
- { view_FD_DIG_OP[11] = new Fl_Output(719, 128, 60, 24);
+ { view_FD_DIG_OP[11] = new Fl_Output(615, 128, 50, 24);
+ view_FD_DIG_OP[11]->textfont(4);
+ view_FD_DIG_OP[11]->textsize(12);
view_FD_DIG_OP[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_DIG_OP[11]
- { view_FD_PHONE[0] = new Fl_Output(55, 158, 60, 24, _("PHONE"));
+ { view_FD_PHONE[0] = new Fl_Output(55, 156, 50, 24, _("PHONE"));
+ view_FD_PHONE[0]->textfont(4);
+ view_FD_PHONE[0]->textsize(12);
} // Fl_Output* view_FD_PHONE[0]
- { view_FD_PHONE[1] = new Fl_Output(115, 158, 60, 24);
+ { view_FD_PHONE[1] = new Fl_Output(106, 158, 50, 24);
+ view_FD_PHONE[1]->textfont(4);
+ view_FD_PHONE[1]->textsize(12);
view_FD_PHONE[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[1]
- { view_FD_PHONE[2] = new Fl_Output(174, 158, 60, 24);
+ { view_FD_PHONE[2] = new Fl_Output(156, 158, 50, 24);
+ view_FD_PHONE[2]->textfont(4);
+ view_FD_PHONE[2]->textsize(12);
view_FD_PHONE[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[2]
- { view_FD_PHONE[3] = new Fl_Output(234, 158, 60, 24);
+ { view_FD_PHONE[3] = new Fl_Output(207, 158, 50, 24);
+ view_FD_PHONE[3]->textfont(4);
+ view_FD_PHONE[3]->textsize(12);
view_FD_PHONE[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[3]
- { view_FD_PHONE[4] = new Fl_Output(293, 158, 60, 24);
+ { view_FD_PHONE[4] = new Fl_Output(258, 158, 50, 24);
+ view_FD_PHONE[4]->textfont(4);
+ view_FD_PHONE[4]->textsize(12);
view_FD_PHONE[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[4]
- { view_FD_PHONE[5] = new Fl_Output(353, 158, 60, 24);
+ { view_FD_PHONE[5] = new Fl_Output(309, 158, 50, 24);
+ view_FD_PHONE[5]->textfont(4);
+ view_FD_PHONE[5]->textsize(12);
view_FD_PHONE[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[5]
- { view_FD_PHONE[6] = new Fl_Output(415, 158, 60, 24);
+ { view_FD_PHONE[6] = new Fl_Output(360, 158, 50, 24);
+ view_FD_PHONE[6]->textfont(4);
+ view_FD_PHONE[6]->textsize(12);
view_FD_PHONE[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[6]
- { view_FD_PHONE[7] = new Fl_Output(475, 158, 60, 24);
+ { view_FD_PHONE[7] = new Fl_Output(411, 158, 50, 24);
+ view_FD_PHONE[7]->textfont(4);
+ view_FD_PHONE[7]->textsize(12);
view_FD_PHONE[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[7]
- { view_FD_PHONE[8] = new Fl_Output(536, 158, 60, 24);
+ { view_FD_PHONE[8] = new Fl_Output(462, 158, 50, 24);
+ view_FD_PHONE[8]->textfont(4);
+ view_FD_PHONE[8]->textsize(12);
view_FD_PHONE[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[8]
- { view_FD_PHONE[9] = new Fl_Output(598, 158, 60, 24);
+ { view_FD_PHONE[9] = new Fl_Output(513, 158, 50, 24);
+ view_FD_PHONE[9]->textfont(4);
+ view_FD_PHONE[9]->textsize(12);
view_FD_PHONE[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[9]
- { view_FD_PHONE[10] = new Fl_Output(659, 158, 60, 24);
+ { view_FD_PHONE[10] = new Fl_Output(564, 158, 50, 24);
+ view_FD_PHONE[10]->textfont(4);
+ view_FD_PHONE[10]->textsize(12);
view_FD_PHONE[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[10]
- { view_FD_PHONE[11] = new Fl_Output(719, 158, 60, 24);
+ { view_FD_PHONE[11] = new Fl_Output(615, 158, 50, 24);
+ view_FD_PHONE[11]->textfont(4);
+ view_FD_PHONE[11]->textsize(12);
view_FD_PHONE[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE[11]
- { view_FD_PHONE_OP[0] = new Fl_Output(55, 183, 60, 24, _("Oper\'"));
+ { view_FD_PHONE_OP[0] = new Fl_Output(55, 183, 50, 24, _("Oper\'"));
+ view_FD_PHONE_OP[0]->textfont(4);
+ view_FD_PHONE_OP[0]->textsize(12);
} // Fl_Output* view_FD_PHONE_OP[0]
- { view_FD_PHONE_OP[1] = new Fl_Output(115, 183, 60, 24);
+ { view_FD_PHONE_OP[1] = new Fl_Output(106, 183, 50, 24);
+ view_FD_PHONE_OP[1]->textfont(4);
+ view_FD_PHONE_OP[1]->textsize(12);
view_FD_PHONE_OP[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[1]
- { view_FD_PHONE_OP[2] = new Fl_Output(174, 183, 60, 24);
+ { view_FD_PHONE_OP[2] = new Fl_Output(156, 183, 50, 24);
+ view_FD_PHONE_OP[2]->textfont(4);
+ view_FD_PHONE_OP[2]->textsize(12);
view_FD_PHONE_OP[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[2]
- { view_FD_PHONE_OP[3] = new Fl_Output(234, 183, 60, 24);
+ { view_FD_PHONE_OP[3] = new Fl_Output(207, 183, 50, 24);
+ view_FD_PHONE_OP[3]->textfont(4);
+ view_FD_PHONE_OP[3]->textsize(12);
view_FD_PHONE_OP[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[3]
- { view_FD_PHONE_OP[4] = new Fl_Output(293, 183, 60, 24);
+ { view_FD_PHONE_OP[4] = new Fl_Output(258, 183, 50, 24);
+ view_FD_PHONE_OP[4]->textfont(4);
+ view_FD_PHONE_OP[4]->textsize(12);
view_FD_PHONE_OP[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[4]
- { view_FD_PHONE_OP[5] = new Fl_Output(353, 183, 60, 24);
+ { view_FD_PHONE_OP[5] = new Fl_Output(309, 183, 50, 24);
+ view_FD_PHONE_OP[5]->textfont(4);
+ view_FD_PHONE_OP[5]->textsize(12);
view_FD_PHONE_OP[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[5]
- { view_FD_PHONE_OP[6] = new Fl_Output(415, 183, 60, 24);
+ { view_FD_PHONE_OP[6] = new Fl_Output(360, 183, 50, 24);
+ view_FD_PHONE_OP[6]->textfont(4);
+ view_FD_PHONE_OP[6]->textsize(12);
view_FD_PHONE_OP[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[6]
- { view_FD_PHONE_OP[7] = new Fl_Output(475, 183, 60, 24);
+ { view_FD_PHONE_OP[7] = new Fl_Output(411, 183, 50, 24);
+ view_FD_PHONE_OP[7]->textfont(4);
+ view_FD_PHONE_OP[7]->textsize(12);
view_FD_PHONE_OP[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[7]
- { view_FD_PHONE_OP[8] = new Fl_Output(536, 183, 60, 24);
+ { view_FD_PHONE_OP[8] = new Fl_Output(462, 183, 50, 24);
+ view_FD_PHONE_OP[8]->textfont(4);
+ view_FD_PHONE_OP[8]->textsize(12);
view_FD_PHONE_OP[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[8]
- { view_FD_PHONE_OP[9] = new Fl_Output(598, 183, 60, 24);
+ { view_FD_PHONE_OP[9] = new Fl_Output(513, 183, 50, 24);
+ view_FD_PHONE_OP[9]->textfont(4);
+ view_FD_PHONE_OP[9]->textsize(12);
view_FD_PHONE_OP[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[9]
- { view_FD_PHONE_OP[10] = new Fl_Output(659, 183, 60, 24);
+ { view_FD_PHONE_OP[10] = new Fl_Output(564, 183, 50, 24);
+ view_FD_PHONE_OP[10]->textfont(4);
+ view_FD_PHONE_OP[10]->textsize(12);
view_FD_PHONE_OP[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[10]
- { view_FD_PHONE_OP[11] = new Fl_Output(719, 183, 60, 24);
+ { view_FD_PHONE_OP[11] = new Fl_Output(615, 183, 50, 24);
+ view_FD_PHONE_OP[11]->textfont(4);
+ view_FD_PHONE_OP[11]->textsize(12);
view_FD_PHONE_OP[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Output* view_FD_PHONE_OP[11]
- { Fl_Group* o = new Fl_Group(5, 212, 775, 55, _("\"fdserver\" Client"));
+ { Fl_Box* o = new Fl_Box(60, 33, 40, 17, _("160"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(111, 33, 40, 17, _("80"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(161, 33, 40, 17, _("40"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(212, 33, 40, 17, _("20"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(263, 33, 40, 17, _("17"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(314, 33, 40, 17, _("15"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(365, 33, 40, 17, _("12"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(416, 33, 40, 17, _("10"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(467, 33, 40, 17, _("6"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(518, 33, 40, 17, _("2"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(569, 33, 40, 17, _("220"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(620, 33, 40, 17, _("440"));
+ o->box(FL_FLAT_BOX);
+ } // Fl_Box* o
+ { Fl_Group* o = new Fl_Group(5, 212, 660, 55, _("\"fdserver\" Client"));
o->box(FL_ENGRAVED_BOX);
o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
- { Fl_Input2* o = inp_fd_tcpip_addr = new Fl_Input2(85, 234, 198, 24, _("tcpip addr"));
+ { Fl_Input2* o = inp_fd_tcpip_addr = new Fl_Input2(85, 234, 150, 24, _("tcpip addr"));
inp_fd_tcpip_addr->tooltip(_("fdserver tcipip address"));
inp_fd_tcpip_addr->box(FL_DOWN_BOX);
inp_fd_tcpip_addr->color(FL_BACKGROUND2_COLOR);
@@ -345,7 +489,7 @@ Fl_Double_Window* make_fd_view() {
inp_fd_tcpip_addr->when(FL_WHEN_RELEASE);
o->value(progdefaults.fd_tcpip_addr.c_str());
} // Fl_Input2* inp_fd_tcpip_addr
- { Fl_Input2* o = inp_fd_tcpip_port = new Fl_Input2(325, 234, 75, 24, _("port"));
+ { Fl_Input2* o = inp_fd_tcpip_port = new Fl_Input2(273, 234, 75, 24, _("port"));
inp_fd_tcpip_port->tooltip(_("fdserver tcpip port"));
inp_fd_tcpip_port->box(FL_DOWN_BOX);
inp_fd_tcpip_port->color(FL_BACKGROUND2_COLOR);
@@ -359,7 +503,7 @@ Fl_Double_Window* make_fd_view() {
inp_fd_tcpip_port->when(FL_WHEN_RELEASE);
o->value(progdefaults.fd_tcpip_port.c_str());
} // Fl_Input2* inp_fd_tcpip_port
- { Fl_Input2* o = inp_fd_op_call = new Fl_Input2(500, 234, 90, 24, _("OP callsign"));
+ { Fl_Input2* o = inp_fd_op_call = new Fl_Input2(402, 234, 90, 24, _("OP call"));
inp_fd_op_call->tooltip(_("free form exchange"));
inp_fd_op_call->box(FL_DOWN_BOX);
inp_fd_op_call->color(FL_BACKGROUND2_COLOR);
@@ -373,13 +517,13 @@ Fl_Double_Window* make_fd_view() {
inp_fd_op_call->when(FL_WHEN_RELEASE);
o->value(progdefaults.fd_op_call.c_str());
} // Fl_Input2* inp_fd_op_call
- { Fl_Check_Button* o = btn_fd_connect = new Fl_Check_Button(608, 236, 70, 20, _("Connect"));
+ { Fl_Check_Button* o = btn_fd_connect = new Fl_Check_Button(502, 236, 70, 20, _("Connect"));
btn_fd_connect->tooltip(_("Connect / Disconnect^jAddr/Port/OP required"));
btn_fd_connect->down_box(FL_DOWN_BOX);
btn_fd_connect->callback((Fl_Callback*)cb_btn_fd_connect);
o->value(progdefaults.connect_to_fdserver);
} // Fl_Check_Button* btn_fd_connect
- { box_fdserver_connected = new Fl_Box(722, 237, 18, 18, _("Connected"));
+ { box_fdserver_connected = new Fl_Box(608, 237, 18, 18, _("Connected"));
box_fdserver_connected->box(FL_ROUND_DOWN_BOX);
box_fdserver_connected->color((Fl_Color)31);
box_fdserver_connected->align(Fl_Align(FL_ALIGN_TOP));
diff --git a/src/logbook/fd_view.fl b/src/logbook/fd_view.fl
index c2fc549c..47b5418f 100644
--- a/src/logbook/fd_view.fl
+++ b/src/logbook/fd_view.fl
@@ -1,5 +1,5 @@
# data file for the Fltk User Interface Designer (fluid)
-version 1.0304
+version 1.0305
i18n_type 1
i18n_include "gettext.h"
i18n_function _
@@ -11,312 +11,312 @@ decl {\#include "configuration.h"} {private local
Function {make_fd_view()} {open
} {
Fl_Window {} {
- label {Field Day Viewer - use with program 'fdserver'} open
- xywh {745 38 785 270} type Double align 5 visible
+ label {Field Day Viewer - use with program 'fdserver'} open selected
+ xywh {603 168 670 270} type Double align 5 visible
} {
Fl_Output view_FD_call {
label {FD Call}
- xywh {98 6 77 24}
+ xywh {59 6 77 24}
code0 {o->value(progdefaults.my_FD_call.c_str());}
}
Fl_Output view_FD_class {
label {FD Class}
- xywh {277 5 38 24}
+ xywh {219 5 38 24}
code0 {o->value(progdefaults.my_FD_class.c_str());}
}
Fl_Output view_FD_section {
label {FD Section}
- xywh {417 5 38 24}
+ xywh {341 5 38 24}
code0 {o->value(progdefaults.my_FD_section.c_str());}
}
Fl_Output view_FD_mult {
label {FD Mult}
- xywh {557 5 38 24}
+ xywh {462 5 38 24}
code0 {o->value(progdefaults.my_FD_mult.c_str());}
}
Fl_Output view_FD_score {
label Score
- xywh {698 5 80 24}
- }
- Fl_Box {} {
- label 160
- xywh {55 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 80
- xywh {114 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 40
- xywh {174 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 20
- xywh {233 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 17
- xywh {293 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 15
- xywh {352 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 12
- xywh {414 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 10
- xywh {476 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 6
- xywh {538 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 2
- xywh {600 33 50 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 220
- xywh {660 33 60 17} box FLAT_BOX
- }
- Fl_Box {} {
- label 440
- xywh {720 33 60 17} box FLAT_BOX
+ xywh {584 5 80 24}
}
Fl_Output {view_FD_CW[0]} {
label CW
- xywh {55 49 60 24}
+ xywh {55 49 50 24} textfont 4 textsize 12
}
Fl_Output {view_FD_CW[1]} {
- xywh {115 49 60 24} align 20
+ xywh {106 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[2]} {
- xywh {174 49 60 24} align 20
+ xywh {156 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[3]} {
- xywh {234 49 60 24} align 20
+ xywh {207 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[4]} {
- xywh {293 49 60 24} align 20
+ xywh {258 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[5]} {
- xywh {353 49 60 24} align 20
+ xywh {309 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[6]} {
- xywh {415 49 60 24} align 20
+ xywh {360 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[7]} {
- xywh {475 49 60 24} align 20
+ xywh {411 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[8]} {
- xywh {536 49 60 24} align 20
+ xywh {462 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[9]} {
- xywh {598 49 60 24} align 20
+ xywh {513 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[10]} {
- xywh {659 49 60 24} align 20
+ xywh {564 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW[11]} {
- xywh {719 49 60 24} align 20
+ xywh {615 49 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[0]} {
label {Oper'}
- xywh {55 73 60 24}
+ xywh {55 75 50 24} textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[1]} {
- xywh {115 73 60 24} align 20
+ xywh {106 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[2]} {
- xywh {174 73 60 24} align 20
+ xywh {156 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[3]} {
- xywh {234 73 60 24} align 20
+ xywh {207 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[4]} {
- xywh {293 73 60 24} align 20
+ xywh {258 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[5]} {
- xywh {353 73 60 24} align 20
+ xywh {309 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[6]} {
- xywh {415 73 60 24} align 20
+ xywh {360 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[7]} {
- xywh {475 73 60 24} align 20
+ xywh {411 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[8]} {
- xywh {536 73 60 24} align 20
+ xywh {462 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[9]} {
- xywh {598 73 60 24} align 20
+ xywh {513 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[10]} {
- xywh {659 73 60 24} align 20
+ xywh {564 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_CW_OP[11]} {
- xywh {719 73 60 24} align 20
+ xywh {615 73 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[0]} {
label DIG
- xywh {55 103 60 24}
+ xywh {55 102 50 24} textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[1]} {
- xywh {115 103 60 24} align 20
+ xywh {106 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[2]} {
- xywh {174 103 60 24} align 20
+ xywh {156 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[3]} {
- xywh {234 103 60 24} align 20
+ xywh {207 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[4]} {
- xywh {293 103 60 24} align 20
+ xywh {258 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[5]} {
- xywh {353 103 60 24} align 20
+ xywh {309 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[6]} {
- xywh {415 103 60 24} align 20
+ xywh {360 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[7]} {
- xywh {475 103 60 24} align 20
+ xywh {411 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[8]} {
- xywh {536 103 60 24} align 20
+ xywh {462 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[9]} {
- xywh {598 103 60 24} align 20
+ xywh {513 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[10]} {
- xywh {659 103 60 24} align 20
+ xywh {564 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG[11]} {
- xywh {719 103 60 24} align 20
+ xywh {615 103 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[0]} {
label {Oper'}
- xywh {55 128 60 24}
+ xywh {55 129 50 24} textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[1]} {
- xywh {115 128 60 24} align 20
+ xywh {106 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[2]} {
- xywh {174 128 60 24} align 20
+ xywh {156 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[3]} {
- xywh {234 128 60 24} align 20
+ xywh {207 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[4]} {
- xywh {293 128 60 24} align 20
+ xywh {258 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[5]} {
- xywh {353 128 60 24} align 20
+ xywh {309 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[6]} {
- xywh {415 128 60 24} align 20
+ xywh {360 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[7]} {
- xywh {475 128 60 24} align 20
+ xywh {411 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[8]} {
- xywh {536 128 60 24} align 20
+ xywh {462 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[9]} {
- xywh {598 128 60 24} align 20
+ xywh {513 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[10]} {
- xywh {659 128 60 24} align 20
+ xywh {564 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_DIG_OP[11]} {
- xywh {719 128 60 24} align 20
+ xywh {615 128 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[0]} {
label PHONE
- xywh {55 158 60 24}
+ xywh {55 156 50 24} textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[1]} {
- xywh {115 158 60 24} align 20
+ xywh {106 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[2]} {
- xywh {174 158 60 24} align 20
+ xywh {156 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[3]} {
- xywh {234 158 60 24} align 20
+ xywh {207 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[4]} {
- xywh {293 158 60 24} align 20
+ xywh {258 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[5]} {
- xywh {353 158 60 24} align 20
+ xywh {309 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[6]} {
- xywh {415 158 60 24} align 20
+ xywh {360 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[7]} {
- xywh {475 158 60 24} align 20
+ xywh {411 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[8]} {
- xywh {536 158 60 24} align 20
+ xywh {462 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[9]} {
- xywh {598 158 60 24} align 20
+ xywh {513 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[10]} {
- xywh {659 158 60 24} align 20
+ xywh {564 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE[11]} {
- xywh {719 158 60 24} align 20
+ xywh {615 158 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[0]} {
label {Oper'}
- xywh {55 183 60 24}
+ xywh {55 183 50 24} textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[1]} {
- xywh {115 183 60 24} align 20
+ xywh {106 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[2]} {
- xywh {174 183 60 24} align 20
+ xywh {156 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[3]} {
- xywh {234 183 60 24} align 20
+ xywh {207 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[4]} {
- xywh {293 183 60 24} align 20
+ xywh {258 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[5]} {
- xywh {353 183 60 24} align 20
+ xywh {309 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[6]} {
- xywh {415 183 60 24} align 20
+ xywh {360 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[7]} {
- xywh {475 183 60 24} align 20
+ xywh {411 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[8]} {
- xywh {536 183 60 24} align 20
+ xywh {462 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[9]} {
- xywh {598 183 60 24} align 20
+ xywh {513 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[10]} {
- xywh {659 183 60 24} align 20
+ xywh {564 183 50 24} align 20 textfont 4 textsize 12
}
Fl_Output {view_FD_PHONE_OP[11]} {
- xywh {719 183 60 24} align 20
+ xywh {615 183 50 24} align 20 textfont 4 textsize 12
+ }
+ Fl_Box {} {
+ label 160
+ xywh {60 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 80
+ xywh {111 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 40
+ xywh {161 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 20
+ xywh {212 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 17
+ xywh {263 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 15
+ xywh {314 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 12
+ xywh {365 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 10
+ xywh {416 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 6
+ xywh {467 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 2
+ xywh {518 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 220
+ xywh {569 33 40 17} box FLAT_BOX
+ }
+ Fl_Box {} {
+ label 440
+ xywh {620 33 40 17} box FLAT_BOX
}
Fl_Group {} {
label {"fdserver" Client} open
- xywh {5 212 775 55} box ENGRAVED_BOX align 21
+ xywh {5 212 660 55} box ENGRAVED_BOX align 21
} {
Fl_Input inp_fd_tcpip_addr {
label {tcpip addr}
callback {progdefaults.fd_tcpip_addr=o->value();
progdefaults.changed = true;}
- tooltip {fdserver tcipip address} xywh {85 234 198 24}
+ tooltip {fdserver tcipip address} xywh {85 234 150 24}
code0 {o->value(progdefaults.fd_tcpip_addr.c_str());}
code1 {\#include "flinput2.h"}
class Fl_Input2
@@ -325,15 +325,15 @@ progdefaults.changed = true;}
label port
callback {progdefaults.fd_tcpip_port=o->value();
progdefaults.changed = true;}
- tooltip {fdserver tcpip port} xywh {325 234 75 24}
+ tooltip {fdserver tcpip port} xywh {273 234 75 24}
code0 {o->value(progdefaults.fd_tcpip_port.c_str());}
class Fl_Input2
}
Fl_Input inp_fd_op_call {
- label {OP callsign}
+ label {OP call}
callback {progdefaults.fd_op_call=o->value();
progdefaults.changed = true;}
- tooltip {free form exchange} xywh {500 234 90 24}
+ tooltip {free form exchange} xywh {402 234 90 24}
code0 {o->value(progdefaults.fd_op_call.c_str());}
class Fl_Input2
}
@@ -348,15 +348,15 @@ if (progdefaults.connect_to_fdserver) {
progdefaults.logging = LOG_QSO;
}
UI_select();}
- tooltip {Connect / Disconnect^jAddr/Port/OP required} xywh {608 236 70 20} down_box DOWN_BOX
+ tooltip {Connect / Disconnect^jAddr/Port/OP required} xywh {502 236 70 20} down_box DOWN_BOX
code0 {o->value(progdefaults.connect_to_fdserver);}
code1 {\#include "confdialog.h"}
code2 {\#include "fl_digi.h"}
code3 {\#include "logsupport.h"}
}
Fl_Box box_fdserver_connected {
- label Connected selected
- xywh {722 237 18 18} box ROUND_DOWN_BOX color 31 align 1
+ label Connected
+ xywh {608 237 18 18} box ROUND_DOWN_BOX color 31 align 1
}
}
}
diff --git a/src/logbook/logsupport.cxx b/src/logbook/logsupport.cxx
index 909b3060..a8ca2ed9 100644
--- a/src/logbook/logsupport.cxx
+++ b/src/logbook/logsupport.cxx
@@ -2190,9 +2190,9 @@ void cabrillo_append_qso (FILE *fp, cQsoRec *rec)
if (btnCabMode->value()) {
mode = adif2export(rec->getField(ADIF_MODE));
if (mode.compare("USB") == 0 || mode.compare("LSB") == 0 ||
+ mode.compare("FM") == 0 ||
mode.compare("SSB") == 0 || mode.compare("PH") == 0 ) mode = "PH";
- else if (mode.compare("FM") == 0 || mode.compare("CW") == 0 ) ;
- else mode = "RY";
+ else if (mode.compare("RTTY") == 0) mode = "RY";
qsoline.append(mode); qsoline.append(" ");
}
diff --git a/src/logbook/table.cxx b/src/logbook/table.cxx
index 31b755de..f5a2b3b2 100644
--- a/src/logbook/table.cxx
+++ b/src/logbook/table.cxx
@@ -1097,28 +1097,30 @@ int Table::handle(int event) {
}
break;
- // Push on cell.
- default:
+ // Push on cell.
+ default:
bool changed = selected != row;
selected = row;
// Create new selection
int len = 0;
char **tableRow = data[selected];
- char *buffer;
+ char *buffer = nullptr;
for (int col = 0; col < nCols; col++)
len += strlen(tableRow[col]) + 1;
// Create a tab separated list from data.
buffer = (char*)malloc(len);
- strcpy(buffer, tableRow[0]);
- for (int col = 1; col < nCols; col++) {
- strcat(buffer, "\t");
- strcat(buffer, tableRow[col]);
+ if (buffer != nullptr) {
+ strcpy(buffer, tableRow[0]);
+ for (int col = 1; col < nCols; col++) {
+ strcat(buffer, "\t");
+ strcat(buffer, tableRow[col]);
+ }
+ Fl::selection(*this, buffer, len);
+ free(buffer);
}
- Fl::selection(*this, buffer, len);
- free(buffer);
// Update view.
damage(DAMAGE_ROWS);
diff --git a/src/main.cxx b/src/main.cxx
index 783e0eec..4e840b54 100644
--- a/src/main.cxx
+++ b/src/main.cxx
@@ -1397,10 +1397,8 @@ void generate_option_help(void) {
<< " Specify the input\n"
<< " Must be a positive integer indicating the number of samples\n"
" of silence to generate as the input"
-# if USE_SNDFILE
", or a filename containing\n"
" non-digit characters"
-#endif
"\n\n"
<< " --benchmark-output FILE\n"
@@ -1882,9 +1880,7 @@ void generate_version_text(void)
<< " libraries : " "FLTK " FLTK_BUILD_VERSION "\n"
<< " " "libsamplerate " << SAMPLERATE_BUILD_VERSION "\n";
-#if USE_SNDFILE
s << " " "libsndfile " << SNDFILE_BUILD_VERSION "\n";
-#endif
#if USE_PORTAUDIO
s << " " "PortAudio " << PORTAUDIO_BUILD_VERSION "\n";
#endif
@@ -1903,11 +1899,9 @@ void generate_version_text(void)
}
s << " libraries : " << src_get_version() << '\n';
-#if USE_SNDFILE
char sndfile_version[32];
sf_command(NULL, SFC_GET_LIB_VERSION, sndfile_version, sizeof(sndfile_version));
s << " " << sndfile_version << '\n';
-#endif
#if USE_PORTAUDIO
s << " " << Pa_GetVersionText() << ' ' << Pa_GetVersion() << '\n';
#endif
diff --git a/src/misc/benchmark.cxx b/src/misc/benchmark.cxx
index 81c3340c..7aa9987e 100644
--- a/src/misc/benchmark.cxx
+++ b/src/misc/benchmark.cxx
@@ -39,9 +39,7 @@
# include "compat.h"
#endif
-#if USE_SNDFILE
# include <sndfile.h>
-#endif
#include "fl_digi.h"
#include "modem.h"
@@ -70,13 +68,8 @@ int setup_benchmark(void)
char* p;
benchmark.samples = (size_t)strtol(benchmark.input.c_str(), &p, 10);
if (*p != '\0') { // invalid char in input string
-#if USE_SNDFILE
// treat as filename
benchmark.samples = 0;
-#else
- LOG_ERROR("Bad input string, \"%s\"", benchmark.input.c_str());
- return 1;
-#endif
}
}
if (!benchmark.output.empty())
@@ -104,9 +97,7 @@ int setup_benchmark(void)
return 0;
}
-#if USE_SNDFILE
SNDFILE* infile = 0;
-#endif
static size_t do_rx(struct rusage ru[2], struct timespec wall_time[2]);
static size_t do_rx_src(struct rusage ru[2], struct timespec wall_time[2]);
@@ -129,7 +120,6 @@ void do_benchmark(void)
<< " rate=" << active_modem->get_samplerate();
LOG_INFO("%s", info.str().c_str());
-#if USE_SNDFILE
if (!benchmark.samples) {
SF_INFO info = { 0, 0, 0, 0, 0, 0 };
if ((infile = sf_open(benchmark.input.c_str(), SFM_READ, &info)) == NULL) {
@@ -137,7 +127,6 @@ void do_benchmark(void)
return;
}
}
-#endif
struct rusage ru[2];
struct timespec wall_time[2];
@@ -151,12 +140,10 @@ void do_benchmark(void)
ru[1].ru_utime -= ru[0].ru_utime;
wall_time[1] -= wall_time[0];
-#if USE_SNDFILE
if (infile) {
sf_close(infile);
infile = 0;
}
-#endif
info << "processed: " << nproc << " samples (decoded " << nrx << ") in "
<< precision(3)
@@ -180,7 +167,6 @@ static size_t do_rx(struct rusage ru[2], struct timespec wall_time[2])
size_t inlen = 1 << 19;
double* inbuf = new double[inlen];
-#if USE_SNDFILE
if (infile) {
nread = 0;
clock_gettime(CLOCK_MONOTONIC, &wall_time[0]);
@@ -189,9 +175,7 @@ static size_t do_rx(struct rusage ru[2], struct timespec wall_time[2])
for (size_t n; (n = sf_readf_double(infile, inbuf, inlen)); nread += n)
active_modem->rx_process(inbuf, n);
}
- else
-#endif
- {
+ else {
memset(inbuf, 0, sizeof(double) * inlen);
clock_gettime(CLOCK_MONOTONIC, &wall_time[0]);
getrusage(RUSAGE_SELF, &ru[0]);
@@ -218,25 +202,21 @@ static long src_read(void* arg, float** data)
*data = inbuf;
return inlen;
}
-#if USE_SNDFILE
static long src_readf(void* arg, float** data)
{
long n = (long)sf_readf_float(infile, inbuf, inlen);
*data = n ? inbuf : 0;
return n;
}
-#endif
static size_t do_rx_src(struct rusage ru[2], struct timespec wall_time[2])
{
int err;
SRC_STATE* src_state;
-#if USE_SNDFILE
if (infile)
src_state = src_callback_new(src_readf, benchmark.src_type, 1, &err, NULL);
else
-#endif
src_state = src_callback_new(src_read, benchmark.src_type, 1, &err, NULL);
if (!src_state) {
@@ -251,7 +231,6 @@ static size_t do_rx_src(struct rusage ru[2], struct timespec wall_time[2])
long n;
size_t nread;
-#if USE_SNDFILE
if (infile) { // read until src returns 0
nread = 0;
clock_gettime(CLOCK_MONOTONIC, &wall_time[0]);
@@ -266,9 +245,7 @@ static size_t do_rx_src(struct rusage ru[2], struct timespec wall_time[2])
nread = (size_t)round(nread * benchmark.src_ratio);
}
- else
-#endif
- { // read benchmark.samples * benchmark.src_ratio
+ else { // read benchmark.samples * benchmark.src_ratio
nread = (size_t)round(benchmark.samples * benchmark.src_ratio);
clock_gettime(CLOCK_MONOTONIC, &wall_time[0]);
getrusage(RUSAGE_SELF, &ru[0]);
diff --git a/src/misc/kiss_io.cxx b/src/misc/kiss_io.cxx
index af76c89e..8cc41915 100644
--- a/src/misc/kiss_io.cxx
+++ b/src/misc/kiss_io.cxx
@@ -786,7 +786,7 @@ static void reply_csma_mode(char *arg)
static void set_busy_channel_inhibit(char *arg)
{
std::string argstr = "";
- time_t temp = 0;
+ int temp = 0;
if(arg) {
argstr.assign(arg);
@@ -796,7 +796,7 @@ static void set_busy_channel_inhibit(char *arg)
temp_disable_tx_inhibit = time(0) + temp_disable_tx_duration;
}
} else if(isdigit(argstr[0])) {
- sscanf(arg, "%lu", &temp);
+ sscanf(arg, "%d", &temp);
if(temp == 0)
temp_disable_tx_duration = DISABLE_TX_INHIBIT_DURATION;
else
diff --git a/src/misc/log.cxx b/src/misc/log.cxx
index 112d1e7f..f11122fa 100644
--- a/src/misc/log.cxx
+++ b/src/misc/log.cxx
@@ -95,7 +95,9 @@ void cLogfile::log_to_file(log_t type, const string& s)
else {
time(&t);
gmtime_r(&t, &tm);
- strftime(timestr, sizeof(timestr), "%a %b %e %H:%M:%S %Y UTC", &tm);
+ // Was %e (space padded month) but it's not available in the MS C
+ // runtime library, %d (zero-padded) is more portable.
+ strftime(timestr, sizeof(timestr), "%a %b %d %H:%M:%S %Y UTC", &tm);
fprintf(logfile, "\n--- Logging %s at %s ---\n", s.c_str(), timestr);
}
diff --git a/src/navtex/navtex.cxx b/src/navtex/navtex.cxx
index a84dc202..f196b2d3 100644
--- a/src/navtex/navtex.cxx
+++ b/src/navtex/navtex.cxx
@@ -1231,7 +1231,7 @@ private:
// the average of the two is a valid character.
for (i = 0; i < 7; i++) {
int a = m_bit_values[m_bit_cursor + i];
- int r = m_bit_values[rep + i];
+ int r = m_bit_values[reppos + i];
avg[i] = a + r;
}
diff --git a/src/network/socket.cxx b/src/network/socket.cxx
index 34075154..18a2e3e0 100644
--- a/src/network/socket.cxx
+++ b/src/network/socket.cxx
@@ -1181,7 +1181,7 @@ size_t Socket::sendTo(const void* buf, size_t len)
unsigned long host_addr = get_address4((struct sockaddr *)useAddr);
unsigned int host_port = get_port((struct sockaddr *) useAddr);
- LOG_VERBOSE("HAP:%lX:%d count=%d buf=%s", host_addr, host_port, len, buf);
+ LOG_VERBOSE("HAP:%lX:%d count=%d buf=%s", host_addr, host_port, (int)len, (char*)buf);
}
#endif
diff --git a/src/network/xmlrpc.cxx b/src/network/xmlrpc.cxx
index 2da693ef..e687fc6c 100644
--- a/src/network/xmlrpc.cxx
+++ b/src/network/xmlrpc.cxx
@@ -1083,9 +1083,10 @@ LOG_VERBOSE("main.set_wf_sideband %s", s.c_str());
void xmlrpc_set_qsy(long long rfc)
{
- wf->rfcarrier(rfc);
+ unsigned long int freq = static_cast<unsigned long int>(rfc);
+ wf->rfcarrier(freq);
wf->movetocenter();
- show_frequency(rfc);
+ show_frequency(freq);
}
class Main_set_freq : public xmlrpc_c::method
@@ -2215,8 +2216,8 @@ public:
{
XMLRPC_LOCK;
double rfc = wf->rfcarrier();
-long int f = (long int)(params.getDouble(0,0.0));
-LOG_VERBOSE("rig.set_frequency: %ld", f);
+ unsigned long int f = (long int)(params.getDouble(0,0.0));
+ LOG_VERBOSE("rig.set_frequency: %lu", f);
REQ(set_frequency, (long long int)params.getDouble(0, 0.0));
*retval = xmlrpc_c::value_double(rfc);
}
diff --git a/src/qrunner/qrunner.cxx b/src/qrunner/qrunner.cxx
index 04756e06..3cde3c63 100644
--- a/src/qrunner/qrunner.cxx
+++ b/src/qrunner/qrunner.cxx
@@ -111,7 +111,7 @@ qrunner::~qrunner()
void qrunner::attach(int id_no, std::string id_string)
{
- Fl::add_fd(pfd[0], FL_READ, qrunner::execute, this);
+ Fl::add_fd(pfd[0], FL_READ, reinterpret_cast<Fl_FD_Handler>(qrunner::execute), this);
attached = true;
_id_no = id_no;
_id_string.assign(id_string);
@@ -119,7 +119,7 @@ void qrunner::attach(int id_no, std::string id_string)
void qrunner::attach(void)
{
- Fl::add_fd(pfd[0], FL_READ, qrunner::execute, this);
+ Fl::add_fd(pfd[0], FL_READ, reinterpret_cast<Fl_FD_Handler>(qrunner::execute), this);
attached = true;
}
void qrunner::detach(void)
diff --git a/src/rigcontrol/FreqControl.cxx b/src/rigcontrol/FreqControl.cxx
index 0b0c4a58..566a5610 100644
--- a/src/rigcontrol/FreqControl.cxx
+++ b/src/rigcontrol/FreqControl.cxx
@@ -44,14 +44,14 @@ const char *cFreqControl::Label[10] = {
void cFreqControl::IncFreq (int nbr) {
double v = (double)val + (double)mult[nbr] * precision;
- if (v <= maxVal) val = (long int)v;
+ if (v <= maxVal) val = (unsigned long int)v;
updatevalue();
do_callback();
}
void cFreqControl::DecFreq (int nbr) {
double v = (double)val - (double)mult[nbr] * precision;
- if (v >= minVal) val = (long int)v;
+ if (v >= minVal) val = (unsigned long int)v;
updatevalue();
do_callback();
}
@@ -60,7 +60,7 @@ void cbSelectDigit (Fl_Widget *btn, void * nbr)
{
Fl_Button *b = (Fl_Button *)btn;
- int Nbr = (int)(reinterpret_cast<long> (nbr));
+ int Nbr = reinterpret_cast<intptr_t> (nbr);
cFreqControl *fc = (cFreqControl *)b->parent();
if (fc->hrd_buttons) {
@@ -132,7 +132,7 @@ cFreqControl::cFreqControl(int x, int y, int w, int h, const char *lbl):
minVal = 0;
double fmaxval = (pow(10.0, nD) - 1) * precision;
- long int UMAX = maximum();
+ unsigned long int UMAX = maximum();
if (fmaxval > UMAX) fmaxval = UMAX;
maxVal = fmaxval;
fmaxval /= 1000.0;
@@ -222,7 +222,7 @@ cFreqControl::~cFreqControl()
void cFreqControl::updatevalue()
{
- long int v = val / precision;
+ unsigned long int v = val / precision;
int i;
if (likely(v > 0L)) {
for (i = 0; i < nD; i++) {
@@ -332,16 +332,16 @@ static void blink_point(Fl_Widget* w)
Fl::add_timeout(0.2, (Fl_Timeout_Handler)blink_point, w);
}
-void cFreqControl::value(long lv)
+void cFreqControl::value(unsigned long int lv)
{
oldval = val = lv;
Fl::remove_timeout((Fl_Timeout_Handler)blink_point, decbx);
updatevalue();
}
-long int cFreqControl::maximum(void)
+unsigned long int cFreqControl::maximum(void)
{
- return (long int)(pow(2.0, 31) - 1);
+ return (unsigned long int)(pow(2.0, 32) - 1);
}
@@ -549,7 +549,7 @@ void cFreqControl::freq_input_cb(Fl_Widget*, void* arg)
{
cFreqControl* fc = reinterpret_cast<cFreqControl*>(arg);
double val = strtod(fc->finp->value(), NULL);
- long int lval;
+ unsigned long int lval;
val *= 1e3;
val += 0.5;
lval = (long)val;
@@ -619,7 +619,7 @@ void cFreqControl::set_ndigits(int nbr)
minVal = 0;
double fmaxval = (pow(10.0, nD) - 1) * precision;
- long int UMAX = (long int)(pow(2.0, 31) - 1);
+ unsigned long int UMAX = (unsigned long int)(pow(2.0, 32) - 1);
if (fmaxval > UMAX) fmaxval = UMAX;
maxVal = fmaxval;
fmaxval /= 1000.0;
diff --git a/src/rigcontrol/rigio.cxx b/src/rigcontrol/rigio.cxx
index 3832f014..458d9ab6 100644
--- a/src/rigcontrol/rigio.cxx
+++ b/src/rigcontrol/rigio.cxx
@@ -1376,7 +1376,7 @@ static void rigcat_set_smeter(void *data)
pwrmeter->hide();
smeter->show();
}
- int val = reinterpret_cast<long>(data);
+ int val = reinterpret_cast<intptr_t>(data);
smeter->value(val);
}
}
@@ -1528,7 +1528,7 @@ static void rigcat_set_pmeter(void *data)
smeter->hide();
pwrmeter->show();
}
- int val = reinterpret_cast<long>(data);
+ int val = reinterpret_cast<intptr_t>(data);
pwrmeter->value(val);
}
}
@@ -1635,7 +1635,7 @@ void rigCAT_get_pwrmeter()
static void rigcat_notch(void *data)
{
- int val = reinterpret_cast<long>(data);
+ int val = reinterpret_cast<intptr_t>(data);
notch_frequency = val;
}
@@ -2080,9 +2080,9 @@ void rigCAT_set_notch(int freq)
LOG_ERROR("%s failed", symbol);
}
-int pwrlevel_data(DATA d, size_t p)
+long pwrlevel_data(DATA d, size_t p)
{
- int val = 0;
+ long val = 0;
if (d.dtype == "BCD") {
if (d.reverse == true)
@@ -2102,7 +2102,7 @@ int pwrlevel_data(DATA d, size_t p)
}
size_t n;
- int pwr1, pwr2, val1, val2;
+ long pwr1, pwr2, val1, val2;
for (n = 0; n < xmlrig.pwrlevel.size() - 1; n++) {
if ((val > xmlrig.pwrlevel[n].val) && (val <= xmlrig.pwrlevel[n+1].val))
break;
@@ -2148,9 +2148,9 @@ int pwrlevel_val(int pwr)
// called by rigio thread
// must use REQ(...) to set the power level control
-static void rigCAT_update_pwrlevel(void *v)
+static void rigCAT_update_pwrlevel(const long v)
{
- long pwr = reinterpret_cast<long>(v);
+ long pwr = v;
char szpwr[10];
snprintf(szpwr, sizeof(szpwr), "%ld", pwr);
progdefaults.mytxpower = szpwr;
@@ -2253,7 +2253,7 @@ void rigCAT_get_pwrlevel()
// convert the data field
pwr = pwrlevel_data(rTemp.data, pData);
- REQ(rigCAT_update_pwrlevel, (void *)pwr);
+ REQ(rigCAT_update_pwrlevel, pwr);
}
void rigCAT_set_pwrlevel(int pwr)
diff --git a/src/rigcontrol/rigsupport.cxx b/src/rigcontrol/rigsupport.cxx
index 68cdcbf8..5aa8ce5f 100644
--- a/src/rigcontrol/rigsupport.cxx
+++ b/src/rigcontrol/rigsupport.cxx
@@ -414,7 +414,7 @@ void qso_movFreq(Fl_Widget* w, void *data)
{
cFreqControl *fc = (cFreqControl *)w;
long int f;
- long restore = reinterpret_cast<long>(data);
+ long restore = reinterpret_cast<intptr_t>(data);
f = fc->value();
if (fc == qsoFreqDisp1) {
qsoFreqDisp2->value(f);
diff --git a/src/rigcontrol/serial.cxx b/src/rigcontrol/serial.cxx
index 3b0d1a1e..921f044d 100644
--- a/src/rigcontrol/serial.cxx
+++ b/src/rigcontrol/serial.cxx
@@ -395,7 +395,7 @@ BOOL Cserial::OpenPort()
LOG_PERROR(win_error_string(errno).c_str());
return FALSE;
}
- LOG_INFO("COM port %s opened, handle = %d", device.c_str(), (int)hComm);
+ LOG_INFO("COM port %s opened, handle = %p", device.c_str(), hComm);
FlushBuffer();
@@ -410,7 +410,7 @@ BOOL Cserial::OpenPort()
///////////////////////////////////////////////////////
void Cserial::ClosePort()
{
- LOG_INFO("Closing COM port, handle = %d", (int)hComm);
+ LOG_INFO("Closing COM port, handle = %p", hComm);
if (hComm != INVALID_HANDLE_VALUE) {
if (restore_tio)
diff --git a/src/rigcontrol/xmlrpc_rig.cxx b/src/rigcontrol/xmlrpc_rig.cxx
index 94aa3be3..88a55094 100644
--- a/src/rigcontrol/xmlrpc_rig.cxx
+++ b/src/rigcontrol/xmlrpc_rig.cxx
@@ -110,11 +110,12 @@ static int wait_bws_timeout = 0;
void xmlrpc_rig_set_qsy(long long rfc)
{
- set_flrig_freq(static_cast<long>(rfc));
- wf->rfcarrier(rfc);
+ unsigned long int freq = static_cast<unsigned long int>(rfc);
+ set_flrig_freq(freq);
+ wf->rfcarrier(freq);
wf->movetocenter();
- show_frequency(rfc);
- LOG_VERBOSE("set qsy: %d", (int)rfc);
+ show_frequency(freq);
+ LOG_VERBOSE("set qsy: %lu", freq);
}
//======================================================================
@@ -192,7 +193,7 @@ pthread_mutex_t mutex_flrig_ptt = PTHREAD_MUTEX_INITIALIZER;
void xmlrpc_rig_show_ptt(void *data)
{
guard_lock flrig_lock(&mutex_flrig_ptt);
- int on = reinterpret_cast<long>(data);
+ int on = reinterpret_cast<intptr_t>(data);
if (wf && (trx_state != STATE_TUNE)) {
wf->xmtrcv->value(on);
wf->xmtrcv->do_callback();
@@ -234,7 +235,7 @@ void flrig_get_ptt()
static bool wait_freq = false; // wait for transceiver to respond
static int wait_freq_timeout = 5; // 5 polls and then disable wait
-static long int xcvr_freq = 0;
+static unsigned long int xcvr_freq = 0;
pthread_mutex_t mutex_flrig_freq = PTHREAD_MUTEX_INITIALIZER;
@@ -242,13 +243,13 @@ void xmlrpc_rig_show_freq(void * fr)
{
guard_lock flrig_lock(&mutex_flrig_freq);
if (!wf) return;
- long freq = reinterpret_cast<long>(fr);
+ unsigned long int freq = reinterpret_cast<intptr_t>(fr);
wf->rfcarrier(freq);
wf->movetocenter();
show_frequency(freq);
}
-void set_flrig_freq(long int fr)
+void set_flrig_freq(unsigned long int fr)
{
if (!connected_to_flrig) return;
@@ -279,13 +280,13 @@ void flrig_get_frequency()
if (!freq_posted) return;
if (flrig_client->execute("rig.get_vfo", XmlRpcValue(), result, timeout) ) {
str_freq = string(result);
- int fr = atoi(str_freq.c_str());
+ unsigned long int fr = atoll(str_freq.c_str());
if (!wait_freq && (fr != xcvr_freq)) {
xcvr_freq = fr;
guard_lock flrig_lock(&mutex_flrig_freq);
Fl::awake(xmlrpc_rig_show_freq, reinterpret_cast<void*>(fr));
- LOG_VERBOSE("get freq: %d", fr);
+ LOG_VERBOSE("get freq: %lu", fr);
} else if (wait_freq && (fr == xcvr_freq)) {
wait_freq = false;
wait_freq_timeout = 0;
@@ -824,7 +825,7 @@ static void xmlrpc_rig_set_smeter(void *data)
pwrmeter->hide();
smeter->show();
}
- int val = reinterpret_cast<long>(data);
+ int val = reinterpret_cast<intptr_t>(data);
smeter->value(val);
}
}
@@ -852,7 +853,7 @@ static void xmlrpc_rig_set_pwrmeter(void *data)
smeter->hide();
pwrmeter->show();
}
- int val = reinterpret_cast<long>(data);
+ int val = reinterpret_cast<intptr_t>(data);
pwrmeter->value(val);
}
}
diff --git a/src/rsid/rsid_defs.cxx b/src/rsid/rsid_defs.cxx
index 140668ed..6796de66 100644
--- a/src/rsid/rsid_defs.cxx
+++ b/src/rsid/rsid_defs.cxx
@@ -185,7 +185,7 @@
ELEM_(105, PSK_HELL, NUM_MODES) \
ELEM_(106, HELL_80, MODE_HELL80) \
ELEM_(107, FM_HELL_105, MODE_FSKH105) \
- ELEM_(108, FM_HELL_245, NUM_MODES) \
+ ELEM_(108, FM_HELL_245, MODE_FSKH245) \
\
ELEM_(114, MODE_141A, NUM_MODES) \
ELEM_(123, DTMF, NUM_MODES) \
diff --git a/src/soundcard/play.pa.cxx b/src/soundcard/play.pa.cxx
index 69d44004..0ea9c905 100644
--- a/src/soundcard/play.pa.cxx
+++ b/src/soundcard/play.pa.cxx
@@ -308,11 +308,11 @@ c_portaudio::c_portaudio()
b_len = 0;
rc = src_new (progdefaults.sample_converter, 1, &rc_error) ;
monitor_rb = new ringbuffer<float>(RBUFF_SIZE);
- start_alert_thread();
- start_filelist_thread();
- bpfilt = 0;
+ bpfilt = new C_FIR_filter();
+ start_alert_thread();
+ start_filelist_thread();
}
c_portaudio::~c_portaudio()
@@ -626,6 +626,8 @@ void c_portaudio::mon_write(double *buffer, int len, int mon_sr)
float vol = 0.01 * progdefaults.RxFilt_vol;
float *rsbuffer = 0;
+ if (!bpfilt) init_filter();
+
try {
// do not resample if alert samplerate == modem samplerate
diff --git a/src/soundcard/sound.cxx b/src/soundcard/sound.cxx
index f3533209..02dd8fcb 100644
--- a/src/soundcard/sound.cxx
+++ b/src/soundcard/sound.cxx
@@ -104,18 +104,16 @@ namespace SND_SUPPORT {
}
void get_file_params(std::string def_fname, std::string &fname, int &format, bool check) {
+ bool isplayback = (def_fname.find("playback") != std::string::npos);
std::string filters;
- if (def_fname.find("playback") != std::string::npos)
+ if (isplayback)
filters = "Audio format\t*.{mp3,wav}\n";
else
filters = "Audio format\t*.wav\n";
- if (format_supported(SF_FORMAT_FLAC | SF_FORMAT_PCM_16)) {
- filters.append("FLAC format\t*.flac");
- }
format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
int fsel = 0;
const char *fn = 0;
- if (def_fname.find("playback") != std::string::npos)
+ if (isplayback)
fn = FSEL::select(_("Audio file"), filters.c_str(), def_fname.c_str(), &fsel);
else
fn = FSEL::saveas(_("Audio file"), filters.c_str(), def_fname.c_str(), &fsel);
@@ -125,6 +123,9 @@ namespace SND_SUPPORT {
}
fname = fn;
+ if (!isplayback && (fname.find(".wav") == std::string::npos))
+ fname.append(".wav");
+
if (check) {
FILE *f = fopen(fname.c_str(), "r");
if (f) {
@@ -162,13 +163,10 @@ SoundBase::SoundBase()
txppm(progdefaults.TX_corr), rxppm(progdefaults.RX_corr),
tx_src_state(0), rx_src_state(0),
wrt_buffer(new double[SND_BUF_LEN]),
-#if USE_SNDFILE
ofCapture(0), ifPlayback(0), ofGenerate(0)
-#endif
{
memset(wrt_buffer, 0, SND_BUF_LEN * sizeof(*wrt_buffer));
-#if USE_SNDFILE
int err;
writ_src_data_left = new SRC_DATA;
writ_src_data_right = new SRC_DATA;
@@ -207,14 +205,12 @@ SoundBase::SoundBase()
modem_wr_sr = modem_play_sr = 0;
out_pointer = src_rd_out_buffer;
-#endif
}
SoundBase::~SoundBase()
{
delete [] wrt_buffer;
-#if USE_SNDFILE
if (ofGenerate)
sf_close(ofGenerate);
if (ofCapture)
@@ -228,11 +224,8 @@ SoundBase::~SoundBase()
delete [] src_write_buffer_right;
delete [] src_rd_inp_buffer;
delete [] src_rd_out_buffer;
-#endif
}
-#if USE_SNDFILE
-
void SoundBase::stopCapture()
{
if (ofCapture) {
@@ -683,8 +676,6 @@ void SoundBase::write_file(SNDFILE* file, double* bufleft, double *bufright, siz
return;
}
-#endif // USE_SNDFILE
-
#if USE_OSS
#define MAXSC 32767.0f
@@ -932,14 +923,12 @@ size_t SoundOSS::Read(float *buffer, size_t buffersize)
for (size_t i = 0; i < buffersize; i++)
buffer[i] = src_buffer[2*i + (progdefaults.ReverseRxAudio ? 1 : 0)];
-#if USE_SNDFILE
if (ofCapture)
write_file(ofCapture, buffer, NULL, buffersize);
if (ifPlayback) {
read_file(ifPlayback, buffer, buffersize);
return buffersize;
}
-#endif
if (rxppm != progdefaults.RX_corr) {
rxppm = progdefaults.RX_corr;
@@ -976,10 +965,8 @@ size_t SoundOSS::Write(double *buf, size_t count)
short int *wbuff;
unsigned char *p;
-#if USE_SNDFILE
if (ofGenerate)
write_file(ofGenerate, buf, NULL, count);
-#endif
if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
return count;
@@ -1053,10 +1040,8 @@ size_t SoundOSS::Write_stereo(double *bufleft, double *bufright, size_t count)
short int *wbuff;
unsigned char *p;
-#if USE_SNDFILE
if (ofGenerate)
write_file(ofGenerate, bufleft, bufright, count);
-#endif
if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
return count;
@@ -1477,7 +1462,6 @@ do { \
size_t SoundPort::Read(float *buf, size_t count)
{
-#if USE_SNDFILE
if (ifPlayback) {
read_file(ifPlayback, buf, count);
if (!ofCapture) {
@@ -1486,7 +1470,6 @@ size_t SoundPort::Read(float *buf, size_t count)
return count;
}
}
-#endif
if (rxppm != progdefaults.RX_corr)
rxppm = progdefaults.RX_corr;
@@ -1565,20 +1548,16 @@ size_t SoundPort::Read(float *buf, size_t count)
buf[i] = rbuf[n];
}
-#if USE_SNDFILE
if (ofCapture)
write_file(ofCapture, buf, NULL, count);
-#endif
- return count;
+ return count;
}
size_t SoundPort::Write(double *buf, size_t count)
{
-#if USE_SNDFILE
if (ofGenerate)
write_file(ofGenerate, buf, NULL, count);
-#endif
if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
return count;
@@ -1604,10 +1583,8 @@ size_t SoundPort::Write_stereo(double *bufleft, double *bufright, size_t count)
if (sd[1].params.channelCount != 2)
return Write(bufleft, count);
-#if USE_SNDFILE
if (ofGenerate)
write_file(ofCapture, bufleft, bufright, count);
-#endif
if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
return count;
@@ -2275,10 +2252,8 @@ void SoundPulse::flush(unsigned dir)
size_t SoundPulse::Write(double* buf, size_t count)
{
-#if USE_SNDFILE
if (ofGenerate)
write_file(ofGenerate, buf, NULL, count);
-#endif
if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
return count;
@@ -2304,10 +2279,8 @@ size_t SoundPulse::Write_stereo(double* bufleft, double* bufright, size_t count)
if (sd[1].stream_params.channels != 2)
return Write(bufleft, count);
-#if USE_SNDFILE
if (ofGenerate)
write_file(ofGenerate, bufleft, bufright, count);
-#endif
if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
return count;
@@ -2378,7 +2351,6 @@ long SoundPulse::src_read_cb(void* arg, float** data)
size_t SoundPulse::Read(float *buf, size_t count)
{
-#if USE_SNDFILE
if (ifPlayback) {
read_file(ifPlayback, buf, count);
if (!ofCapture) {
@@ -2388,7 +2360,6 @@ size_t SoundPulse::Read(float *buf, size_t count)
return count;
}
}
-#endif
size_t n = 0;
long r = 0;
@@ -2423,10 +2394,8 @@ size_t SoundPulse::Read(float *buf, size_t count)
n += sd[0].stream_params.channels;
}
-#if USE_SNDFILE
if (ofCapture)
write_file(ofCapture, buf, NULL, count);
-#endif
return count;
}
@@ -2458,10 +2427,8 @@ void SoundPulse::src_data_reset(int mode)
size_t SoundNull::Write(double* buf, size_t count)
{
-#if USE_SNDFILE
if (ofGenerate)
write_file(ofGenerate, buf, NULL, count);
-#endif
if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
return count;
@@ -2474,10 +2441,8 @@ size_t SoundNull::Write(double* buf, size_t count)
size_t SoundNull::Write_stereo(double* bufleft, double* bufright, size_t count)
{
-#if USE_SNDFILE
if (ofGenerate)
write_file(ofGenerate, bufleft, bufright, count);
-#endif
MilliSleep((long)ceil((1e3 * count) / sample_frequency));
@@ -2486,16 +2451,12 @@ size_t SoundNull::Write_stereo(double* bufleft, double* bufright, size_t count)
size_t SoundNull::Read(float *buf, size_t count)
{
-#if USE_SNDFILE
if (ifPlayback)
read_file(ifPlayback, buf, count);
else
-#endif
memset(buf, 0, count * sizeof(*buf));
-#if USE_SNDFILE
if (ofCapture)
write_file(ofCapture, buf, NULL, count);
-#endif
if (!bHighSpeed)
MilliSleep((long)ceil((1e3 * count) / sample_frequency));
@@ -2505,9 +2466,7 @@ size_t SoundNull::Read(float *buf, size_t count)
void SoundNull::flush(unsigned)
{
-#if USE_SNDFILE
if (ofGenerate)
sf_close(ofGenerate);
-#endif
}
diff --git a/src/trx/modem.cxx b/src/trx/modem.cxx
index 7deacaa5..8676b65d 100644
--- a/src/trx/modem.cxx
+++ b/src/trx/modem.cxx
@@ -455,7 +455,7 @@ double modem::sigmaN (double es_ovr_n0)
// case MODE_MFSK64: case MODE_MFSK8: case MODE_MFSK16: case MODE_MFSK32:
// case MODE_THOR4: case MODE_THOR5: case MODE_THOR8:
// case MODE_THOR11:case MODE_THOR16: case MODE_THOR22:
-// case MODE_FSKHELL: case MODE_FSKH105: case MODE_HELL80:
+// case MODE_FSKH245: case MODE_FSKH105: case MODE_HELL80:
default: break;
}
if (trx_state == STATE_TUNE) mode_factor = 0.707;
diff --git a/src/waterfall/waterfall.cxx b/src/waterfall/waterfall.cxx
index 648c3f1c..59a391e3 100644
--- a/src/waterfall/waterfall.cxx
+++ b/src/waterfall/waterfall.cxx
@@ -1538,8 +1538,9 @@ void btnMem_cb(Fl_Widget *, void *menu_event)
switch (op) {
case SELECT:
m = qrg_list[elem];
- if (active_modem != *mode_info[m.mode].modem)
+ if (active_modem != *mode_info[m.mode].modem) {
init_modem_sync(m.mode);
+ }
if (m.rfcarrier && m.rfcarrier != wf->rfcarrier())
qsy(m.rfcarrier, m.carrier);
else
@@ -1568,7 +1569,7 @@ void btnMem_cb(Fl_Widget *, void *menu_event)
// write the menu item text
{
ostringstream o;
- o << mode_info[m.mode].sname << " @@ ";
+ o << mode_info[m.mode].name << " @@ ";
if (m.rfcarrier > 0) { // write 1000s separators
char s[20], *p = s + sizeof(s) - 1;
int i = 0;
@@ -1584,10 +1585,11 @@ void btnMem_cb(Fl_Widget *, void *menu_event)
o << p << (wf->USB() ? " + " : " - ");
}
o << m.carrier;
- if (op == APPEND)
+ if (op == APPEND) {
wf->mbtnMem->add(o.str().c_str());
- else
+ } else {
wf->mbtnMem->replace(elem, o.str().c_str());
+ }
}
break;
}
diff --git a/src/wefax/wefax.cxx b/src/wefax/wefax.cxx
index eba80018..f1cf94d4 100644
--- a/src/wefax/wefax.cxx
+++ b/src/wefax/wefax.cxx
@@ -89,30 +89,54 @@ struct fir_coeffs
// Narrow, middle and wide fir low pass filter from ACfax
static const fir_coeffs input_filters[] = {
- { _("Narrow"), 17,
- { -7,-18,-15, 11, 56,116,177,223,240,223,177,116, 56, 11,-15,-18, -7}
- },
- { _("Middle"), 17,
- { 0,-18,-38,-39, 0, 83,191,284,320,284,191, 83, 0,-39,-38,-18, 0}
- },
- { _("Wide"), 17,
- { 6, 20, 7,-42,-74,-12,159,353,440,353,159,-12,-74,-42, 7, 20, 6}
- },
- { "Blackman", 17,
- { -2.7756e-15, 2.9258e+00, 1.3289e+01, 3.4418e+01, 6.8000e+01,
- 1.1095e+02, 1.5471e+02, 1.8770e+02, 2.0000e+02, 1.8770e+02,
- 1.5471e+02, 1.1095e+02, 6.8000e+01, 3.4418e+01, 1.3289e+01,
- 2.9258e+00, -2.7756e-15 } },
- { "Hanning", 17,
- { 0.00000, 7.61205, 29.28932, 61.73166, 100.00000,
- 138.26834, 170.71068, 192.38795, 200.00000, 192.38795,
- 170.71068, 138.26834, 100.00000, 61.73166, 29.28932,
- 7.61205, 0.00000 } },
- { "Hamming", 17,
- { 16.000, 23.003, 42.946, 72.793, 108.000,
- 143.207, 173.054, 192.997, 200.000, 192.997,
- 173.054, 143.207, 108.000, 72.793, 42.946,
- 23.003, 16.000 } }
+{ _("Narrow"), 65,
+{
+ 0.000495, 0.000684, 0.000885, 0.00109, 0.00128,
+ 0.00141, 0.00142, 0.00124, 0.000793, 2.94e-05,
+ -0.00108, -0.00251, -0.0042, -0.00602, -0.00778,
+ -0.00925, -0.0101, -0.0102, -0.00909, -0.00664,
+ -0.00267, 0.00289, 0.01, 0.0185, 0.0281,
+ 0.0383, 0.0488, 0.059, 0.0682, 0.0761,
+ 0.0821, 0.0858, 0.0871, 0.0858, 0.0821,
+ 0.0761, 0.0682, 0.059, 0.0488, 0.0383,
+ 0.0281, 0.0185, 0.01, 0.00289, -0.00267,
+ -0.00664, -0.00909, -0.0102, -0.0101, -0.00925,
+ -0.00778, -0.00602, -0.0042, -0.00251, -0.00108,
+ 2.94e-05, 0.000793, 0.00124, 0.00142, 0.00141,
+ 0.00128, 0.00109, 0.000885, 0.000684, 0.000495
+} },
+{ _("Medium"), 65,
+{
+ -0.000795, -0.000779, -0.000698, -0.000517, -0.000195,
+ 0.000303, 0.000982, 0.0018, 0.00267, 0.00343,
+ 0.00389, 0.00383, 0.00306, 0.00144, -0.00102,
+ -0.0042, -0.0078, -0.0114, -0.0143, -0.0159,
+ -0.0156, -0.0127, -0.00695, 0.00188, 0.0136,
+ 0.0277, 0.0434, 0.0596, 0.0752, 0.0889,
+ 0.0997, 0.106, 0.109, 0.106, 0.0997,
+ 0.0889, 0.0752, 0.0596, 0.0434, 0.0277,
+ 0.0136, 0.00188, -0.00695, -0.0127, -0.0156,
+ -0.0159, -0.0143, -0.0114, -0.0078, -0.0042,
+ -0.00102, 0.00144, 0.00306, 0.00383, 0.00389,
+ 0.00343, 0.00267, 0.0018, 0.000982, 0.000303,
+ -0.000195, -0.000517, -0.000698, -0.000779, -0.000795
+} },
+{ _("Wide"), 65,
+{
+ 0.000716, 0.000844, 0.000845, 0.000668, 0.000259,
+ -0.000402, -0.00126, -0.00216, -0.00284, -0.003,
+ -0.00234, -0.00073, 0.00175, 0.0047, 0.00747,
+ 0.00922, 0.00911, 0.00655, 0.00143, -0.00575,
+ -0.0138, -0.0209, -0.025, -0.0241, -0.0167,
+ -0.00203, 0.0193, 0.0457, 0.0743, 0.102,
+ 0.125, 0.14, 0.145, 0.14, 0.125,
+ 0.102, 0.0743, 0.0457, 0.0193, -0.00203,
+ -0.0167, -0.0241, -0.025, -0.0209, -0.0138,
+ -0.00575, 0.00143, 0.00655, 0.00911, 0.00922,
+ 0.00747, 0.0047, 0.00175, -0.00073, -0.00234,
+ -0.003, -0.00284, -0.00216, -0.00126, -0.000402,
+ 0.000259, 0.000668, 0.000845, 0.000844, 0.000716
+} }
};
static const size_t nb_filters = sizeof(input_filters)/sizeof(input_filters[0]); ;
@@ -1921,7 +1945,10 @@ void fax_implementation::rx_new_samples(const double* audio_ptr, int audio_sz)
int ix = 0;
/// The reception filter may have been changed by the GUI.
- C_FIR_filter & ref_fir_filt_pair = m_rx_filters[ progdefaults.wefax_filter ];
+ if (progdefaults.wefax_filter > 2 || progdefaults.wefax_filter < 0)
+ progdefaults.wefax_filter = 0;
+
+ C_FIR_filter & ref_fir_filt_pair = m_rx_filters[ progdefaults.wefax_filter];
for (int i = 0; i < audio_sz; i++) {
if (!ref_fir_filt_pair.run(
diff --git a/src/widgets/FTextRXTX.cxx b/src/widgets/FTextRXTX.cxx
index 92908af4..c84d0028 100644
--- a/src/widgets/FTextRXTX.cxx
+++ b/src/widgets/FTextRXTX.cxx
@@ -2413,6 +2413,7 @@ void FTextTX::handle_context_menu(void)
bool modify_text_ok = insert_position() >= txpos;
bool selected = tbuf->selected();
+std::cout << "FTextTX::tbuf " << (selected ? "selected" : "not selected") << std::endl;
icons::set_active(&menu[TX_MENU_MFSK16_IMG], active_modem->get_cap() & modem::CAP_IMG);
icons::set_active(&menu[TX_MENU_CLEAR], tbuf->length());
icons::set_active(&menu[TX_MENU_CUT], selected && modify_text_ok);
diff --git a/src/widgets/FTextView.cxx b/src/widgets/FTextView.cxx
index 1916d5bd..9531923e 100644
--- a/src/widgets/FTextView.cxx
+++ b/src/widgets/FTextView.cxx
@@ -651,7 +651,7 @@ Fl_Menu_Item FTextEdit::menu[] = {
{ icons::make_icon_label(_("Paste"), edit_paste_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ icons::make_icon_label(_("Clear"), edit_clear_icon), 0, 0, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL },
{ icons::make_icon_label(_("Insert file..."), file_open_icon), 0, 0, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL },
- { _("Word wrap"), 0, 0, 0, FL_MENU_TOGGLE, FL_NORMAL_LABEL } ,
+ { _("Word wrap"), 0, 0, 0, FL_MENU_TOGGLE | FL_MENU_DIVIDER, FL_NORMAL_LABEL } ,
{ 0 }
};
@@ -855,6 +855,7 @@ int FTextEdit::handle_dnd_drop(void)
void FTextEdit::handle_context_menu(void)
{
bool selected = tbuf->selected();
+std::cout << "FTextEdit::tbuf " << (selected ? "selected" : "not selected") << std::endl;
icons::set_active(&menu[EDIT_MENU_CUT], selected);
icons::set_active(&menu[EDIT_MENU_COPY], selected);
icons::set_active(&menu[EDIT_MENU_CLEAR], tbuf->length());
@@ -892,6 +893,11 @@ void FTextEdit::menu_cb(size_t item)
case EDIT_MENU_WRAP:
set_word_wrap(!wrap, true);
break;
+ default:
+ if (FTextEdit::menu[item].flags == 0) { // not an FL_SUB_MENU
+ add(FTextEdit::menu[item].text[0]);
+ add(FTextEdit::menu[item].text[1]);
+ }
}
}
diff --git a/src/widgets/F_Edit.cxx b/src/widgets/F_Edit.cxx
new file mode 100644
index 00000000..1144bc3b
--- /dev/null
+++ b/src/widgets/F_Edit.cxx
@@ -0,0 +1,408 @@
+// ----------------------------------------------------------------------------
+// FTextView.cxx
+//
+// Copyright (C) 2007-2009
+// Stelios Bounanos, M0GLD
+//
+// Copyright (C) 2008-2009
+// Dave Freese, W1HKJ
+//
+// This file is part of fldigi.
+//
+// fldigi is free software; you can 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.
+//
+// fldigi is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU 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 <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include <cstring>
+#include <cstdlib>
+#include <cstdio>
+#include <cmath>
+#include <sys/stat.h>
+#include <map>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+#include <algorithm>
+#include <iomanip>
+
+#include <string>
+
+#include <FL/Fl_Tooltip.H>
+
+#include "flmisc.h"
+#include "fileselect.h"
+#include "font_browser.h"
+#include "ascii.h"
+#include "icons.h"
+#include "gettext.h"
+#include "macros.h"
+
+#include "F_Edit.h"
+
+#include "debug.h"
+
+using namespace std;
+
+int * F_Edit::p_editpos;
+
+Fl_Menu_Item F_Edit::menu[] = {
+ { 0 }, // EDIT_MENU_CUT
+ { 0 }, // EDIT_MENU_COPY
+ { 0 }, // EDIT_MENU_PASTE
+ { 0 }, // EDIT_MENU_CLEAR
+ { 0 }, // EDIT_MENU_READ
+ { 0 }, // EDIT_MENU_WRAP
+
+ { _("Spec Char"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+ { "¢ - cent", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "£ - pound", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "µ - micro", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "° - degree", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "¿ - iques", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "× - times", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "÷ - divide", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { _("A"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+ { "À - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "à - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Á - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "á - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Â - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "â - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ã - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ã - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ä - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ä - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Å - ring", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "å - ring", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Æ - aelig", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "æ - aelig", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ {0,0,0,0,0,0,0,0,0},
+ { _("E"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+ { "È - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "è - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "É - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "é - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ê - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ê - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ë - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ë - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ {0,0,0,0,0,0,0,0,0},
+ { _("I"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+ { "Ì - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ì - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Í - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "í - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Î - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "î - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ï - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ï - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ {0,0,0,0,0,0,0,0,0},
+ { _("N"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+ { "Ñ - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ñ - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ {0,0,0,0,0,0,0,0,0},
+ { _("O"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+ { "Ò - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ò - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ó - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ó - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ô - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ô - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Õ - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "õ - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ö - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ö - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ø - slash", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ø - slash", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ {0,0,0,0,0,0,0,0,0},
+ { _("U"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+ { "Ù - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ù - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ú - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ú - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Û - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "û - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ü - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ü - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ {0,0,0,0,0,0,0,0,0},
+ { _("Y"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+ { "Ý - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ý - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ÿ - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ {0,0,0,0,0,0,0,0,0},
+ { _("Other"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+ { "ß - szlig", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ç - cedil", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ç - cedil", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Ð - eth", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "ð - eth", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ { "Þ - thorn", 0, 0, 0, 0, FL_NORMAL_LABEL },
+ {0,0,0,0,0,0,0,0,0},
+ {0,0,0,0,0,0,0,0,0},
+ { 0 }
+};
+
+F_Edit::F_Edit(int x, int y, int w, int h, const char *l)
+ : FTextEdit(x, y, w, h, l), editpos(0), bkspaces(0)
+{
+ change_keybindings();
+
+ memcpy(menu + EDIT_MENU_CUT, FTextEdit::menu, (FTextEdit::menu->size() - 1) * sizeof(*FTextEdit::menu));
+ context_menu = menu;
+ init_context_menu();
+
+ p_editpos = &editpos;
+
+}
+
+/// Handles fltk events for this widget.
+/// We pass keyboard events to handle_key() and handle mouse3 presses to show
+/// the popup menu. We also disallow mouse2 events in the transmitted text area.
+/// Everything else is passed to the base class handle().
+///
+/// @param event
+///
+/// @return
+///
+int F_Edit::handle(int event)
+{
+// if ( !(Fl::event_inside(this) || (event == FL_KEYBOARD && Fl::focus() == this)) )
+// return FTextEdit::handle(event);
+
+// if (event == FL_KEYBOARD)
+// return handle_key(Fl::event_key()) ? 1 : FTextEdit::handle(event);
+
+ return FTextEdit::handle(event);
+}
+
+/// Clears the buffer.
+/// Also resets the transmit position, stored backspaces and tx pause flag.
+///
+void F_Edit::clear(void)
+{
+ FTextEdit::clear();
+ editpos = 0;
+ bkspaces = 0;
+}
+
+void F_Edit::add_text(string s)
+{
+ for (size_t n = 0; n < s.length(); n++) {
+ if (s[n] == '\b') {
+ int ipos = insert_position();
+ if (tbuf->length()) {
+ if (ipos > 0) {
+ bkspaces++;
+ int nn;
+ tbuf->get_char_at(editpos, nn);
+ editpos -= nn;
+ }
+ tbuf->remove(tbuf->length() - 1, tbuf->length());
+ sbuf->remove(sbuf->length() - 1, sbuf->length());
+ redraw();
+ }
+ } else {
+ add(s[n] & 0xFF, RECV);
+ }
+ }
+}
+
+void F_Edit::setFont(Fl_Font f, int attr)
+{
+ FTextBase::setFont(f, attr);
+}
+
+/// Handles keyboard events to override Fl_Text_Editor_mod's handling of some
+/// keystrokes.
+///
+/// @param key
+///
+/// @return
+///
+int F_Edit::handle_key(int key)
+{
+ switch (key) {
+ case FL_Tab:
+ if (editpos != insert_position())
+ insert_position(editpos);
+ else
+ insert_position(tbuf->length());
+ return 1;
+ case FL_BackSpace: {
+ int ipos = insert_position();
+ if (editpos > 0 && editpos == ipos) {
+ bkspaces++;
+ editpos = tbuf->prev_char(ipos);
+ }
+ return 0;
+ }
+ default:
+ break;
+ }
+
+// read ctl-ddd, where d is a digit, as ascii characters (in base 10)
+// and insert verbatim; e.g. ctl-001 inserts a <soh>
+ if (Fl::event_state() & FL_CTRL && (key >= FL_KP) && (key <= FL_KP + '9'))
+ return handle_key_ascii(key);
+
+// restart the numeric keypad entries.
+ ascii_cnt = 0;
+ ascii_chr = 0;
+
+ return 0;
+}
+
+int F_Edit::handle_dnd_drag(int pos)
+{
+ return 1;
+ return FTextEdit::handle_dnd_drag(pos);
+}
+
+/// Handles mouse-3 clicks by displaying the context menu
+///
+/// @param val
+///
+void F_Edit::handle_context_menu(void)
+{
+ bool selected = tbuf->selected();
+std::cout << "F_Edit::tbuf " << (selected ? "selected" : "not selected") << std::endl;
+ icons::set_active(&menu[EDIT_MENU_CLEAR], tbuf->length());
+ icons::set_active(&menu[EDIT_MENU_CUT], selected);
+ icons::set_active(&menu[EDIT_MENU_COPY], selected);
+ icons::set_active(&menu[EDIT_MENU_PASTE], true);
+ icons::set_active(&menu[EDIT_MENU_READ], true);
+
+ if (wrap)
+ menu[EDIT_MENU_WRAP].set();
+ else
+ menu[EDIT_MENU_WRAP].clear();
+
+ show_context_menu();
+}
+
+/// The context menu handler
+///
+/// @param val
+///
+void F_Edit::menu_cb(size_t item)
+{
+ switch (item) {
+ case EDIT_MENU_CLEAR:
+ clear();
+ break;
+ case EDIT_MENU_CUT:
+ kf_cut(0, this);
+ break;
+ case EDIT_MENU_COPY:
+ kf_copy(0, this);
+ break;
+ case EDIT_MENU_PASTE:
+ kf_paste(0, this);
+ break;
+ case EDIT_MENU_READ: {
+ restore_wrap = wrap;
+ set_word_wrap(false);
+ readFile();
+ break;
+ }
+ case EDIT_MENU_WRAP:
+ set_word_wrap(!wrap, true);
+ break;
+ default:
+ if (F_Edit::menu[item].flags == 0) { // not an FL_SUB_MENU
+ add(F_Edit::menu[item].text[0]);
+ add(F_Edit::menu[item].text[1]);
+ }
+ }
+}
+
+/// Overrides some useful Fl_Text_Edit keybindings that we want to keep working,
+/// provided that they don't try to change chunks of transmitted text.
+///
+void F_Edit::change_keybindings(void)
+{
+ struct {
+ Fl_Text_Editor_mod::Key_Func function, override;
+ } fbind[] = {
+ { Fl_Text_Editor_mod::kf_default, F_Edit::kf_default },
+ { Fl_Text_Editor_mod::kf_enter, F_Edit::kf_enter },
+ { Fl_Text_Editor_mod::kf_delete, F_Edit::kf_delete },
+ { Fl_Text_Editor_mod::kf_cut, F_Edit::kf_cut },
+ { Fl_Text_Editor_mod::kf_paste, F_Edit::kf_paste }
+ };
+ int n = sizeof(fbind) / sizeof(fbind[0]);
+
+ // walk the keybindings linked list and replace items containing
+ // functions for which we have an override in fbind
+ for (Fl_Text_Editor_mod::Key_Binding *k = key_bindings; k; k = k->next) {
+ for (int i = 0; i < n; i++)
+ if (fbind[i].function == k->function)
+ k->function = fbind[i].override;
+ }
+}
+
+// The kf_* functions below call the corresponding Fl_Text_Editor_mod routines, but
+// may make adjustments so that no transmitted text is modified.
+
+int F_Edit::kf_default(int c, Fl_Text_Editor_mod* e)
+{
+ return e->insert_position() < *p_editpos ? 1 : Fl_Text_Editor_mod::kf_default(c, e);
+}
+
+int F_Edit::kf_enter(int c, Fl_Text_Editor_mod* e)
+{
+ return e->insert_position() < *p_editpos ? 1 : Fl_Text_Editor_mod::kf_enter(c, e);
+}
+
+int F_Edit::kf_delete(int c, Fl_Text_Editor_mod* e)
+{
+ // single character
+ if (!e->buffer()->selected()) {
+ if (e->insert_position() >= *p_editpos &&
+ e->insert_position() != e->buffer()->length())
+ return Fl_Text_Editor_mod::kf_delete(c, e);
+ else
+ return 1;
+ }
+
+ // region: delete as much as we can
+ int start, end;
+ e->buffer()->selection_position(&start, &end);
+ if (*p_editpos >= end)
+ return 1;
+ if (*p_editpos > start)
+ e->buffer()->select(*p_editpos, end);
+
+ return Fl_Text_Editor_mod::kf_delete(c, e);
+}
+
+int F_Edit::kf_cut(int c, Fl_Text_Editor_mod* e)
+{
+ if (e->buffer()->selected()) {
+ int start, end;
+ e->buffer()->selection_position(&start, &end);
+ if (*p_editpos >= end)
+ return 1;
+ if (*p_editpos > start)
+ e->buffer()->select(*p_editpos, end);
+ }
+
+ return Fl_Text_Editor_mod::kf_cut(c, e);
+}
+
+int F_Edit::kf_paste(int c, Fl_Text_Editor_mod* e)
+{
+ return e->insert_position() < *p_editpos ? 1 : Fl_Text_Editor_mod::kf_paste(c, e);
+}
diff --git a/src/widgets/Fl_Text_Display_mod.cxx b/src/widgets/Fl_Text_Display_mod.cxx
index a971de8e..c11cfc53 100644
--- a/src/widgets/Fl_Text_Display_mod.cxx
+++ b/src/widgets/Fl_Text_Display_mod.cxx
@@ -87,7 +87,7 @@ static int scroll_x = 0;
*/
Fl_Text_Display_mod::Fl_Text_Display_mod(int X, int Y, int W, int H, const char* l)
: Fl_Group(X, Y, W, H, l) {
- int i;
+ //int i;
TOP_MARGIN = DEFAULT_TOP_MARGIN;
BOTTOM_MARGIN = DEFAULT_BOTTOM_MARGIN;
@@ -148,8 +148,9 @@ Fl_Text_Display_mod::Fl_Text_Display_mod(int X, int Y, int W, int H, const char*
mNVisibleLines = 1;
mLineStarts = new int[mNVisibleLines];
mLineStarts[0] = 0;
- for (i=1; i<mNVisibleLines; i++)
- mLineStarts[i] = -1;
+// for loop will never "fire" due to nVisibleLines, i = 1
+// for (i=1; i<mNVisibleLines; i++)
+// mLineStarts[i] = -1;
mSuppressResync = 0;
mNLinesDeleted = 0;
mModifyingTabDistance = 0;
diff --git a/src/wwv/analysis.cxx b/src/wwv/analysis.cxx
index c95e2b45..3503a8a2 100644
--- a/src/wwv/analysis.cxx
+++ b/src/wwv/analysis.cxx
@@ -32,6 +32,7 @@
#include <cstdio>
#include <ctime>
+#include "configuration.h"
#include "analysis.h"
#include "modem.h"
#include "misc.h"
@@ -68,6 +69,7 @@ void anal::init()
modem::init();
rx_init();
set_scope_mode(Digiscope::RTTY);
+ rxcorr = progdefaults.RX_corr;
}
anal::~anal()
@@ -75,6 +77,7 @@ anal::~anal()
delete bpfilt;
delete ffilt;
delete afilt;
+ progdefaults.RX_corr = rxcorr;
}
// used for checking file exists function
@@ -247,7 +250,7 @@ void anal::writeFile()
fprintf(out, "%02d:%02d:%02d, %13.3f, %6.3f, %8.6f, %6.2f\n",
tm.tm_hour, tm.tm_min, tm.tm_sec,
- (wf->rfcarrier() + (wf->USB() ? 1.0 : -1.0) * (frequency + fout)), fout,
+ (wf->rfcarrier() + (wf->USB() ? 1.0 : -1.0) * (frequency + fout) + progdefaults.RIT), fout + progdefaults.RIT,
amp, 20.0 * log10( (amp == 0 ? 1e-6 : amp) ) );
fclose(out);
@@ -310,9 +313,9 @@ int anal::rx_process(const double *buf, int len)
set_scope(pipe, PIPE_LEN, false);
if (wf->USB())
- snprintf(msg1, sizeof(msg1), "%13.3f", wf->rfcarrier() + frequency + fout );
+ snprintf(msg1, sizeof(msg1), "%13.3f", wf->rfcarrier() + frequency + fout + progdefaults.RIT);
else
- snprintf(msg1, sizeof(msg1), "%13.3f", wf->rfcarrier() - frequency - fout );
+ snprintf(msg1, sizeof(msg1), "%13.3f", wf->rfcarrier() - frequency - fout + progdefaults.RIT);
put_Status2(msg1, 2.0);
writeFile();
}