/* * 21 March 2001 * Wrappers for most common I/O to stdout and stderr. We use them * for two reasons: * 1. If, in the future, you want special handling of messages * (write to syslog, a dialog box, ...), it can be implemented * here. * 2. For code that will be meshed with a interpreter, there may * be special requirements. Tcl, for example, does not like it if * routines run around writing to stdout or stderr. * The overhead: * For most of the functions, this really is a very simple * wrapper with no real processing. * $Id: mprintf.c,v 1.2 2008/01/05 16:49:34 torda Exp $ */ #include #include #include #include #include "mprintf.h" /* ---------------- err_printf -------------------------------- * This writes the first argument to stderr, then sends the rest * of the arguments, without change as in fprintf (stderr, stuf...). * The idea is that a function should print error messages like * err_printf (funcname, "printf_string", printf arg list); */ int err_printf (const char *fnc_name, const char *fmt, ...) { int r; va_list ap; va_start (ap, fmt); mfprintf (stderr, "Function %s: ", fnc_name); r = vfprintf (stderr, fmt, ap); va_end (ap); return r; } /* ---------------- mprintf ----------------------------------- * Pure wrapper for printf. Output goes to stdout unchanged. */ int mprintf (const char *fmt, ...) { int ret; va_list ap; va_start (ap, fmt); ret = vfprintf (stdout, fmt, ap); va_end (ap); return ret; } /* ---------------- mputchar ---------------------------------- * Wrapper for putchar(). */ int mputchar ( int c) { return (putchar (c)); } /* ---------------- mfprintf --------------------------------- * Wrapper for fprintf. */ int mfprintf ( FILE *fp, const char *fmt, ...) { int r; va_list ap; va_start (ap, fmt); r = vfprintf (fp, fmt, ap); va_end (ap); return r; } /* ---------------- mfputc ------------------------------------ * Wrapper for fputc (). */ int mfputc (int c, FILE *fp) { if (fp != stdout) return (putc (c, fp)); else return (mputchar (c)); } /* ---------------- mputc ------------------------------------ * In the spirit of putc(), mputc() is defined as a macro. * See the mprintf.h header file. */ /* ---------------- mputs ------------------------------------ * Wrapper for puts. */ int mputs (const char *s) { return (mprintf ("%s\n", s)); } /* ---------------- mfputs ------------------------------------ * */ int mfputs (const char *s, FILE *fp) { if (fp == stdout) return ( mprintf ("%s", s)); else return (fputs (s, fp)); } /* ---------------- mperror ----------------------------------- * This has the same calling interface as perror, but calls * err_printf() so one can treat any writes to stderr specially */ void mperror (const char *s) { err_printf (s, "%s\n", strerror (errno)); }