]> git.decadent.org.uk Git - ap-utils.git/blob - lib/menu.c
Imported Upstream version 1.5.1~pre2
[ap-utils.git] / lib / menu.c
1 /*
2  *      menu.c from Access Point SNMP Utils for Linux
3  *
4  * Copyright (c) 2002 Roman Festchook <roma at polesye dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License Version 2 from
8  * June 1991 as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  */
20
21 #include <stdlib.h>
22 #include <unistd.h>
23 #include <menu.h>
24 #include <string.h>
25 #include "ap-utils.h"
26
27 extern WINDOW *sub_for_menu;
28 extern char set_oeminfo_allowed;
29
30 void uni_menu(struct umitems *umenu, int num)
31 {
32     ITEM **menu_item = calloc(num+1, sizeof(ITEM));
33     MENU *menu;
34     char item_tmp[num][MCOLS];
35     unsigned short int idx;
36     int c;
37
38     for (idx = 0; idx < num-1; idx++) {
39         strncpy(item_tmp[idx], umenu[idx].item, MCOLS-1);
40         item_tmp[idx][MCOLS-3]='\0';
41         menu_item[idx] = new_item(item_tmp[idx], 0);
42     }
43
44     menu = new_menu(menu_item);
45
46     set_menu_opts(menu, O_ONEVALUE);
47
48     curs_set(0);
49
50     post_menu(menu);
51
52     print_help(umenu[0].help);
53
54     while (1) {
55         wrefresh(sub_for_menu);
56         switch (getch()) {
57         case KEY_DOWN:
58         case 'j':
59         case 'J':
60             menu_driver(menu, REQ_NEXT_ITEM);
61             break;
62         case KEY_RIGHT:
63         case 'l':
64         case 'L':
65             menu_driver(menu, REQ_LAST_ITEM);
66             break;
67         case KEY_LEFT:
68         case 'h':
69         case 'H':
70             menu_driver(menu, REQ_FIRST_ITEM);
71             break;
72         case KEY_UP:
73         case 'k':
74         case 'K':    
75             menu_driver(menu, REQ_PREV_ITEM);
76             break;
77         case KEY_PPAGE:
78         case KEY_HOME:
79             menu_driver(menu, REQ_FIRST_ITEM);
80             break;
81         case KEY_NPAGE:
82         case KEY_END:
83             menu_driver(menu, REQ_LAST_ITEM);
84             break;
85         case 'q':
86         case 'Q':
87             idx = num - 2;
88             goto quitmenu;
89         case 's':
90         case 'S':
91             if (set_oeminfo_allowed) {
92                 set_menu_mark(menu, " ");
93                 set_menu_fore(menu, A_NORMAL);
94                 wrefresh(sub_for_menu);
95                 atmel_set_oeminfo();
96                 set_menu_mark(menu, "-");
97                 set_menu_fore(menu, A_STANDOUT);
98             }
99             break;
100         /* Enter */
101         case 10:
102             idx = item_index(current_item(menu));
103 quitmenu:
104             if (idx == num - 2) {
105                 unpost_menu(menu);
106                 free_menu(menu);
107                 for (c = 0; c < num; c++)
108                     free_item(menu_item[c]);
109                 if (umenu[idx].func) 
110                     umenu[idx].func();
111                 else {
112                     free(menu_item);
113                     return;
114                 }
115             }
116             if (umenu[idx].is_menu)
117                 unpost_menu(menu);
118
119             umenu[idx].func();
120
121             if (umenu[idx].is_menu)
122                 post_menu(menu);
123
124             break;
125         default:
126             continue;           
127         }    
128         print_help(umenu[item_index(current_item(menu))].help);
129     }
130 }