1d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata/*
2d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * This file is part of ltrace.
38a730f3e5844b86386032e93f91aa3df814ad9c3Petr Machata * Copyright (C) 2011, 2012, 2013 Petr Machata, Red Hat Inc.
4d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * Copyright (C) 2009 Juan Cespedes
5d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata *
6d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * This program is free software; you can redistribute it and/or
7d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * modify it under the terms of the GNU General Public License as
8d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * published by the Free Software Foundation; either version 2 of the
9d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * License, or (at your option) any later version.
10d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata *
11d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * This program is distributed in the hope that it will be useful, but
12d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * WITHOUT ANY WARRANTY; without even the implied warranty of
13d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * General Public License for more details.
15d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata *
16d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * You should have received a copy of the GNU General Public License
17d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * along with this program; if not, write to the Free Software
18d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata * 02110-1301 USA
20d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata */
21e19b781a8f41f379fa0890edd2ffc768bfb44d94Petr Machata#ifndef _OUTPUT_H_
22e19b781a8f41f379fa0890edd2ffc768bfb44d94Petr Machata#define _OUTPUT_H_
23d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata
24e19b781a8f41f379fa0890edd2ffc768bfb44d94Petr Machata#include "fetch.h"
25d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata#include "forward.h"
26d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata
27929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machatavoid output_line(struct process *proc, const char *fmt, ...);
28929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machatavoid output_left(enum tof type, struct process *proc,
2929add4fdf852b10ddd22cac0d1390f6d01577bc2Petr Machata		 struct library_symbol *libsym);
30929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machatavoid output_right(enum tof type, struct process *proc,
318a730f3e5844b86386032e93f91aa3df814ad9c3Petr Machata		  struct library_symbol *libsym,
328a730f3e5844b86386032e93f91aa3df814ad9c3Petr Machata		  struct timedelta *spent);
33d71cf2d1b61338c9e77acd5479b017dbc0d2dffdPetr Machata
349c400988106520325615ad46a075b562649bbb38Petr Machata/* This function is for emitting lists of comma-separated strings.
359c400988106520325615ad46a075b562649bbb38Petr Machata *
369c400988106520325615ad46a075b562649bbb38Petr Machata * STREAM is where the output should be eventually sent.
379c400988106520325615ad46a075b562649bbb38Petr Machata *
389c400988106520325615ad46a075b562649bbb38Petr Machata * WRITER is the function to do the output.  It returns number of
399c400988106520325615ad46a075b562649bbb38Petr Machata * characters written, or a negative value if there were errors (like
409c400988106520325615ad46a075b562649bbb38Petr Machata * what fprintf does).  If WRITER returns 0, it means nothing was
41f16088426b28ee68c2c614a0142d56a3ec7a9511Petr Machata * written, and separator shouldn't therefore be emitted either.
429c400988106520325615ad46a075b562649bbb38Petr Machata *
439c400988106520325615ad46a075b562649bbb38Petr Machata * NEED_DELIMP serves for keeping state between calls.  It should
449c400988106520325615ad46a075b562649bbb38Petr Machata * point to a variable that is initialized to 0.  DATA is passed
459c400988106520325615ad46a075b562649bbb38Petr Machata * verbatim to the WRITER.
469c400988106520325615ad46a075b562649bbb38Petr Machata *
479c400988106520325615ad46a075b562649bbb38Petr Machata * Returns number of characters written to STREAM (including any
489c400988106520325615ad46a075b562649bbb38Petr Machata * separators), or a negative value if there were errors.  */
499c400988106520325615ad46a075b562649bbb38Petr Machataint delim_output(FILE *stream, int *need_delimp,
509c400988106520325615ad46a075b562649bbb38Petr Machata		 int (*writer)(FILE *stream, void *data), void *data);
519c400988106520325615ad46a075b562649bbb38Petr Machata
52adec201a52c240cf4b533c05106aedddc911ca76Petr Machata/* If C is positive, add it to *COUNTP.  Returns C.  */
53adec201a52c240cf4b533c05106aedddc911ca76Petr Machataint account_output(int *countp, int c);
54adec201a52c240cf4b533c05106aedddc911ca76Petr Machata
5589c5ca29993660f2edb2d875bd26748e09400f4dPetr Machatavoid report_error(char const *file, unsigned line_no, const char *fmt, ...);
5689c5ca29993660f2edb2d875bd26748e09400f4dPetr Machatavoid report_warning(char const *file, unsigned line_no, const char *fmt, ...);
5789c5ca29993660f2edb2d875bd26748e09400f4dPetr Machatavoid report_global_error(const char *fmt, ...);
58e19b781a8f41f379fa0890edd2ffc768bfb44d94Petr Machata
59e19b781a8f41f379fa0890edd2ffc768bfb44d94Petr Machata#endif /* _OUTPUT_H_ */
60