84 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <stdio.h>3#include <stdlib.h>4#include <string.h>5 6#include "helpline.h"7#include "ui.h"8 9char ui_helpline__current[512];10 11static void nop_helpline__pop(void)12{13}14 15static void nop_helpline__push(const char *msg __maybe_unused)16{17}18 19static int nop_helpline__show(const char *fmt __maybe_unused,20 va_list ap __maybe_unused)21{22 return 0;23}24 25static struct ui_helpline default_helpline_fns = {26 .pop = nop_helpline__pop,27 .push = nop_helpline__push,28 .show = nop_helpline__show,29};30 31struct ui_helpline *helpline_fns = &default_helpline_fns;32 33void ui_helpline__pop(void)34{35 helpline_fns->pop();36}37 38void ui_helpline__push(const char *msg)39{40 helpline_fns->push(msg);41}42 43void ui_helpline__vpush(const char *fmt, va_list ap)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 55void 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 64void ui_helpline__puts(const char *msg)65{66 ui_helpline__pop();67 ui_helpline__push(msg);68}69 70int ui_helpline__vshow(const char *fmt, va_list ap)71{72 return helpline_fns->show(fmt, ap);73}74 75void 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}84