2013-09-09 08:59:03 +00:00
|
|
|
#include "subsurfacestartup.h"
|
2013-10-16 02:54:15 +00:00
|
|
|
#include "ssrf-version.h"
|
2013-09-09 08:59:03 +00:00
|
|
|
#include <stdbool.h>
|
2013-10-05 07:29:09 +00:00
|
|
|
#include <string.h>
|
2013-10-06 15:55:58 +00:00
|
|
|
#include "gettext.h"
|
2013-01-11 01:55:44 +00:00
|
|
|
struct preferences prefs;
|
|
|
|
struct preferences default_prefs = {
|
|
|
|
.units = SI_UNITS,
|
2013-06-03 12:08:49 +00:00
|
|
|
.unit_system = METRIC,
|
2013-01-11 01:55:44 +00:00
|
|
|
.pp_graphs = {
|
|
|
|
.po2 = FALSE,
|
|
|
|
.pn2 = FALSE,
|
|
|
|
.phe = FALSE,
|
|
|
|
.po2_threshold = 1.6,
|
|
|
|
.pn2_threshold = 4.0,
|
|
|
|
.phe_threshold = 13.0,
|
|
|
|
},
|
2013-01-14 00:24:58 +00:00
|
|
|
.mod = FALSE,
|
|
|
|
.mod_ppO2 = 1.6,
|
|
|
|
.ead = FALSE,
|
2013-05-28 18:21:27 +00:00
|
|
|
.profile_dc_ceiling = TRUE,
|
2013-01-11 01:55:44 +00:00
|
|
|
.profile_red_ceiling = FALSE,
|
|
|
|
.profile_calc_ceiling = FALSE,
|
|
|
|
.calc_ceiling_3m_incr = FALSE,
|
2013-05-28 18:21:27 +00:00
|
|
|
.gflow = 30,
|
|
|
|
.gfhigh = 75,
|
|
|
|
.font_size = 14.0,
|
|
|
|
.show_invalid = FALSE,
|
2013-09-18 12:31:15 +00:00
|
|
|
.show_time = FALSE,
|
2013-10-14 21:48:44 +00:00
|
|
|
.show_sac = FALSE,
|
2013-01-11 01:55:44 +00:00
|
|
|
};
|
2011-09-07 02:07:17 +00:00
|
|
|
|
2013-05-29 21:00:26 +00:00
|
|
|
struct units *get_units()
|
|
|
|
{
|
|
|
|
return &prefs.units;
|
|
|
|
}
|
|
|
|
|
2011-09-20 19:40:34 +00:00
|
|
|
/* random helper functions, used here or elsewhere */
|
2011-08-31 01:40:25 +00:00
|
|
|
static int sortfn(const void *_a, const void *_b)
|
|
|
|
{
|
2013-09-09 08:59:03 +00:00
|
|
|
const struct dive *a = (const struct dive*) *(void **)_a;
|
|
|
|
const struct dive *b = (const struct dive*) *(void **)_b;
|
2011-08-31 01:40:25 +00:00
|
|
|
|
|
|
|
if (a->when < b->when)
|
|
|
|
return -1;
|
|
|
|
if (a->when > b->when)
|
|
|
|
return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2013-01-31 03:09:16 +00:00
|
|
|
void sort_table(struct dive_table *table)
|
|
|
|
{
|
|
|
|
qsort(table->dives, table->nr, sizeof(struct dive *), sortfn);
|
|
|
|
}
|
|
|
|
|
2011-09-20 19:40:34 +00:00
|
|
|
const char *weekday(int wday)
|
|
|
|
{
|
2012-10-11 00:42:59 +00:00
|
|
|
static const char wday_array[7][7] = {
|
|
|
|
/*++GETTEXT: these are three letter days - we allow up to six code bytes */
|
2013-10-10 05:48:35 +00:00
|
|
|
QT_TRANSLATE_NOOP("gettextFromC","Sun"), QT_TRANSLATE_NOOP("gettextFromC","Mon"), QT_TRANSLATE_NOOP("gettextFromC","Tue"), QT_TRANSLATE_NOOP("gettextFromC","Wed"), QT_TRANSLATE_NOOP("gettextFromC","Thu"), QT_TRANSLATE_NOOP("gettextFromC","Fri"), QT_TRANSLATE_NOOP("gettextFromC","Sat")
|
2011-09-20 19:40:34 +00:00
|
|
|
};
|
2013-10-10 05:48:35 +00:00
|
|
|
return translate("gettextFromC",wday_array[wday]);
|
2011-09-20 19:40:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const char *monthname(int mon)
|
|
|
|
{
|
2012-10-11 00:42:59 +00:00
|
|
|
static const char month_array[12][7] = {
|
|
|
|
/*++GETTEXT: these are three letter months - we allow up to six code bytes*/
|
2013-10-10 05:48:35 +00:00
|
|
|
QT_TRANSLATE_NOOP("gettextFromC","Jan"), QT_TRANSLATE_NOOP("gettextFromC","Feb"), QT_TRANSLATE_NOOP("gettextFromC","Mar"), QT_TRANSLATE_NOOP("gettextFromC","Apr"), QT_TRANSLATE_NOOP("gettextFromC","May"), QT_TRANSLATE_NOOP("gettextFromC","Jun"),
|
|
|
|
QT_TRANSLATE_NOOP("gettextFromC","Jul"), QT_TRANSLATE_NOOP("gettextFromC","Aug"), QT_TRANSLATE_NOOP("gettextFromC","Sep"), QT_TRANSLATE_NOOP("gettextFromC","Oct"), QT_TRANSLATE_NOOP("gettextFromC","Nov"), QT_TRANSLATE_NOOP("gettextFromC","Dec"),
|
2011-09-20 19:40:34 +00:00
|
|
|
};
|
2013-10-10 05:48:35 +00:00
|
|
|
return translate("gettextFromC",month_array[mon]);
|
2011-09-20 19:40:34 +00:00
|
|
|
}
|
|
|
|
|
2011-10-05 21:09:49 +00:00
|
|
|
/*
|
|
|
|
* track whether we switched to importing dives
|
|
|
|
*/
|
2013-09-09 08:59:03 +00:00
|
|
|
bool imported = FALSE;
|
2011-10-05 21:09:49 +00:00
|
|
|
|
2013-05-29 11:50:38 +00:00
|
|
|
static void print_version() {
|
|
|
|
printf("Subsurface v%s, ", VERSION_STRING);
|
|
|
|
printf("built with libdivecomputer v%s\n", dc_version(NULL));
|
|
|
|
}
|
|
|
|
|
|
|
|
static void print_help() {
|
|
|
|
print_version();
|
|
|
|
printf("\nUsage: subsurface [options] [logfile ...] [--import logfile ...]");
|
|
|
|
printf("\n\noptions include:");
|
|
|
|
printf("\n --help|-h This help text");
|
|
|
|
printf("\n --import logfile ... Logs before this option is treated as base, everything after is imported");
|
|
|
|
printf("\n --verbose|-v Verbose debug (repeat to increase verbosity)");
|
|
|
|
printf("\n --version Prints current version\n\n");
|
|
|
|
}
|
|
|
|
|
2013-09-09 08:59:03 +00:00
|
|
|
void parse_argument(const char *arg)
|
2011-08-31 01:40:25 +00:00
|
|
|
{
|
|
|
|
const char *p = arg+1;
|
|
|
|
|
|
|
|
do {
|
|
|
|
switch (*p) {
|
2013-05-29 11:50:38 +00:00
|
|
|
case 'h':
|
|
|
|
print_help();
|
|
|
|
exit(0);
|
2011-08-31 01:40:25 +00:00
|
|
|
case 'v':
|
|
|
|
verbose++;
|
|
|
|
continue;
|
2011-10-05 18:36:15 +00:00
|
|
|
case '-':
|
|
|
|
/* long options with -- */
|
2013-05-29 11:50:38 +00:00
|
|
|
if (strcmp(arg, "--help") == 0) {
|
|
|
|
print_help();
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
if (strcmp(arg, "--import") == 0) {
|
2013-09-09 08:59:03 +00:00
|
|
|
imported = TRUE; /* mark the dives so far as the base, * everything after is imported */
|
2011-10-05 18:36:15 +00:00
|
|
|
return;
|
|
|
|
}
|
2013-05-29 11:50:38 +00:00
|
|
|
if (strcmp(arg, "--verbose") == 0) {
|
|
|
|
verbose++;
|
|
|
|
return;
|
|
|
|
}
|
2013-05-27 10:15:34 +00:00
|
|
|
if (strcmp(arg, "--version") == 0) {
|
2013-05-29 11:50:38 +00:00
|
|
|
print_version();
|
2013-05-27 10:15:34 +00:00
|
|
|
exit(0);
|
|
|
|
}
|
2011-10-05 18:36:15 +00:00
|
|
|
/* fallthrough */
|
2011-10-30 19:56:28 +00:00
|
|
|
case 'p':
|
|
|
|
/* ignore process serial number argument when run as native macosx app */
|
2013-10-06 15:55:58 +00:00
|
|
|
if (strncmp(arg, "-psQT_TR_NOOP(", 5) == 0) {
|
2011-10-30 19:56:28 +00:00
|
|
|
return;
|
|
|
|
}
|
2012-08-26 21:41:05 +00:00
|
|
|
/* fallthrough */
|
2011-08-31 01:40:25 +00:00
|
|
|
default:
|
|
|
|
fprintf(stderr, "Bad argument '%s'\n", arg);
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
} while (*++p);
|
|
|
|
}
|
|
|
|
|
2011-09-20 19:40:34 +00:00
|
|
|
void renumber_dives(int nr)
|
2011-09-11 22:39:46 +00:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < dive_table.nr; i++) {
|
|
|
|
struct dive *dive = dive_table.dives[i];
|
|
|
|
dive->number = nr + i;
|
|
|
|
}
|
2011-10-05 16:24:52 +00:00
|
|
|
mark_divelist_changed(TRUE);
|
2011-09-11 22:39:46 +00:00
|
|
|
}
|
|
|
|
|
2013-01-11 01:55:44 +00:00
|
|
|
/*
|
|
|
|
* Under a POSIX setup, the locale string should have a format
|
|
|
|
* like [language[_territory][.codeset][@modifier]].
|
|
|
|
*
|
|
|
|
* So search for the underscore, and see if the "territory" is
|
|
|
|
* US, and turn on imperial units by default.
|
|
|
|
*
|
|
|
|
* I guess Burma and Liberia should trigger this too. I'm too
|
|
|
|
* lazy to look up the territory names, though.
|
|
|
|
*/
|
2013-09-09 08:59:03 +00:00
|
|
|
void setup_system_prefs(void)
|
2013-01-11 01:55:44 +00:00
|
|
|
{
|
2013-01-12 01:07:22 +00:00
|
|
|
const char *env;
|
2013-01-11 01:55:44 +00:00
|
|
|
|
2013-01-12 01:07:22 +00:00
|
|
|
default_prefs.divelist_font = strdup(system_divelist_default_font);
|
2013-02-09 19:29:56 +00:00
|
|
|
default_prefs.default_filename = system_default_filename();
|
2013-01-12 01:07:22 +00:00
|
|
|
|
|
|
|
env = getenv("LC_MEASUREMENT");
|
2013-01-11 01:55:44 +00:00
|
|
|
if (!env)
|
|
|
|
env = getenv("LC_ALL");
|
|
|
|
if (!env)
|
|
|
|
env = getenv("LANG");
|
|
|
|
if (!env)
|
|
|
|
return;
|
|
|
|
env = strchr(env, '_');
|
|
|
|
if (!env)
|
|
|
|
return;
|
|
|
|
env++;
|
|
|
|
if (strncmp(env, "US", 2))
|
|
|
|
return;
|
|
|
|
|
|
|
|
default_prefs.units = IMPERIAL_units;
|
|
|
|
}
|