#include <stdio.h>
#include <stdarg.h>
#include "swis.h"

#include "Header.h"
#include "Log.h"

#define SysLog_LogMessage	0x4c880
#define SysLog_LogData		0x4c88a

static const char LogModule[] = Module_Title;
static char LogBuffer[1024];

#ifdef MAKEABS
static int verbosity = 0;

void LogVerbosity(int level)
{
	verbosity = level;
}
#endif

void LogInfo(const char* pformat, ...)
{
	va_list arg;

	va_start(arg, pformat);
	vsnprintf(LogBuffer, sizeof(LogBuffer), pformat, arg);
	va_end(arg);

#ifdef MAKEABS
	if (verbosity > 2)
		fprintf(stderr, "%s\n", LogBuffer);
#else
	_swix(SysLog_LogMessage, _INR(0,2), LogModule, LogBuffer, 125);
#endif
}

#ifdef MAKELOG
void Log(const char* pformat, ...)
{
	va_list arg;

	va_start(arg, pformat);
	vsnprintf(LogBuffer, sizeof(LogBuffer), pformat, arg);
	va_end(arg);

#ifdef MAKEABS
	if (verbosity > 0)
		fprintf(stderr, "%s\n", LogBuffer);
#else
	_swix(SysLog_LogMessage, _INR(0,2), LogModule, LogBuffer, 125);
#endif
}

void LogBinary(const void* pdata, int len)
{
	_swix(SysLog_LogData, _INR(0,4), LogModule, 125, pdata, len, -1);
}
#endif

#ifdef TIMELOG

static const char LogTime[] = "Timings";
static char TimeBuffer[1024];

int Time(void)
{
	int time;

	_swix(0x51d03, _OUT(0), &time);

	return time;
}

void TimeLog(int time, const char* pformat, ...)
{
	va_list arg;
	char* p;

	p = TimeBuffer + sprintf(TimeBuffer, "Time %7d: ", time);
	va_start(arg, pformat);
	vnsprintf(p, sizeof(TimeBuffer) + (p - TimeBuffer), pformat, arg);
	va_end(arg);
	_swix(SysLog_LogMessage, _INR(0,2), LogTime, TimeBuffer, 126);
}
#endif
