www.pudn.com > mir112347628.rar > NPCTxtAnalysis.cpp


// NPCTxtAnalysis.cpp: implementation of the CNPCTxtAnalysis class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#define LINE_DIVIDER 0x01 // Line Divider

#define DEFAULT_TEXT_HEIGHT 16 // Default Text Height(as Pixel)
#define DEFAULT_TEXT_WIDTH 16 // Default Text Width(as Pixel)

#define DEFAULT_TXT_COLOR RGB(255,255,255) // WHITE COLOR
#define DEFAULT_BTN_COLOR RGB(255,255,0) // YELLOW COLOR
#define DEFAULT_BTN_CLICK_COLOR RGB(255,0,0) // RED COLOR

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CNPCTxtAnalysis::CNPCTxtAnalysis()
{
m_pxBtn = NULL;
m_pxpTxt = NULL;
m_pSourceText = NULL;
m_bReady = FALSE;
m_bInited = FALSE;
m_pxGWND = NULL;
}

CNPCTxtAnalysis::~CNPCTxtAnalysis()
{
FreeAllMsg();
}

BOOL CNPCTxtAnalysis::InitAnalysis(CTextButton *xpBtn,CPDLList<CMText>* pxpTxt,CWHDXGraphicWindow* pxGWND)
{
m_pxBtn = xpBtn; // Link to Text Button Class
m_pxpTxt = pxpTxt;
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
m_pxGWND=pxGWND;
m_bInited = TRUE;
return TRUE;
}

BOOL CNPCTxtAnalysis::FreeAllMsg(VOID)
{
if(m_bInited)
{
m_pxpTxt->ClearAllNodes(); // ºÐ¼®µÈ ±Û ¸ðµÎ ³¯¸®±â
m_pxBtn->ReleaseButtons(); // »ý¼ºµÈ ´ÜÅõ ¸ðµÎ ³¯¸®±â
}

if(m_pSourceText!=NULL)
{
delete[] m_pSourceText; // ¹ÞÀº ¼Ò½ºµµ ¸ðµÎ ³¯¸®±â
m_pSourceText = NULL;
}

m_bReady = FALSE;
return TRUE;
}

// Divider ´Â °¢ CHARº°·Î ¸ðµÎ °ËÃâÇÑ´Ù.
// °á°ú´Â ¹Þ´Â Áï½Ã Memcpy¸¦ ÇÒ°Í.. ¾Æ´Ï¸é ¾²·¹±â °ªÀ¸ µÊ...
CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,CHAR* szDest,CHAR* Divider)
{
CHAR* szBuffer;
int nSrcLen;
int nBuf_Count,nCount;
int nArrCount;

szBuffer = new CHAR[MAX_BUFFER_SIZE];
nSrcLen = strlen(szSource);

nBuf_Count = 0;
nCount = 0;

if (nSrcLen >= MAX_BUFFER_SIZE - 1 ) // ÃÖ´ë ±æÀ̺¸´Ù ±æ¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,sizeof(szDest));
delete[] szBuffer;
return NULL;
}

if (strlen(szSource)==0) // ¼Ò½º Text°¡ ¾øÀ¸¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,sizeof(szDest));
delete[] szBuffer;
return szDest;
}

nArrCount = strlen(Divider)/sizeof(char); // DividerÀÇ ±æÀ̸¦ ±¸ÇÑ´Ù.

while(true)
{
char Ch;

if( nCount <= nSrcLen )
{
Ch=szSource[nCount];
for(int i = 0; i<= nArrCount-1;i++)
{
if(Ch == Divider[i]) // Divider °ËÃâ
{
goto CATCH_DIV;
}
}
}
if(nCount > nSrcLen)
{
CATCH_DIV:
if(nBuf_Count >0)
{
if(nBuf_Count < MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = '\0'; // End String (sz)
strcpy(szDest,szBuffer);
strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
}
break;
}
else
{
if(nCount>nSrcLen)
{
ZeroMemory(szDest,sizeof(szDest));
strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
break;
}
}
}
else
{
if(nBuf_Count< MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = Ch;
nBuf_Count++;
}
}
nCount++;
}

