kopia lustrzana https://github.com/jamescoxon/dl-fldigi
				
				
				
			Clean up callsign search code
Ensure that the QRZ html scraper runs inside the lookup threadpull/2/head
							rodzic
							
								
									7013c62580
								
							
						
					
					
						commit
						71b9b489c4
					
				| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
// generated by Fast Light User Interface Designer (fluid) version 1.0108
 | 
			
		||||
// generated by Fast Light User Interface Designer (fluid) version 1.0109
 | 
			
		||||
 | 
			
		||||
#include "confdialog.h"
 | 
			
		||||
#include <config.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -9,9 +9,18 @@
 | 
			
		|||
#include "colorsfonts.h"
 | 
			
		||||
#include "waterfall.h"
 | 
			
		||||
#include "rigxml.h"
 | 
			
		||||
#include "lookupcall.h"
 | 
			
		||||
extern void initViewer();
 | 
			
		||||
Fl_Double_Window *dlgConfig; 
 | 
			
		||||
 | 
			
		||||
void set_qrz_buttons(Fl_Button* b) {
 | 
			
		||||
  Fl_Button* qrzb[] = { btnQRZnotavailable, btnQRZcdrom, btnQRZonline,
 | 
			
		||||
                              btnQRZsub, btnHamcall};
 | 
			
		||||
 | 
			
		||||
for (size_t i = 0; i < sizeof(qrzb)/sizeof(*qrzb); i++)
 | 
			
		||||
	qrzb[i]->value(b == qrzb[i]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Fl_Tabs *tabsConfigure=(Fl_Tabs *)0;
 | 
			
		||||
 | 
			
		||||
Fl_Group *tabOperator=(Fl_Group *)0;
 | 
			
		||||
| 
						 | 
				
			
			@ -807,29 +816,19 @@ progdefaults.changed = true;
 | 
			
		|||
 | 
			
		||||
Fl_Group *tabQRZ=(Fl_Group *)0;
 | 
			
		||||
 | 
			
		||||
Fl_Check_Button *btnQRZnotavailable=(Fl_Check_Button *)0;
 | 
			
		||||
Fl_Round_Button *btnQRZnotavailable=(Fl_Round_Button *)0;
 | 
			
		||||
 | 
			
		||||
static void cb_btnQRZnotavailable(Fl_Check_Button* o, void*) {
 | 
			
		||||
  if (o->value() == 1) {
 | 
			
		||||
btnQRZcdrom->value(0);
 | 
			
		||||
btnQRZsocket->value(0);
 | 
			
		||||
btnHAMCALLsocket->value(0);
 | 
			
		||||
btnQRZonline->value(0);
 | 
			
		||||
progdefaults.QRZ = 0;
 | 
			
		||||
}
 | 
			
		||||
static void cb_btnQRZnotavailable(Fl_Round_Button* o, void*) {
 | 
			
		||||
  set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_NONE;
 | 
			
		||||
progdefaults.changed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Fl_Check_Button *btnQRZcdrom=(Fl_Check_Button *)0;
 | 
			
		||||
Fl_Round_Button *btnQRZcdrom=(Fl_Round_Button *)0;
 | 
			
		||||
 | 
			
		||||
static void cb_btnQRZcdrom(Fl_Check_Button* o, void*) {
 | 
			
		||||
  if (o->value() == 1) {
 | 
			
		||||
btnQRZsocket->value(0);
 | 
			
		||||
btnQRZnotavailable->value(0);
 | 
			
		||||
btnHAMCALLsocket->value(0);
 | 
			
		||||
btnQRZonline->value(0);
 | 
			
		||||
progdefaults.QRZ = 2;
 | 
			
		||||
}
 | 
			
		||||
static void cb_btnQRZcdrom(Fl_Round_Button* o, void*) {
 | 
			
		||||
  set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_CD;
 | 
			
		||||
progdefaults.changed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -841,29 +840,19 @@ progdefaults.QRZchanged = true;
 | 
			
		|||
progdefaults.changed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Fl_Check_Button *btnQRZsocket=(Fl_Check_Button *)0;
 | 
			
		||||
Fl_Round_Button *btnQRZsub=(Fl_Round_Button *)0;
 | 
			
		||||
 | 
			
		||||
static void cb_btnQRZsocket(Fl_Check_Button* o, void*) {
 | 
			
		||||
  if (o->value() == 1) {
 | 
			
		||||
btnQRZcdrom->value(0);
 | 
			
		||||
btnQRZnotavailable->value(0);
 | 
			
		||||
btnHAMCALLsocket->value(0);
 | 
			
		||||
btnQRZonline->value(0);
 | 
			
		||||
progdefaults.QRZ = 1;
 | 
			
		||||
}
 | 
			
		||||
static void cb_btnQRZsub(Fl_Round_Button* o, void*) {
 | 
			
		||||
  set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_NET_SUB;
 | 
			
		||||
progdefaults.changed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Fl_Check_Button *btnHAMCALLsocket=(Fl_Check_Button *)0;
 | 
			
		||||
Fl_Round_Button *btnHamcall=(Fl_Round_Button *)0;
 | 
			
		||||
 | 
			
		||||
static void cb_btnHAMCALLsocket(Fl_Check_Button* o, void*) {
 | 
			
		||||
  if (o->value() == 1) {
 | 
			
		||||
btnQRZcdrom->value(0);
 | 
			
		||||
btnQRZnotavailable->value(0);
 | 
			
		||||
btnQRZsocket->value(0);
 | 
			
		||||
btnQRZonline->value(0);
 | 
			
		||||
progdefaults.QRZ = 3;
 | 
			
		||||
}
 | 
			
		||||
static void cb_btnHamcall(Fl_Round_Button* o, void*) {
 | 
			
		||||
  set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_HAMCALL;
 | 
			
		||||
progdefaults.changed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -881,16 +870,11 @@ static void cb_inpQRZuserpassword(Fl_Input* o, void*) {
 | 
			
		|||
progdefaults.changed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Fl_Check_Button *btnQRZonline=(Fl_Check_Button *)0;
 | 
			
		||||
Fl_Round_Button *btnQRZonline=(Fl_Round_Button *)0;
 | 
			
		||||
 | 
			
		||||
static void cb_btnQRZonline(Fl_Check_Button* o, void*) {
 | 
			
		||||
  if (o->value() == 1) {
 | 
			
		||||
btnQRZnotavailable->value(0);
 | 
			
		||||
btnQRZcdrom->value(0);
 | 
			
		||||
btnQRZsocket->value(0);
 | 
			
		||||
btnHAMCALLsocket->value(0);
 | 
			
		||||
progdefaults.QRZ = 4;
 | 
			
		||||
}
 | 
			
		||||
static void cb_btnQRZonline(Fl_Round_Button* o, void*) {
 | 
			
		||||
  set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_NET_HTML;
 | 
			
		||||
progdefaults.changed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1755,7 +1739,7 @@ static const char szStopBits[] = "1|1.5|2";
 | 
			
		|||
static const char szOliviaTones[] = "2|4|8|16|32|64|128|256";
 | 
			
		||||
static const char szOliviaBandwidth[] = "125|250|500|1000|2000";
 | 
			
		||||
static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600|115200|230400|460800";
 | 
			
		||||
  { Fl_Double_Window* o = new Fl_Double_Window(400, 255, "fldigi - config");
 | 
			
		||||
  { Fl_Double_Window* o = new Fl_Double_Window(400, 254, "fldigi - config");
 | 
			
		||||
    w = o;
 | 
			
		||||
    o->color(FL_DARK2);
 | 
			
		||||
    o->selection_color((Fl_Color)51);
 | 
			
		||||
| 
						 | 
				
			
			@ -2397,17 +2381,17 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
 | 
			
		|||
        tabQRZ->color((Fl_Color)51);
 | 
			
		||||
        tabQRZ->selection_color((Fl_Color)51);
 | 
			
		||||
        tabQRZ->hide();
 | 
			
		||||
        { Fl_Check_Button* o = btnQRZnotavailable = new Fl_Check_Button(12, 45, 110, 20, "Not available");
 | 
			
		||||
          btnQRZnotavailable->down_box(FL_DOWN_BOX);
 | 
			
		||||
        { btnQRZnotavailable = new Fl_Round_Button(12, 45, 110, 20, "Not available");
 | 
			
		||||
          btnQRZnotavailable->down_box(FL_ROUND_DOWN_BOX);
 | 
			
		||||
          btnQRZnotavailable->value(1);
 | 
			
		||||
          btnQRZnotavailable->callback((Fl_Callback*)cb_btnQRZnotavailable);
 | 
			
		||||
          if (progdefaults.QRZ == 0) o->value(1); else o->value(0);
 | 
			
		||||
        } // Fl_Check_Button* btnQRZnotavailable
 | 
			
		||||
        { Fl_Check_Button* o = btnQRZcdrom = new Fl_Check_Button(12, 72, 103, 20, "QRZ cdrom");
 | 
			
		||||
          btnQRZcdrom->down_box(FL_DOWN_BOX);
 | 
			
		||||
          btnQRZnotavailable->value(progdefaults.QRZ == QRZ_NONE);
 | 
			
		||||
        } // Fl_Round_Button* btnQRZnotavailable
 | 
			
		||||
        { btnQRZcdrom = new Fl_Round_Button(12, 72, 103, 20, "QRZ cdrom");
 | 
			
		||||
          btnQRZcdrom->down_box(FL_ROUND_DOWN_BOX);
 | 
			
		||||
          btnQRZcdrom->callback((Fl_Callback*)cb_btnQRZcdrom);
 | 
			
		||||
          if (progdefaults.QRZ == 2) o->value(1); else o->value(0);
 | 
			
		||||
        } // Fl_Check_Button* btnQRZcdrom
 | 
			
		||||
          btnQRZcdrom->value(progdefaults.QRZ == QRZ_CD);
 | 
			
		||||
        } // Fl_Round_Button* btnQRZcdrom
 | 
			
		||||
        { Fl_Input* o = txtQRZpathname = new Fl_Input(140, 69, 255, 25, "at:");
 | 
			
		||||
          txtQRZpathname->tooltip("ie: /home/dave/CALLBK/ or C:/CALLBK/^jLeave blank to search for database");
 | 
			
		||||
          txtQRZpathname->callback((Fl_Callback*)cb_txtQRZpathname);
 | 
			
		||||
| 
						 | 
				
			
			@ -2415,18 +2399,18 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
 | 
			
		|||
        } // Fl_Input* txtQRZpathname
 | 
			
		||||
        { Fl_Group* o = new Fl_Group(5, 135, 390, 85);
 | 
			
		||||
          o->box(FL_ENGRAVED_FRAME);
 | 
			
		||||
          { Fl_Check_Button* o = btnQRZsocket = new Fl_Check_Button(12, 148, 190, 20, "QRZ subscriber");
 | 
			
		||||
            btnQRZsocket->tooltip("You need a paid QRZ on-line subscription for access");
 | 
			
		||||
            btnQRZsocket->down_box(FL_DOWN_BOX);
 | 
			
		||||
            btnQRZsocket->callback((Fl_Callback*)cb_btnQRZsocket);
 | 
			
		||||
            if (progdefaults.QRZ == 1) o->value(1); else o->value(0);
 | 
			
		||||
          } // Fl_Check_Button* btnQRZsocket
 | 
			
		||||
          { Fl_Check_Button* o = btnHAMCALLsocket = new Fl_Check_Button(12, 183, 205, 20, "Hamcall subscriber");
 | 
			
		||||
            btnHAMCALLsocket->tooltip("You need a paid Hamcall on-line subscription to access");
 | 
			
		||||
            btnHAMCALLsocket->down_box(FL_DOWN_BOX);
 | 
			
		||||
            btnHAMCALLsocket->callback((Fl_Callback*)cb_btnHAMCALLsocket);
 | 
			
		||||
            if (progdefaults.QRZ == 3) o->value(1); else o->value(0);
 | 
			
		||||
          } // Fl_Check_Button* btnHAMCALLsocket
 | 
			
		||||
          { btnQRZsub = new Fl_Round_Button(12, 148, 130, 20, "QRZ subscriber");
 | 
			
		||||
            btnQRZsub->tooltip("You need a paid QRZ on-line subscription for access");
 | 
			
		||||
            btnQRZsub->down_box(FL_ROUND_DOWN_BOX);
 | 
			
		||||
            btnQRZsub->callback((Fl_Callback*)cb_btnQRZsub);
 | 
			
		||||
            btnQRZsub->value(progdefaults.QRZ == QRZ_NET_SUB);
 | 
			
		||||
          } // Fl_Round_Button* btnQRZsub
 | 
			
		||||
          { btnHamcall = new Fl_Round_Button(12, 183, 155, 20, "Hamcall subscriber");
 | 
			
		||||
            btnHamcall->tooltip("You need a paid Hamcall on-line subscription to access");
 | 
			
		||||
            btnHamcall->down_box(FL_ROUND_DOWN_BOX);
 | 
			
		||||
            btnHamcall->callback((Fl_Callback*)cb_btnHamcall);
 | 
			
		||||
            btnHamcall->value(progdefaults.QRZ == QRZ_HAMCALL);
 | 
			
		||||
          } // Fl_Round_Button* btnHamcall
 | 
			
		||||
          { Fl_Input* o = inpQRZusername = new Fl_Input(205, 145, 90, 25, "User name");
 | 
			
		||||
            inpQRZusername->callback((Fl_Callback*)cb_inpQRZusername);
 | 
			
		||||
            inpQRZusername->align(FL_ALIGN_RIGHT);
 | 
			
		||||
| 
						 | 
				
			
			@ -2439,12 +2423,12 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
 | 
			
		|||
          } // Fl_Input* inpQRZuserpassword
 | 
			
		||||
          o->end();
 | 
			
		||||
        } // Fl_Group* o
 | 
			
		||||
        { Fl_Check_Button* o = btnQRZonline = new Fl_Check_Button(12, 105, 70, 20, "QRZ on line");
 | 
			
		||||
        { btnQRZonline = new Fl_Round_Button(12, 105, 100, 20, "QRZ online");
 | 
			
		||||
          btnQRZonline->tooltip("This service may not be available");
 | 
			
		||||
          btnQRZonline->down_box(FL_DOWN_BOX);
 | 
			
		||||
          btnQRZonline->down_box(FL_ROUND_DOWN_BOX);
 | 
			
		||||
          btnQRZonline->callback((Fl_Callback*)cb_btnQRZonline);
 | 
			
		||||
          if (progdefaults.QRZ == 4) o->value(1); else o->value(0);
 | 
			
		||||
        } // Fl_Check_Button* btnQRZonline
 | 
			
		||||
          btnQRZonline->value(progdefaults.QRZ == QRZ_NET_HTML);
 | 
			
		||||
        } // Fl_Round_Button* btnQRZonline
 | 
			
		||||
        tabQRZ->end();
 | 
			
		||||
      } // Fl_Group* tabQRZ
 | 
			
		||||
      { tabSoundCard = new Fl_Group(0, 25, 400, 195, "SndCrd");
 | 
			
		||||
| 
						 | 
				
			
			@ -2587,7 +2571,6 @@ l with your sound hardware.");
 | 
			
		|||
              valPCMvolume->type(5);
 | 
			
		||||
              valPCMvolume->color((Fl_Color)26);
 | 
			
		||||
              valPCMvolume->selection_color((Fl_Color)1);
 | 
			
		||||
              valPCMvolume->step(0.01);
 | 
			
		||||
              valPCMvolume->value(0.8);
 | 
			
		||||
              valPCMvolume->textsize(14);
 | 
			
		||||
              valPCMvolume->callback((Fl_Callback*)cb_valPCMvolume);
 | 
			
		||||
| 
						 | 
				
			
			@ -2869,7 +2852,6 @@ l with your sound hardware.");
 | 
			
		|||
                cntCWdash2dot->type(1);
 | 
			
		||||
                cntCWdash2dot->minimum(2.5);
 | 
			
		||||
                cntCWdash2dot->maximum(4);
 | 
			
		||||
                cntCWdash2dot->step(0.1);
 | 
			
		||||
                cntCWdash2dot->value(3);
 | 
			
		||||
                cntCWdash2dot->callback((Fl_Callback*)cb_cntCWdash2dot);
 | 
			
		||||
                cntCWdash2dot->align(FL_ALIGN_LEFT);
 | 
			
		||||
| 
						 | 
				
			
			@ -2879,7 +2861,6 @@ l with your sound hardware.");
 | 
			
		|||
                cntCWrisetime->type(1);
 | 
			
		||||
                cntCWrisetime->minimum(0);
 | 
			
		||||
                cntCWrisetime->maximum(15);
 | 
			
		||||
                cntCWrisetime->step(0.1);
 | 
			
		||||
                cntCWrisetime->value(4);
 | 
			
		||||
                cntCWrisetime->callback((Fl_Callback*)cb_cntCWrisetime);
 | 
			
		||||
                cntCWrisetime->align(FL_ALIGN_LEFT);
 | 
			
		||||
| 
						 | 
				
			
			@ -2942,7 +2923,6 @@ l with your sound hardware.");
 | 
			
		|||
              valTHOR_BW->type(1);
 | 
			
		||||
              valTHOR_BW->minimum(1);
 | 
			
		||||
              valTHOR_BW->maximum(2);
 | 
			
		||||
              valTHOR_BW->step(0.1);
 | 
			
		||||
              valTHOR_BW->value(1.5);
 | 
			
		||||
              valTHOR_BW->callback((Fl_Callback*)cb_valTHOR_BW);
 | 
			
		||||
              o->value(progdefaults.THOR_BW);
 | 
			
		||||
| 
						 | 
				
			
			@ -2970,7 +2950,6 @@ l with your sound hardware.");
 | 
			
		|||
            } // Fl_Check_Button* valTHOR_SOFT
 | 
			
		||||
            { Fl_Value_Slider* o = valThorCWI = new Fl_Value_Slider(120, 174, 260, 21, "CWI threshold:");
 | 
			
		||||
              valThorCWI->type(1);
 | 
			
		||||
              valThorCWI->step(0.01);
 | 
			
		||||
              valThorCWI->textsize(14);
 | 
			
		||||
              valThorCWI->callback((Fl_Callback*)cb_valThorCWI);
 | 
			
		||||
              valThorCWI->align(FL_ALIGN_LEFT);
 | 
			
		||||
| 
						 | 
				
			
			@ -2992,7 +2971,6 @@ l with your sound hardware.");
 | 
			
		|||
              valDominoEX_BW->type(1);
 | 
			
		||||
              valDominoEX_BW->minimum(1);
 | 
			
		||||
              valDominoEX_BW->maximum(2);
 | 
			
		||||
              valDominoEX_BW->step(0.1);
 | 
			
		||||
              valDominoEX_BW->value(1.5);
 | 
			
		||||
              valDominoEX_BW->callback((Fl_Callback*)cb_valDominoEX_BW);
 | 
			
		||||
              o->value(progdefaults.DOMINOEX_BW);
 | 
			
		||||
| 
						 | 
				
			
			@ -3020,7 +2998,6 @@ l with your sound hardware.");
 | 
			
		|||
            } // Fl_Counter* valDominoEX_PATHS
 | 
			
		||||
            { Fl_Value_Slider* o = valDomCWI = new Fl_Value_Slider(125, 179, 260, 21, "CWI threshold:");
 | 
			
		||||
              valDomCWI->type(1);
 | 
			
		||||
              valDomCWI->step(0.01);
 | 
			
		||||
              valDomCWI->textsize(14);
 | 
			
		||||
              valDomCWI->callback((Fl_Callback*)cb_valDomCWI);
 | 
			
		||||
              valDomCWI->align(FL_ALIGN_LEFT);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
# data file for the Fltk User Interface Designer (fluid)
 | 
			
		||||
version 1.0108 
 | 
			
		||||
version 1.0109 
 | 
			
		||||
header_name {.h} 
 | 
			
		||||
code_name {.cxx}
 | 
			
		||||
decl {\#include <config.h>} {} 
 | 
			
		||||
| 
						 | 
				
			
			@ -27,11 +27,22 @@ decl {\#include "waterfall.h"} {}
 | 
			
		|||
 | 
			
		||||
decl {\#include "rigxml.h"} {} 
 | 
			
		||||
 | 
			
		||||
decl {\#include "lookupcall.h"} {} 
 | 
			
		||||
 | 
			
		||||
decl {extern void initViewer();} {} 
 | 
			
		||||
 | 
			
		||||
decl {Fl_Double_Window *dlgConfig;} {public
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
Function {set_qrz_buttons(Fl_Button* b)} {open selected return_type void
 | 
			
		||||
} {
 | 
			
		||||
  code {Fl_Button* qrzb[] = { btnQRZnotavailable, btnQRZcdrom, btnQRZonline,
 | 
			
		||||
                              btnQRZsub, btnHamcall};
 | 
			
		||||
 | 
			
		||||
for (size_t i = 0; i < sizeof(qrzb)/sizeof(*qrzb); i++)
 | 
			
		||||
	qrzb[i]->value(b == qrzb[i]);} {}
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
Function {ConfigureDialog()} {open
 | 
			
		||||
} {
 | 
			
		||||
  code {static const char szShifts[]  = "23|85|160|170|182|200|240|350|425|850";
 | 
			
		||||
| 
						 | 
				
			
			@ -45,14 +56,14 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
 | 
			
		|||
  code {} {}
 | 
			
		||||
  Fl_Window {} {
 | 
			
		||||
    label {fldigi - config} open
 | 
			
		||||
    xywh {487 115 400 255} type Double color 45 selection_color 51 align 80 visible
 | 
			
		||||
    xywh {572 624 400 254} type Double color 45 selection_color 51 align 80 visible
 | 
			
		||||
  } {
 | 
			
		||||
    Fl_Tabs tabsConfigure {open
 | 
			
		||||
      xywh {0 0 410 255} color 47 selection_color 9
 | 
			
		||||
    } {
 | 
			
		||||
      Fl_Group tabOperator {
 | 
			
		||||
        label Oper
 | 
			
		||||
        callback {progdefaults.changed = true;} open selected
 | 
			
		||||
        callback {progdefaults.changed = true;} open
 | 
			
		||||
        xywh {0 25 400 195} color 51 selection_color 51 when 1
 | 
			
		||||
      } {
 | 
			
		||||
        Fl_Input inpMyCallsign {
 | 
			
		||||
| 
						 | 
				
			
			@ -933,31 +944,21 @@ progdefaults.changed = true;}
 | 
			
		|||
        label qrz open
 | 
			
		||||
        xywh {0 25 400 195} color 51 selection_color 51 hide
 | 
			
		||||
      } {
 | 
			
		||||
        Fl_Check_Button btnQRZnotavailable {
 | 
			
		||||
        Fl_Round_Button btnQRZnotavailable {
 | 
			
		||||
          label {Not available}
 | 
			
		||||
          callback {if (o->value() == 1) {
 | 
			
		||||
btnQRZcdrom->value(0);
 | 
			
		||||
btnQRZsocket->value(0);
 | 
			
		||||
btnHAMCALLsocket->value(0);
 | 
			
		||||
btnQRZonline->value(0);
 | 
			
		||||
progdefaults.QRZ = 0;
 | 
			
		||||
}
 | 
			
		||||
          callback {set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_NONE;
 | 
			
		||||
progdefaults.changed = true;}
 | 
			
		||||
          xywh {12 45 110 20} down_box DOWN_BOX value 1
 | 
			
		||||
          code0 {if (progdefaults.QRZ == 0) o->value(1); else o->value(0);}
 | 
			
		||||
          xywh {12 45 110 20} down_box ROUND_DOWN_BOX value 1
 | 
			
		||||
          code0 {btnQRZnotavailable->value(progdefaults.QRZ == QRZ_NONE);}
 | 
			
		||||
        }
 | 
			
		||||
        Fl_Check_Button btnQRZcdrom {
 | 
			
		||||
        Fl_Round_Button btnQRZcdrom {
 | 
			
		||||
          label {QRZ cdrom}
 | 
			
		||||
          callback {if (o->value() == 1) {
 | 
			
		||||
btnQRZsocket->value(0);
 | 
			
		||||
btnQRZnotavailable->value(0);
 | 
			
		||||
btnHAMCALLsocket->value(0);
 | 
			
		||||
btnQRZonline->value(0);
 | 
			
		||||
progdefaults.QRZ = 2;
 | 
			
		||||
}
 | 
			
		||||
          callback {set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_CD;
 | 
			
		||||
progdefaults.changed = true;}
 | 
			
		||||
          xywh {12 72 103 20} down_box DOWN_BOX
 | 
			
		||||
          code0 {if (progdefaults.QRZ == 2) o->value(1); else o->value(0);}
 | 
			
		||||
          xywh {12 72 103 20} down_box ROUND_DOWN_BOX
 | 
			
		||||
          code0 {btnQRZcdrom->value(progdefaults.QRZ == QRZ_CD);}
 | 
			
		||||
        }
 | 
			
		||||
        Fl_Input txtQRZpathname {
 | 
			
		||||
          label {at:}
 | 
			
		||||
| 
						 | 
				
			
			@ -970,31 +971,21 @@ progdefaults.changed = true;}
 | 
			
		|||
        Fl_Group {} {open
 | 
			
		||||
          xywh {5 135 390 85} box ENGRAVED_FRAME
 | 
			
		||||
        } {
 | 
			
		||||
          Fl_Check_Button btnQRZsocket {
 | 
			
		||||
          Fl_Round_Button btnQRZsub {
 | 
			
		||||
            label {QRZ subscriber}
 | 
			
		||||
            callback {if (o->value() == 1) {
 | 
			
		||||
btnQRZcdrom->value(0);
 | 
			
		||||
btnQRZnotavailable->value(0);
 | 
			
		||||
btnHAMCALLsocket->value(0);
 | 
			
		||||
btnQRZonline->value(0);
 | 
			
		||||
progdefaults.QRZ = 1;
 | 
			
		||||
}
 | 
			
		||||
            callback {set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_NET_SUB;
 | 
			
		||||
progdefaults.changed = true;}
 | 
			
		||||
            tooltip {You need a paid QRZ on-line subscription for access} xywh {12 148 190 20} down_box DOWN_BOX
 | 
			
		||||
            code0 {if (progdefaults.QRZ == 1) o->value(1); else o->value(0);}
 | 
			
		||||
            tooltip {You need a paid QRZ on-line subscription for access} xywh {12 148 130 20} down_box ROUND_DOWN_BOX
 | 
			
		||||
            code0 {btnQRZsub->value(progdefaults.QRZ == QRZ_NET_SUB);}
 | 
			
		||||
          }
 | 
			
		||||
          Fl_Check_Button btnHAMCALLsocket {
 | 
			
		||||
          Fl_Round_Button btnHamcall {
 | 
			
		||||
            label {Hamcall subscriber}
 | 
			
		||||
            callback {if (o->value() == 1) {
 | 
			
		||||
btnQRZcdrom->value(0);
 | 
			
		||||
btnQRZnotavailable->value(0);
 | 
			
		||||
btnQRZsocket->value(0);
 | 
			
		||||
btnQRZonline->value(0);
 | 
			
		||||
progdefaults.QRZ = 3;
 | 
			
		||||
}
 | 
			
		||||
            callback {set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_HAMCALL;
 | 
			
		||||
progdefaults.changed = true;}
 | 
			
		||||
            tooltip {You need a paid Hamcall on-line subscription to access} xywh {12 183 205 20} down_box DOWN_BOX
 | 
			
		||||
            code0 {if (progdefaults.QRZ == 3) o->value(1); else o->value(0);}
 | 
			
		||||
            tooltip {You need a paid Hamcall on-line subscription to access} xywh {12 183 155 20} down_box ROUND_DOWN_BOX
 | 
			
		||||
            code0 {btnHamcall->value(progdefaults.QRZ == QRZ_HAMCALL);}
 | 
			
		||||
          }
 | 
			
		||||
          Fl_Input inpQRZusername {
 | 
			
		||||
            label {User name}
 | 
			
		||||
| 
						 | 
				
			
			@ -1011,18 +1002,13 @@ progdefaults.changed = true;}
 | 
			
		|||
            code0 {o->value(progdefaults.QRZuserpassword.c_str());}
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        Fl_Check_Button btnQRZonline {
 | 
			
		||||
          label {QRZ on line}
 | 
			
		||||
          callback {if (o->value() == 1) {
 | 
			
		||||
btnQRZnotavailable->value(0);
 | 
			
		||||
btnQRZcdrom->value(0);
 | 
			
		||||
btnQRZsocket->value(0);
 | 
			
		||||
btnHAMCALLsocket->value(0);
 | 
			
		||||
progdefaults.QRZ = 4;
 | 
			
		||||
}
 | 
			
		||||
        Fl_Round_Button btnQRZonline {
 | 
			
		||||
          label {QRZ online}
 | 
			
		||||
          callback {set_qrz_buttons(o);
 | 
			
		||||
progdefaults.QRZ = QRZ_NET_HTML;
 | 
			
		||||
progdefaults.changed = true;}
 | 
			
		||||
          tooltip {This service may not be available} xywh {12 105 70 20} down_box DOWN_BOX
 | 
			
		||||
          code0 {if (progdefaults.QRZ == 4) o->value(1); else o->value(0);}
 | 
			
		||||
          tooltip {This service may not be available} xywh {12 105 100 20} down_box ROUND_DOWN_BOX
 | 
			
		||||
          code0 {btnQRZonline->value(progdefaults.QRZ == QRZ_NET_HTML);}
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      Fl_Group tabSoundCard {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@
 | 
			
		|||
#include "modem.h"
 | 
			
		||||
#include "configuration.h"
 | 
			
		||||
extern Fl_Double_Window *dlgConfig; 
 | 
			
		||||
void set_qrz_buttons(Fl_Button* b);
 | 
			
		||||
#include <FL/Fl_Double_Window.H>
 | 
			
		||||
#include <FL/Fl_Tabs.H>
 | 
			
		||||
extern Fl_Tabs *tabsConfigure;
 | 
			
		||||
| 
						 | 
				
			
			@ -105,14 +106,14 @@ extern Fl_Button *btnInitMEMMAP;
 | 
			
		|||
extern Fl_Check_Button *chkUSEXMLRPC;
 | 
			
		||||
extern Fl_Button *btnInitXMLRPC;
 | 
			
		||||
extern Fl_Group *tabQRZ;
 | 
			
		||||
extern Fl_Check_Button *btnQRZnotavailable;
 | 
			
		||||
extern Fl_Check_Button *btnQRZcdrom;
 | 
			
		||||
extern Fl_Round_Button *btnQRZnotavailable;
 | 
			
		||||
extern Fl_Round_Button *btnQRZcdrom;
 | 
			
		||||
extern Fl_Input *txtQRZpathname;
 | 
			
		||||
extern Fl_Check_Button *btnQRZsocket;
 | 
			
		||||
extern Fl_Check_Button *btnHAMCALLsocket;
 | 
			
		||||
extern Fl_Round_Button *btnQRZsub;
 | 
			
		||||
extern Fl_Round_Button *btnHamcall;
 | 
			
		||||
extern Fl_Input *inpQRZusername;
 | 
			
		||||
extern Fl_Input *inpQRZuserpassword;
 | 
			
		||||
extern Fl_Check_Button *btnQRZonline;
 | 
			
		||||
extern Fl_Round_Button *btnQRZonline;
 | 
			
		||||
extern Fl_Group *tabSoundCard;
 | 
			
		||||
extern Fl_Tabs *tabsSoundCard;
 | 
			
		||||
extern Fl_Group *tabAudio;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "rtty.h"
 | 
			
		||||
#include "lookupcall.h"
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__)
 | 
			
		||||
#  define DEFAULT_PTTDEV "/dev/ttyS0"
 | 
			
		||||
| 
						 | 
				
			
			@ -156,7 +157,7 @@
 | 
			
		|||
        ELEM_(bool, NagMe, "NAGME", false)                                              \
 | 
			
		||||
	ELEM_(bool, menu_icons, "MENUICONS", true)                                      \
 | 
			
		||||
/* QRZ */                                                                               \
 | 
			
		||||
        ELEM_(int, QRZ, "QRZTYPE", 0) /* Not available */                               \
 | 
			
		||||
        ELEM_(int, QRZ, "QRZTYPE", QRZ_NONE)                                            \
 | 
			
		||||
        ELEM_(std::string, QRZpathname, "QRZPATHNAME", "")                              \
 | 
			
		||||
        ELEM_(std::string, QRZusername, "QRZUSER", "")                                  \
 | 
			
		||||
        ELEM_(std::string, QRZuserpassword, "QRZPASSWORD", "")                          \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,5 +2,6 @@
 | 
			
		|||
#define LOOKUPCALL_H
 | 
			
		||||
 | 
			
		||||
extern void CALLSIGNquery();
 | 
			
		||||
enum qrz_query_t { QRZ_EXIT = -1, QRZ_NONE, QRZ_NET_SUB, QRZ_CD, QRZ_HAMCALL, QRZ_NET_HTML };
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -474,41 +474,28 @@ int configuration::setDefaults() {
 | 
			
		|||
	chkTransmitRSid->value(TransmitRSid);
 | 
			
		||||
	chkRSidWideSearch->value(rsidWideSearch);
 | 
			
		||||
	chkSlowCpu->value(slowcpu);
 | 
			
		||||
	
 | 
			
		||||
//	string bandsfname = HomeDir;
 | 
			
		||||
//	bandsfname.append("frequencies.def");
 | 
			
		||||
//	ifstream bandsfile(bandsfname.c_str(), ios::in);
 | 
			
		||||
//	if (bandsfile) {
 | 
			
		||||
//		string sBand;
 | 
			
		||||
//		cboBand->add(" ");
 | 
			
		||||
//		while (!bandsfile.eof()) {
 | 
			
		||||
//			sBand = "";
 | 
			
		||||
//			bandsfile >> sBand; bandsfile.ignore();
 | 
			
		||||
//			if (sBand.length() > 0)
 | 
			
		||||
//				cboBand->add(sBand.c_str());
 | 
			
		||||
//		}
 | 
			
		||||
//		bandsfile.close();
 | 
			
		||||
//	} else {
 | 
			
		||||
//		int i = 0;
 | 
			
		||||
//		while (szBands[i]) {
 | 
			
		||||
//			cboBand->add((char *)szBands[i]);
 | 
			
		||||
//			i++;
 | 
			
		||||
//		}
 | 
			
		||||
//	}
 | 
			
		||||
	btnQRZnotavailable->value(0);
 | 
			
		||||
	btnQRZsocket->value(0);
 | 
			
		||||
	btnQRZcdrom->value(0);
 | 
			
		||||
	btnHAMCALLsocket->value(0);
 | 
			
		||||
	if (QRZ == 0)
 | 
			
		||||
		btnQRZnotavailable->value(1);
 | 
			
		||||
	else if (QRZ == 1)
 | 
			
		||||
		btnQRZsocket->value(1);
 | 
			
		||||
	else if (QRZ == 2)
 | 
			
		||||
		btnQRZcdrom->value(1);
 | 
			
		||||
	else if (QRZ == 3)
 | 
			
		||||
		btnHAMCALLsocket->value(1);
 | 
			
		||||
 | 
			
		||||
	Fl_Button* qrzb;
 | 
			
		||||
	switch (QRZ) {
 | 
			
		||||
	case QRZ_NONE:
 | 
			
		||||
		qrzb = btnQRZnotavailable;
 | 
			
		||||
		break;
 | 
			
		||||
	case QRZ_CD:
 | 
			
		||||
		qrzb = btnQRZcdrom;
 | 
			
		||||
		break;
 | 
			
		||||
	case QRZ_NET_HTML:
 | 
			
		||||
		qrzb = btnQRZonline;
 | 
			
		||||
		break;
 | 
			
		||||
	case QRZ_NET_SUB:
 | 
			
		||||
		qrzb = btnQRZsub;
 | 
			
		||||
		break;
 | 
			
		||||
	case QRZ_HAMCALL:
 | 
			
		||||
		qrzb = btnHamcall;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
	set_qrz_buttons(qrzb);
 | 
			
		||||
	txtQRZpathname->value(QRZpathname.c_str());
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
//	btnRTTY_USB->value(RTTY_USB);
 | 
			
		||||
	btnsendid->value(sendid);
 | 
			
		||||
	btnsendvideotext->value(sendtextid);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,6 +27,7 @@
 | 
			
		|||
#include <config.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include "signal.h"
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <cmath>
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +35,6 @@
 | 
			
		|||
 | 
			
		||||
#include <FL/fl_ask.H>
 | 
			
		||||
 | 
			
		||||
#include "socket.h"
 | 
			
		||||
#include "threads.h"
 | 
			
		||||
 | 
			
		||||
#include "misc.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -48,19 +48,18 @@
 | 
			
		|||
 | 
			
		||||
#include "xmlreader.h"
 | 
			
		||||
 | 
			
		||||
#include "qrunner.h"
 | 
			
		||||
#include "debug.h"
 | 
			
		||||
#include "network.h"
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int rotoroffset = 0;
 | 
			
		||||
 | 
			
		||||
string qrzhost = "online.qrz.com";
 | 
			
		||||
string qrzSessionKey;
 | 
			
		||||
string qrzalert;
 | 
			
		||||
string qrzerror;
 | 
			
		||||
 | 
			
		||||
string callsign = "";
 | 
			
		||||
string callsign;
 | 
			
		||||
 | 
			
		||||
string lookup_name;
 | 
			
		||||
string lookup_addr1;
 | 
			
		||||
| 
						 | 
				
			
			@ -70,24 +69,24 @@ string lookup_zip;
 | 
			
		|||
string lookup_country;
 | 
			
		||||
string lookup_born;
 | 
			
		||||
string lookup_fname;
 | 
			
		||||
string lookup_gth;
 | 
			
		||||
string lookup_qth;
 | 
			
		||||
string lookup_grid;
 | 
			
		||||
string lookup_latd;
 | 
			
		||||
string lookup_lond;
 | 
			
		||||
string lookup_notes;
 | 
			
		||||
 | 
			
		||||
enum QUERYTYPE { NONE, QRZCD, QRZNET, QRZDETAILS, HAMCALLNET };
 | 
			
		||||
QUERYTYPE DB_query = NONE;
 | 
			
		||||
qrz_query_t DB_query = QRZ_NONE;
 | 
			
		||||
 | 
			
		||||
enum TAG { \
 | 
			
		||||
	IGNORE,	KEY,	ALERT,	ERROR,	CALL, \
 | 
			
		||||
	FNAME,	NAME,	ADDR1,	ADDR2,	STATE, \
 | 
			
		||||
	ZIP,	COUNTRY,LATD,	LOND,	GRID, \
 | 
			
		||||
	DOB };
 | 
			
		||||
enum TAG {
 | 
			
		||||
	IGNORE,	KEY,	ALERT,	ERROR,	CALL,
 | 
			
		||||
	FNAME,	NAME,	ADDR1,	ADDR2,	STATE,
 | 
			
		||||
	ZIP,	COUNTRY,LATD,	LOND,	GRID,
 | 
			
		||||
	DOB
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pthread_t QRZ_thread;
 | 
			
		||||
bool QRZ_exit = false;
 | 
			
		||||
bool QRZ_enabled = false;
 | 
			
		||||
pthread_t* QRZ_thread = 0;
 | 
			
		||||
pthread_mutex_t qrz_mutex = PTHREAD_MUTEX_INITIALIZER;
 | 
			
		||||
pthread_cond_t qrz_cond = PTHREAD_COND_INITIALIZER;
 | 
			
		||||
 | 
			
		||||
static void *LOOKUP_loop(void *args);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -99,8 +98,6 @@ bool QRZGetXML(string& xmlpage);
 | 
			
		|||
int  bearing(const char *, const char *);
 | 
			
		||||
void qra(const char *, double &, double &);
 | 
			
		||||
void QRZ_disp_result();
 | 
			
		||||
void QRZ_subscription_query();
 | 
			
		||||
void HAMCALL_COM_query();
 | 
			
		||||
void QRZ_CD_query();
 | 
			
		||||
void Lookup_init(void);
 | 
			
		||||
void QRZclose(void);
 | 
			
		||||
| 
						 | 
				
			
			@ -113,11 +110,11 @@ bool HAMCALLget(string& htmlpage);
 | 
			
		|||
void HAMCALLquery();
 | 
			
		||||
 | 
			
		||||
bool parseQRZdetails(string &htmlpage);
 | 
			
		||||
int  getQRZdetails(string& htmlpage);
 | 
			
		||||
bool getQRZdetails(string& htmlpage);
 | 
			
		||||
void QRZ_DETAILS_query();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
QRZ *qCall;
 | 
			
		||||
QRZ *qCall = 0;
 | 
			
		||||
 | 
			
		||||
int bearing(const char *myqra, const char *dxqra) {
 | 
			
		||||
	double	lat1, lat1r, lon1;
 | 
			
		||||
| 
						 | 
				
			
			@ -162,19 +159,19 @@ void qra(const char *szqra, double &lat, double &lon) {
 | 
			
		|||
 | 
			
		||||
void clear_Lookup()
 | 
			
		||||
{
 | 
			
		||||
	lookup_name="";
 | 
			
		||||
	lookup_addr1="";
 | 
			
		||||
	lookup_addr2="";
 | 
			
		||||
	lookup_state="";
 | 
			
		||||
	lookup_zip="";
 | 
			
		||||
	lookup_country="";
 | 
			
		||||
	lookup_born="";
 | 
			
		||||
	lookup_fname="";
 | 
			
		||||
	lookup_gth="";
 | 
			
		||||
	lookup_grid="";
 | 
			
		||||
	lookup_latd="";
 | 
			
		||||
	lookup_lond="";
 | 
			
		||||
	lookup_notes="";
 | 
			
		||||
	lookup_name.clear();
 | 
			
		||||
	lookup_addr1.clear();
 | 
			
		||||
	lookup_addr2.clear();
 | 
			
		||||
	lookup_state.clear();
 | 
			
		||||
	lookup_zip.clear();
 | 
			
		||||
	lookup_country.clear();
 | 
			
		||||
	lookup_born.clear();
 | 
			
		||||
	lookup_fname.clear();
 | 
			
		||||
	lookup_qth.clear();
 | 
			
		||||
	lookup_grid.clear();
 | 
			
		||||
	lookup_latd.clear();
 | 
			
		||||
	lookup_lond.clear();
 | 
			
		||||
	lookup_notes.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -239,9 +236,9 @@ bool parse_xml(const string& xmlpage)
 | 
			
		|||
// refreshed by this response, or if not present, will be removed and we'll
 | 
			
		||||
// know to log in next time.
 | 
			
		||||
	if (xml) {
 | 
			
		||||
		qrzSessionKey="";
 | 
			
		||||
		qrzalert="";
 | 
			
		||||
		qrzerror="";
 | 
			
		||||
		qrzSessionKey.clear();
 | 
			
		||||
		qrzalert.clear();
 | 
			
		||||
		qrzerror.clear();
 | 
			
		||||
		clear_Lookup();
 | 
			
		||||
	}
 | 
			
		||||
// strings for storing the data we want to get out of the file
 | 
			
		||||
| 
						 | 
				
			
			@ -397,82 +394,54 @@ bool QRZGetXML(string& xmlpage)
 | 
			
		|||
 | 
			
		||||
void QRZ_disp_result()
 | 
			
		||||
{
 | 
			
		||||
   FL_LOCK();
 | 
			
		||||
   {
 | 
			
		||||
       if (lookup_fname.length() > 0) {
 | 
			
		||||
           string::size_type spacePos = lookup_fname.find(" ");
 | 
			
		||||
//    if fname is "ABC" then display "ABC"
 | 
			
		||||
// or if fname is "X Y" then display "X Y"
 | 
			
		||||
           if (spacePos == string::npos || (spacePos == 1)) {
 | 
			
		||||
               inpName->value(lookup_fname.c_str());
 | 
			
		||||
           }
 | 
			
		||||
// if fname is "ABC Y" then display "ABC"
 | 
			
		||||
           else if (spacePos == lookup_fname.length() - 2) {
 | 
			
		||||
               string fname="";
 | 
			
		||||
               fname.assign(lookup_fname, 0, spacePos);
 | 
			
		||||
               inpName->value(fname.c_str());
 | 
			
		||||
           }
 | 
			
		||||
// fname must be "ABC DEF" so display "ABC DEF"
 | 
			
		||||
           else {
 | 
			
		||||
               inpName->value(lookup_fname.c_str());
 | 
			
		||||
           }
 | 
			
		||||
       } else if (lookup_name.length() > 0) {
 | 
			
		||||
// only name is set; don't know first/last, so just show all
 | 
			
		||||
           inpName->value(lookup_name.c_str());
 | 
			
		||||
       }
 | 
			
		||||
   }
 | 
			
		||||
	ENSURE_THREAD(FLMAIN_TID);
 | 
			
		||||
 | 
			
		||||
   inpQth->value(lookup_gth.c_str());
 | 
			
		||||
   inpLoc->value(lookup_grid.c_str());
 | 
			
		||||
   if (!progdefaults.myLocator.empty()) {
 | 
			
		||||
       char buf[10];
 | 
			
		||||
       buf[0] = '\0';
 | 
			
		||||
       if (!lookup_grid.empty()) {
 | 
			
		||||
           int b = bearing( progdefaults.myLocator.c_str(), lookup_grid.c_str() );
 | 
			
		||||
           b+=rotoroffset;
 | 
			
		||||
           if (b<0) b+=360;
 | 
			
		||||
           if (b>=360) b-=360;
 | 
			
		||||
           snprintf(buf, sizeof(buf), "%03d", b);
 | 
			
		||||
       }
 | 
			
		||||
       inpAZ->value(buf);
 | 
			
		||||
   }
 | 
			
		||||
   inpNotes->value(lookup_notes.c_str());
 | 
			
		||||
   FL_UNLOCK();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void QRZ_subscription_query()
 | 
			
		||||
{
 | 
			
		||||
	if (!QRZ_enabled) {
 | 
			
		||||
		Lookup_init();
 | 
			
		||||
		if (!QRZ_enabled)
 | 
			
		||||
			return;
 | 
			
		||||
	if (lookup_fname.length() > 0) {
 | 
			
		||||
		string::size_type spacePos = lookup_fname.find(" ");
 | 
			
		||||
		//    if fname is "ABC" then display "ABC"
 | 
			
		||||
		// or if fname is "X Y" then display "X Y"
 | 
			
		||||
		if (spacePos == string::npos || (spacePos == 1)) {
 | 
			
		||||
			inpName->value(lookup_fname.c_str());
 | 
			
		||||
		}
 | 
			
		||||
		// if fname is "ABC Y" then display "ABC"
 | 
			
		||||
		else if (spacePos == lookup_fname.length() - 2) {
 | 
			
		||||
			string fname;
 | 
			
		||||
			fname.assign(lookup_fname, 0, spacePos);
 | 
			
		||||
			inpName->value(fname.c_str());
 | 
			
		||||
		}
 | 
			
		||||
		// fname must be "ABC DEF" so display "ABC DEF"
 | 
			
		||||
		else {
 | 
			
		||||
			inpName->value(lookup_fname.c_str());
 | 
			
		||||
		}
 | 
			
		||||
	} else if (lookup_name.length() > 0) {
 | 
			
		||||
		// only name is set; don't know first/last, so just show all
 | 
			
		||||
		inpName->value(lookup_name.c_str());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	DB_query = QRZNET;
 | 
			
		||||
	FL_LOCK();
 | 
			
		||||
	inpNotes->value(" *** Request sent to qrz.com ***");
 | 
			
		||||
	FL_UNLOCK();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HAMCALL_COM_query()
 | 
			
		||||
{
 | 
			
		||||
	if (!QRZ_enabled) {
 | 
			
		||||
		Lookup_init();
 | 
			
		||||
		if (!QRZ_enabled)
 | 
			
		||||
			return;
 | 
			
		||||
	inpQth->value(lookup_qth.c_str());
 | 
			
		||||
	inpLoc->value(lookup_grid.c_str());
 | 
			
		||||
	if (!progdefaults.myLocator.empty()) {
 | 
			
		||||
		char buf[10];
 | 
			
		||||
		buf[0] = '\0';
 | 
			
		||||
		if (!lookup_grid.empty()) {
 | 
			
		||||
			int b = bearing( progdefaults.myLocator.c_str(), lookup_grid.c_str() );
 | 
			
		||||
			if (b<0) b+=360;
 | 
			
		||||
			if (b>=360) b-=360;
 | 
			
		||||
			snprintf(buf, sizeof(buf), "%03d", b);
 | 
			
		||||
		}
 | 
			
		||||
		inpAZ->value(buf);
 | 
			
		||||
	}
 | 
			
		||||
	DB_query = HAMCALLNET;
 | 
			
		||||
	FL_LOCK();
 | 
			
		||||
	inpNotes->value(" *** Request sent to www.hamcall.net ***");
 | 
			
		||||
	FL_UNLOCK();	
 | 
			
		||||
	inpNotes->value(lookup_notes.c_str());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void QRZ_CD_query()
 | 
			
		||||
{
 | 
			
		||||
	ENSURE_THREAD(QRZ_TID);
 | 
			
		||||
 | 
			
		||||
	char srch[20];
 | 
			
		||||
	size_t snip;
 | 
			
		||||
	
 | 
			
		||||
	memset( srch, 0, 20 );
 | 
			
		||||
	memset( srch, 0, sizeof(srch) );
 | 
			
		||||
	strncpy( srch, callsign.c_str(), 6 );
 | 
			
		||||
	for (size_t i = 0; i < strlen(srch); i ++ )
 | 
			
		||||
		srch[i] = toupper(srch[i]);
 | 
			
		||||
| 
						 | 
				
			
			@ -482,42 +451,52 @@ void QRZ_CD_query()
 | 
			
		|||
		snip = lookup_fname.find(' ');
 | 
			
		||||
		if (snip != string::npos)
 | 
			
		||||
			lookup_fname.erase(snip, lookup_fname.length() - snip);
 | 
			
		||||
		lookup_gth = qCall->GetCity();
 | 
			
		||||
		lookup_gth.append(" ");
 | 
			
		||||
		lookup_gth.append(qCall->GetState());
 | 
			
		||||
		lookup_gth.append(" ");
 | 
			
		||||
		lookup_gth.append(qCall->GetZIP());
 | 
			
		||||
		lookup_grid = "";
 | 
			
		||||
		lookup_notes = "";
 | 
			
		||||
		lookup_qth = qCall->GetCity();
 | 
			
		||||
		lookup_qth.append(" ");
 | 
			
		||||
		lookup_qth.append(qCall->GetState());
 | 
			
		||||
		lookup_qth.append(" ");
 | 
			
		||||
		lookup_qth.append(qCall->GetZIP());
 | 
			
		||||
		lookup_grid.clear();
 | 
			
		||||
		lookup_notes.clear();
 | 
			
		||||
	} else {
 | 
			
		||||
		lookup_fname = "";
 | 
			
		||||
		lookup_gth = "";
 | 
			
		||||
		lookup_grid = "";
 | 
			
		||||
		lookup_born = "";
 | 
			
		||||
		lookup_notes = "Not found in CD database!";
 | 
			
		||||
		lookup_fname.clear();
 | 
			
		||||
		lookup_qth.clear();
 | 
			
		||||
		lookup_grid.clear();
 | 
			
		||||
		lookup_born.clear();
 | 
			
		||||
		lookup_notes = "Not found in CD database";
 | 
			
		||||
	}
 | 
			
		||||
	QRZ_disp_result();
 | 
			
		||||
	REQ(QRZ_disp_result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Lookup_init(void)
 | 
			
		||||
{
 | 
			
		||||
	QRZ_enabled = false;
 | 
			
		||||
	if (pthread_create(&QRZ_thread, NULL, LOOKUP_loop, NULL) < 0) {
 | 
			
		||||
		fl_message("QRZ init: pthread_create failed");
 | 
			
		||||
	ENSURE_THREAD(FLMAIN_TID);
 | 
			
		||||
 | 
			
		||||
	if (QRZ_thread)
 | 
			
		||||
		return;
 | 
			
		||||
	} 
 | 
			
		||||
	QRZ_enabled = true;
 | 
			
		||||
	QRZ_thread = new pthread_t;
 | 
			
		||||
	if (pthread_create(QRZ_thread, NULL, LOOKUP_loop, NULL) != 0) {
 | 
			
		||||
		LOG_PERROR("pthread_create");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void QRZclose(void)
 | 
			
		||||
{
 | 
			
		||||
	if (!QRZ_enabled) return;
 | 
			
		||||
// tell the QRZ thread to kill it self
 | 
			
		||||
	QRZ_exit = true;
 | 
			
		||||
// and then wait for it to die
 | 
			
		||||
	pthread_join(QRZ_thread, NULL);
 | 
			
		||||
	QRZ_enabled = false;
 | 
			
		||||
	QRZ_exit = false;
 | 
			
		||||
	ENSURE_THREAD(FLMAIN_TID);
 | 
			
		||||
 | 
			
		||||
	if (!QRZ_thread)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	pthread_kill(*QRZ_thread, SIGUSR2);
 | 
			
		||||
	DB_query = QRZ_EXIT;
 | 
			
		||||
	pthread_mutex_lock(&qrz_mutex);
 | 
			
		||||
	pthread_cond_signal(&qrz_cond);
 | 
			
		||||
	pthread_mutex_unlock(&qrz_mutex);
 | 
			
		||||
 | 
			
		||||
	pthread_join(*QRZ_thread, NULL);
 | 
			
		||||
	delete QRZ_thread;
 | 
			
		||||
	QRZ_thread = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void qthappend(string &qth, string &datum) {
 | 
			
		||||
| 
						 | 
				
			
			@ -528,34 +507,36 @@ void qthappend(string &qth, string &datum) {
 | 
			
		|||
 | 
			
		||||
void QRZAlert()
 | 
			
		||||
{
 | 
			
		||||
// test alert first as QRZ.com requires it be shown
 | 
			
		||||
	ENSURE_THREAD(FLMAIN_TID);
 | 
			
		||||
 | 
			
		||||
	// test alert first as QRZ.com requires it be shown
 | 
			
		||||
	if (!qrzalert.empty()) {
 | 
			
		||||
		FL_LOCK();
 | 
			
		||||
		inpNotes->value(qrzalert.c_str());
 | 
			
		||||
		qrzalert="";
 | 
			
		||||
		FL_UNLOCK();
 | 
			
		||||
	} else if (!qrzerror.empty()) {
 | 
			
		||||
		FL_LOCK();
 | 
			
		||||
		qrzalert.clear();
 | 
			
		||||
	}
 | 
			
		||||
	else if (!qrzerror.empty()) {
 | 
			
		||||
		inpNotes->value(qrzerror.c_str());
 | 
			
		||||
		qrzerror="";
 | 
			
		||||
		FL_UNLOCK();
 | 
			
		||||
		qrzerror.clear();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool QRZLogin(string& sessionpage) {
 | 
			
		||||
bool QRZLogin(string& sessionpage)
 | 
			
		||||
{
 | 
			
		||||
	bool ok = true;
 | 
			
		||||
	if (qrzSessionKey.empty()) {
 | 
			
		||||
		ok = getSessionKey(sessionpage);
 | 
			
		||||
		if (ok) ok = parseSessionKey(sessionpage);
 | 
			
		||||
	}
 | 
			
		||||
	if (!ok) {
 | 
			
		||||
		QRZAlert();
 | 
			
		||||
	}
 | 
			
		||||
	if (!ok)
 | 
			
		||||
		REQ(QRZAlert);
 | 
			
		||||
 | 
			
		||||
	return ok;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void QRZquery()
 | 
			
		||||
{
 | 
			
		||||
	ENSURE_THREAD(QRZ_TID);
 | 
			
		||||
 | 
			
		||||
	bool ok = true;
 | 
			
		||||
 | 
			
		||||
	string qrzpage;
 | 
			
		||||
| 
						 | 
				
			
			@ -572,29 +553,20 @@ void QRZquery()
 | 
			
		|||
	}
 | 
			
		||||
	if (ok) {
 | 
			
		||||
		parse_xml(qrzpage);
 | 
			
		||||
		if (!qrzalert.empty()) {
 | 
			
		||||
			FL_LOCK();
 | 
			
		||||
			inpNotes->value(qrzalert.c_str());
 | 
			
		||||
			qrzalert="";
 | 
			
		||||
			FL_UNLOCK();
 | 
			
		||||
		} else if (!qrzerror.empty()) {
 | 
			
		||||
			FL_LOCK();
 | 
			
		||||
			inpNotes->value(qrzerror.c_str());
 | 
			
		||||
			qrzerror="";
 | 
			
		||||
			FL_UNLOCK();
 | 
			
		||||
		} else {
 | 
			
		||||
			lookup_gth = "";
 | 
			
		||||
			qthappend(lookup_gth, lookup_addr1);
 | 
			
		||||
			qthappend(lookup_gth, lookup_addr2);
 | 
			
		||||
			qthappend(lookup_gth, lookup_state);
 | 
			
		||||
			qthappend(lookup_gth, lookup_country);
 | 
			
		||||
			QRZ_disp_result();
 | 
			
		||||
		if (!qrzalert.empty() || !qrzerror.empty())
 | 
			
		||||
			REQ(QRZAlert);
 | 
			
		||||
		else {
 | 
			
		||||
			lookup_qth.clear();
 | 
			
		||||
			qthappend(lookup_qth, lookup_addr1);
 | 
			
		||||
			qthappend(lookup_qth, lookup_addr2);
 | 
			
		||||
			qthappend(lookup_qth, lookup_state);
 | 
			
		||||
			qthappend(lookup_qth, lookup_country);
 | 
			
		||||
			REQ(QRZ_disp_result);
 | 
			
		||||
		}
 | 
			
		||||
	} 
 | 
			
		||||
	if (!ok) {
 | 
			
		||||
		FL_LOCK();
 | 
			
		||||
		inpNotes->value(qrzpage.c_str());
 | 
			
		||||
		FL_UNLOCK();
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		qrzerror = qrzpage;
 | 
			
		||||
		REQ(QRZAlert);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -623,13 +595,13 @@ void parse_html(const string& htmlpage)
 | 
			
		|||
	if ((p = htmlpage.find(HAMCALL_CITY)) != string::npos) { 
 | 
			
		||||
		p++;
 | 
			
		||||
		while ((uchar)htmlpage[p] < 128 && p < htmlpage.length())
 | 
			
		||||
			lookup_gth += htmlpage[p++];
 | 
			
		||||
		lookup_gth += ", ";
 | 
			
		||||
			lookup_qth += htmlpage[p++];
 | 
			
		||||
		lookup_qth += ", ";
 | 
			
		||||
	}
 | 
			
		||||
	if ((p = htmlpage.find(HAMCALL_STATE)) != string::npos) { 
 | 
			
		||||
		p++;
 | 
			
		||||
		while ((uchar)htmlpage[p] < 128 && p < htmlpage.length())
 | 
			
		||||
			lookup_gth += htmlpage[p++];
 | 
			
		||||
			lookup_qth += htmlpage[p++];
 | 
			
		||||
	}
 | 
			
		||||
	if ((p = htmlpage.find(HAMCALL_GRID)) != string::npos) { 
 | 
			
		||||
		p++;
 | 
			
		||||
| 
						 | 
				
			
			@ -662,16 +634,15 @@ bool HAMCALLget(string& htmlpage)
 | 
			
		|||
 | 
			
		||||
void HAMCALLquery()
 | 
			
		||||
{
 | 
			
		||||
	ENSURE_THREAD(QRZ_TID);
 | 
			
		||||
 | 
			
		||||
	string htmlpage;
 | 
			
		||||
 | 
			
		||||
	if (HAMCALLget(htmlpage)) {
 | 
			
		||||
	if (HAMCALLget(htmlpage))
 | 
			
		||||
		parse_html(htmlpage);
 | 
			
		||||
		QRZ_disp_result();
 | 
			
		||||
	} else {
 | 
			
		||||
		FL_LOCK();
 | 
			
		||||
		inpNotes->value(htmlpage.c_str());
 | 
			
		||||
		FL_UNLOCK();
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
		lookup_notes = htmlpage;
 | 
			
		||||
	REQ(QRZ_disp_result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -699,7 +670,7 @@ bool parseQRZdetails(string &htmlpage)
 | 
			
		|||
	clear_Lookup();
 | 
			
		||||
	
 | 
			
		||||
	if (htmlpage.find(NOT_FOUND) != string::npos) {
 | 
			
		||||
		lookup_gth = "NOT FOUND";
 | 
			
		||||
		lookup_qth = "NOT FOUND";
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -730,18 +701,18 @@ bool parseQRZdetails(string &htmlpage)
 | 
			
		|||
		snip += strlen(BEGIN_ADDR2);
 | 
			
		||||
		snip_end  = htmlpage.find(snip_end_RECORD, snip);
 | 
			
		||||
		lookup_addr2 = htmlpage.substr(snip, snip_end - snip);
 | 
			
		||||
		lookup_gth += lookup_addr2;
 | 
			
		||||
		lookup_qth += lookup_addr2;
 | 
			
		||||
	}	
 | 
			
		||||
 | 
			
		||||
	snip = htmlpage.find(BEGIN_COUNTRY);
 | 
			
		||||
	if (snip != string::npos) {
 | 
			
		||||
		while (lookup_gth[lookup_gth.length() -1] == ' ' || lookup_gth[lookup_gth.length() -1] == ',')
 | 
			
		||||
			lookup_gth.erase(lookup_gth.length() -1, 1);
 | 
			
		||||
		lookup_gth.append(", ");
 | 
			
		||||
		while (lookup_qth[lookup_qth.length() -1] == ' ' || lookup_qth[lookup_qth.length() -1] == ',')
 | 
			
		||||
			lookup_qth.erase(lookup_qth.length() -1, 1);
 | 
			
		||||
		lookup_qth.append(", ");
 | 
			
		||||
		snip += strlen(BEGIN_COUNTRY);
 | 
			
		||||
		snip_end  = htmlpage.find(snip_end_RECORD, snip);
 | 
			
		||||
		lookup_country = htmlpage.substr(snip, snip_end - snip);
 | 
			
		||||
		lookup_gth += lookup_country;
 | 
			
		||||
		lookup_qth += lookup_country;
 | 
			
		||||
	}	
 | 
			
		||||
 | 
			
		||||
	snip = htmlpage.find(BEGIN_GRID);
 | 
			
		||||
| 
						 | 
				
			
			@ -757,7 +728,7 @@ bool parseQRZdetails(string &htmlpage)
 | 
			
		|||
} 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int getQRZdetails(string& htmlpage)
 | 
			
		||||
bool getQRZdetails(string& htmlpage)
 | 
			
		||||
{
 | 
			
		||||
	string url_detail;
 | 
			
		||||
	url_detail =  "GET /detail/";
 | 
			
		||||
| 
						 | 
				
			
			@ -769,16 +740,15 @@ int getQRZdetails(string& htmlpage)
 | 
			
		|||
 | 
			
		||||
void QRZ_DETAILS_query()
 | 
			
		||||
{
 | 
			
		||||
	ENSURE_THREAD(QRZ_TID);
 | 
			
		||||
 | 
			
		||||
	string htmlpage;
 | 
			
		||||
 | 
			
		||||
	if (getQRZdetails(htmlpage)) {
 | 
			
		||||
	if (getQRZdetails(htmlpage))
 | 
			
		||||
		parseQRZdetails(htmlpage);
 | 
			
		||||
		QRZ_disp_result();
 | 
			
		||||
	} else {
 | 
			
		||||
		FL_LOCK();
 | 
			
		||||
		inpNotes->value(htmlpage.c_str());
 | 
			
		||||
		FL_UNLOCK();
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
		lookup_notes = htmlpage;
 | 
			
		||||
	REQ(QRZ_disp_result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -787,82 +757,85 @@ static void *LOOKUP_loop(void *args)
 | 
			
		|||
{
 | 
			
		||||
	SET_THREAD_ID(QRZ_TID);
 | 
			
		||||
 | 
			
		||||
	for (;;) {
 | 
			
		||||
// see if this thread has been canceled
 | 
			
		||||
		if (QRZ_exit)
 | 
			
		||||
			break;
 | 
			
		||||
		switch (DB_query) {
 | 
			
		||||
			case QRZCD :
 | 
			
		||||
				DB_query = NONE;
 | 
			
		||||
				break;
 | 
			
		||||
			case QRZNET :
 | 
			
		||||
				QRZquery();
 | 
			
		||||
				DB_query = NONE;
 | 
			
		||||
				break;
 | 
			
		||||
			case HAMCALLNET :
 | 
			
		||||
				HAMCALLquery();
 | 
			
		||||
				DB_query = NONE;
 | 
			
		||||
				break;
 | 
			
		||||
			case QRZDETAILS :
 | 
			
		||||
				QRZ_DETAILS_query();
 | 
			
		||||
				DB_query = NONE;
 | 
			
		||||
				break;
 | 
			
		||||
			case NONE:
 | 
			
		||||
			default :
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		MilliSleep(100);
 | 
			
		||||
	{
 | 
			
		||||
		sigset_t usr2;
 | 
			
		||||
		sigemptyset(&usr2);
 | 
			
		||||
		sigaddset(&usr2, SIGUSR2);
 | 
			
		||||
		pthread_sigmask(SIG_UNBLOCK, &usr2, NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (;;) {
 | 
			
		||||
		pthread_mutex_lock(&qrz_mutex);
 | 
			
		||||
		pthread_cond_wait(&qrz_cond, &qrz_mutex);
 | 
			
		||||
		pthread_mutex_unlock(&qrz_mutex);
 | 
			
		||||
 | 
			
		||||
		switch (DB_query) {
 | 
			
		||||
		case QRZ_CD :
 | 
			
		||||
			QRZ_CD_query();
 | 
			
		||||
			break;
 | 
			
		||||
		case QRZ_NET_SUB :
 | 
			
		||||
			QRZquery();
 | 
			
		||||
			break;
 | 
			
		||||
		case QRZ_HAMCALL :
 | 
			
		||||
			HAMCALLquery();
 | 
			
		||||
			break;
 | 
			
		||||
		case QRZ_NET_HTML :
 | 
			
		||||
			QRZ_DETAILS_query();
 | 
			
		||||
			break;
 | 
			
		||||
		case QRZ_EXIT:
 | 
			
		||||
			return NULL;
 | 
			
		||||
		default:
 | 
			
		||||
			LOG_ERROR("Bad query type %d", DB_query);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CALLSIGNquery()
 | 
			
		||||
{
 | 
			
		||||
	{
 | 
			
		||||
		FL_LOCK();
 | 
			
		||||
		callsign = inpCall->value();
 | 
			
		||||
// Filter callsign for nonesense characters (remove all but [A-Z0-9/])
 | 
			
		||||
		string ncall = "";
 | 
			
		||||
		for (unsigned int i = 0; i < callsign.length(); i++) {
 | 
			
		||||
			const char ch = callsign.at(i);
 | 
			
		||||
			if ((ch >= 'A' && ch <= 'Z') ||
 | 
			
		||||
			    (ch >= 'a' && ch <= 'z') ||
 | 
			
		||||
			    (ch >= '0' && ch <= '9') ||
 | 
			
		||||
			    (ch == '/')) {
 | 
			
		||||
				ncall += (ch);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		inpCall->value(ncall.c_str());
 | 
			
		||||
		callsign = inpCall->value();
 | 
			
		||||
		FL_UNLOCK();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (callsign.length() == 0)
 | 
			
		||||
		return;
 | 
			
		||||
	switch (progdefaults.QRZ) {
 | 
			
		||||
		case 1 :
 | 
			
		||||
			QRZ_subscription_query();
 | 
			
		||||
			break;
 | 
			
		||||
		case 2 :
 | 
			
		||||
			if (!qCall)
 | 
			
		||||
				qCall = new QRZ( "callbkc" );
 | 
			
		||||
			if (progdefaults.QRZchanged == true) {
 | 
			
		||||
				qCall->NewDBpath("callbkc");
 | 
			
		||||
				progdefaults.QRZchanged = false;
 | 
			
		||||
			}
 | 
			
		||||
			if (qCall && qCall->getQRZvalid())
 | 
			
		||||
				QRZ_CD_query();
 | 
			
		||||
			DB_query = NONE;
 | 
			
		||||
			break;
 | 
			
		||||
		case 3:
 | 
			
		||||
			HAMCALL_COM_query();
 | 
			
		||||
			break;
 | 
			
		||||
		case 4:
 | 
			
		||||
			QRZ_DETAILS_query();
 | 
			
		||||
		case 0:
 | 
			
		||||
		default :
 | 
			
		||||
			break;
 | 
			
		||||
	}			
 | 
			
		||||
}	
 | 
			
		||||
	ENSURE_THREAD(FLMAIN_TID);
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
	if (!QRZ_thread)
 | 
			
		||||
		Lookup_init();
 | 
			
		||||
 | 
			
		||||
	// Filter callsign for nonsense characters (remove all but [A-Za-z0-9/])
 | 
			
		||||
	callsign.clear();
 | 
			
		||||
	for (const char* p = inpCall->value(); *p; p++)
 | 
			
		||||
		if (isalnum(*p) || *p == '/')
 | 
			
		||||
			callsign += *p;
 | 
			
		||||
	if (callsign.empty())
 | 
			
		||||
		return;
 | 
			
		||||
	if (callsign != inpCall->value())
 | 
			
		||||
		inpCall->value(callsign.c_str());
 | 
			
		||||
 | 
			
		||||
	switch (DB_query = static_cast<qrz_query_t>(progdefaults.QRZ)) {
 | 
			
		||||
	case QRZ_NET_SUB: case QRZ_NET_HTML:
 | 
			
		||||
		inpNotes->value("Request sent to qrz.com...");
 | 
			
		||||
		break;
 | 
			
		||||
	case QRZ_HAMCALL:
 | 
			
		||||
		inpNotes->value("Request sent to www.hamcall.net...");
 | 
			
		||||
		break;
 | 
			
		||||
	case QRZ_CD:
 | 
			
		||||
		if (!qCall)
 | 
			
		||||
			qCall = new QRZ( "callbkc" );
 | 
			
		||||
		if (progdefaults.QRZchanged) {
 | 
			
		||||
			qCall->NewDBpath("callbkc");
 | 
			
		||||
			progdefaults.QRZchanged = false;
 | 
			
		||||
		}
 | 
			
		||||
		if (!qCall->getQRZvalid()) {
 | 
			
		||||
			inpNotes->value("QRZ DB error");
 | 
			
		||||
			DB_query = QRZ_NONE;
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		LOG_ERROR("Bad query type %d", DB_query);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pthread_mutex_lock(&qrz_mutex);
 | 
			
		||||
	pthread_cond_signal(&qrz_cond);
 | 
			
		||||
	pthread_mutex_unlock(&qrz_mutex);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue