- stdin_set_defaults(&sit);
- register_task(&sit.task);
-
- cwt->state = CWS_NEED_HEADER;
- cwt->min_iqs = WAV_HEADER_LEN;
- cwt->btrn = btr_new_node(&(struct btr_node_description)
- EMBRACE(.name = "check_wav", .parent = sit.btrn,
- .handler = check_wav_exec, .context = cwt));
- sprintf(cwt->task.status, "check_wav");
- cwt->task.pre_select = check_wav_pre_select;
- cwt->task.post_select = check_wav_post_select;
- cwt->task.error = 0;
- register_task(&cwt->task);
-
- ret = -E_WRITE_SYNTAX;
- if (!conf.writer_given) {
- i = 0;
- wns = para_calloc(sizeof(*wns));
- ret = setup_writer_node(NULL, cwt->btrn, wns);
- if (ret < 0)
- goto out;
- i = 1;
- } else {
- wns = para_calloc(conf.writer_given * sizeof(*wns));
- for (i = 0; i < conf.writer_given; i++) {
- ret = setup_writer_node(conf.writer_arg[i],
- cwt->btrn, wns + i);
- if (ret < 0)
- goto out;
+ stdin_task_register(&sit, &s);
+
+ LLS_COPY_WAV_PARMS(&wp, LSG_WRITE_PARA_WRITE, lpr);
+ 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 = writer_given? writer_given : 1;
+ wns = para_calloc(n * sizeof(*wns));
+ for (i = 0; i < n; i++) {
+ const char *arg = i < writer_given?
+ lls_string_val(i, OPT_RESULT(WRITER, lpr)) : NULL;
+ wns[i].wid = check_writer_arg_or_die(arg, &wns[i].lpr);
+ register_writer_node(wns + i, cw_btrn, &s);
+ }
+ s.default_timeout.tv_sec = 10;
+ s.default_timeout.tv_usec = 50000;
+ ret = schedule(&s);
+ if (ret >= 0) {
+ int j, ts;
+ for (j = 0; j < n; j++) {
+ struct writer_node *wn = wns + j;
+ ts = task_status(wn->task);
+ assert(ts < 0);
+ if (ts != -E_WRITE_COMMON_EOF && ts != -E_BTR_EOF) {
+ const char *name = writer_name(wn->wid);
+ PARA_ERROR_LOG("%s: %s\n", name,
+ para_strerror(-ts));
+ if (ret >= 0)
+ ret = ts;
+ }