delete[] szBuffer;
return m_InnerResult;
}


CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,CHAR* szDest,CHAR Divider)
{
CHAR* szBuffer;
int nSrcLen;
int nBuf_Count,nCount;

szBuffer = new CHAR[MAX_BUFFER_SIZE];
nSrcLen = strlen(szSource);

nBuf_Count = 0;
nCount = 0;

if (nSrcLen >= MAX_BUFFER_SIZE - 1 ) // ÃÖ´ë ±æÀ̺¸´Ù ±æ¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,sizeof(szDest));
delete[] szBuffer;
return NULL;
}

if (strlen(szSource)==0) // ¼Ò½º Text°¡ ¾øÀ¸¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,sizeof(szDest));
delete[] szBuffer;
return szDest;
}

while(true)
{
char Ch;

if( nCount <= nSrcLen )
{
Ch=szSource[nCount];
if(Ch == Divider) // Divider °ËÃâ
{
goto CATCH_DIV;
}
}
if(nCount > nSrcLen)
{
CATCH_DIV:
if(nBuf_Count >0)
{
if(nBuf_Count < MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = '\0'; // End String (sz)
strcpy(szDest,szBuffer);
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
if(nSrcLen-nCount>0)
strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
}
break;
}
else
{
if(nCount>nSrcLen)
{
ZeroMemory(szDest,sizeof(szDest));
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
if(nSrcLen-1>0) strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
break;
}
}
}
else
{
if(nBuf_Count< MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = Ch;
nBuf_Count++;
}
}
nCount++;
}
if(szBuffer!=NULL)
{
delete[] szBuffer;
szBuffer = NULL;
}

return m_InnerResult;
}

CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,INT nSrcLen,CHAR* szDest,INT nDestLen,CHAR Divider)
{
CHAR* szBuffer;
int nBuf_Count,nCount;

szBuffer = new CHAR[MAX_BUFFER_SIZE];

nBuf_Count = 0;
nCount = 0;

if (nSrcLen >= MAX_BUFFER_SIZE - 1 ) // ÃÖ´ë ±æÀ̺¸´Ù ±æ¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,nDestLen);
delete[] szBuffer;
return NULL;
}

if (strlen(szSource)==0) // ¼Ò½º Text°¡ ¾øÀ¸¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,nDestLen);
delete[] szBuffer;
return szDest;
}

while(true)
{
char Ch;

if( nCount <= nSrcLen )
{
Ch=szSource[nCount];
if(Ch == Divider) // Divider °ËÃâ
{
goto CATCH_DIV;
}
}
if(nCount > nSrcLen)
{
CATCH_DIV:
if(nBuf_Count >0)
{
if(nBuf_Count < MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = '\0'; // End String (sz)
memcpy(szDest,szBuffer,nBuf_Count);
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
if(nSrcLen-nCount>0)
strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
}
break;
}
else
{
if(nCount>nSrcLen)
{
ZeroMemory(szDest,nDestLen);
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
if(nSrcLen-1>0) strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
break;
}
}
}
else
{
if(nBuf_Count< MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = Ch;
nBuf_Count++;
}
}
nCount++;
}
if(szBuffer!=NULL)
{
delete[] szBuffer;
szBuffer = NULL;
}

return m_InnerResult;
}

CHAR* CNPCTxtAnalysis::ArrestString(CHAR* szSource,CHAR SearchAfter,CHAR AssertBefore,CHAR* AssertStr)
{
int Src_Len;
bool Right_Data,Fin;

ZeroMemory(AssertStr,strlen(AssertStr));
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);

