/[LeafOK_CVS]/lbbs/src/menu.c
ViewVC logotype

Diff of /lbbs/src/menu.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.43 by sysadm, Thu May 15 09:15:52 2025 UTC Revision 1.45 by sysadm, Sun May 18 03:23:57 2025 UTC
# Line 663  int load_menu(MENU_SET *p_menu_set, cons Line 663  int load_menu(MENU_SET *p_menu_set, cons
663          }          }
664          fclose(fin);          fclose(fin);
665    
         // Set menu_item->action_menu_id of each menu item pointing to a submenu to the menu_id of the corresponding submenu  
666          for (menu_item_id = 0; menu_item_id < p_menu_set->menu_item_count; menu_item_id++)          for (menu_item_id = 0; menu_item_id < p_menu_set->menu_item_count; menu_item_id++)
667          {          {
668                  p_menu_item = get_menu_item_by_id(p_menu_set, menu_item_id);                  p_menu_item = get_menu_item_by_id(p_menu_set, menu_item_id);
669                  if (p_menu_item->submenu == 1 && strcmp(p_menu_item->action, "..") != 0)  
670                    // Set menu_item->action_cmd_handler of each menu item pointing to bbs_cmd
671                    if (p_menu_item->submenu == 0)
672                    {
673                            if ((p_menu_item->action_cmd_handler = get_cmd_handler(p_menu_item->action)) == NULL)
674                            {
675                                    log_error("Undefined menu action cmd handler [%s]\n", p_menu_item->action);
676                                    return -1;
677                            }
678                    }
679                    // Set menu_item->action_menu_id of each menu item pointing to a submenu to the menu_id of the corresponding submenu
680                    else if (strcmp(p_menu_item->action, "..") != 0)
681                  {                  {
682                          if (trie_dict_get(p_menu_set->p_menu_name_dict, p_menu_item->action, (int64_t *)&menu_id) != 1)                          if (trie_dict_get(p_menu_set->p_menu_name_dict, p_menu_item->action, (int64_t *)&menu_id) != 1)
683                          {                          {
# Line 880  int menu_control(MENU_SET *p_menu_set, i Line 890  int menu_control(MENU_SET *p_menu_set, i
890                  }                  }
891                  else                  else
892                  {                  {
893                          return (exec_cmd(p_menu_item->action, p_menu_item->name));                          return ((*(p_menu_item->action_cmd_handler))((void *)(p_menu_item->name)));
894                  }                  }
895                  break;                  break;
896          case KEY_LEFT:          case KEY_LEFT:
# Line 1040  int unload_menu(MENU_SET *p_menu_set) Line 1050  int unload_menu(MENU_SET *p_menu_set)
1050          if (p_menu_set->p_menu_name_dict != NULL)          if (p_menu_set->p_menu_name_dict != NULL)
1051          {          {
1052                  trie_dict_destroy(p_menu_set->p_menu_name_dict);                  trie_dict_destroy(p_menu_set->p_menu_name_dict);
                 p_menu_set->p_menu_name_dict = NULL;  
1053          }          }
1054    
1055          if (p_menu_set->p_menu_screen_dict != NULL)          if (p_menu_set->p_menu_screen_dict != NULL)
1056          {          {
1057                  trie_dict_destroy(p_menu_set->p_menu_screen_dict);                  trie_dict_destroy(p_menu_set->p_menu_screen_dict);
                 p_menu_set->p_menu_screen_dict = NULL;  
1058          }          }
1059    
1060          unload_menu_shm(p_menu_set);          unload_menu_shm(p_menu_set);
# Line 1063  int unload_menu(MENU_SET *p_menu_set) Line 1071  int unload_menu(MENU_SET *p_menu_set)
1071  int load_menu_shm(MENU_SET *p_menu_set)  int load_menu_shm(MENU_SET *p_menu_set)
1072  {  {
1073          // Mount shared memory          // Mount shared memory
1074          if (p_menu_set->p_reserved != NULL)          if (p_menu_set->p_reserved == NULL)
1075          {          {
1076                  log_error("Menu is already loaded\n");                  p_menu_set->p_reserved = shmat(p_menu_set->shmid, NULL, SHM_RDONLY);
1077                  return -1;                  if (p_menu_set->p_reserved == (void *)-1)
1078                    {
1079                            log_error("shmat() error (%d)\n", errno);
1080                            return -1;
1081                    }
1082          }          }
1083    
         p_menu_set->p_reserved = shmat(p_menu_set->shmid, NULL, SHM_RDONLY);  
         if (p_menu_set->p_reserved == (void *)-1)  
         {  
                 log_error("shmat() error (%d)\n", errno);  
                 return -2;  
         }  
1084          p_menu_set->p_menu_pool = p_menu_set->p_reserved + MENU_SET_RESERVED_LENGTH;          p_menu_set->p_menu_pool = p_menu_set->p_reserved + MENU_SET_RESERVED_LENGTH;
1085          p_menu_set->p_menu_item_pool = p_menu_set->p_menu_pool + sizeof(MENU) * MAX_MENUS;          p_menu_set->p_menu_item_pool = p_menu_set->p_menu_pool + sizeof(MENU) * MAX_MENUS;
1086          p_menu_set->p_menu_screen_pool = p_menu_set->p_menu_item_pool + sizeof(MENU_ITEM) * MAX_MENUITEMS;          p_menu_set->p_menu_screen_pool = p_menu_set->p_menu_item_pool + sizeof(MENU_ITEM) * MAX_MENUITEMS;


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1