+ PARA_EMERG_LOG("invalid writer %s\n", wa);
+ exit(EXIT_FAILURE);
+}
+
+/**
+ * Open a writer node and register the corresponding task.
+ *
+ * \param wn The writer node to open.
+ * \param parent The parent btr node (the source for the writer node).
+ * \param s The scheduler instance to register the task to.
+ *
+ * The configuration of the writer node stored in \p wn->conf must be
+ * initialized before this function may be called.
+ */
+void register_writer_node(struct writer_node *wn, struct btr_node *parent,
+ struct sched *s)
+{
+ struct writer *w = writers + wn->writer_num;
+ char *name = make_message("%s writer", writer_names[wn->writer_num]);
+
+ wn->btrn = btr_new_node(&(struct btr_node_description)
+ EMBRACE(.name = name, .parent = parent,
+ .handler = w->execute, .context = wn));
+ strcpy(wn->task.status, name);
+ free(name);
+ wn->task.post_select = w->post_select;
+ wn->task.pre_select = w->pre_select;
+ register_task(s, &wn->task);