proboard/SHOWMSG.CPP

331 lines
8.0 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 <ÄÄ] ",msgArea->msgNum(prev));
if(next) s << form("\7[ÄÄ> %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 << "";
}
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 << "";
}
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;
}