diff options
Diffstat (limited to 'src/message.cpp')
-rw-r--r-- | src/message.cpp | 101 |
1 files changed, 100 insertions, 1 deletions
diff --git a/src/message.cpp b/src/message.cpp index 838182f..678a80a 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -18,6 +18,57 @@ #include <stdarg.h> #include <stdio.h> #include "config.h" +#include <qregexp.h> + +static QCString outputFormat; +static int warnFormatOrder; // 1 = $file,$line,$text + // 2 = $text,$line,$file + // 3 = $line,$text,$file + // 4 = $file,$text,$line + // 5 = $text,$file,$line + // 6 = $line,$file,$text + +void initWarningFormat() +{ + int filePos = Config::warnFormat.find("$file"); + int linePos = Config::warnFormat.find("$line"); + int textPos = Config::warnFormat.find("$text"); + + // sort items on position (there are 6 cases) + warnFormatOrder = 1; + if (filePos>linePos && filePos>textPos) + { + if (linePos>textPos) // $text,$line,$file + { + warnFormatOrder = 2; + } + else // $line,$text,$file + { + warnFormatOrder = 3; + } + } + else if (filePos<linePos && filePos<textPos) + { + if (linePos>textPos) // $file,$text,$line + { + warnFormatOrder = 4; + } + } + else if (filePos<linePos && filePos>textPos) // $text,$file,$line + { + warnFormatOrder = 5; + } + else // $line,$file,$text + { + warnFormatOrder = 6; + } + outputFormat = Config::warnFormat. + replace(QRegExp("\\$file"),"%s"). + replace(QRegExp("\\$text"),"%s"). + replace(QRegExp("\\$line"),"%d")+ + '\n'; +} + void msg(const char *fmt, ...) { @@ -30,7 +81,31 @@ void msg(const char *fmt, ...) } } -void warn(const char *fmt, ...) +void warn(const char *file,int line,const char *fmt, ...) +{ + if (Config::warningFlag) + { + if (file==0) file="<unknwon>"; + char text[4096]; + va_list args; + va_start(args, fmt); + vsprintf(text, fmt, args); + va_end(args); + switch(warnFormatOrder) + { + case 1: fprintf(stderr,outputFormat,file,line,text); break; + case 2: fprintf(stderr,outputFormat,text,line,file); break; + case 3: fprintf(stderr,outputFormat,line,text,file); break; + case 4: fprintf(stderr,outputFormat,file,text,line); break; + case 5: fprintf(stderr,outputFormat,text,file,line); break; + case 6: fprintf(stderr,outputFormat,line,file,text); break; + default: + printf("Error: warning format has not been initialized!\n"); + } + } +} + +void warn_cont(const char *fmt, ...) { if (Config::warningFlag) { @@ -41,6 +116,30 @@ void warn(const char *fmt, ...) } } +void warn_undoc(const char *file,int line,const char *fmt, ...) +{ + if (Config::warningUndocFlag) + { + if (file==0) file="<unknwon>"; + char text[4096]; + va_list args; + va_start(args, fmt); + vsprintf(text, fmt, args); + va_end(args); + switch(warnFormatOrder) + { + case 1: fprintf(stderr,outputFormat,file,line,text); break; + case 2: fprintf(stderr,outputFormat,text,line,file); break; + case 3: fprintf(stderr,outputFormat,line,text,file); break; + case 4: fprintf(stderr,outputFormat,file,text,line); break; + case 5: fprintf(stderr,outputFormat,text,file,line); break; + case 6: fprintf(stderr,outputFormat,line,file,text); break; + default: + printf("Error: warning format has not been initialized!\n"); + } + } +} + void err(const char *fmt, ...) { va_list args; |