if(strlen(szSource)==0)
{
ZeroMemory(AssertStr,sizeof(AssertStr));
return m_InnerResult;
}
int n;
Src_Len = strlen(szSource);
Right_Data = false;
if(Src_Len >=2)
{
if(szSource[0] == SearchAfter)
{
strncpy(szSource,szSource+1,Src_Len-1);
szSource[Src_Len-1]=NULL;
Src_Len = strlen(szSource);
Right_Data = true;
}
else
{
n= FindChr(szSource,SearchAfter);
if(n>=0)
{
strncpy(szSource,szSource+n,Src_Len - (n));
Src_Len = strlen(szSource);
Right_Data = true;
}
}

Fin = false;

if(Right_Data)
{
n = FindChr(szSource,AssertBefore);
if(n>=0)
{
strncpy(AssertStr,szSource,n);
strncpy(m_InnerResult,szSource+n,Src_Len - n);
}
else
{
strncat(m_InnerResult,&amt;SearchAfter,1);
strcat(m_InnerResult,szSource);
}
}
else
{
for(int i = 0; i< Src_Len;i++)
{
if(szSource[i] == SearchAfter)
{

strncpy(m_InnerResult,szSource+i,Src_Len-i+2);
break;
}
}
}
}
return m_InnerResult;
}


CHAR* CNPCTxtAnalysis::UpperCase(CHAR* szStr)
{
int Len;
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
Len = strlen(szStr);
for(int i = 0;i<Len;i++)
{
if(szStr[i]>'a' &amt;&amt; szStr[i]<'z')
{
m_InnerResult[i] = szStr[i]-32;
}
else
{
m_InnerResult[i] = szStr[i];
}
}
return m_InnerResult;
}

CHAR CNPCTxtAnalysis::UpperCase(CHAR chr)
{
char szResult;
szResult=0x00;

szResult = (chr>'a' &amt;&amt; chr<'z') ? chr-32:chr;

return szResult;
}

int CNPCTxtAnalysis::FindChr(CHAR* szstr,CHAR ch)
{
int Count = 0;
bool Conditions=true;
while(Conditions &amt;&amt; Count<((int)strlen(szstr)))
{
if(szstr[Count]==ch)
Conditions = false;
Count++;
}

if(!Conditions) return Count;
else return -1;
}

int CNPCTxtAnalysis::FindChr(CHAR* szStr,CHAR* ch)
{
int Count = 0;
int nLenObject;
bool Conditions=true;

nLenObject = strlen(ch);

while(Conditions &amt;&amt; Count <((int)strlen(szStr)))
{
if(szStr[Count]==ch[0])
{
int nChk=0;
for(int i = 0 ; (i <nLenObject)&amt;&amt;(Count+i<(int)strlen(szStr)); i++)
{
if(szStr[Count+i]==ch[i])
nChk++;
}
if(nChk == nLenObject)
Conditions = false;
// Text°¡ ¸ðµÎ ÀÏÄ¡ ÇÒ °æ¿ì¸¸ °ËÃâ
}
Count++;
}

if(!Conditions) return Count;
else return -1;
}

int CNPCTxtAnalysis::StrLength(CHAR* str)
{
int Counter = 0;
while(str[Counter++]!='\0');
return Counter;
}


