Different fixes

This commit is contained in:
Alexander S. Aganichev
2001-07-03 04:27:54 +00:00
parent 28e2cff62c
commit d9891a8e6e
21 changed files with 318 additions and 79 deletions

View File

@@ -26,6 +26,7 @@
#include <golded.h>
#include <gmoprot.h>
#include <gcharset.h>
// ------------------------------------------------------------------
@@ -629,6 +630,7 @@ CfgGed::CfgGed() {
// strings
strcpy(arealistformat, "AM D CPUN E G ");
*arealistgrouporder = 0;
strcpy(arealistsort, "FYTUE");
strcpy(areascansort, "XZBE");
strcpy(importbegin, "=== Cut ===");
@@ -656,14 +658,9 @@ CfgGed::CfgGed() {
__gver_postname__, __gver_platform__);
strcpy(tearline, "@longpid @version");
strcpy(whoto, "All");
*xlatexport = 0;
*xlatimport = 0;
#ifdef __UNIX__
strcpy(xlatlocalset, "LATIN-1");
#else
strcpy(xlatlocalset, "IBMPC");
#endif
strcpy(xlatlocalset, get_charset());
strcpy(xlatimport, get_dos_charset(xlatlocalset));
strcpy(xlatexport, xlatimport);
// variables & switches
adeptxbbsuserno = 0;
addressbookadd = YES;

View File

@@ -62,6 +62,7 @@ const word CRC_AREAKEEPLAST = 0x5876;
const word CRC_AREALISTECHOMAX = 0x944D;
const word CRC_AREALISTFORMAT = 0x9080;
const word CRC_AREALISTGROUPID = 0x1F75;
const word CRC_AREALISTGROUPORDER=0xCE99;
const word CRC_AREALISTNOS = 0x5FD7;
const word CRC_AREALISTPAGEBAR = 0x6C37;
const word CRC_AREALISTSCAN = 0xDAF7;

View File

@@ -203,6 +203,7 @@ SwitchA:
case CRC_AREAISNEWS : CfgAreaisnews (); break;
case CRC_AREALISTECHOMAX : CfgArealistechomax (); break;
case CRC_AREALISTFORMAT : CfgArealistformat (); break;
case CRC_AREALISTGROUPORDER: CfgArealistgrouporder(); break;
case CRC_AREALISTSCAN : CfgArealistscan (); break;
case CRC_AREALISTSORT : CfgArealistsort (); break;
case CRC_AREALISTTYPE : CfgArealisttype (); break;

View File

@@ -331,7 +331,15 @@ void CfgArealistechomax() {
void CfgArealistformat() {
strcpy(CFG->arealistformat, StripQuotes(val));
strxcpy(CFG->arealistformat, StripQuotes(val), sizeof(CFG->arealistformat));
}
// ------------------------------------------------------------------
void CfgArealistgrouporder() {
strxcpy(CFG->arealistgrouporder, StripQuotes(val), sizeof(CFG->arealistgrouporder));
}

View File

@@ -513,6 +513,10 @@ void CfgXlatexport() {
CFG->grp.AddItm(GRP_XLATEXPORT, buf, strlen(buf)+1);
else
strcpy(CFG->xlatexport, buf);
if(CFG->usecharset and (strieql(buf, "IBMPC") or strieql(buf, "+7_FIDO"))) {
cout << "* Warning: Charset " << buf << " is obsolte. Consider using CPxxx form." << endl;
cfgerrors++;
}
}
// ------------------------------------------------------------------
@@ -532,6 +536,10 @@ void CfgXlatimport() {
void CfgXlatlocalset() {
strupr(strxcpy(CFG->xlatlocalset, val, sizeof(CFG->xlatlocalset)));
if(strieql(CFG->xlatlocalset, "IBMPC") or strieql(CFG->xlatlocalset, "+7_FIDO")) {
cout << "* Warning: Charset " << CFG->xlatlocalset << " is obsolte. Cosider using CPxxx form." << endl;
cfgerrors++;
}
}
// ------------------------------------------------------------------

View File

@@ -698,6 +698,8 @@ void ReadXlatTables() {
}
fclose(ifp);
}
else
cout << "* XLAT table " << buf << " could not be opened." << endl;
fwrite(&ChsTable, sizeof(Chs), 1, ofp);
}
@@ -775,6 +777,8 @@ void ReadXlatTables() {
fclose(ifp);
}
else
cout << "* XLAT table " << buf << " could not be opened." << endl;
fwrite(&EscTable, sizeof(Esc), 1, ofp);
}

