2013-09-09 05:59:03 -03:00
|
|
|
#include "subsurfacestartup.h"
|
2013-10-15 19:54:15 -07:00
|
|
|
#include "ssrf-version.h"
|
2013-09-09 05:59:03 -03:00
|
|
|
#include <stdbool.h>
|
2013-10-05 00:29:09 -07:00
|
|
|
#include <string.h>
|
2013-10-06 08:55:58 -07:00
|
|
|
#include "gettext.h"
|
2013-01-10 17:55:44 -08:00
|
|
|
struct preferences prefs;
|
|
|
|
struct preferences default_prefs = {
|
|
|
|
.units = SI_UNITS,
|
2013-06-03 21:08:49 +09:00
|
|
|
.unit_system = METRIC,
|
2013-01-10 17:55:44 -08:00
|
|
|
.pp_graphs = {
|
2014-01-15 19:54:41 +01:00
|
|
|
.po2 = false,
|
|
|
|
.pn2 = false,
|
|
|
|
.phe = false,
|
2014-02-27 20:09:57 -08:00
|
|
|
.po2_threshold = 1.6,
|
|
|
|
.pn2_threshold = 4.0,
|
2013-01-10 17:55:44 -08:00
|
|
|
.phe_threshold = 13.0,
|
|
|
|
},
|
2014-02-27 20:09:57 -08:00
|
|
|
.mod = false,
|
2014-04-16 22:03:44 +02:00
|
|
|
.modppO2 = 1.6,
|
2014-02-27 20:09:57 -08:00
|
|
|
.ead = false,
|
2014-04-16 22:03:44 +02:00
|
|
|
.hrgraph = true,
|
|
|
|
.dcceiling = true,
|
|
|
|
.redceiling = false,
|
|
|
|
.calcceiling = false,
|
|
|
|
.calcceiling3m = false,
|
|
|
|
.calcndltts = false,
|
2013-05-28 11:21:27 -07:00
|
|
|
.gflow = 30,
|
|
|
|
.gfhigh = 75,
|
2014-04-08 13:45:23 +02:00
|
|
|
.animation = 500,
|
2014-01-15 19:54:41 +01:00
|
|
|
.gf_low_at_maxdepth = false,
|
2014-02-26 16:33:27 -03:00
|
|
|
.font_size = -1,
|
2014-01-15 19:54:41 +01:00
|
|
|
.display_invalid_dives = false,
|
|
|
|
.show_sac = false,
|
2014-03-10 22:49:08 -05:00
|
|
|
.display_unused_tanks = false,
|
2014-04-05 11:03:45 -05:00
|
|
|
.show_average_depth = true
|
2013-01-10 17:55:44 -08:00
|
|
|
};
|
2011-09-06 19:07:17 -07:00
|
|
|
|
2013-05-30 06:00:26 +09:00
|
|
|
struct units *get_units()
|
|
|
|
{
|
|
|
|
return &prefs.units;
|
|
|
|
}
|
|
|
|
|
2011-09-20 12:40:34 -07:00
|
|
|
/* random helper functions, used here or elsewhere */
|
2011-08-30 18:40:25 -07:00
|
|
|
static int sortfn(const void *_a, const void *_b)
|
|
|
|
{
|
2014-02-27 20:09:57 -08:00
|
|
|
const struct dive *a = (const struct dive *)*(void **)_a;
|
|
|
|
const struct dive *b = (const struct dive *)*(void **)_b;
|
2011-08-30 18:40:25 -07:00
|
|
|
|
|
|
|
if (a->when < b->when)
|
|
|
|
return -1;
|
|
|
|
if (a->when > b->when)
|
|
|
|
return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2013-01-31 14:09:16 +11:00
|
|
|
void sort_table(struct dive_table *table)
|
|
|
|
{
|
|
|
|
qsort(table->dives, table->nr, sizeof(struct dive *), sortfn);
|
|
|
|
}
|
|
|
|
|
2011-09-20 12:40:34 -07:00
|
|
|
const char *weekday(int wday)
|
|
|
|
{
|
2012-10-11 09:42:59 +09:00
|
|
|
static const char wday_array[7][7] = {
|
|
|
|
/*++GETTEXT: these are three letter days - we allow up to six code bytes */
|
2014-02-27 20:09:57 -08: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 12:40:34 -07:00
|
|
|
};
|
2014-02-27 20:09:57 -08:00
|
|
|
return translate("gettextFromC", wday_array[wday]);
|
2011-09-20 12:40:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
const char *monthname(int mon)
|
|
|
|
{
|
2012-10-11 09:42:59 +09:00
|
|
|
static const char month_array[12][7] = {
|
|
|
|
/*++GETTEXT: these are three letter months - we allow up to six code bytes*/
|
2014-02-27 20:09:57 -08: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 12:40:34 -07:00
|
|
|
};
|
2014-02-27 20:09:57 -08:00
|
|
|
return translate("gettextFromC", month_array[mon]);
|
2011-09-20 12:40:34 -07:00
|
|
|
}
|
|
|
|
|
2011-10-05 14:09:49 -07:00
|
|
|
/*
|
|
|
|
* track whether we switched to importing dives
|
|
|
|
*/
|
2014-01-15 19:54:41 +01:00
|
|
|
bool imported = false;
|
2011-10-05 14:09:49 -07:00
|
|
|
|
2014-02-27 20:09:57 -08:00
|
|
|
static void print_version()
|
|
|
|
{
|
2013-05-29 13:50:38 +02:00
|
|
|
printf("Subsurface v%s, ", VERSION_STRING);
|
|
|
|
printf("built with libdivecomputer v%s\n", dc_version(NULL));
|
|
|
|
}
|
|
|
|
|
2014-02-27 20:09:57 -08:00
|
|
|
static void print_help()
|
|
|
|
{
|
2013-05-29 13:50:38 +02:00
|
|
|
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)");
|
2014-03-25 16:55:56 +02:00
|
|
|
printf("\n --version Prints current version");
|
|
|
|
printf("\n --win32console Create a dedicated console if needed (Windows only). Add option before everything else\n\n");
|
2013-05-29 13:50:38 +02:00
|
|
|
}
|
|
|
|
|
2013-09-09 05:59:03 -03:00
|
|
|
void parse_argument(const char *arg)
|
2011-08-30 18:40:25 -07:00
|
|
|
{
|
2014-02-27 20:09:57 -08:00
|
|
|
const char *p = arg + 1;
|
2011-08-30 18:40:25 -07:00
|
|
|
|
|
|
|
do {
|
|
|
|
switch (*p) {
|
2013-05-29 13:50:38 +02:00
|
|
|
case 'h':
|
|
|
|
print_help();
|
|
|
|
exit(0);
|
2011-08-30 18:40:25 -07:00
|
|
|
case 'v':
|
|
|
|
verbose++;
|
|
|
|
continue;
|
2013-11-02 12:00:16 -07:00
|
|
|
case 'q':
|
|
|
|
quit++;
|
|
|
|
continue;
|
2011-10-05 11:36:15 -07:00
|
|
|
case '-':
|
|
|
|
/* long options with -- */
|
2013-05-29 13:50:38 +02:00
|
|
|
if (strcmp(arg, "--help") == 0) {
|
|
|
|
print_help();
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
if (strcmp(arg, "--import") == 0) {
|
2014-01-15 19:54:41 +01:00
|
|
|
imported = true; /* mark the dives so far as the base, * everything after is imported */
|
2011-10-05 11:36:15 -07:00
|
|
|
return;
|
|
|
|
}
|
2013-05-29 13:50:38 +02:00
|
|
|
if (strcmp(arg, "--verbose") == 0) {
|
|
|
|
verbose++;
|
|
|
|
return;
|
|
|
|
}
|
2013-05-27 12:15:34 +02:00
|
|
|
if (strcmp(arg, "--version") == 0) {
|
2013-05-29 13:50:38 +02:00
|
|
|
print_version();
|
2013-05-27 12:15:34 +02:00
|
|
|
exit(0);
|
|
|
|
}
|
2014-03-25 16:55:56 +02:00
|
|
|
if (strcmp(arg, "--win32console") == 0)
|
|
|
|
return;
|
2014-02-27 20:09:57 -08:00
|
|
|
/* fallthrough */
|
2011-10-30 20:56:28 +01:00
|
|
|
case 'p':
|
|
|
|
/* ignore process serial number argument when run as native macosx app */
|
2013-10-06 08:55:58 -07:00
|
|
|
if (strncmp(arg, "-psQT_TR_NOOP(", 5) == 0) {
|
2011-10-30 20:56:28 +01:00
|
|
|
return;
|
|
|
|
}
|
2014-02-27 20:09:57 -08:00
|
|
|
/* fallthrough */
|
2011-08-30 18:40:25 -07:00
|
|
|
default:
|
|
|
|
fprintf(stderr, "Bad argument '%s'\n", arg);
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
} while (*++p);
|
|
|
|
}
|
|
|
|
|
2014-05-20 06:11:32 +09:00
|
|
|
void renumber_dives(int start_nr, bool selected_only)
|
2011-09-11 15:39:46 -07:00
|
|
|
{
|
2014-05-20 06:11:32 +09:00
|
|
|
int i, nr = start_nr;
|
|
|
|
struct dive *dive;
|
2011-09-11 15:39:46 -07:00
|
|
|
|
2014-05-20 06:11:32 +09:00
|
|
|
for_each_dive (i, dive) {
|
|
|
|
if (dive->selected)
|
|
|
|
dive->number = nr++;
|
2011-09-11 15:39:46 -07:00
|
|
|
}
|
2014-01-15 19:54:41 +01:00
|
|
|
mark_divelist_changed(true);
|
2011-09-11 15:39:46 -07:00
|
|
|
}
|
|
|
|
|
2013-01-10 17:55:44 -08: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 05:59:03 -03:00
|
|
|
void setup_system_prefs(void)
|
2013-01-10 17:55:44 -08:00
|
|
|
{
|
2013-01-11 17:07:22 -08:00
|
|
|
const char *env;
|
2013-01-10 17:55:44 -08:00
|
|
|
|
2013-01-11 17:07:22 -08:00
|
|
|
default_prefs.divelist_font = strdup(system_divelist_default_font);
|
2014-03-21 18:56:10 +01:00
|
|
|
default_prefs.font_size = system_divelist_default_font_size;
|
2013-02-09 21:29:56 +02:00
|
|
|
default_prefs.default_filename = system_default_filename();
|
2013-01-11 17:07:22 -08:00
|
|
|
|
|
|
|
env = getenv("LC_MEASUREMENT");
|
2013-01-10 17:55:44 -08: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;
|
|
|
|
}
|