/[LeafOK_CVS]/lbbs/include/menu.h
ViewVC logotype

Annotation of /lbbs/include/menu.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.16 - (hide annotations)
Thu May 15 05:14:57 2025 UTC (10 months ago) by sysadm
Branch: MAIN
Changes since 1.15: +79 -22 lines
Content type: text/x-chdr
Refact menu with shared memory

1 sysadm 1.1 /***************************************************************************
2 sysadm 1.9 menu.h - description
3     -------------------
4 sysadm 1.12 Copyright : (C) 2004-2025 by Leaflet
5     Email : leaflet@leafok.com
6 sysadm 1.1 ***************************************************************************/
7    
8     /***************************************************************************
9     * *
10     * This program is free software; you can redistribute it and/or modify *
11     * it under the terms of the GNU General Public License as published by *
12 sysadm 1.12 * the Free Software Foundation; either version 3 of the License, or *
13 sysadm 1.1 * (at your option) any later version. *
14     * *
15     ***************************************************************************/
16    
17 sysadm 1.7 #ifndef _MENU_H_
18     #define _MENU_H_
19    
20 sysadm 1.11 #include "common.h"
21 sysadm 1.15 #include "trie_dict.h"
22 sysadm 1.16 #include <stdint.h>
23     #include <sys/shm.h>
24 sysadm 1.11
25 sysadm 1.9 #define MAX_MENUITEM_LENGTH 50
26 sysadm 1.16 #define MAX_ITEMS_PER_MENU 30
27 sysadm 1.9 #define MAX_MENUNAME_LENGTH 256
28     #define MAX_MENUACTION_LENGTH 20
29     #define MAX_MENUTITLE_LENGTH 50
30 sysadm 1.16 #define MAX_MENU_SCR_NAME_LENGTH 20
31     #define MAX_MENU_SCR_BUF_LENGTH 2000
32 sysadm 1.9 #define MAX_MENUS 256
33 sysadm 1.16 #define MAX_MENUITEMS 5120
34 sysadm 1.9 #define MAX_MENU_DEPTH 50
35 sysadm 1.1
36 sysadm 1.16 typedef uint64_t MENU_ID;
37     typedef uint64_t MENU_ITEM_ID;
38     typedef uint64_t MENU_SCREEN_ID;
39    
40 sysadm 1.14 struct menu_item_t
41 sysadm 1.5 {
42 sysadm 1.16 int16_t row, col, r_row, r_col;
43 sysadm 1.9 char action[MAX_MENUACTION_LENGTH];
44 sysadm 1.16 MENU_ID action_menu_id;
45     int8_t submenu, display;
46     int priv, level;
47 sysadm 1.9 char name[MAX_MENUNAME_LENGTH];
48     char text[MAX_MENUITEM_LENGTH];
49 sysadm 1.1 };
50 sysadm 1.14 typedef struct menu_item_t MENU_ITEM;
51 sysadm 1.2
52 sysadm 1.14 struct menu_title_t
53 sysadm 1.5 {
54 sysadm 1.16 int16_t row, col;
55     int8_t show;
56 sysadm 1.9 char text[MAX_MENUTITLE_LENGTH];
57 sysadm 1.2 };
58 sysadm 1.14 typedef struct menu_title_t MENU_TITLE;
59 sysadm 1.2
60 sysadm 1.14 struct menu_screen_t
61 sysadm 1.5 {
62 sysadm 1.16 char name[MAX_MENU_SCR_NAME_LENGTH];
63     int64_t buf_offset;
64     int64_t buf_length;
65 sysadm 1.2 };
66 sysadm 1.14 typedef struct menu_screen_t MENU_SCREEN;
67 sysadm 1.1
68 sysadm 1.14 struct menu_t
69 sysadm 1.5 {
70 sysadm 1.9 char name[MAX_MENUNAME_LENGTH];
71     MENU_TITLE title;
72 sysadm 1.16 MENU_SCREEN_ID screen_id;
73     int8_t screen_show;
74     int16_t screen_row, screen_col;
75     MENU_ITEM_ID items[MAX_ITEMS_PER_MENU];
76     int16_t item_count;
77 sysadm 1.1 };
78 sysadm 1.14 typedef struct menu_t MENU;
79 sysadm 1.1
80 sysadm 1.14 struct menu_set_t
81 sysadm 1.5 {
82 sysadm 1.16 int shmid;
83     void *p_reserved;
84     void *p_menu_pool;
85     void *p_menu_item_pool;
86     void *p_menu_screen_pool;
87     char *p_menu_screen_buf;
88     char *p_menu_screen_buf_free;
89     int16_t menu_count;
90     int16_t menu_item_count;
91     int16_t menu_screen_count;
92 sysadm 1.15 TRIE_NODE *p_menu_name_dict;
93 sysadm 1.16 TRIE_NODE *p_menu_screen_dict;
94     MENU_ID menu_id_path[MAX_MENU_DEPTH];
95     int16_t menu_item_pos[MAX_MENU_DEPTH];
96     int16_t choose_step;
97 sysadm 1.2 };
98 sysadm 1.14 typedef struct menu_set_t MENU_SET;
99 sysadm 1.5
100 sysadm 1.16 extern MENU_SET *p_bbs_menu;
101 sysadm 1.4
102 sysadm 1.9 extern int load_menu(MENU_SET *p_menu_set, const char *conf_file);
103 sysadm 1.16 extern int unload_menu(MENU_SET *p_menu_set);
104    
105     extern int load_menu_shm(MENU_SET *p_menu_set);
106     extern int unload_menu_shm(MENU_SET *p_menu_set);
107    
108     extern int menu_control(MENU_SET *p_menu_set, int key);
109     extern int display_menu(MENU_SET *p_menu_set);
110    
111     inline MENU *get_menu(MENU_SET *p_menu_set, const char *menu_name)
112     {
113     MENU *value = NULL;
114 sysadm 1.10
115 sysadm 1.16 trie_dict_get(p_menu_set->p_menu_name_dict, menu_name, (int64_t *)&value);
116 sysadm 1.10
117 sysadm 1.16 return ((MENU *)value);
118     }
119 sysadm 1.10
120 sysadm 1.16 inline MENU *get_menu_by_id(MENU_SET *p_menu_set, MENU_ID menu_id)
121     {
122     if (menu_id < 0 || menu_id >= p_menu_set->menu_count)
123     {
124     return NULL;
125     }
126    
127     return (p_menu_set->p_menu_pool + sizeof(MENU) * menu_id);
128     }
129    
130     inline MENU_ITEM *get_menu_item_by_id(MENU_SET *p_menu_set, MENU_ITEM_ID menu_item_id)
131     {
132     if (menu_item_id < 0 || menu_item_id >= p_menu_set->menu_item_count)
133     {
134     return NULL;
135     }
136 sysadm 1.10
137 sysadm 1.16 return (p_menu_set->p_menu_item_pool + sizeof(MENU_ITEM) * menu_item_id);
138     }
139 sysadm 1.10
140 sysadm 1.16 inline MENU_SCREEN *get_menu_screen_by_id(MENU_SET *p_menu_set, MENU_SCREEN_ID menu_screen_id)
141     {
142     if (menu_screen_id < 0 || menu_screen_id >= p_menu_set->menu_screen_count)
143     {
144     return NULL;
145     }
146 sysadm 1.10
147 sysadm 1.16 return (p_menu_set->p_menu_screen_pool + sizeof(MENU_ITEM) * menu_screen_id);
148     }
149 sysadm 1.4
150 sysadm 1.7 #endif //_MENU_H_

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