scripts/addToolsVersion: properly handle .in vs. .in.2
While most components have their version in the .in file, some
have it in the .in.2 (eg. elf2flt).
Currently, to handle this case, we indiscriminately munge both files,
but this is wrong: in the elf2flt case, if we add a binutils version,
we do not want it to be added to elf2flt, and conversely.
So, for each tool, we need to explicitly know what file to munge.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
2 * checklist.c -- implements the checklist box
4 * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
5 * Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
6 * Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
7 * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 static int list_width, check_x, item_x;
31 static void print_item(WINDOW * win, int choice, int selected)
34 char *list_item = malloc(list_width + 1);
36 strncpy(list_item, item_str(), list_width - item_x);
37 list_item[list_width - item_x] = '\0';
39 /* Clear 'residue' of last item */
40 wattrset(win, dlg.menubox.atr);
41 wmove(win, choice, 0);
42 for (i = 0; i < list_width; i++)
45 wmove(win, choice, check_x);
46 wattrset(win, selected ? dlg.check_selected.atr
48 if (!item_is_tag(':'))
49 wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
51 wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr);
52 mvwaddch(win, choice, item_x, list_item[0]);
53 wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
54 waddstr(win, list_item + 1);
56 wmove(win, choice, check_x + 1);
63 * Print the scroll indicators.
65 static void print_arrows(WINDOW * win, int choice, int item_no, int scroll,
66 int y, int x, int height)
71 wattrset(win, dlg.uarrow.atr);
72 waddch(win, ACS_UARROW);
75 wattrset(win, dlg.menubox.atr);
76 waddch(win, ACS_HLINE);
77 waddch(win, ACS_HLINE);
78 waddch(win, ACS_HLINE);
79 waddch(win, ACS_HLINE);
85 if ((height < item_no) && (scroll + choice < item_no - 1)) {
86 wattrset(win, dlg.darrow.atr);
87 waddch(win, ACS_DARROW);
90 wattrset(win, dlg.menubox_border.atr);
91 waddch(win, ACS_HLINE);
92 waddch(win, ACS_HLINE);
93 waddch(win, ACS_HLINE);
94 waddch(win, ACS_HLINE);
99 * Display the termination buttons
101 static void print_buttons(WINDOW * dialog, int height, int width, int selected)
103 int x = width / 2 - 11;
106 print_button(dialog, gettext("Select"), y, x, selected == 0);
107 print_button(dialog, gettext(" Help "), y, x + 14, selected == 1);
109 wmove(dialog, y, x + 1 + 14 * selected);
114 * Display a dialog box with a list of options that can be turned on or off
115 * in the style of radiolist (only one option turned on at a time).
117 int dialog_checklist(const char *title, const char *prompt, int height,
118 int width, int list_height)
120 int i, x, y, box_x, box_y;
121 int key = 0, button = 0, choice = 0, scroll = 0, max_choice;
122 WINDOW *dialog, *list;
124 /* which item to highlight */
126 if (item_is_tag('X'))
128 if (item_is_selected()) {
135 if (getmaxy(stdscr) < (height + 6))
136 return -ERRDISPLAYTOOSMALL;
137 if (getmaxx(stdscr) < (width + 6))
138 return -ERRDISPLAYTOOSMALL;
140 max_choice = MIN(list_height, item_count());
142 /* center dialog box on screen */
143 x = (COLS - width) / 2;
144 y = (LINES - height) / 2;
146 draw_shadow(stdscr, y, x, height, width);
148 dialog = newwin(height, width, y, x);
149 keypad(dialog, TRUE);
151 draw_box(dialog, 0, 0, height, width,
152 dlg.dialog.atr, dlg.border.atr);
153 wattrset(dialog, dlg.border.atr);
154 mvwaddch(dialog, height - 3, 0, ACS_LTEE);
155 for (i = 0; i < width - 2; i++)
156 waddch(dialog, ACS_HLINE);
157 wattrset(dialog, dlg.dialog.atr);
158 waddch(dialog, ACS_RTEE);
160 print_title(dialog, title, width);
162 wattrset(dialog, dlg.dialog.atr);
163 print_autowrap(dialog, prompt, width - 2, 1, 3);
165 list_width = width - 6;
166 box_y = height - list_height - 5;
167 box_x = (width - list_width) / 2 - 1;
169 /* create new window for the list */
170 list = subwin(dialog, list_height, list_width, y + box_y + 1,
175 /* draw a box around the list items */
176 draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2,
177 dlg.menubox_border.atr, dlg.menubox.atr);
179 /* Find length of longest item in order to center checklist */
182 check_x = MAX(check_x, strlen(item_str()) + 4);
183 check_x = MIN(check_x, list_width);
185 check_x = (list_width - check_x) / 2;
186 item_x = check_x + 4;
188 if (choice >= list_height) {
189 scroll = choice - list_height + 1;
194 for (i = 0; i < max_choice; i++) {
195 item_set(scroll + i);
196 print_item(list, i, i == choice);
199 print_arrows(dialog, choice, item_count(), scroll,
200 box_y, box_x + check_x + 5, list_height);
202 print_buttons(dialog, height, width, 0);
204 wnoutrefresh(dialog);
208 while (key != KEY_ESC) {
209 key = wgetch(dialog);
211 for (i = 0; i < max_choice; i++) {
212 item_set(i + scroll);
213 if (toupper(key) == toupper(item_str()[0]))
217 if (i < max_choice || key == KEY_UP || key == KEY_DOWN ||
218 key == '+' || key == '-') {
219 if (key == KEY_UP || key == '-') {
223 /* Scroll list down */
224 if (list_height > 1) {
225 /* De-highlight current first item */
227 print_item(list, 0, FALSE);
228 scrollok(list, TRUE);
230 scrollok(list, FALSE);
234 print_item(list, 0, TRUE);
235 print_arrows(dialog, choice, item_count(),
236 scroll, box_y, box_x + check_x + 5, list_height);
238 wnoutrefresh(dialog);
241 continue; /* wait for another key press */
244 } else if (key == KEY_DOWN || key == '+') {
245 if (choice == max_choice - 1) {
246 if (scroll + choice >= item_count() - 1)
249 if (list_height > 1) {
250 /* De-highlight current last item before scrolling up */
251 item_set(scroll + max_choice - 1);
255 scrollok(list, TRUE);
257 scrollok(list, FALSE);
260 item_set(scroll + max_choice - 1);
261 print_item(list, max_choice - 1, TRUE);
263 print_arrows(dialog, choice, item_count(),
264 scroll, box_y, box_x + check_x + 5, list_height);
266 wnoutrefresh(dialog);
269 continue; /* wait for another key press */
274 /* De-highlight current item */
275 item_set(scroll + choice);
276 print_item(list, choice, FALSE);
277 /* Highlight new item */
279 item_set(scroll + choice);
280 print_item(list, choice, TRUE);
281 wnoutrefresh(dialog);
284 continue; /* wait for another key press */
297 item_set_selected(0);
298 item_set(scroll + choice);
299 item_set_selected(1);
306 button = ((key == KEY_LEFT ? --button : ++button) < 0)
307 ? 1 : (button > 1 ? 0 : button);
309 print_buttons(dialog, height, width, button);
317 key = on_key_esc(dialog);
326 /* Now, update everything... */
331 return key; /* ESC pressed */