1/*
2 * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef TERMINAL_LINE_H
6#define TERMINAL_LINE_H
7
8#include <SupportDefs.h>
9
10#include "TermConst.h"
11
12#include "UTF8Char.h"
13
14
15struct TerminalCell {
16	UTF8Char		character;
17	uint32			attributes;
18};
19
20
21struct TerminalLine {
22	uint16			length;
23	bool			softBreak;	// soft line break
24	uint32			attributes;
25	TerminalCell	cells[1];
26
27	inline void Clear()
28	{
29		length = 0;
30		attributes = 0;
31		softBreak = false;
32	}
33};
34
35
36struct AttributesRun {
37	uint32	attributes;
38	uint16	offset;			// character offset
39	uint16	length;			// length of the run in characters
40};
41
42
43struct HistoryLine {
44	AttributesRun*	attributesRuns;
45	uint16			attributesRunCount;	// number of attribute runs
46	uint16			byteLength : 15;	// number of bytes in the line
47	bool			softBreak : 1;		// soft line break;
48	uint32			attributes;
49
50	AttributesRun* AttributesRuns() const
51	{
52		return attributesRuns;
53	}
54
55	char* Chars() const
56	{
57		return (char*)(attributesRuns + attributesRunCount);
58	}
59
60	int32 BufferSize() const
61	{
62		return attributesRunCount * sizeof(AttributesRun) + byteLength;
63	}
64};
65
66
67#endif	// TERMINAL_LINE_H
68