/*
* declarations common to
* - realtime daemon
- * - multiplexer daemon
+ * - gui-plan-* displayers
*/
#ifndef DAEMONS_H
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: */
char *desc;
int fd;
- FILE *logcopy;
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;
};
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, ...)