X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fdemo_menus.c;h=02f7ca3312fffb7ec5bebb46a20a0b2b9caa8110;hp=857dfd626f365afe01d13c276194a90c3bce3246;hb=HEAD;hpb=efa78d11c3ea7f51c7078b64a34c98b44ecb0e1a diff --git a/test/demo_menus.c b/test/demo_menus.c index 857dfd62..7b0bf303 100644 --- a/test/demo_menus.c +++ b/test/demo_menus.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2005-2017,2019 Free Software Foundation, Inc. * + * Copyright 2019-2022,2023 Thomas E. Dickey * + * Copyright 2003-2016,2017 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 * @@ -26,7 +27,7 @@ * authorization. * ****************************************************************************/ /* - * $Id: demo_menus.c,v 1.69 2019/08/24 21:41:50 tom Exp $ + * $Id: demo_menus.c,v 1.80 2023/05/27 20:13:10 tom Exp $ * * Demonstrate a variety of functions from the menu library. * Thomas Dickey - 2005/4/9 @@ -112,7 +113,7 @@ static bool loaded_file = FALSE; static char empty[1]; #ifdef TRACE -static void failed(const char *s) GCC_NORETURN; +static GCC_NORETURN void failed(const char *s); static void failed(const char *s) @@ -139,7 +140,7 @@ wGetchar(WINDOW *win) } else { _nc_tracing = save_trace; } - trace(_nc_tracing); + curses_trace(_nc_tracing); if (_nc_tracing) Trace(("TOGGLE-TRACING ON")); } @@ -307,7 +308,7 @@ menu_create(ITEM ** items, int count, int ncols, MenuNo number) } static void -menu_destroy(MENU * m) +menu_destroy(MENU * m, int itemsToo) { Trace(("menu_destroy %p", (void *) m)); if (m != 0) { @@ -330,18 +331,18 @@ menu_destroy(MENU * m) Trace(("freeing blob %p", blob)); free((void *) blob); } - free(items); - items = 0; } -#ifdef TRACE - if ((count > 0) && (m == mpTrace)) { - ITEM **ip = items; - if (ip != 0) { - while (*ip) - free(*ip++); + if (count > 0 && itemsToo) { + if (itemsToo & 1) { + ITEM **ip = items; + if (ip != 0) { + while (*ip) + free_item(*ip++); + } } + if (itemsToo & 2) + free(items); } -#endif } } @@ -564,7 +565,7 @@ tracetrace(unsigned tlevel) } _nc_SPRINTF(buf, _nc_SLIMIT(need) "0x%02x = {", tlevel); if (tlevel == 0) { - _nc_STRCAT(buf, t_tbl[0].name, need); + _nc_STRCAT(buf, t_tbl[0].name ? t_tbl[0].name : "", need); _nc_STRCAT(buf, ", ", need); } else { for (n = 1; t_tbl[n].name != 0; n++) @@ -631,7 +632,7 @@ perform_trace_menu(int cmd) newtrace |= td->mask; } } - trace(newtrace); + curses_trace(newtrace); Trace(("trace level interactively set to %s", tracetrace(_nc_tracing))); MvWPrintw(status, 1, 0, @@ -924,19 +925,18 @@ perform_menus(void) } if (code == E_REQUEST_DENIED) beep(); - continue; } } static void destroy_menus(void) { - menu_destroy(mpFile); - menu_destroy(mpSelect); + menu_destroy(mpFile, 1); + menu_destroy(mpSelect, 3); #ifdef TRACE - menu_destroy(mpTrace); + menu_destroy(mpTrace, 1); #endif - menu_destroy(mpBanner); + menu_destroy(mpBanner, 1); } #if HAVE_RIPOFFLINE @@ -976,51 +976,60 @@ call_files(int code) } static void -usage(void) +usage(int ok) { static const char *const tbl[] = { "Usage: demo_menus [options] [menu-file]" ,"" + ,USAGE_COMMON ,"Options:" #if HAVE_RIPOFFLINE - ," -f rip-off footer line (can repeat)" - ," -h rip-off header line (can repeat)" + ," -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)" + ," -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); + ExitProgram(ok ? EXIT_SUCCESS : EXIT_FAILURE); } +/* *INDENT-OFF* */ +VERSION_COMMON() +/* *INDENT-ON* */ int main(int argc, char *argv[]) { - int c; + int ch; setlocale(LC_ALL, ""); + START_TRACE(); - while ((c = getopt(argc, argv, "fht:")) != -1) { - switch (c) { + while ((ch = getopt(argc, argv, OPTS_COMMON "FHt:")) != -1) { + switch (ch) { #if HAVE_RIPOFFLINE - case 'f': + case 'F': ripoffline(-1, rip_footer); break; - case 'h': + case 'H': ripoffline(1, rip_header); break; #endif /* HAVE_RIPOFFLINE */ #ifdef TRACE case 't': - trace((unsigned) strtoul(optarg, 0, 0)); + curses_trace((unsigned) strtoul(optarg, 0, 0)); break; #endif + case OPTS_VERSION: + show_version(argv); + ExitProgram(EXIT_SUCCESS); default: - usage(); + usage(ch == OPTS_USAGE); + /* NOTREACHED */ } }