86 lines
2.6 KiB
C++
86 lines
2.6 KiB
C++
#ifndef _PATEDIT_H
|
|
#define _PATEDIT_H
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//patch描述行内容(起始行),或注释行内容
|
|
class TARCH_EXP TPatHead
|
|
{
|
|
public:
|
|
CString name;
|
|
public:
|
|
void operator >>(CStdioFile&ar)const{ar.WriteString(name);ar.WriteString(_T("\n"));}//ok
|
|
void operator <<(const CString&s){name=s;}//ok
|
|
|
|
bool IsEmpty()const{return name.GetLength()==0;}//ok
|
|
CString FirstName()const//ok,patch的正式名称
|
|
{
|
|
if(name.GetAt(0)!=_T('*'))
|
|
return name;
|
|
|
|
long i=name.Find(_T(','));
|
|
if(i==-1)
|
|
return name.Right(name.GetLength()-1);//除去*
|
|
else
|
|
return name.Mid(1,i-1);//*和,之间
|
|
}
|
|
bool operator >(const TPatHead&n)const{return name>n.name;}//ok
|
|
bool operator <(const TPatHead&n)const{return name<n.name;}//ok
|
|
};
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//patch数据行
|
|
class TARCH_EXP TPatData
|
|
{
|
|
public:
|
|
DualList<CString> data;
|
|
void CheckLength();//如果行长度超过80个字符,输出时将在行左边加上(;;?)标志,将提示用户手动调整行长
|
|
public:
|
|
TPatData(){}//ok
|
|
bool operator >(const TPatData&)const{return false;}//ok
|
|
bool operator <(const TPatData&)const{return false;}//ok
|
|
|
|
void Scale(double s);
|
|
void operator>>(CStdioFile&ar);
|
|
void operator<<(const CString&s);
|
|
void AppendListCtrl(CListCtrl&list);
|
|
};
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//patch定义段,或一个注释行(此时TPatHead中放置注释内容)
|
|
//注释不能夹杂于一个patch定义段之中,只能在patch定义段外单独定义!!!
|
|
class TARCH_EXP TPat
|
|
{
|
|
public:
|
|
TPatHead name;
|
|
PDList<TPatData> lines;
|
|
public:
|
|
TPat(){}//ok
|
|
TPat(const CString&s){name<<s;}//ok
|
|
bool operator >(const TPat&pat)const{return name>pat.name;}//ok
|
|
bool operator <(const TPat&pat)const{return name<pat.name;}//ok
|
|
|
|
CString Name()const{return name.name;}//ok
|
|
bool IsEmpty()const{return lines.IsEmpty();}//ok
|
|
bool IsPat()const{return name.name.Find(_T(';'))==-1;}//ok
|
|
bool operator==(const TPat&pat)const{return name.FirstName()==pat.name.FirstName();}//ok
|
|
|
|
void Scale(double s);
|
|
|
|
bool operator<<(const CString&s);
|
|
void operator>>(CStdioFile &ar);
|
|
void Update(CListCtrl& list);
|
|
};
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//pat文件内容
|
|
class TARCH_EXP TPats
|
|
{
|
|
protected:
|
|
SPTable<TPat> pats;
|
|
public:
|
|
long Length()const{return pats.GetLength();}//ok
|
|
TPat& operator[](long i){return pats(i);}//ok
|
|
|
|
long Find(const CString &name){return pats.FindData(TPat(name));}//ok
|
|
|
|
void Reset(){pats.Clear();}//ok
|
|
void operator<<(CStdioFile&ar);
|
|
void operator>>(CStdioFile&ar);
|
|
};
|
|
#endif |