NOVA
Stripped down NOVA kernel for the OSY course
Loading...
Searching...
No Matches
Console Class Referenceabstract

Public Member Functions

void vprintf (char const *format, va_list args)

Protected Attributes

bool initialized

Constructor & Destructor Documentation

◆ Console()

Console::Console ( )
inline
38: initialized (false) {}

Member Function Documentation

◆ vprintf()

void Console::vprintf ( char const * format,
va_list args )
90{
91 if (EXPECT_FALSE (!initialized))
92 return;
93
94 while (*format) {
95
96 if (EXPECT_TRUE (*format != '%')) {
97 putc (*format++);
98 continue;
99 }
100
101 unsigned flags = 0, width = 0, precs = 0, len = 0, mode = MODE_FLAGS;
102
103 for (uint64 u;;) {
104
105 switch (*++format) {
106
107 case '0'...'9':
108 switch (mode) {
109 case MODE_FLAGS:
110 if (*format == '0') {
111 flags |= FLAG_ZERO_PAD;
112 break;
113 }
114 mode = MODE_WIDTH;
115 FALLTHROUGH;
116 case MODE_WIDTH: width = width * 10 + *format - '0'; break;
117 case MODE_PRECS: precs = precs * 10 + *format - '0'; break;
118 }
119 continue;
120
121 case '.':
122 mode = MODE_PRECS;
123 continue;
124
125 case '#':
126 if (mode == MODE_FLAGS)
127 flags |= FLAG_ALT_FORM;
128 continue;
129
130 case 'l':
131 len++;
132 continue;
133
134 case 'c':
135 putc (va_arg (args, int));
136 break;
137
138 case 's':
139 print_str (va_arg (args, char *), width, precs ? precs : ~0u);
140 break;
141
142 case 'd':
143 switch (len) {
144 case 0: u = va_arg (args, int); break;
145 case 1: u = va_arg (args, long); break;
146 default: u = va_arg (args, long long); break;
147 }
148 print_number (u, 10, width, flags | FLAG_SIGNED);
149 break;
150
151 case 'u':
152 case 'x':
153 switch (len) {
154 case 0: u = va_arg (args, unsigned int); break;
155 case 1: u = va_arg (args, unsigned long); break;
156 default: u = va_arg (args, unsigned long long); break;
157 }
158 print_number (u, *format == 'x' ? 16 : 10, width, flags);
159 break;
160
161 case 'p':
162 print_number (reinterpret_cast<mword>(va_arg (args, void *)), 16, width, FLAG_ALT_FORM);
163 break;
164
165 case 0:
166 format--;
167 FALLTHROUGH;
168
169 default:
170 putc (*format);
171 break;
172 }
173
174 format++;
175
176 break;
177 }
178 }
179}

The documentation for this class was generated from the following files: