| 75 |
if (ireg ("^%menu ([A-Za-z0-9_]+)", buffer, 2, pmatch) == 0) |
if (ireg ("^%menu ([A-Za-z0-9_]+)", buffer, 2, pmatch) == 0) |
| 76 |
{ |
{ |
| 77 |
p_menu_set->p_menu[i] = malloc (sizeof (MENU)); |
p_menu_set->p_menu[i] = malloc (sizeof (MENU)); |
| 78 |
|
p_menu_set->p_menu[i]->title.show = 0; |
| 79 |
|
p_menu_set->p_menu[i]->screen.show = 0; |
| 80 |
|
|
| 81 |
strncpy (p_menu_set->p_menu[i]->name, |
strncpy (p_menu_set->p_menu[i]->name, |
| 82 |
buffer + pmatch[1].rm_so, |
buffer + pmatch[1].rm_so, |
| 203 |
"[[:space:]]*([0-9]+),[[:space:]]*\"([^\"]+)\"", |
"[[:space:]]*([0-9]+),[[:space:]]*\"([^\"]+)\"", |
| 204 |
buffer, 4, pmatch) == 0) |
buffer, 4, pmatch) == 0) |
| 205 |
{ |
{ |
| 206 |
|
p_menu_set->p_menu[i]->title.show = 1; |
| 207 |
strncpy (temp, |
strncpy (temp, |
| 208 |
buffer + pmatch[1].rm_so, |
buffer + pmatch[1].rm_so, |
| 209 |
pmatch[1].rm_eo - pmatch[1].rm_so); |
pmatch[1].rm_eo - pmatch[1].rm_so); |
| 226 |
"[[:space:]]*([0-9]+),[[:space:]]*S_([A-Za-z0-9_]+)", |
"[[:space:]]*([0-9]+),[[:space:]]*S_([A-Za-z0-9_]+)", |
| 227 |
buffer, 4, pmatch) == 0) |
buffer, 4, pmatch) == 0) |
| 228 |
{ |
{ |
| 229 |
|
p_menu_set->p_menu[i]->screen.show = 1; |
| 230 |
strncpy (temp, |
strncpy (temp, |
| 231 |
buffer + pmatch[1].rm_so, |
buffer + pmatch[1].rm_so, |
| 232 |
pmatch[1].rm_eo - pmatch[1].rm_so); |
pmatch[1].rm_eo - pmatch[1].rm_so); |
| 293 |
if (p_menu == NULL) |
if (p_menu == NULL) |
| 294 |
return -1; |
return -1; |
| 295 |
|
|
| 296 |
show_top (p_menu->title.text); |
if (p_menu->title.show) |
| 297 |
|
show_top (p_menu->title.text); |
| 298 |
|
|
| 299 |
moveto (p_menu->screen.row, p_menu->screen.col); |
if (p_menu->screen.show) |
| 300 |
if (display_file (p_menu->screen.filename) != 0) |
{ |
| 301 |
log_error ("Display menu screen <%s> failed!\n", p_menu->screen.filename); |
moveto (p_menu->screen.row, p_menu->screen.col); |
| 302 |
|
if (display_file (p_menu->screen.filename) != 0) |
| 303 |
|
log_error ("Display menu screen <%s> failed!\n", |
| 304 |
|
p_menu->screen.filename); |
| 305 |
|
} |
| 306 |
|
|
| 307 |
row = p_menu->items[0]->row; |
row = p_menu->items[0]->row; |
| 308 |
col = p_menu->items[0]->col; |
col = p_menu->items[0]->col; |
| 310 |
for (i = 0; i < p_menu->item_count; i++) |
for (i = 0; i < p_menu->item_count; i++) |
| 311 |
{ |
{ |
| 312 |
if (checkpriv (&BBS_priv, 0, p_menu->items[i]->priv) == 0 |
if (checkpriv (&BBS_priv, 0, p_menu->items[i]->priv) == 0 |
| 313 |
|| checklevel (&BBS_priv, p_menu->items[i]->level) == 0) |
|| checklevel (&BBS_priv, p_menu->items[i]->level) == 0) |
| 314 |
{ |
{ |
| 315 |
p_menu->items[i]->display = 0; |
p_menu->items[i]->display = 0; |
| 316 |
} |
} |
| 397 |
display_menu_cursor (p_menu, 0); |
display_menu_cursor (p_menu, 0); |
| 398 |
p_menu->item_cur_pos = p_menu->item_count - 1; |
p_menu->item_cur_pos = p_menu->item_count - 1; |
| 399 |
while (!p_menu->items[p_menu->item_cur_pos]->display |
while (!p_menu->items[p_menu->item_cur_pos]->display |
| 400 |
|| p_menu->items[p_menu->item_cur_pos]->priv != 0 |
|| p_menu->items[p_menu->item_cur_pos]->priv != 0 |
| 401 |
|| p_menu->items[p_menu->item_cur_pos]->level != 0) |
|| p_menu->items[p_menu->item_cur_pos]->level != 0) |
| 402 |
p_menu->item_cur_pos--; |
p_menu->item_cur_pos--; |
| 403 |
display_menu_cursor (p_menu, 1); |
display_menu_cursor (p_menu, 1); |
| 404 |
break; |
break; |
| 428 |
default: |
default: |
| 429 |
for (i = 0; i < p_menu->item_count; i++) |
for (i = 0; i < p_menu->item_count; i++) |
| 430 |
{ |
{ |
| 431 |
if (toupper (key) == toupper (p_menu->items[i]->name[0])) |
if (key == p_menu->items[i]->name[0]) |
| 432 |
{ |
{ |
| 433 |
display_menu_cursor (p_menu, 0); |
display_menu_cursor (p_menu, 0); |
| 434 |
p_menu->item_cur_pos = i; |
p_menu->item_cur_pos = i; |
| 435 |
display_menu_cursor (p_menu, 1); |
display_menu_cursor (p_menu, 1); |
| 436 |
break; |
return ""; |
| 437 |
|
} |
| 438 |
|
} |
| 439 |
|
if (isalpha (key)) |
| 440 |
|
{ |
| 441 |
|
for (i = 0; i < p_menu->item_count; i++) |
| 442 |
|
{ |
| 443 |
|
if (toupper (key) == toupper (p_menu->items[i]->name[0])) |
| 444 |
|
{ |
| 445 |
|
display_menu_cursor (p_menu, 0); |
| 446 |
|
p_menu->item_cur_pos = i; |
| 447 |
|
display_menu_cursor (p_menu, 1); |
| 448 |
|
return ""; |
| 449 |
|
} |
| 450 |
} |
} |
| 451 |
} |
} |
| 452 |
} |
} |
| 453 |
|
|
| 454 |
return ""; |
return ""; |
| 455 |
} |
} |
| 456 |
|
|
| 457 |
|
void |
| 458 |
|
unload_menu (MENU_SET * p_menu_set) |
| 459 |
|
{ |
| 460 |
|
MENU *p_menu; |
| 461 |
|
MENU_ITEM *p_menuitem; |
| 462 |
|
int i, j; |
| 463 |
|
|
| 464 |
|
for (i = 0; i < p_menu_set->menu_count; i++) |
| 465 |
|
{ |
| 466 |
|
p_menu = p_menu_set->p_menu[i]; |
| 467 |
|
for (j = 0; j < p_menu->item_count; j++) |
| 468 |
|
{ |
| 469 |
|
free (p_menu->items[j]); |
| 470 |
|
} |
| 471 |
|
free (p_menu); |
| 472 |
|
} |
| 473 |
|
|
| 474 |
|
p_menu_set->menu_count = 0; |
| 475 |
|
p_menu_set->menu_select_depth = 0; |
| 476 |
|
} |