📄 logunit.cpp
字号:
/*
Copyright (C) 2001 Tsinghuaeolus
Authors : ChenJiang, YaoJinyi, CaiYunpeng, Lishi
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
If you make any changes or have any comments we would appreciate a
message to yjy01@mails.tsinghua.edu.cn.
*/
#include "logunit.h"
#include <string.h>
#include "global.h"
Log::Log(int max){
LogOn[0] = true; LogOn[1] = true; LogOn[2] = true; LogOn[3] = true;
LogOn[4] = true; LogOn[5] = true; LogOn[6] = true; LogOn[7] = true;
LogOn[8] = true; LogOn[9] = true; LogOn[10] = true; LogOn[11] = true;
LogOn[12] = true; LogOn[13] = true; LogOn[14] = true; LogOn[15] = true;
LogOn[16] = true; LogOn[17] = true; LogOn[18] = true; LogOn[19] = true;
LogOn[20] = true; LogOn[21] = true; LogOn[22] = true; LogOn[23] = true;
LogOn[24] = true; LogOn[25] = true; LogOn[26] = true; LogOn[27] = true;
LogOn[28] = true; LogOn[29] = true; LogOn[30] = true; LogOn[31] = true;
for(int i =0; i < 32; i ++){
LogOn[i] = false;
}
LogLocked = false;
LogCounts = 0;
for(i =0; i < 32; i++)
label[i][0] = 0;
hFile = INVALID_HANDLE_VALUE;
fp = NULL;
maxlogcount = max;
filenameset = false;
sa.nLength = sizeof(sa);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
logbuffer_len = 0;
}
Log::~Log(){
if (hFile != INVALID_HANDLE_VALUE)
CloseHandle(hFile);
if (fp != NULL){
if (logbuffer_len > 0){
fwrite(logbuffer, logbuffer_len, 1, fp);
logbuffer_len = 0;
}
fclose(fp);
}
}
bool Log::CanLog(int lognum){
if (lognum < 0 || lognum >31) lognum = 0;
if (LogOn[lognum] && filenameset && LogCounts<1
&& situation.CurrentTime >= 0 && !situation.ClockStopped && situation.CurrentTime != 6000){
LogCounts ++;
return true;
}
else
return false;
}
void Log::AssociateFile(char *filename){
if (filename != NULL){
strcpy(logfilename, filename);
//hFile = CreateFile(logfilename, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
fp = fopen(logfilename, "w");
filenameset = true;
}
else{
filenameset = false;
}
}
void Log::SetLogOn(int lognum){
if (lognum < 0 || lognum >31) lognum = 0;
LogOn[lognum] = true;
}
void Log::SetLogOff(int lognum){
if (lognum < 0 || lognum >31) lognum = 0;
LogOn[lognum] = false;
}
void Log::SetLabel(int lognum, char* caption){
if (lognum < 0 || lognum >31) lognum = 0;
strcpy(&label[lognum][0], caption);
}
void Log::LogCore(int lognum, char * log){
if (lognum < 0 || lognum >31) lognum = 0;
int writetofile = 0;
if (/*hFile != INVALID_HANDLE_VALUE */ fp != NULL){
int len_header, len_logstring;
if (label[lognum][0] != 0)
len_header = sprintf(&header[0],"(p%d,t%d)[%s]", MyNumber, situation.CurrentTime, label[lognum]);
else
len_header = sprintf(&header[0],"(p%d,t%d)", MyNumber, situation.CurrentTime);
len_logstring = strlen(log);
/*memcpy(logbuffer+logbuffer_len, header, len_header);
logbuffer_len += len_header;
memcpy(logbuffer+logbuffer_len, log, len_logstring);
logbuffer_len += len_logstring;
*(logbuffer+logbuffer_len) = 10;
logbuffer_len += 1;*/
if (logbuffer_len + len_header + len_logstring + 1 > 5 * MAXMESG - 100 && logbuffer_len > 0){
fwrite(logbuffer, logbuffer_len, 1, fp);
fflush(fp);
logbuffer_len = 0;
writetofile = 1;
}
memcpy(logbuffer+logbuffer_len, header, len_header);
logbuffer_len += len_header;
memcpy(logbuffer+logbuffer_len, log, len_logstring);
logbuffer_len += len_logstring;
*(logbuffer+logbuffer_len) = 10;
logbuffer_len += 1;
}
logcount ++;
if (logcount >= maxlogcount && fp != NULL/*hFile != INVALID_HANDLE_VALUE*/) {
fflush(fp);
//CloseHandle(hFile);
//hFile = CreateFile(logfilename, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
logcount = 0;
}
LogCounts --;
if (writetofile){
//DoLog(LOG_NONE, "Start Log");
}
}
void Log::LogAction(int lognum,char * format, ...){
if (!CanLog(lognum)) return;
va_list argptr;
va_start(argptr, format);
vsprintf(logstring, format, argptr);
va_end(argptr);
LogCore(lognum,logstring);
}
void Log::LogAction(char* format, ...){
if (!CanLog(0)) return;
va_list argptr;
va_start(argptr, format);
vsprintf(logstring, format, argptr);
va_end(argptr);
LogCore(0,logstring);
}
/* Log Data */
void LogData::LogCore(int lognum, char * log){
if (lognum < 0 || lognum >31) lognum = 0;
if (/*hFile != INVALID_HANDLE_VALUE */ fp != NULL){
int len_logstring;
len_logstring = strlen(log);
if (logbuffer_len + len_logstring + 1 > 5 * MAXMESG - 100){
fwrite(logbuffer, logbuffer_len, 1, fp);
logbuffer_len = 0;
}
memcpy(logbuffer+logbuffer_len, log, len_logstring);
logbuffer_len += len_logstring;
*(logbuffer+logbuffer_len) = 10;
logbuffer_len += 1;
}
logcount ++;
if (logcount >= maxlogcount && fp != NULL/*hFile != INVALID_HANDLE_VALUE*/) {
fclose(fp);
fp = fopen(logfilename, "a");
//CloseHandle(hFile);
//hFile = CreateFile(logfilename, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
logcount = 0;
}
LogCounts --;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -