blob: e39654a89dafb0d4137198e1b492e422827d7b79 [file] [log] [blame]
Benny Prijono7b40c6c2009-07-16 10:36:48 +00001#include "systest.h"
2#include "gui.h"
3#include <stdio.h>
4#include <pjlib.h>
5
6static pj_bool_t console_quit;
7
8PJ_DEF(enum gui_key) gui_msgbox(const char *title, const char *message, enum gui_flag flag)
9{
10 puts(title);
11 puts(message);
12
13 for (;;) {
14 char input[10], *ret;
15
16 if (flag == WITH_YESNO)
17 printf("%c:Yes %c:No ", KEY_YES, KEY_NO);
18 else if (flag == WITH_OK)
19 printf("%c:OK ", KEY_OK);
20 else if (flag == WITH_OKCANCEL)
21 printf("%c:OK %c:Cancel ", KEY_OK, KEY_CANCEL);
22 puts("");
23
24 ret = fgets(input, sizeof(input), stdin);
25 if (!ret)
26 return KEY_CANCEL;
27
28 if (input[0]==KEY_NO || input[0]==KEY_YES || input[0]==KEY_CANCEL)
29 return (enum gui_key)input[0];
30 }
31}
32
33PJ_DEF(pj_status_t) gui_init(gui_menu *menu)
34{
35 PJ_UNUSED_ARG(menu);
36 return PJ_SUCCESS;
37}
38
39static void print_menu(const char *indent, char *menu_id, gui_menu *menu)
40{
41 char child_indent[16];
42 unsigned i;
43
44 pj_ansi_snprintf(child_indent, sizeof(child_indent), "%s ", indent);
45
46 printf("%s%s: %s\n", indent, menu_id, menu->title);
47
48 for (i=0; i<menu->submenu_cnt; ++i) {
49 char child_id[10];
50
51 pj_ansi_sprintf(child_id, "%s%u", menu_id, i);
52
53 if (!menu->submenus[i])
54 puts("");
55 else
56 print_menu(child_indent, child_id, menu->submenus[i]);
57 }
58}
59
60PJ_DEF(pj_status_t) gui_start(gui_menu *menu)
61{
62 while (!console_quit) {
63 unsigned i;
64 char input[10], *p;
65 gui_menu *choice;
66
67 puts("M E N U :");
68 puts("---------");
69 for (i=0; i<menu->submenu_cnt; ++i) {
70 char menu_id[4];
71 pj_ansi_sprintf(menu_id, "%u", i);
72 print_menu("", menu_id, menu->submenus[i]);
73 }
74 puts("");
75 printf("Enter the menu number: ");
76
77 if (!fgets(input, sizeof(input), stdin))
78 break;
79
80 p = input;
81 choice = menu;
82 while (*p && *p!='\r' && *p!='\n') {
83 unsigned d = (*p - '0');
84 if (d < 0 || d >= choice->submenu_cnt) {
85 puts("Invalid selection");
86 choice = NULL;
87 break;
88 }
89
90 choice = choice->submenus[d];
91 ++p;
92 }
93
94 if (choice && *p!='\r' && *p!='\n') {
95 puts("Invalid characters entered");
96 continue;
97 }
98
99 if (choice && choice->handler)
100 (*choice->handler)();
101 }
102
103 return PJ_SUCCESS;
104}
105
106PJ_DEF(void) gui_destroy(void)
107{
108 console_quit = PJ_TRUE;
109}
110
111PJ_DEF(void) gui_sleep(unsigned sec)
112{
113 pj_thread_sleep(sec * 1000);
114}
115
116int main()
117{
118 if (systest_init() != PJ_SUCCESS)
119 return 1;
120
121 systest_run();
122 systest_deinit();
123
124 return 0;
125}
126