This fixes parts of bug #541.
return valid_string(sr_output_description_get(_structure));
}
+vector<string> OutputFormat::extensions()
+{
+ vector<string> exts;
+ for (const char *const *e = sr_output_extensions_get(_structure);
+ e && *e; e++)
+ exts.push_back(*e);
+ return exts;
+}
+
map<string, shared_ptr<Option>> OutputFormat::options()
{
const struct sr_option **options = sr_output_options_get(_structure);
string name();
/** Description of this output format. */
string description();
+ /** A list of preferred file name extensions for this file format.
+ * @note This list is a recommendation only. */
+ vector<string> extensions();
/** Options supported by this output format. */
map<string, shared_ptr<Option> > options();
/** Create an output using this format.
SR_API const char *sr_output_id_get(const struct sr_output_module *o);
SR_API const char *sr_output_name_get(const struct sr_output_module *o);
SR_API const char *sr_output_description_get(const struct sr_output_module *o);
+SR_API const char *const *sr_output_extensions_get(
+ const struct sr_output_module *o);
SR_API const struct sr_output_module *sr_output_find(char *id);
SR_API const struct sr_option **sr_output_options_get(const struct sr_output_module *o);
SR_API void sr_output_options_free(const struct sr_option **opts);
*/
char *desc;
+ /**
+ * A NULL terminated array of strings containing a list of file name
+ * extensions typical for the input file format, or NULL if there is
+ * no typical extension for this file format.
+ */
+ const char *const *exts;
+
/**
* Returns a NULL-terminated list of options this module can take.
* Can be NULL, if the module has no options.
.id = "analog",
.name = "Analog",
.desc = "Analog data and types",
+ .exts = NULL,
.options = get_options,
.init = init,
.receive = receive,
.id = "ascii",
.name = "ASCII",
.desc = "ASCII art",
+ .exts = (const char*[]){"txt", NULL},
.options = get_options,
.init = init,
.receive = receive,
.id = "binary",
.name = "Binary",
.desc = "Raw binary",
+ .exts = NULL,
.options = NULL,
.receive = receive,
};
.id = "bits",
.name = "Bits",
.desc = "0/1 digits",
+ .exts = (const char*[]){"txt", NULL},
.options = get_options,
.init = init,
.receive = receive,
.id = "chronovu-la8",
.name = "ChronoVu LA8",
.desc = "ChronoVu LA8 native file format",
+ .exts = (const char*[]){"kdt", NULL},
.options = NULL,
.init = init,
.receive = receive,
.id = "csv",
.name = "CSV",
.desc = "Comma-separated values",
+ .exts = (const char*[]){"csv", NULL},
.options = NULL,
.init = init,
.receive = receive,
.id = "gnuplot",
.name = "Gnuplot",
.desc = "Gnuplot file format",
+ .exts = (const char*[]){"pl", NULL},
.options = NULL,
.init = init,
.receive = receive,
.id = "hex",
.name = "Hexadecimal",
.desc = "Hexadecimal digits",
+ .exts = (const char*[]){"txt", NULL},
.options = get_options,
.init = init,
.receive = receive,
.id = "ols",
.name = "OLS",
.desc = "OpenBench Logic Sniffer",
+ .exts = (const char*[]){"ols", NULL},
.options = NULL,
.init = init,
.receive = receive,
return o->desc;
}
+/**
+ * Returns the specified output module's file extensions typical for the file
+ * format, as a NULL terminated array, or returns a NULL pointer if there is
+ * no preferred extension.
+ * @note these are a suggestions only.
+ *
+ * @since 0.4.0
+ */
+SR_API const char *const *sr_output_extensions_get(
+ const struct sr_output_module *o)
+{
+ if (!o) {
+ sr_err("Invalid output module NULL!");
+ return NULL;
+ }
+
+ return o->exts;
+}
+
/**
* Return the output module with the specified ID, or NULL if no module
* with that id is found.
.id = "srzip",
.name = "srzip",
.desc = "srzip session file",
+ .exts = (const char*[]){"sr", NULL},
.options = get_options,
.init = init,
.receive = receive,
.id = "vcd",
.name = "VCD",
.desc = "Value Change Dump",
+ .exts = (const char*[]){"vcd", NULL},
.options = NULL,
.init = init,
.receive = receive,
.id = "wav",
.name = "WAV",
.desc = "WAVE file format",
+ .exts = (const char*[]){"wav", NULL},
.options = get_options,
.init = init,
.receive = receive,