Files
ti-nesulator/src/log.c
Godzil 8fcf756566 Update headers
- Update copyrights dates
- Remove the useless "All right reserved"
- Change incorrect name(s)
2019-12-05 16:42:11 +00:00

150 lines
3.1 KiB
C

/**
* Log Facility - The Quick6502 Project
* log.c
*
* Created by Manoël Trapier on 19/05/10
* Copyright (c) 2002-2019 986-Studio.
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <color.h>
#include <string.h>
#include <stdarg.h>
#include <log.h>
#include <sys/time.h>
#include <time.h>
#ifdef TIME_STAMP_LOG
void time_stamp_line(void)
{
/* Time "0" will be thefirst log line */
static char firstRun = 1;
static struct timeval firstTime;
struct timeval curTime;
int cMin, cSec;
long long cMSec;
/* Get datetime */
gettimeofday(&curTime, NULL);
if (firstRun == 1)
{
firstRun = 0;
firstTime.tv_sec = curTime.tv_sec;
firstTime.tv_usec = curTime.tv_usec;
}
cMSec = ((curTime.tv_sec - firstTime.tv_sec) * 1000) + (curTime.tv_usec - firstTime.tv_usec) / 1000;
cSec = (cMSec / 1000);
cMSec %= 1000;
cMin = cSec / 60;
cSec %= 60;
/* Put cursor at start of line */
printf("%c[s", 0x1B);
printf("%c[7000D", 0x1B);
printf("%c[1C", 0x1B);
printf(FWHITE"[" FYELLOW "%03d" FRED "." FBLUE "%02d" FRED "." FGREEN "%03lld" FWHITE "]" CNORMAL, cMin, cSec,
cMSec);
printf("%c[u", 0x1B);
}
#endif /* TIME_STAMP_LOG */
void log_real(int level, char *user, char *fmt, ...)
{
/* The LOG_PANIC must always be displayed */
if ((level <= MAX_DEBUG_LEVEL) || (level <= LOG_PANIC))
{
va_list va;
switch (level)
{
case LOG_PANIC:
printf(BRED FWHITE);
break;
case LOG_ERROR:
printf(FRED);
break;
case LOG_WARNING:
printf(FYELLOW);
break;
default:
case LOG_NORMAL:
printf(FGREEN);
break;
case LOG_VERBOSE:
printf(FCYAN);
break;
case LOG_DEBUG:
printf(BBLUE FWHITE);
break;
}
#ifdef TIME_STAMP_LOG
printf(" ");
#endif
if (user != NULL)
{
int i;
i = strlen(user);
if (i < 12)
{
i = 12 - i;
for (; i >= 0 ; i--)
{
putchar(' ');
}
}
printf("%s", user);
}
else
{
switch (level)
{
case LOG_PANIC:
printf(" PANIC");
break;
case LOG_ERROR:
printf(" Error");
break;
case LOG_WARNING:
printf(" Warning");
break;
default:
case LOG_NORMAL:
printf(" Info");
break;
case LOG_VERBOSE:
printf(" Verbose");
break;
case LOG_DEBUG:
printf(" Debug");
break;
}
}
printf(CNORMAL ": ");
#ifdef TIME_STAMP_LOG
time_stamp_line();
#endif /* TIME_STAMP_LOG */
va_start(va, fmt);
vprintf(fmt, va);
va_end(va);
if (fmt[0] != 0)
{
printf("\n");
}
}
}