331 lines
8.0 KiB
C++
331 lines
8.0 KiB
C++
|
#define Use_MsgBase
|
|||
|
|
|||
|
#include <ctype.h>
|
|||
|
#include <string.h>
|
|||
|
#include "proboard.hpp"
|
|||
|
|
|||
|
#define SEND_HEADER_LINE() \
|
|||
|
{ \
|
|||
|
k = io.send(s,hotkeys); \
|
|||
|
switch(k) \
|
|||
|
{ \
|
|||
|
case 0: break; \
|
|||
|
case 1: return 'S'; \
|
|||
|
default: return k; \
|
|||
|
} \
|
|||
|
if(/*!rip_mode &&*/ linecounter()) return 'S'; \
|
|||
|
s.clear(); \
|
|||
|
}
|
|||
|
|
|||
|
static void
|
|||
|
status_button( int num , char *text)
|
|||
|
{
|
|||
|
rip_button(590 - num*40,11,620 - num*40,21,0,0,"",text,"");
|
|||
|
}
|
|||
|
|
|||
|
byte
|
|||
|
Message::show()
|
|||
|
{
|
|||
|
char *hotkeys="AN\r";
|
|||
|
String s;
|
|||
|
char k;
|
|||
|
|
|||
|
//if(rip_mode) io.show_remote = FALSE;
|
|||
|
|
|||
|
s << '\r' << S_MSGHEADER_MESSAGENUM(form("%ld",msgNum()),msgArea->name) << " \7";
|
|||
|
|
|||
|
//s << form("\r\7Message #\6%-5ld\2 [%s] \7",msgNum(),msgArea->name);
|
|||
|
|
|||
|
if(attr & MSGATTR_PRIVATE) s << S_MSGHEADER_PRIVATE << ' ';
|
|||
|
|
|||
|
if(msgArea->msgKind == MSG_NET)
|
|||
|
{
|
|||
|
if(attr & MSGATTR_CRASH) s << S_MSGHEADER_CRASH << ' ';
|
|||
|
if(attr & MSGATTR_KILL) s << S_MSGHEADER_KILL << ' ';
|
|||
|
if(attr & MSGATTR_FILE) s << S_MSGHEADER_FILE << ' ';
|
|||
|
if(attr & MSGATTR_SENT) s << S_MSGHEADER_SENT << ' ';
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if(prev) s << form("\7[%ld <<3C><>] ",msgArea->msgNum(prev));
|
|||
|
if(next) s << form("\7[<5B><>> %ld] ",msgArea->msgNum(next));
|
|||
|
|
|||
|
s << '\n';
|
|||
|
|
|||
|
SEND_HEADER_LINE();
|
|||
|
|
|||
|
String org(from);
|
|||
|
String rip_org(from);
|
|||
|
String dest(to);
|
|||
|
String rip_dest(to);
|
|||
|
|
|||
|
org << "\7";
|
|||
|
dest << "\7";
|
|||
|
|
|||
|
if(msgArea->msgKind == MSG_NET)
|
|||
|
{
|
|||
|
int pt_from = pointNum(0);
|
|||
|
int pt_to = pointNum(1);
|
|||
|
|
|||
|
org << form(" (%d:%d/%d",origZone,origNet,origNode);
|
|||
|
dest << form(" (%d:%d/%d",destZone,destNet,destNode);
|
|||
|
|
|||
|
if(pt_from) org << form(".%d",pointNum(0));
|
|||
|
if(pt_to) dest << form(".%d",pointNum(1));
|
|||
|
|
|||
|
org << ')';
|
|||
|
dest << ')';
|
|||
|
|
|||
|
rip_org << form(" (%d:%d/%d",origZone,origNet,origNode);
|
|||
|
rip_dest << form(" (%d:%d/%d",destZone,destNet,destNode);
|
|||
|
|
|||
|
if(pt_from) rip_org << form(".%d",pointNum(0));
|
|||
|
if(pt_to) rip_dest << form(".%d",pointNum(1));
|
|||
|
|
|||
|
rip_org << ')';
|
|||
|
rip_dest << ')';
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
if(rip_mode)
|
|||
|
{
|
|||
|
io.show_remote = TRUE;
|
|||
|
|
|||
|
String rip_subj;
|
|||
|
|
|||
|
for(int i=0; subj[i] ; i++)
|
|||
|
{
|
|||
|
if(strchr("\\|",subj[i])) rip_subj << '\\';
|
|||
|
|
|||
|
rip_subj << subj[i];
|
|||
|
}
|
|||
|
|
|||
|
rip_send("\r!|Y00000100|1B0000020PI8030E080F080700080107000000\n");
|
|||
|
rip_send(form("!|1U2I0R9Q130000<>%s<>|1U2I159Q1H0000<>%s<>\n",(char *)rip_org,(char *)rip_dest));
|
|||
|
rip_send("!|1B0000020PI8030E080F080700000107000000\n");
|
|||
|
rip_send( form( "!|1UCS0RFA130000<>%d %s %04d<>|1UFK0RH8130000<>%02d:%02d<>\n",
|
|||
|
postDate[ 0 ],
|
|||
|
months_short[ postDate[ 1 ] ],
|
|||
|
postDate[ 2 ] + 1900, // Y2K FIX!
|
|||
|
postTime[ 0 ],
|
|||
|
postTime[ 1 ] ) );
|
|||
|
|
|||
|
if(attr & MSGATTR_RECEIVED)
|
|||
|
{
|
|||
|
rip_send("!|1B0000020PI803000F0F0807000G0107000000\n");
|
|||
|
rip_send("!|1UA015CI1H0000<>Received<>\n");
|
|||
|
rip_send("!|1B0000020PI8030E080F080700000107000000\n");
|
|||
|
|
|||
|
if ( recvDate.ok() )
|
|||
|
rip_send( form( "!|1UCS15FA1H0000<>%d %s %04d<>|1UFK15H81H0000<>%02d:%02d<>\n",
|
|||
|
recvDate[ 0 ],
|
|||
|
months_short[ recvDate[ 1 ] ],
|
|||
|
recvDate[ 2 ] + 1900, // Y2K FIX
|
|||
|
recvTime[ 0 ],
|
|||
|
recvTime[ 1 ],
|
|||
|
recvTime[ 2 ] ) );
|
|||
|
}
|
|||
|
|
|||
|
rip_send("!|1B0000020PI8030B080F080700080107000000\n");
|
|||
|
rip_send(form("!|1U2I1LH81X0000<>%s<>\n",(char *)rip_subj));
|
|||
|
|
|||
|
rip_send(form("!|1B0000020PHC020E080F080100000107000000|1U0K0B280N0000<>#%ld<>\n",msgNum()));
|
|||
|
rip_send(form("!|1B0000020PHC020E080F080300000107000000|1U2I0B9Q0N0000<>%s<>\n",msgArea->name));
|
|||
|
|
|||
|
rip_send("!|1B0000020PVK020E080F080300000107000000|Y02000400\n");
|
|||
|
|
|||
|
int button_num = 0;
|
|||
|
|
|||
|
if(attr & MSGATTR_PRIVATE)
|
|||
|
status_button(button_num++,"PVT");
|
|||
|
|
|||
|
if(msgArea->msgKind == MSG_NET)
|
|||
|
{
|
|||
|
if(attr & MSGATTR_CRASH) status_button(button_num++,"CR");
|
|||
|
if(attr & MSGATTR_KILL) status_button(button_num++,"KILL");
|
|||
|
if(attr & MSGATTR_FILE) status_button(button_num++,"FILE");
|
|||
|
if(attr & MSGATTR_SENT) status_button(button_num++,"SNT");
|
|||
|
}
|
|||
|
|
|||
|
if(prev || next) rip_send("!|1B0000020QOY020E000F080500000107000000\n");
|
|||
|
if(prev) rip_send("!|1UA00BB40N1O00<><<>-\n");
|
|||
|
if(next) rip_send("!|1UBE0BCI0N1Q00<>><>+\n");
|
|||
|
|
|||
|
rip_send("!|1B0000020QPE020F000F080300020E07000000|Y00000100\n");
|
|||
|
|
|||
|
rip_screenlines = 24;
|
|||
|
|
|||
|
io.show_remote = FALSE;
|
|||
|
}
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
// Y2K FIXED!
|
|||
|
|
|||
|
s << S_MSGHEADER_FROM( (char *) org,
|
|||
|
form( "%2d %s %04d",
|
|||
|
postDate[ 0 ],
|
|||
|
months_short[ postDate[ 1 ] ],
|
|||
|
postDate[ 2 ] + 1900 ),
|
|||
|
|
|||
|
form( "%02d:%02d",
|
|||
|
postTime[ 0 ],
|
|||
|
postTime[ 1 ] )
|
|||
|
) << '\n';
|
|||
|
|
|||
|
//s << form("\6From: \3%-47.47s \6Posted:\3 %2d %s %02d\5 %02d:%02d\n",
|
|||
|
// (char *)org,postDate[0],months_short[postDate[1]],postDate[2],postTime[0],postTime[1]);
|
|||
|
|
|||
|
SEND_HEADER_LINE();
|
|||
|
|
|||
|
s << S_MSGHEADER_TO((char *)dest) << ' ';
|
|||
|
|
|||
|
//s << form("\6To : \3%-47.47s \6",(char *)dest);
|
|||
|
|
|||
|
if(attr & MSGATTR_RECEIVED)
|
|||
|
{
|
|||
|
if(recvDate.ok())
|
|||
|
{
|
|||
|
|
|||
|
// Y2K FIX!
|
|||
|
|
|||
|
s << S_MSGHEADER_RECEIVED_ON( form( "%2d %s %04d",
|
|||
|
recvDate[ 0 ],
|
|||
|
months_short[ recvDate[ 1 ] ],
|
|||
|
recvDate[ 2 ] + 1900 ),
|
|||
|
|
|||
|
form( "%02d:%02d",
|
|||
|
recvTime[ 0 ],
|
|||
|
recvTime[ 1 ] ) );
|
|||
|
|
|||
|
//s << form("Received:\3 %2d %s %02d\5 %02d:%02d",recvDate[0],months_short[recvDate[1]],recvDate[2],recvTime[0],recvTime[1],recvTime[2]);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
s << S_MSGHEADER_RECEIVED;
|
|||
|
//s << "Received";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
s << '\n';
|
|||
|
|
|||
|
SEND_HEADER_LINE();
|
|||
|
|
|||
|
if(attr & MSGATTR_FILE) s << S_MSGHEADER_FILEATTACHED(subj) << '\n';
|
|||
|
else s << S_MSGHEADER_SUBJECT(subj) << '\n';
|
|||
|
|
|||
|
SEND_HEADER_LINE();
|
|||
|
|
|||
|
s << "\n\7";
|
|||
|
|
|||
|
SEND_HEADER_LINE();
|
|||
|
|
|||
|
s = "";
|
|||
|
|
|||
|
io.show_remote = TRUE;
|
|||
|
|
|||
|
io << "\7";
|
|||
|
|
|||
|
int inkludge=0;
|
|||
|
|
|||
|
String wrap;
|
|||
|
|
|||
|
int inquote=0;
|
|||
|
int index=0;
|
|||
|
|
|||
|
char line[100];
|
|||
|
memset(line,0,100);
|
|||
|
|
|||
|
bool msgdone = FALSE;
|
|||
|
|
|||
|
for(long txt_off = 0; !msgdone ;txt_off += 255)
|
|||
|
{
|
|||
|
char r[256];
|
|||
|
|
|||
|
int l = msgBase()->readMsgText(*this,r,txt_off,255);
|
|||
|
|
|||
|
if(l < 255) msgdone = TRUE;
|
|||
|
|
|||
|
for(int j=0;j<l;j++)
|
|||
|
{
|
|||
|
byte x=toupper(io.readkey());
|
|||
|
switch(x)
|
|||
|
{
|
|||
|
case 'S':
|
|||
|
case 'N':
|
|||
|
case '\r': return x;
|
|||
|
case 'P': io.wait("P\r");
|
|||
|
}
|
|||
|
|
|||
|
x = r[j];
|
|||
|
|
|||
|
if(x == '\t') x = ' ';
|
|||
|
if(x == 1) inkludge=1;
|
|||
|
if(x == '\n' || x == 0x8D || x <= 8) continue;
|
|||
|
|
|||
|
if(x == '\r')
|
|||
|
{
|
|||
|
x='\n';
|
|||
|
if(inkludge)
|
|||
|
{
|
|||
|
inkludge=0;
|
|||
|
continue;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(inkludge) continue;
|
|||
|
|
|||
|
if(x=='\n')
|
|||
|
{
|
|||
|
inquote=0;
|
|||
|
for(int i=0;i<6 && i<index;i++) if(line[i]=='>') inquote=1;
|
|||
|
if(inquote)
|
|||
|
{
|
|||
|
if(avatar) io << char(22) << char(1) << char(0xB);
|
|||
|
else if(ansi_mode) io << "[36m";
|
|||
|
}
|
|||
|
if(strncmp(line,"SEEN-BY",7))
|
|||
|
{
|
|||
|
io << line << '\n';
|
|||
|
if(linecounter()) return 'S';
|
|||
|
}
|
|||
|
if(inquote)
|
|||
|
{
|
|||
|
if(avatar) io << char(22) << char(1) << char(0xF);
|
|||
|
else if(ansi_mode) io << "[37m";
|
|||
|
}
|
|||
|
|
|||
|
memset(line,0,100);
|
|||
|
index=0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(x>=' ' || x==0x1B) line[index++] = x;
|
|||
|
}
|
|||
|
|
|||
|
if(index>79)
|
|||
|
{
|
|||
|
wordwrap(line,wrap,79);
|
|||
|
if(strncmp(line,"SEEN-BY",7))
|
|||
|
{
|
|||
|
io << line << '\n';
|
|||
|
if(linecounter()) return 'S';
|
|||
|
}
|
|||
|
memset(line,0,100);
|
|||
|
strcpy(line,wrap);
|
|||
|
index=strlen(line);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(index)
|
|||
|
if(strncmp(line,"SEEN-BY",7))
|
|||
|
{
|
|||
|
io << line << '\n';
|
|||
|
if(linecounter()) return 'S';
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|