See notework.txt

This commit is contained in:
Alexander S. Aganichev
2002-04-21 12:01:13 +00:00
parent fccc4c09e3
commit 1c39b5e099
12 changed files with 1665 additions and 145 deletions

View File

@@ -642,6 +642,13 @@ void AreaList::GetAreaSep(char* val) {
if(not GetAreaFirstPart(aa, key, val))
return;
// Get aka
getkeyval(&key, &val);
if(not CFG->aka.empty()) // Seed aka with main address
aa.aka = CFG->aka[0].addr;
aa.aka.set(key);
AddNewArea(&aa);
}

View File

@@ -94,11 +94,13 @@ extern "C" int AreaListCmp(const Area** __a, const Area** __b) {
const Area* B = b;
int cmp = 0;
bool sepfirst = false;
bool rev = false;
char* ptr = AL.sortspec;
while(*ptr) {
switch(toupper(*ptr)) {
switch(*ptr) {
case '-':
rev = true;
A = b; B = a;
@@ -108,26 +110,37 @@ extern "C" int AreaListCmp(const Area** __a, const Area** __b) {
A = a; B = b;
break;
case 'A':
if(a->isseparator() or b->isseparator())
break;
case 'a':
if((cmp = A->aka().compare(B->aka())) != 0)
return cmp;
break;
case 'B':
if(a->isseparator() or b->isseparator())
case 'b':
if(A->isseparator() and B->isseparator())
break;
if((cmp = compare_two(A->board(), B->board())) != 0)
else if(A->isseparator()) {
if(B->board())
return sepfirst?-1:1;
}
else if(B->isseparator()) {
if(A->board())
return sepfirst?1:-1;
}
else if((cmp = compare_two(A->board(), B->board())) != 0)
return cmp;
break;
case 'D':
case 'd':
if((cmp = stricmp(A->desc(), B->desc())) != 0)
return cmp;
break;
case 'E':
case 'e':
if((cmp = stricmp(A->echoid(), B->echoid())) != 0)
return cmp;
break;
case 'F':
case 'f':
if(*area_maybe) {
register bool amay = striinc(area_maybe, A->echoid()) ? true : false;
register bool bmay = striinc(area_maybe, B->echoid()) ? true : false;
@@ -137,18 +150,36 @@ extern "C" int AreaListCmp(const Area** __a, const Area** __b) {
}
break;
case 'G':
case 'g':
if((cmp = compare_groups(A->groupid(), B->groupid())) != 0)
return cmp;
break;
case 'M':
if(a->isseparator() or b->isseparator())
case 'm':
if(A->isseparator() and B->isseparator())
break;
if((cmp = compare_two(A->ismarked(), B->ismarked())) != 0)
else if(A->isseparator()) {
if(B->ismarked())
return sepfirst?-1:1;
}
else if(B->isseparator()) {
if(A->ismarked())
return sepfirst?1:-1;
}
else if((cmp = compare_two(A->ismarked(), B->ismarked())) != 0)
return cmp;
break;
case 'P':
if(a->isseparator() or b->isseparator())
if(A->isseparator() and B->isseparator())
break;
else if(A->isseparator()) {
if(B->PMrk.Count())
return sepfirst?-1:1;
}
else if(B->isseparator()) {
if(A->PMrk.Count())
return sepfirst?1:-1;
}
else {
register int aunread = A->PMrk.Count();
register int bunread = B->PMrk.Count();
@@ -159,17 +190,41 @@ extern "C" int AreaListCmp(const Area** __a, const Area** __b) {
return cmp;
}
break;
case 'p':
if(A->isseparator() and B->isseparator())
break;
else if(A->isseparator()) {
if(B->PMrk.Count())
return sepfirst?-1:1;
}
else if(B->isseparator()) {
if(A->PMrk.Count())
return sepfirst?1:-1;
}
else if((cmp = compare_two(B->PMrk.Count()?1:0, A->PMrk.Count()?1:0)) != 0)
return cmp;
break;
case 'O':
case 'o':
if((cmp = compare_two(A->areaid(), B->areaid())) != 0)
return cmp;
break;
case 'T':
case 't':
if((cmp = compare_two(CFG->areatypeorder[A->type()&0xFF], CFG->areatypeorder[B->type()&0xFF])) != 0)
return cmp;
break;
case 'U':
if(a->isseparator() or b->isseparator())
if(A->isseparator() and B->isseparator())
break;
else if(A->isseparator()) {
if(B->unread)
return sepfirst?-1:1;
}
else if(B->isseparator()) {
if(A->unread)
return sepfirst?1:-1;
}
else {
register int aunread = A->unread;
register int bunread = B->unread;
@@ -180,36 +235,73 @@ extern "C" int AreaListCmp(const Area** __a, const Area** __b) {
return cmp;
}
break;
case 'X':
if(a->isseparator() or b->isseparator())
case 'u':
if(A->isseparator() and B->isseparator())
break;
if((cmp = compare_two(A->msgbase(), B->msgbase())) != 0)
else if(A->isseparator()) {
if(B->unread)
return sepfirst?-1:1;
}
else if(B->isseparator()) {
if(A->unread)
return sepfirst?1:-1;
}
else if((cmp = compare_two(B->unread?1:0, A->unread?1:0)) != 0)
return cmp;
break;
case 'X':
case 'x':
if(A->isseparator() and B->isseparator())
break;
else if(A->isseparator()) {
if(B->msgbase())
return sepfirst?-1:1;
}
else if(B->isseparator()) {
if(A->msgbase())
return sepfirst?1:-1;
}
else if((cmp = compare_two(A->msgbase(), B->msgbase())) != 0)
return cmp;
break;
case 'Y':
if(a->isseparator() or b->isseparator())
case 'y':
if(A->isseparator() and B->isseparator())
break;
else {
register bool anew = A->isvalidchg and A->isunreadchg;
register bool bnew = B->isvalidchg and B->isunreadchg;
// New mail _first_
if((cmp = compare_two(bnew, anew)) != 0)
return cmp;
else if(A->isseparator()) {
if(B->isnewmail())
return sepfirst?-1:1;
}
else if(B->isseparator()) {
if(A->isnewmail())
return sepfirst?1:-1;
}
else if((cmp = compare_two(B->isnewmail(), A->isnewmail())) != 0)
return cmp;
break;
case 'Z':
if(a->isseparator() or b->isseparator())
case 'z':
if(A->isseparator() and B->isseparator())
break;
else if(A->isseparator())
return sepfirst?-1:1;
else if(B->isseparator())
return sepfirst?1:-1;
else if((cmp = stricmp(A->path(), B->path())) != 0)
return cmp;
break;
case 'S':
case 's':
sepfirst = not rev;
break;
}
ptr++;
}
if(cmp == 0)
return compare_two(b->isseparator(), a->isseparator());
if(cmp == 0) {
cmp = compare_two(b->isseparator(), a->isseparator());
return sepfirst?-cmp:cmp;
}
return cmp;
}

View File

@@ -432,8 +432,13 @@ void DoKludges(int mode, GMsg* msg, int kludges) {
quot[0] = NUL;
sprintf(buf, "%s%sTo: %s%s%s <%s>", rfc, AA->isnewsgroup() ? "X-" : "", quot, buf2, quot, _toaddr);
}
else
sprintf(buf, "%s%sTo: %s", rfc, AA->isnewsgroup() ? "X-" : "", ptr);
else if(stricmp(_toname, AA->Whoto())) {
mime_header_encode(buf2, _toname, msg);
char quot[2] = "\"";
if((buf2[0] == '\"') or (strpbrk(buf2, " \t") == NULL))
quot[0] = NUL;
sprintf(buf, "%s%sTo: %s%s%s <%s>", rfc, AA->isnewsgroup() ? "X-Comment-" : "", quot, buf2, quot, _toaddr);
}
line = AddKludge(line, buf);
line->kludge = GKLUD_RFC;
}

View File

@@ -419,6 +419,7 @@ void Reader() {
case KK_ReadSoundkill:
HandleGEvent(EVTT_STOPVOICE);
reader_keyok = true;
break;
case KK_ReadChangeAttrs:
@@ -427,22 +428,27 @@ void Reader() {
case KK_ReadChangeAka:
ChangeAka();
reader_keyok = true;
break;
case KK_ReadChangeTagline:
ChangeTagline();
reader_keyok = true;
break;
case KK_ReadChangeOrigin:
ChangeOrigin();
reader_keyok = true;
break;
case KK_ReadChangeUsername:
ChangeUsername();
reader_keyok = true;
break;
case KK_ReadChangeTemplate:
ChangeTemplate();
reader_keyok = true;
break;
case KK_ReadChangeXlatImport:
@@ -662,10 +668,12 @@ void Reader() {
case KK_ReadMakeUserlist:
MakeUserList();
reader_keyok = true;
break;
case KK_ReadMakePathreport:
MakePathreport();
reader_keyok = true;
break;
case KK_ReadWriteMsg:
@@ -712,6 +720,7 @@ void Reader() {
case KK_ReadPeekURLs:
ReadPeekURLs(msg);
reader_keyok = true;
break;
case KK_ReadAddressbookAdd:

View File

@@ -579,16 +579,18 @@ int ExternUtil(GMsg *msg, ExtUtil *extutil) {
int hardlines = EDIT->HardLines();
EDIT->HardLines(false);
LoadText(msg, editorfile);
if(extutil->options & EXTUTIL_WIPE)
WipeFile(editorfile, 0);
if(tmpfile[0] != NUL)
WipeFile(tmpfile, 0);
EDIT->HardLines(hardlines);
// Ignore any kludge address found
msg->TextToLines(CFG->dispmargin-(int)CFG->switches.get(disppagebar), false);
}
if(extutil->options & EXTUTIL_WIPE)
WipeFile(editorfile, 0);
if(tmpfile[0] != NUL)
WipeFile(tmpfile, 0);
reader_keyok = true;
return YES;
}

View File

@@ -405,6 +405,8 @@ public:
bool pmscanincl() { return area->pmscanincl(); }
bool ismarked() const { return (marks & (1<<AL.mask)) ? true : false; }
bool isnewmail() const { return (isvalidchg and isunreadchg) ? true : false; }
const char* echoid() const { return area->echoid(); }
const char* desc() const { return area->desc(); }
const char* path() const { return area->path(); }