kopia lustrzana https://github.com/jamescoxon/dl-fldigi
296 wiersze
12 KiB
C++
296 wiersze
12 KiB
C++
// ----------------------------------------------------------------------------
|
|
// textio.cxx
|
|
//
|
|
// Copyright (C) 2006-2010
|
|
// Dave Freese, W1HKJ
|
|
//
|
|
// This file is part of fldigi.
|
|
//
|
|
// Fldigi is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Fldigi is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with fldigi. If not, see <http://www.gnu.org/licenses/>.
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include <config.h>
|
|
|
|
#include <string>
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
|
|
#include "textio.h"
|
|
#include "lgbook.h"
|
|
|
|
using namespace std;
|
|
|
|
#ifdef __WOE32__
|
|
static const char *szEOL = "\r\n";
|
|
#else
|
|
static const char *szEOL = "\n";
|
|
#endif
|
|
|
|
char * cTextFile::adif_to_date( char *s) {
|
|
static char date[9];
|
|
strcpy(date, " / / ");
|
|
for (int i = 0; i < 2; i++) {
|
|
date[i+6] = s[i+2];
|
|
date[i] = s[i+4];
|
|
date[i+3] = s[i+6];
|
|
}
|
|
return date;
|
|
}
|
|
|
|
char * cTextFile::adif_to_time( char *s) {
|
|
static char time[6];
|
|
strcpy(time, " : ");
|
|
for (int i = 0; i < 2; i++) {
|
|
time[i] = s[i];
|
|
time[i+3] = s[i+2];
|
|
}
|
|
return time;
|
|
}
|
|
|
|
void cTextFile::writeCSVHeader(FILE *txtFile)
|
|
{
|
|
if (btnSelectQSOdateOn->value()) fprintf (txtFile, "%s", "\"DATE_ON\"");
|
|
if (btnSelectQSOdateOff->value())fprintf (txtFile, "%s", ",\"DATE_OFF\"");
|
|
if (btnSelectTimeON->value()) fprintf (txtFile, "%s", ",\"ON\"");
|
|
if (btnSelectTimeOFF->value()) fprintf (txtFile, "%s", ",\"OFF\"");
|
|
if (btnSelectCall->value()) fprintf (txtFile, "%s", ",\"CALL\"");
|
|
if (btnSelectName->value()) fprintf (txtFile, "%s", ",\"NAME\"");
|
|
if (btnSelectBand->value()) fprintf (txtFile, "%s", ",\"BAND\"");
|
|
if (btnSelectFreq->value()) fprintf (txtFile, "%s", ",\"FREQ\"");
|
|
if (btnSelectMode->value()) fprintf (txtFile, "%s", ",\"MODE\"");
|
|
if (btnSelectTX_pwr->value()) fprintf (txtFile, "%s", ",\"TX_PWR\"");
|
|
if (btnSelectRSTsent->value()) fprintf (txtFile, "%s", ",\"RSTSENT\"");
|
|
if (btnSelectRSTrcvd->value()) fprintf (txtFile, "%s", ",\"RSTRCVD\"");
|
|
if (btnSelectQth->value()) fprintf (txtFile, "%s", ",\"QTH\"");
|
|
if (btnSelectState->value()) fprintf (txtFile, "%s", ",\"ST\"");
|
|
if (btnSelectProvince->value()) fprintf (txtFile, "%s", ",\"PR\"");
|
|
if (btnSelectCNTY->value()) fprintf (txtFile, "%s", ",\"CNTY\"");
|
|
if (btnSelectCountry->value()) fprintf (txtFile, "%s", ",\"CNTRY\"");
|
|
if (btnSelectDXCC->value()) fprintf (txtFile, "%s", ",\"DXCC\"");
|
|
if (btnSelectIOTA->value()) fprintf (txtFile, "%s", ",\"IOTA\"");
|
|
if (btnSelectCONT->value()) fprintf (txtFile, "%s", ",\"CONT\"");
|
|
if (btnSelectITUZ->value()) fprintf (txtFile, "%s", ",\"ITUZ\"");
|
|
if (btnSelectLOC->value()) fprintf (txtFile, "%s", ",\"GRIDSQUARE\"");
|
|
if (btnSelectQSLrcvd->value()) fprintf (txtFile, "%s", ",\"QSL_RCVD\"");
|
|
if (btnSelectQSLsent->value()) fprintf (txtFile, "%s", ",\"QSL_SENT\"");
|
|
if (btnSelectNotes->value()) fprintf (txtFile, "%s", ",\"NOTES\"");
|
|
if (btnSelectSerialIN->value()) fprintf (txtFile, "%s", ",\"SERIAL RCVD\"");
|
|
if (btnSelectSerialOUT->value()) fprintf (txtFile, "%s", ",\"SERIAL_SENT\"");
|
|
if (btnSelectXchgIn->value()) fprintf (txtFile, "%s", ",\"XCHG1\"");
|
|
if (btnSelectMyXchg->value()) fprintf (txtFile, "%s", ",\"MYXCHG\"");
|
|
fprintf (txtFile, "%s", szEOL);
|
|
}
|
|
|
|
int cTextFile::writeCSVFile (const char *fname, cQsoDb *db) {
|
|
cQsoRec *pRec = (cQsoRec *)0;
|
|
FILE *txtFile = fopen (fname, "w");
|
|
if (!txtFile) return 1;
|
|
|
|
if (txtFile) {
|
|
writeCSVHeader(txtFile);
|
|
for (int i = 0; i < db->nbrRecs(); i++) {
|
|
pRec = db->getRec(i);
|
|
if (pRec->getField(EXPORT)[0] == 'E') {
|
|
if (btnSelectQSOdateOn->value())
|
|
fprintf (txtFile, "\"%s\"", pRec->getField(QSO_DATE));
|
|
if (btnSelectQSOdateOff->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(QSO_DATE_OFF));
|
|
if (btnSelectTimeON->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(TIME_ON));
|
|
if (btnSelectTimeOFF->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(TIME_OFF));
|
|
if (btnSelectCall->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(CALL));
|
|
if (btnSelectName->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(NAME));
|
|
if (btnSelectBand->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(BAND));
|
|
if (btnSelectFreq->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(FREQ));
|
|
if (btnSelectMode->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(MODE));
|
|
if (btnSelectTX_pwr->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(TX_PWR));
|
|
if (btnSelectRSTsent->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(RST_SENT));
|
|
if (btnSelectRSTrcvd->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(RST_RCVD));
|
|
if (btnSelectQth->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(QTH));
|
|
if (btnSelectState->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(STATE));
|
|
if (btnSelectProvince->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(VE_PROV));
|
|
if (btnSelectCNTY->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(CNTY));
|
|
if (btnSelectCountry->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(COUNTRY));
|
|
if (btnSelectDXCC->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(DXCC));
|
|
if (btnSelectIOTA->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(IOTA));
|
|
if (btnSelectCONT->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(CONT));
|
|
if (btnSelectITUZ->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(ITUZ));
|
|
if (btnSelectLOC->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(GRIDSQUARE));
|
|
if (btnSelectQSLrcvd->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(QSLRDATE));
|
|
if (btnSelectQSLsent->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(QSLSDATE));
|
|
if (btnSelectNotes->value()) {
|
|
string temp = pRec->getField(NOTES);
|
|
for (size_t n = 0; n < temp.length(); n++)
|
|
if (temp[n] == '\r' || temp[n] == '\n') temp[n] = '-';
|
|
fprintf (txtFile, ",\"%s\"", temp.c_str());
|
|
}
|
|
if (btnSelectSerialIN->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(SRX));
|
|
if (btnSelectSerialOUT->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(STX));
|
|
if (btnSelectXchgIn->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(XCHG1));
|
|
if (btnSelectMyXchg->value())
|
|
fprintf (txtFile, ",\"%s\"", pRec->getField(MYXCHG));
|
|
fprintf (txtFile, "%s", szEOL);
|
|
pRec->putField(EXPORT,"");
|
|
db->qsoUpdRec(i, pRec);
|
|
}
|
|
}
|
|
fclose (txtFile);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// text file in fixed fields
|
|
void cTextFile::writeTXTHeader(FILE *txtFile)
|
|
{
|
|
if (btnSelectQSOdateOn->value()) fprintf (txtFile, "%-10s", "DATE_ON");
|
|
if (btnSelectQSOdateOff->value())fprintf (txtFile, "%-10s", "DATE_OFF");
|
|
if (btnSelectTimeON->value()) fprintf (txtFile, "%-6s", "ON");
|
|
if (btnSelectTimeOFF->value()) fprintf (txtFile, "%-6s", "OFF");
|
|
if (btnSelectCall->value()) fprintf (txtFile, "%-10s", "CALL");
|
|
if (btnSelectName->value()) fprintf (txtFile, "%-15s", "NAME");
|
|
if (btnSelectBand->value()) fprintf (txtFile, "%-7s", "BAND");
|
|
if (btnSelectFreq->value()) fprintf (txtFile, "%-12s", "FREQ");
|
|
if (btnSelectMode->value()) fprintf (txtFile, "%-8s", "MODE");
|
|
if (btnSelectTX_pwr->value()) fprintf (txtFile, "%-8s", "TX_PWR");
|
|
|
|
if (btnSelectRSTsent->value()) fprintf (txtFile, "%-6s", "RSTX");
|
|
if (btnSelectRSTrcvd->value()) fprintf (txtFile, "%-6s", "RSTR");
|
|
if (btnSelectQth->value()) fprintf (txtFile, "%-20s", "QTH");
|
|
if (btnSelectState->value()) fprintf (txtFile, "%-5s", "ST");
|
|
if (btnSelectProvince->value()) fprintf (txtFile, "%-5s", "PR");
|
|
if (btnSelectCountry->value()) fprintf (txtFile, "%-15s", "CNTRY");
|
|
if (btnSelectCNTY->value()) fprintf (txtFile, "%-8s", "CNTY");
|
|
if (btnSelectDXCC->value()) fprintf (txtFile, "%-8s", "DXCC");
|
|
if (btnSelectIOTA->value()) fprintf (txtFile, "%-8s", "IOTA");
|
|
if (btnSelectCONT->value()) fprintf (txtFile, "%-8s", "CONT");
|
|
if (btnSelectITUZ->value()) fprintf (txtFile, "%-8s", "ITUZ");
|
|
if (btnSelectLOC->value()) fprintf (txtFile, "%-15s", "GRIDSQUARE");
|
|
|
|
if (btnSelectQSLrcvd->value()) fprintf (txtFile, "%-10s", "QSLR");
|
|
if (btnSelectQSLsent->value()) fprintf (txtFile, "%-10s", "QSLS");
|
|
if (btnSelectNotes->value()) fprintf (txtFile, "%-80s", "NOTES");
|
|
if (btnSelectSerialIN->value()) fprintf (txtFile, "%-7s", "SRX");
|
|
if (btnSelectSerialOUT->value()) fprintf (txtFile, "%-7s", "STX");
|
|
if (btnSelectXchgIn->value()) fprintf (txtFile, "%-15s", "XCHG1");
|
|
if (btnSelectMyXchg->value()) fprintf (txtFile, "%-15s", "MYXCHG");
|
|
fprintf (txtFile, "%s", szEOL);
|
|
}
|
|
|
|
int cTextFile::writeTXTFile (const char *fname, cQsoDb *db) {
|
|
cQsoRec *pRec = (cQsoRec *)0;
|
|
FILE *txtFile = fopen (fname, "w");
|
|
if (!txtFile) return 1;
|
|
|
|
if (txtFile) {
|
|
writeTXTHeader(txtFile);
|
|
for (int i = 0; i < db->nbrRecs(); i++) {
|
|
pRec = db->getRec(i);
|
|
if (pRec->getField(EXPORT)[0] == 'E') {
|
|
if (btnSelectQSOdateOn->value())
|
|
fprintf (txtFile, "%-10s", pRec->getField(QSO_DATE));
|
|
if (btnSelectQSOdateOff->value())
|
|
fprintf (txtFile, "%-10s", pRec->getField(QSO_DATE_OFF));
|
|
if (btnSelectTimeON->value())
|
|
fprintf (txtFile, "%-8s", pRec->getField(TIME_ON));
|
|
if (btnSelectTimeOFF->value())
|
|
fprintf (txtFile, "%-8s", pRec->getField(TIME_OFF));
|
|
if (btnSelectCall->value())
|
|
fprintf (txtFile, "%-10s", pRec->getField(CALL));
|
|
if (btnSelectName->value())
|
|
fprintf (txtFile, "%-15s", pRec->getField(NAME));
|
|
if (btnSelectBand->value())
|
|
fprintf (txtFile, "%-7s", pRec->getField(BAND));
|
|
if (btnSelectFreq->value())
|
|
fprintf (txtFile, "%-12s", pRec->getField(FREQ));
|
|
if (btnSelectMode->value())
|
|
fprintf (txtFile, "%-8s", pRec->getField(MODE));
|
|
if (btnSelectTX_pwr->value())
|
|
fprintf (txtFile, "%-8s", pRec->getField(TX_PWR));
|
|
if (btnSelectRSTsent->value())
|
|
fprintf (txtFile, "%-6s", pRec->getField(RST_SENT));
|
|
if (btnSelectRSTrcvd->value())
|
|
fprintf (txtFile, "%-6s", pRec->getField(RST_RCVD));
|
|
if (btnSelectQth->value())
|
|
fprintf (txtFile, "%-20s", pRec->getField(QTH));
|
|
if (btnSelectState->value())
|
|
fprintf (txtFile, "%-5s", pRec->getField(STATE));
|
|
if (btnSelectProvince->value())
|
|
fprintf (txtFile, "%-5s", pRec->getField(VE_PROV));
|
|
if (btnSelectCountry->value())
|
|
fprintf (txtFile, "%-15s", pRec->getField(COUNTRY));
|
|
if (btnSelectCNTY->value())
|
|
fprintf (txtFile, "%-8s", pRec->getField(CNTY));
|
|
if (btnSelectDXCC->value())
|
|
fprintf (txtFile, "%-8s", pRec->getField(DXCC));
|
|
if (btnSelectIOTA->value())
|
|
fprintf (txtFile, "%-8s", pRec->getField(IOTA));
|
|
if (btnSelectCONT->value())
|
|
fprintf (txtFile, "%-8s", pRec->getField(CONT));
|
|
if (btnSelectITUZ->value())
|
|
fprintf (txtFile, "%-8s", pRec->getField(ITUZ));
|
|
if (btnSelectLOC->value())
|
|
fprintf (txtFile, "%-15s", pRec->getField(GRIDSQUARE));
|
|
if (btnSelectQSLrcvd->value())
|
|
fprintf (txtFile, "%-10s", pRec->getField(QSLRDATE));
|
|
if (btnSelectQSLsent->value())
|
|
fprintf (txtFile, "%-10s", pRec->getField(QSLSDATE));
|
|
if (btnSelectNotes->value()) {
|
|
string temp = pRec->getField(NOTES);
|
|
for (size_t n = 0; n < temp.length(); n++)
|
|
if (temp[n] == '\n') temp[n] = ';';
|
|
fprintf (txtFile, "%-80s", temp.c_str());
|
|
}
|
|
if (btnSelectSerialIN->value())
|
|
fprintf (txtFile, "%-7s", pRec->getField(SRX));
|
|
if (btnSelectSerialOUT->value())
|
|
fprintf (txtFile, "%-7s", pRec->getField(STX));
|
|
if (btnSelectXchgIn->value())
|
|
fprintf (txtFile, "%-15s", pRec->getField(XCHG1));
|
|
if (btnSelectMyXchg->value())
|
|
fprintf (txtFile, "%-15s", pRec->getField(MYXCHG));
|
|
fprintf (txtFile, "%s", szEOL);
|
|
pRec->putField(EXPORT,"");
|
|
db->qsoUpdRec(i, pRec);
|
|
}
|
|
}
|
|
fclose (txtFile);
|
|
}
|
|
return 0;
|
|
}
|
|
|