Clean up callsign search code

Ensure that the QRZ html scraper runs inside the lookup thread
pull/2/head
Stelios Bounanos 2008-11-03 21:33:44 +00:00
rodzic 7013c62580
commit 71b9b489c4
7 zmienionych plików z 353 dodań i 427 usunięć

Wyświetl plik

@ -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);

Wyświetl plik

@ -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 {

Wyświetl plik

@ -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;

Wyświetl plik

@ -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", "") \

Wyświetl plik

@ -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

Wyświetl plik

@ -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);

Wyświetl plik

@ -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);
}