Introduce target-specific LDFLAGS, the same way we have CFLAGS for the target.
It seems to be helping gcc somewhat into telling the correct endianness to ld that sticks with little endian even when the target is big (eg armeb-unknown-linux-uclibcgnueabi).
There's still work to do, especially finish the gcc part that is not in this commit.
/trunk/scripts/functions | 9 7 2 0 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
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)
35 /* Clear 'residue' of last item */
36 wattrset(win, dlg.menubox.atr);
37 wmove(win, choice, 0);
38 for (i = 0; i < list_width; i++)
41 wmove(win, choice, check_x);
42 wattrset(win, selected ? dlg.check_selected.atr
44 wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
46 wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr);
47 mvwaddch(win, choice, item_x, item_str()[0]);
48 wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
49 waddstr(win, (char *)item_str() + 1);
51 wmove(win, choice, check_x + 1);
57 * Print the scroll indicators.
59 static void print_arrows(WINDOW * win, int choice, int item_no, int scroll,
60 int y, int x, int height)
65 wattrset(win, dlg.uarrow.atr);
66 waddch(win, ACS_UARROW);
69 wattrset(win, dlg.menubox.atr);
70 waddch(win, ACS_HLINE);
71 waddch(win, ACS_HLINE);
72 waddch(win, ACS_HLINE);
73 waddch(win, ACS_HLINE);
79 if ((height < item_no) && (scroll + choice < item_no - 1)) {
80 wattrset(win, dlg.darrow.atr);
81 waddch(win, ACS_DARROW);
84 wattrset(win, dlg.menubox_border.atr);
85 waddch(win, ACS_HLINE);
86 waddch(win, ACS_HLINE);
87 waddch(win, ACS_HLINE);
88 waddch(win, ACS_HLINE);
93 * Display the termination buttons
95 static void print_buttons(WINDOW * dialog, int height, int width, int selected)
97 int x = width / 2 - 11;
100 print_button(dialog, "Select", y, x, selected == 0);
101 print_button(dialog, " Help ", y, x + 14, selected == 1);
103 wmove(dialog, y, x + 1 + 14 * selected);
108 * Display a dialog box with a list of options that can be turned on or off
109 * in the style of radiolist (only one option turned on at a time).
111 int dialog_checklist(const char *title, const char *prompt, int height,
112 int width, int list_height)
114 int i, x, y, box_x, box_y;
115 int key = 0, button = 0, choice = 0, scroll = 0, max_choice;
116 WINDOW *dialog, *list;
118 /* which item to highlight */
120 if (item_is_tag('X'))
122 if (item_is_selected()) {
129 if (getmaxy(stdscr) < (height + 6))
130 return -ERRDISPLAYTOOSMALL;
131 if (getmaxx(stdscr) < (width + 6))
132 return -ERRDISPLAYTOOSMALL;
134 max_choice = MIN(list_height, item_count());
136 /* center dialog box on screen */
137 x = (COLS - width) / 2;
138 y = (LINES - height) / 2;
140 draw_shadow(stdscr, y, x, height, width);
142 dialog = newwin(height, width, y, x);
143 keypad(dialog, TRUE);
145 draw_box(dialog, 0, 0, height, width,
146 dlg.dialog.atr, dlg.border.atr);
147 wattrset(dialog, dlg.border.atr);
148 mvwaddch(dialog, height - 3, 0, ACS_LTEE);
149 for (i = 0; i < width - 2; i++)
150 waddch(dialog, ACS_HLINE);
151 wattrset(dialog, dlg.dialog.atr);
152 waddch(dialog, ACS_RTEE);
154 print_title(dialog, title, width);
156 wattrset(dialog, dlg.dialog.atr);
157 print_autowrap(dialog, prompt, width - 2, 1, 3);
159 list_width = width - 6;
160 box_y = height - list_height - 5;
161 box_x = (width - list_width) / 2 - 1;
163 /* create new window for the list */
164 list = subwin(dialog, list_height, list_width, y + box_y + 1,
169 /* draw a box around the list items */
170 draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2,
171 dlg.menubox_border.atr, dlg.menubox.atr);
173 /* Find length of longest item in order to center checklist */
176 check_x = MAX(check_x, strlen(item_str()) + 4);
178 check_x = (list_width - check_x) / 2;
179 item_x = check_x + 4;
181 if (choice >= list_height) {
182 scroll = choice - list_height + 1;
187 for (i = 0; i < max_choice; i++) {
188 item_set(scroll + i);
189 print_item(list, i, i == choice);
192 print_arrows(dialog, choice, item_count(), scroll,
193 box_y, box_x + check_x + 5, list_height);
195 print_buttons(dialog, height, width, 0);
197 wnoutrefresh(dialog);
201 while (key != KEY_ESC) {
202 key = wgetch(dialog);
204 for (i = 0; i < max_choice; i++) {
205 item_set(i + scroll);
206 if (toupper(key) == toupper(item_str()[0]))
210 if (i < max_choice || key == KEY_UP || key == KEY_DOWN ||
211 key == '+' || key == '-') {
212 if (key == KEY_UP || key == '-') {
216 /* Scroll list down */
217 if (list_height > 1) {
218 /* De-highlight current first item */
220 print_item(list, 0, FALSE);
221 scrollok(list, TRUE);
223 scrollok(list, FALSE);
227 print_item(list, 0, TRUE);
228 print_arrows(dialog, choice, item_count(),
229 scroll, box_y, box_x + check_x + 5, list_height);
231 wnoutrefresh(dialog);
234 continue; /* wait for another key press */
237 } else if (key == KEY_DOWN || key == '+') {
238 if (choice == max_choice - 1) {
239 if (scroll + choice >= item_count() - 1)
242 if (list_height > 1) {
243 /* De-highlight current last item before scrolling up */
244 item_set(scroll + max_choice - 1);
248 scrollok(list, TRUE);
250 scrollok(list, FALSE);
253 item_set(scroll + max_choice - 1);
254 print_item(list, max_choice - 1, TRUE);
256 print_arrows(dialog, choice, item_count(),
257 scroll, box_y, box_x + check_x + 5, list_height);
259 wnoutrefresh(dialog);
262 continue; /* wait for another key press */
267 /* De-highlight current item */
268 item_set(scroll + choice);
269 print_item(list, choice, FALSE);
270 /* Highlight new item */
272 item_set(scroll + choice);
273 print_item(list, choice, TRUE);
274 wnoutrefresh(dialog);
277 continue; /* wait for another key press */
290 item_set_selected(0);
291 item_set(scroll + choice);
292 item_set_selected(1);
299 button = ((key == KEY_LEFT ? --button : ++button) < 0)
300 ? 1 : (button > 1 ? 0 : button);
302 print_buttons(dialog, height, width, button);
310 key = on_key_esc(dialog);
319 /* Now, update everything... */
324 return key; /* ESC pressed */