Upstream version 3.04AL

pull/2/head
Stelios Bounanos 2008-10-12 07:35:04 +01:00
rodzic 53e71e80ad
commit 09b75d7ae0
32 zmienionych plików z 672 dodań i 1273 usunięć

Wyświetl plik

@ -46,9 +46,12 @@ Change Log:
{ execute("modem.set_by_name BPSK31"); \
execute("modem.set_by_name RTTY"); }
18) Added brief message to the opening Rx text area indicating which
macro file was loaded on start up. Also added name of the working
macro file to the title bar of the macro editor.
macro file was loaded on start up. This is a configurable item on
the Misc/Macro tab
19) Addition of Navy MARS prosigns to the CW Morse encoder / decoder.
20) Add new option to dock a digiscope and deprecate command line switch
21) Add option to change waterfall mouse wheel handling. Adapt patch
by Stephane F8CFE to change rig frequency via the mouse wheel.
3.03
1) Changes to socket server to correct shutdown process

Wyświetl plik

@ -9,7 +9,7 @@ dnl major and minor must be integers; patch may
dnl contain other characters or be empty
m4_define(FLDIGI_MAJOR, [3])
m4_define(FLDIGI_MINOR, [0])
m4_define(FLDIGI_PATCH, [4AK])
m4_define(FLDIGI_PATCH, [4AL])
AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[FLDIGI_PATCH], [w1hkj AT w1hkj DOT com])
@ -38,6 +38,7 @@ AC_CONFIG_HEADER([src/config.h])
AC_CONFIG_MACRO_DIR([m4])
AC_DEFINE([PACKAGE_AUTHORS], ["Dave Freese, Stelios Bounanos, Leigh Klotz, and others"], [Authors])
AC_DEFINE([PACKAGE_HOME], ["http://www.w1hkj.com/Fldigi.html"], [Home page])
AC_DEFINE([PACKAGE_PROJ], ["http://developer.berlios.de/project/showfiles.php?group_id=9149"], [BerliOS page])
AC_DEFINE([PACKAGE_DOCS], ["http://www.w1hkj.com/FldigiHelp/index.html"], [Docs index])

Wyświetl plik

@ -21,7 +21,6 @@ Fl_PopBrowser::Fl_PopBrowser (int X, int Y, int W, int H, retvals R)
Fl_PopBrowser::~Fl_PopBrowser ()
{
if (popbrwsr) delete popbrwsr;
}
int Fl_PopBrowser::handle(int event)
@ -170,7 +169,8 @@ Fl_ComboBox::Fl_ComboBox (int X,int Y,int W,int H, const char *L)
{
width = W; height = H - 4;
Btn = new Fl_Button (X + W - 18, Y + 1, 18, H - 2);
(new Fl_Pixmap (brws_12))->label (Btn);
btnmap = new Fl_Pixmap(brws_12);
btnmap->label(Btn);
Btn->callback ((Fl_Callback *)btnComboBox_cb, 0);
Output = new Fl_Input (X, Y, W-18, H);
@ -186,6 +186,19 @@ Fl_ComboBox::Fl_ComboBox (int X,int Y,int W,int H, const char *L)
R.idx = &idx;
}
Fl_ComboBox::~Fl_ComboBox()
{
if (Brwsr) delete Brwsr;
for (int i = 0; i < listsize; i++) {
if (datalist[i]) {
if (datalist[i]->s) delete [] datalist[i]->s;
delete datalist[i];
}
}
delete [] datalist;
delete btnmap;
}
void Fl_ComboBox::type (int t)
{
listtype = t;
@ -271,8 +284,8 @@ void Fl_ComboBox::add( const char *s, void * d)
if (listsize == maxsize) {
int nusize = maxsize + FL_COMBO_LIST_INCR;
datambr **temparray = new datambr *[nusize];
for (int i = 0; i < listsize; i++) temparray[i] = datalist[i];
delete [] datalist;
for (int i = 0; i < listsize; i++) temparray[i] = datalist[i];
delete [] datalist;
datalist = temparray;
maxsize = nusize;
}

Wyświetl plik

@ -668,7 +668,7 @@ void cw::send_symbol(int bits)
duration = knum + keyup;
}
if (progdefaults.QSK)
if (progdefaults.QSKv)
ModulateStereo(outbuf, qrqbuf, duration);
else
ModulateXmtr(outbuf, duration);

Wyświetl plik

