2010-08-09 02:48:31 +04:00
# include <stdio.h>
# include <stdlib.h>
2011-10-26 18:04:37 +04:00
# include <string.h>
2010-08-09 02:48:31 +04:00
2010-08-10 22:58:50 +04:00
# include "../debug.h"
2010-08-09 02:48:31 +04:00
# include "helpline.h"
2011-02-09 16:38:43 +03:00
# include "ui.h"
2010-08-09 02:48:31 +04:00
2012-08-16 12:14:50 +04:00
char ui_helpline__current [ 512 ] ;
static void nop_helpline__pop ( void )
2010-08-09 02:48:31 +04:00
{
}
2012-09-11 02:15:03 +04:00
static void nop_helpline__push ( const char * msg __maybe_unused )
2012-08-16 12:14:50 +04:00
{
}
2011-10-26 18:04:37 +04:00
2012-11-14 20:47:41 +04:00
static int nop_helpline__show ( const char * fmt __maybe_unused ,
va_list ap __maybe_unused )
{
return 0 ;
}
2012-08-16 12:14:50 +04:00
static struct ui_helpline default_helpline_fns = {
. pop = nop_helpline__pop ,
. push = nop_helpline__push ,
2012-11-14 20:47:41 +04:00
. show = nop_helpline__show ,
2012-08-16 12:14:50 +04:00
} ;
struct ui_helpline * helpline_fns = & default_helpline_fns ;
void ui_helpline__pop ( void )
2010-08-09 02:48:31 +04:00
{
2012-08-16 12:14:50 +04:00
helpline_fns - > pop ( ) ;
}
2011-10-26 18:04:37 +04:00
2012-08-16 12:14:50 +04:00
void ui_helpline__push ( const char * msg )
{
helpline_fns - > push ( msg ) ;
2010-08-09 02:48:31 +04:00
}
2010-08-10 22:44:20 +04:00
void ui_helpline__vpush ( const char * fmt , va_list ap )
2010-08-09 02:48:31 +04:00
{
char * s ;
if ( vasprintf ( & s , fmt , ap ) < 0 )
vfprintf ( stderr , fmt , ap ) ;
else {
ui_helpline__push ( s ) ;
free ( s ) ;
}
}
void ui_helpline__fpush ( const char * fmt , . . . )
{
va_list ap ;
va_start ( ap , fmt ) ;
ui_helpline__vpush ( fmt , ap ) ;
va_end ( ap ) ;
}
void ui_helpline__puts ( const char * msg )
{
ui_helpline__pop ( ) ;
ui_helpline__push ( msg ) ;
}
2012-11-14 20:47:41 +04:00
int ui_helpline__vshow ( const char * fmt , va_list ap )
{
return helpline_fns - > show ( fmt , ap ) ;
}