| 39 |
#define MENU_SET_RESERVED_LENGTH (sizeof(int16_t) * 4) |
#define MENU_SET_RESERVED_LENGTH (sizeof(int16_t) * 4) |
| 40 |
|
|
| 41 |
MENU_SET bbs_menu; |
MENU_SET bbs_menu; |
| 42 |
|
MENU_SET top10_menu; |
| 43 |
|
|
| 44 |
int load_menu(MENU_SET *p_menu_set, const char *conf_file) |
int load_menu(MENU_SET *p_menu_set, const char *conf_file) |
| 45 |
{ |
{ |
| 103 |
p_menu_set->shmid = shmget(key, size, IPC_CREAT | IPC_EXCL | 0600); |
p_menu_set->shmid = shmget(key, size, IPC_CREAT | IPC_EXCL | 0600); |
| 104 |
if (p_menu_set->shmid == -1) |
if (p_menu_set->shmid == -1) |
| 105 |
{ |
{ |
| 106 |
log_error("shmget(size = %d) error (%d)\n", size, errno); |
log_error("shmget(conf_file=%s, proj_id=%d, size = %d) error (%d)\n", conf_file, proj_id, size, errno); |
| 107 |
return -3; |
return -3; |
| 108 |
} |
} |
| 109 |
p_menu_set->p_reserved = shmat(p_menu_set->shmid, NULL, 0); |
p_menu_set->p_reserved = shmat(p_menu_set->shmid, NULL, 0); |
| 112 |
log_error("shmat() error (%d)\n", errno); |
log_error("shmat() error (%d)\n", errno); |
| 113 |
return -3; |
return -3; |
| 114 |
} |
} |
| 115 |
p_menu_set->p_menu_pool = p_menu_set->p_reserved + MENU_SET_RESERVED_LENGTH; |
p_menu_set->p_menu_pool = (char *)(p_menu_set->p_reserved) + MENU_SET_RESERVED_LENGTH; |
| 116 |
p_menu_set->p_menu_item_pool = p_menu_set->p_menu_pool + sizeof(MENU) * MAX_MENUS; |
p_menu_set->p_menu_item_pool = (char *)(p_menu_set->p_menu_pool) + sizeof(MENU) * MAX_MENUS; |
| 117 |
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 = (char *)(p_menu_set->p_menu_item_pool) + sizeof(MENU_ITEM) * MAX_MENUITEMS; |
| 118 |
p_menu_set->p_menu_screen_buf = p_menu_set->p_menu_screen_pool + sizeof(MENU_SCREEN) * MAX_MENUS; |
p_menu_set->p_menu_screen_buf = (char *)(p_menu_set->p_menu_screen_pool) + sizeof(MENU_SCREEN) * MAX_MENUS; |
| 119 |
p_menu_set->p_menu_screen_buf_free = p_menu_set->p_menu_screen_buf; |
p_menu_set->p_menu_screen_buf_free = p_menu_set->p_menu_screen_buf; |
| 120 |
|
|
| 121 |
p_menu_set->menu_count = 0; |
p_menu_set->menu_count = 0; |
| 989 |
return EXITMENU; |
return EXITMENU; |
| 990 |
} |
} |
| 991 |
|
|
| 992 |
|
if (p_menu->item_count <= 0) // empty menu |
| 993 |
|
{ |
| 994 |
|
moveto(p_menu->screen_row, p_menu->screen_col); |
| 995 |
|
clrtoeol(); |
| 996 |
|
prints("没有可选项"); |
| 997 |
|
press_any_key(); |
| 998 |
|
return -1; |
| 999 |
|
} |
| 1000 |
|
|
| 1001 |
menu_item_pos = p_menu_set->menu_item_pos[p_menu_set->choose_step]; |
menu_item_pos = p_menu_set->menu_item_pos[p_menu_set->choose_step]; |
| 1002 |
menu_item_id = p_menu->items[menu_item_pos]; |
menu_item_id = p_menu->items[menu_item_pos]; |
| 1003 |
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); |
| 1069 |
{ |
{ |
| 1070 |
moveto(p_menu->screen_row, p_menu->screen_col); |
moveto(p_menu->screen_row, p_menu->screen_col); |
| 1071 |
clrtoeol(); |
clrtoeol(); |
| 1072 |
prints("ûпѡ"); |
prints("没有可选项"); |
| 1073 |
press_any_key(); |
press_any_key(); |
| 1074 |
return -1; |
return -1; |
| 1075 |
} |
} |
| 1141 |
switch (key) |
switch (key) |
| 1142 |
{ |
{ |
| 1143 |
case CR: |
case CR: |
|
igetch_reset(); |
|
| 1144 |
case KEY_RIGHT: |
case KEY_RIGHT: |
| 1145 |
if (p_menu_item->submenu) |
if (p_menu_item->submenu) |
| 1146 |
{ |
{ |
| 1167 |
if (p_menu_set->choose_step > 0) |
if (p_menu_set->choose_step > 0) |
| 1168 |
{ |
{ |
| 1169 |
p_menu_set->choose_step--; |
p_menu_set->choose_step--; |
| 1170 |
if (p_menu_set->choose_step == 0) |
return REDRAW; |
|
{ |
|
|
return REDRAW; |
|
|
} |
|
|
if (display_menu(p_menu_set) != 0) |
|
|
{ |
|
|
return menu_control(p_menu_set, KEY_LEFT); |
|
|
} |
|
| 1171 |
} |
} |
| 1172 |
else |
else |
| 1173 |
{ |
{ |
| 1395 |
} |
} |
| 1396 |
|
|
| 1397 |
p_menu_set->p_reserved = p_shm; |
p_menu_set->p_reserved = p_shm; |
| 1398 |
p_menu_set->p_menu_pool = p_menu_set->p_reserved + MENU_SET_RESERVED_LENGTH; |
p_menu_set->p_menu_pool = (char *)(p_menu_set->p_reserved) + MENU_SET_RESERVED_LENGTH; |
| 1399 |
p_menu_set->p_menu_item_pool = p_menu_set->p_menu_pool + sizeof(MENU) * MAX_MENUS; |
p_menu_set->p_menu_item_pool = (char *)(p_menu_set->p_menu_pool) + sizeof(MENU) * MAX_MENUS; |
| 1400 |
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 = (char *)(p_menu_set->p_menu_item_pool) + sizeof(MENU_ITEM) * MAX_MENUITEMS; |
| 1401 |
p_menu_set->p_menu_screen_buf = p_menu_set->p_menu_screen_pool + sizeof(MENU_SCREEN) * MAX_MENUS; |
p_menu_set->p_menu_screen_buf = (char *)(p_menu_set->p_menu_screen_pool) + sizeof(MENU_SCREEN) * MAX_MENUS; |
| 1402 |
p_menu_set->p_menu_screen_buf_free = p_menu_set->p_menu_screen_buf; |
p_menu_set->p_menu_screen_buf_free = p_menu_set->p_menu_screen_buf; |
| 1403 |
|
|
| 1404 |
p_menu_set->choose_step = 0; |
p_menu_set->choose_step = 0; |