chiark / gitweb /
hostside: more length for bavarian
[trains.git] / hostside / daemons.h
index d0878e637388a5f6d40feced62499bb418b1e879..1c1fa0f4d526e19c928b1f1a0375843449c67d4a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * declarations common to
  *  - realtime daemon
- *  - multiplexer daemon
+ *  - gui-plan-* displayers
  */
 
 #ifndef DAEMONS_H
@@ -21,6 +21,9 @@ typedef struct OutBufferChain OutBufferChain;
 typedef void OutBufferError(OutBufferChain*, const char *e1, const char *e2
                            /* on error: both e1 and e2 non-0. say `$e1: $e2'
                             * on eof: both e1 and e2 =0. */);
+typedef void OutBufferEmpty(OutBufferChain*);
+
+typedef void CopyCallBack(char *m, size_t l, void *u);
 
 struct OutBufferChain {
   /* set by user: */
@@ -28,8 +31,11 @@ struct OutBufferChain {
   int fd;
   int limit; /* 0 means obc_init will set a default */
   OutBufferError *error;
+  OutBufferEmpty *empty; /* may be 0 */
+  /* set/used by obc_... but may be read by user */
+  int total; /* amount buffered */
   /* set/used by obc_..., oprintf, etc., only */
-  int done_of_head, total;
+  int done_of_head; /* -1 = empty and fileevent not registered with liboop */
   struct { OutBuffer *head, *tail; } obs;
 };
 
@@ -38,6 +44,9 @@ void obc_init_core(OutBufferChain *ch); /* doesn't mess with fd */
 int obc_tryflush(OutBufferChain *ch);
  /* returns 0 for all flushed or errno, including particularly EWOULDBLOCK */
 
+void ovprintf_ccb(OutBufferChain *ch, CopyCallBack *ccb, void *ccbu,
+                  const char *fmt, va_list al)
+     __attribute__((format(printf,4,0)));
 void ovprintf(OutBufferChain *ch, const char *fmt, va_list al)
      __attribute__((format(printf,2,0)));
 void oprintf(OutBufferChain *ch, const char *msg, ...)