1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <qstringlist.h>
#include <qstring.h>
#include <qtextstream.h>
#include <qnetworkprotocol.h>
#include <qurloperator.h>
#include "netaccess.h"
#include "http.h"
NetAccess::NetAccess() {
status = true;
connect(&op, SIGNAL(data( const QByteArray &, QNetworkOperation * )),
this, SLOT(slotData(const QByteArray &)) );
connect(&op, SIGNAL(finished(QNetworkOperation *)),
this, SLOT(slotFinished(QNetworkOperation *)) );
}
QStringList NetAccess::getChoices(QString server, QString key, QString value,
bool exact) {
QStringList results;
if (key == "Formula") {
// put atoms in proper order
value = Rearrange(value);
}
QString cmd;
cmd.append("http://");
cmd.append(server);
cmd.append("/cgi-bin/xdcdb?key=");
cmd.append(key);
cmd.append("&value=");
cmd.append(value);
cmd.append("&em=");
if (exact)
cmd.append("true");
else
cmd.append("false");
cout << cmd << endl;
HTTP if1(cmd);
if1.exec();
cout << endl << "Results:" << endl << if1.Data() << endl;
QString testq = if1.Data();
QTextStream in1(&testq, IO_ReadOnly);
bool saveflag = false;
QString tmpl;
do {
tmpl = in1.readLine();
if (tmpl == "XXX") { saveflag = true; continue; }
if (tmpl == "YYY") { saveflag = false; continue; }
if (saveflag) results.append(tmpl);
} while (!in1.atEnd());
return results; // what a program should always do!
}
QString NetAccess::getFile(QString server, QString fn) {
QString cmd, wholefile;
cmd.append("http://");
cmd.append(server);
cmd.append("/cgi-bin/getfile?name=");
cmd.append(fn);
HTTP if1(cmd);
if1.exec();
cout << endl << "Results:" << endl << if1.Data() << endl;
wholefile = if1.Data();
return wholefile;
}
QString NetAccess::Rearrange(QString key) {
QString key1, subkey, subnum;
int cc;
bool addflag;
QStringList allatoms;
do {
cout << key << endl;
// parse out element
subkey = "";
addflag = false;
subkey.append(key[0]);
for (cc = 1; cc < key.length(); cc++) {
if (key[cc].category() == QChar::Letter_Uppercase) {
allatoms.append(subkey);
key.remove(0, cc);
addflag = true;
break;
} else {
subkey.append(key[cc]);
}
}
if (addflag == false) {
allatoms.append(subkey);
key.remove(0, cc);
}
} while (key.length() > 0);
cout << allatoms.count() << endl;
QString sym, n1;
allatoms.sort();
if (allatoms.count() > 0) {
for (QStringList::Iterator ir = allatoms.begin();
ir != allatoms.end(); ++ir) {
key1.append(*ir);
}
}
return key1;
}
void NetAccess::slotData(const QByteArray &d1) {
htfile.append(d1);
}
void NetAccess::slotFinished(QNetworkOperation *op) {
cout << "Finished network access" << endl;
status = false;
}
|