View File

@@ -63,6 +63,7 @@ void CfgAreakeeplast ();
void CfgArealistechomax ();
void CfgArealistformat ();
void CfgArealistgroupid ();
void CfgArealistgrouporder();
void CfgArealistnos ();
void CfgArealistpagebar ();
void CfgArealistscan ();

View File

@@ -52,6 +52,32 @@ int AreaTypeOrder[17] = {
};
// ------------------------------------------------------------------
// Areagroups compare
int compare_groups(int ga, int gb)
{
char *gap, *gbp;
if((ga > 0xff) || (gb > 0xff))
return compare_two(ga, gb);
gap = strchr(CFG->arealistgrouporder, (char)ga);
gbp = strchr(CFG->arealistgrouporder, (char)gb);
if(gap == NULL) {
if(gbp != NULL)
return -1;
else
return compare_two(ga, gb);
}
else {
if(gbp == NULL)
return 1;
else
return compare_two(gap, gbp);
}
}
// ------------------------------------------------------------------
// Arealist compare
@@ -123,7 +149,7 @@ extern "C" int AreaListCmp(const Area** __a, const Area** __b) {
return cmp;
}
else {
if((cmp = compare_two(ga, gb)) != 0)
if((cmp = compare_groups(ga, gb)) != 0)
return cmp;
}
}

View File

@@ -157,6 +157,7 @@ public:
gstrarray areaisnews;
int arealistechomax;
char arealistformat[80];
char arealistgrouporder[256];
char arealistsort[20]; // areasort[10];
int arealisttype;
Path areapath;

View File

