1 // ---------------------------------------------------------------------
2 // status.cxx
3 //
4 // Copyright (C) 2007-2010
5 //		Dave Freese, W1HKJ
6 // Copyright (C) 2008-2010
7 //		Stelios Bounanos, M0GLD
8 //
9 // This file is part of fldigi.
10 //
11 // Fldigi is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // Fldigi is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with fldigi.  If not, see <http://www.gnu.org/licenses/>.
23 // ---------------------------------------------------------------------
24 //
25 // Save all floating point values as integers
26 //
27 // int_fval = fval * NNN where NNN is a factor of 10
28 //
29 // restore using fval = int_fval / NNN
30 //
31 // A work around for a bug in class preferences.  Read/Write of floating
32 // point values fails on read if locale is not EN_...
33 //
34 //----------------------------------------------------------------------
35 #include <config.h>
36 
37 #include <iostream>
38 #include <fstream>
39 #include <string>
40 
41 #include <FL/Fl_Preferences.H>
42 
43 #include "gettext.h"
44 #include "main.h"
45 #include "globals.h"
46 
47 #include "status.h"
48 #include "configuration.h"
49 #include "confdialog.h"
50 #include "fl_digi.h"
51 #include "debug.h"
52 
53 #include "waterfall.h"
54 
55 #include "modem.h"
56 #include "psk.h"
57 #include "cw.h"
58 #include "mfsk.h"
59 #include "rtty.h"
60 #include "olivia.h"
61 #include "dominoex.h"
62 #include "feld.h"
63 #include "throb.h"
64 #include "wwv.h"
65 #include "analysis.h"
66 
67 #include "rigsupport.h"
68 
69 #include "Viewer.h"
70 
71 #include "lgbook.h"
72 #include "logsupport.h"
73 #include "qso_db.h"
74 #include "dx_dialog.h"
75 #include "contest.h"
76 
77 #include "misc.h"
78 #include "data_io.h"
79 #include "psm/psm.h"
80 
81 #include "spectrum_viewer.h"
82 
83 #define STATUS_FILENAME "status"
84 
85 status progStatus = {
86 	MODE_PSK31,			// trx_mode	lastmode;
87 	mode_info[MODE_PSK31].sname,	// lastmode_name
88 	50,					// int mainX;
89 	50,					// int mainY;
90 	WMIN, 				// int mainW;
91 	HMIN, 				// int mainH;
92 	false,				// bool WF_UI;
93 	false,				// bool NO_RIGLOG;
94 	false,				// bool Rig_Log_UI;
95 	false,				// bool Rig_Contest_UI;
96 	false,				// bool DOCKEDSCOPE;
97 	false,				// bool tbar_is_docked;
98 //	50,					// int RxTextHeight;
99 	WMIN/2,				// int tiled_group_x;
100 	false,				// bool show_channels;
101 	50,					// int rigX;
102 	50,					// int rigY;
103 	560,				// int rigW
104 	80,					// int rigH
105 	1000,				// int carrier;
106 	14070000,			// int noCATfreq;
107 	"USB",				// string noCATmode;
108 	"3000",				// string noCATwidth;
109 	1,					// int mag;
110 	0,					// int offset;
111 	NORMAL,				// WFdisp::WFspeed
112 	-20,				// reflevel
113 	-2000,				// int_reflevel
114 	70,					// ampspan
115 	7000,				// int_ampspan
116 	30,					// uint	VIEWERnchars
117 	50,					// uint	VIEWERxpos
118 	50,					// uint	VIEWERypos
119 	200,				// uint VIEWERwidth
120 	400,				// uint VIEDWERheight
121 	3.0,				// double VIEWER_psksquelch
122 	300,				// int int_VIEWER_psksquelch
123 	-6.0,				// double VIEWER_rttysquelch
124 	-600,				// int int_VIEWER_rttysquelch
125 	3.0,				// double VIEWER_cwsquelch
126 	300,				// int int_VIEWER_cwsquelch
127 	false,				// bool VIEWERvisible
128 	50,					// unsigned int	fsqMONITORxpos;
129 	50,					// unsigned int	fsqMONITORypos;
130 	600,				// unsigned int	fsqMONITORwidth;
131 	400,				// unsigned int	fsqMONITORheight;
132 	100,				// int		tile_x
133 	200,				// int		tile_w;
134 	90,					// int		tile_y;
135 	150,				// int		tile_h;
136 	0.5,				// double	tile_y_ratio;
137 	0.5,				// double	fsq_ratio;
138 	0.5,				// double	ifkp_ratio;
139 	500,				// int		int_tile_y_ratio;
140 	500,				// int		int_fsq_ratio;
141 	500,				// int		int_ifkp_ratio;
142 	false,				// bool LOGenabled
143 	5.0,				// double sldrSquelchValue
144 	500,				// int		int_sldrSquelchValue
145 	5.0,				// double sldrPwrSquelchValue
146 	500,				// int		int_sldrPwrSquelchValue
147 	true,				// bool afconoff
148 	true,				// bool sqlonoff
149 	50,					// int	scopeX;
150 	50,					// int	scopeY;
151 	false,				// bool	scopeVisible;
152 	172,				// int	scopeW;
153 	172,				// int	scopeH;
154 
155 	10,					// int svX;
156 	10,					// int svY;
157 	550,				// int svW;
158 	400,				// int svH;
159 	false,				// bool	x_graticule;
160 	false,				// bool	y_graticule;
161 	true,				// bool	xy_graticule;
162 
163 	-1,					// int	repeatMacro;
164 	0,					// float	repeatIdleTime;
165 	0,					// int timer
166 	0,					// int timerMacro
167 	false,				// bool skip_sked_macro
168 	"macros.mdf",		// string LastMacroFile;
169 	0,					// int n_rsids
170 	false,				// bool spot_recv
171 	false,				// bool spot_log
172 	false,				// bool contest
173 
174 	false,				// bool quick_entry
175 	true,				// bool rx_scroll_hints;
176 	true,				// bool rx_word_wrap
177 	true,				// bool tx_word_wrap
178 	false,				// bool cluster_connected; // not saved
179 
180 	50,					// int logbook_x;
181 	50,					// int logbook_y;
182 	590,				// int logbook_w;
183 	490,				// int logbook_h;
184 	false,				// bool logbook_reverse;
185 	85,					// int		logbook_browser_col_0;
186 	47,					// int		logbook_browser_col_1;
187 	100,				// int		logbook_browser_col_2;
188 	110,				// int		logbook_browser_col_3;
189 	120,				// int		logbook_browser_col_4;
190 	103,				// int		logbook_browser_col_5;
191 
192 	50,					// int dxdialog_x;
193 	50,					// int dxdialog_y;
194 	625,				// int dxdialog_w;
195 	395,				// int dxdialog_h;
196 
197 	progdefaults.contestiatones,
198 	progdefaults.contestiabw,
199 	progdefaults.contestiasmargin,
200 	progdefaults.contestiasinteg,
201 	progdefaults.contestia8bit,
202 
203 	progdefaults.oliviatones,
204 	progdefaults.oliviabw,
205 	progdefaults.oliviasmargin,
206 	progdefaults.oliviasinteg,
207 	progdefaults.olivia8bit,
208 
209 	progdefaults.rtty_shift,
210 	progdefaults.rtty_custom_shift,
211 	progdefaults.rtty_baud,
212 	progdefaults.rtty_bits,
213 	progdefaults.rtty_parity,
214 	progdefaults.rtty_stop,
215 	progdefaults.rtty_reverse,
216 	progdefaults.rtty_crcrlf,
217 	progdefaults.rtty_autocrlf,
218 	progdefaults.rtty_autocount,
219 	progdefaults.rtty_afcspeed,
220 	false, // bool rtty_filter_changed
221 	progdefaults.PreferXhairScope,
222 	true,						// bool shaped_rtty
223 	progdefaults.UOSrx,
224 	progdefaults.UOStx,
225     DEFAULT_XMLPRC_IP_ADDRESS,
226     DEFAULT_XMLRPC_IP_PORT,
227     DEFAULT_ARQ_IP_ADDRESS,
228     DEFAULT_ARQ_IP_PORT,
229     DEFAULT_KISS_IP_ADDRESS,
230     DEFAULT_KISS_IP_IO_PORT,
231     DEFAULT_KISS_IP_OUT_PORT,
232 	progdefaults.kiss_dual_port_enabled,
233 	progdefaults.data_io_enabled,
234 	progdefaults.ax25_decode_enabled,
235 	progdefaults.enableBusyChannel,
236 	progdefaults.busyChannelSeconds,
237 	progdefaults.kpsql_attenuation,
238 	progdefaults.csma_enabled,
239 	progdefaults.kiss_tcp_io,
240 	progdefaults.kiss_tcp_listen,
241     progdefaults.kpsql_enabled,
242     progdefaults.csma_persistance,
243     progdefaults.csma_slot_time,
244     progdefaults.csma_transmit_delay,
245     progdefaults.psm_flush_buffer_timeout,
246     progdefaults.psm_minimum_bandwidth,
247     progdefaults.psm_minimum_bandwidth_margin,
248     progdefaults.psm_use_histogram,
249     progdefaults.psm_histogram_offset_threshold,
250     progdefaults.psm_hit_time_window,
251     progdefaults.tx_buffer_timeout,
252     progdefaults.kiss_io_modem_change_inhibit,
253 	true,
254 	0.0,
255 	0,
256 	progdefaults.psk8DCDShortFlag,
257 
258 	"CQ",				// string browser_search;
259 
260 	false,				// meters
261 
262 	false,				// fsq_rx_abort
263 	false,				// ifkp_rx_abort
264 
265 //----------------------------------------------------------------------
266 // winkeyer status values
267 //----------------------------------------------------------------------
268 
269 	"NONE",			// string WK_serial_port_name;
270 	1200,			// int WK_comm_baudrate;
271 	2,				// int WK_stopbits;
272 	2,				// int WK_comm_retries;
273 	5,				// int WK_comm_wait;
274 	50,				// int WK_comm_timeout;
275 	false,			// bool WK_comm_echo;
276 
277 // wkeyer defaults
278 	0xC4,			// unsigned char WK_mode_register;
279 	18,				// unsigned char WK_speed_wpm;
280 	6,				// unsigned char WK_sidetone;
281 	50,				// unsigned char WK_weight;
282 	0,				// unsigned char WK_lead_in_time;
283 	0,				// unsigned char WK_tail_time;
284 	10,				// unsigned char WK_min_wpm;
285 	25,				// unsigned char WK_max_wpm;
286 	0,				// unsigned char WK_first_extension;
287 	0,				// unsigned char WK_key_compensation;
288 	0,				// unsigned char WK_farnsworth_wpm;
289 	50,				// unsigned char WK_paddle_setpoint;
290 	50,				// unsigned char WK_dit_dah_ratio;
291 	7,				// unsigned char WK_pin_configuration;
292 	255,			// unsigned char WK_dont_care;
293 
294 	false,			// bool WK_cut_zeronine;
295 	18,				// unsigned char WK_cmd_wpm;
296 	false,			// bool WK_use_pot
297 	false,			// bool WK_online;
298 	2,				// int WK_version;
299 
300 	0,				// int		WKFSK_mode;
301 	0,				// int		WKFSK_baud;
302 	0,				// int		WKFSK_stopbits;
303 	0,				// int		WKFSK_ptt;
304 	0,				// int		WKFSK_polarity;
305 	0,				// int		WKFSK_sidetone;
306 	0,				// int		WKFSK_auto_crlf;
307 	0,				// int		WKFSK_diddle;
308 	0,				// int		WKFSK_diddle_char;
309 	0,				// int		WKFSK_usos;
310 	1,				// int		WKFSK_monitor;
311 
312 	false,			// 	bool	Nav_online;
313 	false,			//	bool	Nav_config_online;
314 
315 	false,			// 	bool	nanoCW_online;
316 	false,			// 	bool	nanoFSK_online;
317 
318 	false,			// 	bool	useCW_KEYLINE;
319 
320 //----------------------------------------------------------------------
321 // FMT saved controls
322 	1500.0,			// double	FMT_ref_freq;
323 	1500000,		// int		int_FMT_ref_freq;
324 	1500.0,			// double	FMT_unk_fre;
325 	1500000,		// int		int_FMT_unk_fre;
326 	1,				// int		FMT_trk_speed;
327 	1,				// int		FMT_trk_scale;
328 	2,				// int		FMT_rec_interval
329 //----------------------------------------------------------------------
330 	046,			//	debug_mask
331 
332 //  046
333 // 0000000000010110
334 //   ||||||||||||||_ARQ control
335 //   |||||||||||||__Audio
336 //   ||||||||||||___Modem
337 //   |||||||||||____Rig Control
338 //   ||||||||||_____Xmlrpc
339 //   |||||||||______Spotter
340 //   ||||||||_______Data Sources
341 //   |||||||________Synop
342 //   ||||||_________KML
343 //   |||||__________KISS control
344 //   ||||___________Mac Logger
345 //   |||____________Field Day Logger
346 //   ||_____________N3FJP Logger
347 //   |______________Other
348 	3,				// debug_level : INFO(3)
349 //----------------------------------------------------------------------
350     1,				// int vumeter_shown
351 //----------------------------------------------------------------------
352 	false				// bool bLastStateRead;
353 };
354 
saveLastState()355 void status::saveLastState()
356 {
357     int mX = fl_digi_main->x();
358     int mY = fl_digi_main->y();
359     if (mX >= 0 && mX >= 0) {
360     	mainX = mX;
361 	    mainY = mY;
362     }
363 	mainW = fl_digi_main->w();
364 	mainH = fl_digi_main->h();
365 
366 	carrier = wf->Carrier();
367 	mag = wf->Mag();
368 	offset = wf->Offset();
369 	speed = wf->Speed();
370 	reflevel = progdefaults.wfRefLevel;
371 	ampspan = progdefaults.wfAmpSpan;
372 
373 	logbook_x = dlgLogbook->x();
374 	logbook_y = dlgLogbook->y();
375 	logbook_w = dlgLogbook->w();
376 	logbook_h = dlgLogbook->h();
377 	logbook_reverse = cQsoDb::reverse;
378 	logbook_col_0 = wBrowser->columnWidth(0);
379 	logbook_col_1 = wBrowser->columnWidth(1);
380 	logbook_col_2 = wBrowser->columnWidth(2);
381 	logbook_col_3 = wBrowser->columnWidth(3);
382 	logbook_col_4 = wBrowser->columnWidth(4);
383 	logbook_col_5 = wBrowser->columnWidth(5);
384 
385 	dxdialog_x = dxcluster_viewer->x();
386 	dxdialog_y = dxcluster_viewer->y();
387 	dxdialog_w = dxcluster_viewer->w();
388 	dxdialog_h = dxcluster_viewer->h();
389 
390 	if (!bWF_only) {
391 //		RxTextHeight = (ReceiveText->h() * 100) / text_panel->h();//VTgroup->h();
392 		quick_entry = ReceiveText->get_quick_entry();
393 		rx_scroll_hints = ReceiveText->get_scroll_hints();
394 		rx_word_wrap = ReceiveText->get_word_wrap();
395 		tx_word_wrap = TransmitText->get_word_wrap();
396 
397 		tile_w = text_panel->w();
398 		tile_y = progdefaults.rxtx_swap ? TransmitText->h() : ReceiveText->h();
399 		tile_h = text_panel->h();
400 		tile_y_ratio = 1.0 * tile_y / text_group->h();
401 		if (text_panel->w() != ReceiveText->w())
402 			tile_x = mvgroup->w();
403 		fsq_ratio = 1.0 * fsq_rx_text->h() / fsq_group->h();
404 		ifkp_ratio = 1.0 * ifkp_rx_text->h() / ifkp_group->h();
405 		int_tile_y_ratio = round(tile_y_ratio * 1000);
406 		int_fsq_ratio    = round(fsq_ratio * 1000);
407 		int_ifkp_ratio   = round (ifkp_ratio * 1000);
408 	}
409 
410 	VIEWERvisible = dlgViewer->visible();
411 	VIEWERnchars = brwsViewer->numchars();
412 	if (VIEWERvisible) {
413 		VIEWERxpos = dlgViewer->x();
414 		VIEWERypos = dlgViewer->y();
415 		VIEWERwidth = dlgViewer->w();
416 		VIEWERheight = dlgViewer->h();
417 	}
418 
419 	scopeVisible = scopeview->visible();
420 	scopeX = scopeview->x();
421 	scopeY = scopeview->y();
422 	scopeW = scopeview->w();
423 	scopeH = scopeview->h();
424 
425 	if (spectrum_viewer) {
426 		svX = spectrum_viewer->x();
427 		svY = spectrum_viewer->y();
428 		svW = spectrum_viewer->w();
429 		svH = spectrum_viewer->h();
430 	}
431 
432 	contestiatones = progdefaults.contestiatones;
433 	contestiabw = progdefaults.contestiabw;
434 	contestiamargin = progdefaults.contestiasmargin;
435 	contestiainteg = progdefaults.contestiasinteg;
436 	contestia8bit = progdefaults.contestia8bit;
437 
438 	oliviatones = progdefaults.oliviatones;
439 	oliviabw = progdefaults.oliviabw;
440 	oliviamargin = progdefaults.oliviasmargin;
441 	oliviainteg = progdefaults.oliviasinteg;
442 	olivia8bit = progdefaults.olivia8bit;
443 
444 	rtty_shift = progdefaults.rtty_shift;
445 	rtty_custom_shift = progdefaults.rtty_custom_shift;
446 	rtty_baud = progdefaults.rtty_baud;
447 	rtty_bits = progdefaults.rtty_bits;
448 	rtty_parity = progdefaults.rtty_parity;
449 	rtty_stop = progdefaults.rtty_stop;
450 	rtty_reverse = progdefaults.rtty_reverse;
451 	rtty_crcrlf = progdefaults.rtty_crcrlf;
452 	rtty_autocrlf = progdefaults.rtty_autocrlf;
453 	rtty_autocount = progdefaults.rtty_autocount;
454 	rtty_afcspeed = progdefaults.rtty_afcspeed;
455 	PreferXhairScope = progdefaults.PreferXhairScope;
456 	UOSrx = progdefaults.UOSrx;
457 	UOStx = progdefaults.UOStx;
458 
459 	xmlrpc_address         = progdefaults.xmlrpc_address;
460 	xmlrpc_port            = progdefaults.xmlrpc_port;
461 	arq_address            = progdefaults.arq_address;
462 	arq_port               = progdefaults.arq_port;
463 	kiss_address           = progdefaults.kiss_address;
464 	kiss_io_port           = progdefaults.kiss_io_port;
465 	kiss_out_port          = progdefaults.kiss_out_port;
466 	kiss_dual_port_enabled = progdefaults.kiss_dual_port_enabled;
467 	data_io_enabled        = progdefaults.data_io_enabled;
468 	ax25_decode_enabled    = progdefaults.ax25_decode_enabled;
469 	enableBusyChannel      = progdefaults.enableBusyChannel;
470 	busyChannelSeconds     = progdefaults.busyChannelSeconds;
471     kpsql_attenuation      = progdefaults.kpsql_attenuation;
472 	csma_enabled           = progdefaults.csma_enabled;
473 	kiss_tcp_io            = progdefaults.kiss_tcp_io;
474 	kiss_tcp_listen        = progdefaults.kiss_tcp_listen;
475     kpsql_enabled          = progdefaults.kpsql_enabled;
476     csma_persistance       = progdefaults.csma_persistance;
477     csma_slot_time         = progdefaults.csma_slot_time;
478     csma_transmit_delay    = progdefaults.csma_transmit_delay;
479 
480     psm_flush_buffer_timeout       = progdefaults.psm_flush_buffer_timeout;
481     psm_minimum_bandwidth          = progdefaults.psm_minimum_bandwidth;
482     psm_minimum_bandwidth_margin   = progdefaults.psm_minimum_bandwidth_margin;
483     psm_use_histogram              = progdefaults.psm_use_histogram;
484     psm_histogram_offset_threshold = progdefaults.psm_histogram_offset_threshold;
485     psm_hit_time_window            = progdefaults.psm_hit_time_window;
486     tx_buffer_timeout              = progdefaults.tx_buffer_timeout;
487     kiss_io_modem_change_inhibit = progdefaults.kiss_io_modem_change_inhibit;
488 	squelch_value = 0;
489 	int_squelch_value = 0;
490 
491 	Fl_Preferences spref(HomeDir.c_str(), "w1hkj.com", PACKAGE_TARNAME);
492 
493 	spref.set("version", PACKAGE_VERSION);
494 	spref.set("dual_channels", "YES");
495 
496 	spref.set("mode_name", mode_info[lastmode].sname);
497 	spref.set("squelch_enabled", sqlonoff);
498 
499 	spref.set("int_squelch_level", (int)round(sldrSquelchValue * 100));
500 	spref.set("int_pwr_squelch_level", (int)round(sldrPwrSquelchValue * 100));
501 	spref.set("afc_enabled", afconoff);
502 
503 	spref.set("psk8DCDShortFlag", psk8DCDShortFlag);
504 
505 	spref.set("log_enabled", LOGenabled);
506 
507 	spref.set("wf_carrier", carrier);
508 	spref.set("wf_mag", mag);
509 	spref.set("wf_offset", offset);
510 	spref.set("wf_speed", speed);
511 
512 	spref.set("int_wf_reflevel", (int)round(reflevel * 100));
513 	spref.set("int_wf_ampspan", (int)round(ampspan * 100));
514 
515 	spref.set("noCATfreq", noCATfreq);
516 	spref.set("noCATmode", noCATmode.c_str());
517 	spref.set("noCATwidth", noCATwidth.c_str());
518 
519 	spref.set("main_x", mainX);
520 	spref.set("main_y", mainY);
521 	spref.set("main_w", mainW);
522 
523 if (!bWF_only) {
524 	spref.set("main_h", mainH);
525 //	spref.set("rx_text_height", RxTextHeight);
526 	spref.set("tiled_group_x", tiled_group_x);
527 	spref.set("show_channels", show_channels);
528 }
529 
530 	spref.set("wf_ui", WF_UI);
531 	spref.set("riglog_ui", Rig_Log_UI);
532 	spref.set("rigcontest_ui", Rig_Contest_UI);
533 	spref.set("noriglog", NO_RIGLOG);
534 	spref.set("docked_scope", DOCKEDSCOPE);
535 	spref.set("tbar_is_docked", tbar_is_docked);
536 
537 	spref.set("rigctl_x", rigX);
538 	spref.set("rigctl_y", rigY);
539 	spref.set("rigctl_w", rigW);
540 	spref.set("rigctl_h", rigH);
541 
542 	spref.set("viewer_visible", VIEWERvisible);
543 	spref.set("viewer_x", static_cast<int>(VIEWERxpos));
544 	spref.set("viewer_y", static_cast<int>(VIEWERypos));
545 	spref.set("viewer_w", static_cast<int>(VIEWERwidth));
546 	spref.set("viewer_h", static_cast<int>(VIEWERheight));
547 
548 	spref.set("int_viewer_psksq", (int)round(VIEWER_psksquelch * 100));
549 	spref.set("int_viewer_rttysq", (int)round(VIEWER_rttysquelch * 100));
550 	spref.set("int_viewer_cwsq", (int)round(VIEWER_cwsquelch * 100));
551 
552 	spref.set("viewer_nchars", static_cast<int>(VIEWERnchars));
553 
554 	spref.set("fsq_monitor_x", static_cast<int>(fsqMONITORxpos));
555 	spref.set("fsq_monitor_y", static_cast<int>(fsqMONITORypos));
556 	spref.set("fsq_monitor_w", static_cast<int>(fsqMONITORwidth));
557 	spref.set("fsq_monitor_h", static_cast<int>(fsqMONITORheight));
558 
559 	spref.set("tile_x", tile_x);
560 	spref.set("tile_y", tile_y);
561 	spref.set("tile_w", tile_w);
562 	spref.set("tile_h", tile_h);
563 
564 	spref.set("int_tile_y_ratio", int_tile_y_ratio);
565 	spref.set("int_fsq_ratio", int_fsq_ratio);
566 	spref.set("int_ifkp_ratio", int_ifkp_ratio);
567 
568 	spref.set("scope_visible", scopeVisible);
569 	spref.set("scope_x", scopeX);
570 	spref.set("scope_y", scopeY);
571 	spref.set("scope_w", scopeW);
572 	spref.set("scope_h", scopeH);
573 
574 	spref.set("svX", svX);
575 	spref.set("svY", svY);
576 	spref.set("svW", svW);
577 	spref.set("svH", svH);
578 	spref.set("x_graticule", x_graticule);
579 	spref.set("y_graticule", y_graticule);
580 	spref.set("xy_graticule", xy_graticule);
581 
582 	spref.set("last_macro_file", LastMacroFile.c_str());
583 
584 	spref.set("spot_recv", spot_recv);
585 	spref.set("spot_log", spot_recv);
586 
587 	spref.set("contest", contest);
588 	spref.set("quick_entry", quick_entry);
589 	spref.set("rx_scroll_hints", rx_scroll_hints);
590 	spref.set("rx_word_wrap", rx_word_wrap);
591 	spref.set("tx_word_wrap", tx_word_wrap);
592 
593 	spref.set("logbook_x", logbook_x);
594 	spref.set("logbook_y", logbook_y);
595 	spref.set("logbook_w", logbook_w);
596 	spref.set("logbook_h", logbook_h);
597 	spref.set("logbook_reverse", logbook_reverse);
598 	spref.set("logbook_col_0", logbook_col_0);
599 	spref.set("logbook_col_1", logbook_col_1);
600 	spref.set("logbook_col_2", logbook_col_2);
601 	spref.set("logbook_col_3", logbook_col_3);
602 	spref.set("logbook_col_4", logbook_col_4);
603 	spref.set("logbook_col_5", logbook_col_5);
604 
605 	spref.set("dxdialog_x", dxdialog_x);
606 	spref.set("dxdialog_y", dxdialog_y);
607 	spref.set("dxdialog_w", dxdialog_w);
608 	spref.set("dxdialog_h", dxdialog_h);
609 
610 	spref.set("contestiatones", contestiatones);
611 	spref.set("contestiabw", contestiabw);
612 	spref.set("contestiamargin", contestiamargin);
613 	spref.set("contestiainteg", contestiainteg);
614 	spref.set("contestia8bit", contestia8bit);
615 
616 	spref.set("oliviaiatones", oliviatones);
617 	spref.set("oliviaiabw", oliviabw);
618 	spref.set("oliviaiamargin", oliviamargin);
619 	spref.set("oliviaiainteg", oliviainteg);
620 	spref.set("oliviaia8bit", olivia8bit);
621 
622 	spref.set("rtty_shift", rtty_shift);
623 	spref.set("rtty_custom_shift", rtty_custom_shift);
624 	spref.set("rtty_baud", rtty_baud);
625 	spref.set("rtty_bits", rtty_bits);
626 	spref.set("rtty_parity", rtty_parity);
627 	spref.set("rtty_stop", rtty_stop);
628 	spref.set("rtty_reverse", rtty_reverse);
629 	spref.set("rtty_crcrlf", rtty_crcrlf);
630 	spref.set("rtty_autocrlf", rtty_autocrlf);
631 	spref.set("rtty_autocount", rtty_autocount);
632 	spref.set("rtty_afcspeed", rtty_afcspeed);
633 	spref.set("preferxhairscope", PreferXhairScope);
634 	spref.set("shaped_rtty", shaped_rtty);
635 	spref.set("uosrx", UOSrx);
636 	spref.set("uostx", UOStx);
637 
638 	if(!xmlrpc_address_override_flag) {
639 		spref.set("xmlrpc_address", xmlrpc_address.c_str());
640 		spref.set("xmlrpc_port", xmlrpc_port.c_str());
641 	}
642 
643 	if(!arq_address_override_flag) {
644 		spref.set("arq_address", arq_address.c_str());
645 		spref.set("arq_port", arq_port.c_str());
646 	}
647 
648 	if(!kiss_address_override_flag) {
649 		spref.set("kiss_address", kiss_address.c_str());
650 		spref.set("kiss_io_port", kiss_io_port.c_str());
651 		spref.set("kiss_out_port", kiss_out_port.c_str());
652 		spref.set("kiss_dual_port_enabled", kiss_dual_port_enabled);
653 	}
654 
655 	if(!override_data_io_enabled)
656 		spref.set("data_io_enabled", data_io_enabled);
657 
658 	spref.set("ax25_decode_enabled", ax25_decode_enabled);
659 	spref.set("enableBusyChannel", enableBusyChannel);
660 	spref.set("busyChannelSeconds", busyChannelSeconds);
661 	spref.set("kpsql_attenuation", kpsql_attenuation);
662 	spref.set("csma_enabled", csma_enabled);
663 	spref.set("kiss_tcp_io",         kiss_tcp_io);
664 	spref.set("kiss_tcp_listen",     kiss_tcp_listen);
665     spref.set("kpsql_enabled",       kpsql_enabled);
666     spref.set("csma_persistance", csma_persistance);
667     spref.set("csma_slot_time", csma_slot_time);
668     spref.set("csma_transmit_delay", csma_transmit_delay);
669 
670     spref.set("psm_flush_buffer_timeout",       psm_flush_buffer_timeout);
671     spref.set("psm_minimum_bandwidth",          psm_minimum_bandwidth);
672     spref.set("psm_minimum_bandwidth_margin",   psm_minimum_bandwidth_margin);
673     spref.set("psm_use_histogram",              psm_use_histogram);
674     spref.set("psm_histogram_offset_threshold", psm_histogram_offset_threshold);
675     spref.set("psm_hit_time_window",            psm_hit_time_window);
676     spref.set("tx_buffer_timeout",              tx_buffer_timeout);
677     spref.set("kiss_io_modem_change_inhibit", kiss_io_modem_change_inhibit);
678 
679 	spref.set("browser_search", browser_search.c_str());
680 
681 	spref.set("meters", meters);
682 
683 //----------------------------------------------------------------------
684 // WinKeyer prefs set
685 
686 	spref.set("WK_serial_port_name", WK_serial_port_name.c_str());
687 
688 	spref.set("WK_mode_register", WK_mode_register);
689 	spref.set("WK_speed_wpm", WK_speed_wpm);
690 	spref.set("WK_cut_zeronine", WK_cut_zeronine);
691 	spref.set("WK_cmd_wpm", WK_cmd_wpm);
692 	spref.set("WK_sidetone", WK_sidetone);
693 	spref.set("WK_weight", WK_weight);
694 	spref.set("WK_lead_in_time", WK_lead_in_time);
695 	spref.set("WK_tail_time", WK_tail_time);
696 	spref.set("WK_min_wpm", WK_min_wpm);
697 	spref.set("WK_rng_wpm", WK_rng_wpm);
698 	spref.set("WK_1st_ext", WK_first_extension);
699 	spref.set("WK_key_comp", WK_key_compensation);
700 	spref.set("WK_farnsworth", WK_farnsworth_wpm);
701 	spref.set("WK_paddle_set", WK_paddle_setpoint);
702 	spref.set("WK_dit_dah_ratio", WK_dit_dah_ratio);
703 	spref.set("WK_pin_config", WK_pin_configuration);
704 	spref.set("WK_use_pot", WK_use_pot);
705 
706 	spref.set("WK_online", WK_online);
707 	spref.set("WK_version", WK_version);
708 
709 	spref.set("WKFSK_mode", WKFSK_mode);
710 	spref.set("WKFSK_baud", WKFSK_baud);
711 	spref.set("WKFSK_stopbits", WKFSK_stopbits);
712 	spref.set("WKFSK_ptt", WKFSK_ptt);
713 	spref.set("WKFSK_polarity", WKFSK_polarity);
714 	spref.set("WKFSK_sidetone", WKFSK_sidetone);
715 	spref.set("WKFSK_auto_crlf", WKFSK_auto_crlf);
716 	spref.set("WKFSK_diddle", WKFSK_diddle);
717 	spref.set("WKFSK_diddle_char", WKFSK_diddle_char);
718 	spref.set("WKFSK_usos", WKFSK_usos);
719 	spref.set("WKFSK_monitor", WKFSK_monitor);
720 
721 	spref.set("Nav_online", Nav_online);
722 	spref.set("Nav_config_online", Nav_config_online);
723 
724 	spref.set("nanoCW_online", nanoCW_online);
725 	spref.set("nanoFSK_online", nanoFSK_online);
726 
727 	spref.set("useCW_KEYLINE", useCW_KEYLINE);
728 
729 //----------------------------------------------------------------------
730 // FMT saved controls
731 	spref.set("int_FMT_ref_freq", (int)round(FMT_ref_freq * 1000));
732 	spref.set("int_FMT_unk_freq", (int)round(FMT_unk_freq * 1000));
733 
734 	spref.set("FMT_rec_interval", FMT_rec_interval);
735 	spref.set("FMT_trk_scale", FMT_trk_scale);
736 	spref.set("FMT_minutes", FMT_minutes);
737 //----------------------------------------------------------------------
738 
739 	debug_mask = debug::mask;
740 	spref.set("debug_mask", debug_mask);
741 
742 	debug_level = debug::level;
743 	spref.set("debug_level", debug_level);
744 //----------------------------------------------------------------------
745 	spref.set("vumeter_shown", vumeter_shown);
746 }
747 
loadLastState()748 void status::loadLastState()
749 {
750 	Fl_Preferences spref(HomeDir.c_str(), "w1hkj.com", PACKAGE_TARNAME);
751 
752 	int i;
753 	char strbuff[1000];
754 	char version[64]; version[sizeof(version)-1] = '\0';
755 
756 	// Skip loading the rest of the status variables if we didn't read a
757 	// version name/value pair; or this is not a file that supports dual
758 	// channel browsers.
759 	bLastStateRead = spref.get("version", version, "", sizeof(version)-1);
760 	if (!bLastStateRead)
761 		return;
762 	bLastStateRead = spref.get("dual_channels", version, "", sizeof(version) - 1);
763 	if (!bLastStateRead)
764 		return;
765 
766 	memset(strbuff, 0, sizeof(strbuff));
767 	spref.get("mode_name", strbuff, mode_info[MODE_PSK31].sname, sizeof(strbuff) - 1);
768 	mode_name = strbuff;
769 	lastmode = MODE_PSK31;
770 	for (i = 0; i < NUM_MODES;i++) {
771 		if (mode_name == mode_info[i].sname) {
772 			lastmode = (trx_mode) i;
773 			break;
774 		}
775 	}
776 
777 	spref.get("squelch_enabled", i, sqlonoff); sqlonoff = i;
778 	spref.get("int_squelch_level", i, int_sldrSquelchValue); int_sldrSquelchValue = i;
779 	sldrSquelchValue = int_sldrSquelchValue / 100.0;
780 	spref.get("int_pwr_squelch_level", i, int_sldrPwrSquelchValue); int_sldrPwrSquelchValue = i;
781 	sldrPwrSquelchValue = int_sldrPwrSquelchValue / 100.0;
782 
783 	spref.get("afc_enabled", i, afconoff); afconoff = i;
784 
785 //	spref.get("rx_text_height", RxTextHeight, RxTextHeight);
786 	spref.get("tiled_group_x", tiled_group_x, tiled_group_x);
787 	spref.get("show_channels", i, show_channels); show_channels = i;
788 
789 	spref.get("log_enabled", i, LOGenabled); LOGenabled = i;
790 
791 	spref.get("wf_carrier", carrier, carrier);
792 	spref.get("wf_mag", mag, mag);
793 	spref.get("wf_offset", offset, offset);
794 	spref.get("wf_speed", speed, speed);
795 
796 	spref.get("int_wf_reflevel", int_reflevel, int_reflevel);
797 	reflevel = int_reflevel / 100.0;
798 	progdefaults.wfRefLevel = reflevel;
799 	spref.get("int_wf_ampspan", int_ampspan, int_ampspan);
800 	ampspan = int_ampspan / 100.0;
801 	progdefaults.wfAmpSpan = ampspan;
802 
803 	spref.get("noCATfreq", noCATfreq, noCATfreq);
804 
805 	memset(strbuff, 0, sizeof(strbuff));
806 	spref.get("noCATmode", strbuff, "USB", sizeof(strbuff) - 1);
807 	noCATmode = strbuff;
808 
809 	memset(strbuff, 0, sizeof(strbuff));
810 	spref.get("noCATwidth", strbuff, "3000", sizeof(strbuff) - 1);
811 	noCATwidth = strbuff;
812 
813 	spref.get("main_x", mainX, mainX);
814 	if (mainX > Fl::w())
815 		mainX = 0;
816 
817 	spref.get("main_y", mainY, mainY);
818 	if (mainY > Fl::h())
819 		mainY = 0;
820 
821 	spref.get("main_w", mainW, mainW);
822 	if (mainW < WMIN) mainW = WMIN;
823 	if (mainW > Fl::w()) mainW = Fl::w();
824 
825 	spref.get("main_h", mainH, mainH);
826 //	if (mainH < HMIN) mainH = HMIN;
827 	if (mainH > Fl::w()) mainH = Fl::h();
828 
829 	spref.get("wf_ui", i, WF_UI); WF_UI = i;
830 	spref.get("riglog_ui", i, Rig_Log_UI); Rig_Log_UI = i;
831 	spref.get("rigcontest_ui", i, Rig_Contest_UI); Rig_Contest_UI = i;
832 	spref.get("noriglog", i, NO_RIGLOG); NO_RIGLOG = i;
833 	spref.get("docked_scope", i, DOCKEDSCOPE); DOCKEDSCOPE = i;
834 	spref.get("tbar_is_docked", i, tbar_is_docked); tbar_is_docked = i;
835 
836 	spref.get("rigctl_x", rigX, rigX);
837 	spref.get("rigctl_y", rigY, rigY);
838 	spref.get("rigctl_w", rigW, rigW);
839 	spref.get("rigctl_h", rigH, rigH);
840 
841 	spref.get("viewer_visible", i, VIEWERvisible); VIEWERvisible = i;
842 	spref.get("viewer_x", i, VIEWERxpos); VIEWERxpos = i;
843 	spref.get("viewer_y", i, VIEWERypos); VIEWERypos = i;
844 	spref.get("viewer_w", i, VIEWERwidth); VIEWERwidth = i;
845 	spref.get("viewer_h", i, VIEWERheight); VIEWERheight = i;
846 
847 	spref.get("int_viewer_psksq", int_VIEWER_psksquelch, int_VIEWER_psksquelch);
848 	VIEWER_psksquelch = int_VIEWER_psksquelch / 100.0;
849 	spref.get("int_viewer_rttysq", int_VIEWER_rttysquelch, int_VIEWER_rttysquelch);
850 	VIEWER_rttysquelch = int_VIEWER_rttysquelch / 100.0;
851 	spref.get("int_viewer_cwsq", int_VIEWER_cwsquelch, int_VIEWER_cwsquelch);
852 	VIEWER_cwsquelch = int_VIEWER_cwsquelch / 100.0;
853 
854 	spref.get("viewer_nchars", i, VIEWERnchars); VIEWERnchars = i;
855 
856 	spref.get("fsq_monitor_x", i, fsqMONITORxpos); fsqMONITORxpos = i;
857 	spref.get("fsq_monitor_y", i, fsqMONITORypos); fsqMONITORypos = i;
858 	spref.get("fsq_monitor_w", i, fsqMONITORwidth); fsqMONITORwidth = i;
859 	spref.get("fsq_monitor_h", i, fsqMONITORheight); fsqMONITORheight = i;
860 
861 	spref.get("tile_x", tile_x, tile_x);
862 	spref.get("tile_y", tile_y, tile_y);
863 	spref.get("tile_w", tile_w, tile_w);
864 	spref.get("tile_h", tile_h, tile_h);
865 
866 	spref.get("int_tile_y_ratio", int_tile_y_ratio, int_tile_y_ratio);
867 	spref.get("int_fsq_ratio",    int_fsq_ratio, int_fsq_ratio);
868 	spref.get("int_ifkp_ratio",   int_ifkp_ratio, int_ifkp_ratio);
869 
870 	tile_y_ratio = int_tile_y_ratio / 1000.0;
871 	fsq_ratio    = int_fsq_ratio / 1000.0;
872 	ifkp_ratio   = int_ifkp_ratio / 1000.0;
873 
874 	spref.get("scope_visible", i, scopeVisible); scopeVisible = i;
875 	spref.get("scope_x", scopeX, scopeX);
876 	spref.get("scope_y", scopeY, scopeY);
877 	spref.get("scope_w", scopeW, scopeW);
878 	spref.get("scope_h", scopeH, scopeH);
879 
880 	spref.get("svX", svX, svX);
881 	spref.get("svY", svY, svY);
882 	spref.get("svW", svW, svW);
883 	spref.get("svH", svH, svH);
884 	spref.get("x_graticule", i, x_graticule); x_graticule = i;
885 	spref.get("y_graticule", i, y_graticule); y_graticule = i;
886 	spref.get("xy_graticule",i, xy_graticule); xy_graticule = i;
887 
888 	memset(strbuff, 0, sizeof(strbuff));
889 	spref.get("last_macro_file", strbuff, "macros.mdf", sizeof(strbuff) - 1);
890 	LastMacroFile = strbuff;
891 
892 	spref.get("spot_recv", i, spot_recv); spot_recv = i;
893 	spref.get("spot_log", i, spot_log); spot_log = i;
894 
895 	spref.get("contest", i, contest); contest = i;
896 	spref.get("quick_entry", i, quick_entry); quick_entry = i;
897 	spref.get("rx_scroll_hints", i, rx_scroll_hints); rx_scroll_hints = i;
898 	spref.get("rx_word_wrap", i, rx_word_wrap); rx_word_wrap = i;
899 	spref.get("tx_word_wrap", i, tx_word_wrap); tx_word_wrap = i;
900 
901 	spref.get("logbook_x", logbook_x, logbook_x);
902 	spref.get("logbook_y", logbook_y, logbook_y);
903 	spref.get("logbook_w", logbook_w, logbook_w);
904 	spref.get("logbook_h", logbook_h, logbook_h);
905 	spref.get("logbook_reverse", i, logbook_reverse); logbook_reverse = i;
906 	spref.get("logbook_col_0", logbook_col_0, logbook_col_0);
907 	spref.get("logbook_col_1", logbook_col_1, logbook_col_1);
908 	spref.get("logbook_col_2", logbook_col_2, logbook_col_2);
909 	spref.get("logbook_col_3", logbook_col_3, logbook_col_3);
910 	spref.get("logbook_col_4", logbook_col_4, logbook_col_4);
911 	spref.get("logbook_col_5", logbook_col_5, logbook_col_5);
912 
913 	spref.get("dxdialog_x", dxdialog_x, dxdialog_x);
914 	spref.get("dxdialog_y", dxdialog_y, dxdialog_y);
915 	spref.get("dxdialog_w", dxdialog_w, dxdialog_w);
916 	spref.get("dxdialog_h", dxdialog_h, dxdialog_h);
917 
918 	spref.get("contestiatones", contestiatones, contestiatones);
919 	spref.get("contestiabw", contestiabw, contestiabw);
920 	spref.get("contestiamargin", contestiamargin, contestiamargin);
921 	spref.get("contestiainteg", contestiainteg, contestiainteg);
922 	spref.get("contestia8bit", i, contestia8bit); contestia8bit = i;
923 
924 	spref.get("oliviaiatones", oliviatones, oliviatones);
925 	spref.get("oliviaiabw", oliviabw, oliviabw);
926 	spref.get("oliviaiamargin", oliviamargin, oliviamargin);
927 	spref.get("oliviaiainteg", oliviainteg, oliviainteg);
928 	spref.get("oliviaia8bit", i, olivia8bit); olivia8bit = i;
929 
930 	spref.get("rtty_shift", rtty_shift, rtty_shift);
931 	spref.get("rtty_custom_shift", rtty_custom_shift, rtty_custom_shift);
932 	spref.get("rtty_baud", rtty_baud, rtty_baud);
933 	spref.get("rtty_bits", rtty_bits, rtty_bits);
934 	spref.get("rtty_parity", rtty_parity, rtty_parity);
935 	spref.get("rtty_stop", rtty_stop, rtty_stop);
936 	spref.get("rtty_reverse", i, rtty_reverse); rtty_reverse = i;
937 	spref.get("rtty_crcrlf", i, rtty_crcrlf); rtty_crcrlf = i;
938 	spref.get("rtty_autocrlf", i, rtty_autocrlf); rtty_autocrlf = i;
939 	spref.get("rtty_autocount", rtty_autocount, rtty_autocount);
940 	spref.get("rtty_afcspeed", rtty_afcspeed, rtty_afcspeed);
941 	spref.get("preferxhairscope", i, PreferXhairScope); PreferXhairScope = i;
942 	spref.get("shaped_rtty", i, shaped_rtty); shaped_rtty = i;
943 	spref.get("uosrx", i, UOSrx); UOSrx = i;
944 	spref.get("uostx", i, UOStx); UOStx = i;
945 
946 	if(!xmlrpc_address_override_flag) {
947 		memset(strbuff, 0, sizeof(strbuff));
948 		spref.get("xmlrpc_address", strbuff, xmlrpc_address.c_str(), sizeof(strbuff) - 1);
949 		xmlrpc_address = strbuff;
950 	}
951 	if (!xmlrpc_port_override_flag) {
952 		memset(strbuff, 0, sizeof(strbuff));
953 		spref.get("xmlrpc_port", strbuff, xmlrpc_port.c_str(), sizeof(strbuff) - 1);
954 		xmlrpc_port = strbuff;
955 	}
956 
957 	if(!arq_address_override_flag) {
958 		memset(strbuff, 0, sizeof(strbuff));
959 		spref.get("arq_address", strbuff, arq_address.c_str(), sizeof(strbuff) - 1);
960 		arq_address = strbuff;
961 	}
962 	if(!arq_port_override_flag) {
963 		memset(strbuff, 0, sizeof(strbuff));
964 		spref.get("arq_port", strbuff, arq_port.c_str(), sizeof(strbuff) - 1);
965 		arq_port = strbuff;
966 	}
967 
968 	if(!kiss_address_override_flag) {
969 		memset(strbuff, 0, sizeof(strbuff));
970 		spref.get("kiss_address", strbuff, kiss_address.c_str(), sizeof(strbuff) - 1);
971 		kiss_address = strbuff;
972 
973 
974 		memset(strbuff, 0, sizeof(strbuff));
975 		spref.get("kiss_io_port", strbuff, kiss_io_port.c_str(), sizeof(strbuff) - 1);
976 		kiss_io_port = strbuff;
977 
978 		memset(strbuff, 0, sizeof(strbuff));
979 		spref.get("kiss_out_port", strbuff, kiss_out_port.c_str(), sizeof(strbuff) - 1);
980 		kiss_out_port = strbuff;
981 
982 		spref.get("kiss_dual_port_enabled", i, kiss_dual_port_enabled); kiss_dual_port_enabled     = i;
983 	}
984 
985 	if(!override_data_io_enabled) {
986 		spref.get("data_io_enabled", i, data_io_enabled); data_io_enabled = i;
987 	}
988 
989 	spref.get("ax25_decode_enabled",    i, ax25_decode_enabled);    ax25_decode_enabled = i;
990 	spref.get("enableBusyChannel",      i, enableBusyChannel);      enableBusyChannel   = i;
991 	spref.get("busyChannelSeconds",     i, busyChannelSeconds);     busyChannelSeconds  = i;
992 	spref.get("kpsql_attenuation",      i, kpsql_attenuation);      kpsql_attenuation   = i;
993 	spref.get("csma_enabled",           i, csma_enabled);           csma_enabled        = i;
994 	spref.get("kiss_tcp_io",            i, kiss_tcp_io);            kiss_tcp_io         = i;
995 	spref.get("kiss_tcp_listen",        i, kiss_tcp_listen);        kiss_tcp_listen     = i;
996     spref.get("kpsql_enabled",          i, kpsql_enabled);          kpsql_enabled       = i;
997 
998     spref.get("csma_persistance",      i, csma_persistance);    csma_persistance    = i;
999     spref.get("csma_slot_time",        i, csma_slot_time);      csma_slot_time      = i;
1000     spref.get("csma_transmit_delay",   i, csma_transmit_delay); csma_transmit_delay = i;
1001 
1002     spref.get("psm_flush_buffer_timeout",       i, psm_flush_buffer_timeout);       psm_flush_buffer_timeout       = i;
1003     spref.get("psm_minimum_bandwidth",          i, psm_minimum_bandwidth);          psm_minimum_bandwidth          = i;
1004     spref.get("psm_minimum_bandwidth_margin",   i, psm_minimum_bandwidth_margin);   psm_minimum_bandwidth_margin   = i;
1005     spref.get("psm_use_histogram",              i, psm_use_histogram);              psm_use_histogram              = i;
1006     spref.get("psm_histogram_offset_threshold", i, psm_histogram_offset_threshold); psm_histogram_offset_threshold = i;
1007     spref.get("psm_hit_time_window",            i, psm_hit_time_window);            psm_hit_time_window = i;
1008 
1009     spref.get("tx_buffer_timeout", i, tx_buffer_timeout); tx_buffer_timeout = i;
1010 
1011     spref.get("kiss_io_modem_change_inhibit", i, kiss_io_modem_change_inhibit); kiss_io_modem_change_inhibit = i;
1012 
1013 	spref.get("psk8DCDShortFlag",       i, psk8DCDShortFlag);       psk8DCDShortFlag    = i;
1014 
1015 	memset(strbuff, 0, sizeof(strbuff));
1016 	spref.get("browser_search", strbuff, browser_search.c_str(), sizeof(strbuff) - 1);
1017 	browser_search = strbuff;
1018 	seek_re.recompile(browser_search.c_str());
1019 
1020 	spref.get("meters",  i, meters); meters = i;
1021 
1022 //----------------------------------------------------------------------
1023 // WinKeyer prefs get
1024 //----------------------------------------------------------------------
1025 
1026 		spref.get("WK_serial_port_name", strbuff, "NONE", 199);
1027 		WK_serial_port_name = strbuff;
1028 		if (WK_serial_port_name.find("tty") == 0)
1029 			WK_serial_port_name.insert(0, "/dev/");
1030 
1031 		spref.get("WK_mode_register", i, WK_mode_register); WK_mode_register = i;
1032 		spref.get("WK_speed_wpm", i, WK_speed_wpm); WK_speed_wpm = i;
1033 		spref.get("WK_cmd_wpm", i, WK_cmd_wpm); WK_cmd_wpm = i;
1034 		spref.get("WK_cut_zeronine", i, WK_cut_zeronine); WK_cut_zeronine = i;
1035 		spref.get("WK_sidetone", i, WK_sidetone); WK_sidetone = i;
1036 		spref.get("WK_weight", i, WK_weight); WK_weight = i;
1037 		spref.get("WK_lead_in_time", i, WK_lead_in_time); WK_lead_in_time = i;
1038 		spref.get("WK_tail_time", i, WK_tail_time); WK_tail_time = i;
1039 		spref.get("WK_min_wpm", i, WK_min_wpm); WK_min_wpm = i;
1040 		spref.get("WK_rng_wpm", i, WK_rng_wpm); WK_rng_wpm = i;
1041 		spref.get("WK_1st_ext", i, WK_first_extension); WK_first_extension = i;
1042 		spref.get("WK_key_comp", i, WK_key_compensation); WK_key_compensation = i;
1043 		spref.get("WK_farnsworth", i, WK_farnsworth_wpm); WK_farnsworth_wpm = i;
1044 		spref.get("WK_paddle_set", i, WK_paddle_setpoint); WK_paddle_setpoint = i;
1045 		spref.get("WK_dit_dah_ratio", i, WK_dit_dah_ratio); WK_dit_dah_ratio = i;
1046 		spref.get("WK_pin_config", i, WK_pin_configuration); WK_pin_configuration = i;
1047 		spref.get("WK_use_pot", i, WK_use_pot); WK_use_pot = i;
1048 
1049 		spref.get("WK_online", i, WK_online); WK_online = i;
1050 		spref.get("WK_version", WK_version, WK_version);
1051 
1052 		spref.get("WKFSK_mode", WKFSK_mode, WKFSK_mode);
1053 		spref.get("WKFSK_baud", WKFSK_baud, WKFSK_baud);
1054 		spref.get("WKFSK_stopbits", WKFSK_stopbits, WKFSK_stopbits);
1055 		spref.get("WKFSK_ptt", WKFSK_ptt, WKFSK_ptt);
1056 		spref.get("WKFSK_polarity", WKFSK_polarity, WKFSK_polarity);
1057 		spref.get("WKFSK_sidetone", WKFSK_sidetone, WKFSK_sidetone);
1058 		spref.get("WKFSK_auto_crlf", WKFSK_auto_crlf, WKFSK_auto_crlf);
1059 		spref.get("WKFSK_diddle", WKFSK_diddle, WKFSK_diddle);
1060 		spref.get("WKFSK_diddle_char", WKFSK_diddle_char, WKFSK_diddle_char);
1061 		spref.get("WKFSK_diddle_char", WKFSK_diddle_char, WKFSK_diddle_char);
1062 		spref.get("WKFSK_monitor", WKFSK_monitor, WKFSK_monitor);
1063 
1064 		spref.get("Nav_online", i, Nav_online); Nav_online = i;
1065 		spref.get("Nav_config_online", i, Nav_config_online); Nav_config_online = i;
1066 
1067 		spref.get("nanoCW_online", i, nanoCW_online); nanoCW_online = i;
1068 		spref.get("nanoFSK_online", i, nanoFSK_online); nanoFSK_online = i;
1069 
1070 		spref.get("useCW_KEYLINE", i, useCW_KEYLINE); useCW_KEYLINE = i;
1071 
1072 //----------------------------------------------------------------------
1073 // FMT saved controls
1074 		spref.get("int_FMT_ref_freq", int_FMT_ref_freq, int_FMT_ref_freq);
1075 		FMT_ref_freq = int_FMT_ref_freq / 1000.0;
1076 		spref.get("int_FMT_unk_freq", int_FMT_unk_freq, int_FMT_unk_freq);
1077 		FMT_unk_freq = int_FMT_unk_freq / 1000.0;
1078 
1079 		spref.get("FMT_rec_interval", FMT_rec_interval, FMT_rec_interval);
1080 		spref.get("FMT_trk_scale", FMT_trk_scale, FMT_trk_scale);
1081 		spref.get("FMT_minutes", FMT_minutes, FMT_minutes);
1082 //----------------------------------------------------------------------
1083 		spref.get("debug_level", debug_level, debug_level);
1084 		spref.get("debug_mask", debug_mask, debug_mask);
1085 //----------------------------------------------------------------------
1086 		spref.get("vumeter_shown", vumeter_shown, vumeter_shown);
1087 //----------------------------------------------------------------------
1088 
1089 		set_debug_mask(debug_mask);
1090 }
1091 
initLastState()1092 void status::initLastState()
1093 {
1094 	if (!bLastStateRead)
1095 		loadLastState();
1096 
1097 // RTTY
1098 	if (lastmode == MODE_RTTY ) {
1099 		progdefaults.rtty_shift = rtty_shift;
1100 		selShift->index(progdefaults.rtty_shift);
1101 		if (rtty_shift == selShift->lsize() - 1) {
1102 			selCustomShift->deactivate();
1103 		}
1104 		else { // Custom shift
1105 			selCustomShift->activate();
1106 		}
1107 		selBaud->index((progdefaults.rtty_baud = rtty_baud));
1108 		selBits->index((progdefaults.rtty_bits = rtty_bits));
1109 		selParity->index((progdefaults.rtty_parity = rtty_parity));
1110 		selStopBits->index((progdefaults.rtty_stop = rtty_stop));
1111 		btnCRCRLF->value(progdefaults.rtty_crcrlf = rtty_crcrlf);
1112 		btnAUTOCRLF->value(progdefaults.rtty_autocrlf = rtty_autocrlf);
1113 		cntrAUTOCRLF->value(progdefaults.rtty_autocount = rtty_autocount);
1114 		chkUOSrx->value(progdefaults.UOSrx = UOSrx);
1115 		chkUOStx->value(progdefaults.UOStx = UOStx);
1116 		i_listbox_rtty_afc_speed->index(progdefaults.rtty_afcspeed = rtty_afcspeed);
1117 		btnPreferXhairScope->value(progdefaults.PreferXhairScope = PreferXhairScope);
1118 
1119 		if (mvsquelch) {
1120 			mvsquelch->range(-12.0, 6.0);
1121 			mvsquelch->value(VIEWER_rttysquelch);
1122 		}
1123 		if (sldrViewerSquelch) {
1124 			sldrViewerSquelch->range(-12.0, 6.0);
1125 			sldrViewerSquelch->value(VIEWER_rttysquelch);
1126 		}
1127 	}
1128 
1129 	if (lastmode >= MODE_PSK_FIRST && lastmode <= MODE_PSK_LAST) {
1130 		if (mvsquelch) {
1131 			mvsquelch->range(-3.0, 6.0);
1132 			mvsquelch->value(VIEWER_psksquelch);
1133 		}
1134 		if (sldrViewerSquelch) {
1135 			sldrViewerSquelch->range(-3.0, 6.0);
1136 			sldrViewerSquelch->value(VIEWER_psksquelch);
1137 		}
1138 	}
1139 
1140 // OLIVIA
1141 	if (lastmode == MODE_OLIVIA) {
1142 		i_listbox_olivia_tones->index(progdefaults.oliviatones = oliviatones);
1143 		i_listbox_olivia_bandwidth->index(progdefaults.oliviabw = oliviabw);
1144 		cntOlivia_smargin->value(progdefaults.oliviasmargin = oliviamargin);
1145 		cntOlivia_sinteg->value(progdefaults.oliviasinteg = oliviainteg);
1146 		btnOlivia_8bit->value(progdefaults.olivia8bit = olivia8bit);
1147 	}
1148 
1149 // CONTESTIA
1150 	if (lastmode == MODE_CONTESTIA) {
1151 		i_listbox_contestia_tones->index(progdefaults.contestiatones = contestiatones);
1152 		i_listbox_contestia_bandwidth->index(progdefaults.contestiabw = contestiabw);
1153 		cntContestia_smargin->value(progdefaults.contestiasmargin = contestiamargin);
1154 		cntContestia_sinteg->value(progdefaults.contestiasinteg = contestiainteg);
1155 		btnContestia_8bit->value(progdefaults.contestia8bit = contestia8bit);
1156 	}
1157 
1158 	init_modem_sync(lastmode);
1159 
1160 	wf->opmode();
1161 	wf->Mag(mag);
1162 	wf->Offset(offset);
1163 	wf->Speed(speed);
1164 	wf->setRefLevel();
1165 	wf->setAmpSpan();
1166 
1167 	btnAFC->value(afconoff);
1168 
1169 	if(override_data_io_enabled != DISABLED_IO) {
1170 		data_io_enabled = override_data_io_enabled;
1171 		progdefaults.data_io_enabled = data_io_enabled;
1172 		data_io_enabled = data_io_enabled;
1173 	}
1174 
1175 	if(data_io_enabled == KISS_IO) {
1176 		data_io_enabled = KISS_IO;
1177 		progdefaults.data_io_enabled = KISS_IO;
1178 	} else {
1179 		data_io_enabled = ARQ_IO;
1180 		progdefaults.data_io_enabled = ARQ_IO;
1181 		data_io_enabled = ARQ_IO;
1182 		kpsql_enabled = false;
1183 	}
1184 
1185 	btnSQL->value(sqlonoff);
1186 	btnPSQL->value(kpsql_enabled);
1187 
1188 	if(kpsql_enabled)
1189 		sldrSquelch->value(sldrPwrSquelchValue);
1190 	else
1191 		sldrSquelch->value(sldrSquelchValue);
1192 
1193 	if (arq_address_override_flag)
1194 		arq_address = progdefaults.arq_address = override_arq_address;
1195 	if (arq_port_override_flag)
1196 		arq_port = progdefaults.arq_port = override_arq_port;
1197 
1198 	if(kiss_address_override_flag) {
1199 		if(!override_kiss_address.empty())
1200 			kiss_address = progdefaults.kiss_address = override_kiss_address;
1201 		if(!override_kiss_io_port.empty())
1202 			kiss_io_port = progdefaults.kiss_io_port = override_kiss_io_port;
1203 		if(!override_kiss_out_port.empty())
1204 			kiss_out_port = progdefaults.kiss_out_port = override_kiss_out_port;
1205 		if(override_kiss_dual_port_enabled > -1)
1206 			kiss_dual_port_enabled = progdefaults.kiss_dual_port_enabled = override_kiss_dual_port_enabled;
1207 	}
1208 
1209 	if (xmlrpc_address_override_flag)
1210 		xmlrpc_address = progdefaults.xmlrpc_address = override_xmlrpc_address;
1211 	if (xmlrpc_port_override_flag)
1212 		xmlrpc_port = progdefaults.xmlrpc_port = override_xmlrpc_port;
1213 
1214 	txtArq_ip_address->value(arq_address.c_str());
1215 	txtArq_ip_port_no->value(arq_port.c_str());
1216 
1217 	txtXmlrpc_ip_address->value(xmlrpc_address.c_str());
1218 	txtXmlrpc_ip_port_no->value(xmlrpc_port.c_str());
1219 
1220 	txtKiss_ip_address->value(kiss_address.c_str());
1221 	txtKiss_ip_io_port_no->value(kiss_io_port.c_str());
1222 	txtKiss_ip_out_port_no->value(kiss_out_port.c_str());
1223 
1224 	btnEnable_dual_port->value(kiss_dual_port_enabled);
1225 	progdefaults.kiss_dual_port_enabled = kiss_dual_port_enabled;
1226 
1227 	btnEnable_csma->value(csma_enabled);
1228 	progdefaults.csma_enabled = csma_enabled;
1229 
1230 	btnEnable_ax25_decode->value(ax25_decode_enabled);
1231 	progdefaults.ax25_decode_enabled = ax25_decode_enabled;
1232 
1233 	cntKPSQLAttenuation->value(kpsql_attenuation);
1234 	progdefaults.kpsql_attenuation = kpsql_attenuation;
1235 
1236 	kiss_io_set_button_state(0);
1237 
1238 	if (bWF_only)
1239 		fl_digi_main->resize(mainX, mainY, mainW, Hmenu + Hwfall + Hstatus);
1240 	else {
1241 		fl_digi_main->resize(mainX, mainY, mainW, mainH);
1242 
1243 		set_macroLabels();
1244 
1245 		UI_select();
1246 	}
1247 
1248 	if (VIEWERvisible)
1249 		openViewer();
1250 
1251 	if (scopeview) {
1252 		scopeview->resize(scopeX, scopeY, scopeW, scopeH);
1253 		digiscope->resize(0,0,scopeW,scopeH);
1254 		if (scopeVisible)
1255 			scopeview->show();
1256 	}
1257 
1258 	cQsoDb::reverse = logbook_reverse;
1259 	if (cQsoDb::reverse) {
1260 		qsodb.SortByDate(progdefaults.sort_date_time_off);
1261 		loadBrowser();
1262 	}
1263 
1264 	dlgLogbook->resize(logbook_x, logbook_y, logbook_w, logbook_h);
1265 
1266 	wBrowser->columnWidth(0, logbook_col_0);
1267 	wBrowser->columnWidth(1, logbook_col_1);
1268 	wBrowser->columnWidth(2, logbook_col_2);
1269 	wBrowser->columnWidth(3, logbook_col_3);
1270 	wBrowser->columnWidth(4, logbook_col_4);
1271 	wBrowser->columnWidth(5, logbook_col_5);
1272 
1273 	dxcluster_viewer->resize(dxdialog_x, dxdialog_y, dxdialog_w, dxdialog_h);
1274 
1275 	ReceiveText->set_all_entry(quick_entry);
1276 	ReceiveText->set_scroll_hints(rx_scroll_hints);
1277 	ReceiveText->set_word_wrap(rx_word_wrap, true);
1278 	TransmitText->set_word_wrap(tx_word_wrap, true);
1279 
1280     disable_config_p2p_io_widgets();
1281     update_csma_io_config(CSMA_ALL);
1282 
1283 // config_WK
1284 	choice_WK_keyer_mode->add("Iambic B");
1285 	choice_WK_keyer_mode->add("Iambic A");
1286 	choice_WK_keyer_mode->add("Ultimatic");
1287 	choice_WK_keyer_mode->add("Bug Mode");
1288 	choice_WK_keyer_mode->index((WK_mode_register & 0x30) >> 4);
1289 
1290 	choice_WK_output_pins->add("Key 1");
1291 	choice_WK_output_pins->add("Key 2");
1292 	choice_WK_output_pins->add("Key 1 & 2");
1293 	choice_WK_output_pins->index(((WK_pin_configuration & 0x06) >> 2) - 1);
1294 
1295 	choice_WK_sidetone->add("4000");
1296 	choice_WK_sidetone->add("2000");
1297 	choice_WK_sidetone->add("1333");
1298 	choice_WK_sidetone->add("1000");
1299 	choice_WK_sidetone->add("800");
1300 	choice_WK_sidetone->add("666");
1301 	choice_WK_sidetone->add("571");
1302 	choice_WK_sidetone->add("500");
1303 	choice_WK_sidetone->add("444");
1304 	choice_WK_sidetone->add("400");
1305 	choice_WK_sidetone->index((WK_sidetone & 0x0F) - 1);
1306 
1307 	choice_WK_hang->add("Wait 1.0");
1308 	choice_WK_hang->add("Wait 1.33");
1309 	choice_WK_hang->add("Wait 1.66");
1310 	choice_WK_hang->add("Wait 2.0");
1311 	choice_WK_hang->index((WK_pin_configuration & 0x30) >> 4);
1312 
1313 	cntr_WK_tail->minimum(0);
1314 	cntr_WK_tail->maximum(250);
1315 	cntr_WK_tail->step(10);
1316 	cntr_WK_tail->value(WK_tail_time);
1317 
1318 	cntr_WK_leadin->minimum(0);
1319 	cntr_WK_leadin->maximum(250);
1320 	cntr_WK_leadin->step(10);
1321 	cntr_WK_leadin->value(WK_lead_in_time);
1322 
1323 	cntr_WK_weight->minimum(10);
1324 	cntr_WK_weight->maximum(90);
1325 	cntr_WK_weight->step(1);
1326 	cntr_WK_weight->value(WK_weight);
1327 
1328 	cntr_WK_sample->minimum(10);
1329 	cntr_WK_sample->maximum(90);
1330 	cntr_WK_sample->step(1);
1331 	cntr_WK_sample->value(WK_paddle_setpoint);
1332 
1333 	cntr_WK_first_ext->minimum(0);
1334 	cntr_WK_first_ext->maximum(250);
1335 	cntr_WK_first_ext->step(1);
1336 	cntr_WK_first_ext->value(WK_first_extension);
1337 
1338 	cntr_WK_comp->minimum(0);
1339 	cntr_WK_comp->maximum(250);
1340 	cntr_WK_comp->step(1);
1341 	cntr_WK_comp->value(WK_key_compensation);
1342 
1343 	cntr_WK_ratio->minimum(2.0);
1344 	cntr_WK_ratio->maximum(4.0);
1345 	cntr_WK_ratio->step(0.1);
1346 	cntr_WK_ratio->value(WK_dit_dah_ratio * 3 / 50.0);
1347 
1348 	cntr_WK_cmd_wpm->minimum(10);
1349 	cntr_WK_cmd_wpm->maximum(30);
1350 	cntr_WK_cmd_wpm->step(1);
1351 	cntr_WK_cmd_wpm->value(WK_cmd_wpm);
1352 
1353 	cntr_WK_farnsworth->minimum(10);
1354 	cntr_WK_farnsworth->maximum(99);
1355 	cntr_WK_farnsworth->step(1);
1356 	cntr_WK_farnsworth->value(WK_farnsworth_wpm);
1357 
1358 	cntr_WK_rng_wpm->minimum(10);
1359 	cntr_WK_rng_wpm->maximum(40);
1360 	cntr_WK_rng_wpm->step(1);
1361 	cntr_WK_rng_wpm->value(WK_rng_wpm);
1362 
1363 	cntr_WK_min_wpm->minimum(5);
1364 	cntr_WK_min_wpm->maximum(89);
1365 	cntr_WK_min_wpm->step(1);
1366 	cntr_WK_min_wpm->value(WK_min_wpm);
1367 
1368 	btn_WK_sidetone_on->value(WK_sidetone);
1369 	btn_WK_cut_zeronine->value(WK_cut_zeronine);
1370 
1371 	btn_WK_ptt_on->value((WK_pin_configuration & 0x01) == 0x01);
1372 	btn_WK_tone_on->value((WK_pin_configuration & 0x02) == 0x02);
1373 
1374 	btn_WK_ct_space->value((WK_mode_register & 0x01) == 0x01);
1375 	btn_WK_auto_space->value((WK_mode_register & 0x02) == 0x02);
1376 	btn_WK_serial_echo->value((WK_mode_register & 0x04) == 0x04);
1377 	btn_WK_swap->value((WK_mode_register & 0x08) == 0x08);
1378 	btn_WK_paddle_echo->value((WK_mode_register & 0x40) == 0x40);
1379 	btn_WK_paddledog->value((WK_mode_register & 0x80) == 0x80);
1380 
1381 	select_WK_CommPort->value(WK_serial_port_name.c_str());
1382 }
1383