Logo Search packages:      
Sourcecode: fhist version File versions

output.c

/*
 *    fhist - file history and comparison tools
 *    Copyright (C) 2000, 2002 Peter Miller;
 *    All rights reserved.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
 *
 * MANIFEST: functions to manipulate outputs through a common API
 */

#include <error.h> /* for assert */
#include <mem.h>
#include <mprintf.h>
#include <output/private.h>
#include <str.h>
#include <trace.h>


void
output_delete(output_ty *fp)
{
      trace(("output_delete(fp = %08lX)\n{\ntype is output_%s\n",
            (long)fp, fp->vptr->typename));
      if (fp->vptr->destructor)
            fp->vptr->destructor(fp);
      mem_free(fp);
      trace(("}\n"));
}


#ifdef output_filename
#undef output_filename
#endif

const char *
output_filename(output_ty *fp)
{
      const char  *result;

      trace(("output_filename(fp = %08lX)\n{\ntype is output_%s\n",
            (long)fp, fp->vptr->typename));
      assert(fp->vptr->filename);
      result = fp->vptr->filename(fp);
      trace(("return \"%s\"\n", result));
      trace(("}\n"));
      return result;
}


#ifdef output_ftell
#undef output_ftell
#endif

long
output_ftell(output_ty *fp)
{
      long        result;

      trace(("output_ftell(fp = %08lX)\n{\ntype is output_%s\n",
            (long)fp, fp->vptr->typename));
      assert(fp->vptr->ftell);
      result = fp->vptr->ftell(fp);
      trace(("return %ld;\n", result));
      trace(("}\n"));
      return result;
}


#ifdef output_fputc
#undef output_fputc
#endif

void
output_fputc(output_ty *fp, int c)
{
      trace(("output_fputc(fp = %08lX, c = %d)\n{\ntype is output_%s\n",
            (long)fp, c, fp->vptr->typename));
      assert(fp->vptr->fputc);
      fp->vptr->fputc(fp, c);
      trace(("}\n"));
}


#ifdef output_fputs
#undef output_fputs
#endif

void
output_fputs(output_ty *fp, const char *s)
{
      trace(("output_fputs(fp = %08lX, s = \"%s\")\n{\ntype is output_%s\n",
            (long)fp, s, fp->vptr->typename));
      assert(fp->vptr->fputs);
      fp->vptr->fputs(fp, s);
      trace(("}\n"));
}


#ifdef output_write
#undef output_write
#endif

void
output_write(output_ty *fp, const void *data, size_t len)
{
      trace(("output_write(fp = %08lX, data = %08lX, len = %ld)\n\
{\ntype is output_%s\n", (long)fp, (long)data, (long)len, fp->vptr->typename));
      assert(fp->vptr->write);
      fp->vptr->write(fp, data, len);
      trace(("}\n"));
}


#ifdef output_flush
#undef output_flush
#endif

void
output_flush(output_ty *fp)
{
      trace(("output_flusg(fp = %08lX)\n{\ntype is output_%s\n",
            (long)fp, fp->vptr->typename));
      assert(fp->vptr->flush);
      fp->vptr->flush(fp);
      trace(("}\n"));
}


void
output_fprintf(output_ty *fp, const char *fmt, ...)
{
      va_list           ap;

      va_start(ap, fmt);
      output_vfprintf(fp, fmt, ap);
      va_end(ap);
}


void
output_vfprintf(output_ty *fp, const char *fmt, va_list ap)
{
      char        *tmp;

      tmp = mem_copy_string(vmprintf(fmt, ap));
      assert(fp->vptr->fputs);
      fp->vptr->fputs(fp, tmp);
      mem_free(tmp);
}


void
output_put_str(output_ty *fp, string_ty *s)
{
      if (!s || !s->str_length)
            return;
      output_write(fp, s->str_text, s->str_length);
}

Generated by  Doxygen 1.6.0   Back to index