You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
4.7 KiB
174 lines
4.7 KiB
// LCDManDoc.cpp : implementation of the CLCDManDoc class
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "LCDMan.h"
|
|
|
|
#include "LCDManDoc.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLCDManDoc
|
|
|
|
IMPLEMENT_DYNCREATE(CLCDManDoc, CDocument)
|
|
|
|
BEGIN_MESSAGE_MAP(CLCDManDoc, CDocument)
|
|
//{{AFX_MSG_MAP(CLCDManDoc)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
// DO NOT EDIT what you see in these blocks of generated code!
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLCDManDoc construction/destruction
|
|
|
|
CLCDManDoc::CLCDManDoc() : m_List(10), m_cstrState(_T("")), m_iDocTimeIntrval(0),
|
|
m_ptFileBuffer(NULL), m_ptBufferStart(NULL), m_ptBufferEnd(NULL)
|
|
{
|
|
// TODO: add one-time construction code here
|
|
|
|
}
|
|
|
|
CLCDManDoc::~CLCDManDoc()
|
|
{
|
|
if (m_ptBufferStart)
|
|
free(m_ptBufferStart);
|
|
}
|
|
|
|
BOOL CLCDManDoc::OnNewDocument()
|
|
{
|
|
if (!CDocument::OnNewDocument())
|
|
return FALSE;
|
|
|
|
InitDocument(NULL);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLCDManDoc serialization
|
|
|
|
void CLCDManDoc::Serialize(CArchive& ar)
|
|
{
|
|
if (ar.IsStoring())
|
|
{
|
|
// TODO: add storing code here
|
|
}
|
|
else
|
|
{
|
|
// TODO: add loading code here
|
|
}
|
|
m_List.Serialize(ar);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLCDManDoc diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CLCDManDoc::AssertValid() const
|
|
{
|
|
CDocument::AssertValid();
|
|
}
|
|
|
|
void CLCDManDoc::Dump(CDumpContext& dc) const
|
|
{
|
|
CDocument::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLCDManDoc commands
|
|
|
|
BOOL CLCDManDoc::OnOpenDocument(LPCTSTR lpszPathName)
|
|
{
|
|
// if (!CDocument::OnOpenDocument(lpszPathName)) Do not use the archive
|
|
// return FALSE;
|
|
if (lpszPathName)
|
|
{
|
|
CFile CFSource(lpszPathName, CFile::modeRead);
|
|
if (CFSource)
|
|
InitDocument(&CFSource);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CLCDManDoc::InitDocument(CFile *pCFSource)
|
|
{
|
|
if (pCFSource)
|
|
{
|
|
m_List.RemoveAll();
|
|
// Red the file and build m_List
|
|
DWORD dwLength = pCFSource->GetLength();
|
|
m_ptFileBuffer = (LPTSTR)malloc(dwLength);
|
|
m_ptBufferStart = m_ptFileBuffer;
|
|
if (m_ptFileBuffer)
|
|
{
|
|
pCFSource->Read(m_ptFileBuffer, dwLength);
|
|
m_ptFileBuffer++; // Notepad places 0xFF 0xFE codes at the beginig of the file
|
|
m_ptBufferEnd = m_ptFileBuffer + dwLength;
|
|
}
|
|
}
|
|
else if (!m_ptFileBuffer)
|
|
return; // No file, no document, no nothing
|
|
|
|
while (m_ptFileBuffer < m_ptBufferEnd)
|
|
{
|
|
LPTSTR ptEndString = _tcschr(m_ptFileBuffer, _T('\r'));
|
|
if (!ptEndString)
|
|
break;
|
|
*ptEndString = _T('\0');
|
|
if (_tcsstr(m_ptFileBuffer, _T("TIME:")))
|
|
{
|
|
// Set the timer for the message set
|
|
m_ptFileBuffer += _tcsclen(_T("TIME:"));
|
|
_stscanf(m_ptFileBuffer, _T("%d"), &m_iDocTimeIntrval);
|
|
POSITION posView = GetFirstViewPosition();
|
|
CView *pView = GetNextView(posView);
|
|
pView->SetTimer(2, m_iDocTimeIntrval * 1000, NULL);
|
|
}
|
|
else if (_tcsstr(m_ptFileBuffer, _T("STATE:")))
|
|
{
|
|
// Set the state
|
|
m_ptFileBuffer += _tcsclen(_T("STATE:"));
|
|
m_cstrState = m_ptFileBuffer;
|
|
}
|
|
else if (_tcsstr(m_ptFileBuffer, _T("ADDMSG:")))
|
|
{
|
|
// Add message to the list
|
|
m_ptFileBuffer += _tcsclen(_T("ADDMSG:"));
|
|
m_List.AddTail(m_ptFileBuffer);
|
|
}
|
|
else if (_tcsstr(m_ptFileBuffer, _T("REMOVEMSG:")))
|
|
{
|
|
// Remove message from the list
|
|
m_ptFileBuffer += _tcsclen(_T("REMOVEMSG:"));
|
|
CString cstr(TEXT(""));
|
|
CString cstrMsg(m_ptFileBuffer);
|
|
for (POSITION pos = m_List.GetHeadPosition(); pos != NULL; m_List.GetNext(pos) )
|
|
{
|
|
cstr = m_List.GetAt(pos);
|
|
if (cstr == cstrMsg)
|
|
{
|
|
m_List.RemoveAt(pos);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (_tcsstr(m_ptFileBuffer, _T("END:")))
|
|
{
|
|
// End of the document
|
|
m_ptFileBuffer = ptEndString + 2;
|
|
break;
|
|
}
|
|
m_ptFileBuffer = ptEndString + 2;
|
|
}
|
|
}
|
|
|
|
|