kopia lustrzana https://github.com/jamescoxon/dl-fldigi
				
				
				
			Upstream version 3.0preX
							rodzic
							
								
									29d5fe68e7
								
							
						
					
					
						commit
						45294abdec
					
				
							
								
								
									
										13
									
								
								configure.ac
								
								
								
								
							
							
						
						
									
										13
									
								
								configure.ac
								
								
								
								
							| 
						 | 
				
			
			@ -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, [preW])
 | 
			
		||||
m4_define(FLDIGI_PATCH, [preX])
 | 
			
		||||
 | 
			
		||||
AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[FLDIGI_PATCH], [w1hkj AT w1hkj DOT com])
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -81,9 +81,18 @@ AC_FUNC_STRFTIME
 | 
			
		|||
AC_FUNC_STRTOD
 | 
			
		||||
AC_CHECK_FUNCS([getaddrinfo gethostbyname localtime_r memmove memset mkdir select snprintf socket strcasecmp strchr strdup strerror strncasecmp strcasestr strrchr strstr strtol uname vsnprintf])
 | 
			
		||||
 | 
			
		||||
# Check for clock_gettime
 | 
			
		||||
LIBS_save="$LIBS"; LIBS=""
 | 
			
		||||
AC_SEARCH_LIBS([clock_gettime], [rt], [ac_cv_clock_gettime=1; EXTRA_LIBS="$EXTRA_LIBS $LIBS"],
 | 
			
		||||
               [ac_cv_clock_gettime=0])
 | 
			
		||||
AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME, $ac_cv_clock_gettime, [Define to 1 if we have clock_gettime])
 | 
			
		||||
LIBS="$LIBS_save"
 | 
			
		||||
# Check for dlopen
 | 
			
		||||
AC_SEARCH_LIBS([dlopen], [dl], [ac_cv_dlopen=1], [ac_cv_dlopen=0])
 | 
			
		||||
LIBS_save="$LIBS"; LIBS=""
 | 
			
		||||
AC_SEARCH_LIBS([dlopen], [dl], [ac_cv_dlopen=1; EXTRA_LIBS="$EXTRA_LIBS $LIBS"], [ac_cv_dlopen=0])
 | 
			
		||||
AC_DEFINE_UNQUOTED(HAVE_DLOPEN, $ac_cv_dlopen, [Define to 1 if we have dlopen])
 | 
			
		||||
LIBS="$LIBS_save"
 | 
			
		||||
AC_SUBST([EXTRA_LIBS])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AC_PRESERVE_HELP_ORDER
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,8 +6,4 @@ AC_DEFUN([AC_FLDIGI_STATIC], [
 | 
			
		|||
                    *)      AC_MSG_ERROR([bad value ${enableval} for --enable-static]) ;;
 | 
			
		||||
                 esac],
 | 
			
		||||
                 [ac_cv_static=no])
 | 
			
		||||
  if test "x$ac_cv_static" = "xyes"; then
 | 
			
		||||
      AC_CHECK_LIB([rt], [clock_gettime], [RTLIB=-lrt])
 | 
			
		||||
  fi
 | 
			
		||||
  AC_SUBST([RTLIB])
 | 
			
		||||
])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ AM_CFLAGS = $(AM_CXXFLAGS)
 | 
			
		|||
AM_LDFLAGS = @MAC_UNIVERSAL_LDFLAGS@
 | 
			
		||||
 | 
			
		||||
LDADD = @PORTAUDIO_LIBS@ @BOOST_LDFLAGS@ @FLTK_LIBS@ @SNDFILE_LIBS@ \
 | 
			
		||||
	@SAMPLERATE_LIBS@ @PULSEAUDIO_LIBS@ @HAMLIB_LIBS@ @IMAGE_LIBS@ @XMLRPC_LIBS@ @RTLIB@
 | 
			
		||||
	@SAMPLERATE_LIBS@ @PULSEAUDIO_LIBS@ @HAMLIB_LIBS@ @IMAGE_LIBS@ @XMLRPC_LIBS@ @EXTRA_LIBS@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
