📄 msdspprj.cpp
字号:
#include "stdafx.h"
#include "editcmd.h"
#include "resource.h"
#include "msdspprj.h"
#include "filesup.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#pragma warning ( disable : 4711 )
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC (CMsDspProject, CProject)
CMsDspProject::CMsDspProject ()
{
}
bool freadln (FILE *fp, LPTSTR pszLine, size_t nSize)
{
while (pszLine[_tcslen (pszLine) - 1] != _T ('\n'))
{
_fgetts (pszLine, nSize, fp);
if (feof (fp))
{
fclose (fp);
return false;
}
}
return true;
}
#define BEGIN_PROJECT _T ("# Begin Project")
#define BEGIN_PROJECT_LEN 15
#define BEGIN_GROUP _T ("# Begin Group")
#define BEGIN_GROUP_LEN 13
#define BEGIN_FILE _T ("# Begin Source File")
#define BEGIN_FILE_LEN 19
#define END_PROJECT _T ("# End Project")
#define END_PROJECT_LEN 13
#define END_GROUP _T ("# End Group")
#define END_GROUP_LEN 11
#define END_FILE _T ("# End Source File")
#define END_FILE_LEN 17
#define SOURCE _T ("SOURCE=")
#define SOURCE_LEN 7
bool CMsDspProject::OpenDsp (CProject *pProject, CProjectItem *pCurrent, LPCTSTR pszPath, LPCTSTR pszMidPath)
{
CWaitCursor wait;
if (!FileExist (pszPath))
return false;
FILE *fp = _tfopen (pszPath, _T ("rt"));
if (!fp)
return false;
TCHAR szLine[256], *pszLine;
int nLine;
bool bEoln;
for (;;)
{
_fgetts (szLine, sizeof (szLine), fp);
nLine = _tcslen (szLine);
bEoln = szLine[nLine - 1] == _T ('\n');
if (bEoln)
szLine[nLine-- - 1] = _T ('\0');
if (feof (fp) || !_tcsnicmp (szLine, END_PROJECT, END_PROJECT_LEN))
{
fclose (fp);
return false;
}
if (!_tcsnicmp (szLine, BEGIN_PROJECT, BEGIN_PROJECT_LEN))
break;
if (!bEoln && !freadln (fp, szLine, sizeof (szLine)) || feof (fp))
return false;
}
CProjectItemList lstTree;
CProjectItem *pNew;
lstTree.AddTail (pCurrent);
for (;;)
{
_fgetts (szLine, sizeof (szLine), fp);
nLine = _tcslen (szLine);
bEoln = szLine[nLine - 1] == _T ('\n');
if (bEoln)
szLine[nLine-- - 1] = _T ('\0');
if (feof (fp) || !_tcsnicmp (szLine, END_PROJECT, END_PROJECT_LEN))
break;
if (!_tcsnicmp (szLine, END_GROUP, END_GROUP_LEN))
{
if (!lstTree.IsEmpty ())
lstTree.RemoveTail ();
pCurrent = lstTree.IsEmpty () ? NULL : lstTree.GetTail ();
}
else if (!_tcsnicmp (szLine, BEGIN_GROUP, BEGIN_GROUP_LEN))
{
pNew = new CProjectItem;
szLine[nLine - 1] = _T ('\0');
pNew->sPath = szLine + BEGIN_GROUP_LEN + 2;
pNew->sMidPath = pszMidPath;
pNew->dwType = pCurrent ? PI_GROUP : PI_GROUP|PI_ROOT;
if (pCurrent)
pCurrent->lstItems.AddTail (pNew);
pProject->lstItems.AddTail (pNew);
lstTree.AddTail (pNew);
pCurrent = pNew;
}
else if (!_tcsnicmp (szLine, BEGIN_FILE, BEGIN_FILE_LEN))
{
if (!bEoln && !freadln (fp, szLine, sizeof (szLine)) || feof (fp))
break;
bool bEoln2;
for (;;)
{
_fgetts (szLine, sizeof (szLine), fp);
nLine = _tcslen (szLine);
bEoln2 = szLine[nLine - 1] == _T ('\n');
if (bEoln2)
szLine[nLine-- - 1] = _T ('\0');
if (feof (fp) || !_tcsnicmp (szLine, END_PROJECT, END_PROJECT_LEN) || !_tcsnicmp (szLine, END_FILE, END_FILE_LEN))
break;
if (!_tcsnicmp (szLine, END_GROUP, END_GROUP_LEN))
{
if (!lstTree.IsEmpty ())
lstTree.RemoveTail ();
pCurrent = lstTree.IsEmpty () ? NULL : lstTree.GetTail ();
break;
}
if (!_tcsnicmp (szLine, SOURCE, SOURCE_LEN))
{
pNew = new CProjectItem;
pszLine = szLine + SOURCE_LEN;
pszLine = _tcsncmp (pszLine, _T (".\\"), 2) ? pszLine : pszLine + 2;
pNew->sPath = pszLine;
pNew->sMidPath = pszMidPath;
pNew->dwType = pCurrent ? PI_FILE : PI_FILE|PI_ROOT;
if (pCurrent)
pCurrent->lstItems.AddTail (pNew);
pProject->lstItems.AddTail (pNew);
}
if (!bEoln2 && !freadln (fp, szLine, sizeof (szLine)) || feof (fp))
break;
}
}
if (!bEoln && !freadln (fp, szLine, sizeof (szLine)) || feof (fp))
break;
}
fclose (fp);
return true;
}
bool CMsDspProject::Open (LPCTSTR pszPath)
{
if (OpenDsp (this, NULL, pszPath, _T ("")))
{
sPath = pszPath;
return true;
}
return false;
}
bool CMsDspProject::Save (LPCTSTR pszPath)
{
AfxMessageBox (_T ("Not implemented yet."));
return false;
}
/////////////////////////////////////////////////////////////////////////////
#pragma warning ( default : 4711 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -