Log window : New buttons to enable/disable the log output.

git-svn-id: svn://svn.code.sf.net/p/hxcfloppyemu/code/HxCFloppyEmulator/HxCFloppyEmulator_software/trunk@883 63fa2f70-6a9b-4bc4-b855-9c6a949b1d69
This commit is contained in:
Jean-François DEL NERO
2013-07-14 15:42:34 +00:00
parent 62dcb89b0c
commit 7d7e49ace4
2 changed files with 76 additions and 55 deletions
+72 -55
View File
@@ -85,6 +85,8 @@ typedef struct logfifo_
int in;
int out;
unsigned char * fifotab[LOGFIFOSIZE];
int debug_msg;
int log_msg;
}logfifo;
logfifo logsfifo;
@@ -101,68 +103,72 @@ int CUI_affiche(int MSGTYPE,char * chaine, ...)
char lineheader[16];
char fullline[LOGSTRINGSIZE];
va_list marker;
va_start( marker, chaine );
if(!logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)])
if(((MSGTYPE == MSG_DEBUG ) && logsfifo.debug_msg) || (logsfifo.log_msg && (MSGTYPE!=MSG_DEBUG)) )
{
logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)]=(unsigned char*)malloc(LOGSTRINGSIZE+1);
}
va_list marker;
va_start( marker, chaine );
switch(MSGTYPE)
{
case MSG_INFO_0:
_snprintf(lineheader,sizeof(lineheader),"INFO 0 : ");
break;
case MSG_INFO_1:
_snprintf(lineheader,sizeof(lineheader),"INFO 1 : ");
break;
case MSG_WARNING:
_snprintf(lineheader,sizeof(lineheader),"WARNING: ");
break;
case MSG_ERROR:
_snprintf(lineheader,sizeof(lineheader),"ERROR : ");
break;
case MSG_DEBUG:
_snprintf(lineheader,sizeof(lineheader),"DEBUG : ");
break;
default:
_snprintf(lineheader,sizeof(lineheader),"UNKNOW MESSAGE TYPE: ");
break;
}
_vsnprintf(fullline,LOGSTRINGSIZE-sizeof(lineheader),chaine,marker);
if(logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)])
{
memset(logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)],0,LOGSTRINGSIZE+1);
logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)][LOGSTRINGSIZE]=0;
strcpy((char*)logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)],lineheader);
strcat((char*)logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)],fullline);
logsfifo.in=(logsfifo.in + 1) & (LOGFIFOSIZE-1);
if(logsfifo.in == logsfifo.out)
logsfifo.out=(logsfifo.out + 1) & (LOGFIFOSIZE-1);
}
if(guicontext->logfile)
{
debugfile=hxc_fopen(guicontext->logfile,"a");
if(debugfile)
if(!logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)])
{
fprintf(debugfile,"%s",lineheader);
fprintf(debugfile,"%s",fullline);
fprintf(debugfile,"\n");
hxc_fclose(debugfile);
logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)]=(unsigned char*)malloc(LOGSTRINGSIZE+1);
}
switch(MSGTYPE)
{
case MSG_INFO_0:
_snprintf(lineheader,sizeof(lineheader),"INFO 0 : ");
break;
case MSG_INFO_1:
_snprintf(lineheader,sizeof(lineheader),"INFO 1 : ");
break;
case MSG_WARNING:
_snprintf(lineheader,sizeof(lineheader),"WARNING: ");
break;
case MSG_ERROR:
_snprintf(lineheader,sizeof(lineheader),"ERROR : ");
break;
case MSG_DEBUG:
_snprintf(lineheader,sizeof(lineheader),"DEBUG : ");
break;
default:
_snprintf(lineheader,sizeof(lineheader),"UNKNOW MESSAGE TYPE: ");
break;
}
_vsnprintf(fullline,LOGSTRINGSIZE-sizeof(lineheader),chaine,marker);
if(logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)])
{
memset(logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)],0,LOGSTRINGSIZE+1);
logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)][LOGSTRINGSIZE]=0;
strcpy((char*)logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)],lineheader);
strcat((char*)logsfifo.fifotab[logsfifo.in&(LOGFIFOSIZE-1)],fullline);
logsfifo.in=(logsfifo.in + 1) & (LOGFIFOSIZE-1);
if(logsfifo.in == logsfifo.out)
logsfifo.out=(logsfifo.out + 1) & (LOGFIFOSIZE-1);
}
if(guicontext->logfile)
{
debugfile=hxc_fopen(guicontext->logfile,"a");
if(debugfile)
{
fprintf(debugfile,"%s",lineheader);
fprintf(debugfile,"%s",fullline);
fprintf(debugfile,"\n");
hxc_fclose(debugfile);
}
}
va_end( marker );
}
va_end( marker );
return 0;
}
@@ -244,6 +250,10 @@ static void tick_log(void *v) {
window->txt_displ->scroll(window->buf->count_lines(0,window->buf->length()),0);
}
logsfifo.debug_msg = window->dbg_msg_bt->value();
logsfifo.log_msg = window->log_msg_bt->value();
Fl::repeat_timeout(0.40, tick_log, v);
}
@@ -272,6 +282,13 @@ Log_box::Log_box()
guicontext->logfile=0;
memset(&logsfifo,0,sizeof(logfifo));
logsfifo.debug_msg = 0;
logsfifo.log_msg = 0;
dbg_msg_bt = new Fl_Light_Button(xsize - 155, ysize-35, 150, 30, "Debug");
log_msg_bt = new Fl_Light_Button(xsize - ((155*2)), ysize-35, 150, 30, "Info/Warning/Error");
old_index=0;
tick_log(this);
@@ -32,6 +32,7 @@ class Log_box : public Fl_Window {
Fl_Button *button_savelog;
Fl_Button *button_ok;
Fl_Window *window;
public:
@@ -39,6 +40,9 @@ class Log_box : public Fl_Window {
Fl_Text_Buffer* buf;
Fl_Text_Display * txt_displ;
Fl_Light_Button * dbg_msg_bt;
Fl_Light_Button * log_msg_bt;
Log_box();
~Log_box();