+static int end(struct sr_input *in)
+{
+ struct context *inc;
+ int ret;
+
+ if (in->sdi_ready)
+ ret = process_buffer(in);
+ else
+ ret = SR_OK;
+
+ inc = in->priv;
+ if (inc->started)
+ std_session_send_df_end(in->sdi, LOG_PREFIX);
+
+ return ret;
+}
+
+static void cleanup(struct sr_input *in)
+{
+ struct context *inc;
+
+ inc = in->priv;
+
+ if (inc->delimiter)
+ g_string_free(inc->delimiter, TRUE);
+
+ if (inc->comment)
+ g_string_free(inc->comment, TRUE);
+
+ g_free(inc->termination);
+ g_free(inc->sample_buffer);
+}
+
+static struct sr_option options[] = {
+ { "single-column", "Single column", "Enable/specify single column", NULL, NULL },
+ { "numchannels", "Max channels", "Number of channels", NULL, NULL },
+ { "delimiter", "Delimiter", "Column delimiter", NULL, NULL },
+ { "format", "Format", "Numeric format", NULL, NULL },
+ { "comment", "Comment", "Comment prefix character", NULL, NULL },
+ { "samplerate", "Samplerate", "Samplerate used during capture", NULL, NULL },
+ { "first-channel", "First channel", "Column number of first channel", NULL, NULL },
+ { "header", "Header", "Treat first line as header with channel names", NULL, NULL },
+ { "startline", "Start line", "Line number at which to start processing samples", NULL, NULL },
+ ALL_ZERO
+};
+
+static const struct sr_option *get_options(void)
+{
+ if (!options[0].def) {
+ options[0].def = g_variant_ref_sink(g_variant_new_int32(0));
+ options[1].def = g_variant_ref_sink(g_variant_new_int32(0));
+ options[2].def = g_variant_ref_sink(g_variant_new_string(","));
+ options[3].def = g_variant_ref_sink(g_variant_new_string("bin"));
+ options[4].def = g_variant_ref_sink(g_variant_new_string(";"));
+ options[5].def = g_variant_ref_sink(g_variant_new_uint64(0));
+ options[6].def = g_variant_ref_sink(g_variant_new_int32(0));
+ options[7].def = g_variant_ref_sink(g_variant_new_boolean(FALSE));
+ options[8].def = g_variant_ref_sink(g_variant_new_int32(1));
+ }
+
+ return options;