void CNPCTxtAnalysis::AnalySisText(CDLList<CHAR*>* pxpTxt,INT nLineMax)
{
BOOL DrawCenter = FALSE;
CHAR* szTemp;
CHAR* CmdStr;
CHAR* CmdParamStr;
CHAR* szStr;

INT nPosX = 20;;
INT nLineCount = 0;
COLORREF cColor = RGB(1,1,1);

SIZE tSize;

if(m_bInited)
{

// Init Buffers
CmdParamStr = new CHAR[MAX_BUFFER_SIZE];
CmdStr = new CHAR[MAX_BUFFER_SIZE];
szStr = new CHAR[MAX_BUFFER_SIZE];

ZeroMemory(CmdStr,MAX_BUFFER_SIZE);
ZeroMemory(szStr,MAX_BUFFER_SIZE);

pxpTxt->MoveCurrentToTop();
while(true)
{
if(nLineMax<=nLineCount)
break;
strcpy(szStr,*pxpTxt->GetCurrentData()); // Line Divide

if(strlen(szStr)!=0)
{

while((FindChr(szStr,'<')>0)&amt;&amt;(FindChr(szStr,'>')>0) &amt;&amt; (strlen(szStr)!=0))
{
CHAR* Fdata;
Fdata = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(Fdata,MAX_BUFFER_SIZE);
// <>Tag ºÐ¸® Text Button »ý¼º
if((szStr[0])!='<')
{
szTemp = GetValidStr(szStr,Fdata,'<');
strcpy(szStr,"<");
strcat(szStr,szTemp);
} // endif

// <>¾È¿¡ ÀÖ´Â ³»¿ë CmdStr·Î
szTemp = ArrestString(szStr,'<','>',CmdStr);
strcpy(szStr,szTemp);
szTemp = NULL;

if(strlen(CmdStr)!=0)
{
switch(UpperCase(CmdStr[0]))
{
case '0': // <0> Àϰæ¿ì ±ÛÀÚ»ö BLACK
{
cColor = RGB(0,0,0);
}
break;
case '1': // <1> Àϰæ¿ì ±ÛÀÚ»ö RED
{
cColor = RGB(255,0,0);
}
break;
case '2': // <2> Àϰæ¿ì ±ÛÀÚ»ö GREEN
{
cColor = RGB(0,128,0);
}
break;
case '3': // <3> Àϰæ¿ì ±ÛÀÚ»ö Olive
{
cColor = RGB(128,128,0);
}
break;
case '4': // <4> Àϰæ¿ì ±ÛÀÚ»ö GRAY
{
cColor = RGB(128,128,128);
}
break;
case '5': // <5> Àϰæ¿ì ±ÛÀÚ»ö Maroon
{
cColor = RGB(128,0,0);
}
break;
case '6': // <6> Àϰæ¿ì ±ÛÀÚ»ö Teal
{
cColor = RGB(0,128,128);
}
break;
case '7': // <7> Àϰæ¿ì ±ÛÀÚ»ö Navy
{
cColor = RGB(0,0,128);
}
break;
case '8': // <8> Àϰæ¿ì ±ÛÀÚ»ö Silver
{
cColor = RGB(192,192,192);
}
break;
case '9': // <9> Àϰæ¿ì ±ÛÀÚ»ö Purple
{
cColor = RGB(128,0,128);
}
break;
case 'A': // <A> Àϰæ¿ì ±ÛÀÚ»ö Lime
{
cColor = RGB(0,255,0);
}
break;
case 'B': // <B> Àϰæ¿ì ±ÛÀÚ»ö Blue
{
cColor = RGB(0,0,255);
}
break;
case 'C': // <C> Àϰæ¿ì ±ÛÀÚ»ö White
{
cColor = RGB(255,255,255);
}
break;
case 'D': // <D> Àϰæ¿ì ±ÛÀÚ»ö Fuchsia
{
cColor = RGB(255,0,255);
}
break;
case 'E': // <E> Àϰæ¿ì ±ÛÀÚ»ö Aqua
{
cColor = RGB(0,255,255);
}
break;
case 'F': // <F> Àϰæ¿ì ±ÛÀÚ»ö Yellow
{
cColor = RGB(255,255,0);
}
break;
case 'X': // <Z> Àϰæ¿ì ±ÛÀÚ»ö Default
{
cColor = RGB(1,1,1);
}
break;
} // endswitch
szTemp = NULL;
szTemp = GetValidStr(CmdStr,CmdStr,'/');
ZeroMemory(CmdParamStr,MAX_BUFFER_SIZE);
if(szTemp[0]!=NULL)
strncpy(CmdParamStr,szTemp,strlen(szTemp)-1);
szTemp = NULL;

} // endif
else
{
// Á¾°á <> °¡ ÀÖÀ¸¸é Á¾·á
} // endifelse

if(strlen(Fdata)!=0) // '<' Àü¿¡ ÀÖ´Â Text¸¦ ÀÏ¹Ý Text¿¡ Ãß°¡
{ // ÀÏ¹Ý Text Ãß°¡
CMText* pxTmpTxt;
pxTmpTxt = new CMText;
pxTmpTxt->pText = new CHAR[strlen(Fdata)+1];
// Text ¼³Á¤
pxTmpTxt->bDrawCenter = DrawCenter;
pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // »öÀº Tag¿¡ ÀÇÇØ °áÁ¤ÇØ ÁÖ¾î¾ßÇÔ.
pxTmpTxt->nLine = nLineCount;
pxTmpTxt->nPosx = nPosX;
strcpy(pxTmpTxt->pText,Fdata);
m_pxpTxt->AddNode(pxTmpTxt);
tSize = m_pxGWND->GetStrLength(NULL,NULL,">s",Fdata);
nPosX=nPosX+tSize.cx;
delete[] Fdata;
Fdata = NULL;
cColor = RGB(1,1,1);
} // endif

if(strlen(CmdParamStr)!=0)//CmdStr)!=0)
{
RECT tRect;
tRect.top =0;
tRect.left = nPosX;

tSize = m_pxGWND->GetStrLength(NULL,NULL,">s",CmdStr);
tRect.right = tSize.cx;
tRect.bottom = tSize.cy;

// Text ¹öư »ý¼º
m_pxBtn->AddButton(CmdStr,tRect,nLineCount,CmdParamStr,(cColor!=RGB(1,1,1) ? cColor : DEFAULT_BTN_COLOR),DEFAULT_BTN_CLICK_COLOR);

nPosX=nPosX+tSize.cx;

} // Text Button // endif
if(Fdata!=NULL)
{
delete[] Fdata;
Fdata = NULL;
}
} // end while
// '>'µÞºÎºÐ ȤÀº '<','>' ¾ø´Â ±â³É TextÀÏ °æ¿ì
if(strlen(szStr)!=0)
{
do
{
// Line À» ³ª´©°í ±× °á°ú¸¦ Text List ¿¡ ³Ö´Â´Ù.
CHAR *szTemp1=NULL,*szTemp2=NULL;
szTemp1 = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(szTemp1,MAX_BUFFER_SIZE);

// Line Divider
szTemp2 = GetValidStr(szStr,szTemp1,LINE_DIVIDER);
strcpy(szStr,szTemp2);

// Text »ý¼º
CMText* pxTmpTxt;
pxTmpTxt = new CMText;
pxTmpTxt->pText = new CHAR[strlen(szTemp1)+1];

// Text ¼³Á¤
pxTmpTxt->bDrawCenter = DrawCenter;
pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // Àӽà Tag¿¡ ÀÇÇÏ¿© »öº¯È¯
pxTmpTxt->nLine = nLineCount;
pxTmpTxt->nPosx = nPosX;
strcpy(pxTmpTxt->pText,szTemp1);
m_pxpTxt->AddNode(pxTmpTxt);

tSize = m_pxGWND->GetStrLength(NULL,NULL,">s",szTemp1);
nPosX=nPosX+tSize.cx;

delete[] szTemp1;
}while(strlen(szStr)!=0);
// Draw Normal Text
} // endif
} // endif
// Line Feed
nLineCount ++;
nPosX = 20; //½ÃÀÛÀº 20 pixel ºÎÅÍ
pxpTxt->MoveNextNode();
} // end while
delete[] CmdParamStr;
delete[] CmdStr;
delete[] szStr;
m_bReady = TRUE;
} // endif
else
{
m_bReady = FALSE;
} // end ifelse
}