@ -6,6 +6,7 @@
#include "soundconf.h"
#include "combo.h"
#include "colorsfonts.h"
#include "waterfall.h"
extern void initViewer();
Fl_Double_Window *dlgConfig;
@ -305,6 +306,13 @@ static void cb_inpWaterfallClickText(Fl_Input* o, void*) {
progdefaults.changed = true;
}
Fl_Choice *mnuWaterfallWheelAction=(Fl_Choice *)0;
static void cb_mnuWaterfallWheelAction(Fl_Choice* o, void*) {
progdefaults.WaterfallWheelAction = o->value();
progdefaults.changed = true;
}
Fl_Group *tabVideo=(Fl_Group *)0;
Fl_Check_Button *btnsendid=(Fl_Check_Button *)0;
@ -927,6 +935,15 @@ static void cb_btnStartAtSweetSpot(Fl_Check_Button* o, void*) {
progdefaults.changed = true;
}
Fl_Group *tabMainWindow=(Fl_Group *)0;
Fl_Check_Button *btnDockedScope=(Fl_Check_Button *)0;
static void cb_btnDockedScope(Fl_Check_Button* o, void*) {
progdefaults.docked_scope = o->value();
progdefaults.changed = true;
}
Fl_Group *tabModems=(Fl_Group *)0;
Fl_Tabs *tabsModems=(Fl_Tabs *)0;
@ -1026,7 +1043,7 @@ Fl_Group *tabCWQSK=(Fl_Group *)0;
Fl_Check_Button *btnQSK=(Fl_Check_Button *)0;
static void cb_btnQSK(Fl_Check_Button* o, void*) {
progdefaults.QSK=o->value();
progdefaults.QSKv=o->value();
progdefaults.changed = true;
}
@ -1494,7 +1511,6 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
tabOperator->selection_color((Fl_Color)51);
tabOperator->callback((Fl_Callback*)cb_tabOperator);
tabOperator->when(FL_WHEN_CHANGED);
tabOperator->hide();
{ inpMyCallsign = new Fl_Input(78, 36, 85, 24, "Callsign:");
inpMyCallsign->callback((Fl_Callback*)cb_inpMyCallsign);
} // Fl_Input* inpMyCallsign
@ -1720,6 +1736,11 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
} // Fl_Input* inpWaterfallClickText
o->end();
} // Fl_Group* o
{ mnuWaterfallWheelAction = new Fl_Choice(15, 176, 150, 22, "Wheel action");
mnuWaterfallWheelAction->down_box(FL_BORDER_BOX);
mnuWaterfallWheelAction->callback((Fl_Callback*)cb_mnuWaterfallWheelAction);
mnuWaterfallWheelAction->align(FL_ALIGN_RIGHT);
} // Fl_Choice* mnuWaterfallWheelAction
o->end();
} // Fl_Group* o
o->end();
@ -2158,9 +2179,9 @@ l with your sound hardware.");
{ tabMisc = new Fl_Group(0, 25, 405, 200, "Misc");
tabMisc->color((Fl_Color)51);
tabMisc->selection_color((Fl_Color)51);
tabMisc->hide();
{ tabsMisc = new Fl_Tabs(0, 25, 400, 195);
{ tabCPUspeed = new Fl_Group(0, 50, 400, 170, "CPU speed");
tabCPUspeed->hide();
{ Fl_Group* o = new Fl_Group(5, 62, 390, 43);
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
@ -2174,6 +2195,7 @@ l with your sound hardware.");
tabCPUspeed->end();
} // Fl_Group* tabCPUspeed
{ tabMacros = new Fl_Group(0, 50, 400, 170, "Macros");
tabMacros->hide();
{ Fl_Group* o = new Fl_Group(5, 55, 390, 69);
o->box(FL_ENGRAVED_FRAME);
{ Fl_Check_Button* o = btnUseLastMacro = new Fl_Check_Button(30, 70, 274, 15, "load last used Macro file on startup");
@ -2250,6 +2272,20 @@ l with your sound hardware.");
} // Fl_Group* o
tabSweetSpot->end();
} // Fl_Group* tabSweetSpot
{ tabMainWindow = new Fl_Group(0, 50, 400, 170, "Main window");
tabMainWindow->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 390, 75);
o->box(FL_ENGRAVED_FRAME);
{ btnDockedScope = new Fl_Check_Button(30, 84, 125, 20, "Docked scope");
btnDockedScope->tooltip("Restart fldigi for this option to take effect");
btnDockedScope->down_box(FL_DOWN_BOX);
btnDockedScope->callback((Fl_Callback*)cb_btnDockedScope);
btnDockedScope->value(progdefaults.docked_scope);
} // Fl_Check_Button* btnDockedScope
o->end();
} // Fl_Group* o
tabMainWindow->end();
} // Fl_Group* tabMainWindow
tabsMisc->end();
} // Fl_Tabs* tabsMisc
tabMisc->end();
@ -2386,7 +2422,7 @@ l with your sound hardware.");
{ Fl_Check_Button* o = btnQSK = new Fl_Check_Button(35, 75, 175, 15, "QSK on right channel");
btnQSK->down_box(FL_DOWN_BOX);
btnQSK->callback((Fl_Callback*)cb_btnQSK);
o->value(progdefaults.QSK);
o->value(progdefaults.QSKv);
} // Fl_Check_Button* btnQSK
{ Fl_Counter* o = cntPreTiming = new Fl_Counter(25, 109, 64, 21, "Pre Timing");
cntPreTiming->type(1);

Wyświetl plik

@ -21,6 +21,8 @@ decl {\#include "combo.h"} {}
decl {\#include "colorsfonts.h"} {}
decl {\#include "waterfall.h"} {}
decl {extern void initViewer();} {}
decl {Fl_Double_Window *dlgConfig;} {public
@ -46,8 +48,8 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
} {
Fl_Group tabOperator {
label Oper
callback {progdefaults.changed = true;} open
xywh {0 25 400 195} color 51 selection_color 51 when 1 hide
callback {progdefaults.changed = true;} open selected
xywh {0 25 400 195} color 51 selection_color 51 when 1
} {
Fl_Input inpMyCallsign {
label {Callsign:}
@ -380,6 +382,12 @@ progdefaults.changed = true;}
xywh {15 126 150 40} align 8
}
}
Fl_Choice mnuWaterfallWheelAction {
label {Wheel action}
callback {progdefaults.WaterfallWheelAction = o->value();
progdefaults.changed = true;} open
xywh {15 176 150 22} down_box BORDER_BOX align 8
} {}
}
}
}
@ -1025,14 +1033,14 @@ progdefaults.changed = true;}
}
Fl_Group tabMisc {
label Misc open
xywh {0 25 405 200} color 51 selection_color 51
xywh {0 25 405 200} color 51 selection_color 51 hide
} {
Fl_Tabs tabsMisc {open
xywh {0 25 400 195}
} {
Fl_Group tabCPUspeed {
label {CPU speed} open
xywh {0 50 400 170} hide
xywh {0 50 400 170}
} {
Fl_Group {} {open
xywh {5 62 390 43} box ENGRAVED_FRAME align 21
@ -1048,7 +1056,7 @@ progdefaults.changed = true;}
}
Fl_Group tabMacros {
label Macros open
xywh {0 50 400 170}
xywh {0 50 400 170} hide
} {
Fl_Group {} {open
xywh {5 55 390 69} box ENGRAVED_FRAME
@ -1057,7 +1065,7 @@ progdefaults.changed = true;}
label {load last used Macro file on startup}
callback {progdefaults.UseLastMacro = o->value();
update_main_title();
progdefaults.changed = true;} selected
progdefaults.changed = true;}
xywh {30 70 274 15} down_box DOWN_BOX
code0 {o->value(progdefaults.UseLastMacro);}
}
@ -1130,6 +1138,22 @@ progdefaults.changed = true;}
}
}
}
Fl_Group tabMainWindow {
label {Main window} open
xywh {0 50 400 170} hide
} {
Fl_Group {} {open
xywh {5 60 390 75} box ENGRAVED_FRAME
} {
Fl_Check_Button btnDockedScope {
label {Docked scope}
callback {progdefaults.docked_scope = o->value();
progdefaults.changed = true;}
tooltip {Restart fldigi for this option to take effect} xywh {30 84 125 20} down_box DOWN_BOX
code0 {btnDockedScope->value(progdefaults.docked_scope);}
}
}
}
}
}
Fl_Group tabModems {
@ -1242,10 +1266,10 @@ progdefaults.changed = true;}
} {
Fl_Check_Button btnQSK {
label {QSK on right channel}
callback {progdefaults.QSK=o->value();
callback {progdefaults.QSKv=o->value();
progdefaults.changed = true;}
xywh {35 75 175 15} down_box DOWN_BOX
code0 {o->value(progdefaults.QSK);}
code0 {o->value(progdefaults.QSKv);}
}
Fl_Counter cntPreTiming {
label {Pre Timing}

Wyświetl plik

@ -118,7 +118,6 @@ Fl_Double_Window *scopeview = (Fl_Double_Window *)0;
MixerBase* mixer = 0;
bool useCheckButtons;
bool twoscopes = false;
Fl_Light_Button *btnTune = (Fl_Light_Button *)0;
@ -568,7 +567,7 @@ void init_modem(trx_mode mode)
break;
default:
LOG_ERROR("Unknown mode: %d", mode);
LOG_ERROR("Unknown mode: %" PRIdPTR, mode);
return init_modem(MODE_BPSK31);
}
@ -1326,6 +1325,19 @@ bool clean_exit(void) {
MilliSleep(10);
}
if (dlgConfig) {
dlgConfig->hide();
delete cboHamlibRig;
delete dlgConfig;
}
#if USE_HAMLIB
if (xcvr) delete xcvr;
#endif
#if USE_XMLRPC
XML_RPC_Server::stop();
#endif
return true;
}
@ -1657,7 +1669,8 @@ void create_fl_digi_main() {
int pad = wSpace, Y = 0;
if (twoscopes) WNOM -= 2*DEFAULT_SW;
if (progdefaults.docked_scope)
WNOM -= 2*DEFAULT_SW;
update_main_title();
fl_digi_main = new Fl_Double_Window(WNOM, HNOM, main_window_title.c_str());
@ -1873,7 +1886,7 @@ void create_fl_digi_main() {
Y += Hmacros;
if (twoscopes) {
if (progdefaults.docked_scope) {
Fl_Pack *wfpack = new Fl_Pack(0, Y, WNOM, Hwfall);
wfpack->type(1);
wf = new waterfall(0, Y, Wwfall - Hwfall + 24, Hwfall);
@ -2506,62 +2519,6 @@ void setReverse(int rev) {
active_modem->set_reverse(rev);
}
void change_modem_param(int state)
{
int d;
if ( !((d = Fl::event_dy()) || (d = Fl::event_dx())) )
return;
if (state & (FL_META | FL_ALT)) {
if (d > 0)
active_modem->searchUp();
else if (d < 0)
active_modem->searchDown();
return;
}
if (!(state & (FL_CTRL | FL_SHIFT)))
return; // suggestions?
Fl_Valuator *val = 0;
if (state & FL_CTRL) {
switch (active_modem->get_mode()) {
case MODE_BPSK31: case MODE_QPSK31: case MODE_PSK63: case MODE_QPSK63:
case MODE_PSK125: case MODE_QPSK125: case MODE_PSK250: case MODE_QPSK250:
val = mailserver ? cntServerOffset : cntSearchRange;
break;
case MODE_FELDHELL:
val = sldrHellBW;
break;
case MODE_CW:
val = sldrCWbandwidth;
break;
default:
return;
}
}
else if (state & FL_SHIFT) {
val = sldrSquelch;
if (!twoscopes)
d = -d;
}
val->value(val->clamp(val->increment(val->value(), -d)));
bool changed_save = progdefaults.changed;
val->do_callback();
progdefaults.changed = changed_save;
if (val == cntServerOffset || val == cntSearchRange)
active_modem->set_sigsearch(SIGSEARCH);
else if (val == sldrSquelch) // sldrSquelch gives focus to TextWidget
wf->take_focus();
char msg[60];
if (val != sldrSquelch)
snprintf(msg, sizeof(msg), "%s = %2.0f Hz", val->label(), val->value());
else
snprintf(msg, sizeof(msg), "Squelch = %2.0f %%", val->value());
put_status(msg, 2);
}
void start_tx()
{
if (progdefaults.rsid == true) return;
@ -2614,6 +2571,9 @@ Fl_Color adjust_color(Fl_Color fg, Fl_Color bg)
void qsy(long long rfc, long long fmid)
{
if (fmid < 0LL)
fmid = (long long)active_modem->get_freq();
if (progdefaults.chkUSERIGCATis)
REQ(rigCAT_set_qsy, rfc, fmid);
else if (progdefaults.chkUSEMEMMAPis)

Wyświetl plik

@ -548,31 +548,30 @@ char szAbout[] =
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<title>about</title>\
<title>About</title>\
</head>\
<BODY BGCOLOR=FFFFCO TEXT=101010>\
<font size=\"0\" face=\"Verdana, Arial, Helvetica\">\
<CENTER>\
<H1><I>Fldigi " PACKAGE_VERSION "</I></H1>\
<br>\
</CENTER>\
<H4>Digital modem program for</H4><br>\
<P>\
<H4>Digital modem program for:</H4>\
&nbsp; &nbsp; &nbsp;Linux<br>\
&nbsp; &nbsp; &nbsp;FreeBSD<br>\
&nbsp; &nbsp; &nbsp;OS X<br>\
&nbsp; &nbsp; &nbsp;Windows<br>\
<br>\
<H4>Programmers:</H4><br>\
<P>\
<H4>Programmers:</H4>\
&nbsp; &nbsp; &nbsp;Dave Freese, W1HKJ<br>\
&nbsp; &nbsp; &nbsp;Stelios Bounanos, M0GLD<br>\
&nbsp; &nbsp; &nbsp;Leigh Klotz, WA5ZNU<br>\
<br>\
<H4>Beginners' Guide:</H4><br>\
<P>\
<H4>Beginners' Guide:</H4>\
&nbsp; &nbsp; &nbsp;Murray Greenman, ZL1BPU<br>\
</big>\
<br>\
<P>\
Distributed under the GNU General Public License version 2 or later.<br>\
This is free software: you are free to change and redistribute it.<br>\
There is NO WARRANTY, to the extent permitted by law.\
</body>\
</html>\
";

Wyświetl plik

@ -90,6 +90,7 @@ class Fl_ComboBox : public Fl_Group {
// Fl_Output *Output;
Fl_Input *Output;
Fl_PopBrowser *Brwsr;
Fl_Pixmap *btnmap;
datambr **datalist;
int listsize;
int maxsize;
@ -105,7 +106,8 @@ class Fl_ComboBox : public Fl_Group {
public:
Fl_ComboBox (int x, int y, int w, int h, const char * = 0);
~Fl_ComboBox();
const char *value ();
void value (const char *);
void put_value( const char *);

Wyświetl plik

@ -48,6 +48,8 @@ extern Fl_Button *btnBwTracksColor;
extern Fl_Check_Button *btnWaterfallHistoryDefault;
extern Fl_Check_Button *btnWaterfallQSY;
extern Fl_Input *inpWaterfallClickText;
#include <FL/Fl_Choice.H>
extern Fl_Choice *mnuWaterfallWheelAction;
extern Fl_Group *tabVideo;
extern Fl_Check_Button *btnsendid;
extern Fl_Check_Button *btnsendvideotext;
@ -71,7 +73,6 @@ extern Fl_Input_Choice *inpTTYdev;
extern Fl_Round_Button *btnPTT[5];
extern Fl_Check_Button *chkUSEHAMLIB;
extern Fl_ComboBox *cboHamlibRig;
#include <FL/Fl_Choice.H>
extern Fl_Choice *mnuBaudRate;
extern Fl_Input_Choice *inpRIGdev;
extern Fl_Check_Button *chkUSERIGCAT;
@ -134,6 +135,8 @@ extern Fl_Value_Input *valCWsweetspot;
extern Fl_Value_Input *valRTTYsweetspot;
extern Fl_Value_Input *valPSKsweetspot;
extern Fl_Check_Button *btnStartAtSweetSpot;
extern Fl_Group *tabMainWindow;
extern Fl_Check_Button *btnDockedScope;
extern Fl_Group *tabModems;
extern Fl_Tabs *tabsModems;
extern Fl_Group *tabCW;

Wyświetl plik

@ -16,8 +16,7 @@ struct configuration {
bool rsid;
bool TransmitRSid;
bool slowcpu;
bool experimental;
bool changed;
double wfRefLevel;
double wfAmpSpan;
@ -29,6 +28,7 @@ struct configuration {
bool WaterfallHistoryDefault;
bool WaterfallQSY;
string WaterfallClickText;
int WaterfallWheelAction;
// for PSK & PSK mail interface
bool PSKmailSweetSpot;
int SearchRange;
@ -69,7 +69,7 @@ struct configuration {
int CWupperlimit;
double CWrisetime;
double CWdash2dot;
bool QSK;
bool QSKv;
double CWpre;
double CWpost;
bool CWid;
@ -192,14 +192,14 @@ struct configuration {
bool MuteInput;
// waterfall palette
RGBint cfgpal[9];
RGB cfgpal[9];
// Button key color palette
bool useGroupColors;
RGBint btnGroup1;
RGBint btnGroup2;
RGBint btnGroup3;
RGBint btnFkeyTextColor;
RGB btnGroup1;
RGB btnGroup2;
RGB btnGroup3;
RGB btnFkeyTextColor;
// Rx / Tx fonts & palettes
Fl_Font RxFontnbr;
@ -208,8 +208,8 @@ struct configuration {
Fl_Font TxFontnbr;
int TxFontsize;
Fl_Color TxFontcolor;
RGBint RxColor;
RGBint TxColor;
RGB RxColor;
RGB TxColor;
Fl_Color XMITcolor;
Fl_Color CTRLcolor;
Fl_Color SKIPcolor;
@ -239,6 +239,7 @@ struct configuration {
string xmlrpc_allow;
string xmlrpc_deny;
bool docked_scope;
public:
void writeDefaultsXML();
void storeDefaults();

Wyświetl plik

@ -30,7 +30,8 @@ public:
enum level_e { QUIET_LEVEL, ERROR_LEVEL, WARN_LEVEL, INFO_LEVEL, DEBUG_LEVEL, LOG_NLEVELS };
static void start(const char* filename);
static void stop(void);
static void log(level_e level, const char* func, const char* srcf, int line, const char* format, ...);
static void log(level_e level, const char* func, const char* srcf, int line,
const char* format, ...) format__(printf, 5, 6);
static void elog(const char* func, const char* srcf, int line, const char* text);
static void show(void);
static level_e level;

Wyświetl plik

@ -86,7 +86,6 @@ extern Fl_Button *btnMacroDummy;
extern bool useCheckButtons;
extern bool twoscopes;
extern int altMacros;
extern waterfall *wf;
@ -156,8 +155,6 @@ extern bool QuerySqlOnOff();
extern void init_modem(trx_mode mode);
extern void init_modem_sync(trx_mode mode);
extern void change_modem_param(int state);
extern void start_tx();
extern void abort_tx();
@ -171,6 +168,6 @@ extern void stopMacroTimer();
Fl_Color adjust_color(Fl_Color fg, Fl_Color bg);
void qsy(long long rfc, long long fmid);
void qsy(long long rfc, long long fmid = -1LL);
#endif

Wyświetl plik

@ -45,16 +45,13 @@
do { \
switch (GET_THREAD_ID()) { \
case TRX_TID: \
LOG_ERROR("trx lock", \
__func__, __FILE__, __LINE__); \
LOG_ERROR("trx lock"); \
break; \
case FLMAIN_TID: \
LOG_WARN("flrun lock", \
__func__, __FILE__, __LINE__); \
LOG_WARN("flrun lock"); \
break; \
default: \
LOG_INFO("lock", \
__func__, __FILE__, __LINE__); \
LOG_INFO("lock"); \
} \
pstack_maybe(); \
Fl::lock(x); \

Wyświetl plik

@ -57,6 +57,8 @@ enum {
MODE_DOMINOEX11,
MODE_DOMINOEX16,
MODE_DOMINOEX22,
MODE_DOMINOEX_FIRST = MODE_DOMINOEX4,
MODE_DOMINOEX_LAST = MODE_DOMINOEX22,
MODE_FELDHELL,
MODE_SLOWHELL,
@ -65,21 +67,26 @@ enum {
MODE_FSKHELL,
MODE_FSKH105,
MODE_HELL80,
MODE_HELL_FIRST = MODE_FELDHELL,
MODE_HELL_LAST = MODE_HELL80,
MODE_MFSK8,
MODE_MFSK16,
MODE_MFSK32,
// experimental modes
MODE_MFSK4,
MODE_MFSK11,
MODE_MFSK22,
MODE_MFSK31,
MODE_MFSK64,
MODE_MFSK_FIRST = MODE_MFSK8,
MODE_MFSK_LAST = MODE_MFSK64,
MODE_MT63_500,
MODE_MT63_1000,
MODE_MT63_2000,
MODE_MT63_FIRST = MODE_MT63_500,
MODE_MT63_LAST = MODE_MT63_2000,
MODE_BPSK31,
MODE_QPSK31,
@ -89,6 +96,8 @@ enum {
MODE_QPSK125,
MODE_PSK250,
MODE_QPSK250,
MODE_PSK_FIRST = MODE_BPSK31,
MODE_PSK_LAST = MODE_QPSK250,
MODE_OLIVIA,
@ -101,6 +110,8 @@ enum {
// MODE_TSOR11,
MODE_THOR16,
MODE_THOR22,
MODE_THOR_FIRST = MODE_THOR4,
MODE_THOR_LAST = MODE_THOR22,
MODE_THROB1,
MODE_THROB2,
@ -108,6 +119,8 @@ enum {
MODE_THROBX1,
MODE_THROBX2,
MODE_THROBX4,
MODE_THROB_FIRST = MODE_THROB1,
MODE_THROB_LAST = MODE_THROBX4,
MODE_WWV,
MODE_ANALYSIS,

Wyświetl plik

@ -48,7 +48,6 @@ extern void arq_init();
extern void arq_close();
extern void WriteARQ(unsigned int);
extern void checkTLF();
void setup_signal_handlers(void);
#define ARQBUFSIZ 8192

Wyświetl plik

@ -7,7 +7,10 @@
extern "C" {
#endif
#include <stdint.h>
#ifndef __STDC_FORMAT_MACROS
# define __STDC_FORMAT_MACROS 1
#endif
#include <inttypes.h>
#ifndef powerof2
# define powerof2(n) ((((n) - 1) & (n)) == 0)
@ -71,6 +74,7 @@ extern "C" {
# define inline__ inline __attribute__ ((__always_inline__))
# define noinline__ __attribute__ ((__noinline__))
# define nonnull__(x) __attribute__ ((__nonnull__(x)))
# define format__(type_, index_, first_) __attribute__ ((format(type_, index_, first_)))
#else
# define likely(x) (x)
# define unlikely(x) (x)
@ -86,6 +90,7 @@ extern "C" {
# define inline__
# define noinline__
# define nonnull__(x)
# define format__(type_, index_, first_)
#endif
#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
@ -108,6 +113,9 @@ int set_cloexec(int fd, unsigned char v);
long ver2int(const char* version);
void save_signals(void);
void restore_signals(void);
#ifdef __cplusplus
} // extern "C"
#endif

Wyświetl plik

@ -70,12 +70,6 @@ struct RGB {
uchar B;
};
struct RGBint {
int R;
int G;
int B;
};
struct RGBI {
uchar R;
uchar G;
@ -158,7 +152,6 @@ public:
void draw();
// void resize (int, int, int, int);
int handle(int event);
void handle_mouse_wheel(int event);
void update_sigmap();
void update_waterfall();
void checkoffset();
@ -365,8 +358,12 @@ public:
double Pwr(int i) { return wfdisp->Pwr(i); }
int handle(int event);
/*
*/
enum { WF_NOP, WF_AFC_BW, WF_SIGNAL_SEARCH, WF_SQUELCH,
WF_CARRIER, WF_MODEM, WF_SCROLL };
static const char wf_wheel_action[];
void handle_mouse_wheel(int what, int d);
Fl_Button *btnRev;
Fl_Counter *wfcarrier;
Fl_Counter *wfRefLevel;

Wyświetl plik

@ -123,6 +123,7 @@ void generate_version_text(void);
void debug_exec(char** argv);
void set_platform_ui(void);
double speed_test(int converter, unsigned repeat);
static void setup_signal_handlers(void);
int main(int argc, char ** argv)
{
@ -399,9 +400,6 @@ void generate_option_help(void) {
<< " --wfall-height HEIGHT\n"
<< " HEIGHT in pixels, ie 100 - 200, recommend 10 pixel increments.\n\n"
<< " --twoscopes\n"
<< " Dock a second digiscope adjacent to the waterfall\n\n"
<< " --toggle-check-buttons\n"
<< " Use lighted or check buttons for AFC / SQL.\n";
@ -421,9 +419,10 @@ int parse_args(int argc, char **argv, int& idx)
#ifndef __CYGWIN__
OPT_RX_IPC_KEY, OPT_TX_IPC_KEY,
#endif
OPT_CONFIG_DIR, OPT_EXPERIMENTAL, OPT_ARQ_ADDRESS, OPT_ARQ_PORT,
OPT_CONFIG_DIR,
OPT_ARQ_ADDRESS, OPT_ARQ_PORT,
#if USE_XMLRPC
OPT_CONFIG_XMLRPC, OPT_CONFIG_XMLRPC_ADDRESS, OPT_CONFIG_XMLRPC_PORT,
OPT_CONFIG_XMLRPC_ADDRESS, OPT_CONFIG_XMLRPC_PORT,
OPT_CONFIG_XMLRPC_ALLOW, OPT_CONFIG_XMLRPC_DENY, OPT_CONFIG_XMLRPC_LIST,
#endif
OPT_FONT, OPT_WFALL_WIDTH, OPT_WFALL_HEIGHT,
@ -432,10 +431,9 @@ int parse_args(int argc, char **argv, int& idx)
#if USE_PORTAUDIO
OPT_FRAMES_PER_BUFFER,
#endif
OPT_TWO_SCOPES,
OPT_DEBUG_LEVEL,
OPT_EXIT_AFTER,
OPT_HELP, OPT_VERSION };
OPT_DEPRECATED, OPT_HELP, OPT_VERSION };
const char shortopts[] = "+";
static struct option longopts[] = {
@ -444,13 +442,13 @@ int parse_args(int argc, char **argv, int& idx)
{ "tx-ipc-key", 1, 0, OPT_TX_IPC_KEY },
#endif
{ "config-dir", 1, 0, OPT_CONFIG_DIR },
{ "experimental", 0, 0, OPT_EXPERIMENTAL },
{ "experimental", 0, 0, OPT_DEPRECATED },
{ "arq-server-address", 1, 0, OPT_ARQ_ADDRESS },
{ "arq-server-port", 1, 0, OPT_ARQ_PORT },
#if USE_XMLRPC
{ "xmlrpc-server", 0, 0, OPT_CONFIG_XMLRPC },
{ "xmlrpc-server", 0, 0, OPT_DEPRECATED },
{ "xmlrpc-server-address", 1, 0, OPT_CONFIG_XMLRPC_ADDRESS },
{ "xmlrpc-server-port", 1, 0, OPT_CONFIG_XMLRPC_PORT },
{ "xmlrpc-allow", 1, 0, OPT_CONFIG_XMLRPC_ALLOW },
@ -463,7 +461,7 @@ int parse_args(int argc, char **argv, int& idx)
{ "wfall-height", 1, 0, OPT_WFALL_HEIGHT },
{ "window-width", 1, 0, OPT_WINDOW_WIDTH },
{ "window-height", 1, 0, OPT_WINDOW_HEIGHT },
{ "twoscopes", 0, 0, OPT_TWO_SCOPES },
{ "twoscopes", 0, 0, OPT_DEPRECATED },
{ "toggle-check-buttons", 0, 0, OPT_TOGGLE_CHECK },
#if USE_PORTAUDIO
@ -509,9 +507,6 @@ int parse_args(int argc, char **argv, int& idx)
if (*HomeDir.rbegin() != '/')
HomeDir += '/';
break;
case OPT_EXPERIMENTAL:
progdefaults.experimental = true;
break;
case OPT_ARQ_ADDRESS:
progdefaults.arq_address = optarg;
@ -521,10 +516,6 @@ int parse_args(int argc, char **argv, int& idx)
break;
#if USE_XMLRPC
case OPT_CONFIG_XMLRPC:
cerr << "W: the --" << longopts[longindex].name
<< " option will be removed in the next version\n";
break;
case OPT_CONFIG_XMLRPC_ADDRESS:
progdefaults.xmlrpc_address = optarg;
break;
@ -575,10 +566,6 @@ int parse_args(int argc, char **argv, int& idx)
HNOM = strtol(optarg, NULL, 10);
break;
case OPT_TWO_SCOPES:
twoscopes = true;
break;
case OPT_TOGGLE_CHECK:
useCheckButtons = !useCheckButtons;
break;
@ -600,6 +587,11 @@ int parse_args(int argc, char **argv, int& idx)
}
break;
case OPT_DEPRECATED:
cerr << "W: the --" << longopts[longindex].name
<< " option has been deprecated and will be removed in a future version\n";
break;
case OPT_HELP:
cout << option_help;
exit(EXIT_SUCCESS);
@ -630,7 +622,13 @@ int parse_args(int argc, char **argv, int& idx)
void generate_version_text(void)
{
ostringstream s;
s << PACKAGE_NAME << ' ' << PACKAGE_VERSION << "\n\nSystem: ";
s << PACKAGE_STRING << '\n'
<< "Copyright (c) 2008 " << PACKAGE_AUTHORS << '\n'
<< "License GPLv2+: GNU GPL version 2 or later <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>\n"
<< "This is free software: you are free to change and redistribute it.\n"
<< "There is NO WARRANTY, to the extent permitted by law.\n";
s << "\nSystem: ";
struct utsname u;
if (uname(&u) != -1) {
s << u.sysname << ' ' << u.nodename
@ -764,29 +762,21 @@ double speed_test(int converter, unsigned repeat)
return repeat / (t0.tv_sec + t0.tv_nsec/1e9);
}
void setup_signal_handlers(void)
static void setup_signal_handlers(void)
{
struct sigaction action;
memset(&action, 0, sizeof(struct sigaction));
action.sa_handler = SIG_DFL;
// no child stopped notifications, no zombies
#ifdef __CYGWIN__
action.sa_flags = SA_NOCLDSTOP;
action.sa_handler = SIG_IGN;
#else
action.sa_handler = SIG_DFL;
action.sa_flags = SA_NOCLDSTOP | SA_NOCLDWAIT;
#endif
sigaction(SIGCHLD, &action, NULL);
action.sa_flags = 0;
// undo xmlrpc-c's signal handling
#if USE_XMLRPC
sigaction(SIGTERM, &action, NULL);
sigaction(SIGINT, &action, NULL);
sigaction(SIGHUP, &action, NULL);
sigaction(SIGUSR1, &action, NULL);
#endif
action.sa_handler = handle_signal;
sigaction(SIGSEGV, &action, NULL);
sigaction(SIGILL, &action, NULL);
@ -798,6 +788,5 @@ void setup_signal_handlers(void)
sigemptyset(&action.sa_mask);
sigaddset(&action.sa_mask, SIGUSR2);
pthread_sigmask((GET_THREAD_ID() == FLMAIN_TID ? SIG_BLOCK : SIG_UNBLOCK),
&action.sa_mask, NULL);
pthread_sigmask(SIG_BLOCK, &action.sa_mask, NULL);
}

Wyświetl plik

@ -261,6 +261,9 @@ mfsk::mfsk(trx_mode mfsk_mode) : modem()
createRxViewer();
activate_mfsk_image_item(true);
}
afcmetric = 0.0;
datashreg = 1;
init();
}

Wyświetl plik

@ -327,6 +327,7 @@ ARQ_SOCKET_Server::~ARQ_SOCKET_Server()
delete arq_socket_thread;
arq_socket_thread = 0;
}
delete server_socket;
}
bool ARQ_SOCKET_Server::start(const char* node, const char* service)
@ -370,7 +371,12 @@ void* ARQ_SOCKET_Server::thread_func(void*)
{
SET_THREAD_ID(ARQSOCKET_TID);
setup_signal_handlers();
{
sigset_t usr2;
sigemptyset(&usr2);
sigaddset(&usr2, SIGUSR2);
pthread_sigmask(SIG_UNBLOCK, &usr2, NULL);
}
while (inst->run) {
try {

Plik diff jest za duży Load Diff

Wyświetl plik

@ -119,7 +119,7 @@ void debug::log(level_e level, const char* func, const char* srcf, int line, con
void debug::elog(const char* func, const char* srcf, int line, const char* text)
{
log(ERROR_LEVEL, func, srcf, line, "%s: %s", strerror(errno));
log(ERROR_LEVEL, func, srcf, line, "%s: %s", text, strerror(errno));
}
void debug::show(void)

Wyświetl plik

@ -77,3 +77,35 @@ int set_cloexec(int fd, unsigned char v)
f = fcntl(fd, F_SETFD, f | (v ? FD_CLOEXEC : 0));
return f;
}
#include <pthread.h>
#include <signal.h>
#ifndef NSIG
# define NSIG 64
#endif
static size_t nsig = 0;
static struct sigaction* sigact = 0;
static pthread_mutex_t sigmutex = PTHREAD_MUTEX_INITIALIZER;
void save_signals(void)
{
pthread_mutex_lock(&sigmutex);
if (!sigact)
sigact = new struct sigaction[NSIG];
for (nsig = 1; nsig <= NSIG; nsig++)
if (sigaction(nsig, NULL, &sigact[nsig-1]) == -1)
break;
pthread_mutex_unlock(&sigmutex);
}
void restore_signals(void)
{
pthread_mutex_lock(&sigmutex);
for (size_t i = 1; i <= nsig; i++)
if (sigaction(i, &sigact[i-1], NULL) == -1)
break;
delete [] sigact;
sigact = 0;
nsig = 0;
pthread_mutex_unlock(&sigmutex);
}

Wyświetl plik

@ -84,6 +84,7 @@ XML_RPC_Server::XML_RPC_Server()
server_thread = new pthread_t;
run = true;
}
XML_RPC_Server::~XML_RPC_Server()
{
run = false;
@ -94,6 +95,7 @@ XML_RPC_Server::~XML_RPC_Server()
server_thread = 0;
}
delete methods;
delete server_socket;
methods = 0;
}
@ -137,14 +139,21 @@ void* XML_RPC_Server::thread_func(void*)
for (methods_t::iterator i = methods->begin(); i != methods->end(); ++i)
reg.addMethod(i->name, i->method);
save_signals();
xmlrpc_c::serverAbyss server(xmlrpc_c::serverAbyss::constrOpt()
.registryP(&reg)
#ifndef NDEBUG
.logFileName(HomeDir + "xmlrpc.log")
#endif
);
restore_signals();
setup_signal_handlers();
{
sigset_t usr2;
sigemptyset(&usr2);
sigaddset(&usr2, SIGUSR2);
pthread_sigmask(SIG_UNBLOCK, &usr2, NULL);
}
while (inst->run) {
try {
@ -507,15 +516,13 @@ static Fl_Valuator* get_bw_val(void)
if (!(active_modem->get_cap() & modem::CAP_BW))
throw xmlrpc_c::fault("Operation not supported by modem");
switch (active_modem->get_mode()) {
case MODE_FELDHELL: case MODE_SLOWHELL: case MODE_HELLX5:
case MODE_HELLX9: case MODE_FSKHELL: case MODE_FSKH105: case MODE_HELL80:
trx_mode m = active_modem->get_mode();
if (m >= MODE_HELL_FIRST && m <= MODE_HELL_LAST)
return sldrHellBW;
case MODE_CW:
else if (m == MODE_CW)
return sldrCWbandwidth;
default:
throw xmlrpc_c::fault("Unknown CAP_BW modem");
}
throw xmlrpc_c::fault("Unknown CAP_BW modem");
}
class Modem_get_bw : public xmlrpc_c::method
@ -722,7 +729,7 @@ public:
void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval)
{
double rfc = wf->rfcarrier();
qsy((long long int)params.getDouble(0, 0.0), active_modem->get_freq());
qsy((long long int)params.getDouble(0, 0.0));
*retval = xmlrpc_c::value_double(rfc);
}
};
@ -738,7 +745,7 @@ public:
void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval)
{
double rfc = wf->rfcarrier() + params.getDouble(0);
qsy((long long int)rfc, active_modem->get_freq());
qsy((long long int)rfc);
*retval = xmlrpc_c::value_double(rfc);
}
};
@ -866,8 +873,8 @@ public:
void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval)
{
double v = sldrSquelch->value();
// Squelch slider min/max are reversed when !twoscopes. Argh.
if (twoscopes)
// Squelch slider min/max are reversed when !docked_scope. Argh.
if (progdefaults.docked_scope)
REQ(set_valuator, sldrSquelch, params.getDouble(0, sldrSquelch->minimum(), sldrSquelch->maximum()));
else
REQ(set_valuator, sldrSquelch, params.getDouble(0, sldrSquelch->maximum(), sldrSquelch->minimum()));

Wyświetl plik

@ -50,6 +50,8 @@ Rig::Rig(rig_model_t rig_model) {
}
Rig::~Rig() {
riglist.clear();
rignames.clear();
if (theRig)
rig_cleanup(theRig);
}

Wyświetl plik

@ -39,7 +39,7 @@ using namespace std;
Cserial rigio;
static pthread_mutex_t rigCAT_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_t rigCAT_thread;
static pthread_t *rigCAT_thread = 0;
static bool rigCAT_exit = false;
static bool rigCAT_open = false;
@ -446,7 +446,7 @@ void rigCAT_setfreq(long long f)
return;
}
LOG_DEBUG("set frequency %ld", f);
LOG_DEBUG("set frequency %lld", f);
itrCmd = commands.begin();
while (itrCmd != commands.end()) {
@ -997,8 +997,10 @@ bool rigCAT_init()
rigCAT_bypass = false;
rigCAT_exit = false;
rigCAT_thread = new pthread_t;
if (pthread_create(&rigCAT_thread, NULL, rigCAT_loop, NULL) < 0) {
if (pthread_create(rigCAT_thread, NULL, rigCAT_loop, NULL) < 0) {
LOG_ERROR("pthread_create failed");
rigio.ClosePort();
return false;
@ -1034,6 +1036,8 @@ void rigCAT_close(void)
}
}
rigio.ClosePort();
delete rigCAT_thread;
rigCAT_thread = 0;
}
bool rigCAT_active(void)

Wyświetl plik

@ -112,7 +112,7 @@ void MixerOSS::initValues()
LOG_DEBUG("Sound mixer initial state:\n" "Dev mask: %02x\n"
"Rec mask: %02x\n" "Rec src: %02x\n" "Current input source #: %s\n"
"Line level: %d\n" "Mic level: %d\n" "Pcm level: %d\n" "Vol level: %d\n",
"Line level: %f\n" "Mic level: %f\n" "Pcm level: %f\n" "Vol level: %f\n",
devmask, recmask, recsrc, GetInputSourceName(inpsrc0),
linelevel0, miclevel0, pcmlevel0, vollevel0);
}

Wyświetl plik

@ -1501,7 +1501,7 @@ void SoundPort::pa_perror(int err, const char* str)
LOG_ERROR("Possible OSS error %d: %s", errno, strerror(errno));
}
else
LOG_ERROR("%s error %d: %s", Pa_GetHostApiInfo(i)->name,
LOG_ERROR("%s error %ld: %s", Pa_GetHostApiInfo(i)->name,
hosterr->errorCode, hosterr->errorText);
}
}

Wyświetl plik

@ -472,7 +472,8 @@ int Digiscope::handle(int event)
}
return 1;
case FL_MOUSEWHEEL:
change_modem_param(FL_CTRL);
if ((event = Fl::event_dy()) || (event = Fl::event_dx()))
wf->handle_mouse_wheel(waterfall::WF_AFC_BW, event);
break;
default:
break;

Wyświetl plik

@ -48,6 +48,7 @@
#include "Viewer.h"
#include "macros.h"
#include "arq_io.h"
#include "confdialog.h"
extern modem *active_modem;
@ -132,6 +133,9 @@ WFdisp::WFdisp (int x0, int y0, int w0, int h0, char *lbl) :
tmp_carrier = false;
ptrCB = 0;
ptrFFTbuff = 0;
for (int i = 0; i < 256; i++)
mag2RGBI[i].I = mag2RGBI[i].R = mag2RGBI[i].G = mag2RGBI[i].B = 0;
}
WFdisp::~WFdisp() {
@ -279,7 +283,7 @@ void WFdisp::setcolors() {
void WFdisp::initmaps() {
for (int i = 0; i < image_area; i++) fft_db[i] = log2disp(-1000);
for (int i = 0; i < image_area; i++) fft_db[i] = tmp_fft_db[i] = log2disp(-1000);
memset (fft_img, 0, image_area * sizeof(RGBI) );
memset (scaleimage, 0, scale_width * WFSCALE);
@ -631,7 +635,10 @@ void WFdisp::update_waterfall() {
short int *p1, *p2;
RGBI *p3, *p4;
p1 = tmp_fft_db + offset;
p2 = p1;
p3 = fft_img;
p4 = p3;
short* limit = tmp_fft_db + image_area - step + 1;
for (int row = 0; row < image_height; row++) {
@ -1391,7 +1398,8 @@ int waterfall::handle(int event)
Fl_Valuator* v[] = { sldrSquelch, wfcarrier, wfRefLevel, wfAmpSpan, valRcvMixer, valXmtMixer };
for (size_t i = 0; i < sizeof(v)/sizeof(v[0]); i++) {
if (Fl::event_inside(v[i])) {
if ((v[i] == sldrSquelch && !twoscopes) || v[i] == valRcvMixer || v[i] == valXmtMixer)
if ((v[i] == sldrSquelch && !progdefaults.docked_scope) ||
v[i] == valRcvMixer || v[i] == valXmtMixer)
d = -d;
v[i]->value(v[i]->clamp(v[i]->increment(v[i]->value(), -d)));
v[i]->do_callback();
@ -1551,10 +1559,25 @@ int WFdisp::handle(int event)
break;
case FL_MOUSEWHEEL:
change_modem_param(Fl::event_state());
{
int d;
if ( !((d = Fl::event_dy()) || (d = Fl::event_dx())) )
break;
int state = Fl::event_state();
if (state & FL_CTRL)
wf->handle_mouse_wheel(waterfall::WF_AFC_BW, d);
else if (state & (FL_META | FL_ALT))
wf->handle_mouse_wheel(waterfall::WF_SIGNAL_SEARCH, d);
else if (state & FL_SHIFT)
wf->handle_mouse_wheel(waterfall::WF_SQUELCH, d);
else {
if (progdefaults.WaterfallQSY && Fl::event_inside(x(), y(), w(), WFTEXT+WFSCALE+WFMARKER))
qsy(wf->rfcarrier() - 500*d);
else
wf->handle_mouse_wheel(progdefaults.WaterfallWheelAction, d);
}
return handle(FL_MOVE);
break;
}
case FL_SHORTCUT:
if (Fl::event_inside(this))
take_focus();
@ -1606,3 +1629,71 @@ int WFdisp::handle(int event)
return 1;
}
void waterfall::handle_mouse_wheel(int what, int d)
{
if (d == 0)
return;
Fl_Valuator *val = 0;
const char* msg_fmt = 0, *msg_label = 0;
switch (what) {
case WF_NOP:
return;
case WF_AFC_BW:
{
trx_mode m = active_modem->get_mode();
if (m >= MODE_PSK_FIRST && m <= MODE_PSK_LAST)
val = mailserver ? cntServerOffset : cntSearchRange;
else if (m >= MODE_HELL_FIRST && m <= MODE_HELL_LAST)
val = sldrHellBW;
else if (m == MODE_CW)
val = sldrCWbandwidth;
msg_fmt = "%s = %2.0f Hz";
msg_label = val->label();
break;
}
case WF_SIGNAL_SEARCH:
if (d > 0)
active_modem->searchDown();
else
active_modem->searchUp();
return;
case WF_SQUELCH:
val = sldrSquelch;
if (!progdefaults.docked_scope)
d = -d;
msg_fmt = "%s = %2.0f %%";
msg_label = "Squelch";
break;
case WF_CARRIER:
val = wfcarrier;
break;
case WF_MODEM:
init_modem(d > 0 ? MODE_NEXT : MODE_PREV);
return;
case WF_SCROLL:
(d > 0 ? right : left)->do_callback();
return;
}
val->value(val->clamp(val->increment(val->value(), -d)));
bool changed_save = progdefaults.changed;
val->do_callback();
progdefaults.changed = changed_save;
if (val == cntServerOffset || val == cntSearchRange)
active_modem->set_sigsearch(SIGSEARCH);
else if (val == sldrSquelch) // sldrSquelch gives focus to TransmitText
take_focus();
if (msg_fmt) {
char msg[60];
snprintf(msg, sizeof(msg), msg_fmt, msg_label, val->value());
put_status(msg, 2.0);
}
}
const char waterfall::wf_wheel_action[] = "None|AFC range or BW|"
"Signal search|Squelch level|"
"Modem carrier|Modem|Scroll";

Wyświetl plik

@ -381,8 +381,8 @@ void Fl_Text_Display_mod::resize(int X, int Y, int W, int H) {
text_area.y = Y+BOTTOM_MARGIN;
text_area.w = W-LEFT_MARGIN-RIGHT_MARGIN;
text_area.h = H-TOP_MARGIN-BOTTOM_MARGIN;
int i;
int i = 0;
/* Find the new maximum font height for this text display */
for (i = 0, mMaxsize = fl_height(textfont(), textsize()); i < mNStyles; i++)
mMaxsize = max(mMaxsize, fl_height(mStyleTable[i].font, mStyleTable[i].size));