74 lines
1.4 KiB
C++
74 lines
1.4 KiB
C++
#define Use_MsgBase
|
|
|
|
#include "proboard.hpp"
|
|
|
|
bool
|
|
Message::readFirst(int method,int order,long first,char *data,int area)
|
|
{
|
|
if(area)
|
|
{
|
|
if(!setArea(area)) return FALSE;
|
|
}
|
|
|
|
if(order<0)
|
|
{
|
|
lastIndex = first + 1;
|
|
}
|
|
else
|
|
{
|
|
lastIndex = (first > 0) ? (first - 1) : 0;
|
|
}
|
|
|
|
return readNext(method,order,data);
|
|
}
|
|
|
|
bool
|
|
Message::readNext(int method,int order,char *data)
|
|
{
|
|
for(lastIndex += order ; lastIndex ; lastIndex+=order)
|
|
{
|
|
lastIndex = msgBase()->readMsg(*this,(order<0) ? (-lastIndex) : (lastIndex));
|
|
|
|
if(lastIndex < 0) break;
|
|
|
|
switch(method)
|
|
{
|
|
case READMSG_ALL:
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
case READMSG_SEL:
|
|
{
|
|
switch(data[0])
|
|
{
|
|
case 'F': if(strstrl(from,&data[1])) return TRUE;
|
|
break;
|
|
case 'T': if(strstrl(to,&data[1])) return TRUE;
|
|
break;
|
|
case 'S': if(strstrl(subj,&data[1])) return TRUE;
|
|
break;
|
|
case 'E': if(strstrl(from,&data[1]) || strstrl(to,&data[1])) return TRUE;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
bool
|
|
Message::readPrev(int method,int order,char *data)
|
|
{
|
|
long prevlast=lastIndex;
|
|
|
|
bool x = readNext(method,-order,data);
|
|
|
|
if(!x) lastIndex = prevlast;
|
|
|
|
return x;
|
|
}
|
|
|