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

Annotation of /lbbs/include/menu.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.17 - (hide annotations)
Thu May 15 06:24:11 2025 UTC (10 months ago) by sysadm
Branch: MAIN
Changes since 1.16: +5 -2 lines
Content type: text/x-chdr
Fix bug in menu reload and shared memory writing

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.17 int16_t row, col;
43 sysadm 1.9 char action[MAX_MENUACTION_LENGTH];
44 sysadm 1.16 MENU_ID action_menu_id;
45 sysadm 1.17 int8_t submenu;
46 sysadm 1.16 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.17 int8_t menu_item_display[MAX_ITEMS_PER_MENU];
98     int16_t menu_item_r_row[MAX_ITEMS_PER_MENU];
99     int16_t menu_item_r_col[MAX_ITEMS_PER_MENU];
100 sysadm 1.2 };
101 sysadm 1.14 typedef struct menu_set_t MENU_SET;
102 sysadm 1.5
103 sysadm 1.16 extern MENU_SET *p_bbs_menu;
104 sysadm 1.4
105 sysadm 1.9 extern int load_menu(MENU_SET *p_menu_set, const char *conf_file);
106 sysadm 1.16 extern int unload_menu(MENU_SET *p_menu_set);
107    
108     extern int load_menu_shm(MENU_SET *p_menu_set);
109     extern int unload_menu_shm(MENU_SET *p_menu_set);
110    
111     extern int menu_control(MENU_SET *p_menu_set, int key);
112     extern int display_menu(MENU_SET *p_menu_set);
113    
114     inline MENU *get_menu(MENU_SET *p_menu_set, const char *menu_name)
115     {
116     MENU *value = NULL;
117 sysadm 1.10
118 sysadm 1.16 trie_dict_get(p_menu_set->p_menu_name_dict, menu_name, (int64_t *)&value);
119 sysadm 1.10
120 sysadm 1.16 return ((MENU *)value);
121     }
122 sysadm 1.10
123 sysadm 1.16 inline MENU *get_menu_by_id(MENU_SET *p_menu_set, MENU_ID menu_id)
124     {
125     if (menu_id < 0 || menu_id >= p_menu_set->menu_count)
126     {
127     return NULL;
128     }
129    
130     return (p_menu_set->p_menu_pool + sizeof(MENU) * menu_id);
131     }
132    
133     inline MENU_ITEM *get_menu_item_by_id(MENU_SET *p_menu_set, MENU_ITEM_ID menu_item_id)
134     {
135     if (menu_item_id < 0 || menu_item_id >= p_menu_set->menu_item_count)
136     {
137     return NULL;
138     }
139 sysadm 1.10
140 sysadm 1.16 return (p_menu_set->p_menu_item_pool + sizeof(MENU_ITEM) * menu_item_id);
141     }
142 sysadm 1.10
143 sysadm 1.16 inline MENU_SCREEN *get_menu_screen_by_id(MENU_SET *p_menu_set, MENU_SCREEN_ID menu_screen_id)
144     {
145     if (menu_screen_id < 0 || menu_screen_id >= p_menu_set->menu_screen_count)
146     {
147     return NULL;
148     }
149 sysadm 1.10
150 sysadm 1.16 return (p_menu_set->p_menu_screen_pool + sizeof(MENU_ITEM) * menu_screen_id);
151     }
152 sysadm 1.4
153 sysadm 1.7 #endif //_MENU_H_

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