Changeset 244 for cpp/common/framsg.cpp


Ignore:
Timestamp:
05/31/14 21:31:01 (10 years ago)
Author:
Maciej Komosinski
Message:

Printing multi-line messages splits the message into separate lines and adds "..." prefix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/common/framsg.cpp

    r197 r244  
    99
    1010const char* MSG_LEVEL[]={"DEBUG","INFO","WARN","ERROR","CRITICAL"};
     11
     12void FramMessage(const char *o, const char *m, const char *txt, int w)
     13{
     14        int line = 0; //all lines except the first one get the "..." prefix
     15        const char* nextsep;
     16        do
     17        {
     18                nextsep = strchr(txt, '\n');
     19                if (nextsep == NULL) //last chunk, until the end
     20                        nextsep = strchr(txt, '\0');
     21                if ((nextsep > txt) && (nextsep[-1] == '\r'))
     22                        nextsep--;
     23                if (line == 0)
     24                {
     25                        if (*nextsep == 0) //there was only one line! no need to modify it in any way.
     26                                _FramMessageSingleLine(o, m, txt, w);
     27                        else //first line from multi-line
     28                                _FramMessageSingleLine(o, m, string(txt, nextsep - txt).c_str(), w);
     29                }
     30                else //consecutive lines from multi-line
     31                        _FramMessageSingleLine(o, m, ("..." + string(txt, nextsep - txt)).c_str(), w); //could also add line numbers like ...(3)... but let's keep the prefix short and simple
     32                line++;
     33                if ((nextsep[0] == '\r') && (nextsep[1] == '\n'))
     34                        txt = nextsep + 2;
     35                else if (*nextsep)
     36                        txt = nextsep + 1;
     37        } while (*nextsep);
     38}
     39
    1140
    1241void FMprintf_va(const char *o,const char *m,int w,const char *bl,va_list va)
Note: See TracChangeset for help on using the changeset viewer.