/*
xlog - GTK+ logging program for amateur radio operators
Copyright (C) 2001 - 2007 Joop Stakenborg
This file is part of xlog.
Xlog 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.
Xlog 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 xlog. If not, see .
*/
/*
* labels.c - support for glabels, export some fields in a TAB separated way
*/
#include
#include
#include
#include
#include "logfile.h"
#include "preferences.h"
#include "wwl.h"
/*
* file fields
*/
static gint labels_open (LOGDB *);
static void labels_close (LOGDB *);
static gint labels_create (LOGDB *);
static gint labels_qso_append (LOGDB *, const qso_t *);
static gint labels_qso_foreach (LOGDB *,
gint (*fn) (LOGDB *, qso_t *, gpointer arg), gpointer arg);
extern preferencestype preferences;
const struct log_ops labels_ops = {
.open = labels_open,
.close = labels_close,
.create = labels_create,
.qso_append = labels_qso_append,
.qso_foreach = labels_qso_foreach,
.type = TYPE_LABELS,
.name = "Labels",
.extension = ".labels",
};
/*
* open for read
*/
gint
labels_open (LOGDB * handle)
{
FILE *fp;
fp = fopen (handle->path, "r");
if (!fp)
return -1;
handle->priv = (gpointer) fp;
return 0;
}
/*
* open for write
*/
gint
labels_create (LOGDB * handle)
{
FILE *fp;
fp = fopen (handle->path, "w");
if (!fp)
return -1;
handle->priv = (gpointer) fp;
return 0;
}
void
labels_close (LOGDB * handle)
{
FILE *fp = (FILE *) handle->priv;
fclose (fp);
}
gint
labels_qso_append (LOGDB * handle, const qso_t * q)
{
FILE *fp = (FILE *) handle->priv;
gint kms, miles, l, result;
if (preferences.saveastsv2[0] == '1')
{
if (q[DATE]) fprintf (fp, "%s\t", q[DATE]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[2] == '1')
{
if (q[GMT]) fprintf (fp, "%s\t", q[GMT]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[4] == '1')
{
if (q[GMTEND]) fprintf (fp, "%s\t", q[GMTEND]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[6] == '1')
{
if (q[CALL]) fprintf (fp, "%s\t", q[CALL]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[8] == '1')
{
if (q[BAND]) fprintf (fp, "%s\t", q[BAND]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[10] == '1')
{
if (q[MODE]) fprintf (fp, "%s\t", q[MODE]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[12] == '1')
{
if (q[RST]) fprintf (fp, "%s\t", q[RST]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[14] == '1')
{
if (q[MYRST]) fprintf (fp, "%s\t", q[MYRST]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[16] == '1')
{
if (q[AWARDS]) fprintf (fp, "%s\t", q[AWARDS]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[18] == '1')
{
if (q[QSLOUT]) fprintf (fp, "%s\t", q[QSLOUT]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[20] == '1')
{
if (q[QSLIN]) fprintf (fp, "%s\t", q[QSLIN]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[22] == '1')
{
if (q[POWER]) fprintf (fp, "%s\t", q[POWER]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[24] == '1')
{
if (q[NAME]) fprintf (fp, "%s\t", q[NAME]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[26] == '1')
{
if (q[QTH]) fprintf (fp, "%s\t", q[QTH]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[28] == '1')
{
if (q[LOCATOR])
{
if (preferences.tsvcalc == 0)
fprintf (fp, "%s\t", q[LOCATOR]);
else
{
result = wwl (preferences.locator, q[LOCATOR], &kms, &l);
if (result == 0)
{
if (preferences.units == 1)
fprintf (fp, "%s\t%d\t%d\t", q[LOCATOR], kms, l);
else
{
miles = (gint) (kms / 1.609);
fprintf (fp, "%s\t%d\t%d\t", q[LOCATOR], miles, l);
}
}
else
fprintf (fp, "%s\t%d\t%d\t", q[LOCATOR], 0, 0);
}
}
else
{
if (preferences.tsvcalc == 0)
fprintf (fp, "\t");
else
fprintf (fp, "\t\t\t");
}
}
if (preferences.saveastsv2[30] == '1')
{
if (q[U1]) fprintf (fp, "%s\t", q[U1]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[32] == '1')
{
if (q[U2]) fprintf (fp, "%s\t", q[U2]); else fprintf (fp, "\t");
}
if (preferences.saveastsv2[34] == '1')
{
if (q[REMARKS]) fprintf (fp, "%s\t", q[REMARKS]); else fprintf (fp, "\t");
}
fprintf (fp, "\n");
return 0;
}
gint labels_qso_foreach
(LOGDB * handle, gint (*fn) (LOGDB *, qso_t *, gpointer arg), gpointer arg)
{
return 1;
}