X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fdemo_menus.c;h=857dfd626f365afe01d13c276194a90c3bce3246;hp=7fe0ea37394dab003ead0e3b3e9eb243f83c8a71;hb=119b5a6788c26bf7dcc99fcfd54e072946352a93;hpb=2a32bee362db64f5a06b2124976b928ac3faa578 diff --git a/test/demo_menus.c b/test/demo_menus.c index 7fe0ea37..857dfd62 100644 --- a/test/demo_menus.c +++ b/test/demo_menus.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 2005-2015,2016 Free Software Foundation, Inc. * + * Copyright (c) 2005-2017,2019 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 +26,7 @@ * authorization. * ****************************************************************************/ /* - * $Id: demo_menus.c,v 1.59 2016/03/27 00:02:01 tom Exp $ + * $Id: demo_menus.c,v 1.69 2019/08/24 21:41:50 tom Exp $ * * Demonstrate a variety of functions from the menu library. * Thomas Dickey - 2005/4/9 @@ -75,11 +75,8 @@ top_row - #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 { @@ -114,6 +111,18 @@ static bool loaded_file = FALSE; static char empty[1]; +#ifdef TRACE +static void failed(const char *s) GCC_NORETURN; + +static void +failed(const char *s) +{ + perror(s); + endwin(); + ExitProgram(EXIT_FAILURE); +} +#endif + /* Common function to allow ^T to toggle trace-mode in the middle of a test * so that trace-files can be made smaller. */ @@ -186,9 +195,9 @@ menu_offset(MenuNo number) int result = 0; if (okMenuNo(number)) { - int spc_desc, spc_rows, spc_cols; - + int spc_rows; #ifdef NCURSES_VERSION + int spc_desc, spc_cols; menu_spacing(mpBanner, &spc_desc, &spc_rows, &spc_cols); #else spc_rows = 0; @@ -300,12 +309,11 @@ menu_create(ITEM ** items, int count, int ncols, MenuNo number) 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; + int count; count = item_count(m); Trace(("menu_destroy %p count %d", (void *) m, count)); @@ -420,7 +428,6 @@ build_select_menu(MenuNo number, char *filename) && (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); MENU_DATA *list = typeCalloc(MENU_DATA, size + 1); @@ -433,6 +440,7 @@ build_select_menu(MenuNo number, char *filename) if (fp != 0) { if (fread(blob, sizeof(char), size, fp) == size) { bool mark = TRUE; + unsigned j, k; for (j = k = 0; j < size; ++j) { if (mark) { list[k++].name = blob + j; @@ -544,27 +552,31 @@ static char * tracetrace(unsigned tlevel) { static char *buf; + static size_t need = 12; 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); + if (!buf) + failed("tracetrace"); } - sprintf(buf, "0x%02x = {", tlevel); + _nc_SPRINTF(buf, _nc_SLIMIT(need) "0x%02x = {", tlevel); if (tlevel == 0) { - sprintf(buf + strlen(buf), "%s, ", t_tbl[0].name); + _nc_STRCAT(buf, t_tbl[0].name, need); + _nc_STRCAT(buf, ", ", need); } 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, ", "); + _nc_STRCAT(buf, t_tbl[n].name, need); + _nc_STRCAT(buf, ", ", need); } } if (buf[strlen(buf) - 2] == ',') buf[strlen(buf) - 2] = '\0'; - return (strcat(buf, "}")); + _nc_STRCAT(buf, "}", need); + return buf; } /* fake a dynamically reconfigurable menu using the 0th entry to deselect @@ -574,13 +586,14 @@ static bool update_trace_menu(MENU * m) { ITEM **items; - ITEM *i, **p; + ITEM *i; bool changed = FALSE; items = menu_items(m); i = current_item(m); if (i == items[0]) { if (item_value(i)) { + ITEM **p; for (p = items + 1; *p != 0; p++) if (item_value(*p)) { set_item_value(*p, FALSE); @@ -596,7 +609,6 @@ perform_trace_menu(int cmd) /* interactively set the trace level */ { ITEM **ip; - unsigned newtrace; int result; for (ip = menu_items(mpTrace); *ip; ip++) { @@ -612,7 +624,7 @@ perform_trace_menu(int cmd) if (result == E_OK) { if (update_trace_menu(mpTrace) || cmd == REQ_TOGGLE_ITEM) { - newtrace = 0; + unsigned newtrace = 0; for (ip = menu_items(mpTrace); *ip; ip++) { if (item_value(*ip)) { MENU_DATA *td = (MENU_DATA *) item_userptr(*ip); @@ -754,7 +766,7 @@ move_menus(MENU * current, int by_y, int by_x) } } -#ifdef KEY_RESIZE +#if defined(KEY_RESIZE) && NCURSES_EXT_FUNCS static void resize_menu(MENU ** menu) { @@ -782,7 +794,7 @@ resize_menus(MENU * current) resize_menu(&mpTrace); #endif } -#endif +#endif /* defined(KEY_RESIZE) && NCURSES_EXT_FUNCS */ static void show_status(int ch, MENU * menu) @@ -836,7 +848,7 @@ perform_menus(void) case KEY_SRIGHT: move_menus(last_menu, 0, 1); continue; -#ifdef KEY_RESIZE +#if defined(KEY_RESIZE) && NCURSES_EXT_FUNCS case KEY_RESIZE: resize_menus(last_menu); continue;