- loglevel = get_loglevel_by_name(conf.loglevel_arg);
- if (conf.start_time_given) {
- long unsigned sec, usec;
- if (sscanf(conf.start_time_arg, "%lu:%lu",
- &sec, &usec) != 2)
- goto out;
- idt->start_time.tv_sec = sec;
- idt->start_time.tv_usec = usec;
+static int setup_and_schedule(void)
+{
+ int i, n, ret;
+ struct btr_node *cw_btrn;
+ struct writer_node *wns;
+ static struct sched s;
+ struct wav_params wp;
+ struct write_task wt;
+
+ sit.btrn = btr_new_node(&(struct btr_node_description)
+ EMBRACE(.name = "stdin"));
+ stdin_task_register(&sit, &s);
+
+ COPY_WAV_PARMS(&wp, &conf);
+ wt.cwc = check_wav_init(sit.btrn, NULL, &wp, &cw_btrn);
+ wt.task = task_register(&(struct task_info) {
+ .name = "write",
+ .pre_select = write_pre_select,
+ .post_select = write_post_select,
+ .context = &wt,
+ }, &s);
+
+ n = conf.writer_given > 0? conf.writer_given : 1;
+ wns = para_calloc(n * sizeof(*wns));
+ for (i = 0; i < n; i++) {
+ char *arg = i < conf.writer_given? conf.writer_arg[i] : NULL;
+ wns[i].wid = check_writer_arg_or_die(arg, &wns[i].lpr);
+ register_writer_node(wns + i, cw_btrn, &s);