/*
Copyright © 1998, 1999 Lucent Technologies Inc.  All rights reserved.  
Revisions Copyright © 1999, 2000 Vita Nuova Limited.  All rights reserved.
Revisions Copyright © 2001 Norman Ramsey.  All rights reserved.  
*/
#include "lib9.h"

#define	SIZE	8192
extern	int	printcol;
static	int	errcount = { 0 };
static	char	errmsg[] = "print errors";

int	_logging;

extern void	logmsg(int fd, char *s);

int
print(char *fmt, ...)
{
	char buf[SIZE], *out;
	va_list arg;
	int n;

	va_start(arg, fmt);
	out = doprint(buf, buf+SIZE, fmt, arg);
	va_end(arg);
	if(_logging) {
		n = (int)(out-buf);
		logmsg(1, buf);		/* fear not, doprint null-terminates */
	}
	else {
		n = write(1, buf, (int)(out-buf));
		if(n < 0)
			if(++errcount >= 10)
				exits(errmsg);
	}
	return n;
}

int
fprint(int f, char *fmt, ...)
{
	char buf[SIZE], *out;
	va_list arg;
	int n;

	va_start(arg, fmt);
	out = doprint(buf, buf+SIZE, fmt, arg);
	va_end(arg);
	if(_logging && (f==1 || f==2)) {	/* only log stdout and stderr */
		n = (int)(out-buf);
		logmsg(f, buf);		/* fear not, doprint null-terminates */
	}
	else {
		n = write(f, buf, (long)(out-buf));
		if(n < 0)
			if(++errcount >= 10)
				exits(errmsg);
	}
	return n;
}

#if 0
int
sprint(char *buf, char *fmt, ...)
{
	char *out;
	va_list arg;
	int scol;

	scol = printcol;
	va_start(arg, fmt);
	out = doprint(buf, buf+SIZE, fmt, arg);
	va_end(arg);
	printcol = scol;
	return out-buf;
}

int
snprint(char *buf, int len, char *fmt, ...)
{
	char *out;
	va_list arg;
	int scol;

	scol = printcol;
	va_start(arg, fmt);
	out = doprint(buf, buf+len, fmt, arg);
	va_end(arg);
	printcol = scol;
	return out-buf;
}
#endif


syntax highlighted by Code2HTML, v. 0.9.1