diff options
author | ache <ache@FreeBSD.org> | 1994-11-19 09:58:34 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1994-11-19 09:58:34 +0000 |
commit | 1b44a4bb6d4a79423cae7760c42617d81675417b (patch) | |
tree | 1e9381ca5e01f89aab90a76bc1a3dd292d67cbd9 /gnu/lib | |
parent | 45071d7640a3e9858ca4840888a16053dc25f01c (diff) | |
download | FreeBSD-src-1b44a4bb6d4a79423cae7760c42617d81675417b.zip FreeBSD-src-1b44a4bb6d4a79423cae7760c42617d81675417b.tar.gz |
Highlight only flen sized part while editing in line_edit()
Diffstat (limited to 'gnu/lib')
-rw-r--r-- | gnu/lib/libdialog/lineedit.c | 76 |
1 files changed, 56 insertions, 20 deletions
diff --git a/gnu/lib/libdialog/lineedit.c b/gnu/lib/libdialog/lineedit.c index 8096a3a..bb2c52a 100644 --- a/gnu/lib/libdialog/lineedit.c +++ b/gnu/lib/libdialog/lineedit.c @@ -28,7 +28,7 @@ */ int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, chtype attr, int first, unsigned char *result) { - int i, key, len; + int i, key, len, max_len, fix_len; chtype old_attr; static int input_x, scroll; static unsigned char instr[MAX_LEN+1]; @@ -50,18 +50,18 @@ int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, cht } wmove(dialog, box_y, box_x); wattrset(dialog, attr); - len = flen >= 0 ? MIN(flen,box_width) : box_width; - for (i = 0; i < len; i++) + fix_len = flen >= 0 ? MIN(flen-scroll,box_width) : box_width; + for (i = 0; i < fix_len; i++) waddch(dialog, instr[scroll+i] ? instr[scroll+i] : ' '); - wattrset(dialog, old_attr); len = strlen(instr); - len = MIN(len,box_width); - for ( ; i < len; i++) + wattrset(dialog, old_attr); + max_len = MIN(len-scroll,box_width); + for ( ; i < max_len; i++) waddch(dialog, instr[scroll+i]); - wattrset(dialog, attr); wmove(dialog, box_y, box_x + input_x); for (;;) { + wattrset(dialog, attr); wrefresh(dialog); key = wgetch(dialog); switch (key) { @@ -83,8 +83,13 @@ int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, cht case KEY_HOME: input_x = scroll = 0; wmove(dialog, box_y, box_x); - for (i = 0; i < box_width; i++) + fix_len = flen >= 0 ? MIN(flen,box_width) : box_width; + for (i = 0; i < fix_len; i++) waddch(dialog, instr[i] ? instr[i] : ' '); + wattrset(dialog, old_attr); + max_len = MIN(len,box_width); + for ( ; i < max_len; i++) + waddch(dialog, instr[i]); wmove(dialog, box_y, box_x); continue; case KEY_END: @@ -94,8 +99,13 @@ int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, cht input_x = i % box_width; scroll = i - input_x; wmove(dialog, box_y, box_x); - for (i = 0; i < box_width; i++) + fix_len = flen >= 0 ? MIN(flen-scroll,box_width) : box_width; + for (i = 0; i < fix_len; i++) waddch(dialog, instr[scroll+i] ? instr[scroll+i] : ' '); + wattrset(dialog, old_attr); + max_len = MIN(len-scroll,box_width); + for ( ; i < max_len; i++) + waddch(dialog, instr[scroll+i]); wmove(dialog, box_y, input_x + box_x); continue; case KEY_LEFT: @@ -104,8 +114,13 @@ int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, cht int oldscroll = scroll; scroll = scroll < box_width-1 ? 0 : scroll-(box_width-1); wmove(dialog, box_y, box_x); - for (i = 0; i < box_width; i++) - waddch(dialog, instr[scroll+input_x+i] ? instr[scroll+input_x+i] : ' '); + fix_len = flen >= 0 ? MIN(flen-scroll,box_width) : box_width; + for (i = 0; i < fix_len; i++) + waddch(dialog, instr[scroll+i] ? instr[scroll+i] : ' '); + wattrset(dialog, old_attr); + max_len = MIN(len-scroll,box_width); + for ( ; i < max_len; i++) + waddch(dialog, instr[scroll+i]); input_x = oldscroll - 1 - scroll; } else @@ -122,8 +137,13 @@ int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, cht if (input_x == box_width-1) { scroll++; wmove(dialog, box_y, box_x); - for (i = 0; i < box_width; i++) + fix_len = flen >= 0 ? MIN(flen-scroll,box_width) : box_width; + for (i = 0; i < fix_len; i++) waddch(dialog, instr[scroll+i] ? instr[scroll+i] : ' '); + wattrset(dialog, old_attr); + max_len = MIN(len-scroll,box_width); + for ( ; i < max_len; i++) + waddch(dialog, instr[scroll+i]); wmove(dialog, box_y, box_x + box_width - 1); } else { @@ -146,15 +166,21 @@ int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, cht int oldscroll = scroll; scroll = scroll < box_width-1 ? 0 : scroll-(box_width-1); wmove(dialog, box_y, box_x); - for (i = 0; i < box_width; i++) - waddch(dialog, instr[scroll+input_x+i] ? instr[scroll+input_x+i] : ' '); + fix_len = flen >= 0 ? MIN(flen-scroll,box_width) : box_width; + for (i = 0; i < fix_len; i++) + waddch(dialog, instr[scroll+i] ? instr[scroll+i] : ' '); input_x = oldscroll - 1 - scroll; } else input_x--; wmove(dialog, box_y, input_x + box_x); - for (i = input_x; i < box_width; i++) + fix_len = flen >= 0 ? MIN(flen-scroll,box_width) : box_width; + for (i = input_x; i < fix_len; i++) waddch(dialog, instr[scroll+i] ? instr[scroll+i] : ' '); + wattrset(dialog, old_attr); + max_len = MIN(len-scroll,box_width); + for ( ; i < max_len; i++) + waddch(dialog, instr[scroll+i]); wmove(dialog, box_y, input_x + box_x); } continue; @@ -175,13 +201,24 @@ int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, cht if (input_x == box_width-1) { scroll++; wmove(dialog, box_y, box_x); - for (i = 0; i < box_width-1; i++) + fix_len = flen >= 0 ? MIN(flen-scroll,box_width) : box_width; + for (i = 0; i < fix_len; i++) + waddch(dialog, instr[scroll+i] ? instr[scroll+i] : ' '); + wattrset(dialog, old_attr); + max_len = MIN(len-scroll,box_width); + for ( ; i < max_len; i++) waddch(dialog, instr[scroll+i]); + wmove(dialog, box_y, input_x + box_x); } else { wmove(dialog, box_y, input_x + box_x); - for (i = input_x; i < box_width; i++) + fix_len = flen >= 0 ? MIN(flen-scroll,box_width) : box_width; + for (i = input_x; i < fix_len; i++) waddch(dialog, instr[scroll+i] ? instr[scroll+i] : ' '); + wattrset(dialog, old_attr); + max_len = MIN(len-scroll,box_width); + for ( ; i < max_len; i++) + waddch(dialog, instr[scroll+i]); wmove(dialog, box_y, ++input_x + box_x); } } else @@ -193,9 +230,8 @@ int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, cht ret: wattrset(dialog, old_attr); wmove(dialog, box_y, box_x); - len = strlen(instr); - len = MIN(len,box_width); - for (i = 0; i < len; i++) + max_len = MIN(len-scroll,box_width); + for (i = 0; i < max_len; i++) waddch(dialog, instr[scroll+i]); wmove(dialog, box_y, input_x + box_x); wrefresh(dialog); |