1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5#include "../debug.h" 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