/*
 * The Spar Library - modular math parser
 * Copyright (C) 2000,2001 Davide Angelocola <davide178@inwind.it>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 *
 */

#include <stdio.h>
#include <stdarg.h>
#include <spar/sl_conf.h>

static void __writer_internal (const char *, va_list, const char *);

void
sl_write (const char *fmt, ...)
{
  va_list ap;

  va_start (ap, fmt);
  __writer_internal (fmt, ap, NULL);
  va_end (ap);
}

void
sl_writeln (const char *fmt, ...)
{
  va_list ap;

  va_start (ap, fmt);
  __writer_internal (fmt, ap, NULL);
  va_end (ap);
  puts ("");
}

void
sl_writef (const char *file, const char *fmt, ...)
{
  va_list ap;

  va_start (ap, fmt);
  __writer_internal (fmt, ap, file);
  va_end (ap);
}

void
sl_writefln (const char *file, const char *fmt, ...)
{
  va_list ap;

  va_start (ap, fmt);
  __writer_internal (fmt, ap, file);
  va_end (ap);
  puts ("");
}

static void
__writer_internal (const char *fmt, va_list ap, const char *filename)
{
  char buffer[SL_MAX_BUFFER_LEN + 1];
  buffer[vsnprintf (buffer, SL_MAX_BUFFER_LEN, fmt, ap)] = '\0';

  if (filename != NULL)
    {
      FILE *file;

      if ((file = fopen (filename, "w")) != NULL)
	{
	  fputs (buffer, file);
	  fclose (file);
	}
      else
	fputs ("Failed to open log file.", stderr);
    }
  else
    {
      /*
       *  filename == NULL
       *  printing to stdout
       */
      fputs (buffer, stdout);
    }

  fflush (NULL);
  return;
}


syntax highlighted by Code2HTML, v. 0.9.1