|
/* Written By and � 2004 Amleth Ojalen (amleth@amleth.com)
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#define _MAX_SECTIONS 0x20
class CABLogBuffer
{
public:
CABLogBuffer(void);
~CABLogBuffer(void);
long GetDataSize() { return m_lDataLength;};
typedef struct ABLogSect
{
int m_iFadeStep; // the current fade step
long m_lSectionOffset; // the starting offset in m_pDataBuffer
long m_lSectionLength; // the length of the section in bytes
} S_ABLogSect;
typedef struct ABLogLine
{
long m_lLineLength; // the Length of the line in bytes
BYTE * m_pLinePointer; // a pointer to the first character
long m_lLineOffset; // the starting offset from m_pDataBuffer;
DWORD m_dFlags; // Flags for the line.
long m_lLineIndex; // the index of the line in the array;
} S_ABLogLine;
bool AddData(BYTE * pData, long lData);
long GetLineCount() { return m_lLineCount;};
S_ABLogLine * GetLine(long lLine) { return &m_pLineBuffer[lLine];};
bool SetSelection(long lSelectionStart, long lSelectionLength);
bool GetSelection(long *lSelectionStart, long *lSelectionLength);
bool AddLineFlag(int iLine, DWORD dFlag);
bool HitTest(long lLine, long lOffset, bool * pbSelection, int * iFadeStep);
bool FadeSections();
long FindText(CString strFind, DWORD dFlags, long *pChar);
long GetMaxLineSize() {return m_lLineBiggest;};
ABLogLine * GetLineFromOffset(long lOffset);
bool RemoveLineFlags(DWORD dFlag);
long GetLineFlagCount(DWORD dFlag);
bool SetSectionFadeStep(long lSection, int iStep);
bool LineToggleFlag(long lLine, DWORD dFlag);
DWORD m_dNewColor;
private:
// Data Buffer
long m_lDataLength; // The Amount of data stored in Buffer
long m_lDataSize; // Buffer Allocated Size
BYTE * m_pDataBuffer; // Data Buffer
// Line Buffer
long m_lLineLength; // The Amount of data stored in the buffer
long m_lLineSize; // Line Allocated Size
S_ABLogLine* m_pLineBuffer; // Line Buffer
long m_lLineCount; // The number of Lines in the Buffer
long m_lLineBiggest; // The Biggest line
long m_lSelectionStart; // the starting offset in m_pDataBuffer;
long m_lSelectionLength; // the length of the selection in bytes
S_ABLogSect * m_LineSections[_MAX_SECTIONS];
long m_lSectionCount; // the number of sections;
BYTE * m_LineDelim;
int m_iLineDelimLength;
bool CheckByte(BYTE pByte);
bool FindDelim(BYTE * pData, long lLength);
BYTE * DelimSearch(BYTE * pData, long lLength);
bool CheckDataBufferSize(long lMinSize); // Will Grow m_pDatabuffer if required
bool CheckLineBufferSize(long lMinSize); // Will Grow m_pLineBuffer if required
bool ProcessBuffer(BYTE * pData, long lStartOffset, long lEndOffset); // will create lines baised on pData
S_ABLogLine * AddLine(BYTE * pLineStart, long lLineEnd);
bool AddSection(long lStart, long lLength);
};
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here
Started programming many many years ago, now a full time C++ developer writing medical software. I have also been known to dabble in electronics. Currently looking to go back to university to study electronic engineering.