void CNPCTxtAnalysis::AnalySisText(CHAR* Msg)
{
BOOL DrawCenter = FALSE;
CHAR* szTemp;
CHAR* CmdStr;
CHAR* CmdParamStr;
CHAR* szStr;

INT nPosX =0;
INT nLineCount = 0;
COLORREF cColor = 0;

SIZE tSize;

if(m_bInited)
{

// Init Buffers
CmdParamStr = new CHAR[MAX_BUFFER_SIZE];
CmdStr = new CHAR[MAX_BUFFER_SIZE];
szStr = new CHAR[MAX_BUFFER_SIZE];


ZeroMemory(CmdParamStr,MAX_BUFFER_SIZE);
ZeroMemory(CmdStr,MAX_BUFFER_SIZE);
ZeroMemory(szStr,MAX_BUFFER_SIZE);


while(true)
{
if(strlen(Msg)==0) break;

szTemp = GetValidStr(Msg,szStr,LINE_DIVIDER); // Line Divider
strcpy(Msg,szTemp);

if(strlen(szStr)!=0)
{

while((FindChr(szStr,'<')>0)&amt;&amt;(FindChr(szStr,'>')>0) &amt;&amt; (strlen(szStr)!=0))
{
CHAR* Fdata;
Fdata = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(Fdata,MAX_BUFFER_SIZE);
// <>Tag ºÐ¸® Text Button »ý¼º
if((szStr[0])!='<')
{
szTemp = GetValidStr(szStr,Fdata,'<');
strcpy(szStr,"<");
strcat(szStr,szTemp);
}

// <>¾È¿¡ ÀÖ´Â ³»¿ë CmdStr·Î
szTemp = ArrestString(szStr,'<','>',CmdStr);
strcpy(szStr,szTemp);
szTemp = NULL;

if(strlen(CmdStr)!=0)
{
switch(UpperCase(CmdStr[0]))
{
case '0': // <0> Àϰæ¿ì ±ÛÀÚ»ö BLACK
{
cColor = RGB(0,0,0);
continue;
}
break;
case '1': // <1> Àϰæ¿ì ±ÛÀÚ»ö RED
{
cColor = RGB(255,0,0);
continue;
}
break;
case '2': // <2> Àϰæ¿ì ±ÛÀÚ»ö GREEN
{
cColor = RGB(0,128,0);
continue;
}
break;
case '3': // <3> Àϰæ¿ì ±ÛÀÚ»ö Olive
{
cColor = RGB(128,128,0);
continue;
}
break;
case '4': // <4> Àϰæ¿ì ±ÛÀÚ»ö GRAY
{
cColor = RGB(128,128,128);
continue;
}
break;
case '5': // <5> Àϰæ¿ì ±ÛÀÚ»ö Maroon
{
cColor = RGB(128,0,0);
continue;
}
break;
case '6': // <6> Àϰæ¿ì ±ÛÀÚ»ö Teal
{
cColor = RGB(0,128,128);
continue;
}
break;
case '7': // <7> Àϰæ¿ì ±ÛÀÚ»ö Navy
{
cColor = RGB(0,0,128);
continue;
}
break;
case '8': // <8> Àϰæ¿ì ±ÛÀÚ»ö Silver
{
cColor = RGB(192,192,192);
continue;
}
break;
case '9': // <9> Àϰæ¿ì ±ÛÀÚ»ö Purple
{
cColor = RGB(128,0,128);
continue;
}
break;
case 'A': // <A> Àϰæ¿ì ±ÛÀÚ»ö Lime
{
cColor = RGB(0,255,0);
continue;
}
break;
case 'B': // <B> Àϰæ¿ì ±ÛÀÚ»ö Blue
{
cColor = RGB(0,0,255);
continue;
}
break;
case 'C': // <C> Àϰæ¿ì ±ÛÀÚ»ö White
{
cColor = RGB(255,255,255);
continue;
}
break;
case 'D': // <D> Àϰæ¿ì ±ÛÀÚ»ö Fuchsia
{
cColor = RGB(255,0,255);
continue;
}
break;
case 'E': // <E> Àϰæ¿ì ±ÛÀÚ»ö Aqua
{
cColor = RGB(0,255,255);
continue;
}
break;
case 'F': // <F> Àϰæ¿ì ±ÛÀÚ»ö Yellow
{
cColor = RGB(255,255,0);
continue;
}
break;
case 'X': // <Z> Àϰæ¿ì ±ÛÀÚ»ö Default
{

cColor = RGB(1,1,1);
continue;
}
break;
}

/* szTemp = new CHAR[2];
strncpy(szTemp,CmdStr,2);
szTemp = UpperCase(szTemp);
if(strncmp(szTemp,"/C",2)==0) // </C> ÀÏ °æ¿ì °¡¿îµ¥ Âï±â ³¡
{
DrawCenter = FALSE;
delete[] szTemp;
szTemp = NULL;
continue;
}
delete[] szTemp;
*/ szTemp = NULL;
szTemp = GetValidStr(CmdStr,CmdStr,'/');
strcpy(CmdParamStr,szTemp);
szTemp = NULL;

}
else
{
// Á¾°á <> °¡ ÀÖÀ¸¸é Á¾·á
}

if(strlen(Fdata)!=0) // '<' Àü¿¡ ÀÖ´Â Text¸¦ ÀÏ¹Ý Text¿¡ Ãß°¡
{ // ÀÏ¹Ý Text Ãß°¡
CMText* pxTmpTxt;
pxTmpTxt = new CMText;
pxTmpTxt->pText = new CHAR[strlen(Fdata)+1];
// Text ¼³Á¤
pxTmpTxt->bDrawCenter = DrawCenter;
pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // »öÀº Tag¿¡ ÀÇÇØ °áÁ¤ÇØ ÁÖ¾î¾ßÇÔ.
pxTmpTxt->nLine = nLineCount;
pxTmpTxt->nPosx = nPosX;
strcpy(pxTmpTxt->pText,Fdata);

m_pxpTxt->AddNode(pxTmpTxt);
tSize = m_pxGWND->GetStrLength(NULL,NULL,">s",Fdata);
nPosX=nPosX+tSize.cx;
}

if(strlen(CmdStr)!=0)
{
RECT tRect;
tRect.top =0;
tRect.left = nPosX;

tSize = m_pxGWND->GetStrLength(NULL,NULL,">s",CmdStr);
tRect.right = tSize.cx;
tRect.bottom = tSize.cy;

// Text ¹öư »ý¼º
m_pxBtn->AddButton(CmdStr,tRect,nLineCount,CmdParamStr,(cColor!=RGB(1,1,1) ? cColor : DEFAULT_BTN_COLOR),DEFAULT_BTN_CLICK_COLOR);

nPosX=nPosX+tSize.cx;

} // Text Button
}
// '>'µÞºÎºÐ ȤÀº '<','>' ¾ø´Â ±â³É TextÀÏ °æ¿ì
if(strlen(szStr)!=0)
{
do
{
// Line À» ³ª´©°í ±× °á°ú¸¦ Text List ¿¡ ³Ö´Â´Ù.
CHAR *szTemp1=NULL,*szTemp2=NULL;
szTemp1 = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(szTemp1,MAX_BUFFER_SIZE);

// Line Divider
szTemp2 = GetValidStr(szStr,szTemp1,LINE_DIVIDER);
strcpy(szStr,szTemp2);

// Text »ý¼º
CMText* pxTmpTxt;
pxTmpTxt = new CMText;
pxTmpTxt->pText = new CHAR[strlen(szTemp1)+1];

// Text ¼³Á¤
pxTmpTxt->bDrawCenter = DrawCenter;
pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // Àӽà Tag¿¡ ÀÇÇÏ¿© »öº¯È¯
pxTmpTxt->nLine = nLineCount;
pxTmpTxt->nPosx = nPosX;
strcpy(pxTmpTxt->pText,szTemp1);
m_pxpTxt->AddNode(pxTmpTxt);

tSize = m_pxGWND->GetStrLength(NULL,NULL,">s",szTemp1);
nPosX=nPosX+tSize.cx;

delete[] szTemp1;

nPosX = 20; // ½ÃÀÛÀº 20 pixel ºÎÅÍ
nLineCount ++; // Line Feed
}while(strlen(szStr)!=0);
// Draw Normal Text
}
}
// Line Feed
nLineCount ++;
nPosX = 20; //½ÃÀÛÀº 20 pixel ºÎÅÍ
}
delete CmdParamStr;
delete CmdStr;
delete szStr;
m_bReady = TRUE;
}
else
{
m_bReady = FALSE;
}
}

