diff options
Diffstat (limited to 'subsurfacestartup.c')
-rw-r--r-- | subsurfacestartup.c | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/subsurfacestartup.c b/subsurfacestartup.c new file mode 100644 index 000000000..bf093ed9c --- /dev/null +++ b/subsurfacestartup.c @@ -0,0 +1,183 @@ +#include "subsurfacestartup.h" +#include <stdbool.h> +#include <glib/gi18n.h> + +struct preferences prefs; +struct preferences default_prefs = { + .units = SI_UNITS, + .unit_system = METRIC, + .visible_cols = { TRUE, FALSE, }, + .pp_graphs = { + .po2 = FALSE, + .pn2 = FALSE, + .phe = FALSE, + .po2_threshold = 1.6, + .pn2_threshold = 4.0, + .phe_threshold = 13.0, + }, + .mod = FALSE, + .mod_ppO2 = 1.6, + .ead = FALSE, + .profile_dc_ceiling = TRUE, + .profile_red_ceiling = FALSE, + .profile_calc_ceiling = FALSE, + .calc_ceiling_3m_incr = FALSE, + .gflow = 30, + .gfhigh = 75, + .font_size = 14.0, + .show_invalid = FALSE, +#ifdef USE_GTK_UI + .map_provider = OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID, +#endif +}; + +struct units *get_units() +{ + return &prefs.units; +} + +/* random helper functions, used here or elsewhere */ +static int sortfn(const void *_a, const void *_b) +{ + const struct dive *a = (const struct dive*) *(void **)_a; + const struct dive *b = (const struct dive*) *(void **)_b; + + if (a->when < b->when) + return -1; + if (a->when > b->when) + return 1; + return 0; +} + +void sort_table(struct dive_table *table) +{ + qsort(table->dives, table->nr, sizeof(struct dive *), sortfn); +} + +const char *weekday(int wday) +{ + static const char wday_array[7][7] = { + /*++GETTEXT: these are three letter days - we allow up to six code bytes */ + N_("Sun"), N_("Mon"), N_("Tue"), N_("Wed"), N_("Thu"), N_("Fri"), N_("Sat") + }; + return _(wday_array[wday]); +} + +const char *monthname(int mon) +{ + static const char month_array[12][7] = { + /*++GETTEXT: these are three letter months - we allow up to six code bytes*/ + N_("Jan"), N_("Feb"), N_("Mar"), N_("Apr"), N_("May"), N_("Jun"), + N_("Jul"), N_("Aug"), N_("Sep"), N_("Oct"), N_("Nov"), N_("Dec"), + }; + return _(month_array[mon]); +} + +/* + * track whether we switched to importing dives + */ +bool imported = FALSE; + +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"); +} + +void parse_argument(const char *arg) +{ + const char *p = arg+1; + + do { + switch (*p) { + case 'h': + print_help(); + exit(0); + case 'v': + verbose++; + continue; + case '-': + /* long options with -- */ + if (strcmp(arg, "--help") == 0) { + print_help(); + exit(0); + } + if (strcmp(arg, "--import") == 0) { + imported = TRUE; /* mark the dives so far as the base, * everything after is imported */ + return; + } + if (strcmp(arg, "--verbose") == 0) { + verbose++; + return; + } + if (strcmp(arg, "--version") == 0) { + print_version(); + exit(0); + } + /* fallthrough */ + case 'p': + /* ignore process serial number argument when run as native macosx app */ + if (strncmp(arg, "-psn_", 5) == 0) { + return; + } + /* fallthrough */ + default: + fprintf(stderr, "Bad argument '%s'\n", arg); + exit(1); + } + } while (*++p); +} + +void renumber_dives(int nr) +{ + int i; + + for (i = 0; i < dive_table.nr; i++) { + struct dive *dive = dive_table.dives[i]; + dive->number = nr + i; + } + mark_divelist_changed(TRUE); +} + +/* + * 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. + */ +void setup_system_prefs(void) +{ + const char *env; + + default_prefs.divelist_font = strdup(system_divelist_default_font); + default_prefs.default_filename = system_default_filename(); + + env = getenv("LC_MEASUREMENT"); + 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; +} |