diff options
author | Benny Prijono <bennylp@teluu.com> | 2009-07-16 10:36:48 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2009-07-16 10:36:48 +0000 |
commit | 5d0127a9b3b7159206918142986f67b9489b71ec (patch) | |
tree | 7b5dcbfd13162ac8d362c87f47f724ec25349cce /pjsip-apps/src/pjsystest/main_console.c | |
parent | c7b0bd5a2320cc342474e5713adb00f92532aa23 (diff) |
Ticket #920: New pjsystest application for testing target system/device. Initial work on Win32 and WM
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2835 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip-apps/src/pjsystest/main_console.c')
-rw-r--r-- | pjsip-apps/src/pjsystest/main_console.c | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/pjsip-apps/src/pjsystest/main_console.c b/pjsip-apps/src/pjsystest/main_console.c new file mode 100644 index 00000000..e39654a8 --- /dev/null +++ b/pjsip-apps/src/pjsystest/main_console.c @@ -0,0 +1,126 @@ +#include "systest.h" +#include "gui.h" +#include <stdio.h> +#include <pjlib.h> + +static pj_bool_t console_quit; + +PJ_DEF(enum gui_key) gui_msgbox(const char *title, const char *message, enum gui_flag flag) +{ + puts(title); + puts(message); + + for (;;) { + char input[10], *ret; + + if (flag == WITH_YESNO) + printf("%c:Yes %c:No ", KEY_YES, KEY_NO); + else if (flag == WITH_OK) + printf("%c:OK ", KEY_OK); + else if (flag == WITH_OKCANCEL) + printf("%c:OK %c:Cancel ", KEY_OK, KEY_CANCEL); + puts(""); + + ret = fgets(input, sizeof(input), stdin); + if (!ret) + return KEY_CANCEL; + + if (input[0]==KEY_NO || input[0]==KEY_YES || input[0]==KEY_CANCEL) + return (enum gui_key)input[0]; + } +} + +PJ_DEF(pj_status_t) gui_init(gui_menu *menu) +{ + PJ_UNUSED_ARG(menu); + return PJ_SUCCESS; +} + +static void print_menu(const char *indent, char *menu_id, gui_menu *menu) +{ + char child_indent[16]; + unsigned i; + + pj_ansi_snprintf(child_indent, sizeof(child_indent), "%s ", indent); + + printf("%s%s: %s\n", indent, menu_id, menu->title); + + for (i=0; i<menu->submenu_cnt; ++i) { + char child_id[10]; + + pj_ansi_sprintf(child_id, "%s%u", menu_id, i); + + if (!menu->submenus[i]) + puts(""); + else + print_menu(child_indent, child_id, menu->submenus[i]); + } +} + +PJ_DEF(pj_status_t) gui_start(gui_menu *menu) +{ + while (!console_quit) { + unsigned i; + char input[10], *p; + gui_menu *choice; + + puts("M E N U :"); + puts("---------"); + for (i=0; i<menu->submenu_cnt; ++i) { + char menu_id[4]; + pj_ansi_sprintf(menu_id, "%u", i); + print_menu("", menu_id, menu->submenus[i]); + } + puts(""); + printf("Enter the menu number: "); + + if (!fgets(input, sizeof(input), stdin)) + break; + + p = input; + choice = menu; + while (*p && *p!='\r' && *p!='\n') { + unsigned d = (*p - '0'); + if (d < 0 || d >= choice->submenu_cnt) { + puts("Invalid selection"); + choice = NULL; + break; + } + + choice = choice->submenus[d]; + ++p; + } + + if (choice && *p!='\r' && *p!='\n') { + puts("Invalid characters entered"); + continue; + } + + if (choice && choice->handler) + (*choice->handler)(); + } + + return PJ_SUCCESS; +} + +PJ_DEF(void) gui_destroy(void) +{ + console_quit = PJ_TRUE; +} + +PJ_DEF(void) gui_sleep(unsigned sec) +{ + pj_thread_sleep(sec * 1000); +} + +int main() +{ + if (systest_init() != PJ_SUCCESS) + return 1; + + systest_run(); + systest_deinit(); + + return 0; +} + |