Linux node5458.myfcloud.com 6.10.2-x86_64-linode165 #1 SMP PREEMPT_DYNAMIC Tue Jul 30 15:03:21 EDT 2024 x86_64
Apache
: 45.79.123.194 | : 18.225.92.173
16 Domain
7.4.33
addify5
shells.trxsecurity.org
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
Backdoor Scanner
Backdoor Create
Alfa Webshell
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
usr /
share /
doc /
ncurses-devel-5.9 /
test /
[ HOME SHELL ]
Name
Size
Permission
Action
package
[ DIR ]
drwxr-xr-x
Makefile.in
4.92
KB
-rw-r--r--
README
35.89
KB
-rw-r--r--
aclocal.m4
108.83
KB
-rw-r--r--
background.c
6.84
KB
-rw-r--r--
blue.c
12.4
KB
-rw-r--r--
bs.6
3.91
KB
-rw-r--r--
bs.c
29.95
KB
-rw-r--r--
bulgarian-utf8.txt
340
B
-rw-r--r--
cardfile.c
13.26
KB
-rw-r--r--
cardfile.dat
394
B
-rw-r--r--
chgat.c
9.03
KB
-rw-r--r--
clip_printw.c
9.1
KB
-rw-r--r--
color_name.h
3.32
KB
-rw-r--r--
color_set.c
3.25
KB
-rw-r--r--
configure
449.42
KB
-rw-r--r--
configure.in
9.57
KB
-rw-r--r--
demo_altkeys.c
4.77
KB
-rw-r--r--
demo_defkey.c
7.4
KB
-rw-r--r--
demo_forms.c
13.01
KB
-rw-r--r--
demo_keyok.c
3.24
KB
-rw-r--r--
demo_menus.c
18.74
KB
-rw-r--r--
demo_panels.c
16.89
KB
-rw-r--r--
demo_termcap.c
10.09
KB
-rw-r--r--
demo_terminfo.c
10.05
KB
-rw-r--r--
ditto.c
11.04
KB
-rw-r--r--
dots.c
4.52
KB
-rw-r--r--
dots_mvcur.c
4.66
KB
-rw-r--r--
echochar.c
4.35
KB
-rw-r--r--
edit_field.c
11.21
KB
-rw-r--r--
edit_field.h
2.57
KB
-rw-r--r--
filter.c
4.97
KB
-rw-r--r--
firework.c
5.53
KB
-rw-r--r--
firstlast.c
3.72
KB
-rw-r--r--
foldkeys.c
7.44
KB
-rw-r--r--
gdc.6
3.03
KB
-rw-r--r--
gdc.c
8.74
KB
-rw-r--r--
hanoi.c
8.58
KB
-rw-r--r--
hashtest.c
6.58
KB
-rw-r--r--
inch_wide.c
7.21
KB
-rw-r--r--
inchs.c
7.15
KB
-rw-r--r--
ins_wide.c
12.25
KB
-rw-r--r--
insdelln.c
9.16
KB
-rw-r--r--
inserts.c
10.62
KB
-rw-r--r--
install-sh
6.96
KB
-rw-r--r--
key_names.c
3.22
KB
-rw-r--r--
keynames.c
3.07
KB
-rw-r--r--
knight.c
18.54
KB
-rw-r--r--
linedata.h
3.16
KB
-rw-r--r--
linux-color.dat
2.56
KB
-rw-r--r--
listused.sh
5.46
KB
-rw-r--r--
lrtest.c
5.24
KB
-rw-r--r--
make-tar.sh
4.8
KB
-rw-r--r--
mk-test.awk
4.42
KB
-rw-r--r--
modules
5.07
KB
-rw-r--r--
movewindow.c
16.44
KB
-rw-r--r--
ncurses.c
154.98
KB
-rw-r--r--
ncurses_tst.hin
2.88
KB
-rw-r--r--
newdemo.c
7.38
KB
-rw-r--r--
programs
5.28
KB
-rw-r--r--
railroad.c
5.66
KB
-rw-r--r--
rain.c
8.44
KB
-rw-r--r--
redraw.c
4.66
KB
-rw-r--r--
savescreen.c
7.49
KB
-rw-r--r--
savescreen.sh
2.66
KB
-rw-r--r--
tclock.c
5.26
KB
-rw-r--r--
test.priv.h
19.55
KB
-rw-r--r--
test_add_wchstr.c
14.08
KB
-rw-r--r--
test_addchstr.c
12.14
KB
-rw-r--r--
test_addstr.c
10.3
KB
-rw-r--r--
test_addwstr.c
12.37
KB
-rw-r--r--
test_arrays.c
3.83
KB
-rw-r--r--
test_get_wstr.c
8.94
KB
-rw-r--r--
test_getstr.c
8.88
KB
-rw-r--r--
test_instr.c
6.49
KB
-rw-r--r--
test_inwstr.c
6.69
KB
-rw-r--r--
test_opaque.c
10.42
KB
-rw-r--r--
test_vid_puts.c
3.97
KB
-rw-r--r--
test_vidputs.c
3.92
KB
-rw-r--r--
testaddch.c
3.46
KB
-rw-r--r--
testcurs.c
16.69
KB
-rw-r--r--
testscanw.c
2.88
KB
-rw-r--r--
tracemunch
5.01
KB
-rw-r--r--
view.c
13.84
KB
-rw-r--r--
widechars-utf8.txt
389
B
-rw-r--r--
widechars.h
3.19
KB
-rw-r--r--
worm.c
14.01
KB
-rw-r--r--
xmas.c
33.47
KB
-rw-r--r--
xterm-16color.dat
2.99
KB
-rw-r--r--
xterm-256color.dat
6.88
KB
-rw-r--r--
xterm-88color.dat
4.11
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : demo_menus.c
/**************************************************************************** * Copyright (c) 2005-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: demo_menus.c,v 1.37 2012/11/18 00:18:54 tom Exp $ * * Demonstrate a variety of functions from the menu library. * Thomas Dickey - 2005/4/9 */ /* item_description - item_init - item_opts - item_opts_off - item_opts_on - item_term - item_userptr - item_visible - menu_back - menu_fore - menu_format - menu_grey - menu_init - menu_opts - menu_pad - menu_request_by_name - menu_request_name - menu_sub - menu_term - menu_userptr - set_current_item - set_item_init - set_item_opts - set_item_term - set_item_userptr - set_menu_grey - set_menu_init - set_menu_items - set_menu_opts - set_menu_pad - set_menu_pattern - set_menu_spacing - set_menu_term - set_menu_userptr - set_top_row - top_row - */ #include <test.priv.h> #if USE_LIBMENU #include <menu.h> #include <sys/types.h> #include <sys/stat.h> #ifdef NCURSES_VERSION #ifdef TRACE static unsigned save_trace = TRACE_ORDINARY | TRACE_CALLS; extern unsigned _nc_tracing; static MENU *mpTrace; #endif #else #undef TRACE #endif typedef enum { eBanner = -1 ,eFile ,eSelect #ifdef TRACE ,eTrace #endif ,eMAX } MenuNo; #define okMenuNo(n) (((n) > eBanner) && ((n) < eMAX)) #define MENU_Y 1 static MENU *mpBanner; static MENU *mpFile; static MENU *mpSelect; static bool loaded_file = FALSE; /* Common function to allow ^T to toggle trace-mode in the middle of a test * so that trace-files can be made smaller. */ static int wGetchar(WINDOW *win) { int c; #ifdef TRACE while ((c = wgetch(win)) == CTRL('T')) { if (_nc_tracing) { save_trace = _nc_tracing; Trace(("TOGGLE-TRACING OFF")); _nc_tracing = 0; } else { _nc_tracing = save_trace; } trace(_nc_tracing); if (_nc_tracing) Trace(("TOGGLE-TRACING ON")); } #else c = wgetch(win); #endif return c; } #define Getchar() wGetchar(stdscr) static int menu_virtualize(int c) { int result; if (c == '\n' || c == KEY_EXIT) result = (MAX_COMMAND + 1); else if (c == 'u') result = (REQ_SCR_ULINE); else if (c == 'd') result = (REQ_SCR_DLINE); else if (c == 'b' || c == KEY_NPAGE) result = (REQ_SCR_UPAGE); else if (c == 'f' || c == KEY_PPAGE) result = (REQ_SCR_DPAGE); else if (c == 'l' || c == KEY_LEFT || c == KEY_BTAB) result = (REQ_LEFT_ITEM); else if (c == 'n' || c == KEY_DOWN) result = (REQ_NEXT_ITEM); else if (c == 'p' || c == KEY_UP) result = (REQ_PREV_ITEM); else if (c == 'r' || c == KEY_RIGHT || c == '\t') result = (REQ_RIGHT_ITEM); else if (c == ' ') result = (REQ_TOGGLE_ITEM); else { if (c != KEY_MOUSE) beep(); result = (c); } return result; } static int menu_getc(MENU * m) { return wGetchar(menu_win(m)); } static int menu_offset(MenuNo number) { int result = 0; if (okMenuNo(number)) { int spc_desc, spc_rows, spc_cols; #ifdef NCURSES_VERSION menu_spacing(mpBanner, &spc_desc, &spc_rows, &spc_cols); #else spc_rows = 0; #endif /* FIXME: MENU.itemlen seems the only way to get actual width of items */ result = (number - (eBanner + 1)) * (menu_itemwidth(mpBanner) + spc_rows); } return result; } static MENU * menu_create(ITEM ** items, int count, int ncols, MenuNo number) { MENU *result; WINDOW *menuwin; int mrows, mcols; int y = okMenuNo(number) ? MENU_Y : 0; int x = menu_offset(number); int margin = (y == MENU_Y) ? 1 : 0; int maxcol = (ncols + x) < COLS ? ncols : (COLS - x - 1); int maxrow = (count + 1) / ncols; if ((maxrow + y) >= (LINES - 4)) maxrow = LINES - 4 - y; result = new_menu(items); if (has_colors()) { set_menu_fore(result, (chtype) COLOR_PAIR(1)); set_menu_back(result, (chtype) COLOR_PAIR(2)); } set_menu_format(result, maxrow, maxcol); scale_menu(result, &mrows, &mcols); if (mcols + (2 * margin + x) >= COLS) mcols = COLS - (2 * margin + x); #ifdef TRACE if (number == eTrace) menu_opts_off(result, O_ONEVALUE); else menu_opts_on(result, O_ONEVALUE); #endif menuwin = newwin(mrows + (2 * margin), mcols + (2 * margin), y, x); set_menu_win(result, menuwin); keypad(menuwin, TRUE); if (margin) box(menuwin, 0, 0); set_menu_sub(result, derwin(menuwin, mrows, mcols, margin, margin)); post_menu(result); return result; } static void menu_destroy(MENU * m) { int count; Trace(("menu_destroy %p", (void *) m)); if (m != 0) { ITEM **items = menu_items(m); const char *blob = 0; count = item_count(m); Trace(("menu_destroy %p count %d", (void *) m, count)); if ((count > 0) && (m == mpSelect)) { blob = item_name(*items); } unpost_menu(m); free_menu(m); /* free the extra data allocated in build_select_menu() */ if ((count > 0) && (m == mpSelect)) { if (blob && loaded_file) { Trace(("freeing blob %p", blob)); free((char *) blob); } free(items); items = 0; } #ifdef TRACE if ((count > 0) && (m == mpTrace)) { ITEM **ip = items; if (ip != 0) { while (*ip) free(*ip++); } } #endif } } /* force the given menu to appear */ static void menu_display(MENU * m) { touchwin(menu_win(m)); wrefresh(menu_win(m)); } /*****************************************************************************/ static void build_file_menu(MenuNo number) { static CONST_MENUS char *labels[] = { "Exit", (char *) 0 }; static ITEM *items[SIZEOF(labels)]; ITEM **ip = items; CONST_MENUS char **ap; for (ap = labels; *ap; ap++) *ip++ = new_item(*ap, ""); *ip = (ITEM *) 0; mpFile = menu_create(items, SIZEOF(labels) - 1, 1, number); } static int perform_file_menu(int cmd) { return menu_driver(mpFile, cmd); } /*****************************************************************************/ static void build_select_menu(MenuNo number, char *filename) { static CONST_MENUS char *labels[] = { "Lions", "Tigers", "Bears", "(Oh my!)", "Newts", "Platypi", "Lemurs", "(Oh really?!)", "Leopards", "Panthers", "Pumas", "Lions, Tigers, Bears, (Oh my!), Newts, Platypi, Lemurs", "Lions, Tigers, Bears, (Oh my!), Newts, Platypi, Lemurs, Lions, Tigers, Bears, (Oh my!), Newts, Platypi, Lemurs", (char *) 0 }; static ITEM **items; ITEM **ip; CONST_MENUS char **ap = 0; CONST_MENUS char **myList = 0; unsigned count = 0; if (filename != 0) { struct stat sb; if (stat(filename, &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFREG && sb.st_size != 0) { size_t size = (size_t) sb.st_size; unsigned j, k; char *blob = typeMalloc(char, size + 1); CONST_MENUS char **list = typeCalloc(CONST_MENUS char *, size + 1); items = typeCalloc(ITEM *, size + 1); Trace(("build_select_menu blob=%p, items=%p", (void *) blob, (void *) items)); if (blob != 0 && list != 0) { FILE *fp = fopen(filename, "r"); if (fp != 0) { if (fread(blob, sizeof(char), size, fp) == size) { bool mark = TRUE; for (j = k = 0; j < size; ++j) { if (mark) { list[k++] = blob + j; mark = FALSE; } if (blob[j] == '\n') { blob[j] = '\0'; if (k > 0 && *list[k - 1] == '\0') --k; mark = TRUE; } else if (blob[j] == '\t') { blob[j] = ' '; /* menu items are printable */ } } list[k] = 0; count = k; ap = myList = list; } fclose(fp); } loaded_file = TRUE; } if (ap == 0) free(items); } } if (ap == 0) { count = SIZEOF(labels) - 1; items = typeCalloc(ITEM *, count + 1); ap = labels; } ip = items; while (*ap != 0) *ip++ = new_item(*ap++, ""); *ip = 0; mpSelect = menu_create(items, (int) count, 1, number); if (myList != 0) free(myList); } static int perform_select_menu(int cmd) { return menu_driver(mpSelect, cmd); } /*****************************************************************************/ #ifdef TRACE #define T_TBL(name) { #name, name } static struct { const char *name; unsigned mask; } t_tbl[] = { T_TBL(TRACE_DISABLE), T_TBL(TRACE_TIMES), T_TBL(TRACE_TPUTS), T_TBL(TRACE_UPDATE), T_TBL(TRACE_MOVE), T_TBL(TRACE_CHARPUT), T_TBL(TRACE_ORDINARY), T_TBL(TRACE_CALLS), T_TBL(TRACE_VIRTPUT), T_TBL(TRACE_IEVENT), T_TBL(TRACE_BITS), T_TBL(TRACE_ICALLS), T_TBL(TRACE_CCALLS), T_TBL(TRACE_DATABASE), T_TBL(TRACE_ATTRS), T_TBL(TRACE_MAXIMUM), { (char *) 0, 0 } }; static void build_trace_menu(MenuNo number) { static ITEM *items[SIZEOF(t_tbl)]; ITEM **ip = items; int n; for (n = 0; t_tbl[n].name != 0; n++) *ip++ = new_item(t_tbl[n].name, ""); *ip = (ITEM *) 0; mpTrace = menu_create(items, SIZEOF(t_tbl) - 1, 2, number); } static char * tracetrace(unsigned tlevel) { static char *buf; int n; if (buf == 0) { size_t need = 12; for (n = 0; t_tbl[n].name != 0; n++) need += strlen(t_tbl[n].name) + 2; buf = typeMalloc(char, need); } sprintf(buf, "0x%02x = {", tlevel); if (tlevel == 0) { sprintf(buf + strlen(buf), "%s, ", t_tbl[0].name); } else { for (n = 1; t_tbl[n].name != 0; n++) if ((tlevel & t_tbl[n].mask) == t_tbl[n].mask) { strcat(buf, t_tbl[n].name); strcat(buf, ", "); } } if (buf[strlen(buf) - 2] == ',') buf[strlen(buf) - 2] = '\0'; return (strcat(buf, "}")); } /* fake a dynamically reconfigurable menu using the 0th entry to deselect * the others */ static bool update_trace_menu(MENU * m) { ITEM **items; ITEM *i, **p; bool changed = FALSE; items = menu_items(m); i = current_item(m); if (i == items[0]) { if (item_value(i)) { for (p = items + 1; *p != 0; p++) if (item_value(*p)) { set_item_value(*p, FALSE); changed = TRUE; } } } return changed; } static int perform_trace_menu(int cmd) /* interactively set the trace level */ { ITEM **ip; unsigned newtrace; int result; for (ip = menu_items(mpTrace); *ip; ip++) { unsigned mask = t_tbl[item_index(*ip)].mask; if (mask == 0) set_item_value(*ip, _nc_tracing == 0); else if ((mask & _nc_tracing) == mask) set_item_value(*ip, TRUE); } result = menu_driver(mpTrace, cmd); if (result == E_OK) { if (update_trace_menu(mpTrace) || cmd == REQ_TOGGLE_ITEM) { newtrace = 0; for (ip = menu_items(mpTrace); *ip; ip++) { if (item_value(*ip)) newtrace |= t_tbl[item_index(*ip)].mask; } trace(newtrace); Trace(("trace level interactively set to %s", tracetrace(_nc_tracing))); MvPrintw(LINES - 2, 0, "Trace level is %s\n", tracetrace(_nc_tracing)); refresh(); } } return result; } #endif /* TRACE */ /*****************************************************************************/ static int menu_number(void) { return item_index(current_item(mpBanner)) - (eBanner + 1); } static MENU * current_menu(void) { MENU *result; switch (menu_number()) { case eFile: result = mpFile; break; case eSelect: result = mpSelect; break; #ifdef TRACE case eTrace: result = mpTrace; break; #endif default: result = 0; break; } return result; } static void build_menus(char *filename) { static CONST_MENUS char *labels[] = { "File", "Select", #ifdef TRACE "Trace", #endif (char *) 0 }; static ITEM *items[SIZEOF(labels)]; ITEM **ip = items; CONST_MENUS char **ap; for (ap = labels; *ap; ap++) *ip++ = new_item(*ap, ""); *ip = (ITEM *) 0; mpBanner = menu_create(items, SIZEOF(labels) - 1, SIZEOF(labels) - 1, eBanner); set_menu_mark(mpBanner, ">"); build_file_menu(eFile); build_select_menu(eSelect, filename); #ifdef TRACE build_trace_menu(eTrace); #endif } static int move_menu(MENU * menu, MENU * current, int by_y, int by_x) { WINDOW *top_win = menu_win(menu); WINDOW *sub_win = menu_sub(menu); int y0, x0; int y1, x1; int result; getbegyx(top_win, y0, x0); y0 += by_y; x0 += by_x; getbegyx(sub_win, y1, x1); y1 += by_y; x1 += by_x; if ((result = mvwin(top_win, y0, x0)) != ERR) { #if defined(NCURSES_VERSION_PATCH) && (NCURSES_VERSION_PATCH < 20060218) sub_win->_begy = y1; sub_win->_begx = x1; #else mvwin(sub_win, y1, x1); #endif if (menu == current) { touchwin(top_win); wnoutrefresh(top_win); } } return result; } /* * Move the menus around on the screen, to test mvwin(). */ static void move_menus(MENU * current, int by_y, int by_x) { if (move_menu(mpBanner, current, by_y, by_x) != ERR) { erase(); wnoutrefresh(stdscr); move_menu(mpFile, current, by_y, by_x); move_menu(mpSelect, current, by_y, by_x); #ifdef TRACE move_menu(mpTrace, current, by_y, by_x); #endif doupdate(); } } static void show_status(int ch, MENU * menu) { move(LINES - 1, 0); printw("key %s, menu %d, mark %s, match %s", keyname(ch), menu_number(), menu_mark(menu), menu_pattern(menu)); clrtoeol(); refresh(); } static void perform_menus(void) { MENU *this_menu; MENU *last_menu = mpFile; int code = E_UNKNOWN_COMMAND; int cmd; int ch = ERR; #ifdef NCURSES_MOUSE_VERSION mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif menu_display(last_menu); for (;;) { if (ch != ERR) show_status(ch, last_menu); ch = menu_getc(mpBanner); /* * Provide for moving the menu around in the screen using shifted * cursor keys. */ switch (ch) { case KEY_SF: move_menus(last_menu, 1, 0); continue; case KEY_SR: move_menus(last_menu, -1, 0); continue; case KEY_SLEFT: move_menus(last_menu, 0, -1); continue; case KEY_SRIGHT: move_menus(last_menu, 0, 1); continue; } cmd = menu_virtualize(ch); switch (cmd) { /* * The banner menu acts solely to select one of the other menus. * Move between its items, wrapping at the left/right limits. */ case REQ_LEFT_ITEM: case REQ_RIGHT_ITEM: code = menu_driver(mpBanner, cmd); if (code == E_REQUEST_DENIED) { if (menu_number() > 0) code = menu_driver(mpBanner, REQ_FIRST_ITEM); else code = menu_driver(mpBanner, REQ_LAST_ITEM); } break; default: switch (menu_number()) { case eFile: code = perform_file_menu(cmd); break; case eSelect: code = perform_select_menu(cmd); break; #ifdef TRACE case eTrace: code = perform_trace_menu(cmd); break; #endif } if ((code == E_REQUEST_DENIED) && (cmd == KEY_MOUSE)) { code = menu_driver(mpBanner, cmd); } break; } if (code == E_OK) { this_menu = current_menu(); if (this_menu != last_menu) { move(1, 0); clrtobot(); box(menu_win(this_menu), 0, 0); refresh(); /* force the current menu to appear */ menu_display(this_menu); last_menu = this_menu; } } wrefresh(menu_win(last_menu)); if (code == E_UNKNOWN_COMMAND || code == E_NOT_POSTED) { if (menu_number() == eFile) break; beep(); } if (code == E_REQUEST_DENIED) beep(); continue; } #ifdef NCURSES_MOUSE_VERSION mousemask(0, (mmask_t *) 0); #endif } static void destroy_menus(void) { menu_destroy(mpFile); menu_destroy(mpSelect); #ifdef TRACE menu_destroy(mpTrace); #endif menu_destroy(mpBanner); } #if HAVE_RIPOFFLINE static int rip_footer(WINDOW *win, int cols) { wbkgd(win, A_REVERSE); werase(win); wmove(win, 0, 0); wprintw(win, "footer: %d columns", cols); wnoutrefresh(win); return OK; } static int rip_header(WINDOW *win, int cols) { wbkgd(win, A_REVERSE); werase(win); wmove(win, 0, 0); wprintw(win, "header: %d columns", cols); wnoutrefresh(win); return OK; } #endif /* HAVE_RIPOFFLINE */ static void usage(void) { static const char *const tbl[] = { "Usage: demo_menus [options] [menu-file]" ,"" ,"Options:" #if HAVE_RIPOFFLINE ," -f rip-off footer line (can repeat)" ," -h rip-off header line (can repeat)" #endif #ifdef TRACE ," -t mask specify default trace-level (may toggle with ^T)" #endif }; size_t n; for (n = 0; n < SIZEOF(tbl); n++) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int c; setlocale(LC_ALL, ""); while ((c = getopt(argc, argv, "a:de:fhmp:s:t:")) != -1) { switch (c) { #if HAVE_RIPOFFLINE case 'f': ripoffline(-1, rip_footer); break; case 'h': ripoffline(1, rip_header); break; #endif /* HAVE_RIPOFFLINE */ #ifdef TRACE case 't': trace((unsigned) strtoul(optarg, 0, 0)); break; #endif default: usage(); } } initscr(); noraw(); cbreak(); noecho(); if (has_colors()) { start_color(); init_pair(1, COLOR_RED, COLOR_BLACK); init_pair(2, COLOR_BLUE, COLOR_WHITE); } build_menus(argc > 1 ? argv[1] : 0); perform_menus(); destroy_menus(); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the curses menu library\n"); ExitProgram(EXIT_FAILURE); } #endif
Close