Unlimited reply link chain (max was 30 replies)
This commit is contained in:
@@ -10,8 +10,9 @@ _____________________________________________________________________________
|
|||||||
<20><><EFBFBD><EFBFBD>⪨ <20><><EFBFBD> GoldED+ 1.1.5, /snapshot/
|
<20><><EFBFBD><EFBFBD>⪨ <20><><EFBFBD> GoldED+ 1.1.5, /snapshot/
|
||||||
_____________________________________________________________________________
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
+ <20><><EFBFBD><EFBFBD>࠭<EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>쬮 <20> <20><>ॢ<EFBFBD> <20>⢥⮢ (<28>뫮 30).
|
||||||
- <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD>ᠭ<EFBFBD><E1A0AD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Win32.
|
- <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD>ᠭ<EFBFBD><E1A0AD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Win32.
|
||||||
+ <20><><EFBFBD><EFBFBD>襭<EFBFBD> <20><>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>.
|
+ <20><><EFBFBD><EFBFBD>襭<EFBFBD> <20><>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>.
|
||||||
! <20><><EFBFBD>祢<EFBFBD><E7A5A2> <><E1ABAE> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ᮢ<EFBFBD><E1AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> EditGo* <20><> EditBlock*.
|
! <20><><EFBFBD>祢<EFBFBD><E7A5A2> <><E1ABAE> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ᮢ<EFBFBD><E1AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> EditGo* <20><> EditBlock*.
|
||||||
+ SCheckerDefLang <20><><EFBFBD><EFBFBD><EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>㯯<EFBFBD><E3AFAF> (Random Group).
|
+ SCheckerDefLang <20><><EFBFBD><EFBFBD><EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>㯯<EFBFBD><E3AFAF> (Random Group).
|
||||||
+ Win32: ⥯<><E2A5AF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䨪<EFBFBD><E4A8AA><EFBFBD><EFBFBD> <20><>몠 MS Spellcheker <20>।<EFBFBD>⠢<EFBFBD><E2A0A2><EFBFBD> <20> <20><><EFBFBD><EFBFBD>⭮<EFBFBD> <20><>ଥ
|
+ Win32: ⥯<><E2A5AF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䨪<EFBFBD><E4A8AA><EFBFBD><EFBFBD> <20><>몠 MS Spellcheker <20>।<EFBFBD>⠢<EFBFBD><E2A0A2><EFBFBD> <20> <20><><EFBFBD><EFBFBD>⭮<EFBFBD> <20><>ଥ
|
||||||
@@ -22,8 +23,8 @@ _____________________________________________________________________________
|
|||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 26 <20><><EFBFBD><EFBFBD><EFBFBD> 2006: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⭮<EFBFBD><E2ADAE>⥫쭮 ᭠<><E1ADA0><EFBFBD><EFBFBD><EFBFBD> <20><> 12 <20><><EFBFBD><EFBFBD><EFBFBD> 2006.
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 26 <20><><EFBFBD><EFBFBD><EFBFBD> 2006: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⭮<EFBFBD><E2ADAE>⥫쭮 ᭠<><E1ADA0><EFBFBD><EFBFBD><EFBFBD> <20><> 12 <20><><EFBFBD><EFBFBD><EFBFBD> 2006.
|
||||||
|
|
||||||
- GoldEd <20><> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><>४<EFBFBD><E0A5AA><EFBFBD><EFBFBD><E0AEA2>, <20> <20><EFBFBD><E0AEA2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 祬 <20><EFBFBD><E0AEA2><EFBFBD>
|
- GoldEd <20><> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><>४<EFBFBD><E0A5AA><EFBFBD><EFBFBD><E0AEA2>, <20> <20><EFBFBD> <20><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 祬
|
||||||
CHRS-<2D><>㤦<EFBFBD>.
|
<20><EFBFBD><E0AEA2><EFBFBD> CHRS-<2D><>㤦<EFBFBD>.
|
||||||
- <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD> <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD><EFBFBD> <20><><EFBFBD>樠<EFBFBD><E6A8A0><EFBFBD> <20><><EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD> "<22>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>" (M):
|
- <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD> <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD><EFBFBD> <20><><EFBFBD>樠<EFBFBD><E6A8A0><EFBFBD> <20><><EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD> "<22>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>" (M):
|
||||||
QuoteString " FML> "
|
QuoteString " FML> "
|
||||||
- <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD> "<22><>१<EFBFBD><E0A5A7><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD> <20> <20>६<EFBFBD><E0A5AC><EFBFBD> <20><><EFBFBD> <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᮮ<>饭<EFBFBD><E9A5AD>.
|
- <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD> "<22><>१<EFBFBD><E0A5A7><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD> <20> <20>६<EFBFBD><E0A5AC><EFBFBD> <20><><EFBFBD> <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᮮ<>饭<EFBFBD><E9A5AD>.
|
||||||
|
@@ -10,6 +10,8 @@ ______________________________________________________________________
|
|||||||
Notes for GoldED+ 1.1.5, /snapshot/
|
Notes for GoldED+ 1.1.5, /snapshot/
|
||||||
______________________________________________________________________
|
______________________________________________________________________
|
||||||
|
|
||||||
|
+ Unlimited reply link chain (max was 30 replies).
|
||||||
|
|
||||||
- Fixed keyboard deadlock on win32.
|
- Fixed keyboard deadlock on win32.
|
||||||
|
|
||||||
+ Improved false quote handling.
|
+ Improved false quote handling.
|
||||||
|
@@ -1051,12 +1051,12 @@ void GThreadlist::recursive_build(uint32_t msgn, uint32_t rn, uint32_t level) {
|
|||||||
|
|
||||||
recursive_build(msg.link.first(), msg.link.list(0), level+1);
|
recursive_build(msg.link.first(), msg.link.list(0), level+1);
|
||||||
|
|
||||||
for(int n=0; n < msg.link.list_max()-1; n++) {
|
for(size_t n = 0, max = msg.link.list_max(); n < max; n++)
|
||||||
if(msg.link.list(n)) {
|
{
|
||||||
|
if (msg.link.list(n))
|
||||||
recursive_build(msg.link.list(n), msg.link.list(n+1), level+1);
|
recursive_build(msg.link.list(n), msg.link.list(n+1), level+1);
|
||||||
} else
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AA->LoadHdr(&msg, oldmsgno);
|
AA->LoadHdr(&msg, oldmsgno);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -220,19 +220,16 @@ void MarkMsgs_Txt(int item, char* markstring) {
|
|||||||
|
|
||||||
static void recursive_mark(GMsg* msg, uint32_t msgno, bool markasread)
|
static void recursive_mark(GMsg* msg, uint32_t msgno, bool markasread)
|
||||||
{
|
{
|
||||||
int i;
|
if (AA->Msgn.ToReln(msgno) and AA->LoadHdr(msg, msgno, false))
|
||||||
gmsg_links templink;
|
{
|
||||||
|
gmsg_links templink = msg->link;
|
||||||
if(AA->Msgn.ToReln(msgno) and AA->LoadHdr(msg, msgno, false)) {
|
|
||||||
|
|
||||||
templink = msg->link;
|
|
||||||
|
|
||||||
if (!markasread)
|
if (!markasread)
|
||||||
{
|
{
|
||||||
if (templink.first())
|
if (templink.first())
|
||||||
AA->Mark.Add(templink.first());
|
AA->Mark.Add(templink.first());
|
||||||
|
|
||||||
for(i = 0; i < templink.list_max(); i++)
|
for (size_t i = 0, max = templink.list_max(); i < max; i++)
|
||||||
{
|
{
|
||||||
if (templink.list(i))
|
if (templink.list(i))
|
||||||
AA->Mark.Add(templink.list(i));
|
AA->Mark.Add(templink.list(i));
|
||||||
@@ -247,13 +244,13 @@ static void recursive_mark(GMsg* msg, uint32_t msgno, bool markasread)
|
|||||||
if (templink.first())
|
if (templink.first())
|
||||||
recursive_mark(msg, templink.first(), markasread);
|
recursive_mark(msg, templink.first(), markasread);
|
||||||
|
|
||||||
for(i = 0; i < templink.list_max(); i++) {
|
for (size_t i = 0, max = templink.list_max(); i < max; i++)
|
||||||
if(templink.list(i)) {
|
{
|
||||||
|
if (templink.list(i))
|
||||||
recursive_mark(msg, templink.list(i), markasread);
|
recursive_mark(msg, templink.list(i), markasread);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
@@ -1151,17 +1151,22 @@ void MakeMsg(int mode, GMsg* omsg, bool ignore_replyto) {
|
|||||||
if(AA->LoadHdr(reply, reply_msgno, false)) {
|
if(AA->LoadHdr(reply, reply_msgno, false)) {
|
||||||
uint32_t replynext;
|
uint32_t replynext;
|
||||||
bool ok2save = false;
|
bool ok2save = false;
|
||||||
if(streql(AA->basetype(), "SQUISH")) {
|
|
||||||
if(reply->link.first()) {
|
if (streql(AA->basetype(), "SQUISH"))
|
||||||
for(int r=0; r<reply->link.list_max()-1; r++) {
|
{
|
||||||
if(reply->link.list(r) == 0) {
|
if (reply->link.first())
|
||||||
|
{
|
||||||
|
for (size_t r = 0; !ok2save; r++)
|
||||||
|
{
|
||||||
|
if (reply->link.list(r) == 0)
|
||||||
|
{
|
||||||
reply->link.list_set(r, msg->msgno);
|
reply->link.list_set(r, msg->msgno);
|
||||||
ok2save = true;
|
ok2save = true;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
reply->link.first_set(msg->msgno);
|
reply->link.first_set(msg->msgno);
|
||||||
ok2save = true;
|
ok2save = true;
|
||||||
}
|
}
|
||||||
|
@@ -1052,14 +1052,16 @@ void Reader() {
|
|||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
// Determine if the message has replies
|
// Determine if the message has replies
|
||||||
|
|
||||||
uint32_t MsgHasReplies(GMsg* msg) {
|
uint32_t MsgHasReplies(GMsg* msg)
|
||||||
|
{
|
||||||
if (msg->link.first())
|
if (msg->link.first())
|
||||||
return msg->link.first();
|
return msg->link.first();
|
||||||
|
|
||||||
for(int n=0; n<msg->link.list_max(); n++)
|
for (size_t n = 0, max = msg->link.list_max(); n < max; n++)
|
||||||
|
{
|
||||||
if (msg->link.list(n))
|
if (msg->link.list(n))
|
||||||
return msg->link.list(n);
|
return msg->link.list(n);
|
||||||
|
}
|
||||||
|
|
||||||
if (msg->link.next())
|
if (msg->link.next())
|
||||||
return msg->link.next();
|
return msg->link.next();
|
||||||
|
@@ -39,6 +39,8 @@
|
|||||||
#include <gvidall.h>
|
#include <gvidall.h>
|
||||||
#include <gmsgattr.h>
|
#include <gmsgattr.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
// Internet name typedefs
|
// Internet name typedefs
|
||||||
@@ -180,37 +182,53 @@ Line* AddHexdump(Line*& line, void* data, size_t datalen);
|
|||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
class gmsg_links {
|
class gmsg_links
|
||||||
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
enum { list_limit = 29 };
|
|
||||||
|
|
||||||
uint32_t reply_to;
|
uint32_t reply_to;
|
||||||
uint32_t reply_first;
|
uint32_t reply_first;
|
||||||
uint32_t reply_list[list_limit];
|
|
||||||
uint32_t reply_next;
|
uint32_t reply_next;
|
||||||
|
|
||||||
|
std::vector<uint32_t> reply_list;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void reset() {
|
void reset()
|
||||||
|
{
|
||||||
reply_to = reply_first = reply_next = 0;
|
reply_to = reply_first = reply_next = 0;
|
||||||
for(int n=0; n<list_max(); n++)
|
reply_list.clear();
|
||||||
reply_list[n] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int list_max() const { return list_limit; }
|
int list_max() const { return reply_list.size(); }
|
||||||
|
|
||||||
void to_set(uint32_t m) { reply_to = m; }
|
void to_set(uint32_t m) { reply_to = m; }
|
||||||
void first_set(uint32_t m) { reply_first = m; }
|
void first_set(uint32_t m) { reply_first = m; }
|
||||||
void list_set(int n, uint32_t m) { reply_list[n] = m; }
|
|
||||||
void next_set(uint32_t m) { reply_next = m; }
|
void next_set(uint32_t m) { reply_next = m; }
|
||||||
|
|
||||||
|
void list_set(size_t n, uint32_t m)
|
||||||
|
{
|
||||||
|
size_t size = reply_list.size();
|
||||||
|
if (n >= size)
|
||||||
|
{
|
||||||
|
for (size_t i = size; i <= n; i++)
|
||||||
|
reply_list.push_back(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
reply_list[n] = m;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t to() const { return reply_to; }
|
uint32_t to() const { return reply_to; }
|
||||||
uint32_t first() const { return reply_first; }
|
uint32_t first() const { return reply_first; }
|
||||||
uint32_t list(int n) const { return reply_list[n]; }
|
|
||||||
uint32_t next() const { return reply_next; }
|
uint32_t next() const { return reply_next; }
|
||||||
|
|
||||||
|
uint32_t list(size_t n) const
|
||||||
|
{
|
||||||
|
if (n >= reply_list.size())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return reply_list[n];
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -313,10 +313,12 @@ int JamArea::load_message(int __mode, gmsg* __msg, JamHdr& __hdr) {
|
|||||||
throw_free(_subfield);
|
throw_free(_subfield);
|
||||||
|
|
||||||
// Get reply numbers in chain
|
// Get reply numbers in chain
|
||||||
if(wide->lookreplies and __msg->link.first()) {
|
if (wide->lookreplies and __msg->link.first())
|
||||||
|
{
|
||||||
int r = 0;
|
int r = 0;
|
||||||
uint32_t m = __msg->link.first();
|
uint32_t m = __msg->link.first();
|
||||||
while(m and (r < __msg->link.list_max())) {
|
while (m)
|
||||||
|
{
|
||||||
JamHdr _rhdr;
|
JamHdr _rhdr;
|
||||||
memset(&_rhdr, 0, sizeof(JamHdr));
|
memset(&_rhdr, 0, sizeof(JamHdr));
|
||||||
lseekset(data->fhjdx, m-data->hdrinfo.basemsgnum, sizeof(JamIndex));
|
lseekset(data->fhjdx, m-data->hdrinfo.basemsgnum, sizeof(JamIndex));
|
||||||
@@ -324,8 +326,7 @@ int JamArea::load_message(int __mode, gmsg* __msg, JamHdr& __hdr) {
|
|||||||
lseekset(data->fhjhr, _idx.hdroffset);
|
lseekset(data->fhjhr, _idx.hdroffset);
|
||||||
read(data->fhjhr, &_rhdr, sizeof(JamHdr));
|
read(data->fhjhr, &_rhdr, sizeof(JamHdr));
|
||||||
m = _rhdr.replynext;
|
m = _rhdr.replynext;
|
||||||
if(m)
|
if (m) __msg->link.list_set(r++, m);
|
||||||
__msg->link.list_set(r++, m);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -107,7 +107,8 @@ int SquishArea::load_message(int __mode, gmsg* __msg, SqshHdr& __hdr) {
|
|||||||
// Convert link.list
|
// Convert link.list
|
||||||
int q = 0;
|
int q = 0;
|
||||||
int r = __hdr.replies[0] == __hdr.replies[1] ? 2 : 1;
|
int r = __hdr.replies[0] == __hdr.replies[1] ? 2 : 1;
|
||||||
while(r<=8) {
|
while (r <= 8)
|
||||||
|
{
|
||||||
if (__hdr.replies[r] and __hdr.replies[r-1] != __hdr.replies[r])
|
if (__hdr.replies[r] and __hdr.replies[r-1] != __hdr.replies[r])
|
||||||
__msg->link.list_set(q++, __hdr.replies[r]);
|
__msg->link.list_set(q++, __hdr.replies[r]);
|
||||||
r++;
|
r++;
|
||||||
|
Reference in New Issue
Block a user