Various fixes. See notework.txt

This commit is contained in:
Alexander S. Aganichev 2001-10-07 08:24:26 +00:00
parent 07782be14d
commit f1ab267ad1
21 changed files with 97 additions and 41 deletions

View File

@ -12,6 +12,22 @@ ______________________________________________________________________
Notes for GoldED+ 1.1.5, /snapshot/ Notes for GoldED+ 1.1.5, /snapshot/
______________________________________________________________________ ______________________________________________________________________
- Fixed serious bug with forwarding when ADDRESSLOOKUPFIRST set to
MSGID (or no Origin line available) and you call either spellchecker
or EditLoadFile function. The address was set to the address of
original mail author.
+ Added USEAREA keyword which may be used in Random System Groups. If
defined to NO then GoldED+ will not recognize AREA kludge.
! If USEFWD is set to NO then GoldED+ will not recognize FWD* kludges.
- You may now disable one or more stylecodes by including them in
STYLECODESTOPS.
- Fixed hang on undo of text deletetion when text is greater than
screen size.
- Fixed crash on calling Externutil in empty area. - Fixed crash on calling Externutil in empty area.
- GoldED+ will now treat all unknown charsets to be equal to - GoldED+ will now treat all unknown charsets to be equal to

View File

@ -296,7 +296,7 @@ void AreaList::AddNewArea(AreaCfg* aa) {
// We had it already, so override with the new data // We had it already, so override with the new data
newarea = false; newarea = false;
if(strblank((*ap)->desc())) if(strblank((*ap)->desc()))
strcpy(desc, aa->desc); strxcpy(desc, aa->desc, sizeof(desc));
break; break;
} }
} }

View File

