|
@@ -32,6 +32,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
32
|
32
|
#include <ipxe/console.h>
|
33
|
33
|
#include <ipxe/image.h>
|
34
|
34
|
#include <ipxe/pixbuf.h>
|
|
35
|
+#include <ipxe/ansicol.h>
|
35
|
36
|
#include <usr/imgmgmt.h>
|
36
|
37
|
|
37
|
38
|
/** "console" options */
|
|
@@ -116,10 +117,134 @@ static int console_exec ( int argc, char **argv ) {
|
116
|
117
|
return rc;
|
117
|
118
|
}
|
118
|
119
|
|
|
120
|
+/** "colour" options */
|
|
121
|
+struct colour_options {
|
|
122
|
+ /** Basic colour */
|
|
123
|
+ unsigned int basic;
|
|
124
|
+ /** 24-bit RGB value */
|
|
125
|
+ unsigned int rgb;
|
|
126
|
+};
|
|
127
|
+
|
|
128
|
+/** "colour" option list */
|
|
129
|
+static struct option_descriptor colour_opts[] = {
|
|
130
|
+ OPTION_DESC ( "basic", 'b', required_argument,
|
|
131
|
+ struct colour_options, basic, parse_integer ),
|
|
132
|
+ OPTION_DESC ( "rgb", 'r', required_argument,
|
|
133
|
+ struct colour_options, rgb, parse_integer ),
|
|
134
|
+};
|
|
135
|
+
|
|
136
|
+/** "colour" command descriptor */
|
|
137
|
+static struct command_descriptor colour_cmd =
|
|
138
|
+ COMMAND_DESC ( struct colour_options, colour_opts, 1, 1, "<colour>" );
|
|
139
|
+
|
|
140
|
+/**
|
|
141
|
+ * "colour" command
|
|
142
|
+ *
|
|
143
|
+ * @v argc Argument count
|
|
144
|
+ * @v argv Argument list
|
|
145
|
+ * @ret rc Return status code
|
|
146
|
+ */
|
|
147
|
+static int colour_exec ( int argc, char **argv ) {
|
|
148
|
+ struct colour_options opts;
|
|
149
|
+ unsigned int colour;
|
|
150
|
+ int rc;
|
|
151
|
+
|
|
152
|
+ /* Initialise options */
|
|
153
|
+ memset ( &opts, 0, sizeof ( opts ) );
|
|
154
|
+ opts.basic = COLOUR_DEFAULT;
|
|
155
|
+ opts.rgb = ANSICOL_NO_RGB;
|
|
156
|
+
|
|
157
|
+ /* Parse options */
|
|
158
|
+ if ( ( rc = reparse_options ( argc, argv, &colour_cmd, &opts ) ) != 0 )
|
|
159
|
+ return rc;
|
|
160
|
+
|
|
161
|
+ /* Parse colour index */
|
|
162
|
+ if ( ( rc = parse_integer ( argv[optind], &colour ) ) != 0 )
|
|
163
|
+ return rc;
|
|
164
|
+
|
|
165
|
+ /* Define colour */
|
|
166
|
+ if ( ( rc = ansicol_define ( colour, opts.basic, opts.rgb ) ) != 0 ) {
|
|
167
|
+ printf ( "Could not define colour: %s\n", strerror ( rc ) );
|
|
168
|
+ return rc;
|
|
169
|
+ }
|
|
170
|
+
|
|
171
|
+ /* Reapply default colour pair, in case definition has changed */
|
|
172
|
+ ansicol_set_pair ( CPAIR_DEFAULT );
|
|
173
|
+
|
|
174
|
+ return 0;
|
|
175
|
+}
|
|
176
|
+
|
|
177
|
+/** "cpair" options */
|
|
178
|
+struct cpair_options {
|
|
179
|
+ /** Foreground colour */
|
|
180
|
+ unsigned int foreground;
|
|
181
|
+ /** Background colour */
|
|
182
|
+ unsigned int background;
|
|
183
|
+};
|
|
184
|
+
|
|
185
|
+/** "cpair" option list */
|
|
186
|
+static struct option_descriptor cpair_opts[] = {
|
|
187
|
+ OPTION_DESC ( "foreground", 'f', required_argument,
|
|
188
|
+ struct cpair_options, foreground, parse_integer ),
|
|
189
|
+ OPTION_DESC ( "background", 'b', required_argument,
|
|
190
|
+ struct cpair_options, background, parse_integer ),
|
|
191
|
+};
|
|
192
|
+
|
|
193
|
+/** "cpair" command descriptor */
|
|
194
|
+static struct command_descriptor cpair_cmd =
|
|
195
|
+ COMMAND_DESC ( struct cpair_options, cpair_opts, 1, 1, "<cpair>" );
|
|
196
|
+
|
|
197
|
+/**
|
|
198
|
+ * "cpair" command
|
|
199
|
+ *
|
|
200
|
+ * @v argc Argument count
|
|
201
|
+ * @v argv Argument list
|
|
202
|
+ * @ret rc Return status code
|
|
203
|
+ */
|
|
204
|
+static int cpair_exec ( int argc, char **argv ) {
|
|
205
|
+ struct cpair_options opts;
|
|
206
|
+ unsigned int cpair;
|
|
207
|
+ int rc;
|
|
208
|
+
|
|
209
|
+ /* Initialise options */
|
|
210
|
+ memset ( &opts, 0, sizeof ( opts ) );
|
|
211
|
+ opts.foreground = COLOUR_DEFAULT;
|
|
212
|
+ opts.background = COLOUR_DEFAULT;
|
|
213
|
+
|
|
214
|
+ /* Parse options */
|
|
215
|
+ if ( ( rc = reparse_options ( argc, argv, &cpair_cmd, &opts ) ) != 0 )
|
|
216
|
+ return rc;
|
|
217
|
+
|
|
218
|
+ /* Parse colour pair index */
|
|
219
|
+ if ( ( rc = parse_integer ( argv[optind], &cpair ) ) != 0 )
|
|
220
|
+ return rc;
|
|
221
|
+
|
|
222
|
+ /* Define colour pair */
|
|
223
|
+ if ( ( rc = ansicol_define_pair ( cpair, opts.foreground,
|
|
224
|
+ opts.background ) ) != 0 ) {
|
|
225
|
+ printf ( "Could not define colour pair: %s\n",
|
|
226
|
+ strerror ( rc ) );
|
|
227
|
+ return rc;
|
|
228
|
+ }
|
|
229
|
+
|
|
230
|
+ /* Reapply default colour pair, in case definition has changed */
|
|
231
|
+ ansicol_set_pair ( CPAIR_DEFAULT );
|
|
232
|
+
|
|
233
|
+ return 0;
|
|
234
|
+}
|
|
235
|
+
|
119
|
236
|
/** Console management commands */
|
120
|
237
|
struct command console_commands[] __command = {
|
121
|
238
|
{
|
122
|
239
|
.name = "console",
|
123
|
240
|
.exec = console_exec,
|
124
|
241
|
},
|
|
242
|
+ {
|
|
243
|
+ .name = "colour",
|
|
244
|
+ .exec = colour_exec,
|
|
245
|
+ },
|
|
246
|
+ {
|
|
247
|
+ .name = "cpair",
|
|
248
|
+ .exec = cpair_exec,
|
|
249
|
+ },
|
125
|
250
|
};
|