2 * realtime & multiplexer
3 * reading and parsing commands from some fd
8 static void *cmdi_exception(oop_source *evts, int fd,
9 oop_event evt, void *cmdi_v) {
10 CommandInput *cmdi= cmdi_v;
11 cmdi->out.error(&cmdi->out, "error by command source",
12 "exceptional condition");
16 static void *cmdi_iferr(oop_source *evts, oop_read *cl_read,
17 oop_rd_event evt, const char *errmsg, int errnoval,
18 const char *data, size_t recsz, void *cmdi_v) {
19 CommandInput *cmdi= cmdi_v;
21 cmdi->out.error(&cmdi->out, "read",
22 oop_rd_errmsg(cl_read, evt,
23 errnoval, OOP_RD_STYLE_GETLINE));
27 static void *cmdi_ifok(oop_source *evts, oop_read *cl_read,
28 oop_rd_event evt, const char *errmsg, int errnoval,
29 const char *data, size_t recsz, void *cmdi_v) {
30 CommandInput *cmdi= cmdi_v;
33 if (evt == OOP_RD_EOF) {
34 cmdi->out.error(&cmdi->out,0,0);
39 return cmdi_iferr(evts,cl_read,evt,errmsg,errnoval,data,recsz,cmdi_v);
43 cmdi->doline(&ps, cmdi);
47 void cmdin_new(CommandInput *cmdi, int readfd) {
52 events->on_fd(events, readfd, OOP_EXCEPTION, cmdi_exception, cmdi);
54 cmdi->rd= oop_rd_new_fd(events, readfd, 0,0);
55 if (!cmdi->rd) diee("oop_rd_new_fd");
56 r= oop_rd_read(cmdi->rd, OOP_RD_STYLE_GETLINE, 1024,
59 if (r) diee("oop_rd_read");