@ -749,8 +749,9 @@ CfgGed::CfgGed() {
templatematch = false; templatematch = false;
timeout = 0; timeout = 0;
twitmode = TWIT_BLANK; twitmode = TWIT_BLANK;
usearea = true;
usecharset = true; usecharset = true;
usefwd = false; usefwd = NO;
useintl = true; useintl = true;
usepid = true; usepid = true;
usernameno = 0; usernameno = 0;

View File

@ -359,6 +359,7 @@ const word CRC_TWITMODE = 0x9DC8;
const word CRC_TWITNAME = 0x2055; const word CRC_TWITNAME = 0x2055;
const word CRC_TWITSUBJ = 0x08C0; const word CRC_TWITSUBJ = 0x08C0;
const word CRC_TWITTO = 0x9DFE; const word CRC_TWITTO = 0x9DFE;
const word CRC_USEAREA = 0x2FD4;
const word CRC_USECHARSET = 0xE1B9; const word CRC_USECHARSET = 0xE1B9;
const word CRC_USEFLAGS = 0xE2B6; const word CRC_USEFLAGS = 0xE2B6;
const word CRC_USEFWD = 0x439F; const word CRC_USEFWD = 0x439F;

View File

@ -555,6 +555,7 @@ SwitchT:
SwitchU: SwitchU:
switch(crc) { switch(crc) {
case CRC_USEAREA : CfgUsearea (); break;
case CRC_USECHARSET : CfgUsecharset (); break; case CRC_USECHARSET : CfgUsecharset (); break;
case CRC_USEFWD : CfgUsefwd (); break; case CRC_USEFWD : CfgUsefwd (); break;
case CRC_USEINTL : CfgUseintl (); break; case CRC_USEINTL : CfgUseintl (); break;

View File

@ -274,6 +274,17 @@ void CfgTwitsubj() {
// ------------------------------------------------------------------ // ------------------------------------------------------------------
void CfgUsearea() {
int flag = GetYesno(val) ? true : false;
if(cfgingroup)
CFG->grp.AddItm(GRP_USEAREA, flag);
else
CFG->usearea = flag;
}
// ------------------------------------------------------------------
void CfgUsecharset() { void CfgUsecharset() {
CFG->usecharset = GetYesno(val); CFG->usecharset = GetYesno(val);

View File

@ -341,6 +341,7 @@ void CfgTwitmode ();
void CfgTwitname (); void CfgTwitname ();
void CfgTwitsubj (); void CfgTwitsubj ();
void CfgTwitto (); void CfgTwitto ();
void CfgUsearea ();
void CfgUsecharset (); void CfgUsecharset ();
void CfgUseflags (); void CfgUseflags ();
void CfgUsefwd (); void CfgUsefwd ();

View File

@ -336,6 +336,7 @@ public:
int twitmode; // showtwits; int twitmode; // showtwits;
std::vector<Node> twitname; std::vector<Node> twitname;
gstrarray twitsubj; gstrarray twitsubj;
bool usearea;
bool usecharset; bool usecharset;
int usefwd; int usefwd;
bool useintl; bool useintl;

View File

@ -41,7 +41,12 @@ bool strncont(const char *beginword, const char *stylestopchars, int n)
// ------------------------------------------------------------------ // ------------------------------------------------------------------
inline int isstylechar(char c) { return (c == '*') or (c == '/') or (c == '_') or (c == '#'); } inline bool isstylechar(char c) {
if(strchr(CFG->stylecodestops, c) != NULL)
return false;
return (c == '*') or (c == '/') or (c == '_') or (c == '#');
}
void Container::StyleCodeHighlight(const char* text, int row, int col, bool dohide, int color) { void Container::StyleCodeHighlight(const char* text, int row, int col, bool dohide, int color) {

View File

@ -2699,18 +2699,18 @@ void UndoStack::PlayItem() {
// we need to fit thisrow into the screen boundaries // we need to fit thisrow into the screen boundaries
if(delta > 0) { if(delta > 0) {
for (row -= delta; row < minrow; row++) { for (row -= delta; (int)row < (int)minrow; row++) {
if(templine) // cause refresh() issue an error since templine should never be NULL if(templine) // cause refresh() issue an error since templine should never be NULL
templine = templine->next; templine = templine->next;
} }
temprow = maxrow; temprow = minrow;
} }
else { else {
for (row -= delta; row > maxrow; row--) { for (row -= delta; row > maxrow; row--) {
if(templine) // cause refresh() issue an error since templine should never be NULL if(templine) // cause refresh() issue an error since templine should never be NULL
templine = templine->prev; templine = templine->prev;
} }
temprow = minrow; temprow = maxrow;
} }
// move pointer to the top of screen so we refresh scrolled area // move pointer to the top of screen so we refresh scrolled area

View File

@ -458,9 +458,11 @@ char* strxmimecpy(char* dest, const char* source, int level, int size, bool dete
static void KludgeAREA(GMsg* msg, const char* echoid) { static void KludgeAREA(GMsg* msg, const char* echoid) {
Area* ap = AL.AreaEchoToPtr(echoid); if(AA->Usearea()) {
if(ap) Area* ap = AL.AreaEchoToPtr(echoid);
msg->areakludgeid = ap->echoid(); if(ap)
msg->areakludgeid = ap->echoid();
}
} }
@ -815,7 +817,8 @@ static void KludgeX_FTN_TO(GMsg* msg, const char* ptr) {
static void KludgeFWDFROM(GMsg* msg, const char* ptr) { static void KludgeFWDFROM(GMsg* msg, const char* ptr) {
strxcpy(msg->fwdfrom, ptr, sizeof(msg->fwdfrom)); if(AA->Usefwd())
strxcpy(msg->fwdfrom, ptr, sizeof(msg->fwdfrom));
} }
@ -823,7 +826,8 @@ static void KludgeFWDFROM(GMsg* msg, const char* ptr) {
static void KludgeFWDORIG(GMsg* msg, const char* ptr) { static void KludgeFWDORIG(GMsg* msg, const char* ptr) {
msg->fwdorig.reset(ptr); if(AA->Usefwd())
msg->fwdorig.reset(ptr);
} }
@ -831,7 +835,8 @@ static void KludgeFWDORIG(GMsg* msg, const char* ptr) {
static void KludgeFWDTO(GMsg* msg, const char* ptr) { static void KludgeFWDTO(GMsg* msg, const char* ptr) {
strxcpy(msg->fwdto, ptr, sizeof(msg->fwdto)); if(AA->Usefwd())
strxcpy(msg->fwdto, ptr, sizeof(msg->fwdto));
} }
@ -839,7 +844,8 @@ static void KludgeFWDTO(GMsg* msg, const char* ptr) {
static void KludgeFWDDEST(GMsg* msg, const char* ptr) { static void KludgeFWDDEST(GMsg* msg, const char* ptr) {
msg->fwddest.reset(ptr); if(AA->Usefwd())
msg->fwddest.reset(ptr);
} }
@ -847,7 +853,8 @@ static void KludgeFWDDEST(GMsg* msg, const char* ptr) {
static void KludgeFWDSUBJ(GMsg* msg, const char* ptr) { static void KludgeFWDSUBJ(GMsg* msg, const char* ptr) {
strxcpy(msg->fwdsubj, ptr, sizeof(msg->fwdsubj)); if(AA->Usefwd())
strxcpy(msg->fwdsubj, ptr, sizeof(msg->fwdsubj));
} }
@ -855,7 +862,8 @@ static void KludgeFWDSUBJ(GMsg* msg, const char* ptr) {
static void KludgeFWDAREA(GMsg* msg, const char* ptr) { static void KludgeFWDAREA(GMsg* msg, const char* ptr) {
strxcpy(msg->fwdarea, ptr, sizeof(msg->fwdarea)); if(AA->Usefwd())
strxcpy(msg->fwdarea, ptr, sizeof(msg->fwdarea));
} }
@ -863,7 +871,8 @@ static void KludgeFWDAREA(GMsg* msg, const char* ptr) {
static void KludgeFWDMSGID(GMsg* msg, const char* ptr) { static void KludgeFWDMSGID(GMsg* msg, const char* ptr) {
strxcpy(msg->fwdmsgid, ptr, sizeof(msg->fwdmsgid)); if(AA->Usefwd())
strxcpy(msg->fwdmsgid, ptr, sizeof(msg->fwdmsgid));
} }
@ -1462,9 +1471,7 @@ void ScanKludges(GMsg* msg, int getvalue) {
line->type |= GLINE_KLUD; line->type |= GLINE_KLUD;
const char* areakludgeptr = ptr+5; // Extract echoid from kludge const char* areakludgeptr = ptr+5; // Extract echoid from kludge
areakludgeptr = strskip_wht(areakludgeptr); areakludgeptr = strskip_wht(areakludgeptr);
Area* ap = AL.AreaEchoToPtr(areakludgeptr); KludgeAREA(msg, areakludgeptr);
if(ap)
msg->areakludgeid = ap->echoid();
} }
if(not (line->type & GLINE_KLUD)) { if(not (line->type & GLINE_KLUD)) {

View File

@ -90,13 +90,6 @@ int Area::LoadMsg(GMsg* msg, ulong msgno, int margin, int mode) {
if(not (msg->attr.uns() and not msg->attr.rcv())) if(not (msg->attr.uns() and not msg->attr.rcv()))
return true; return true;
} }
else {
// We can't rely on the destination address unless we are in netmail
if(not AA->isnet()) {
msg->dest.reset_fast();
msg->odest.reset_fast();
}
}
msg->attr.tou0(); msg->attr.tou0();
msg->TextToLines(margin); msg->TextToLines(margin);
return true; return true;

View File

@ -25,6 +25,7 @@
// ------------------------------------------------------------------ // ------------------------------------------------------------------
#include <golded.h> #include <golded.h>
#include <gcharset.h>
// ------------------------------------------------------------------ // ------------------------------------------------------------------
@ -732,7 +733,7 @@ void GThreadlist::GenTree(char* buf, int idx) {
if(graph[0] == NUL) { if(graph[0] == NUL) {
int table = LoadCharset(NULL, NULL, 1); int table = LoadCharset(NULL, NULL, 1);
int level = LoadCharset("IBMPC", CFG->xlatlocalset); int level = LoadCharset(get_dos_charset(CFG->xlatlocalset), CFG->xlatlocalset);
XlatStr(graph, graph_ibmpc, level, CharTable); XlatStr(graph, graph_ibmpc, level, CharTable);
if(table == -1) if(table == -1)
LoadCharset(CFG->xlatimport, CFG->xlatlocalset); LoadCharset(CFG->xlatimport, CFG->xlatlocalset);

View File

@ -763,6 +763,7 @@ void MakeMsg(int mode, GMsg* omsg, bool ignore_replyto) {
msg->references = NULL; msg->references = NULL;
msg->attr.tou0(); msg->attr.tou0();
msg->TextToLines(CFG->dispmargin-1, false); msg->TextToLines(CFG->dispmargin-1, false);
msg->msgid.reset();
*msg->iorig = NUL; *msg->iorig = NUL;
*msg->idest = NUL; *msg->idest = NUL;
*msg->ireplyto = NUL; *msg->ireplyto = NUL;

View File

@ -168,6 +168,7 @@ void Area::InitData() {
strxcpy(adat->wtpl, CFG->wtpl.c_str(), sizeof(adat->wtpl)); strxcpy(adat->wtpl, CFG->wtpl.c_str(), sizeof(adat->wtpl));
adat->templatematch = CFG->templatematch; adat->templatematch = CFG->templatematch;
adat->twitmode = CFG->twitmode; adat->twitmode = CFG->twitmode;
adat->usearea = CFG->usearea;
adat->usefwd = CFG->usefwd; adat->usefwd = CFG->usefwd;
strcpy(adat->username.name, CFG->username.empty() ? "" : CFG->username[CFG->usernameno].name); strcpy(adat->username.name, CFG->username.empty() ? "" : CFG->username[CFG->usernameno].name);
adat->username.addr = adat->aka.addr; adat->username.addr = adat->aka.addr;
@ -319,6 +320,7 @@ void Area::RandomizeData(int mode) {
CFG->grp.GetItm(GRP_TEMPLATEMATCH, adat->templatematch); CFG->grp.GetItm(GRP_TEMPLATEMATCH, adat->templatematch);
CFG->grp.GetItm(GRP_TWITMODE, adat->twitmode); CFG->grp.GetItm(GRP_TWITMODE, adat->twitmode);
CFG->grp.GetItm(GRP_USEAREA, adat->usearea);
CFG->grp.GetItm(GRP_USEFWD, adat->usefwd); CFG->grp.GetItm(GRP_USEFWD, adat->usefwd);
if(CFG->grp.GetItm(GRP_USERNAME, buf, sizeof(buf))) { if(CFG->grp.GetItm(GRP_USERNAME, buf, sizeof(buf))) {

View File

@ -1015,11 +1015,11 @@ void OtherAreaReplyMsg() {
void ReplyMsg() { void ReplyMsg() {
if(CurrArea == OrigArea) { if(CurrArea == OrigArea) {
const char *destarea = AA->Areareplyto(); const char *destarea = reader_msg->areakludgeid;
if (!*destarea) if ((destarea != NULL) and (*destarea != NUL))
destarea = reader_msg->areakludgeid; destarea = AA->Areareplyto();
if(AA->Areareplydirect() and destarea) { if(AA->Areareplydirect() and (destarea != NULL)) {
int a = AL.AreaEchoToNo(destarea); int a = AL.AreaEchoToNo(destarea);
if(a != -1) { if(a != -1) {
CurrArea = AL.AreaNoToId(a); CurrArea = AL.AreaNoToId(a);
@ -1051,11 +1051,11 @@ void ReplyMsg() {
void QuoteMsg(bool ignore_replyto) { void QuoteMsg(bool ignore_replyto) {
if(CurrArea == OrigArea) { if(CurrArea == OrigArea) {
const char *destarea = AA->Areareplyto(); const char *destarea = reader_msg->areakludgeid;
if (!*destarea) if ((destarea != NULL) and (*destarea != NUL))
destarea = reader_msg->areakludgeid; destarea = AA->Areareplyto();
if(AA->Areareplydirect() and destarea) { if(AA->Areareplydirect() and (destarea != NULL)) {
int a = AL.AreaEchoToNo(destarea); int a = AL.AreaEchoToNo(destarea);
if(a != -1) { if(a != -1) {
CurrArea = AL.AreaNoToId(a); CurrArea = AL.AreaNoToId(a);
@ -1087,11 +1087,11 @@ void QuoteMsg(bool ignore_replyto) {
void CommentMsg() { void CommentMsg() {
if(CurrArea == OrigArea) { if(CurrArea == OrigArea) {
const char *destarea = AA->Areareplyto(); const char *destarea = reader_msg->areakludgeid;
if (!*destarea) if ((destarea != NULL) and (*destarea != NUL))
destarea = reader_msg->areakludgeid; destarea = AA->Areareplyto();
if(AA->Areareplydirect() && destarea) { if(AA->Areareplydirect() and (destarea != NULL)) {
int a = AL.AreaEchoToNo(destarea); int a = AL.AreaEchoToNo(destarea);
if(a != -1) { if(a != -1) {
CurrArea = AL.AreaNoToId(a); CurrArea = AL.AreaNoToId(a);

View File

@ -306,6 +306,7 @@ struct AreaData {
Tear tearline; Tear tearline;
Path tpl; Path tpl;
bool templatematch; bool templatematch;
bool usearea;
int usefwd; int usefwd;
Node username; Node username;
bool usetzutc; bool usetzutc;
@ -564,6 +565,7 @@ public:
const char* Tpl() const { return adat->tpl; } const char* Tpl() const { return adat->tpl; }
bool Templatematch() const { return adat->templatematch; } bool Templatematch() const { return adat->templatematch; }
int Twitmode() const { return adat->twitmode; } int Twitmode() const { return adat->twitmode; }
bool Usearea() const { return adat->usearea; }
int Usefwd() const { return adat->usefwd; } int Usefwd() const { return adat->usefwd; }
const Node& Username() const { return adat->username; } const Node& Username() const { return adat->username; }
bool Usetzutc() const { return adat->usetzutc; } bool Usetzutc() const { return adat->usetzutc; }

View File

@ -81,8 +81,10 @@ const char *get_charset(void)
strcpy(charsetbuf, "LATIN-1"); strcpy(charsetbuf, "LATIN-1");
cp = setlocale(LC_CTYPE, ""); cp = setlocale(LC_CTYPE, "");
if((cp != NULL) and ((cp = strchr(cp, '.')) != NULL)) { if((cp != NULL) and ((cp = strchr(cp, '.')) != NULL)) {
if(strieql(cp, "KOI8R")) if(strieql(cp, "KOI8R") or strieql(cp, "KOI8"))
cp = "KOI8-R"; cp = "KOI8-R";
if(strieql(cp, "KOI8U"))
cp = "KOI8-U";
strxcpy(charsetbuf, cp, sizeof(charsetbuf)); strxcpy(charsetbuf, cp, sizeof(charsetbuf));
} }
#endif #endif
@ -99,7 +101,9 @@ const char *get_dos_charset(const char *cpfrom)
char *from, *to; char *from, *to;
} cpmap[] = { } cpmap[] = {
{ "LATIN-1", "CP437" }, { "LATIN-1", "CP437" },
{ "KOI8", "CP866" },
{ "KOI8-R", "CP866" }, { "KOI8-R", "CP866" },
{ "KOI8-U", "CP1125" },
{ NULL, NULL } { NULL, NULL }
}; };

View File

@ -704,9 +704,17 @@ int gkbd_curstable[] = {
int gkbd_cursgetch(int mode) { int gkbd_cursgetch(int mode) {
int key; int key;
#ifndef BUGGY_NCURSES
nodelay(stdscr, mode); nodelay(stdscr, mode);
#else
wtimeout(stdscr, mode ? 0 : -1);
#endif
key = getch(); key = getch();
#ifndef BUGGY_NCURSES
nodelay(stdscr, FALSE); nodelay(stdscr, FALSE);
#else
wtimeout(stdscr, -1);
#endif
return key; return key;
} }

View File

@ -93,6 +93,7 @@ enum {
GRP_TEMPLATE, GRP_TEMPLATE,
GRP_TEMPLATEMATCH, GRP_TEMPLATEMATCH,
GRP_TWITMODE, GRP_TWITMODE,
GRP_USEAREA,
GRP_USEFWD, GRP_USEFWD,
GRP_USERNAME, GRP_USERNAME,
GRP_USETZUTC, GRP_USETZUTC,

View File

@ -41,7 +41,7 @@
// ------------------------------------------------------------------ // ------------------------------------------------------------------
const int MAX_DESC = 45; // Area descriptions const int MAX_DESC = 81; // Area descriptions
const int MAX_ECHO = 81; // Echoids const int MAX_ECHO = 81; // Echoids