2 * This file is part of the bayou project.
4 * Copyright (C) 2008 Advanced Micro Devices, Inc.
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 as
8 * published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful,
11 * but 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.
16 #include <libpayload.h>
23 static int menu_width
= 0;
24 static struct payload
*mpayloads
[BAYOU_MAX_ENTRIES
];
25 static int m_entries
= 0;
26 static unsigned int selected
= 0;
27 static WINDOW
*menuwin
, *status
;
29 void create_menu(void)
33 for (i
= 0; i
< bayoucfg
.n_entries
; i
++) {
34 struct payload
*p
= &(bayoucfg
.entries
[i
]);
37 if ((p
->pentry
.parent
!= 0) ||
38 (p
->pentry
.flags
& BPT_FLAG_NOSHOW
))
41 mpayloads
[m_entries
++] = p
;
43 name
= payload_get_name(p
);
45 if (strlen(name
) > menu_width
)
46 menu_width
= strlen(name
);
54 menuwin
= newwin(m_entries
+ 3, menu_width
,
55 (SCREEN_Y
- (m_entries
+ 3)) / 2,
56 (SCREEN_X
- menu_width
) / 2);
64 wattrset(menuwin
, COLOR_PAIR(3));
66 wborder(menuwin
, ACS_VLINE
, ACS_VLINE
, ACS_HLINE
, ACS_HLINE
,
67 ACS_ULCORNER
, ACS_URCORNER
, ACS_LLCORNER
, ACS_LRCORNER
);
69 wattrset(menuwin
, COLOR_PAIR(4) | A_BOLD
);
70 mvwprintw(menuwin
, 0, (menu_width
- 17) / 2, " Payload Chooser ");
72 wattrset(menuwin
, COLOR_PAIR(3));
74 for (i
= 0; i
< m_entries
; i
++) {
75 char *name
= payload_get_name(mpayloads
[i
]);
76 int col
= (menu_width
- (2 + strlen(name
))) / 2;
79 wattrset(menuwin
, COLOR_PAIR(5) | A_BOLD
);
81 wattrset(menuwin
, COLOR_PAIR(3));
83 mvwprintw(menuwin
, 2 + i
, col
, name
);
86 s
= mpayloads
[selected
];
90 if (s
->params
[BAYOU_PARAM_DESC
] != NULL
) {
92 int len
= strnlen(s
->params
[BAYOU_PARAM_DESC
], 65);
94 snprintf(buf
, 65, s
->params
[BAYOU_PARAM_DESC
]);
97 mvwprintw(status
, 0, (80 - len
) / 2, buf
);
115 selected
= (selected
+ 1) % m_entries
;
116 else if (key
== KEY_UP
)
117 selected
= (selected
- 1) % m_entries
;
118 else if (key
== KEY_ENTER
) {
119 run_payload(mpayloads
[selected
]);
133 init_pair(1, COLOR_WHITE
, COLOR_RED
);
134 init_pair(2, COLOR_BLACK
, COLOR_WHITE
);
135 init_pair(3, COLOR_BLACK
, COLOR_WHITE
);
136 init_pair(4, COLOR_CYAN
, COLOR_WHITE
);
137 init_pair(5, COLOR_WHITE
, COLOR_RED
);
139 wattrset(stdscr
, COLOR_PAIR(1));
142 status
= newwin(1, 80, 24, 0);
143 wattrset(status
, COLOR_PAIR(2));