@@ -346,7 +346,7 @@ bool GMsgHeaderEdit::validate() {
// ------------------------------------------------------------------
int EditHeaderinfo(int mode, GMsgHeaderView &view) {
int EditHeaderinfo(int mode, GMsgHeaderView &view, bool doedithdr) {
GMsgHeaderEdit hedit(view);
GMsg *msg = view.msg;
@@ -374,64 +374,69 @@ int EditHeaderinfo(int mode, GMsgHeaderView &view) {
}
subject = msg->re;
if(AA->isnet())
hedit.lookup = CFG->switches.get(lookupnet);
else if(AA->isecho())
hedit.lookup = CFG->switches.get(lookupecho);
else
hedit.lookup = CFG->switches.get(lookuplocal);
if(doedithdr) {
int from_name_pos = EDIT->HdrNamePos();
int from_name_len = EDIT->HdrNameLen();
int from_addr_pos = EDIT->HdrNodePos();
int from_addr_len = EDIT->HdrNodeLen();
int to_name_pos = from_name_pos;
int to_name_len = from_name_len;
int to_addr_pos = from_addr_pos;
int to_addr_len = hedit.lookup or AA->isnet() ? from_addr_len : 0;
int subject_pos = 8;
int subject_len = MAXCOL - subject_pos;
int name_cvt = AA->Editmixcase() ? GMsgHeaderEdit::cvt_mixedcase : GMsgHeaderEdit::cvt_none;
int addr_cvt = GMsgHeaderEdit::cvt_none;
int subj_cvt = GMsgHeaderEdit::cvt_none;
if(AA->isnet())
hedit.lookup = CFG->switches.get(lookupnet);
else if(AA->isecho())
hedit.lookup = CFG->switches.get(lookupecho);
else
hedit.lookup = CFG->switches.get(lookuplocal);
hedit.setup(C_HEADW, C_HEADW, C_HEADE, _box_table(W_BHEAD,13), true);
int from_name_pos = EDIT->HdrNamePos();
int from_name_len = EDIT->HdrNameLen();
int from_addr_pos = EDIT->HdrNodePos();
int from_addr_len = EDIT->HdrNodeLen();
int to_name_pos = from_name_pos;
int to_name_len = from_name_len;
int to_addr_pos = from_addr_pos;
int to_addr_len = hedit.lookup or AA->isnet() ? from_addr_len : 0;
int subject_pos = 8;
int subject_len = MAXCOL - subject_pos;
int name_cvt = AA->Editmixcase() ? GMsgHeaderEdit::cvt_mixedcase : GMsgHeaderEdit::cvt_none;
int addr_cvt = GMsgHeaderEdit::cvt_none;
int subj_cvt = GMsgHeaderEdit::cvt_none;
hedit.add_field(GMsgHeaderEdit::id_from_name, 2, from_name_pos, from_name_len, from_name, sizeof(INam), name_cvt);
hedit.add_field(GMsgHeaderEdit::id_from_addr, 2, from_addr_pos, from_addr_len, from_addr, sizeof(IAdr), addr_cvt);
hedit.add_field(GMsgHeaderEdit::id_to_name, 3, to_name_pos, to_name_len, to_name, sizeof(INam), name_cvt);
hedit.add_field(GMsgHeaderEdit::id_to_addr, 3, to_addr_pos, to_addr_len, to_addr, sizeof(IAdr), addr_cvt);
hedit.add_field(GMsgHeaderEdit::id_subject, 4, subject_pos, subject_len, subject, sizeof(ISub), subj_cvt);
hedit.setup(C_HEADW, C_HEADW, C_HEADE, _box_table(W_BHEAD,13), true);
hedit.start_id = GMsgHeaderEdit::id_to_name;
switch(mode) {
case MODE_REPLYCOMMENT:
if(not (msg->dest.net or not AA->isnet()))
hedit.add_field(GMsgHeaderEdit::id_from_name, 2, from_name_pos, from_name_len, from_name, sizeof(INam), name_cvt);
hedit.add_field(GMsgHeaderEdit::id_from_addr, 2, from_addr_pos, from_addr_len, from_addr, sizeof(IAdr), addr_cvt);
hedit.add_field(GMsgHeaderEdit::id_to_name, 3, to_name_pos, to_name_len, to_name, sizeof(INam), name_cvt);
hedit.add_field(GMsgHeaderEdit::id_to_addr, 3, to_addr_pos, to_addr_len, to_addr, sizeof(IAdr), addr_cvt);
hedit.add_field(GMsgHeaderEdit::id_subject, 4, subject_pos, subject_len, subject, sizeof(ISub), subj_cvt);
hedit.start_id = GMsgHeaderEdit::id_to_name;
switch(mode) {
case MODE_REPLYCOMMENT:
if(not (msg->dest.net or not AA->isnet()))
break;
// else drop through ...
case MODE_REPLY:
case MODE_QUOTE:
case MODE_CHANGE:
hedit.start_id = GMsgHeaderEdit::id_subject;
break;
// else drop through ...
case MODE_REPLY:
case MODE_QUOTE:
case MODE_CHANGE:
hedit.start_id = GMsgHeaderEdit::id_subject;
break;
}
ChgAttrs(YES, msg);
vcurshow();
if(not (hedit.lookup or AA->isnet())) {
char date2[25] = "";
strsetsz(date2, view.width - CFG->disphdrdateset.pos);
view.window.prints(3, CFG->disphdrdateset.pos, view.to_color, date2);
}
view.window.prints(5, view.width-strlen(LNG->HeaderEditHelp1)-1, view.title_color, LNG->HeaderEditHelp1);
view.window.prints(5, view.width-strlen(LNG->HeaderEditHelp1)-strlen(LNG->HeaderEditHelp2)-3, view.title_color, LNG->HeaderEditHelp2);
hedit.run(H_Header);
vcurhide();
ChgAttrs(NO, msg);
}
ChgAttrs(YES, msg);
vcurshow();
if(not (hedit.lookup or AA->isnet())) {
char date2[25] = "";
strsetsz(date2, view.width - CFG->disphdrdateset.pos);
view.window.prints(3, CFG->disphdrdateset.pos, view.to_color, date2);
}
view.window.prints(5, view.width-strlen(LNG->HeaderEditHelp1)-1, view.title_color, LNG->HeaderEditHelp1);
view.window.prints(5, view.width-strlen(LNG->HeaderEditHelp1)-strlen(LNG->HeaderEditHelp2)-3, view.title_color, LNG->HeaderEditHelp2);
hedit.run(H_Header);
vcurhide();
ChgAttrs(NO, msg);
else
hedit.dropped = false;
if(not hedit.dropped and not gkbd.quitall) {

View File

@@ -498,7 +498,7 @@ void Initialize(int argc, char* argv[]) {
// set locale
setlocale(LC_CTYPE, "");
// and get it's name
char* lc = setlocale(LC_CTYPE, "");
const char* lc = setlocale(LC_CTYPE, "");
if(lc and not (strstr(lc, "German_") or strstr(lc, "Polish_")))
right_alt_same_as_left = true;
#if defined(GUTLOS_FUNCS)

View File

@@ -65,6 +65,7 @@ enum {
FSC_CHARSET,
FSC_CHRC,
FSC_CHRS,
FSC_CODEPAGE,
FSC_DOMAIN,
FSC_EID,
FSC_ENC,
@@ -92,7 +93,6 @@ enum {
enum {
MASK_XXX = 0x8000,
XXX_ACUPDATE,
XXX_CODEPAGE,
XXX_DESTADDR,
XXX_ENCRYPTION,
XXX_EOT,
@@ -235,6 +235,7 @@ static const Kludges fsc_list[] = {
{ "CHARSET" , FSC_CHARSET , KCRQ_CASE },
{ "CHRC" , FSC_CHRC , KCRQ_CASE },
{ "CHRS" , FSC_CHRS , KCRQ_CASE },
{ "CODEPAGE" , FSC_CODEPAGE , KCRQ_CASE },
{ "DOMAIN" , FSC_DOMAIN , KCRQ_CASE },
{ "EID" , FSC_EID , KCRQ_CASE },
{ "ENC" , FSC_ENC , KCRQ_CASE },
@@ -265,7 +266,6 @@ static const Kludges fsc_list[] = {
static const Kludges xxx_list[] = {
{ "ACUPDATE" , XXX_ACUPDATE , KCRQ_CASE },
{ "CODEPAGE" , XXX_CODEPAGE , KCRQ_CASE },
{ "DESTADDR" , XXX_DESTADDR , KCRQ_CASE },
{ "ENCRYPTION" , XXX_ENCRYPTION , KCRQ_CASE },
{ "EOT" , XXX_EOT , KCRQ_CASE },
@@ -958,6 +958,10 @@ static int HandleKludges(GMsg* msg, Line* line, int kludgenum, const char* ptr,
line->kludge = GKLUD_CHARSET;
return true;
case FSC_CODEPAGE:
line->kludge = GKLUD_CHARSET;
return true;
case FSC_DOMAIN:
//line->kludge = GKLUD_DOMAIN;
if(getvalue)
@@ -1072,7 +1076,6 @@ static int HandleKludges(GMsg* msg, Line* line, int kludgenum, const char* ptr,
return true;
case XXX_ACUPDATE:
case XXX_CODEPAGE:
case XXX_ENCRYPTION:
case XXX_EOT:
case XXX_GATECHK:
@@ -2018,6 +2021,8 @@ void MakeLineIndex(GMsg* msg, int margin, bool header_recode) {
kludgetype = FSC_I51;
else if(strieql(kludge, "CHRS") or strieql(kludge, "CHARSET"))
kludgetype = FSC_CHARSET;
else if(strieql(kludge, "CODEPAGE"))
kludgetype = FSC_CODEPAGE;
else if(strieql(kludge, "Content-Type"))
kludgetype = RFC_CONTENT_TYPE;
else if(strieql(kludge, "Content-Transfer-Encoding"))
@@ -2045,10 +2050,13 @@ void MakeLineIndex(GMsg* msg, int margin, bool header_recode) {
strcpy(msg->charset, chsbuf);
}
}
else if(kludgetype == FSC_CHARSET) {
else if((kludgetype == FSC_CHARSET) || (kludgetype == FSC_CODEPAGE)) {
*chsbuf = NUL;
qpencoded = IsQuotedPrintable(ptr);
strxcpy(chsbuf, qpencoded ? ExtractPlainCharset(ptr) : ptr, sizeof(chsbuf));
if(kludgetype == FSC_CODEPAGE)
strxmerge(chsbuf, sizeof(chsbuf), "CP", ptr, NULL);
else
strxcpy(chsbuf, qpencoded ? ExtractPlainCharset(ptr) : ptr, sizeof(chsbuf));
// Workaround for buggy mailreaders which stores '_' in charset name
strchg(chsbuf,'_',' ');
chslev = LoadCharset(chsbuf, CFG->xlatlocalset);

View File

@@ -867,11 +867,9 @@ int GMenuEditHeader::Run(int mode, GMsg* msg) {
update_statusline(LNG->EditHeader);
if(doedithdr) {
_tag = EditHeaderinfo(mode, *HeaderView);
if((_tag == W_ESCPRESS) or gkbd.quitall)
break;
}
_tag = EditHeaderinfo(mode, *HeaderView, doedithdr);
if((_tag == W_ESCPRESS) or gkbd.quitall)
break;
do {

View File

@@ -261,7 +261,7 @@ bool set_to_address(GMsg* msg, gsetaddr* toname, gsetaddr* toaddr, gsetaddr* fro
// GEPOST prototypes
void MakeMsg(int mode, GMsg* oldmsg, bool ignore_replyto=false);
int EditHeaderinfo(int mode, GMsgHeaderView &view);
int EditHeaderinfo(int mode, GMsgHeaderView &view, bool doedithdr = true);
void CheckSubject(GMsg* msg, char* subj);

View File

@@ -54,12 +54,14 @@ char* CvtMessageIDtoMSGID(const char* mptr, char* msgidbuf, const char* echoid,
else {
*bptr++ = *mptr++;
}
if(bptr-msgidbuf > 200) // Check for overrun
break;
}
*bptr = NUL;
}
else {
int spaces = strchr(mptr, ' ') ? true : false;
bool spaces = strchr(mptr, ' ') ? true : false;
dword crc32 = CRC32_MASK_CCITT;
crc32 = strCrc32(mptr, NO, crc32);
@@ -72,6 +74,8 @@ char* CvtMessageIDtoMSGID(const char* mptr, char* msgidbuf, const char* echoid,
if(spaces and (*mptr == '\"'))
*bptr++ = '\"';
*bptr++ = *mptr++;
if(bptr-msgidbuf > (200-9-(spaces?2:0))) // Check for overrun
break;
}
if(spaces)
*bptr++ = '\"';
@@ -253,6 +257,9 @@ void ProcessSoupMsg(char* lbuf, GMsg* msg, int& msgs, char* areaname, int tossto
ParseInternetAddr(mptr, toname, toaddr);
strxcpy(msg->to, *toname ? toname : toaddr, sizeof(msg->to));
}
else if(MatchRFC(mptr, "X-Comment-To: ")) {
strxcpy(msg->to, mptr, sizeof(msg->to));
}
else if(MatchRFC(mptr, "Cc: ")) {
char* ccbuf = (char*)throw_malloc(strlen(msg->icc) + strlen(mptr) + 3);
strcpy(stpcpy(stpcpy(ccbuf, msg->icc), *msg->icc ? ", " : ""), mptr);

View File

@@ -334,6 +334,8 @@ int is_quote(const char* ptr) {
if(IsQuoteChar(ptr))
return true;
endptr = ptr + 11; // match 10 chars after whitespaces
int spaces = 0;
while((ptr < endptr) and *ptr) {

View File

@@ -97,14 +97,14 @@ void FreqWaZOO(const char* files, const Addr& dest, const Attr& attr) {
strcpy(filename, outbound);
if(dest.zone != CFG->aka[0].addr.zone) {
sprintf(tmp, ".%03X", dest.zone);
sprintf(tmp, ".%03x", dest.zone);
strcat(filename, tmp);
if(not is_dir(filename))
mkdir(filename, S_IWUSR);
}
AddBackslash(filename);
sprintf(tmp, "%04X%04X", dest.net, dest.node);
sprintf(tmp, "%04x%04x", dest.net, dest.node);
strcat(filename, tmp);
if(dest.point) {
@@ -112,7 +112,7 @@ void FreqWaZOO(const char* files, const Addr& dest, const Attr& attr) {
if(not is_dir(filename))
mkdir(filename, S_IWUSR);
AddBackslash(filename);
sprintf(tmp, "%08X", dest.point);
sprintf(tmp, "%08x", dest.point);
strcat(filename, tmp);
}