+ if (cooked && detail_file) {
+ double apogee_time;
+ double max_height = 0;
+ int i;
+
+ for (i = 0; i < cooked->pres_pos.num; i++) {
+ if (cooked->pres_pos.data[i] > max_height) {
+ max_height = cooked->pres_pos.data[i];
+ apogee_time = cooked->pres_pos.start + cooked->pres_pos.step * i;
+ }
+ }
+ fprintf(detail_file, "%9s %9s %9s %9s\n",
+ "time", "height", "speed", "accel");
+ for (i = 0; i < cooked->pres_pos.num; i++) {
+ double time = (cooked->accel_accel.start + i * cooked->accel_accel.step - boost_start) / 100.0;
+ double accel = cooked->accel_accel.data[i];
+ double pos = cooked->pres_pos.data[i];
+ double speed;
+ if (cooked->pres_pos.start + cooked->pres_pos.step * i < apogee_time)
+ speed = cooked->accel_speed.data[i];
+ else
+ speed = cooked->pres_speed.data[i];
+ fprintf(detail_file, "%9.2f %9.2f %9.2f %9.2f\n",
+ time, pos, speed, accel);
+ }
+ }
+}
+
+static const struct option options[] = {
+ { .name = "summary", .has_arg = 1, .val = 'S' },
+ { .name = "detail", .has_arg = 1, .val = 'D' },
+ { 0, 0, 0, 0},
+};
+
+static void usage(char *program)
+{
+ fprintf(stderr, "usage: %s [--summary=<summary-file>] [--detail=<detail-file] {flight-log} ...\n", program);
+ exit(1);