Files
envi-code/SourceCode/Code2026/tg_shs/inc/TArch/PatEdit.h
T
2026-09-28 15:28:50 +08:00

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