328 lines
6.0 KiB
C++
328 lines
6.0 KiB
C++
#define Use_MsgBase
|
|
|
|
#include <string.h>
|
|
#include "proboard.hpp"
|
|
|
|
const int text_bufsize = 512;
|
|
|
|
|
|
|
|
void Message::export( char *fname )
|
|
{
|
|
File outf;
|
|
|
|
|
|
if ( ! outf.open( fname, fmode_create ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
outf << form( "Message #%-5ld [%s] ",
|
|
msgNum(),
|
|
msgArea->name );
|
|
|
|
|
|
if ( attr & MSGATTR_PRIVATE )
|
|
{
|
|
outf << "[PRIVATE] ";
|
|
}
|
|
|
|
|
|
if ( msgArea->msgKind == MSG_NET )
|
|
{
|
|
if ( attr & MSGATTR_CRASH ) outf << "[CRASH] ";
|
|
if ( attr & MSGATTR_KILL ) outf << "[KILL] ";
|
|
if ( attr & MSGATTR_FILE ) outf << "[FILE] ";
|
|
if ( attr & MSGATTR_SENT ) outf << "[SENT] ";
|
|
}
|
|
|
|
|
|
if ( prev )
|
|
{
|
|
outf << form( "[%ld <ÄÄ] ",
|
|
msgArea->msgNum( prev ) );
|
|
}
|
|
|
|
|
|
if ( next )
|
|
{
|
|
outf << form( "[ÄÄ> %ld] ",
|
|
msgArea->msgNum( next ) );
|
|
}
|
|
|
|
|
|
outf << "\r\n";
|
|
|
|
|
|
String org( from );
|
|
String dest( to );
|
|
|
|
|
|
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 << ')';
|
|
}
|
|
|
|
|
|
outf << form( "From: %-46.46s Posted: %2d %s %02d %02d:%02d\r\n",
|
|
(char *) org,postDate[ 0 ],
|
|
months_short[ postDate[ 1 ] ],
|
|
postDate[ 2 ] % 100, // Y2K FIXED!
|
|
// postDate[ 2 ], // Y2K BUG!
|
|
postTime[ 0 ],
|
|
postTime[ 1 ] );
|
|
|
|
outf << form( "To : %-46.46s ",
|
|
(char *) dest );
|
|
|
|
|
|
if ( attr & MSGATTR_RECEIVED )
|
|
{
|
|
outf << form( "Received: %2d %s %02d %02d:%02d",
|
|
recvDate[ 0 ],
|
|
months_short[ recvDate[ 1 ] ],
|
|
recvDate[ 2 ] % 100, // Y2K FIXED!
|
|
// recvDate[ 2 ], // Y2K BUG!
|
|
recvTime[ 0 ],
|
|
recvTime[ 1 ],
|
|
recvTime[ 2 ] );
|
|
}
|
|
|
|
|
|
outf << "\r\n";
|
|
|
|
|
|
if ( attr & MSGATTR_FILE )
|
|
{
|
|
outf << form( "File: %s\r\n\r\n", subj );
|
|
}
|
|
else
|
|
{
|
|
outf << form( "Subj: %s\r\n\r\n", subj );
|
|
}
|
|
|
|
|
|
outf.close();
|
|
|
|
createMsgTextFile( fname, TRUE );
|
|
}
|
|
|
|
|
|
|
|
void
|
|
Message::createMsgTextFile(char *fname , bool append)
|
|
{
|
|
File file;
|
|
|
|
if(append) file.open(fname , fmode_write | fmode_append);
|
|
|
|
if(!file.opened()) file.open(fname,fmode_create);
|
|
if(!file.opened()) return;
|
|
|
|
bool inkludge = FALSE;
|
|
|
|
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 = 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 = FALSE;
|
|
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if(inkludge) continue;
|
|
|
|
if(x == '\n')
|
|
{
|
|
if(strncmp(line,"SEEN-BY",7)) file << line << "\r\n";
|
|
|
|
memset(line,0,100);
|
|
|
|
index=0;
|
|
}
|
|
else
|
|
{
|
|
if(x>=' ' || x==0x1B) line[index++] = x;
|
|
}
|
|
|
|
if(index>79)
|
|
{
|
|
String wrap;
|
|
|
|
wordwrap(line,wrap,79);
|
|
|
|
if(strncmp(line,"SEEN-BY",7)) file << line << "\r\n";
|
|
|
|
memset(line,0,100);
|
|
|
|
strcpy(line,wrap);
|
|
|
|
index=strlen(line);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(index)
|
|
if(strncmp(line,"SEEN-BY",7))
|
|
file << line << "\r\n";
|
|
}
|
|
|
|
|
|
void
|
|
Message::createMsgTextString(char *string , word maxsize )
|
|
{
|
|
maxsize -= 100;
|
|
|
|
string[0] = 0;
|
|
|
|
bool inkludge = FALSE;
|
|
|
|
int index = 0;
|
|
|
|
char line[100];
|
|
memset(line,0,100);
|
|
|
|
bool msgdone = FALSE;
|
|
|
|
char *r = new char[text_bufsize+1];
|
|
|
|
for(long txt_off = 0; !msgdone ;txt_off += text_bufsize)
|
|
{
|
|
int l = msgBase()->readMsgText(*this,r,txt_off,text_bufsize);
|
|
|
|
if(l < text_bufsize) msgdone = TRUE;
|
|
|
|
for(int j=0;j<l;j++)
|
|
{
|
|
byte 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 = FALSE;
|
|
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if(inkludge) continue;
|
|
|
|
if(x == '\n')
|
|
{
|
|
if(strncmp(line,"SEEN-BY",7))
|
|
{
|
|
if(strlen(string) < maxsize)
|
|
{
|
|
strcat(string,line);
|
|
strcat(string,"\r\n");
|
|
}
|
|
}
|
|
|
|
memset(line,0,100);
|
|
|
|
index=0;
|
|
}
|
|
else
|
|
{
|
|
if(x>=' ' || x==0x1B) line[index++] = x;
|
|
}
|
|
|
|
if(index>79)
|
|
{
|
|
String wrap;
|
|
|
|
wordwrap(line,wrap,79);
|
|
|
|
if(strncmp(line,"SEEN-BY",7))
|
|
{
|
|
if(strlen(string) < maxsize)
|
|
{
|
|
strcat(string,line);
|
|
strcat(string,"\r\n");
|
|
}
|
|
}
|
|
|
|
memset(line,0,100);
|
|
|
|
strcpy(line,wrap);
|
|
|
|
index=strlen(line);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(index)
|
|
if(strncmp(line,"SEEN-BY",7))
|
|
{
|
|
if(strlen(string) < maxsize)
|
|
{
|
|
strcat(string,line);
|
|
strcat(string,"\r\n");
|
|
}
|
|
}
|
|
|
|
delete [] r;
|
|
}
|