truebrain@9851: /* $Id$ */ truebrain@9851: truebrain@9851: /** @file ai_log.cpp Implementation of AILog. */ truebrain@9851: truebrain@9851: #include "ai_log.hpp" truebrain@9851: #include "../../core/alloc_func.hpp" truebrain@9851: #include "../../player_func.h" truebrain@9851: #include "../../debug.h" truebrain@9851: truebrain@9851: /* static */ void AILog::Info(const char *message) truebrain@9851: { truebrain@9851: AILog::Log(LOG_INFO, message); truebrain@9851: } truebrain@9851: truebrain@9851: /* static */ void AILog::Warning(const char *message) truebrain@9851: { truebrain@9851: AILog::Log(LOG_WARNING, message); truebrain@9851: } truebrain@9851: truebrain@9851: /* static */ void AILog::Error(const char *message) truebrain@9851: { truebrain@9851: AILog::Log(LOG_ERROR, message); truebrain@9851: } truebrain@9851: truebrain@9851: /* static */ void AILog::Log(AILog::AILogType level, const char *message) truebrain@9851: { truebrain@9851: if (AIObject::GetLogPointer() == NULL) { truebrain@9851: AIObject::GetLogPointer() = new LogData(); truebrain@9851: LogData *log = (LogData *)AIObject::GetLogPointer(); truebrain@9851: truebrain@9851: log->lines = CallocT(80); truebrain@9851: log->type = CallocT(80); truebrain@9851: log->count = 80; truebrain@9851: log->pos = log->count; truebrain@9851: } truebrain@9851: LogData *log = (LogData *)AIObject::GetLogPointer(); truebrain@9851: truebrain@9851: /* Go to the next log-line */ truebrain@9851: log->pos = (log->pos + 1) % log->count; truebrain@9851: truebrain@9851: /* Free last message, and write new message */ truebrain@9851: free(log->lines[log->pos]); truebrain@9851: log->lines[log->pos] = strdup(message); truebrain@9851: log->type[log->pos] = level; truebrain@9851: truebrain@9851: /* Cut string after first \n */ truebrain@9851: char *p; truebrain@9851: while ((p = strchr(log->lines[log->pos], '\n')) != NULL) { truebrain@9851: *p = '\0'; truebrain@9851: break; truebrain@9851: } truebrain@9851: truebrain@9851: /* Also still print to debug window */ truebrain@9851: DEBUG(ai, level, "[%d] %s", (uint)_current_player, log->lines[log->pos]); truebrain@9851: } truebrain@9851: truebrain@9851: /* static */ void AILog::FreeLogPointer() truebrain@9851: { truebrain@9851: LogData *log = (LogData *)AIObject::GetLogPointer(); truebrain@9851: truebrain@9851: for (int i = 0; i < log->count; i++) { truebrain@9851: free(log->lines[i]); truebrain@9851: } truebrain@9851: truebrain@9851: free(log->lines); truebrain@9851: free(log->type); truebrain@9851: delete log; truebrain@9851: }