847 lines
20 KiB
C++
847 lines
20 KiB
C++
|
#define Use_MsgBase
|
|||
|
|
|||
|
#include <stdlib.h>
|
|||
|
#include <string.h>
|
|||
|
#include "proboard.hpp"
|
|||
|
|
|||
|
static void draw_button(int num , char *text , char cmd , char hotkey);
|
|||
|
static int readmsg_more();
|
|||
|
static void draw_readmsg_screen();
|
|||
|
static void kill_readmsg_buttons();
|
|||
|
|
|||
|
void
|
|||
|
readmsg(char *data)
|
|||
|
{
|
|||
|
MsgArea ma , reply_area;
|
|||
|
long orgmsg;
|
|||
|
String param[10];
|
|||
|
int searchmethod = 0;
|
|||
|
int searchorder = 0;
|
|||
|
char searchdata[80];
|
|||
|
long firstmsg=0;
|
|||
|
int area;
|
|||
|
bool inchain = FALSE;
|
|||
|
bool nonext = FALSE;
|
|||
|
bool newmode = FALSE;
|
|||
|
|
|||
|
Message msg;
|
|||
|
|
|||
|
MarkedMsgList marked = markedmsglist;
|
|||
|
|
|||
|
parse_data(data,param);
|
|||
|
|
|||
|
if(param[0][0]=='*') area = user.msgArea;
|
|||
|
else area = atoi(param[0]);
|
|||
|
|
|||
|
if(area)
|
|||
|
{
|
|||
|
if(!ma.read(area)) return;
|
|||
|
|
|||
|
if(!check_access(ma.readLevel,ma.readFlags,ma.readFlagsNot) && !ma.sysopAccess())
|
|||
|
{
|
|||
|
io << "\n\n" << S_ACCESS_DENIED << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
long n = ma.msgBase->numMsgs(ma);
|
|||
|
|
|||
|
if(n < 0)
|
|||
|
{
|
|||
|
io << '\n' << S_THIS_MESSAGE_AREA_IS_LOCKED << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//if(!rip_mode)
|
|||
|
if(n)
|
|||
|
{
|
|||
|
io << '\n' << S_THERE_ARE_X_MESSAGES_IN_THIS_AREA(form("%d",n)) << '\n';
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
io << '\n' << S_THERE_ARE_NO_MESSAGES_IN_THIS_AREA <<
|
|||
|
"\n\n" << S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
msg.setArea(area);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if(param[1][0]=='/' && param[1][1]=='N')
|
|||
|
{
|
|||
|
searchmethod = READMSG_MARKED;
|
|||
|
searchorder = +1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
String hotkeys = K_READ_MESSAGES_ORDER_SELECTION;
|
|||
|
hotkeys << '\r';
|
|||
|
|
|||
|
/*char *hotkeys="FRANSTIM\r";*/
|
|||
|
|
|||
|
char key;
|
|||
|
|
|||
|
if(area)
|
|||
|
{
|
|||
|
io << '\n';
|
|||
|
key = io.send(S_READ_MESSAGES_ORDER_SELECTION,hotkeys);
|
|||
|
|
|||
|
if(!key) key=io.wait(hotkeys);
|
|||
|
|
|||
|
key = hotkeys.find(String(char(key)));
|
|||
|
}
|
|||
|
else key = 3; // read new!
|
|||
|
|
|||
|
io << "\n\n";
|
|||
|
|
|||
|
switch(key)
|
|||
|
{
|
|||
|
case 7 : return;
|
|||
|
case 1 : io << S_READMSG_FORWARD << '\n';
|
|||
|
searchmethod = READMSG_ALL;
|
|||
|
searchorder = 1;
|
|||
|
break;
|
|||
|
case 2 : io << S_READMSG_REVERSE << '\n';
|
|||
|
searchmethod = READMSG_ALL;
|
|||
|
searchorder = -1;
|
|||
|
break;
|
|||
|
case 0 : io << S_READMSG_ALL << '\n';
|
|||
|
searchmethod = READMSG_ALL;
|
|||
|
break;
|
|||
|
case 3 : io << S_READMSG_NEW << '\n';
|
|||
|
searchmethod = READMSG_NEW;
|
|||
|
searchorder = 1;
|
|||
|
break;
|
|||
|
case 4 : {
|
|||
|
io << S_READMSG_SELECTED;
|
|||
|
|
|||
|
char k = wait_language_hotkeys(K_READMSG_SELECTED);
|
|||
|
|
|||
|
if(k == '\r') return;
|
|||
|
|
|||
|
io << K_READMSG_SELECTED[k];
|
|||
|
|
|||
|
switch(k)
|
|||
|
{
|
|||
|
case 0: k = 'F'; break;
|
|||
|
case 1: k = 'T'; break;
|
|||
|
case 2: k = 'S'; break;
|
|||
|
case 3: k = 'E'; break;
|
|||
|
}
|
|||
|
searchdata[0] = k;
|
|||
|
io << "\n\n" << S_READMSG_SELECTED_SEARCH_FOR;
|
|||
|
io.read(&searchdata[1],60,READMODE_UPALL);
|
|||
|
if(!searchdata[1]) return;
|
|||
|
searchmethod = READMSG_SEL;
|
|||
|
io << '\n';
|
|||
|
} break;
|
|||
|
case 5 : io << S_READMSG_INDIVIDUAL << '\n';
|
|||
|
searchmethod = READMSG_INDIV;
|
|||
|
searchorder = 1;
|
|||
|
break;
|
|||
|
case 6 : io << S_READMSG_MARKED << '\n';
|
|||
|
searchmethod = READMSG_MARKED;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
if(!searchorder)
|
|||
|
{
|
|||
|
io << S_READMSG_ALL_FORWARD_OR_REVERSE;
|
|||
|
key=wait_language_hotkeys(K_READMSG_ALL_FORWARD_OR_REVERSE);
|
|||
|
if(key==1)
|
|||
|
{
|
|||
|
searchorder = -1;
|
|||
|
io << S_READMSG_REVERSE << '\n';
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
searchorder = +1;
|
|||
|
io << S_READMSG_FORWARD << '\n';
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(area)
|
|||
|
{
|
|||
|
long highnum = ma.msgNum(ma.highMsg());
|
|||
|
long lownum = ma.msgNum(ma.lowMsg());
|
|||
|
|
|||
|
if(searchorder<0) firstmsg = highnum;
|
|||
|
else firstmsg = lownum;
|
|||
|
|
|||
|
if(searchmethod != READMSG_MARKED && searchmethod != READMSG_INDIV && searchmethod != READMSG_NEW)
|
|||
|
{
|
|||
|
io << '\n' << S_READMSG_START_AT_MESSAGE;
|
|||
|
io.read(firstmsg);
|
|||
|
|
|||
|
if(firstmsg > highnum && searchorder < 0) firstmsg = highnum;
|
|||
|
if(firstmsg < lownum && searchorder > 0) firstmsg = lownum;
|
|||
|
|
|||
|
firstmsg = ma.msgId(firstmsg);
|
|||
|
|
|||
|
io << '\n';
|
|||
|
}
|
|||
|
}
|
|||
|
} // No "/N" parameter
|
|||
|
|
|||
|
if(searchmethod == READMSG_NEW)
|
|||
|
{
|
|||
|
newmode = TRUE;
|
|||
|
|
|||
|
marked.clear();
|
|||
|
|
|||
|
io << '\n' << S_READMSG_SEARCHING_NEW_MESSAGES;
|
|||
|
|
|||
|
get_new_msgs(marked,area);
|
|||
|
|
|||
|
if(!marked.numMarked())
|
|||
|
{
|
|||
|
io << "\n\n" << S_READMSG_NO_NEW_MESSAGES_FOUND <<
|
|||
|
"\n\n" << S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
io << S_READMSG_X_NEW_MESSAGES_FOUND(form("%d",marked.numMarked())) << '\n';
|
|||
|
|
|||
|
searchmethod = READMSG_MARKED;
|
|||
|
}
|
|||
|
|
|||
|
if(searchmethod != READMSG_INDIV && searchmethod != READMSG_MARKED)
|
|||
|
{
|
|||
|
if(!msg.readFirst(searchmethod,searchorder,firstmsg,searchdata))
|
|||
|
{
|
|||
|
io << '\n' << S_READMSG_NO_MESSAGES_FOUND << "\n\n"
|
|||
|
<< S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
nonext = TRUE;
|
|||
|
}
|
|||
|
|
|||
|
int markedmsg_index = 0;
|
|||
|
|
|||
|
bool continuous = FALSE;
|
|||
|
|
|||
|
if(searchmethod!=READMSG_INDIV)
|
|||
|
{
|
|||
|
io << '\n' << S_READMSG_WAIT_AFTER_EACH_MSG;
|
|||
|
continuous = !io.ask(1);
|
|||
|
|
|||
|
if(continuous)
|
|||
|
{
|
|||
|
io << "\f\n\n" << S_PRESS_S_TO_STOP_OR_P_TO_PAUSE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(!continuous)
|
|||
|
{
|
|||
|
draw_readmsg_screen();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
for(;;)
|
|||
|
{
|
|||
|
if(searchmethod==READMSG_INDIV && !inchain)
|
|||
|
{
|
|||
|
long nr;
|
|||
|
|
|||
|
io << "\n\n" << S_READMSG_INDIV_ASK_MSGNUM;
|
|||
|
|
|||
|
if(io.read(nr)<0) break;
|
|||
|
|
|||
|
nr = ma.msgId(nr);
|
|||
|
|
|||
|
if(!msg.read(nr))
|
|||
|
{
|
|||
|
io << "\n\n" << S_READMSG_INDIV_MSG_NOT_FOUND;
|
|||
|
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
io << '\n';
|
|||
|
}
|
|||
|
|
|||
|
if(searchmethod == READMSG_MARKED && !inchain && !nonext)
|
|||
|
{
|
|||
|
if(markedmsg_index >= marked.numMarked()) break;
|
|||
|
|
|||
|
MessageIndex mi = marked[markedmsg_index++];
|
|||
|
|
|||
|
if(area)
|
|||
|
if(mi.area != area)
|
|||
|
continue;
|
|||
|
|
|||
|
if(!msg.read(mi.num,mi.area))
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
if(!area)
|
|||
|
{
|
|||
|
if(!ma.read(msg.areaNum())) continue;
|
|||
|
}
|
|||
|
|
|||
|
if(nonext || inchain)
|
|||
|
nonext=0;
|
|||
|
else
|
|||
|
{
|
|||
|
if(searchmethod!=READMSG_INDIV && searchmethod!=READMSG_MARKED)
|
|||
|
if(!msg.readNext(searchmethod,searchorder,searchdata))
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
#pragma warn -def
|
|||
|
if(orgmsg == msg.id) inchain = FALSE;
|
|||
|
#pragma warn .def
|
|||
|
|
|||
|
if(!msg.readAccess()) continue;
|
|||
|
|
|||
|
if((searchmethod!=READMSG_MARKED || ma.msgType==MSG_TOALL || newmode) && !inchain)
|
|||
|
{
|
|||
|
if(msg.id > ma.lastRead(user_recnr)) ma.setLastRead(user_recnr , msg.id);
|
|||
|
|
|||
|
if( int(msg.id) > user.highMsgRead
|
|||
|
&& ma.areaNum <= 200
|
|||
|
&& ma.msgBaseType == MSGBASE_HUDSON) user.highMsgRead = int(msg.id);
|
|||
|
}
|
|||
|
|
|||
|
if( !strcmpl(msg.to,user.name)
|
|||
|
|| (!strcmpl(msg.to,user.alias) && ma.flags>0 && user.alias[0]))
|
|||
|
{
|
|||
|
if(!(msg.attr & MSGATTR_RECEIVED))
|
|||
|
{
|
|||
|
msg.setFlag(MSGATTR_RECEIVED);
|
|||
|
|
|||
|
LOG(1,"Message #%ld received (area %d)",msg.num,msg.areaNum());
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LOG(2,"Message #%ld read (area %d)",msg.num,msg.areaNum());
|
|||
|
}
|
|||
|
|
|||
|
again:
|
|||
|
/*
|
|||
|
if(rip_mode && !continuous)
|
|||
|
{
|
|||
|
kill_readmsg_buttons();
|
|||
|
}
|
|||
|
*/
|
|||
|
stopped=0;
|
|||
|
|
|||
|
if(!cls_mode || continuous)
|
|||
|
{
|
|||
|
io << '\n';
|
|||
|
if(linecounter()) stopped = TRUE;
|
|||
|
io << '\n';
|
|||
|
if(linecounter()) stopped = TRUE;
|
|||
|
}
|
|||
|
|
|||
|
if(!continuous) io << '\f';
|
|||
|
|
|||
|
if(!stopped)
|
|||
|
switch(msg.show())
|
|||
|
{
|
|||
|
case 'N':
|
|||
|
case '\r': continue;
|
|||
|
case 'S': stopped=1;
|
|||
|
break;
|
|||
|
case 'A':goto again;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
if(rip_mode && !continuous)
|
|||
|
rip_send("\r!|1B0000020QPE020F000F080300020E07000000|Y00000100\n");
|
|||
|
*/
|
|||
|
|
|||
|
if(continuous)
|
|||
|
{
|
|||
|
if(stopped) break;
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
String optline("\n\6");
|
|||
|
String hotkeys("?\r");
|
|||
|
|
|||
|
int button_num = 0;
|
|||
|
|
|||
|
if(!inchain)
|
|||
|
{
|
|||
|
//hotkeys << 'N';
|
|||
|
|
|||
|
optline << S_MSGPROMPT_NEXT << ' ';
|
|||
|
hotkeys << K_MSGPROMPT_NEXT;
|
|||
|
|
|||
|
//if(ma.sysopAccess()) optline << "[N]xt ";
|
|||
|
// else optline << "[N]ext ";
|
|||
|
|
|||
|
if(!continuous) draw_button(button_num++,"Next",'N','N');
|
|||
|
}
|
|||
|
|
|||
|
if(searchmethod != READMSG_MARKED || markedmsg_index>1)
|
|||
|
{
|
|||
|
optline << S_MSGPROMPT_PREV << ' ';
|
|||
|
hotkeys << K_MSGPROMPT_PREV;
|
|||
|
//optline << "[P]rev ";
|
|||
|
//hotkeys << 'P';
|
|||
|
if(!continuous) draw_button(button_num++,"Previous",'P','P');
|
|||
|
}
|
|||
|
|
|||
|
optline << S_MSGPROMPT_AGAIN << ' ' << S_MSGPROMPT_STOP << ' ' << S_MSGPROMPT_MARK << ' ';
|
|||
|
hotkeys << K_MSGPROMPT_AGAIN << K_MSGPROMPT_STOP << K_MSGPROMPT_MARK;
|
|||
|
|
|||
|
//optline << "[A]gain [S]top [M]ark ";
|
|||
|
|
|||
|
if(!continuous) draw_button(button_num++,"Again",'A','A');
|
|||
|
if(!continuous) draw_button(button_num++,"Stop",'S','S');
|
|||
|
if(!continuous) draw_button(button_num++,"Mark",'M','M');
|
|||
|
|
|||
|
reply_area = ma;
|
|||
|
|
|||
|
if(ma.replyBoard)
|
|||
|
if(!reply_area.read(ma.replyBoard))
|
|||
|
reply_area = ma;
|
|||
|
|
|||
|
if(check_access(reply_area.writeLevel,reply_area.writeFlags,reply_area.writeFlagsNot) || reply_area.sysopAccess())
|
|||
|
{
|
|||
|
optline << S_MSGPROMPT_REPLY << ' ';
|
|||
|
hotkeys << K_MSGPROMPT_REPLY;
|
|||
|
|
|||
|
// if(reply_area.sysopAccess()) optline << "[R]ep ";
|
|||
|
// else optline << "[R]eply ";
|
|||
|
// hotkeys << 'R';
|
|||
|
if(!continuous) draw_button(button_num++,"Reply",'R','R');
|
|||
|
}
|
|||
|
|
|||
|
if(ma.sysopAccess() || !strcmpl(msg.from,user.name) || !strcmpl(msg.to,user.name))
|
|||
|
{
|
|||
|
optline << S_MSGPROMPT_UNREAD << ' ';
|
|||
|
hotkeys << K_MSGPROMPT_UNREAD;
|
|||
|
//optline << "[U]nrd ";
|
|||
|
//hotkeys << 'U';
|
|||
|
if(!continuous) draw_button(button_num++,"UnRead",'U','U');
|
|||
|
if( ma.sysopAccess()
|
|||
|
|| (ma.msgKind != MSG_ECHO)
|
|||
|
|| ( ma.msgKind == MSG_ECHO
|
|||
|
&& msg.attr & MSGATTR_UNSENT_ECHO
|
|||
|
&& !strcmpl(msg.from,user.name)
|
|||
|
)
|
|||
|
)
|
|||
|
{
|
|||
|
optline << S_MSGPROMPT_DEL << ' ';
|
|||
|
hotkeys << K_MSGPROMPT_DEL;
|
|||
|
//optline << "[D]el ";
|
|||
|
//hotkeys << 'D';
|
|||
|
if(!continuous) draw_button(button_num++,"Delete",'D','D');
|
|||
|
}
|
|||
|
}
|
|||
|
if(ma.sysopAccess())
|
|||
|
{
|
|||
|
optline << S_MSGPROMPT_SYSOPFUNC << ' ';
|
|||
|
hotkeys << K_MSGPROMPT_SYSOPFUNC;
|
|||
|
//if(ma.msgKind != MSG_ECHO)
|
|||
|
// {
|
|||
|
// optline << "[FVTX] ";
|
|||
|
// hotkeys << "FVTX";
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// optline << "[FVX] ";
|
|||
|
// hotkeys << "FVX";
|
|||
|
// }
|
|||
|
|
|||
|
if(!continuous) draw_button(button_num++,"Private",'T','T');
|
|||
|
if(!continuous) draw_button(button_num++,"Forward",'F','F');
|
|||
|
if(!continuous) draw_button(button_num++,"Move",'V','V');
|
|||
|
if(!continuous) draw_button(button_num++,"Export",'X','X');
|
|||
|
}
|
|||
|
if(inchain)
|
|||
|
{
|
|||
|
optline << S_MSGPROMPT_ORIG << ' ';
|
|||
|
hotkeys << K_MSGPROMPT_ORIG;
|
|||
|
//optline << "[O]rg ";
|
|||
|
//hotkeys << 'O';
|
|||
|
if(!continuous) draw_button(button_num++,"Original",'O','O');
|
|||
|
}
|
|||
|
|
|||
|
if(msg.next)
|
|||
|
{
|
|||
|
optline << "[+";
|
|||
|
if(msg.prev) optline << '/';
|
|||
|
hotkeys << '+';
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(msg.prev) optline << '[';
|
|||
|
}
|
|||
|
|
|||
|
if(msg.prev)
|
|||
|
{
|
|||
|
optline << "-] ";
|
|||
|
hotkeys << '-';
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(msg.next) optline << "] ";
|
|||
|
}
|
|||
|
|
|||
|
if(inchain) optline << "[?]: <\7" << K_MSGPROMPT_ORIG << "\6> \7";
|
|||
|
else optline << "[?]: <\7" << K_MSGPROMPT_NEXT << "\6> \7";
|
|||
|
|
|||
|
/*
|
|||
|
if(rip_mode && !continuous)
|
|||
|
{
|
|||
|
rip_nomore();
|
|||
|
io.show_remote = FALSE;
|
|||
|
}
|
|||
|
*/
|
|||
|
|
|||
|
char k=io.send(optline,hotkeys);
|
|||
|
|
|||
|
if(!k) k=io.wait(hotkeys);
|
|||
|
if(k=='\r') k=(inchain)?K_MSGPROMPT_ORIG[0]:K_MSGPROMPT_NEXT[0];
|
|||
|
io << k;
|
|||
|
|
|||
|
//if(rip_mode && !continuous) io.show_remote = TRUE;
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_STOP[0])
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_AGAIN[0])
|
|||
|
{
|
|||
|
goto again;
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_REPLY[0])
|
|||
|
{
|
|||
|
kill_readmsg_buttons();
|
|||
|
replymsg(msg);
|
|||
|
updatemenu = TRUE;
|
|||
|
draw_readmsg_screen();
|
|||
|
if(!msg.read(msg.id))
|
|||
|
continue;
|
|||
|
else
|
|||
|
goto again;
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_DEL[0])
|
|||
|
{
|
|||
|
if(!ma.sysopAccess())
|
|||
|
{
|
|||
|
io << "\n\n" << S_ASK_DELETE_MSG;
|
|||
|
|
|||
|
if(!io.ask()) break;
|
|||
|
}
|
|||
|
LOG(1,"Msg #%ld deleted (area %d)",msg.num,msg.areaNum());
|
|||
|
msg.remove();
|
|||
|
if(inchain)
|
|||
|
{
|
|||
|
if(msg.read(orgmsg)) nonext = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
msg.readPrev(searchmethod,searchorder,searchdata);
|
|||
|
}
|
|||
|
inchain=0;
|
|||
|
updatemenu = TRUE;
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_MARK[0])
|
|||
|
{
|
|||
|
LOG(2,"Msg #%ld marked (area %d)",msg.num,msg.areaNum());
|
|||
|
markedmsglist.add(msg);
|
|||
|
io << "\n\n" << S_MESSAGE_MARKED
|
|||
|
<< "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_SYSOPFUNC[2])
|
|||
|
{
|
|||
|
msg.toggleFlag(MSGATTR_PRIVATE);
|
|||
|
msg.read(msg.id);
|
|||
|
goto again;
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_SYSOPFUNC[0])
|
|||
|
{
|
|||
|
msg.forward();
|
|||
|
updatemenu = TRUE;
|
|||
|
goto again;
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_UNREAD[0])
|
|||
|
{
|
|||
|
msg.clearFlag(MSGATTR_RECEIVED);
|
|||
|
msg.read(msg.id);
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_SYSOPFUNC[1])
|
|||
|
{
|
|||
|
msg.move();
|
|||
|
if(inchain)
|
|||
|
{
|
|||
|
if(msg.read(orgmsg))
|
|||
|
nonext = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
msg.readPrev(searchmethod,searchorder,searchdata);
|
|||
|
}
|
|||
|
inchain = 0;
|
|||
|
updatemenu = TRUE;
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_SYSOPFUNC[3])
|
|||
|
{
|
|||
|
char fn[50];
|
|||
|
|
|||
|
/*
|
|||
|
if(rip_mode)
|
|||
|
{
|
|||
|
rip_start_dialog("Enter file name to export message to",49);
|
|||
|
io.show_remote = FALSE;
|
|||
|
}
|
|||
|
*/
|
|||
|
|
|||
|
io << "\n\n" << S_EXPORT_MESSAGE_TO_FILE;
|
|||
|
|
|||
|
io.show_remote = TRUE;
|
|||
|
|
|||
|
io << "\3";
|
|||
|
|
|||
|
io.read(fn,49,READMODE_UPALL);
|
|||
|
|
|||
|
//if(rip_mode) rip_end_dialog();
|
|||
|
|
|||
|
if(!fn[0]) goto again;
|
|||
|
|
|||
|
io << '\n';
|
|||
|
|
|||
|
msg.export(fn);
|
|||
|
|
|||
|
goto again;
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_PREV[0])
|
|||
|
{
|
|||
|
nonext = TRUE;
|
|||
|
|
|||
|
if(searchmethod == READMSG_MARKED)
|
|||
|
{
|
|||
|
markedmsg_index -= 2;
|
|||
|
nonext = FALSE;
|
|||
|
continue;
|
|||
|
}
|
|||
|
for(;;)
|
|||
|
{
|
|||
|
if(msg.readPrev(searchmethod,searchorder,searchdata))
|
|||
|
{
|
|||
|
if(!msg.readAccess()) continue;
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
io << "\n\n" << S_THERE_IS_NO_PREVIOUS_MSG << ' ' << S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(k==K_MSGPROMPT_ORIG[0])
|
|||
|
{
|
|||
|
if(inchain)
|
|||
|
if(msg.read(orgmsg))
|
|||
|
nonext=1;
|
|||
|
inchain=0;
|
|||
|
}
|
|||
|
|
|||
|
switch(k)
|
|||
|
{
|
|||
|
case '+': {
|
|||
|
if(!inchain) orgmsg = msg.id;
|
|||
|
|
|||
|
for(;;)
|
|||
|
{
|
|||
|
if(!msg.next)
|
|||
|
{
|
|||
|
io << "\n\n" << S_NO_ACCESS_TO_REPLIES
|
|||
|
<< "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
|
|||
|
if(msg.read(orgmsg)) nonext = TRUE;
|
|||
|
inchain=0;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
if(msg.read(msg.next))
|
|||
|
{
|
|||
|
if(!ma.read(msg.areaNum())) continue;
|
|||
|
|
|||
|
if(!msg.readAccess()) continue;
|
|||
|
|
|||
|
inchain = TRUE;
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(msg.read(orgmsg)) nonext = TRUE;
|
|||
|
inchain = FALSE;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
} break;
|
|||
|
case '-': {
|
|||
|
if(!inchain) orgmsg = msg.id;
|
|||
|
|
|||
|
for(;;)
|
|||
|
{
|
|||
|
if(!msg.prev)
|
|||
|
{
|
|||
|
io << "\n\n" << S_NO_ACCESS_TO_REPLIES
|
|||
|
<< "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
if(msg.read(orgmsg)) nonext=1;
|
|||
|
inchain = FALSE;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
if(msg.read(msg.prev))
|
|||
|
{
|
|||
|
if(!msg.readAccess()) continue;
|
|||
|
|
|||
|
inchain = TRUE;
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(msg.read(orgmsg)) nonext=1;
|
|||
|
inchain=0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
} break;
|
|||
|
case '?' : {
|
|||
|
if(showansasc("MSGHELP",NULL)==ANS_NOFILE)
|
|||
|
{
|
|||
|
io << "\n\n\f" << S_MSGHELP_TITLE << "\n\n";
|
|||
|
|
|||
|
io << S_MSGHELP_NEXT << '\n';
|
|||
|
io << S_MSGHELP_PREV << '\n';
|
|||
|
io << S_MSGHELP_AGAIN << '\n';
|
|||
|
io << S_MSGHELP_STOP << '\n';
|
|||
|
io << S_MSGHELP_MARK << '\n';
|
|||
|
io << S_MSGHELP_REPLY << '\n';
|
|||
|
io << S_MSGHELP_DEL << '\n';
|
|||
|
io << S_MSGHELP_UNREAD << '\n';
|
|||
|
io << S_MSGHELP_PLUS << '\n';
|
|||
|
io << S_MSGHELP_MINUS << '\n';
|
|||
|
io << S_MSGHELP_ORIG << '\n';
|
|||
|
|
|||
|
if(ma.sysopAccess())
|
|||
|
{
|
|||
|
io << S_MSGHELP_FORWARD << '\n';
|
|||
|
io << S_MSGHELP_PRIVATE << '\n';
|
|||
|
io << S_MSGHELP_MOVE << '\n';
|
|||
|
io << S_MSGHELP_EXPORT << '\n';
|
|||
|
}
|
|||
|
|
|||
|
io << '\n' << S_MSGHELP_NOTE << '\n';
|
|||
|
|
|||
|
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE << '\n';
|
|||
|
}
|
|||
|
goto again;
|
|||
|
}
|
|||
|
//default: goto again;
|
|||
|
}
|
|||
|
}// for
|
|||
|
|
|||
|
//if(!rip_mode)
|
|||
|
io << "\n\n" << S_END_OF_MESSAGES
|
|||
|
<< "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
|
|||
|
|
|||
|
/*
|
|||
|
if(rip_mode)
|
|||
|
{
|
|||
|
rip_reset();
|
|||
|
io.more_func = NULLFUNC;
|
|||
|
}
|
|||
|
*/
|
|||
|
}
|
|||
|
|
|||
|
static void
|
|||
|
draw_button(int num , char *text , char cmd , char hotkey)
|
|||
|
{
|
|||
|
/*
|
|||
|
if(rip_mode)
|
|||
|
{
|
|||
|
String buttons;
|
|||
|
|
|||
|
buttons << "!|1U" << meganum((num%6) * 100 + 30 )
|
|||
|
<< meganum((num/6) * 24 + 285)
|
|||
|
<< meganum((num%6) * 100 + 110)
|
|||
|
<< meganum((num/6) * 24 + 297)
|
|||
|
<< meganum(hotkey)
|
|||
|
<< "00<>" << text << "<>" << cmd << '\n';
|
|||
|
|
|||
|
rip_send(buttons);
|
|||
|
}
|
|||
|
*/
|
|||
|
}
|
|||
|
|
|||
|
static int
|
|||
|
readmsg_more()
|
|||
|
{
|
|||
|
rip_kill_mouse_fields();
|
|||
|
|
|||
|
draw_button(0,"Cont?" ,K_MORE[0],0);
|
|||
|
draw_button(1,"Yes" ,K_MORE[0],'Y');
|
|||
|
draw_button(2,"No" ,K_MORE[1],'N');
|
|||
|
draw_button(3,"Scroll" ,K_MORE[2],'S');
|
|||
|
|
|||
|
rip_nomore();
|
|||
|
|
|||
|
int k = wait_language_hotkeys(K_MORE);
|
|||
|
|
|||
|
if(k=='\r') k=0;
|
|||
|
|
|||
|
rip_kill_mouse_fields();
|
|||
|
rip_color(7);
|
|||
|
rip_fill_color(1,7);
|
|||
|
|
|||
|
rip_bar(12,279,625,326);
|
|||
|
|
|||
|
return k;
|
|||
|
}
|
|||
|
|
|||
|
static void
|
|||
|
draw_readmsg_screen()
|
|||
|
{
|
|||
|
/*
|
|||
|
if(rip_mode)
|
|||
|
{
|
|||
|
rip_reset();
|
|||
|
show_rip("_MSGFRAM");
|
|||
|
io.more_func = readmsg_more;
|
|||
|
}
|
|||
|
*/
|
|||
|
}
|
|||
|
|
|||
|
static void
|
|||
|
kill_readmsg_buttons()
|
|||
|
{
|
|||
|
/*
|
|||
|
if(rip_mode)
|
|||
|
{
|
|||
|
rip_kill_mouse_fields();
|
|||
|
rip_color(7);
|
|||
|
rip_fill_color(1,7);
|
|||
|
|
|||
|
rip_bar(12,279,625,326);
|
|||
|
rip_bar(355,8,624,25);
|
|||
|
rip_bar(355,40,624,54);
|
|||
|
}
|
|||
|
*/
|
|||
|
}
|