summaryrefslogtreecommitdiff
path: root/ao-tools/ao-postflight/ao-postflight.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-11-21 20:35:22 -0800
committerKeith Packard <keithp@keithp.com>2009-11-21 20:37:53 -0800
commit238d03462a56dc1b7c871608cb00f961a88c1b97 (patch)
tree7adc0b65a36b3ebef2261a85ce9a808728376b2c /ao-tools/ao-postflight/ao-postflight.c
parent1a3b4c02a01187f8b7b9a9c97712476d0007ab35 (diff)
Make ao-postflight create filenames using input filenames.
Instead of requiring the user to provide names for the various output options, just create them from the input name by replacing the extension. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'ao-tools/ao-postflight/ao-postflight.c')
-rw-r--r--ao-tools/ao-postflight/ao-postflight.c139
1 files changed, 90 insertions, 49 deletions
diff --git a/ao-tools/ao-postflight/ao-postflight.c b/ao-tools/ao-postflight/ao-postflight.c
index a19b7ebb..7cedaa5b 100644
--- a/ao-tools/ao-postflight/ao-postflight.c
+++ b/ao-tools/ao-postflight/ao-postflight.c
@@ -392,9 +392,11 @@ analyse_flight(struct cc_flightraw *f, FILE *summary_file, FILE *detail_file,
j++;
}
nsat = 0;
- for (k = 0; k < f->gps.sats[j].nsat; k++)
- if (f->gps.sats[j].sat[k].svid != 0)
- nsat++;
+ if (j < f->gps.numsats) {
+ for (k = 0; k < f->gps.sats[j].nsat; k++)
+ if (f->gps.sats[j].sat[k].svid != 0)
+ nsat++;
+ }
fprintf(kml_file, "%12.7f, %12.7f, %12.7f <!-- time %12.7f sats %d -->",
f->gps.data[i].lon,
@@ -443,12 +445,12 @@ analyse_flight(struct cc_flightraw *f, FILE *summary_file, FILE *detail_file,
}
static const struct option options[] = {
- { .name = "summary", .has_arg = 1, .val = 's' },
- { .name = "detail", .has_arg = 1, .val = 'd' },
- { .name = "plot", .has_arg = 1, .val = 'p' },
- { .name = "raw", .has_arg = 1, .val = 'r' },
- { .name = "gps", .has_arg = 1, .val = 'g' },
- { .name = "kml", .has_arg = 1, .val = 'k' },
+ { .name = "summary", .has_arg = 2, .val = 's' },
+ { .name = "detail", .has_arg = 2, .val = 'd' },
+ { .name = "plot", .has_arg = 2, .val = 'p' },
+ { .name = "raw", .has_arg = 2, .val = 'r' },
+ { .name = "gps", .has_arg = 2, .val = 'g' },
+ { .name = "kml", .has_arg = 2, .val = 'k' },
{ 0, 0, 0, 0},
};
@@ -465,6 +467,46 @@ static void usage(char *program)
exit(1);
}
+char *
+replace_extension(char *file, char *extension)
+{
+ char *slash;
+ char *dot;
+ char *new;
+ int newlen;
+
+ slash = strrchr(file, '/');
+ dot = strrchr(file, '.');
+ if (!dot || (slash && dot < slash))
+ dot = file + strlen(file);
+ newlen = (dot - file) + strlen (extension) + 1;
+ new = malloc (newlen);
+ strncpy (new, file, dot - file);
+ new[dot-file] = '\0';
+ strcat (new, extension);
+ return new;
+}
+
+FILE *
+open_output(char *outname, char *inname, char *extension)
+{
+ char *o;
+ FILE *out;
+
+ if (outname)
+ o = outname;
+ else
+ o = replace_extension(inname, extension);
+ out = fopen(o, "w");
+ if (!out) {
+ perror (o);
+ exit(1);
+ }
+ if (o != outname)
+ free(o);
+ return out;
+}
+
int
main (int argc, char **argv)
{
@@ -486,72 +528,46 @@ main (int argc, char **argv)
char *plot_name = NULL;
char *gps_name = NULL;
char *kml_name = NULL;
+ int has_summary = 0;
+ int has_detail = 0;
+ int has_plot = 0;
+ int has_raw = 0;
+ int has_gps = 0;
+ int has_kml = 0;
while ((c = getopt_long(argc, argv, "s:d:p:r:g:k:", options, NULL)) != -1) {
switch (c) {
case 's':
summary_name = optarg;
+ has_summary = 1;
break;
case 'd':
detail_name = optarg;
+ has_detail = 1;
break;
case 'p':
plot_name = optarg;
+ has_plot = 1;
break;
case 'r':
raw_name = optarg;
+ has_raw = 1;
break;
case 'g':
gps_name = optarg;
+ has_gps = 1;
break;
case 'k':
kml_name = optarg;
+ has_kml = 1;
break;
default:
usage(argv[0]);
break;
}
}
- summary_file = stdout;
- if (summary_name) {
- summary_file = fopen(summary_name, "w");
- if (!summary_file) {
- perror (summary_name);
- exit(1);
- }
- }
- if (detail_name) {
- if (summary_name && !strcmp (summary_name, detail_name))
- detail_file = summary_file;
- else {
- detail_file = fopen(detail_name, "w");
- if (!detail_file) {
- perror(detail_name);
- exit(1);
- }
- }
- }
- if (raw_name) {
- raw_file = fopen (raw_name, "w");
- if (!raw_file) {
- perror(raw_name);
- exit(1);
- }
- }
- if (gps_name) {
- gps_file = fopen(gps_name, "w");
- if (!gps_file) {
- perror(gps_name);
- exit(1);
- }
- }
- if (kml_name) {
- kml_file = fopen(kml_name, "w");
- if (!kml_file) {
- perror(kml_name);
- exit(1);
- }
- }
+ if (!has_summary)
+ summary_file = stdout;
for (i = optind; i < argc; i++) {
file = fopen(argv[i], "r");
if (!file) {
@@ -559,6 +575,16 @@ main (int argc, char **argv)
ret++;
continue;
}
+ if (has_summary && !summary_file)
+ summary_file = open_output(summary_name, argv[i], ".summary");
+ if (has_detail && !detail_file)
+ detail_file = open_output(detail_name, argv[i], ".detail");
+ if (has_raw && !raw_file)
+ raw_file = open_output(raw_name, argv[i], ".raw");
+ if (has_gps && !gps_file)
+ gps_file = open_output(gps_name, argv[i], ".gps");
+ if (has_kml && !kml_file)
+ kml_file = open_output(gps_name, argv[i], ".kml");
s = strstr(argv[i], "-serial-");
if (s)
serial = atoi(s + 8);
@@ -574,6 +600,21 @@ main (int argc, char **argv)
raw->serial = serial;
analyse_flight(raw, summary_file, detail_file, raw_file, plot_name, gps_file, kml_file);
cc_flightraw_free(raw);
+ if (has_summary && !summary_name) {
+ fclose(summary_file); summary_file = NULL;
+ }
+ if (has_detail && !detail_name) {
+ fclose(detail_file); detail_file = NULL;
+ }
+ if (has_summary && !raw_name) {
+ fclose(raw_file); raw_file = NULL;
+ }
+ if (has_gps && !gps_name) {
+ fclose(gps_file); gps_file = NULL;
+ }
+ if (has_kml && !kml_name) {
+ fclose(kml_file); kml_file = NULL;
+ }
}
return ret;
}