aboutsummaryrefslogtreecommitdiff
path: root/gnu/lib/libdialog
diff options
context:
space:
mode:
authorAndrey A. Chernov <ache@FreeBSD.org>1995-02-23 22:36:56 +0000
committerAndrey A. Chernov <ache@FreeBSD.org>1995-02-23 22:36:56 +0000
commitfdcf149868e1b18e34e9777a82e5e7162404b72d (patch)
treec6725ce63fd4e727d857231f2cd03d2561d7be89 /gnu/lib/libdialog
parentb106f3b2551f4496cdfe9134336e01c360677dc7 (diff)
downloadsrc-fdcf149868e1b18e34e9777a82e5e7162404b72d.tar.gz
src-fdcf149868e1b18e34e9777a82e5e7162404b72d.zip
Simplify notify()
Fix dupwin usage, now it really restore screen Disable helpline while helpfile displayed Fix helpfile borders Fix mesgbox range computing
Notes
Notes: svn path=/head/; revision=6674
Diffstat (limited to 'gnu/lib/libdialog')
-rw-r--r--gnu/lib/libdialog/help.c24
-rw-r--r--gnu/lib/libdialog/msgbox.c7
-rw-r--r--gnu/lib/libdialog/notify.c32
3 files changed, 30 insertions, 33 deletions
diff --git a/gnu/lib/libdialog/help.c b/gnu/lib/libdialog/help.c
index eee04ca9b5a9..fbc2e833e25c 100644
--- a/gnu/lib/libdialog/help.c
+++ b/gnu/lib/libdialog/help.c
@@ -64,35 +64,45 @@ display_helpfile(void)
struct stat sb;
char msg[80], *buf;
static int in_help = FALSE;
+ char *savehline = NULL;
if (in_help) return; /* dont call help when you're in help */
if (_helpfile != NULL) {
- w = dupwin(curscr);
+ if (_helpline != NULL) {
+ savehline = _helpline;
+ _helpline = NULL;
+ }
+ if ((w = dupwin(newscr)) == NULL) {
+ dialog_notify("No memory to dup previous screen\n");
+ goto ret;
+ }
if ((f = fopen(_helpfile, "r")) == NULL) {
sprintf(msg, "Can't open helpfile : %s\n", _helpfile);
dialog_notify(msg);
- return;
+ goto ret;
}
if (fstat(fileno(f), &sb)) {
sprintf(msg, "Can't stat helpfile : %s\n", _helpfile);
dialog_notify(msg);
- return;
+ goto ret;
}
if ((buf = (char *) malloc( sb.st_size )) == NULL) {
sprintf(msg, "Could not malloc space for helpfile : %s\n", _helpfile);
dialog_notify(msg);
- return;
+ goto ret;
}
if (fread(buf, 1, sb.st_size, f) != sb.st_size) {
sprintf(msg, "Could not read entire help file : %s", _helpfile);
dialog_notify(msg);
- return;
+ free(buf);
+ goto ret;
}
buf[sb.st_size] = 0;
in_help = TRUE;
dialog_mesgbox("Online help", buf, LINES-4, COLS-4);
in_help = FALSE;
+ touchwin(w);
wrefresh(w);
delwin(w);
free(buf);
@@ -100,6 +110,10 @@ display_helpfile(void)
/* do nothing */
}
+ret:
+ if (savehline != NULL)
+ _helpline = savehline;
+
return;
} /* display_helpfile() */
diff --git a/gnu/lib/libdialog/msgbox.c b/gnu/lib/libdialog/msgbox.c
index d5966c441324..abe69dd84fe8 100644
--- a/gnu/lib/libdialog/msgbox.c
+++ b/gnu/lib/libdialog/msgbox.c
@@ -122,12 +122,13 @@ dialog_mesgbox(unsigned char *title, unsigned char *prompt, int height, int widt
WINDOW *dialog;
if (height < 0)
- height = strheight(prompt)+2+2*(!!pause);
+ height = strheight(prompt)+2+2;
if (width < 0) {
i = strwidth(prompt);
- j = strwidth(title);
+ j = ((title != NULL) ? strwidth(title) : 0);
width = MAX(i,j)+4;
}
+ width = MAX(width,10);
if (width > COLS)
width = COLS;
@@ -158,8 +159,8 @@ dialog_mesgbox(unsigned char *title, unsigned char *prompt, int height, int widt
waddstr(dialog, title);
waddch(dialog, ' ');
}
- wattrset(dialog, dialog_attr);
+ wattrset(dialog, border_attr);
wmove(dialog, height-3, 0);
waddch(dialog, ACS_LTEE);
for (i = 0; i < width-2; i++)
diff --git a/gnu/lib/libdialog/notify.c b/gnu/lib/libdialog/notify.c
index 27d1cc0b2b87..9605168adbec 100644
--- a/gnu/lib/libdialog/notify.c
+++ b/gnu/lib/libdialog/notify.c
@@ -27,34 +27,16 @@ dialog_notify(char *msg)
* Desc: display an error message
*/
{
- int li, co, mco;
- char *p;
WINDOW *w;
- /* determine # of lines in msg and max colwidth */
- li = 0;
- co = 0;
- mco = 0;
- p = msg;
- while (*p) {
- if (*p == '\n') {
- li++;
- if (co > mco) mco = co;
- co = 0;
- }
- p++;
- co++;
+ w = dupwin(newscr);
+ if (w == NULL) {
+ endwin();
+ fprintf(stderr, "\ndupwin(newscr) failed, malloc memory corrupted\n");
+ exit(1);
}
- if (co < mco) co = mco;
-
- li += 5;
- if (li > LINES) li = LINES;
- co += 4;
- if (co < 20) co = 20;
- if (co > COLS) co = COLS;
-
- w = dupwin(curscr);
- dialog_msgbox("Message", msg, li, co, TRUE);
+ dialog_msgbox("Message", msg, -1, -1, TRUE);
+ touchwin(w);
wrefresh(w);
delwin(w);