--- lbbs/src/menu.c 2005/03/18 16:04:16 1.1 +++ lbbs/src/menu.c 2005/03/19 08:23:05 1.2 @@ -17,16 +17,20 @@ #include "menu.h" #include "io.h" +#include "common.h" #include #include +#include -MENU bbs_main_menu; +MENU_SET bbs_menu; int load_menu (MENU *p_menu, const char *conf_file) { - FILE *fin; + FILE *fin, *fout; int i = 0; + char buffer[256], screen_filename[256], temp[256]; + regmatch_t pmatch[10]; if ((fin = fopen (conf_file, "r")) == NULL) { @@ -34,13 +38,51 @@ load_menu (MENU *p_menu, const char *con return -1; } - while (fscanf (fin, "%d %d %c ", &((p_menu->items[i]).row), - &((p_menu->items[i]).col), &((p_menu->items[i]).key)) != EOF) - { - fgets((p_menu->items[i]).text, MAX_MENUITEM_LENGTH, fin); + while (fgets (buffer, 255, fin)) + { + switch (buffer[0]) + { + case '#': + break; + case '%': + if (ireg ("^%S_([A-Za-z0-9_]+)", buffer, 1, pmatch) == 0) + { + strncpy (temp, buffer + pmatch[0].rm_so, + pmatch[0].rm_eo - pmatch[0].rm_so + 1); + sprintf (screen_filename, "%sMENU_SCR_%s", + app_temp_dir, temp); + + if ((fout = fopen (screen_filename, "w")) == NULL) + { + log_error ("Open %s failed", screen_filename); + return -2; + } + + while (fgets (buffer, 255, fin)) + { + if (buffer[0] != '%') + fputs (buffer, fout); + else + break; + } + + fclose (fout); + break; + } + + if (ireg ("^%S_([A-Za-z0-9_]+)", buffer, 1, pmatch) == 0) + { + } + break; + } + fscanf (fin, "%d %d %s ", &((p_menu->items[i]).row), + &((p_menu->items[i]).col), &((p_menu->items[i]).name)); + fgets ((p_menu->items[i]).text, MAX_MENUITEM_LENGTH, fin); i++; } + fclose (fin); + p_menu->item_count = i; p_menu->item_cur_pos = 0;