]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | // SPDX-License-Identifier: GPL-2.0 |
5575536f ACM |
2 | #include <stdio.h> |
3 | #include <stdlib.h> | |
4610e413 | 4 | #include <string.h> |
5575536f | 5 | |
1e6dd077 | 6 | #include "../debug.h" |
5575536f | 7 | #include "helpline.h" |
5c35d69f | 8 | #include "ui.h" |
175729fc | 9 | #include "../util.h" |
5575536f | 10 | |
e6e90468 NK |
11 | char ui_helpline__current[512]; |
12 | ||
13 | static void nop_helpline__pop(void) | |
5575536f | 14 | { |
5575536f ACM |
15 | } |
16 | ||
1d037ca1 | 17 | static void nop_helpline__push(const char *msg __maybe_unused) |
e6e90468 NK |
18 | { |
19 | } | |
4610e413 | 20 | |
b56e5331 NK |
21 | static int nop_helpline__show(const char *fmt __maybe_unused, |
22 | va_list ap __maybe_unused) | |
23 | { | |
24 | return 0; | |
25 | } | |
26 | ||
e6e90468 NK |
27 | static struct ui_helpline default_helpline_fns = { |
28 | .pop = nop_helpline__pop, | |
29 | .push = nop_helpline__push, | |
b56e5331 | 30 | .show = nop_helpline__show, |
e6e90468 NK |
31 | }; |
32 | ||
33 | struct ui_helpline *helpline_fns = &default_helpline_fns; | |
34 | ||
35 | void ui_helpline__pop(void) | |
5575536f | 36 | { |
e6e90468 NK |
37 | helpline_fns->pop(); |
38 | } | |
4610e413 | 39 | |
e6e90468 NK |
40 | void ui_helpline__push(const char *msg) |
41 | { | |
42 | helpline_fns->push(msg); | |
5575536f ACM |
43 | } |
44 | ||
59e8fe32 | 45 | void ui_helpline__vpush(const char *fmt, va_list ap) |
5575536f ACM |
46 | { |
47 | char *s; | |
48 | ||
49 | if (vasprintf(&s, fmt, ap) < 0) | |
50 | vfprintf(stderr, fmt, ap); | |
51 | else { | |
52 | ui_helpline__push(s); | |
53 | free(s); | |
54 | } | |
55 | } | |
56 | ||
57 | void ui_helpline__fpush(const char *fmt, ...) | |
58 | { | |
59 | va_list ap; | |
60 | ||
61 | va_start(ap, fmt); | |
62 | ui_helpline__vpush(fmt, ap); | |
63 | va_end(ap); | |
64 | } | |
65 | ||
66 | void ui_helpline__puts(const char *msg) | |
67 | { | |
68 | ui_helpline__pop(); | |
69 | ui_helpline__push(msg); | |
70 | } | |
b56e5331 NK |
71 | |
72 | int ui_helpline__vshow(const char *fmt, va_list ap) | |
73 | { | |
74 | return helpline_fns->show(fmt, ap); | |
75 | } | |
9484b86e ACM |
76 | |
77 | void ui_helpline__printf(const char *fmt, ...) | |
78 | { | |
79 | va_list ap; | |
80 | ||
81 | ui_helpline__pop(); | |
82 | va_start(ap, fmt); | |
83 | ui_helpline__vpush(fmt, ap); | |
84 | va_end(ap); | |
85 | } |