mirror of
https://github.com/Artikash/Textractor.git
synced 2024-12-24 01:14:12 +08:00
remove linking (useless and a pain to update) and continue rewriting hookman
This commit is contained in:
parent
97bca014e4
commit
aaf33094d1
@ -43,17 +43,6 @@ DWORD ProcessCommand(const std::wstring& cmd, DWORD pid)
|
|||||||
if (Parse(m[1].str(), hp))
|
if (Parse(m[1].str(), hp))
|
||||||
Host_InsertHook(pid, &hp);
|
Host_InsertHook(pid, &hp);
|
||||||
}
|
}
|
||||||
else if (regex_match(cmd, m, wregex(L":l([[:xdigit:]]+)-([[:xdigit:]]+)", wregex::icase)))
|
|
||||||
{
|
|
||||||
DWORD from = std::stoul(m[1].str(), NULL, 16);
|
|
||||||
DWORD to = std::stoul(m[2].str(), NULL, 16);
|
|
||||||
Host_AddLink(from, to);
|
|
||||||
}
|
|
||||||
else if (regex_match(cmd, m, wregex(L":u([[:xdigit:]]+)", wregex::icase)))
|
|
||||||
{
|
|
||||||
DWORD from = std::stoul(m[1].str(), NULL, 16);
|
|
||||||
Host_UnLink(from);
|
|
||||||
}
|
|
||||||
else if (regex_match(cmd, m, wregex(L":(?:h|help)", wregex::icase)))
|
else if (regex_match(cmd, m, wregex(L":(?:h|help)", wregex::icase)))
|
||||||
{
|
{
|
||||||
ConsoleOutput(Usage);
|
ConsoleOutput(Usage);
|
||||||
|
@ -20,11 +20,6 @@ const wchar_t* ErrorSyntax=L"Syntax error";
|
|||||||
const wchar_t* Usage = L"Syntax:\r\n\
|
const wchar_t* Usage = L"Syntax:\r\n\
|
||||||
\r\n\
|
\r\n\
|
||||||
:H[ELP] - print help\r\n\
|
:H[ELP] - print help\r\n\
|
||||||
:Lfrom-to - link from thread 'from' to thread 'to'\r\n\
|
|
||||||
:Ufrom - unlink link from thread 'from'\r\n\
|
|
||||||
\r\n\
|
|
||||||
'from' and 'to' and hexadecimal thread numbers. The thread number is the first number in the combo box.\r\n\
|
|
||||||
\r\n\
|
|
||||||
Loader options:\r\n\
|
Loader options:\r\n\
|
||||||
/P[{process_id|Nprocess_name}] - attach to process\r\n\
|
/P[{process_id|Nprocess_name}] - attach to process\r\n\
|
||||||
\r\n\
|
\r\n\
|
||||||
|
@ -365,16 +365,6 @@ void ClickButton(HWND hWnd, HWND h)
|
|||||||
}
|
}
|
||||||
pfman->SaveProfiles();
|
pfman->SaveProfiles();
|
||||||
}
|
}
|
||||||
else if (h == hwndRemoveLink)
|
|
||||||
{
|
|
||||||
WCHAR str[32];
|
|
||||||
if (GetWindowText(hwndCombo, str, 32))
|
|
||||||
{
|
|
||||||
DWORD from = std::stoul(str, NULL, 16);
|
|
||||||
if (from != 0)
|
|
||||||
Host_UnLink(from);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (h == hwndRemoveHook)
|
else if (h == hwndRemoveHook)
|
||||||
{
|
{
|
||||||
WCHAR str[32];
|
WCHAR str[32];
|
||||||
@ -508,8 +498,6 @@ std::wstring GetEntryString(TextThread& thread)
|
|||||||
std::wstring CreateEntryWithLink(TextThread& thread, std::wstring& entry)
|
std::wstring CreateEntryWithLink(TextThread& thread, std::wstring& entry)
|
||||||
{
|
{
|
||||||
std::wstring entryWithLink = entry;
|
std::wstring entryWithLink = entry;
|
||||||
if (thread.Link())
|
|
||||||
entryWithLink += L"->" + ToHexString(thread.LinkNumber());
|
|
||||||
if (thread.PID() == 0)
|
if (thread.PID() == 0)
|
||||||
entryWithLink += L"ConsoleOutput";
|
entryWithLink += L"ConsoleOutput";
|
||||||
HookParam hp = {};
|
HookParam hp = {};
|
||||||
@ -609,7 +597,6 @@ DWORD AddRemoveLink(TextThread* thread)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool IsUnicodeHook(const ProcessRecord& pr, DWORD hook);
|
bool IsUnicodeHook(const ProcessRecord& pr, DWORD hook);
|
||||||
void AddLinksToHookManager(const Profile* pf, size_t thread_index, const TextThread* thread);
|
|
||||||
|
|
||||||
DWORD ThreadCreate(TextThread* thread)
|
DWORD ThreadCreate(TextThread* thread)
|
||||||
{
|
{
|
||||||
@ -631,7 +618,6 @@ DWORD ThreadCreate(TextThread* thread)
|
|||||||
{
|
{
|
||||||
(*thread_profile)->HookManagerIndex() = thread->Number();
|
(*thread_profile)->HookManagerIndex() = thread->Number();
|
||||||
auto thread_index = thread_profile - pf->Threads().begin();
|
auto thread_index = thread_profile - pf->Threads().begin();
|
||||||
AddLinksToHookManager(pf, thread_index, thread);
|
|
||||||
if (pf->IsThreadSelected(thread_profile))
|
if (pf->IsThreadSelected(thread_profile))
|
||||||
ThreadReset(thread);
|
ThreadReset(thread);
|
||||||
}
|
}
|
||||||
@ -655,25 +641,6 @@ bool IsUnicodeHook(const ProcessRecord& pr, DWORD hook)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddLinksToHookManager(const Profile* pf, size_t thread_index, const TextThread* thread)
|
|
||||||
{
|
|
||||||
for (auto lp = pf->Links().begin(); lp != pf->Links().end(); ++lp)
|
|
||||||
{
|
|
||||||
if ((*lp)->FromIndex() == thread_index)
|
|
||||||
{
|
|
||||||
WORD to_index = pf->Threads()[(*lp)->ToIndex()]->HookManagerIndex();
|
|
||||||
if (to_index != 0)
|
|
||||||
man->AddLink(thread->Number(), to_index);
|
|
||||||
}
|
|
||||||
if ((*lp)->ToIndex() == thread_index)
|
|
||||||
{
|
|
||||||
WORD from_index = pf->Threads()[(*lp)->FromIndex()]->HookManagerIndex();
|
|
||||||
if (from_index != 0)
|
|
||||||
man->AddLink(from_index, thread->Number());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD ThreadRemove(TextThread* thread)
|
DWORD ThreadRemove(TextThread* thread)
|
||||||
{
|
{
|
||||||
RemoveFromCombo(thread);
|
RemoveFromCombo(thread);
|
||||||
|
@ -266,120 +266,43 @@ void HookManager::RemoveSingleHook(DWORD pid, DWORD addr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
SetCurrent(0);
|
SetCurrent(0);
|
||||||
//ConsoleOutput("vnrhost:RemoveSingleHook: lock");
|
|
||||||
//EnterCriticalSection(&hmcs);
|
|
||||||
DWORD max = thread_table->Used();
|
|
||||||
bool flag = false;
|
|
||||||
for (DWORD i = 1; i <= max; i++)
|
|
||||||
if (TextThread *it = thread_table->FindThread(i))
|
|
||||||
if (it->PID() == pid && it->Addr() == addr) {
|
|
||||||
flag |= (it == current);
|
|
||||||
//flag|=it->RemoveFromCombo();
|
|
||||||
thread_table->SetThread(i, 0);
|
|
||||||
if (it->Number() < new_thread_number)
|
|
||||||
new_thread_number = it->Number();
|
|
||||||
Delete(it->GetThreadParameter());
|
|
||||||
if (remove)
|
|
||||||
remove(it);
|
|
||||||
delete it;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (DWORD i = 0; i <= max; i++)
|
|
||||||
if (TextThread *it = thread_table->FindThread(i))
|
|
||||||
if (it->Link() && thread_table->FindThread(it->LinkNumber()) == nullptr) {
|
|
||||||
it->LinkNumber() = -1;
|
|
||||||
it->Link() = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flag) {
|
|
||||||
current = nullptr;
|
|
||||||
DWORD number = head.Left ? head.Left->data : 0;
|
|
||||||
SetCurrent(thread_table->FindThread(number));
|
|
||||||
if (reset && current)
|
|
||||||
reset(current);
|
|
||||||
//it->ResetEditText();
|
|
||||||
}
|
|
||||||
//LeaveCriticalSection(&hmcs);
|
|
||||||
//ConsoleOutput("vnrhost:RemoveSingleHook: unlock");
|
|
||||||
}
|
}
|
||||||
void HookManager::RemoveSingleThread(DWORD number)
|
void HookManager::RemoveSingleThread(DWORD number)
|
||||||
{
|
{
|
||||||
if (number == 0)
|
if (number == 0)
|
||||||
return;
|
return;
|
||||||
HM_LOCK;
|
HM_LOCK;
|
||||||
//ConsoleOutput("vnrhost:RemoveSingleThread: lock");
|
for (auto i : threadTable)
|
||||||
//EnterCriticalSection(&hmcs);
|
{
|
||||||
if (TextThread *it = thread_table->FindThread(number)) {
|
if (i.second->Number() == number)
|
||||||
thread_table->SetThread(number, 0);
|
{
|
||||||
Delete(it->GetThreadParameter());
|
|
||||||
if (remove)
|
if (remove)
|
||||||
remove(it);
|
{
|
||||||
bool flag = (it == current);
|
remove(i.second);
|
||||||
if (it->Number() < new_thread_number)
|
|
||||||
new_thread_number = it->Number();
|
|
||||||
delete it;
|
|
||||||
for (int i = 0; i <= thread_table->Used(); i++)
|
|
||||||
if (TextThread *t = thread_table->FindThread(i))
|
|
||||||
if (t->LinkNumber() == number) {
|
|
||||||
t->Link() = 0;
|
|
||||||
t->LinkNumber() = -1;
|
|
||||||
}
|
}
|
||||||
|
delete i.second;
|
||||||
if (flag) {
|
threadTable[i.first] = nullptr;
|
||||||
current = nullptr;
|
|
||||||
number = head.Left ? head.Left->data : 0;
|
|
||||||
SetCurrent(thread_table->FindThread(number));
|
|
||||||
if (reset && current)
|
|
||||||
reset(current);
|
|
||||||
//it->ResetEditText();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//LeaveCriticalSection(&hmcs);
|
SetCurrent(0);
|
||||||
//ConsoleOutput("vnrhost:RemoveSingleThread: unlock");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HookManager::RemoveProcessContext(DWORD pid)
|
void HookManager::RemoveProcessContext(DWORD pid)
|
||||||
{
|
{
|
||||||
HM_LOCK;
|
HM_LOCK;
|
||||||
bool flag = false;
|
for (auto i : threadTable)
|
||||||
//ConsoleOutput("vnrhost:RemoveProcessContext: lock");
|
{
|
||||||
//EnterCriticalSection(&hmcs);
|
if (i.second->PID() == pid)
|
||||||
for (int i = 1; i < thread_table->Used(); i++)
|
{
|
||||||
if (TextThread *it = thread_table->FindThread(i))
|
|
||||||
if (it->PID() == pid) {
|
|
||||||
Delete(it->GetThreadParameter());
|
|
||||||
//if (false == Delete(it->GetThreadParameter())) {
|
|
||||||
// // jichi 11/26/2013: Remove debugging instructions
|
|
||||||
// //if (debug)
|
|
||||||
// // __asm int 3
|
|
||||||
//}
|
|
||||||
flag |= (it == current);
|
|
||||||
//flag|=it->RemoveFromCombo();
|
|
||||||
if (it->Number() <new_thread_number)
|
|
||||||
new_thread_number = it->Number();
|
|
||||||
thread_table->SetThread(i,0);
|
|
||||||
if (remove)
|
if (remove)
|
||||||
remove(it);
|
{
|
||||||
delete it;
|
remove(i.second);
|
||||||
}
|
}
|
||||||
|
delete i.second;
|
||||||
for (int i = 0; i < thread_table->Used(); i++)
|
threadTable[i.first] = nullptr;
|
||||||
if (TextThread *it=thread_table->FindThread(i))
|
|
||||||
if (it->Link() && thread_table->FindThread(it->LinkNumber()) == nullptr) {
|
|
||||||
it->LinkNumber()=-1;
|
|
||||||
it->Link() = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag) {
|
|
||||||
current = nullptr;
|
|
||||||
DWORD number = head.Left ? head.Left->data : 0;
|
|
||||||
SetCurrent(thread_table->FindThread(number));
|
|
||||||
if (reset && current)
|
|
||||||
reset(current);
|
|
||||||
//if (it) it->ResetEditText();
|
|
||||||
}
|
}
|
||||||
//LeaveCriticalSection(&hmcs);
|
SetCurrent(0);
|
||||||
//ConsoleOutput("vnrhost:RemoveProcessContext: unlock");
|
|
||||||
}
|
}
|
||||||
void HookManager::RegisterThread(TextThread* it, DWORD num)
|
void HookManager::RegisterThread(TextThread* it, DWORD num)
|
||||||
{ thread_table->SetThread(num, it); }
|
{ thread_table->SetThread(num, it); }
|
||||||
@ -535,75 +458,6 @@ void HookManager::UnRegisterProcess(DWORD pid)
|
|||||||
// //swprintf(user_entry,L"UserHook%c",c);
|
// //swprintf(user_entry,L"UserHook%c",c);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
void HookManager::AddLink(WORD from, WORD to)
|
|
||||||
{
|
|
||||||
HM_LOCK;
|
|
||||||
//bool flag=false;
|
|
||||||
//ConsoleOutput("vnrhost:AddLink: lock");
|
|
||||||
//EnterCriticalSection(&hmcs);
|
|
||||||
TextThread *from_thread = thread_table->FindThread(from),
|
|
||||||
*to_thread = thread_table->FindThread(to);
|
|
||||||
if (to_thread && from_thread) {
|
|
||||||
if (from_thread->GetThreadParameter()->pid != to_thread->GetThreadParameter()->pid)
|
|
||||||
DOUT("link to different process");
|
|
||||||
else if (from_thread->Link()==to_thread)
|
|
||||||
DOUT("link already exists");
|
|
||||||
else if (to_thread->CheckCycle(from_thread))
|
|
||||||
DOUT("cyclic link");
|
|
||||||
else {
|
|
||||||
from_thread->Link()=to_thread;
|
|
||||||
from_thread->LinkNumber()=to;
|
|
||||||
DOUT("thread linked");
|
|
||||||
if (addRemoveLink)
|
|
||||||
addRemoveLink(from_thread);
|
|
||||||
//WCHAR str[0x40];
|
|
||||||
//swprintf(str,FormatLink,from,to);
|
|
||||||
//AddConsoleOutput(str);
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
DOUT("error link");
|
|
||||||
//else
|
|
||||||
// AddConsoleOutput(ErrorLink);
|
|
||||||
//LeaveCriticalSection(&hmcs);
|
|
||||||
//ConsoleOutput("vnrhost:AddLink: unlock");
|
|
||||||
}
|
|
||||||
void HookManager::UnLink(WORD from)
|
|
||||||
{
|
|
||||||
HM_LOCK;
|
|
||||||
//bool flag=false;
|
|
||||||
//ConsoleOutput("vnrhost:UnLink: lock");
|
|
||||||
//EnterCriticalSection(&hmcs);
|
|
||||||
if (TextThread *from_thread = thread_table->FindThread(from)) {
|
|
||||||
from_thread->Link() = nullptr;
|
|
||||||
from_thread->LinkNumber() = 0xffff;
|
|
||||||
DOUT("link deleted");
|
|
||||||
if (addRemoveLink)
|
|
||||||
addRemoveLink(from_thread);
|
|
||||||
}
|
|
||||||
//else // jichi 12/25/2013: This could happen when the game exist
|
|
||||||
// ConsoleOutput("vnrhost:UnLink: thread does not exist");
|
|
||||||
//LeaveCriticalSection(&hmcs);
|
|
||||||
//ConsoleOutput("vnrhost:UnLink: unlock");
|
|
||||||
}
|
|
||||||
void HookManager::UnLinkAll(WORD from)
|
|
||||||
{
|
|
||||||
HM_LOCK;
|
|
||||||
//bool flag=false;
|
|
||||||
//ConsoleOutput("vnrhost:UnLinkAll: lock");
|
|
||||||
//EnterCriticalSection(&hmcs);
|
|
||||||
if (TextThread *from_thread = thread_table->FindThread(from)) {
|
|
||||||
from_thread->UnLinkAll();
|
|
||||||
DOUT("link deleted");
|
|
||||||
}
|
|
||||||
//else // jichi 12/25/2013: This could happen after the process exists
|
|
||||||
// ConsoleOutput("vnrhost:UnLinkAll: thread not exist");
|
|
||||||
//AddConsoleOutput(L"Link deleted.");
|
|
||||||
//} else
|
|
||||||
// AddConsoleOutput(L"Thread not exist.");
|
|
||||||
//LeaveCriticalSection(&hmcs);
|
|
||||||
//ConsoleOutput("vnrhost:UnLinkAll: unlock");
|
|
||||||
}
|
|
||||||
|
|
||||||
void HookManager::DispatchText(DWORD pid, const BYTE *text, DWORD hook, DWORD retn, DWORD spl, int len, bool space)
|
void HookManager::DispatchText(DWORD pid, const BYTE *text, DWORD hook, DWORD retn, DWORD spl, int len, bool space)
|
||||||
{
|
{
|
||||||
// jichi 20/27/2013: When PID is zero, the text comes from console, which I don't need
|
// jichi 20/27/2013: When PID is zero, the text comes from console, which I don't need
|
||||||
|
@ -62,9 +62,6 @@ public:
|
|||||||
//void UnlockHookman();
|
//void UnlockHookman();
|
||||||
void ResetRepeatStatus();
|
void ResetRepeatStatus();
|
||||||
void ClearCurrent();
|
void ClearCurrent();
|
||||||
void AddLink(WORD from, WORD to);
|
|
||||||
void UnLink(WORD from);
|
|
||||||
void UnLinkAll(WORD from);
|
|
||||||
void SelectCurrent(DWORD num);
|
void SelectCurrent(DWORD num);
|
||||||
void SetCurrent(TextThread *it);
|
void SetCurrent(TextThread *it);
|
||||||
void AddConsoleOutput(LPCWSTR text);
|
void AddConsoleOutput(LPCWSTR text);
|
||||||
@ -107,8 +104,6 @@ public:
|
|||||||
ProcessEventCallback RegisterProcessDetachCallback(ProcessEventCallback cf)
|
ProcessEventCallback RegisterProcessDetachCallback(ProcessEventCallback cf)
|
||||||
{ return (ProcessEventCallback)_InterlockedExchange((long*)&detach,(long)cf); }
|
{ return (ProcessEventCallback)_InterlockedExchange((long*)&detach,(long)cf); }
|
||||||
|
|
||||||
ThreadTable *Table() { return thread_table; } // private
|
|
||||||
|
|
||||||
void OnThreadCreate(pugi::xml_node profile_node, TextThread* thread);
|
void OnThreadCreate(pugi::xml_node profile_node, TextThread* thread);
|
||||||
void GetProfile(DWORD pid, pugi::xml_node profile_node);
|
void GetProfile(DWORD pid, pugi::xml_node profile_node);
|
||||||
|
|
||||||
|
@ -289,23 +289,4 @@ IHFSERVICE DWORD IHFAPI Host_RemoveHook(DWORD pid, DWORD addr)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4/30/2015: Removed as not needed. Going to change to json
|
|
||||||
IHFSERVICE DWORD IHFAPI Host_AddLink(DWORD from, DWORD to)
|
|
||||||
{
|
|
||||||
man->AddLink(from & 0xffff, to & 0xffff);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
IHFSERVICE DWORD IHFAPI Host_UnLink(DWORD from)
|
|
||||||
{
|
|
||||||
man->UnLink(from & 0xffff);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
IHFSERVICE DWORD IHFAPI Host_UnLinkAll(DWORD from)
|
|
||||||
{
|
|
||||||
man->UnLinkAll(from & 0xffff);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
@ -468,29 +468,6 @@ void TextThread::AddText(const BYTE *con, int len, bool new_line, bool space)
|
|||||||
sentence_length = 0;
|
sentence_length = 0;
|
||||||
} else {
|
} else {
|
||||||
SetNewLineTimer();
|
SetNewLineTimer();
|
||||||
if (link) {
|
|
||||||
const BYTE *send = con;
|
|
||||||
int l = len;
|
|
||||||
if (status & USING_UNICODE) { // Although unlikely, a thread and its link may have different encoding.
|
|
||||||
if ((link->Status() & USING_UNICODE) == 0) {
|
|
||||||
send = new BYTE[l];
|
|
||||||
//::memset(send, 0, l); // jichi 9/26/2013: zero memory
|
|
||||||
l = WC_MB((LPWSTR)con, (char *)send);
|
|
||||||
}
|
|
||||||
link->AddTextDirect(send, l, space);
|
|
||||||
} else {
|
|
||||||
if (link->Status() & USING_UNICODE) {
|
|
||||||
size_t sz = len * 2 + 2;
|
|
||||||
send = new BYTE[sz];
|
|
||||||
//::memset(send, 0, sz); // jichi 9/26/2013: zero memory
|
|
||||||
l = MB_WC((char *)con, (LPWSTR)send) << 1;
|
|
||||||
}
|
|
||||||
link->AddTextDirect(send, l, space);
|
|
||||||
}
|
|
||||||
link->SetNewLineTimer();
|
|
||||||
if (send != con)
|
|
||||||
delete[] send;
|
|
||||||
}
|
|
||||||
sentence_length += len;
|
sentence_length += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,29 +491,6 @@ void TextThread::AddTextDirect(const BYTE* con, int len, bool space) // Add to s
|
|||||||
if (status & BUFF_NEWLINE)
|
if (status & BUFF_NEWLINE)
|
||||||
AddLineBreak();
|
AddLineBreak();
|
||||||
//SetNewLineTimer();
|
//SetNewLineTimer();
|
||||||
if (link) {
|
|
||||||
const BYTE *send = con;
|
|
||||||
int l = len;
|
|
||||||
if (status & USING_UNICODE) {
|
|
||||||
if ((link->Status()&USING_UNICODE) == 0) {
|
|
||||||
send = new BYTE[l];
|
|
||||||
//::memset(send, 0, l); // jichi 9/26/2013: zero memory
|
|
||||||
l = WC_MB((LPWSTR)con,(char*)send);
|
|
||||||
}
|
|
||||||
link->AddText(send, l, false, space); // new_line is false
|
|
||||||
} else {
|
|
||||||
if (link->Status()&USING_UNICODE) {
|
|
||||||
size_t sz = len * 2 + 2;
|
|
||||||
send = new BYTE[sz];
|
|
||||||
//::memset(send, 0, sz); // jichi 9/26/2013: zero memory
|
|
||||||
l = MB_WC((char *)con, (LPWSTR)send) << 1;
|
|
||||||
}
|
|
||||||
link->AddText(send, l, false, space); // new_line is false
|
|
||||||
}
|
|
||||||
link->SetNewLineTimer();
|
|
||||||
if (send != con)
|
|
||||||
delete[] send;
|
|
||||||
}
|
|
||||||
sentence_length += len;
|
sentence_length += len;
|
||||||
|
|
||||||
BYTE *data = const_cast<BYTE *>(con); // jichi 10/27/2013: TODO: Figure out where con is modified
|
BYTE *data = const_cast<BYTE *>(con); // jichi 10/27/2013: TODO: Figure out where con is modified
|
||||||
@ -723,12 +677,6 @@ void TextThread::DispatchLastSentence()
|
|||||||
|
|
||||||
void TextThread::SetNewLineFlag() { status |= BUFF_NEWLINE; }
|
void TextThread::SetNewLineFlag() { status |= BUFF_NEWLINE; }
|
||||||
|
|
||||||
bool TextThread::CheckCycle(TextThread* start)
|
|
||||||
{
|
|
||||||
if (link==start||this==start) return true;
|
|
||||||
if (link==0) return false;
|
|
||||||
return link->CheckCycle(start);
|
|
||||||
}
|
|
||||||
void TextThread::SetNewLineTimer()
|
void TextThread::SetNewLineTimer()
|
||||||
{
|
{
|
||||||
if (thread_number == 0)
|
if (thread_number == 0)
|
||||||
@ -765,11 +713,5 @@ DWORD TextThread::GetThreadString(LPSTR str, DWORD max)
|
|||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
void TextThread::UnLinkAll()
|
|
||||||
{
|
|
||||||
if (link) link->UnLinkAll();
|
|
||||||
link = 0;
|
|
||||||
link_number = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
@ -83,7 +83,6 @@ public:
|
|||||||
WORD &LinkNumber() { return link_number; }
|
WORD &LinkNumber() { return link_number; }
|
||||||
UINT_PTR &Timer() { return timer; }
|
UINT_PTR &Timer() { return timer; }
|
||||||
ThreadParameter *GetThreadParameter() { return &tp; }
|
ThreadParameter *GetThreadParameter() { return &tp; }
|
||||||
TextThread *&Link() { return link; }
|
|
||||||
//LPCWSTR GetComment() { return comment; }
|
//LPCWSTR GetComment() { return comment; }
|
||||||
|
|
||||||
ThreadOutputFilterCallback RegisterOutputCallBack(ThreadOutputFilterCallback cb, PVOID data)
|
ThreadOutputFilterCallback RegisterOutputCallBack(ThreadOutputFilterCallback cb, PVOID data)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user