GCC Code Coverage Report


Directory: src/gate/
File: src/gate/system/cxx_terminals.cpp
Date: 2025-09-14 13:10:38
Exec Total Coverage
Lines: 33 60 55.0%
Functions: 8 14 57.1%
Branches: 8 30 26.7%

Line Branch Exec Source
1 /* GATE PROJECT LICENSE:
2 +----------------------------------------------------------------------------+
3 | Copyright(c) 2018-2025, Stefan Meislinger |
4 | All rights reserved. |
5 | |
6 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met:|
8 | |
9 | 1. Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. |
11 | 2. Redistributions in binary form must reproduce the above copyright |
12 | notice, this list of conditions and the following disclaimer in the |
13 | documentation and/or other materials provided with the distribution. |
14 | |
15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"|
16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
18 | ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
19 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
20 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
21 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
23 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
25 | THE POSSIBILITY OF SUCH DAMAGE. |
26 +----------------------------------------------------------------------------+
27 */
28
29 #include "gate/system/terminals.hpp"
30 #include "gate/exceptions.hpp"
31
32 namespace gate
33 {
34 namespace sys
35 {
36
37 2 Terminal::Terminal(gate_terminal_t* ptr_terminal)
38 : Stream((gate_stream_t*)ptr_terminal),
39 2 terminal(ptr_terminal)
40 {
41 2 }
42 Terminal::Terminal(Terminal const& src)
43 : Stream(src),
44 terminal(src.terminal)
45 {
46 }
47 Terminal& Terminal::operator=(Terminal const& src)
48 {
49 if (this != &src)
50 {
51 Stream::operator=(src);
52 this->terminal = src.terminal;
53 }
54 return *this;
55 }
56 2 Terminal::~Terminal()
57 {
58 2 }
59
60 void Terminal::getSize(uint16_t& width, uint16_t& height)
61 {
62 result_t result = gate_terminal_get_size(this->terminal, &width, &height);
63 GATEXX_CHECK_EXCEPTION(result);
64 }
65
66 void Terminal::getCursorPos(uint16_t& x, uint16_t& y)
67 {
68 result_t result = gate_terminal_get_cursor_pos(this->terminal, &x, &y);
69 GATEXX_CHECK_EXCEPTION(result);
70 }
71 void Terminal::setCursorPos(uint16_t x, uint16_t y)
72 {
73 result_t result = gate_terminal_set_cursor_pos(this->terminal, x, y);
74 GATEXX_CHECK_EXCEPTION(result);
75 }
76
77 2 void Terminal::setTextColor(ColorEnum color)
78 {
79 2 gate_uint8_t color_value = (gate_uint8_t)color;
80 2 result_t result = gate_terminal_set_text_color(this->terminal, color_value);
81
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 GATEXX_CHECK_EXCEPTION(result);
82 2 }
83 2 Terminal::ColorEnum Terminal::getTextColor()
84 {
85 2 gate_uint8_t color_value = 0;
86
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 result_t result = gate_terminal_get_text_color(this->terminal, &color_value);
87
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
2 GATEXX_CHECK_EXCEPTION(result);
88 2 return (Terminal::ColorEnum)color_value;
89 }
90
91 2 void Terminal::setBackColor(ColorEnum color)
92 {
93 2 gate_uint8_t color_value = (gate_uint8_t)color;
94 2 result_t result = gate_terminal_set_back_color(this->terminal, color_value);
95
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 GATEXX_CHECK_EXCEPTION(result);
96 2 }
97 2 Terminal::ColorEnum Terminal::getBackColor()
98 {
99 2 gate_uint8_t color_value = 0;
100
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 result_t result = gate_terminal_get_back_color(this->terminal, &color_value);
101
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
2 GATEXX_CHECK_EXCEPTION(result);
102 2 return (Terminal::ColorEnum)color_value;
103 }
104
105 1 Terminal Terminal::getConsole()
106 {
107 1 gate_terminal_t* term = gate_terminal_console_get_current();
108
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 if (term == NULL)
109 {
110 GATEXX_RAISE_EXCEPTION(results::NotAvailable, "Cannot access current console as terminal", 0);
111 }
112 1 return Terminal(term);
113 }
114
115 1 Terminal Terminal::openConsole(enumint_t flags)
116 {
117 1 gate_terminal_t* term = gate_terminal_console_open(flags);
118
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 if (term == NULL)
119 {
120 GATEXX_RAISE_EXCEPTION(results::Failed, "Cannot open a new console terminal", 0);
121 }
122 1 return Terminal(term);
123 }
124
125 Terminal Terminal::createVirtual(uint16_t cols, uint16_t rows, enumint_t flags,
126 gate_terminal_read_char_t read_callback, void* read_param,
127 gate_terminal_write_char_t write_callback, void* write_param)
128 {
129 gate_terminal_t* term = gate_terminal_virtual_create(cols, rows, flags,
130 read_callback, read_param, write_callback, write_param);
131
132 if (term == NULL)
133 {
134 GATEXX_RAISE_EXCEPTION(results::Failed, "Cannot open a new console terminal", 0);
135 }
136 return Terminal(term);
137 }
138
139 } // end of namespace sys
140 } // end of namespace gate
141