diff options
author | Andrey A. Chernov <ache@FreeBSD.org> | 1995-02-23 22:36:56 +0000 |
---|---|---|
committer | Andrey A. Chernov <ache@FreeBSD.org> | 1995-02-23 22:36:56 +0000 |
commit | fdcf149868e1b18e34e9777a82e5e7162404b72d (patch) | |
tree | c6725ce63fd4e727d857231f2cd03d2561d7be89 | |
parent | b106f3b2551f4496cdfe9134336e01c360677dc7 (diff) | |
download | src-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
-rw-r--r-- | gnu/lib/libdialog/help.c | 24 | ||||
-rw-r--r-- | gnu/lib/libdialog/msgbox.c | 7 | ||||
-rw-r--r-- | gnu/lib/libdialog/notify.c | 32 |
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); |