Module Name: src Committed By: martin Date: Wed Jan 9 19:43:37 UTC 2019
Modified Files: src/usr.bin/menuc: mdb.c menu_sys.def Log Message: Allow argument expansion in menu titles as well. To generate a diff of this commit: cvs rdiff -u -r1.48 -r1.49 src/usr.bin/menuc/mdb.c cvs rdiff -u -r1.63 -r1.64 src/usr.bin/menuc/menu_sys.def Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/menuc/mdb.c diff -u src/usr.bin/menuc/mdb.c:1.48 src/usr.bin/menuc/mdb.c:1.49 --- src/usr.bin/menuc/mdb.c:1.48 Fri Jan 4 15:27:19 2019 +++ src/usr.bin/menuc/mdb.c Wed Jan 9 19:43:37 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: mdb.c,v 1.48 2019/01/04 15:27:19 martin Exp $ */ +/* $NetBSD: mdb.c,v 1.49 2019/01/09 19:43:37 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -41,7 +41,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: mdb.c,v 1.48 2019/01/04 15:27:19 martin Exp $"); +__RCSID("$NetBSD: mdb.c,v 1.49 2019/01/09 19:43:37 martin Exp $"); #endif @@ -172,10 +172,11 @@ write_menu_file(char *initcode) "typedef struct menudesc menudesc;\n" "typedef struct menu_ent menu_ent;\n" "struct menu_ent {\n" - " const char *opt_name;\n" - "#ifdef MENU_EXPANDS\n" - " const char *opt_exp_name;\n" - "#endif\n" + " const char *opt_name;\n"); + if (do_expands) + (void)fprintf(out_file, + " const char *opt_exp_name;\n"); + (void)fprintf(out_file, " int opt_menu;\n" " int opt_flags;\n" " int (*opt_action)(menudesc *, void *);\n" @@ -187,7 +188,11 @@ write_menu_file(char *initcode) "#define OPT_NOSHORT 16\n" "#define OPT_NOMENU -1\n\n" "struct menudesc {\n" - " const char *title;\n" + " const char *title;\n"); + if (do_expands) + (void)fprintf(out_file, + " const char *exp_title;\n"); + (void)fprintf(out_file, " int y, x;\n" " int h, w;\n" " int mopt;\n" @@ -367,8 +372,13 @@ write_menu_file(char *initcode) (void)fprintf(out_file, "static struct menudesc menu_def[] = {\n"); for (i = 0; i < menu_no; i++) { (void)fprintf(out_file, - "\t{%s,%d,%d,%d,%d,%d,%d,0,0,optent%d,NULL,NULL,", - menus[i]->info->title, menus[i]->info->y, + "\t{%s,", menus[i]->info->title); + if (do_expands) + (void)fprintf(out_file, + "NULL,"); + (void)fprintf(out_file, + "%d,%d,%d,%d,%d,%d,0,0,optent%d,NULL,NULL,", + menus[i]->info->y, menus[i]->info->x, menus[i]->info->h, menus[i]->info->w, menus[i]->info->mopt, menus[i]->info->numopt, i); @@ -422,7 +432,10 @@ write_menu_file(char *initcode) (void)fprintf(out_file, "},\n"); } - (void)fprintf(out_file, "{NULL, 0, 0, 0, 0, 0, 0, 0, 0, " + (void)fprintf(out_file, "{NULL"); + if (do_expands) + (void)fprintf(out_file, ", NULL"); + (void)fprintf(out_file, ", 0, 0, 0, 0, 0, 0, 0, 0, " "NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL"); if (do_expands) (void)fprintf(out_file, ", NULL"); Index: src/usr.bin/menuc/menu_sys.def diff -u src/usr.bin/menuc/menu_sys.def:1.63 src/usr.bin/menuc/menu_sys.def:1.64 --- src/usr.bin/menuc/menu_sys.def:1.63 Sun Jan 6 11:08:34 2019 +++ src/usr.bin/menuc/menu_sys.def Wed Jan 9 19:43:37 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: menu_sys.def,v 1.63 2019/01/06 11:08:34 martin Exp $ */ +/* $NetBSD: menu_sys.def,v 1.64 2019/01/09 19:43:37 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -146,7 +146,14 @@ init_menu(menudesc *m) if (!(m->mopt & MC_NOSHORTCUT)) wadd += 3; - if (m->title && *(title = MSG_XLAT(m->title)) != 0) { + title = m->title; +#ifdef MENU_EXPANDS + if (m->exp_title) + title = m->exp_title; +#endif + if (title) + title = MSG_XLAT(title); + if (title && title[0] != 0) { /* Allow multiple line titles */ for (tp = title; (ep = strchr(tp, '\n')); tp = ep + 1) { i = ep - tp; @@ -330,6 +337,7 @@ draw_menu(menudesc *m, void *arg) int tadd; int hasexit = (m->mopt & MC_NOEXITOPT ? 0 : 1); const char *tp, *ep; + const char *title; hasbox = (m->mopt & MC_NOBOX ? 0 : 1); @@ -337,8 +345,13 @@ draw_menu(menudesc *m, void *arg) wclear(m->mw); tadd = hasbox; - if (m->title) { - for (tp = MSG_XLAT(m->title); ; tp = ep + 1) { + title = m->title; +#ifdef MENU_EXPANDS + if (m->exp_title) + title = m->exp_title; +#endif + if (title) { + for (tp = MSG_XLAT(title); ; tp = ep + 1) { ep = strchr(tp , '\n'); mvwaddnstr(m->mw, tadd++, hasbox + 1, tp, ep ? ep - tp : -1); @@ -505,6 +518,10 @@ free_exp_menu_items(menudesc *m) { int i; + if (m->exp_title != NULL) { + free(__UNCONST(m->exp_title)); + m->exp_title = NULL; + } for (i = 0; i < m->numopts; i++) { if (m->opts[i].opt_exp_name != NULL) { free(__UNCONST(m->opts[i].opt_exp_name)); @@ -841,6 +858,9 @@ new_menu(const char *title, menu_ent *op /* Set Entries */ m->title = title; +#ifdef MENU_EXPANDS + m->exp_title = NULL; +#endif m->opts = opts; m->numopts = numopts; m->x = x;