diff options
-rw-r--r-- | src/opendeco.c | 55 |
1 files changed, 32 insertions, 23 deletions
diff --git a/src/opendeco.c b/src/opendeco.c index 6f8711e..79b1f98 100644 --- a/src/opendeco.c +++ b/src/opendeco.c @@ -139,11 +139,22 @@ int parse_gasses(gas_t **gasses, char *str) return nof_gasses; } +void apply_arguments(struct arguments *arguments) +{ + SURFACE_PRESSURE = arguments->SURFACE_PRESSURE; + SWITCH_INTERMEDIATE = arguments->SWITCH_INTERMEDIATE; + LAST_STOP_AT_SIX = arguments->LAST_STOP_AT_SIX; + RMV_DIVE = arguments->RMV_DIVE; + RMV_DECO = arguments->RMV_DECO; + SHOW_TRAVEL = arguments->SHOW_TRAVEL; + UNITS = arguments->UNITS; +} + int main(int argc, char *argv[]) { setlocale(LC_ALL, "en_US.utf8"); - /* argp */ + /* get conf and cli options */ char *gas_default = strdup("Air"); char *decogasses_default = strdup(""); @@ -167,29 +178,27 @@ int main(int argc, char *argv[]) opendeco_argp_parse(argc, argv, &arguments); /* apply global options */ - SURFACE_PRESSURE = arguments.SURFACE_PRESSURE; - SWITCH_INTERMEDIATE = arguments.SWITCH_INTERMEDIATE; - LAST_STOP_AT_SIX = arguments.LAST_STOP_AT_SIX; - RMV_DIVE = arguments.RMV_DIVE; - RMV_DECO = arguments.RMV_DECO; - SHOW_TRAVEL = arguments.SHOW_TRAVEL; - UNITS = arguments.UNITS; + apply_arguments(&arguments); /* setup */ decostate_t ds; - init_decostate(&ds, arguments.gflow, arguments.gfhigh, xsw_to_bar(msw_or_fsw(3, 10))); + decostate_t ds_p5; + gas_t bottom_gas; + gas_t *deco_gasses; + + double depth; + const gas_t *gas; + double dec_per_min = xsw_to_bar(msw_or_fsw(9, 30)); + int nof_gasses = parse_gasses(&deco_gasses, arguments.decogasses); - gas_t bottom_gas; + init_decostate(&ds, arguments.gflow, arguments.gfhigh, xsw_to_bar(msw_or_fsw(3, 10))); if (scan_gas(&bottom_gas, arguments.gas)) { wprintf(L"Invalid gas (%s). Aborting!\n", arguments.gas); exit(-1); } - gas_t *deco_gasses; - int nof_gasses = parse_gasses(&deco_gasses, arguments.decogasses); - /* override oxygen mod */ for (int i = 0; i < nof_gasses; i++) if (gas_o2(&deco_gasses[i]) == 100) @@ -210,23 +219,23 @@ int main(int argc, char *argv[]) }; print_planhead(); - simulate_dive(&ds, waypoints, len(waypoints), &print_segment_callback); - /* generate deco schedule */ - double depth = waypoints[len(waypoints) - 1].depth; - const gas_t *gas = waypoints[len(waypoints) - 1].gas; + simulate_dive(&ds, waypoints, len(waypoints), &print_segment_callback); - /* determine @+5 TTS */ - decostate_t ds_ = ds; - add_segment_const(&ds_, depth, 5, gas); - decoinfo_t di_plus5 = calc_deco(&ds_, depth, gas, deco_gasses, nof_gasses, NULL); + depth = waypoints[len(waypoints) - 1].depth; + gas = waypoints[len(waypoints) - 1].gas; + ds_p5 = ds; - /* print actual deco schedule */ + /* calculate deco */ decoinfo_t di = calc_deco(&ds, depth, gas, deco_gasses, nof_gasses, &print_segment_callback); + /* calculate @+5 TTS */ + add_segment_const(&ds_p5, depth, 5, gas); + decoinfo_t di_p5 = calc_deco(&ds_p5, depth, gas, deco_gasses, nof_gasses, NULL); + /* output deco info and disclaimer */ wprintf(L"\nNDL: %imin TTS: %imin TTS @+5: %imin\n", (int) floor(di.ndl), (int) ceil(di.tts), - (int) ceil(di_plus5.tts)); + (int) ceil(di_p5.tts)); print_planfoot(&ds); print_gas_use(); print_disclaimer(); |