Archived
1
0
Fork 0
This repository has been archived on 2025-09-02. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
skcblitz/log.h

119 lines
3.2 KiB
C
Raw Permalink Normal View History

2025-09-02 14:43:36 +02:00
void log_sys(const char *msg, int length, int offset);
ulong tmr_rtime();
void log_out(const char *str) {
char c;
int pos = 0;
int last = 0;
uint color;
// fprintf(stderr, CON_DGRAY"["CON_GREEN"%s"CON_DGRAY"]["CON_LGRAY"%s"CON_DGRAY"][%s%s"CON_DGRAY"] %s",
// tm, prefix, log_concolor[level], log_levels[level], log_concolor[level]);
while(c = str[pos]) {
if(((c >= CHR_COLORS1) && (c <= CHR_COLORE1)) || ((c >= CHR_COLORS2) && (c <= CHR_COLORE2))) {
if(pos - last)
fwrite(&str[last], 1, pos - last, stderr);
color = (c >= CHR_COLORS2) && (c <= CHR_COLORE2) ? gdr.aux_colors[c - CHR_COLORS2] : text_colors[c - CHR_COLORS1];
fprintf(stderr, "\x1b[38;2;%d;%d;%dm", (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
last = ++pos;
continue;
}
else if(c == CHR_CRESET) {
if(pos - last)
fwrite(&str[last], 1, pos - last, stderr);
fprintf(stderr, "\x1b[0m");
last = ++pos;
continue;
}
else if(c == CHR_UNK) {
if(pos - last)
fwrite(&str[last], 1, pos - last, stderr);
fprintf(stderr, "?");
last = ++pos;
continue;
}
else if(c >= 0 && c < CHR_SPC && c != CHR_NLN) {
if(pos - last)
fwrite(&str[last], 1, pos - last, stderr);
last = ++pos;
continue;
}
pos++;
if(!str[pos] && (pos - last))
fwrite(&str[last], 1, pos - last, stderr);
}
fprintf(stderr, "\x1b[0m\n");
}
void log_msg(const char *prefix, byte level, const char *fmt, va_list ap) {
char tm[32];
int pos = 0;
int len;
if(level > sys.log_level)
return;
str_time(tm, tmr_rtime());
pos = sprintf(sys.log_buf, COL_DGRAY"["COL_GREEN"%s"COL_DGRAY"]["COL_LGRAY"%s"COL_DGRAY"][%s%s"COL_DGRAY"] %s",
tm, prefix, log_colors[level], log_levels[level], log_colors[level]);
len = pos + vsnprintf((sys.log_buf)+pos, LOG_BUF-pos, fmt, ap);
log_sys(sys.log_buf, len, pos - 1);
log_out(sys.log_buf);
}
void log_str(const char *prefix, byte level, const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
log_msg(prefix, level, fmt, ap);
va_end(ap);
}
LOG_FUNC(logu, LOG_USER)
LOG_FUNC(loge, LOG_ERROR)
LOG_FUNC(logw, LOG_WARN)
LOG_FUNC(logi, LOG_INFO)
LOG_FUNC(logp, LOG_PERF)
LOG_FUNC(logd, LOG_DEBUG)
LOG_FUNC(logt, LOG_TRACE)
void snd_log(byte level, const char *fmt, va_list ap) {
while(sgt.log_queue == SND_LOG) {
;
}
pthread_mutex_lock(&sgt.log_lock);
char *msg = &sgt.logs[sgt.log_push * SND_LOG_LEN];
msg[0] = (char)level;
vsnprintf(&msg[1], SND_LOG_LEN - 1, fmt, ap);
if(++(sgt.log_push) == SND_LOG)
sgt.log_push = 0;
sgt.log_queue += 1;
pthread_mutex_unlock(&sgt.log_lock);
}
SLOG_FUNC(snd_logu, LOG_USER)
SLOG_FUNC(snd_loge, LOG_ERROR)
SLOG_FUNC(snd_logw, LOG_WARN)
SLOG_FUNC(snd_logi, LOG_INFO)
SLOG_FUNC(snd_logp, LOG_PERF)
SLOG_FUNC(snd_logd, LOG_DEBUG)
SLOG_FUNC(snd_logt, LOG_TRACE)
SLOG_FUNC(snd_logx, SND_LOGX)
void plr_tlog(int type, const char *text);
void snd_log_flush() {
if(sgt.disabled)
return;
pthread_mutex_lock(&sgt.log_lock);
while(sgt.log_queue) {
char *msg = &sgt.logs[sgt.log_pop * SND_LOG_LEN];
if(msg[0] == SND_LOGX)
plr_tlog(msg[1] - '0', &msg[2]);
else
log_str(LOG_SND, msg[0], "%s", &msg[1]);
if(++(sgt.log_pop) == SND_LOG)
sgt.log_pop = 0;
sgt.log_queue -= 1;
}
pthread_mutex_unlock(&sgt.log_lock);
}