HAMLIB_SRC = include/hamlib.h rigcontrol/hamlib.cxx include/rigclass.h rigcontrol/rigclass.cxx
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -208,20 +208,13 @@ Fl_Menu_Item quick_change_qpsk[] = {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
Fl_Menu_Item quick_change_mfsk[] = {
 | 
			
		||||
	{ mode_info[MODE_MFSK8].name, 0, cb_init_mode, (void *)MODE_MFSK8 },
 | 
			
		||||
	{ mode_info[MODE_MFSK16].name, 0, cb_init_mode, (void *)MODE_MFSK16 },
 | 
			
		||||
	{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32 },
 | 
			
		||||
	{ 0 }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Fl_Menu_Item quick_change_mfsk_exp[] = {
 | 
			
		||||
	{ mode_info[MODE_MFSK8].name, 0, cb_init_mode, (void *)MODE_MFSK8 },
 | 
			
		||||
	{ mode_info[MODE_MFSK16].name, 0, cb_init_mode, (void *)MODE_MFSK16 },
 | 
			
		||||
	{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32 },
 | 
			
		||||
	{ mode_info[MODE_MFSK4].name, 0, cb_init_mode, (void *)MODE_MFSK4 },
 | 
			
		||||
	{ mode_info[MODE_MFSK8].name, 0, cb_init_mode, (void *)MODE_MFSK8 },
 | 
			
		||||
	{ mode_info[MODE_MFSK16].name, 0, cb_init_mode, (void *)MODE_MFSK16 },
 | 
			
		||||
	{ mode_info[MODE_MFSK11].name, 0, cb_init_mode, (void *)MODE_MFSK11 },
 | 
			
		||||
	{ mode_info[MODE_MFSK22].name, 0, cb_init_mode, (void *)MODE_MFSK22 },
 | 
			
		||||
	{ mode_info[MODE_MFSK31].name, 0, cb_init_mode, (void *)MODE_MFSK31 },
 | 
			
		||||
	{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32 },
 | 
			
		||||
	{ mode_info[MODE_MFSK64].name, 0, cb_init_mode, (void *)MODE_MFSK64 },
 | 
			
		||||
	{ 0 }
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -596,10 +589,7 @@ void init_modem(trx_mode mode)
 | 
			
		|||
	case MODE_MFSK32:
 | 
			
		||||
		startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
 | 
			
		||||
			      *mode_info[mode].modem = new mfsk(mode));
 | 
			
		||||
		if (progdefaults.experimental)
 | 
			
		||||
			quick_change = quick_change_mfsk_exp;
 | 
			
		||||
		else
 | 
			
		||||
			quick_change = quick_change_mfsk;
 | 
			
		||||
		quick_change = quick_change_mfsk;
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case MODE_MT63_500: case MODE_MT63_1000: case MODE_MT63_2000 :
 | 
			
		||||
| 
						 | 
				
			
			@ -1339,16 +1329,14 @@ Fl_Menu_Item menu_[] = {
 | 
			
		|||
{0,0,0,0,0,0,0,0,0},
 | 
			
		||||
 | 
			
		||||
{"MFSK", 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK8].name, 0,  cb_init_mode, (void *)MODE_MFSK8, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK16].name, 0,  cb_init_mode, (void *)MODE_MFSK16, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK32].name, 0,  cb_init_mode, (void *)MODE_MFSK32, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
// experimental modes
 | 
			
		||||
{ mode_info[MODE_MFSK4].name, 0,  cb_init_mode, (void *)MODE_MFSK4, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK8].name, 0,  cb_init_mode, (void *)MODE_MFSK8, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK11].name, 0,  cb_init_mode, (void *)MODE_MFSK11, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK16].name, 0,  cb_init_mode, (void *)MODE_MFSK16, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK22].name, 0,  cb_init_mode, (void *)MODE_MFSK22, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK31].name, 0,  cb_init_mode, (void *)MODE_MFSK31, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK32].name, 0,  cb_init_mode, (void *)MODE_MFSK32, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
{ mode_info[MODE_MFSK64].name, 0,  cb_init_mode, (void *)MODE_MFSK64, 0, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
 | 
			
		||||
{0,0,0,0,0,0,0,0,0},
 | 
			
		||||
 | 
			
		||||
{"MT63", 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
 | 
			
		||||
| 
						 | 
				
			
			@ -1464,36 +1452,6 @@ Fl_Menu_Item *getMenuItem(const char *caption)
 | 
			
		|||
	return item;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void activate_experimental()
 | 
			
		||||
{
 | 
			
		||||
	Fl_Menu_Item *m_exp = 0;
 | 
			
		||||
	if (progdefaults.experimental) {
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK4].name)) != 0)
 | 
			
		||||
			m_exp->show();
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK11].name)) != 0)
 | 
			
		||||
			m_exp->show();
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK22].name)) != 0)
 | 
			
		||||
			m_exp->show();
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK31].name)) != 0)
 | 
			
		||||
			m_exp->show();
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK64].name)) != 0)
 | 
			
		||||
			m_exp->show();
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK32].name)) != 0)
 | 
			
		||||
			m_exp->flags |= FL_MENU_DIVIDER;
 | 
			
		||||
	} else {
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK4].name)) != 0)
 | 
			
		||||
			m_exp->hide();
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK11].name)) != 0)
 | 
			
		||||
			m_exp->hide();
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK22].name)) != 0)
 | 
			
		||||
			m_exp->hide();
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK31].name)) != 0)
 | 
			
		||||
			m_exp->hide();
 | 
			
		||||
		if ((m_exp = getMenuItem(mode_info[MODE_MFSK64].name)) != 0)
 | 
			
		||||
			m_exp->hide();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void activate_rig_menu_item(bool b)
 | 
			
		||||
{
 | 
			
		||||
	Fl_Menu_Item *rig = getMenuItem("Rig");
 | 
			
		||||
| 
						 | 
				
			
			@ -1949,7 +1907,6 @@ void create_fl_digi_main() {
 | 
			
		|||
	scopeview->end();
 | 
			
		||||
	scopeview->hide();	
 | 
			
		||||
 | 
			
		||||
	activate_experimental();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -103,8 +103,19 @@ const char* FSEL::select(const char* title, const char* filter, const char* def,
 | 
			
		|||
{
 | 
			
		||||
	inst->chooser->title(title);
 | 
			
		||||
	inst->chooser->filter(filter);
 | 
			
		||||
	if (def)
 | 
			
		||||
		inst->chooser->preset_file(def);
 | 
			
		||||
	if (def) {
 | 
			
		||||
		string pathname = def;
 | 
			
		||||
		string path = "";
 | 
			
		||||
		string name = "";
 | 
			
		||||
		size_t indx = pathname.rfind('/');
 | 
			
		||||
		if (indx != string::npos) {
 | 
			
		||||
			name = pathname.substr(indx + 1);
 | 
			
		||||
			path = pathname.substr(0, indx);
 | 
			
		||||
		} else
 | 
			
		||||
			name = def;
 | 
			
		||||
		inst->chooser->preset_file(name.c_str());
 | 
			
		||||
		inst->chooser->directory(path.c_str());
 | 
			
		||||
	}
 | 
			
		||||
	inst->chooser->options(Fl_Native_File_Chooser::PREVIEW);
 | 
			
		||||
	inst->chooser->type(Fl_Native_File_Chooser::BROWSE_FILE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -118,8 +129,19 @@ const char* FSEL::saveas(const char* title, const char* filter, const char* def,
 | 
			
		|||
{
 | 
			
		||||
	inst->chooser->title(title);
 | 
			
		||||
	inst->chooser->filter(filter);
 | 
			
		||||
	if (def)
 | 
			
		||||
		inst->chooser->preset_file(def);
 | 
			
		||||
	if (def) {
 | 
			
		||||
		string pathname = def;
 | 
			
		||||
		string path = "";
 | 
			
		||||
		string name = "";
 | 
			
		||||
		size_t indx = pathname.rfind('/');
 | 
			
		||||
		if (indx != string::npos) {
 | 
			
		||||
			name = pathname.substr(indx + 1);
 | 
			
		||||
			path = pathname.substr(0, indx);
 | 
			
		||||
		} else
 | 
			
		||||
			name = def;
 | 
			
		||||
		inst->chooser->preset_file(name.c_str());
 | 
			
		||||
		inst->chooser->directory(path.c_str());
 | 
			
		||||
	}
 | 
			
		||||
	inst->chooser->options(Fl_Native_File_Chooser::SAVEAS_CONFIRM |
 | 
			
		||||
			 Fl_Native_File_Chooser::NEW_FOLDER |
 | 
			
		||||
			 Fl_Native_File_Chooser::PREVIEW);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -450,3 +450,83 @@ complex *sfft::run(const complex& input)
 | 
			
		|||
	return &bins[first];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// Goertzel filter
 | 
			
		||||
// Optimized implementation of a DFT for a single frequency of interest
 | 
			
		||||
// SR = sample rate
 | 
			
		||||
// N = Block size (does not need to be a factor of 2!)
 | 
			
		||||
//     bin size = SR / N
 | 
			
		||||
// K = frequency bin of interest = (N * freq / SR)
 | 
			
		||||
//     N should be selected to make K an integer if possible
 | 
			
		||||
//
 | 
			
		||||
// Q0 = current sample
 | 
			
		||||
// Q1 = previous sample (1 delay)
 | 
			
		||||
// Q2 = previous sample (2 delay)
 | 
			
		||||
// w  = (2 * pi * K / N)
 | 
			
		||||
// k1 = cos(w)
 | 
			
		||||
// k2 = sin(w)
 | 
			
		||||
// k3 = 2.0 * k1
 | 
			
		||||
 | 
			
		||||
// Q0, Q1, Q2 are initialized to zero
 | 
			
		||||
// Iterate N times:
 | 
			
		||||
// Q0 = k3*Q1 - Q2 + sample
 | 
			
		||||
// Q2 = Q1
 | 
			
		||||
// Q1 = Q0
 | 
			
		||||
//
 | 
			
		||||
// After N interations:
 | 
			
		||||
// real = (Q1 - Q2 * k1)
 | 
			
		||||
// imag = Q2 * k2
 | 
			
		||||
// or
 | 
			
		||||
// mag = Q1*Q1 + Q2*Q2 - Q1*Q2*k1
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
goertzel::goertzel(double sr, int n, int k)
 | 
			
		||||
{
 | 
			
		||||
	double w;
 | 
			
		||||
	SR = sr;
 | 
			
		||||
	K = k;
 | 
			
		||||
	N = n;
 | 
			
		||||
	w = 4.0 * M_PI * K / N;
 | 
			
		||||
	k1 = cos(w);
 | 
			
		||||
	k2 = sin(w);
 | 
			
		||||
	k3 = 2.0 * k1;
 | 
			
		||||
	Q0 = Q1 = Q2 = 0.0;
 | 
			
		||||
	count = N;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
goertzel::~goertzel()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void goertzel::reset()
 | 
			
		||||
{
 | 
			
		||||
	Q0 = Q1 = Q2 = 0.0;
 | 
			
		||||
	count = N;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool goertzel::run(double sample)
 | 
			
		||||
{
 | 
			
		||||
	Q0 = k1 * Q1 - Q2 + sample;
 | 
			
		||||
	Q2 = Q1;
 | 
			
		||||
	Q1 = Q0;
 | 
			
		||||
	if (--count == 0) {
 | 
			
		||||
		count = N;
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
double goertzel::real()
 | 
			
		||||
{
 | 
			
		||||
	return (Q1 - Q2 * k1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
double goertzel::imag()
 | 
			
		||||
{
 | 
			
		||||
	return (Q2 * k2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
double goertzel::mag()
 | 
			
		||||
{
 | 
			
		||||
	return (Q1*Q1 - Q2*Q2 - Q1*Q2*k1);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,4 +135,31 @@ public:
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//=============================================================================
 | 
			
		||||
// Goertzel DFT
 | 
			
		||||
//=============================================================================
 | 
			
		||||
 | 
			
		||||
class goertzel {
 | 
			
		||||
private:
 | 
			
		||||
	double SR;
 | 
			
		||||
	int K;
 | 
			
		||||
	int N;
 | 
			
		||||
	int count;
 | 
			
		||||
	double Q0;
 | 
			
		||||
	double Q1;
 | 
			
		||||
	double Q2;
 | 
			
		||||
	double k1;
 | 
			
		||||
	double k2;
 | 
			
		||||
	double k3;
 | 
			
		||||
public:
 | 
			
		||||
	goertzel(double sr, int n, int k);
 | 
			
		||||
	~goertzel();
 | 
			
		||||
	void reset();
 | 
			
		||||
	bool run(double v);
 | 
			
		||||
	double real();
 | 
			
		||||
	double imag();
 | 
			
		||||
	double mag();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif				/* _FILTER_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										26
									
								
								src/main.cxx
								
								
								
								
							
							
						
						
									
										26
									
								
								src/main.cxx
								
								
								
								
							| 
						 | 
				
			
			@ -152,19 +152,16 @@ int main(int argc, char ** argv)
 | 
			
		|||
 | 
			
		||||
	setlocale(LC_TIME, "");
 | 
			
		||||
 | 
			
		||||
#ifndef __CYGWIN__
 | 
			
		||||
	fl_filename_expand(szHomedir, 119, "$HOME/.fldigi/");
 | 
			
		||||
#ifdef __CYGWIN__
 | 
			
		||||
	fl_filename_expand(szHomedir, 119, "$HOME/fldigi.files/");
 | 
			
		||||
	redirect_streams(HomeDir);
 | 
			
		||||
	atexit(restore_streams);
 | 
			
		||||
#else
 | 
			
		||||
	fl_filename_expand(szHomedir, 119, "$APPDATA/fldigi/");
 | 
			
		||||
	fl_filename_expand(szHomedir, 119, "$HOME/.fldigi/");
 | 
			
		||||
#endif
 | 
			
		||||
	HomeDir = szHomedir;
 | 
			
		||||
 | 
			
		||||
#ifdef __CYGWIN__
 | 
			
		||||
	redirect_streams(HomeDir);
 | 
			
		||||
	atexit(restore_streams);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
       set_platform_ui();
 | 
			
		||||
	set_platform_ui();
 | 
			
		||||
 | 
			
		||||
	generate_option_help();
 | 
			
		||||
	generate_version_text();
 | 
			
		||||
| 
						 | 
				
			
			@ -316,9 +313,6 @@ void generate_option_help(void) {
 | 
			
		|||
	     << "    Look for configuration files in DIRECTORY\n"
 | 
			
		||||
	     << "    The default is: " << HomeDir << "\n\n"
 | 
			
		||||
 | 
			
		||||
	     << "  --experimental\n"
 | 
			
		||||
	     << "    enable experimental modes\n\n"
 | 
			
		||||
 | 
			
		||||
#ifndef __CYGWIN__
 | 
			
		||||
	     << "  --rx-ipc-key KEY\n"
 | 
			
		||||
	     << "    Set the receive message queue key\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -765,10 +759,18 @@ double speed_test(int converter, unsigned repeat)
 | 
			
		|||
	src_simple(&src, SRC_SINC_FASTEST, 1);
 | 
			
		||||
 | 
			
		||||
	struct timespec t0, t1;
 | 
			
		||||
#ifdef _POSIX_MONOTONIC_CLOCK
 | 
			
		||||
	clock_gettime(CLOCK_MONOTONIC, &t0);
 | 
			
		||||
#else
 | 
			
		||||
	clock_gettime(CLOCK_REALTIME, &t0);
 | 
			
		||||
#endif
 | 
			
		||||
	for (unsigned i = 0; i < repeat; i++)
 | 
			
		||||
		src_simple(&src, SRC_SINC_FASTEST, 1);
 | 
			
		||||
#ifdef _POSIX_MONOTONIC_CLOCK
 | 
			
		||||
	clock_gettime(CLOCK_MONOTONIC, &t1);
 | 
			
		||||
#else
 | 
			
		||||
	clock_gettime(CLOCK_REALTIME, &t1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	delete [] src.data_in;
 | 
			
		||||
	delete [] src.data_out;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,7 +83,7 @@ void loadBrowser(Fl_Widget *widget) {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	glob_t gbuf;
 | 
			
		||||
	glob(string(HomeDir).append("/scripts/*").c_str(), 0, NULL, &gbuf);
 | 
			
		||||
	glob(string(HomeDir).append("scripts/*").c_str(), 0, NULL, &gbuf);
 | 
			
		||||
	if (gbuf.gl_pathc == 0) {
 | 
			
		||||
		globfree(&gbuf);
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -589,7 +589,7 @@ void MACROTEXT::loadDefault()
 | 
			
		|||
void MACROTEXT::openMacroFile()
 | 
			
		||||
{
 | 
			
		||||
	string deffilename = HomeDir;
 | 
			
		||||
	deffilename.append("/macros.mdf");
 | 
			
		||||
	deffilename.append("macros.mdf");
 | 
			
		||||
    const char *p = FSEL::select("Open macro file", "Fldigi macro definition file\t*.mdf", deffilename.c_str());
 | 
			
		||||
    if (p)
 | 
			
		||||
		loadMacros(p);
 | 
			
		||||
| 
						 | 
				
			
			@ -598,7 +598,7 @@ void MACROTEXT::openMacroFile()
 | 
			
		|||
void MACROTEXT::saveMacroFile()
 | 
			
		||||
{
 | 
			
		||||
	string deffilename = HomeDir;
 | 
			
		||||
	deffilename.append("/macros.mdf");
 | 
			
		||||
	deffilename.append("macros.mdf");
 | 
			
		||||
    const char *p = FSEL::saveas("Save macro file", "Fldigi macro definition file\t*.mdf", deffilename.c_str());
 | 
			
		||||
    if (p)
 | 
			
		||||
		saveMacros(p);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -536,7 +536,6 @@ int psk::rx_process(const double *buf, int len)
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	signalquality();
 | 
			
		||||
	
 | 
			
		||||
	if (sigsearch)
 | 
			
		||||
		findsignal();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ void loadPalette()
 | 
			
		|||
	FILE *clrfile = NULL;
 | 
			
		||||
	if (palfilename.size() == 0) {
 | 
			
		||||
		palfilename = HomeDir;
 | 
			
		||||
		palfilename.append ("/fldigi.pal");
 | 
			
		||||
		palfilename.append ("fldigi.pal");
 | 
			
		||||
	}
 | 
			
		||||
    const char *p = FSEL::select("Open palette", "Fldigi palette\t*.pal", palfilename.c_str());
 | 
			
		||||
	if (!p) return;
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ void savePalette()
 | 
			
		|||
	FILE *clrfile = NULL;
 | 
			
		||||
	if (palfilename.size() == 0) {
 | 
			
		||||
		palfilename = HomeDir;
 | 
			
		||||
		palfilename.append ("/fldigi.pal");
 | 
			
		||||
		palfilename.append ("fldigi.pal");
 | 
			
		||||
	}
 | 
			
		||||
	const char *p = FSEL::saveas("Save palette", "Fldigi palette\t*.pal", palfilename.c_str());
 | 
			
		||||
	if (!p) return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue