--- lbbs/src/menu.c 2005/03/22 13:36:13 1.16 +++ lbbs/src/menu.c 2005/05/07 09:28:12 1.18 @@ -16,6 +16,7 @@ ***************************************************************************/ #include "bbs.h" +#include "bbs_cmd.h" #include "menu.h" #include "io.h" #include "common.h" @@ -40,6 +41,8 @@ load_menu (MENU_SET * p_menu_set, const return -1; } + strcpy (p_menu_set->conf_file, conf_file); + while (fgets (buffer, 255, fin)) { switch (buffer[0]) @@ -101,7 +104,7 @@ load_menu (MENU_SET * p_menu_set, const } if (ireg ("^!([A-Za-z0-9_.]+)[[:space:]]*([0-9]+)," "[[:space:]]*([0-9]+),[[:space:]]*([0-9]+)," - "[[:space:]]*([0-9]+),[[:space:]]*\"([A-Za-z0-9_]+)\"," + "[[:space:]]*([0-9]+),[[:space:]]*\"([^\"]+)\"," "[[:space:]]*\"([^\"]+)\"", buffer, 8, pmatch) == 0) { @@ -151,7 +154,7 @@ load_menu (MENU_SET * p_menu_set, const } if (ireg ("^@([A-Za-z0-9_]+)[[:space:]]*([0-9]+)," "[[:space:]]*([0-9]+),[[:space:]]*([0-9]+)," - "[[:space:]]*([0-9]+),[[:space:]]*\"([A-Za-z0-9_]+)\"," + "[[:space:]]*([0-9]+),[[:space:]]*\"([^\"]+)\"," "[[:space:]]*\"([^\"]+)\"", buffer, 8, pmatch) == 0) { @@ -276,7 +279,7 @@ get_menu (MENU_SET * p_menu_set, const c return NULL; } -void +static void display_menu_cursor (MENU * p_menu, int show) { moveto ((p_menu->items[p_menu->item_cur_pos])->r_row, @@ -352,14 +355,14 @@ display_current_menu (MENU_SET * p_menu_ return display_menu (p_menu); } -const char * +int menu_control (MENU_SET * p_menu_set, int key) { int i; MENU *p_menu; if (p_menu_set->menu_count == 0) - return ""; + return 0; p_menu = p_menu_set->p_menu_select[p_menu_set->menu_select_depth]; @@ -382,7 +385,8 @@ menu_control (MENU_SET * p_menu_set, int } else { - return (p_menu->items[p_menu->item_cur_pos]->action); + return (exec_cmd(p_menu->items[p_menu->item_cur_pos]->action, + p_menu->items[p_menu->item_cur_pos]->name)); } case KEY_LEFT: if (p_menu_set->menu_select_depth > 0) @@ -433,7 +437,7 @@ menu_control (MENU_SET * p_menu_set, int display_menu_cursor (p_menu, 0); p_menu->item_cur_pos = i; display_menu_cursor (p_menu, 1); - return ""; + return 0; } } if (isalpha (key)) @@ -445,13 +449,13 @@ menu_control (MENU_SET * p_menu_set, int display_menu_cursor (p_menu, 0); p_menu->item_cur_pos = i; display_menu_cursor (p_menu, 1); - return ""; + return 0; } } } } - return ""; + return 0; } void @@ -474,3 +478,16 @@ unload_menu (MENU_SET * p_menu_set) p_menu_set->menu_count = 0; p_menu_set->menu_select_depth = 0; } + +int +reload_menu (MENU_SET * p_menu_set) +{ + int result; + char conf_file[256]; + + strcpy (conf_file, p_menu_set->conf_file); + unload_menu (p_menu_set); + result = load_menu (p_menu_set, conf_file); + + return result; +}