#include <stdarg.h>
#include <stdio.h>
#include <limits.h>
#include "lib.h"

#ifndef __GNUC__
static FILE dummyf =
	{0L, (unsigned char *)0, (unsigned char *)0,
	     _IOWRT|_IOBIN|_IOSTRING|_IOFBF, 0, LONG_MAX, '\0'};
#endif

__EXTERN int _doprnt __PROTO((FILE *file, const char *fmt, va_list argp));

#ifdef __STDC__
int sprintf(char *buf, const char *fmt, ...)
#else
int sprintf(buf, fmt)
	char *buf;
	const char *fmt;
#endif
	{
	register int n;
	va_list argp;
#ifdef __GNUC__
	FILE sf = 
	{0L, (unsigned char *)buf, (unsigned char *)buf,
	     _IOWRT|_IOBIN|_IOSTRING|_IOFBF, 0, LONG_MAX,'\0'};
#else
	FILE sf;
 
	sf = dummyf;
	sf._ptr = sf._base = (unsigned char *)buf;
#endif
	
	va_start(argp, fmt);
	n = _doprnt(&sf, fmt, argp);
	*(sf._ptr) = '\0';		/* always tie of the string */
	return(n);
	}

int vsprintf(buf, fmt, args)
	char *buf;
	const char *fmt;
	va_list args;
	{
	register int n;
#ifdef __GNUC__	
	FILE sf = 
	{0L, (unsigned char *)buf, (unsigned char *)buf,
	     _IOWRT|_IOBIN|_IOSTRING|_IOFBF, 0, LONG_MAX,'\0'};
#else
	FILE sf;

	sf = dummyf;
	sf._ptr = sf._base = (unsigned char *)buf;
#endif
	n = _doprnt(&sf, fmt, args);
	*(sf._ptr) = '\0';		/* always tie of the string */
	return(n);
	}
