| 
									
										
										
										
											2010-08-08 19:48:31 -03:00
										 |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							| 
									
										
										
										
											2011-10-26 12:04:37 -02:00
										 |  |  | #include <string.h>
 | 
					
						
							| 
									
										
										
										
											2010-08-08 19:48:31 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-10 15:58:50 -03:00
										 |  |  | #include "../debug.h"
 | 
					
						
							| 
									
										
										
										
											2010-08-08 19:48:31 -03:00
										 |  |  | #include "helpline.h"
 | 
					
						
							| 
									
										
										
										
											2011-02-09 11:38:43 -02:00
										 |  |  | #include "ui.h"
 | 
					
						
							| 
									
										
										
										
											2010-08-08 19:48:31 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-16 17:14:50 +09:00
										 |  |  | char ui_helpline__current[512]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void nop_helpline__pop(void) | 
					
						
							| 
									
										
										
										
											2010-08-08 19:48:31 -03:00
										 |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-11 01:15:03 +03:00
										 |  |  | static void nop_helpline__push(const char *msg __maybe_unused) | 
					
						
							| 
									
										
										
										
											2012-08-16 17:14:50 +09:00
										 |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2011-10-26 12:04:37 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-15 01:47:41 +09:00
										 |  |  | static int nop_helpline__show(const char *fmt __maybe_unused, | 
					
						
							|  |  |  | 			       va_list ap __maybe_unused) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-16 17:14:50 +09:00
										 |  |  | static struct ui_helpline default_helpline_fns = { | 
					
						
							|  |  |  | 	.pop	= nop_helpline__pop, | 
					
						
							|  |  |  | 	.push	= nop_helpline__push, | 
					
						
							| 
									
										
										
										
											2012-11-15 01:47:41 +09:00
										 |  |  | 	.show	= nop_helpline__show, | 
					
						
							| 
									
										
										
										
											2012-08-16 17:14:50 +09:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct ui_helpline *helpline_fns = &default_helpline_fns; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ui_helpline__pop(void) | 
					
						
							| 
									
										
										
										
											2010-08-08 19:48:31 -03:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-08-16 17:14:50 +09:00
										 |  |  | 	helpline_fns->pop(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2011-10-26 12:04:37 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-16 17:14:50 +09:00
										 |  |  | void ui_helpline__push(const char *msg) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	helpline_fns->push(msg); | 
					
						
							| 
									
										
										
										
											2010-08-08 19:48:31 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-10 15:44:20 -03:00
										 |  |  | void ui_helpline__vpush(const char *fmt, va_list ap) | 
					
						
							| 
									
										
										
										
											2010-08-08 19:48:31 -03: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-15 01:47:41 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | int ui_helpline__vshow(const char *fmt, va_list ap) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return helpline_fns->show(fmt, ap); | 
					
						
							|  |  |  | } |