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