summaryrefslogtreecommitdiff
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
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>
-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;
}