BOOL CNPCTxtAnalysis::IsReadyToDisplay(VOID)
{
return m_bReady;
}

BOOL CNPCTxtAnalysis::IsInitialized(VOID)
{
return m_bInited;
}

// ¿ë±â
BOOL CNPCTxtAnalysis::StringDivide(INT nDivideWidth, INT&amt; nDividedLine, CHAR* szSrc,CDLList<CHAR*>* m_pxpStr)
{
CHAR szTmpCheck[MAX_PATH];
CHAR szResult[MAX_PATH];

nDividedLine = 1;

INT nStartLen = 0;
INT nEndLen = 0;
INT nResultLen = 0;
INT nWordCheck = 0;

if ( szSrc[0] != NULL )
{
ZeroMemory(szResult,MAX_PATH);

for ( INT nCnt = 0; nCnt < (INT)strlen(szSrc); nCnt++)
{
ZeroMemory(szTmpCheck, MAX_PATH);
nEndLen = nCnt+1;

// ÇöÀçºÎºÐ±îÁöÀÇ ¹®ÀÚ¿­À» Àд´Ù.
memcpy(&amt;szTmpCheck, &amt;szSrc[nStartLen], nEndLen-nStartLen);
SIZE sizeLen;
sizeLen = m_pxGWND->GetStrLength(NULL,NULL, szTmpCheck);

// ÇöÀç±îÁö Àоî¿Â ºÎºÐÀÌ Çã¿ë³ÐÀ̸¦ ³Ñ¾î¼¹À»¶§.
if ( sizeLen.cx > nDivideWidth )
{
// ÇöÀç 2¹ÙÀÌÆ® ¹®ÀÚ¶ó¸é.
if ( szSrc[nEndLen-1] < 0 )
{
// ÇöÀç ¾Õ¿¡¹®ÀÚ°¡ 2¹ÙÀÌÆ® ¹®ÀÚ°¡ ¾Æ´Ï¶ó¸é
if ( !(nWordCheck>2) )
{
nStartLen += strlen(szTmpCheck)-1;
nCnt--;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen = 0;
nDividedLine++;
}
else
{
nStartLen += strlen(szTmpCheck)-2;
nCnt -= 2;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen];
memcpy(pszNewLine,szResult,nResultLen-1);
pszNewLine[nResultLen-1]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen = 0;
nDividedLine++;
nWordCheck--;
}
}
// 1¹ÙÀÌÆ® ¹®ÀÚ.
// ÇöÀ纸´Ù ÇѹÙÀÌÆ®¾ÕºÎºÐ±îÁö¸¸ °í·ÁÇØÁÖ¸é µÈ´Ù.
else
{
nStartLen += strlen(szTmpCheck)-1;
nCnt--;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen=0;
nDividedLine++;
}
}
else if(szSrc[nEndLen-1]=='\n') // °­Á¦°³Çà \nÀ¸·ÎÇϸé Error ????
{
nStartLen += strlen(szTmpCheck)-1;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen=0;
nDividedLine++;
}
else
{
if ( szSrc[nEndLen-1] < 0 )
nWordCheck++;

szResult[nResultLen] = szSrc[nEndLen-1];
nResultLen++;
}
}
if(nResultLen!=0)
{
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nDividedLine++;
nResultLen=0;
}
return TRUE;
}
return FALSE;
}