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